Logic Programming การโปรแกรมเชิงตรรกะ
หลักการทำโปรแกรมเชิงตรรกะ เป็นการทำโปรแกรมเชิงประกาศ (Declarative Programming) โปรแกรมเมอร์ไม่ ต้องระบุขั้นตอนการค้นหาข้อมูล เพียงแต่ระบุจุดมุ่งหมายที่ต้องการ กลไก ภายในของภาษาจะตรวจสอบหาคำตอบมาให้ มักนิยมใช้ในงานด้าน………………………………. ใช้หลักทางตรรกะศาสตร์ ………………………………………… ตัวอย่าง นาย ก เป็นพ่อนาย ข นาย ข เป็นพ่อนาย ค นาง ง เป็นแม่นาย ก
ประเภทของตรรกศาสตร์ ตรรกศาสตร์พรอพโพซิชัน (Propositional Logic) ตรรกศาสตร์พริดิเคต (Predicate Logic)
ตรรกศาสตร์พรอพโพซิชัน คือ ประโยค หรือ ข้อความทางตรรกะศาสตร์ที่ให้ค่าความจริงเป็น จริง หรือ เท็จ ประโยคที่ไม่สามารถหาค่าความจริงได้ ไม่เรียกว่า พรอพโพซิชัน เช่น ประโยคคำถาม.................................................................
ตรรกศาสตร์พรอพโพซิชัน ถ้า P และ Q เป็นพรอพโพซิชันแล้ว ข้อความต่อไปนี้เป็นพรอพโพซิชัน
ตรรกศาสตร์พรอพโพซิชัน ตารางค่าความจริง
ตรรกศาสตร์เพรดิเคต ปรับปรุงเพิ่มเติมจากตรรกศาสตร์พรอพโพซิชัน โดยเพิ่ม ตัวแปรประเภทอื่นๆ เช่น integer, real, string ฟังก์ชันที่ให้ค่าตรรกะ (หรือ relation) หมายถึงฟังก์ชันที่ส่งค่ากลับ เป็นจริง หรือ เท็จ เช่น speak(a , Thai) ให้ค่าเป็นจริง เมื่อ a สามารถ พูดภาษาไทยได้ มิฉะนั้นจะให้ค่าเป็นเท็จ ตัวบ่งปริมาณ (Quatifier)
ตัวบ่งปริมาณ X(P) ตัวบ่งปริมาณ (quantifiers) ตัวอย่าง ……..(woman(X) human(X)) ………………………………………………………………………. ……..(mother(natalee, X) male(X))
ตัวอย่างเพรดิเคต และค่าของเพรดิเคต
ข้อความรูปแบบของฮอร์น Horn Clause จัดเป็นข้อความตรรกศาสตร์เพรดิเคต อยู่ในรูปแบบ implication (ถ้า-แล้ว) ดังนี้ ………………………………………… มีความหมายว่า H จะเป็นจริง ก็ต่อเมื่อ p1, p2, … , pn เป็นจริง หรือ ถ้า p1, p2, … , pn เป็นจริงแล้ว H จะเป็นจริง เครื่องหมาย “,” แทนความหมาย AND (และ) เรียก H ว่าเป็น เพรดิเคตส่วนหัว (ผล) เรียก p1, p2, … , pn ว่าเป็น เพรดิเคตส่วนบอดี้ (เหตุ)
ตัวอย่างข้อความรูปแบบฮอร์น likes(bob, salmon) likes(bob, fish), fish(salmon) sunny(cpc) day(cpc) , hot(cpc) แปลงเป็นตรรกศาสตร์เพรดิเคต (รูปแบบของ Implication) likes(bob, fish) fish(salmon) likes(bob, salmon) ………………………………………………………….
ภาษาโปรล็อก
ภาษาโปรล็อก PROLOG : PROgramming in LOGic Alian Colmerauer ชาวฝรั่งเศสสร้างเมื่อ 1972 เป็นภาษาคอมพิวเตอร์ที่ใช้ในการทำโปรแกรมเชิงตรรกะ
การเขียนโปรแกรมภาษาโปรล็อก ชื่อของ Object และ relation ใช้ตัวอักษรตัวเล็ก ชื่อตัวแปร ขึ้นต้นด้วยอักษรตัวใหญ่ คำถาม ขึ้นต้นด้วย ?- กฎเกณฑ์มีรูปแบบดังนี้ c :- h1, h2,…,hn for n > 0 สัญลักษณ์ :- มีความหมายเดียวกันกับ ในข้อความรูปแบบฮอร์น
ภาษาโปรล็อก ส่วนประกอบของภาษาโปรล็อก แบ่งออกเป็น 3 ส่วน ข้อเท็จจริง/ฐานความรู้ (Facts) กฎเกณฑ์ (Rules) เป้าหมาย/คำถาม (Goal) แต่ละประโยคคั่นด้วย “.”
Fact male(jake). female(mary). father(jake, mary).
Rule กฎเกณฑ์ (Rule) ประกอบด้วย Fact และ List of facts รูปแบบ c :- h1, h2, …, hn for n > 0 ตัวอย่าง parent(X,Y) :- mother(X,Y), female(X). หมายถึง...............................................................................................
Goal คำถาม (Goal) ใช้สอบถาม prolog ว่าจริงหรือเท็จ หรือถามในสิ่งที่ สัมพันธ์กันเช่น ?-food(meat). Yes ?-adjacent(X,bangkok). X = nontha buri X= patum thani
การทำนิรนัย (deduction) และ ยูนิฟิเคชัน (Unification)
การย้อนกลับ (Backtracking) การย้อนกลับ (Backtracking) เกิดขึ้นในขั้นตอนของการพิสูจน์ความจริง ของคำถาม เมื่อมีกฎที่อ้างถึงมากกว่า 1 กฎ โปรล็อกจะใช้กฎแรกก่อน ในกระบวนการพิสูจน์ ถ้ากฎแรกตรวจสอบแล้วพบว่า fail โปรล็อกจะ ย้อนกลับตัวแปรที่เคยถูกแทนค่านั้น แล้วทำกระบวนการพิสูจน์ต่อไป
ตัวอย่าง Backtracking ตัวอย่างการใช้กฎแสดงความสัมพันธ์ในครอบครัว mother(mary, bill). mother(mary, sue). mother(sue, nancy). mother(sue, jiff). mother(jane, ron). father(john, sue). father(john, bill). father(bob, nancy). father(bob, jiff). father(bill, ron). parent(A, B) :- father(A, B). parent(A, B) :- mother(A, B). grandparent(A, C) :- parent(A, B), parent(B, C)
ตัวอย่าง Backtracking (ต่อ)
ตัวอย่าง Backtracking (ต่อ) ถ้าถามว่า ?-grandparent(mary, ron) C
ตัวอย่าง Backtracking (ต่อ) LOGO
ตัวอย่าง Backtracking (ต่อ)
ตัวอย่างโปรแกรมโปรล็อก mother_child(trude, sally). mother_child(trude, bunny). father_child(tom, sally). father_child(ted, sally). father_child(ted, erica). father_child(mike, tom). sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y). parent_child(X, Y) :- father_child(X, Y). parent_child(X, Y) :- mother_child(X, Y). จงตั้งคำถามเพื่อตรวจสอบว่า sally เป็น sibling กับ erica หรือไม่ จงตั้งคำถามเพื่อตรวจสอบว่า sally เป็น sibling กับ bunny หรือไม่ จงตั้งคำถามเพื่อตรวจสอบว่า mike เป็น sibling กับ sally หรือไม่
ตัวอย่างโปรแกรมโปรล็อก fred eats meat. wilma eats meat. betty eats vegetables. wilma eats vegetables. barney eats meat. barney eats vegetables. If someone eats meat then they are a carnivore. If someone eats meat and vegetables then they are an omnivore. If someone eats X then X is food Is meat a food? Is Fred a carnivore? Is dirt a food? Who are omnivores? What are foods?