430 likes | 762 Views
Predicate calculus First order Logic. Choopan Rattanapoka 357353 – Introduction to AI. ข้อจำกัดของ Propositional Logic. ทบทวน Propositional Logic เป็นการแทนประโยคด้วยสัญลักษณ์ เช่น สมชายเป็นคน (P) สมปองเป็นคน (Q) สมหญิงเป็นคน (R)
E N D
Predicate calculus First order Logic ChoopanRattanapoka 357353 – Introduction to AI
ข้อจำกัดของ Propositional Logic • ทบทวน • Propositional Logic เป็นการแทนประโยคด้วยสัญลักษณ์ เช่น • สมชายเป็นคน (P) • สมปองเป็นคน (Q) • สมหญิงเป็นคน (R) • จะเห็นได้ว่าจะต้องใช้สัญลักษณ์ 1 ตัวเพื่อแทนประโยค 1 ประโยคไม่สามารถจะเข้าถึงค่าที่มีคุณลักษณ์เหมือนกันเฉพาะตัวได้ • Predicate calculus (Predicate Logic) สามารถที่จะทำให้ประโยคที่มีคุณลักษณะเหมือนกันเข้าถึงค่าเฉพาะแต่ละตัวได้ • Human(สมชาย), Human(สมปอง), Human(สมหญิง) • Human( ) เรียกว่า Predicate
Predicate Logic • บางครั้งเรียกว่า Predicate Calculus • เป็นกระบวนการตรรกะที่มีความซับซ้อนกว่า Propositional Logic • แต่มีการอนุมานเพื่อให้ได้ค่าความจริงใหม่จากค่าความจริงที่มีอยู่แล้ว • องค์ประกอบพื้นฐานของ Predicate Logic จะประกอบด้วย • ตัวอักษร (Alphabet) • ส่วนแสดงความสัมพันธ์ (Predicate) • ตัวเชื่อม (Connective) • ตัวบ่งปริมาณ (Quantifier)
Predicate Logic : ตัวอักษร • ตัวอักษร เป็นองค์ประกอบที่เป็นส่วนของตัวอักษรที่ใช้ในกระบวนการของ Predicate Logic ประกอบด้วย • ค่าคงที่ (Constant) เป็นค่าที่ใช้บอกถึงความหมายที่ชัดเจนแน่นอน เช่น • GARFIELD แทนความหมายของแมว • SURASAK แทนความหมายของคน เพศชาย • ตัวแปร (Variable) คือ การระบุถึงความหมายในภาพรวม ไม่เฉพาะเจาะจง • cat หมายถึงสัตว์ที่เป็นแมว แต่ไม่ได้ระบุถึงพันธุ์ • father หมายถึงพ่อคน แต่ไม่ได้ระบุว่าพ่อใคร • ฟังก์ชัน (Function) คือส่วนที่ใช้ในการบ่งบอกโดเมนขององค์ประกอบ • cat(GARFIELD) เป็นฟังก์ชันสำหรับหาว่า GARFIELD เป็นแมวพันธุ์อะไร • father(SURASAK) เป็นฟังก์ชันสำหรับหาว่าพ่อของ SURASAK คือใคร
Predicate Logic : ส่วนแสดงความสัมพันธ์ • เป็นส่วนที่ใช้แสดงความสัมพันธ์ระหว่างองค์ประกอบ ซึ่งจะช่วยขยายความเข้าใจในค่าที่แสดงว่ามีความสัมพันธ์กันอย่างไร เช่น • MAN(SURASAK) SURASAK เป็นผู้ชาย • LIKES(BOB, PUI) BOB ชอบ PUI • OLDER(SURASAK, father(CHAI)) SURASAK แก่กว่าพ่อของ CHAI
Predicate Logic : ตัวเชื่อม • ตัวเชื่อมใช้ในการเชื่อมระหว่างส่วนแสดงความสัมพันธ์ (Predicate) เข้าด้วยกัน มีเครื่องหมายต่างๆ ดังนี้ • นิเสธ ()ทำให้กลับค่าความจริง • และ () เช่น บ๊อบหล่อและนิสัยดี เขียนได้เป็น • HANDSOME(BOB) NICE(BOB) • หรือ () เช่น กรแก่กว่าบ๊อบหรือส้ม • OLDER(KORN, BOB) OLDER(KORN, SOM) • ถ้า ... แล้ว () เช่น ถ้าบ๊อบดำแล้วบ๊อบจะหล่อ • BLACK(BOB) HANDSOME(BOB) • ก็ต่อเมื่อ () เช่น บ๊อบจะบวชก็ต่อเมื่ออายุ 25 ปี • MONK(BOB) AGE25(BOB)
Predicate Logic : ตัวบ่งปริมาณ • เป็น ค่าที่ใช้ชี้วัดปริมาณของประโยค เพื่อใช้ในการบ่งชี้ถึงจำนวนหรือขนาด ใน Predicate Logic ทำให้เกิด First Order Logic มีอยู่ 2 ประเภทคือ • ตัวบ่งปริมาณสากล(Universal Quantifier) บางครั้งเรียก “For All” จะใช้เครื่องหมาย จะเป็นจริงเมื่อทุกค่าเป็นจริง • คนไทยจะเลือกตั้งได้ตอนอายุ 18 ปี • x(THAI18(x) VOTE(x)) • ตัวบ่งปริมาณบางส่วน(Existential Quantifier) บางครั้งเรียก “For Some”จะใช้เครื่องหมาย จะเป็นจริงถ้าค่าบางค่าเป็นจริง • คนบางคนเล่น facebookและ twitter • x(FACEBOOK(x) TWITTER(x))
ค่าควรระวังในการใช้ Quantifier • ปกติการใช้ ประโยคหลักจะเชื่อมกันด้วยไม่ใช่ • ตัวอย่าง : นักศึกษาทุกคนที่เรียน ECT จะเก่ง • x( At(x, ECT) smart(x) ) • ผิดเพราะจะหมายความว่า “ทุกคนที่เรียน ECT และ ทุกคนเก่ง” • x( At(x, ECT) smart(x) ) ถูก • ปกติการใช้ ประโยคหลักจะเชื่อมกันด้วยไม่ใช่ • ตัวอย่าง : นักศึกษาบางคนที่เรียน ECT จะเก่ง • x( At(x, ECT) smart(x) ) • ผิดเพราะประโยคสามารถเป็นจริงได้ ถึงคนที่เก่งจะไม่เรียน ECT • x(At(x, ECT) smart(x) ) ถูก
ความสัมพันธ์ของ และ • x P(x) x P(x) • x P(x) x P(x) • x P(x) x P(x) • x P(x) x P(x) ตัวอย่าง : ทุกคนชอบไอศครีม x Loves(x, ICE-CREAM) สามารถเขียนได้อีกอย่าง x Loves(x, ICE-CREAM)
Nested Quantifier • บางครั้งความต้องการที่จะแสดงประโยคที่ซับซ้อนมากขึ้น จะมีการใช้ตัวบ่งปริมาณหลายตัว เช่น • พี่น้องคือญาติ x y Brother(x,y) Sibling(x,y) • x y y xสามารถเขียน x,yได้เพื่อให้ดูง่ายขึ้น • xyyx สามารถเขียน x,yได้เพื่อให้ดูง่ายขึ้น • x yไม่เหมือนกับ yx • x y Loves(x,y) • มีบางคนที่รักทุกๆคนในโลก • yxLoves(x,y) • ทุกๆคนในโลกนี้ถูกใครบางคนรัก
แบบฝึกหัด • จงแปลงข้อความต่อไปนี้ให้อยู่ในรูปของ First Order Logic • คนทุกคนรักสุนัข • คนบางคนรักแมว • สุนัขบางตัวไม่ชอบแมว • คนที่ชอบแมวเป็นคนดีแต่ไม่มีความสุข
Normal Form • เพื่อให้คอมพิวเตอร์สามารถทำการอนุมานได้ง่ายขึ้น ควรจะเปลี่ยนประโยคต่างๆให้อยู่ในรูปของ “Normal Form” • ทุกประโยคใน FOL สามารถที่จะแปลงให้อยู่ในรูปของ Normal Form ได้ • Conjunctive normal form (CNF) • ทุกประโยคจะเกิดจากเชื่อมต่อกันของประโยคย่อยด้วย conjunction () และในประโยคย่อยจะประกอบด้วยคำที่เชื่อมต่อกันด้วย disjunction () • (P(x) R(x,y)) (S(y) R(y,z)) T(y)
การอนุมานใน First Order Logic (FOL) • เราไม่สามารถใช้ Truth table เพื่อแก้ไขปัญหาของ FOL เนื่องจากใน FOL มีตัวแปร(variables) ทำให้ตาราง Truth table สามารถมีค่าความเป็นไปได้เป็น infinity • Robinson (1965) เสนอวิธีแก้ไขปัญหาการพิสูจน์ค่าใน FOL ด้วย algorithm ที่ชื่อว่า resolution refutation(ซึ่งสามารถใช้กับ propositional logic ก็ได้) • Resolution • (A B) (B C) อนุมานได้เป็น (A C) • (A B) (B C)อนุมานได้เป็น (A C)
Resolution Refutation • การพิสูจน์ประโยค p สามารถอนุมานจากเซ็ตของประโยคใน KB • เปลี่ยน p และประโยคใน KB ให้อยู่ในรูปของ CNF • ทำซ้ำจนกระทั่งได้ประโยคว่าง • หาประโยคย่อย 2 ประโยคที่สามารถทำ resolution ได้และยังไม่เคยถูกใช้มาก่อน • นำ 2 ประโยคย่อยนั้นเข้ากฎ resolution เพิ่งสร้างประโยคย่อยใหม่ • ถ้าการทำงานสิ้นสุดลงด้วยประโยคว่างเปล่า(null, false) ถือว่าพิสูจน์ p ได้ไม่เช่นนั้นก็คือ p ไม่สามารถพิสูจน์ได้ • ปัญหาของ Resolution Refutation กับ FOL • จะเปลี่ยนประโยคให้อยู่ในรูป CNF ได้อย่างไรเมื่อมี Quantifier ? • จะรู้ได้อย่างไรว่าประโยค 2 ประโยคขัดแย้งกันในเมื่อมีตัวแปรอยู่ ?
การเปลี่ยนประโยคให้อยู่ในรูป CNF(1) 1. กำจัดตัวเชื่อม ด้วยการใช้กฎMaterial Equivalent (Equiv) • P Q (P Q) (Q P) 2. กำจัดตัวเชื่อม ด้วยการใช้กฎ Material Implication (Impl) • P Q P Q 3. นำตัว negation () กระจายเข้าไปข้างในประโยค • P P Double negation • (P Q) P Q Demorgan • (P Q) P Q Demorgan • x P(x) x P(x) • x P(x) x P(x)
การเปลี่ยนประโยคให้อยู่ในรูป CNF(2) 4. ทำ standardize โดยการเปลี่ยนชื่อตัวแปรของแต่ละประโยคย่อยไม่ให้ซ้ำกัน • x(P(x)) x(Q(x)) x(P(x)) y(Q(y)) 5. เลื่อน Quantifier ทุกตัวมาทางด้านซ้ายของประโยคโดยรักษาลำดับไว้ • x(P(x)) y(Q(y)) xy(P(x) Q(y)) 6. ใช้วิธี Skolemizationเพื่อกำจัด 7. ลบ ออกจากประโยคให้หมด 8. ใช้ Distributive law เปลื่ยนให้อยู่ในรูปของ CNF • P (Q R) (P Q) (P R) 9. แยกประโยคใหญ่ออกเป็นประโยคย่อยๆโดยใช้ เป็นตัวแยก 10. ทำ standardize ตัวแปรของแต่ละประโยคย่อยอีกรอบหนึ่ง
วิธี Skolemization • เป็นวิธีที่ใช้เปลี่ยนประโยคที่มีExistential Quantifier()เป็นประโยคที่ไม่มี • จะทำการกำจัด ด้วยการแทนที่ตัวแปรของ ด้วย skolem function ซึ่ง argument ของ function จะเป็นตัวแปรของ universal quantifier ที่อยู่ใน scope ของ ที่จะกำจัด • ถ้า ที่ต้องการจะกำจัดไม่อยู่ใน scope ของ universal quantifier ตัวใดเลย ก็จะแทนที่ด้วย skolem function ที่ไม่มี argument ซึ่งก็คือ ค่าคงที่
ตัวอย่าง : Skolemization • xy (Person(x) Person(y)) Loves(x,y) • y อยู่ภายใต้ x ดังนั้นแทนที่ y ด้วย skolem function ที่มี argument คือ x • เปลี่ยนได้เป็นx (Person(x) Person(f(x))) Loves(x,f(x)) • x P(x) เป็น P(A) ค่าคงที่ A • xyzP(x,y,z) เปลี่ยนเป็น xy P(x, y, f(x,y)) • xyz P(x,y,z) เปลี่ยนเป็น xz P(x, f(x), z)
ตัวอย่าง : การแปลงประโยคให้อยู่ในรูป CNF(1) จงแปลงประโยคต่อไปนี้ให้อย่างในรูป CNF (x)([a(x) b(x)] [c(x,i) (y)((z)[c(y,z)] d(x,y))]) (x)(e(x)) 1. กำจัด (x)([a(x) b(x)] [c(x,i) (y)((z)[c(y,z)] d(x,y))]) (x)(e(x)) 2.นำตัว กระจายเข้าไปข้างในประโยค (x)([a(x) b(x)] [c(x,i) (y)((z)[c(y,z)] d(x,y))]) (x)(e(x)) 3.ทำ standardize ชื่อตัวแปร (x)([a(x) b(x)] [c(x,i) (y)((z)[c(y,z)] d(x,y))]) (w)(e(w)) 4.เลื่อน quantifier มาอยู่ด้านซ้ายของประโยค (x)(y)(z) (w)([a(x) b(x)] [c(x,i) (c(y,z) d(x,y))] e(w)
ตัวอย่าง : การแปลงประโยคให้อยู่ในรูป CNF(2) (x)(y)(z) (w)([a(x) b(x)] [c(x,i) (c(y,z) d(x,y))] e(w) 5. กำจัด (x)(z) (w)([a(x) b(x)] [c(x,i) (c(f(x),z) d(x,f(x)))] e(w) 6. ปลดตัว ออกจากประโยค [a(x) b(x)] [c(x,i) (c(f(x),z) d(x,f(x)))] e(w) 7. ทำ Distribution law • [a(x) b(x)] e(w) [c(x,i)(c(f(x),z) d(x,f(x)))] • [a(x) b(x) e(w) c(x,i)] [a(x) b(x) e(w) c(f(x),z) d(x,f(x))]
ตัวอย่าง : การแปลงประโยคให้อยู่ในรูป CNF(3) 8. ใช้ตัว conjunction () เป็นตัวแยกประโยคใหญ่ออกเป็นประโยคย่อยๆ • [a(x) b(x) e(w) c(x,i)] • [a(x) b(x) e(w) c(f(x),z) d(x,f(x))] 9. ใช้ตัวทำ standardize อีกรอบของแต่ละประโยคย่อยไม่ให้ซ้ำกัน • [a(x) b(x) e(w) c(x,i)] • [a(u) b(u) e(v) c(f(u),z) d(u,f(u))] แบบฝึกหัด: จงแปลงประโยคต่อไปนี้ให้อยู่ในรูป CNF • x(P(x)) yx(Q(x,y))
การพิสูจน์ด้วย Resolution Refutation (1) • กลับมาที่ propositional logic ที่ไม่มีค่าตัวแปรให้วุ่นวาย • ตัวอย่าง: ต้องการพิสูจน์ a จากสมมุติฐาน • b c a • b • d e c • e f • d f (b c) a b c a • b c a • b • d e c • e f • d • f (d e) c d e c f d
การพิสูจน์ด้วย Resolution Refutation (2) • Resolution • (A B) (B C) อนุมานได้เป็น (A C) • (A B) (B C)อนุมานได้เป็น (A C) a b c a • กำหนด a • b c a • b • d e c • e f • d • f b c b d e c c e f d e f d f d d
Unification (1) • จะเห็นว่าสำหรับ Propositional Logic จะง่ายมากในการดู 2 ประโยคที่ขัดกัน (p และ p) • แต่สำหรับ FOL การเทียบกันจะซับซ้อนขึ้นเนื่องจากจะต้องพิจารณา argument ของ predicate ด้วยเช่น • MAN(JOHN) และMAN(JOHN) ขัดแย้งกัน • MAN(JOHN) และMAN(SPOT) ไม่ขัดแย้งกัน • ในการตรวจสอบความขัดแย้งกันของประโยคใน FOL จะต้องมีการ แทนที่(substitution)ค่าของตัวแปร ซึ่งเรียกว่า Unification • Notation : car/xหมายถึงการแทนค่า car ให้กับตัวแปร x
Unification (2) • ถ้ามีประโยค • Knows(John, x) • แล้วแทนที่ด้วย {Paul/x} • จะทำให้ประโยคที่ได้เป็น Knows(John, Paul) • ถ้าไม่สามารถหาค่ามาแทนตัวแปรได้ถือว่าการทำ unification ล้มเหลว • ตัวอย่าง : foo(x, A, goo(y)) • {Fred/x, z/y} => foo(Fred, A, goo(z)) • {w/x, Jack/y} => foo(w, A, goo(Jack)) • {z/x, moo(z)/y} => foo(z, A, goo(moo(z)))
ตัวอย่าง1: สร้างประโยคในรูปแบบของ FOL • จากประโยคต่อไปนี้ คนที่สอบวิชาประวัติศาสตร์ผ่านและถูกลอตเตอรี่จะมีความสุข แต่ถ้าใครที่เรียนอยู่หรือโชคดีจะผ่านวิชาที่เรียนทุกวิชา สมชายไม่ได้เรียนแต่สมชายโชคดี ใครที่โชคดีจะถูกลอตเตอรี่ ถามว่าสมชายมีความสุขไหม ? • คนที่สอบวิชาประวัติศาสตร์ผ่านและถูกลอตเตอรี่จะมีความสุข • x(Pass(x, HISTORY) Win(x, LOTTERY) Happy(x)) • ใครที่เรียนอยู่หรือโชคดีจะผ่านวิชาที่เรียนทุกวิชา • xy (Study(x) Lucky(x) Pass(x,y)) • สมชายไม่ได้เรียนแต่สมชายโชคดี • Study(สมชาย) Lucky(สมชาย) • ใครที่โชคดีจะถูกลอตเตอรี่ • x(Lucky(x) Win(x, LOTTERY))
ตัวอย่าง1: เปลี่ยนประโยคให้อยู่ในรูป CNF • กำจัด • x(Pass(x, HISTORY) Win(x, LOTTERY) Happy(x)) • x([Pass(x, HISTORY) Win(x, LOTTERY)] Happy(x)) • xy (Study(x) Lucky(x) Pass(x,y)) • xy ([ Study(x) Lucky(x)] Pass(x,y)) • Study(สมชาย) Lucky(สมชาย) • x(Lucky(x) Win(x, LOTTERY)) • x( Lucky(x) Win(x, LOTTERY))
ตัวอย่าง1: เปลี่ยนประโยคให้อยู่ในรูป CNF (1) • กระจาย เข้าไปในประโยค • x([Pass(x, HISTORY) Win(x, LOTTERY)] Happy(x)) • x(Pass(x, HISTORY) Win(x, LOTTERY) Happy(x)) • xy ([ Study(x) Lucky(x)] Pass(x,y)) • xy ([Study(x) Lucky(x)] Pass(x,y)) • Study(สมชาย) Lucky(สมชาย) • x( Lucky(x) Win(x, LOTTERY)) • Standardize :ไม่มีให้ทำ • เลื่อนQuantifierไปด้านซ้ายของประโยค : ไม่ต้องทำ • ทำ Skolemization : ไม่ต้องทำ
ตัวอย่าง1: เปลี่ยนประโยคให้อยู่ในรูป CNF (2) • ตัด universal quantifier ออก • Pass(x, HISTORY) Win(x, LOTTERY) Happy(x) • (Study(x) Lucky(x)) Pass(x,y) • Study(สมชาย) Lucky(สมชาย) • Lucky(x) Win(x, LOTTERY) • ทำ Distribution • (Study(x) Lucky(x)) Pass(x,y) • (Study(x) Pass(x,y)) (Lucky(x) Pass(x,y))
ตัวอย่าง1: เปลี่ยนประโยคให้อยู่ในรูป CNF (3) • จาก • Pass(x, HISTORY) Win(x, LOTTERY) Happy(x) • (Study(x) Pass(x,y)) (Lucky(x) Pass(x,y)) • Study(สมชาย) Lucky(สมชาย) • Lucky(x) Win(x, LOTTERY) • แยกออกเป็นประโยคย่อยได้ • Pass(x, HISTORY) Win(x, LOTTERY) Happy(x) • (Study(x) Pass(x,y)) • (Lucky(x) Pass(x,y)) • Study(สมชาย) • Lucky(สมชาย) • Lucky(x) Win(x, LOTTERY)
ตัวอย่าง1: เปลี่ยนประโยคให้อยู่ในรูป CNF (4) • จาก • Pass(x, HISTORY) Win(x, LOTTERY) Happy(x) • (Study(x) Pass(x,y)) • (Lucky(x) Pass(x,y)) • Study(สมชาย) • Lucky(สมชาย) • Lucky(x) Win(x, LOTTERY) • Standardize ตัวแปรของแต่ละประโยคย่อยได้ • Pass(x1, HISTORY) Win(x1, LOTTERY) Happy(x1) • (Study(x2) Pass(x2,y1)) • (Lucky(x3) Pass(x3,y2)) • Study(สมชาย) • Lucky(สมชาย) • Lucky(x4) Win(x4, LOTTERY)
ตัวอย่าง1: พิสูจน์ (1) • จากสมมุติฐานที่ได้ • Pass(x1, HISTORY) Win(x1, LOTTERY) Happy(x1) • Study(x2) Pass(x2,y1) • Lucky(x3) Pass(x3,y2) • Study(สมชาย) • Lucky(สมชาย) • Lucky(x4) Win(x4, LOTTERY) • ต้องการพิสูจน์ว่า สมชายมีความสุข Happy(สมชาย) ดังนั้นให้กลับค่าความเป็นจริงเป็นพิสูจน์ Happy(สมชาย)
ตัวอย่าง1: พิสูจน์ (2) • Pass(x1, HISTORY) Win(x1, LOTTERY) Happy(x1) Happy(สมชาย) • {สมชาย/x1} Lucky(x4) Win(x4, LOTTERY) • Pass(สมชาย, HISTORY) Win(สมชาย, LOTTERY) • {สมชาย/x4} • Pass(สมชาย, HISTORY) Lucky(สมชาย) • Lucky(สมชาย) Lucky(x3) Pass(x3,y2) • Pass(สมชาย, HISTORY) • {สมชาย/x3, HISTORY/y2} Lucky(สมชาย) Lucky(สมชาย) พิสูจน์ได้ว่า สมชายมีความสุข Happy(สมชาย)
ตัวอย่าง2: • จากข้อมูลต่อไปนี้ • Marcus was a man • Marcus was a Pompeian • Marcus was born in 40 AD. • All men are mortal • All Pompeians died when the volcano erupted in 79 AD. • No mortal lives longer than 150 years • It’s now 2011 • Alive means not dead • If someone dies, then he’s dead at all later times. • จงพิสูจน์ Marcus is not alive ?
ตัวอย่าง2: สร้างประโยคในรูปแบบของ FOL (1) • Marcus was a man • man(Marcus) • Marcus was a Pompeian • pompeian(Marcus) • Marcus was born in 40 AD. • born(Marcus, 40) • All men are mortal • x (man(x) mortal(x)) • All Pompeians died when the volcano erupted in 79 AD. • erupted(Volcano, 79) x(pompeian(x)died(x, 79))
ตัวอย่าง2: สร้างประโยคในรูปแบบของ FOL(2) • No mortal lives longer than 150 years • x t1 t2 (mortal(x) born(x, t1) gt(t2-t1, 150) dead(x, t2)) • It’s now 2011 • now = 2011 • Alive means not dead • xt ([alive(x, t) dead(x, t)] [dead(x,t)alive(x, t)]) • If someone dies, then he’s dead at all later times. • x t1 t2 (died(x, t1) gt(t2, t1) dead(x, t2)) • จงพิสูจน์ Marcus is not alive ? • alive(Marcus, now)
ตัวอย่าง2: เปลี่ยนประโยคให้อยู่ในรูป CNF (1) • man(Marcus) • pompeian(Marcus) • born(Marcus, 40) • now = 2011 • กำจัด • x (man(x) mortal(x)) • x ( man(x)mortal(x)) • erupted(Volcano, 79) x(pompeian(x) died(x, 79)) • erupted(Volcano, 79) x( pompeian(x) died(x, 79)) • xt1 t2 (mortal(x) born(x, t1) gt(t2-t1, 150) dead(x, t2)) • x t1 t2 ( (mortal(x) born(x, t1) gt(t2-t1, 150) ) dead(x, t2)) • x t ([alive(x, t) dead(x, t)] [dead(x,t) alive(x, t)]) • x t ([alive(x, t)dead(x, t)] [ dead(x,t)alive(x, t)]) • x t1 t2 (died(x, t1) gt(t2, t1) dead(x, t2)) • x t1 t2 ( (died(x, t1) gt(t2, t1))dead(x, t2))
ตัวอย่าง2: เปลี่ยนประโยคให้อยู่ในรูป CNF (2) • กระจาย • x t1 t2 ( (mortal(x) born(x, t1) gt(t2-t1, 150) ) dead(x, t2)) • x t1 t2 (mortal(x) born(x, t1) gt(t2-t1, 150) dead(x, t2)) • x t1 t2 ( (died(x, t1) gt(t2, t1))dead(x, t2)) • x t1 t2 ( died(x, t1) gt(t2, t1) dead(x, t2)) • man(Marcus) • pompeian(Marcus) • born(Marcus, 40) • now = 2011 • x ( man(x) mortal(x)) • erupted(Volcano, 79) x( pompeian(x) died(x, 79)) • x t ([alive(x, t) dead(x, t)] [ dead(x,t) alive(x, t)])
ตัวอย่าง2: เปลี่ยนประโยคให้อยู่ในรูป CNF (3) • Standardization : ไม่มี • เลื่อน Quantifier ไปด้านซ้าย : ทุกประโยคอยู่ด้านซ้ายหมดแล้ว • ทำ Skolemizationเพื่อกำจัด: ไม่มี • ถอด ออกจากประโยค • man(Marcus) • pompeian(Marcus) • born(Marcus, 40) • man(x) mortal(x) • erupted(Volcano, 79) ( pompeian(x) died(x, 79)) • mortal(x) born(x, t1) gt(t2-t1, 150) dead(x, t2)) • now = 2011 • (alive(x, t) dead(x, t)) ( dead(x,t) alive(x, t)) • died(x, t1) gt(t2, t1) dead(x, t2)
ตัวอย่าง2: เปลี่ยนประโยคให้อยู่ในรูป CNF (4) • แยกออกเป็นประโยคย่อย • man(Marcus) • pompeian(Marcus) • born(Marcus, 40) • man(x) mortal(x) • erupted(Volcano, 79) • pompeian(x) died(x, 79) • mortal(x) born(x, t1) gt(t2-t1, 150) dead(x, t2)) • now = 2011 • alive(x, t) dead(x, t) • dead(x,t) alive(x, t) • died(x, t1) gt(t2, t1) dead(x, t2)
ตัวอย่าง2: เปลี่ยนประโยคให้อยู่ในรูป CNF (5) • Standardization ตัวแปร • man(Marcus) • pompeian(Marcus) • born(Marcus, 40) • man(x1) mortal(x1) • erupted(Volcano, 79) • pompeian(x2) died(x2, 79) • mortal(x3) born(x3, t1) gt(t2-t1, 150) dead(x3, t2)) • now = 2011 • alive(x4, t3) dead(x4, t3) • dead(x5,t4) alive(x5, t4) • died(x6, t5) gt(t6, t5)dead(x6, t6)
ตัวอย่าง2: พิสูจน์ • พิสูจน์alive(Marcus, now) โดยตรวจสอบจากalive(Marcus, now) alive(Marcus, now) 9 • {Marcus/x4, now/t3} • dead(Marcus, now) 11 • {Marcus/x6, now/t6} • died(Marcus, t5) gt(now, t5) 6 • {Marcus/x2, 79/t5} • gt(now, 79) pompeian(Marcus) • {now = 2011} • gt(2011, 79) pompeian(Marcus) • pompeian(Marcus) • สรุป Now, Marcus is not alive 2
แบบฝึกหัด (ทำส่ง) • กำหนด Predicate • man(x) • pompeian (x) • roman(x) • ruler(x) • loyalto(x, y) • hate(x, y) • tryassasinate(x, y) • people(x) จากข้อมูลต่อไปนี้ • Marcus was a man. • Marcus was a Pompeian. • All Pompeian were Romans. • Caesar was a ruler. • All Romans were either loyal to Caesar or hated him • Everyone is loyal to someone • People only try to assassinate rulers they aren’t loyal to. • Marcus tried to assassinate Caesar. • All men are people. จงพิสูจน์ว่า Marcus hated Caesar