- ลักษณะของการเขียนโปรแกรมลอจิก
- การหักค่าความจริงและตรรกะ
- ลอจิกลำดับแรก
- แบบฟอร์ม Clausal
- ปัญญาประดิษฐ์
- ตัวอย่างการเขียนโปรแกรมลอจิก
- ตัวอย่าง 1
- ตัวอย่าง 2
- สอบถาม
- สอบถามข้อมูลอื่น ๆ
- อ้างอิง
การเขียนโปรแกรมลอจิกเป็นกระบวนทัศน์การเขียนโปรแกรมที่ใช้วงจรลอจิกแทนที่จะเป็นเพียงฟังก์ชันทางคณิตศาสตร์เพื่อควบคุมวิธีการตั้งค่าข้อเท็จจริงและกฎ
แทนที่จะเป็นขั้นตอนการควบคุมที่มีโครงสร้างอย่างรอบคอบซึ่งกำหนดเวลาที่จะดำเนินการและวิธีประเมินการเรียกใช้ฟังก์ชันหรือคำสั่งอื่น ๆ กฎเชิงตรรกะของโปรแกรมจะถูกเขียนเป็นอนุประโยคหรือเพรดิเคตเชิงตรรกะ
ตัวอย่างการเขียนโปรแกรมลอจิกใน Prolog ที่มา: โดย Kuldeepsheoran1 - ภาพหน้าจอ CC BY-SA 3.0 วิกิมีเดียคอมมอนส์
แนวทางนี้ซึ่งมักใช้ในการเขียนโปรแกรมทางพันธุกรรมและวิวัฒนาการโดยทั่วไปจะบอกแบบจำลองว่าจะบรรลุเป้าหมายใดแทนที่จะบรรลุเป้าหมายอย่างไร
กฎแต่ละข้อประกอบด้วยส่วนหัวและเนื้อความที่มีตรรกะที่เป็นทางการแทนที่จะเป็นฟังก์ชันทางคณิตศาสตร์ที่เรียกใช้งานได้ ตัวอย่างเช่น "และเป็นจริง (ส่วนหัว): ถ้า C1, C2 และ C3 เป็นจริง (เนื้อความ)" ข้อเท็จจริงหรือผลลัพธ์จะแสดงออกมาโดยไม่มีเนื้อความเช่น "และมันเป็นความจริง"
อย่างไรก็ตามด้วยภาษาการเขียนโปรแกรมบางภาษาเช่น Prolog ยังสามารถรวมการเขียนโปรแกรมที่จำเป็นเพื่อบอกให้โมเดลทราบถึงวิธีการแก้ปัญหาบางอย่าง ตัวอย่างเช่น "ในการแก้ Y ให้เพิ่ม C1, C2 และ C3"
ลักษณะของการเขียนโปรแกรมลอจิก
การเขียนโปรแกรมลอจิกแตกต่างจากกลยุทธ์การเขียนโปรแกรมอื่น ๆ ที่มีอยู่อย่างมาก แทนที่จะให้คำสั่งกับคอมพิวเตอร์ด้วยโปรแกรมจะมีการสร้างความสัมพันธ์ระหว่างวัตถุ ด้วยวิธีนี้คอมพิวเตอร์สามารถให้เหตุผลของความสัมพันธ์เหล่านี้และเข้าถึงโซลูชันเชิงตรรกะได้
ภายในโปรแกรมลอจิกมีรหัสหลักสองชุด ได้แก่ ข้อเท็จจริงและกฎ มีการนำกฎมาใช้กับข้อเท็จจริงเพื่อให้ได้รับความรู้เกี่ยวกับสิ่งแวดล้อม
การหักค่าความจริงและตรรกะ
โปรแกรมลอจิกสามารถถอดรหัสผ่านแนวคิดสำคัญสองประการ ได้แก่ ความจริงและการหักลอจิก ความจริงออกมาว่าการคำนวณในโปรแกรมเป็นจริงหรือไม่ภายใต้การนำสัญลักษณ์ของโปรแกรมไปใช้ การหักลอจิคัลกำหนดว่าส่วนคำสั่งเชิงตรรกะเป็นผลมาจากโปรแกรมหรือไม่
คำสั่งเหล่านี้จะถูกตีความว่าเป็นประโยคและอนุประโยคเชิงตรรกะเสมอซึ่งผลลัพธ์ของการดำเนินการเป็นผลลัพธ์เชิงตรรกะของการคำนวณที่มีอยู่
ลอจิกลำดับแรก
มันเป็นหน่อของตรรกะเชิงประพจน์ พิจารณาว่าวัตถุเป็นจริงหรือเท็จจากมุมมองของโลกบางส่วนที่เรียกว่าโดเมน การเขียนโปรแกรมลอจิกจะขึ้นอยู่กับการกำหนดลักษณะทั่วไปของลอจิกลำดับที่หนึ่ง
ตรรกะนี้ประกอบด้วยวากยสัมพันธ์และความหมาย ไวยากรณ์เป็นภาษาทางการที่ใช้แสดงแนวคิด ในทางกลับกันความหมายของสูตรลอจิคัลลำดับที่หนึ่งระบุวิธีกำหนดค่าที่แท้จริงของสูตรใด ๆ
ตรรกะนี้ขึ้นอยู่กับตัวอักษรและภาษาลำดับที่หนึ่งตลอดจนชุดของสัจพจน์และกฎการอนุมาน
แบบฟอร์ม Clausal
เป็นส่วนย่อยของตรรกะลำดับที่หนึ่ง มันมีรูปแบบที่ทำให้เป็นมาตรฐานโดยที่คำสั่งถูกกำหนดโดยคำนำหน้าสากลหรือสายโซ่ของตัวระบุปริมาณสากลและชุดตัวบ่งชี้ที่ไม่เสียค่าใช้จ่ายในอนุประโยค
เมื่อร้องขอการสืบค้นไปยังโปรแกรมเนื้อหาของประโยคที่ส่วนหัวอาจตรงกันจะได้รับการพิจารณา นี่ก็เหมือนกับการใช้กฎการอนุมานในตรรกะ
ในขั้นตอนหนึ่งของการอนุมานจะมีการเลือกสองอนุประโยคที่มีคุณสมบัติที่หนึ่งประกอบด้วย X ที่ไม่แยกจากกัน (ตัวอักษรบวก) และอีกประโยคหนึ่งมี¬Xที่ไม่ต่อเนื่อง (ตัวอักษรเชิงลบ) การแลกเปลี่ยนเหล่านี้เรียกว่าเสริม
จากสองประโยคเริ่มต้นนี้ประโยคที่มีความละเอียดใหม่ถูกสร้างขึ้นโดยใช้ตัวอักษรทั้งหมดยกเว้นส่วนเสริม
ปัญญาประดิษฐ์
การเขียนโปรแกรมลอจิกเป็นวิธีการที่ใช้ในการทำให้คอมพิวเตอร์อนุมานได้เนื่องจากมีประโยชน์ในการแสดงความรู้ ตรรกะถูกใช้เพื่อแสดงถึงความรู้และการอนุมานเพื่อจัดการกับมัน
ตรรกะที่ใช้แทนความรู้คือรูปแบบอนุประโยค ใช้เนื่องจากตรรกะลำดับที่หนึ่งเป็นที่เข้าใจกันดีและสามารถแสดงปัญหาการคำนวณทั้งหมดได้
Prolog เป็นภาษาการเขียนโปรแกรมที่มีพื้นฐานมาจากแนวคิดของการเขียนโปรแกรมเชิงตรรกะ แนวคิดของ Prolog คือการทำให้ตรรกะดูเหมือนภาษาโปรแกรม
ตัวอย่างการเขียนโปรแกรมลอจิก
ตัวอย่าง 1
- ข้อเท็จจริง: Rubíเป็นแมว
- กฎ: แมวทุกตัวมีฟัน
- ปรึกษา: Rubíมีฟันหรือไม่?
- สรุป: ใช่
กฎ "แมวทุกตัวมีฟัน" สามารถนำมาใช้กับ Ruby ได้เนื่องจากมีข้อเท็จจริงที่ระบุว่า "Ruby เป็นแมว" ตัวอย่างนี้ไม่ได้เขียนด้วยไวยากรณ์สำหรับภาษาโปรแกรมจริง
ตัวอย่าง 2
ตัวอย่างนี้สามารถเห็นได้ใน Prolog เนื่องจากเป็นหนึ่งในภาษาโปรแกรมลอจิกที่ได้รับความนิยมมากที่สุด:
- ผู้หญิง (อลิสซา)
- ผู้ชาย (บ๊อบบี้)
- ผู้ชาย (คาร์ลอส)
- ผู้หญิง (ดอริส)
- son_of (ดอริสคาร์ลอส)
- son_of (คาร์ลอสบ๊อบบี้)
- son_of (ดอริสอลิสสา)
- father_of (F, P): - ชาย (F), son_of (P, F)
โปรแกรมนี้อ่านยากเนื่องจาก Prolog แตกต่างจากภาษาอื่นอย่างเห็นได้ชัด ส่วนประกอบรหัสใด ๆ ที่คล้ายกับ "ผู้หญิง (alissa)" มันคือข้อเท็จจริง.
กฎข้อหนึ่งคือ "father_of (F, P): - male (F), child_of (P, F)" สัญลักษณ์ ": -" สามารถอ่านได้ว่า "เป็นจริง if" อักษรตัวใหญ่หมายความว่าตัวแปรสามารถนำไปใช้กับวัตถุใด ๆ ได้ดังนั้น F จึงสามารถใช้แทน carlos, doris, alissa หรือ bobby ได้ รหัสนี้สามารถแปลเป็น:
- อลิสสาเป็นผู้หญิง
- บ๊อบบี้เป็นผู้ชาย
- คาร์ลอสเป็นผู้ชาย
- ดอริสเป็นผู้หญิง
- ดอริสเป็นลูกสาวของคาร์ลอส
- Carlos เป็นลูกชายของ Bobby
- Doris เป็นลูกสาวของ Alissa
- « F เป็นพ่อของ P »จริงถ้า F เป็นผู้ชายและถ้า P เป็นลูกของ F
สอบถาม
สมมติว่าคุณต้องการปรึกษาโปรแกรมสำหรับข้อมูลเพิ่มเติม คุณสามารถค้นหาโดยถามว่าพ่อของบ๊อบบี้อยู่กับใคร:? - father_of (bobby, X) ระบบจะระบุคำตอบต่อไปนี้: X = Carlos
ในกรณีนี้ความสัมพันธ์จะถูกส่งผ่านโดยที่ค่าใดค่าหนึ่งเป็นตัวแปร สิ่งที่ Prolog ทำคือใช้อ็อบเจกต์ต่าง ๆ กับความสัมพันธ์นี้จนกว่าหนึ่งในนั้นจะมีเหตุผลที่มั่นคง
พ่อคนเดียวของ Carlos คือ Bobby และ Bobby เป็นผู้ชาย สิ่งนี้เป็นไปตามกฎ "father_of (F, P): - ผู้ชาย (F), son_of (P, F)" เมื่อ X เท่ากับ "คาร์ลอส" ตรรกะก็คือเสียง
สอบถามข้อมูลอื่น ๆ
การสืบค้นข้อมูลทั่วไปอื่น ๆ สามารถทำได้ใน Prolog ซึ่งทำให้ระบบสร้างผลลัพธ์หลายรายการ:
-? - parent_of (ผู้ปกครองเด็ก)
- พ่อ = บ๊อบบี้
- เด็ก = คาร์ลอส
- พ่อ = คาร์ลอส
- เด็ก = doris
ดังที่ได้เห็นแล้วการเขียนโปรแกรมลอจิกไม่จำเป็นต้องมีข้อมูลว่า alissa หรือ bobby เป็นคนเพื่อที่จะได้รับความรู้เกี่ยวกับพวกเขา ในความเป็นจริงไม่จำเป็นต้องระบุว่ามีแนวคิดที่เรียกว่าบุคคล
ในภาษาโปรแกรมที่ไม่ใช่ตรรกะส่วนใหญ่คุณจะต้องกำหนดแนวคิดเหล่านี้ก่อนจึงจะสามารถเขียนโปรแกรมที่ประมวลผลข้อมูลเกี่ยวกับบุคคลได้
อ้างอิง
- Deep AI (2020) การเขียนโปรแกรมลอจิก นำมาจาก: deepai.org.
- Wikiversity (2020). ทฤษฎีภาษาโปรแกรม / การเขียนโปรแกรมลอจิก นำมาจาก: en.wikiversity.org.
- อิมพีเรียลคอลเลจลอนดอน (2549). การเขียนโปรแกรมลอจิก นำมาจาก: doc.ic.ac.uk.
- Jia-Huai You (2020). รู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมลอจิก มหาวิทยาลัยอัลเบอร์ตา นำมาจาก: eng.ucy.ac.cy.
- C2 Wiki (2020) การเขียนโปรแกรมลอจิก นำมาจาก: wiki.c2.com.