กลับไปหน้าบทความ

อ่าน 7 นาที

ไวยากรณ์และความหมายของการเขียนโปรแกรมเชิงตรรกะ

การเขียนโปรแกรมเชิงตรรกะ เป็น กระบวนทัศน์การเขียนโปรแกรม ที่รวมถึงภาษาต่างๆ ที่อิงตามตรรกะเชิงรูปธรรม เช่น Datalog และ Prolog บทความนี้จะอธิบายไวยากรณ์และความหมายของ ส่วนย่อย...

ไวยากรณ์และความหมายของการเขียนโปรแกรมเชิงตรรกะ

การเขียนโปรแกรมเชิงตรรกะเป็นกระบวนทัศน์การเขียนโปรแกรมที่รวมถึงภาษาต่างๆ ที่อิงตามตรรกะเชิงรูปธรรม เช่นDatalogและPrologบทความนี้จะอธิบายไวยากรณ์และความหมายของ ส่วนย่อย แบบประกาศ ล้วนๆ ของภาษาเหล่านี้ ที่น่าสับสนคือ ชื่อ "การเขียนโปรแกรมเชิงตรรกะ" ยังหมายถึง ภาษาการเขียนโปรแกรม เฉพาะ ภาษาหนึ่ง ที่โดยคร่าวๆ แล้วสอดคล้องกับส่วนย่อยแบบประกาศของ Prolog ด้วย น่าเสียดายที่ในบทความนี้จำเป็นต้องใช้คำนี้ในทั้งสองความหมาย

โปรแกรมตรรกะเชิงประกาศประกอบด้วยกฎในรูปแบบต่อไปนี้ ทั้งหมด

H :- B1 , ..., BN .

กฎแต่ละข้อดังกล่าวสามารถตีความได้ว่าเป็นนัยยะ :

หมายความว่า "ถ้าแต่ละข้อเป็นจริงแล้ว ข้อนั้นก็จะเป็นจริงด้วย" โปรแกรมตรรกะจะคำนวณชุดข้อเท็จจริงที่ได้จากกฎของมัน

การใช้งาน Datalog, Prolog และภาษาที่เกี่ยวข้องจำนวนมากได้เพิ่มคุณสมบัติเชิงกระบวนการ เช่นตัวดำเนินการ cut ของ Prolog หรือคุณสมบัตินอกเหนือจากตรรกะ เช่น อิน เท อร์เฟซฟังก์ชันภายนอกความหมายเชิงรูปธรรมของส่วนขยายดังกล่าวอยู่นอกเหนือขอบเขตของบทความนี้

บันทึกข้อมูล

Datalogเป็นภาษาการเขียนโปรแกรมเชิงตรรกะที่ง่ายที่สุดและมีการศึกษาอย่างกว้างขวาง มีคำจำกัดความหลักสามประการเกี่ยวกับความหมายของ Datalog ซึ่งทั้งหมดนั้นเทียบเท่ากัน ไวยากรณ์และความหมายของภาษาการเขียนโปรแกรมเชิงตรรกะอื่นๆ เป็นส่วนขยายและการวางนัยทั่วไปของไวยากรณ์และความหมายของ Datalog

ไวยากรณ์

โปรแกรม Datalog ประกอบด้วยรายการของกฎ ( ข้อความ Horn ) [ 1 ]ถ้าค่าคงที่และตัวแปรเป็น เซต ที่นับได้ของค่าคงที่และตัวแปรตามลำดับ และความสัมพันธ์เป็นเซตที่นับได้ของสัญลักษณ์ภาค แสดง ไวยากรณ์ BNFต่อไปนี้จะแสดงโครงสร้างของโปรแกรม Datalog:

< program > ::= < rule > < program > | "" < rule > ::= < atom > ":-" < atom-list > "." < atom > ::= < relation > "(" < term-list > ")" < atom-list > ::= < atom > | < atom > "," < atom-list > | "" < term > ::= < constant > | < variable > < term-list > ::= < term > | < term > "," < term-list > | "" 

อะตอมยังถูกเรียกว่าลิเทอรัล ด้วย อะตอมทางซ้ายของ:-สัญลักษณ์เรียกว่าส่วนหัวของกฎ อะตอมทางขวาเรียกว่าส่วนเนื้อหาโปรแกรม Datalog ทุกโปรแกรมต้องเป็นไปตามเงื่อนไขที่ว่าตัวแปรทุกตัวที่ปรากฏในส่วนหัวของกฎจะต้องปรากฏในส่วนเนื้อหาด้วย (เงื่อนไขนี้บางครั้งเรียกว่าข้อจำกัดช่วง ) [ 1 ] [ 2 ]

กฎที่มีเนื้อหาว่างเปล่าเรียกว่าข้อเท็จจริงตัวอย่างเช่น กฎต่อไปนี้เป็นข้อเท็จจริง:

r ( x ) :- .

น้ำตาลสังเคราะห์

การใช้งานการเขียนโปรแกรมเชิงตรรกะหลายรูปแบบได้ขยายไวยากรณ์ข้างต้นเพื่อให้สามารถเขียนข้อเท็จจริงได้โดยไม่ต้องใช้เครื่องหมายจุลภาค:-ดังนี้:

r ( x ).

นอกจากนี้ หลายโปรแกรมยังอนุญาตให้เขียนความสัมพันธ์แบบศูนย์-อารีโดยไม่ต้องใช้วงเล็บ ดังนี้:

พี:- คิว.

สิ่งเหล่านี้เป็นเพียงตัวย่อ ( ไวยากรณ์ที่ช่วยให้เขียนได้ง่ายขึ้น ) เท่านั้น ไม่มีผลกระทบต่อความหมายของโปรแกรมแต่อย่างใด

ตัวอย่าง

โปรแกรมต่อไปนี้คำนวณความสัมพันธ์pathซึ่งเป็นการปิดแบบถ่ายทอดของความedgeสัมพันธ์

ขอบ( x , y ). ขอบ( y , z ). เส้นทาง( A , B ) :- ขอบ( A , B ). เส้นทาง( A , C ) :- เส้นทาง( A , B ), ขอบ( B , C ).

ความหมาย

มีแนวทางที่ใช้กันอย่างแพร่หลาย 3 แนวทางสำหรับความหมายของโปรแกรม Datalog ได้แก่แนวทางเชิงทฤษฎีแบบจำลองแนวทางเชิงจุดคงที่และแนวทางเชิงทฤษฎีการพิสูจน์แนวทางทั้งสามนี้สามารถพิสูจน์ได้ว่าเทียบเท่ากัน[ 3 ]

อะตอมจะเรียกว่าอะตอมพื้นฐานหากไม่มีส่วนประกอบย่อยใดเป็นตัวแปร โดยสัญชาตญาณแล้ว ความหมายแต่ละอย่างจะกำหนดความหมายของโปรแกรมให้เป็นเซตของอะตอมพื้นฐานทั้งหมดที่สามารถอนุมานได้จากกฎของโปรแกรม โดยเริ่มต้นจากข้อเท็จจริง

ทฤษฎีแบบจำลอง

แผนภาพ Hasseของการตีความ Herbrand ของโปรแกรม Datalog
e ( x , y ). e ( y , z ). p ( A , B ) :- e ( A , B ). p ( A , C ) :- p ( A , B ), e ( B , C ).
การตีความนี้คือแบบจำลองเฮอร์แบรนด์ขั้นต่ำ การตีความทั้งหมดที่อยู่เหนือกว่านี้ก็เป็นแบบจำลองเช่นกัน ส่วนการตีความทั้งหมดที่อยู่ต่ำกว่านี้ไม่ใช่แบบจำลอง

กฎจะเรียกว่าเป็นกฎพื้นฐานได้ก็ต่อเมื่ออะตอมทั้งหมด (ส่วนหัวและส่วนลำตัว) ของกฎนั้นเป็นพื้นฐาน กฎพื้นฐานR 2เป็นตัวอย่างพื้นฐานของกฎR 1ถ้าR 2เป็นผลลัพธ์ของการแทนที่ค่าคงที่ลงในตัวแปรทั้งหมดใน R 1

ฐานเฮอร์แบรนด์ของโปรแกรมดาต้าล็อกคือเซตของอะตอมพื้นฐานทั้งหมดที่สามารถสร้างขึ้นได้จากค่าคงที่ที่ปรากฏในโปรแกรมการตีความ (หรือที่เรียกว่าอินสแตนซ์ฐานข้อมูล ) คือเซตย่อยของฐานเฮอร์แบรนด์ อะตอมพื้นฐานจะเป็นจริงในการตีความIถ้ามันเป็นองค์ประกอบของIกฎจะเป็นจริงในการตีความIถ้าสำหรับแต่ละอินสแตนซ์พื้นฐานของกฎนั้น ถ้าอะตอมทั้งหมดในส่วนเนื้อหาเป็นจริงในIแล้วส่วนหัวของกฎก็จะเป็นจริงในIด้วย

แบบจำลอง Herbrandของโปรแกรม Datalog PคือการตีความIของPซึ่งมีข้อเท็จจริงพื้นฐานทั้งหมดของPและทำให้กฎทั้งหมดของPเป็นจริงในI ความหมาย เชิงแบบจำลองระบุว่าความหมายของโปรแกรม Datalog คือแบบจำลอง Herbrand ขั้นต่ำ (เทียบเท่ากับการตัดกันของแบบจำลอง Herbrand ทั้งหมด) [ 4 ]

ตัวอย่างเช่น โปรแกรมนี้:

ขอบ( x , y ). ขอบ( y , z ). เส้นทาง( A , B ) :- ขอบ( A , B ). เส้นทาง( A , C ) :- เส้นทาง( A , B ), ขอบ( B , C ).

จักรวาลของเฮอร์แบรนด์มีดังนี้: x, y,z

และฐาน Herbrand นี้: edge(x, x), edge(x, y), ..., edge(z, z), path(x, x), ...,path(z, z)

และโมเดล Herbrand ที่เรียบง่ายนี้: edge(x, y), edge(y, z), path(x, y), path(y, z),path(x, z)

จุดคงที่

ให้Iเป็นเซตของการตีความโปรแกรม Datalog Pนั่นคือI = P ( H )โดยที่Hคือฐาน Herbrand ของPและPคือตัวดำเนินการเซตกำลัง ตัวดำเนินการผลลัพธ์ทันทีสำหรับPคือแผนที่T ต่อไปนี้ จากIไปยังI : สำหรับแต่ละอินสแตนซ์พื้นฐานของแต่ละกฎในPถ้าทุกข้อความในส่วนเนื้อหาอยู่ในการตีความอินพุต ให้เพิ่มหัวของอินสแตนซ์พื้นฐานไปยังการตีความเอาต์พุต แผนที่T นี้ เป็นแบบโมโนโทนิกเมื่อเทียบกับลำดับบางส่วนที่กำหนดโดยการรวมเซตย่อยบนTตามทฤษฎีบท Knaster–Tarskiแผนที่นี้มีจุดตรึงที่เล็กที่สุด ตามทฤษฎีบทจุดตรึงของ Kleeneจุดตรึงคือค่าสูงสุดของโซ่จุดตรึงที่เล็กที่สุดของMตรงกับแบบจำลอง Herbrand ขั้นต่ำของโปรแกรม[ 5 ]

ความหมาย ของจุดตรึง (fixpoint semantics ) เสนออัลกอริทึมสำหรับการคำนวณแบบจำลองเฮอร์แบรนด์ (Herbrand model) ที่เล็กที่สุด: เริ่มต้นด้วยชุดข้อเท็จจริงพื้นฐานในโปรแกรม จากนั้นเพิ่มผลลัพธ์ของกฎซ้ำๆ จนกว่าจะถึงจุดตรึง อัลกอริทึมนี้เรียกว่าการประเมินแบบง่าย (naïve evaluation )

ทฤษฎีการพิสูจน์

แผนผังแสดงที่มาของอะตอมพื้นฐานpath(x, z)จากโปรแกรม
ขอบ( x , y ). ขอบ( y , z ). เส้นทาง( A , B ) :- ขอบ( A , B ). เส้นทาง( A , C ) :- เส้นทาง( A , B ), ขอบ( B , C ).

กำหนดให้โปรแกรมP ต้นไม้พิสูจน์ของอะตอมพื้นฐานAคือต้นไม้ที่มีรากกำกับด้วยAใบกำกับด้วยอะตอมพื้นฐานจากส่วนหัวของข้อเท็จจริงในPและกิ่งก้านที่มีลูกกำกับด้วยอะตอมพื้นฐานGโดยที่ต้องมีอินสแตนซ์พื้นฐานอยู่จริง

G :- A1, ..., An.

ของกฎในPความหมายเชิงทฤษฎีการพิสูจน์กำหนดความหมายของโปรแกรม Datalog ให้เป็นเซตของอะตอมพื้นฐานที่สามารถอนุมานได้จากต้นไม้ดังกล่าว เซตนี้สอดคล้องกับแบบจำลอง Herbrand ขั้นต่ำ[ 6 ]

บางคนอาจสนใจที่จะรู้ว่าอะตอมพื้นฐานเฉพาะตัวใดตัวหนึ่งปรากฏอยู่ในแบบจำลอง Herbrand ขั้นต่ำของโปรแกรม Datalog หรือไม่ โดยอาจไม่สนใจส่วนอื่นๆ ของแบบจำลองมากนัก การอ่านแบบจากบนลงล่างของแผนผังการพิสูจน์ที่อธิบายไว้ข้างต้น ชี้ให้เห็นถึงอัลกอริทึมสำหรับการคำนวณผลลัพธ์ของการสอบถามดังกล่าว การอ่านแบบนี้เป็นข้อมูลพื้นฐานสำหรับ อัลกอริทึม การแก้ปัญหา SLDซึ่งเป็นพื้นฐานสำหรับการประเมิน Prolog

แนวทางอื่นๆ

ความหมายของ Datalog ยังได้รับการศึกษาในบริบทของ fixpoints บนsemiringsทั่วไปอีกด้วย[ 7 ]

การเขียนโปรแกรมเชิงตรรกะ

แม้ว่าชื่อ "การเขียนโปรแกรมเชิงตรรกะ" จะถูกใช้เพื่ออ้างถึงกระบวนทัศน์ทั้งหมดของภาษาการเขียนโปรแกรม รวมถึง Datalog และ Prolog แต่เมื่อพูดถึงความหมายเชิงรูปธรรม โดยทั่วไปแล้วจะหมายถึงส่วนขยายของ Datalog ที่มีสัญลักษณ์ฟังก์ชัน การ เขียน โปรแกรมเชิงตรรกะยังเรียกว่าโปรแกรมข้อความฮอร์นการเขียนโปรแกรมเชิงตรรกะตามที่กล่าวถึงในบทความนี้มีความเกี่ยวข้องอย่างใกล้ชิดกับส่วนย่อย "บริสุทธิ์" หรือ แบบ ประกาศของProlog

ไวยากรณ์

ไวยากรณ์ของการเขียนโปรแกรมเชิงตรรกะขยายไวยากรณ์ของ Datalog ด้วยสัญลักษณ์ฟังก์ชัน การเขียนโปรแกรมเชิงตรรกะยกเลิกข้อจำกัดช่วง ทำให้ตัวแปรสามารถปรากฏในส่วนหัวของกฎที่ไม่ปรากฏในส่วนเนื้อหาได้[ 8 ]

ความหมาย

เนื่องจากการมีอยู่ของสัญลักษณ์ฟังก์ชัน โมเดล Herbrand ของโปรแกรมตรรกะจึงสามารถเป็นอนันต์ได้ อย่างไรก็ตาม ความหมายของโปรแกรมตรรกะยังคงถูกกำหนดให้เป็นโมเดล Herbrand ขั้นต่ำ ในทำนองเดียวกัน จุดตรึงของตัวดำเนินการผลลัพธ์ทันทีอาจไม่บรรจบกันในจำนวนขั้นตอนที่จำกัด (หรือไปยังเซตที่จำกัด) อย่างไรก็ตาม อะตอมพื้นฐานใดๆ ในโมเดล Herbrand ขั้นต่ำจะมีต้นไม้พิสูจน์ที่จำกัด นี่คือเหตุผลที่ Prolog ถูกประเมินจากบนลงล่าง[ 8 ]เช่นเดียวกับใน Datalog ความหมายทั้งสามสามารถพิสูจน์ได้ว่าเทียบเท่ากัน

การปฏิเสธ

การเขียนโปรแกรมเชิงตรรกะมีคุณสมบัติที่พึงประสงค์คือ นิยามหลักทั้งสามประการของความหมายของโปรแกรมเชิงตรรกะสอดคล้องกัน ในทางตรงกันข้าม มีข้อเสนอที่ขัดแย้งกันมากมายเกี่ยวกับความหมายของโปรแกรมเชิงตรรกะที่มีการปฏิเสธ สาเหตุของความไม่ลงรอยกันคือ โปรแกรมเชิงตรรกะมีแบบจำลอง Herbrand ขั้นต่ำที่ไม่ซ้ำกัน แต่โดยทั่วไปแล้ว โปรแกรมเชิงตรรกะ (หรือแม้แต่ Datalog) ที่มีการปฏิเสธนั้นไม่มีแบบจำลองดังกล่าว

ไวยากรณ์

การปฏิเสธเขียนด้วยสัญลักษณ์notและสามารถปรากฏอยู่หน้าอะตอมใดๆ ก็ได้ในตัวบทของกฎ

< atom-list > ::= < atom > | "not" < atom > | < atom > "," < atom-list > | "" 

ความหมาย

การปฏิเสธแบบแบ่งชั้น

โปรแกรมตรรกะที่มีการปฏิเสธจะถูกแบ่งชั้นเมื่อสามารถกำหนดความสัมพันธ์แต่ละรายการให้กับชั้น บางชั้น ได้โดยที่หากความสัมพันธ์Rปรากฏการปฏิเสธในเนื้อหาของความสัมพันธ์Sแล้วRจะอยู่ในชั้นที่ต่ำกว่าS [ 9 ] ความหมายเชิงแบบจำลองและจุดคงที่ของ Datalog สามารถขยายเพื่อจัดการกับการปฏิเสธแบบแบ่งชั้นได้ และส่วนขยายดังกล่าวสามารถพิสูจน์ได้ว่าเทียบเท่ากัน

การใช้งาน Datalog จำนวนมากใช้รูปแบบการประเมินจากล่างขึ้นบน ซึ่งได้รับแรงบันดาลใจจากความหมายของจุดคงที่ เนื่องจากความหมายนี้สามารถจัดการกับการปฏิเสธแบบแบ่งชั้นได้ การใช้งาน Datalog หลายรูปแบบจึงนำการปฏิเสธแบบแบ่งชั้นมาใช้

แม้ว่าการปฏิเสธแบบแบ่งชั้นจะเป็นส่วนขยายทั่วไปของ Datalog แต่ก็มีโปรแกรมที่สมเหตุสมผลที่ไม่สามารถแบ่งชั้นได้ โปรแกรมต่อไปนี้อธิบายเกมสองผู้เล่นที่ผู้เล่นชนะหากคู่ต่อสู้ไม่มีการเคลื่อนไหว: [ ​​10 ]

ย้าย( a , b ). ชนะ( X ) :- ย้าย( X , Y ), ไม่ชนะ( Y ).

โปรแกรมนี้ไม่ได้แบ่งระดับ แต่ดูเหมือนว่าจะเป็นไปได้ที่aจะชนะเกมนี้

ความหมายของการเติมเต็ม

ความหมายของแบบจำลองที่สมบูรณ์แบบ

ความหมายของแบบจำลองที่เสถียร

ความหมายของแบบจำลองเสถียรจะกำหนดเงื่อนไขสำหรับการเรียกแบบจำลอง Herbrand บางแบบของโปรแกรมว่าเสถียรตามสัญชาตญาณ แบบจำลองเสถียรคือ "ชุดความเชื่อที่เป็นไปได้ที่ตัวแทนที่มีเหตุผลอาจมี โดยพิจารณาจาก [โปรแกรม]" เป็นข้อสมมติ[ 11 ]

โปรแกรมที่มีการปฏิเสธอาจมีแบบจำลองที่เสถียรหลายแบบหรืออาจไม่มีแบบจำลองที่เสถียรเลยก็ได้ ตัวอย่างเช่น โปรแกรม

p : - ไม่ใช่q q : - ไม่ใช่p

มีโมเดลเสถียรสองแบบคือโปรแกรมกฎเดียว

p :- ไม่ใช่p .

ไม่มีโมเดลที่เสถียร

แบบจำลองเสถียรทุกแบบเป็นแบบจำลองเฮอร์แบรนด์ขั้นต่ำสุด โปรแกรม Datalog ที่ไม่มีการปฏิเสธจะมีแบบจำลองเสถียรเพียงแบบเดียว ซึ่งก็คือแบบจำลองเฮอร์แบรนด์ขั้นต่ำสุดนั่นเอง ความหมายของแบบจำลองเสถียรจะกำหนดความหมายของโปรแกรมตรรกะที่มีการปฏิเสธให้เป็นแบบจำลองเสถียร หากมีอยู่เพียงแบบเดียว อย่างไรก็ตาม การตรวจสอบ แบบจำลองเสถียร ทั้งหมด (หรืออย่างน้อยหลายแบบ) ของโปรแกรมอาจเป็นประโยชน์ ซึ่งเป็นเป้าหมายของ การ เขียน โปรแกรมแบบชุดคำตอบ

ความหมายที่มีพื้นฐานที่ดี

ส่วนขยายเพิ่มเติม

มีการเสนอและศึกษาการขยาย Datalog อื่นๆ อีกหลายอย่าง รวมถึงรูปแบบต่างๆ ที่รองรับ ค่าคงที่ จำนวนเต็มและฟังก์ชัน (รวมถึงDatalogZ ) [ 12 ] [ 13 ] ข้อจำกัดความ ไม่เท่าเทียมกันในตัวกฎ และฟังก์ชัน รวม

การเขียนโปรแกรมเชิงตรรกะแบบมีข้อจำกัดช่วยให้สามารถนำข้อจำกัดเกี่ยวกับโดเมน เช่นจำนวนจริงหรือจำนวนเต็มมาใส่ไว้ในส่วนของกฎได้

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Syntax_and_semantics_of_logic_programming&oldid=1329867622 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไวยากรณ์และความหมายของการเขียนโปรแกรมเชิงตรรกะ

การเขียนโปรแกรมเชิงตรรกะ เป็น กระบวนทัศน์การเขียนโปรแกรม ที่รวมถึงภาษาต่างๆ ที่อิงตามตรรกะเชิงรูปธรรม เช่น Datalog และ Prolog บทความนี้จะอธิบายไวยากรณ์และความหมายของ ส่วนย่อย...

บันทึกข้อมูล

Datalog เป็นภาษาการเขียนโปรแกรมเชิงตรรกะที่ง่ายที่สุดและมีการศึกษาอย่างกว้างขวาง มีคำจำกัดความหลักสามประการเกี่ยวกับความหมายของ Datalog ซึ่งทั้งหมดนั้นเทียบเท่ากัน ไวยากรณ์และความหมายของภาษาการเขียนโปรแกรมเชิงตรรกะอื่นๆ...

ไวยากรณ์

โปรแกรม Datalog ประกอบด้วยรายการของ กฎ ( ข้อความ Horn ) [ 1 ] ถ้า ค่าคงที่ และ ตัวแปร เป็น เซต ที่นับได้ ของค่าคงที่และตัวแปรตามลำดับ และ ความสัมพันธ์ เป็นเซตที่นับได้ของ สัญลักษณ์ภาค แสดง ไวยากรณ์ BNF ต่อไปนี้จะแสดงโครงสร้างของโปรแกรม Datalog:

ความหมาย

มีแนวทางที่ใช้กันอย่างแพร่หลาย 3 แนวทางสำหรับความหมายของโปรแกรม Datalog ได้แก่ แนวทางเชิงทฤษฎีแบบจำลอง แนวทาง เชิงจุดคงที่ และ แนวทางเชิงทฤษฎีการพิสูจน์ แนวทางทั้งสามนี้สามารถพิสูจน์ได้ว่าเทียบเท่ากัน [ 3 ]