การเรียนรู้ทฤษฎีการพิสูจน์อัตโนมัติ


44

ฉันกำลังเรียนรู้ทฤษฎีการพิสูจน์โดยอัตโนมัติ / นักแก้ปัญหา / ผู้ช่วยพิสูจน์ด้วยตนเองและโพสต์คำถามเกี่ยวกับกระบวนการเริ่มต้นที่นี่

โปรดทราบว่าหัวข้อเหล่านี้ไม่สามารถย่อยได้ง่ายโดยไม่มีพื้นหลังใน logics (ทางคณิตศาสตร์) หากคุณมีปัญหาเกี่ยวกับคำศัพท์พื้นฐานโปรดอ่านสิ่งเหล่านี้เช่นLogics in Computer Scienceโดย M. Huth และ M. Ryan (โดยเฉพาะบทที่หนึ่งสองและสี่) หรือAn Introduction to Mathematical Logic และ Type Theoryโดย P แอนดรู
สำหรับการแนะนำสั้น ๆ ลงในลำดับตรรกะที่สูงขึ้น (HOL) ดูที่นี่

ฉันดูCoqและอ่านบทแรกของการเพิ่มขึ้นของอิซาเบลในหมู่คนอื่น ๆ ; ประเภทของผู้ให้บริการทฤษฎีบทอัตโนมัติ

ฉันรู้จัก Prolog มาสองสามทศวรรษแล้วและตอนนี้ฉันได้เรียนรู้ F # ดังนั้น ML, O'Caml และ LISP จึงเป็นโบนัส Haskell เป็นสัตว์ร้ายต่างชนิดกัน

ฉันมีหนังสือต่อไปนี้

"คู่มือการใช้เหตุผลอัตโนมัติ"แก้ไขโดย Alan Robinson และ Andrei Vornkov

"คู่มือตรรกะเชิงปฏิบัติและการใช้เหตุผลอัตโนมัติ"โดย John Harrison

"การเขียนซ้ำในระยะเวลาและทุกอย่าง"โดย Franz Baader และ Tobias Nipkow

  1. Coq และ Isabelle แตกต่างกันอย่างไร

  2. ฉันควรเรียนรู้ทั้ง Isabelle หรือ Coq หรือทั้งสองอย่าง?

  3. มีข้อได้เปรียบในการเรียนรู้ Isabelle หรือ Coq ก่อนหรือไม่?

ค้นหาคำถามต่อไปของซีรีส์ที่นี่


7
เป็นสิ่งสำคัญที่จะต้องทราบว่าเครื่องมือที่คุณพูดถึงไม่ใช่เครื่องมือพิสูจน์โดยอัตโนมัติ แต่เป็นเครื่องมือช่วยในการพิสูจน์ (แม้ว่าจะสามารถพิสูจน์ได้ด้วยตนเอง)
Raphael

@DaveClarke ซ้ำหรือไม่
Raphael

@ ราฟาเอล: ใช่ (ยกเว้นตอนนี้คำตอบของฉันมีข้อมูลใหม่)
Dave Clarke

@DaveClarke คุณคิดว่าเราควรปิดอันนี้และรวมทั้งสองหรือไม่?
Raphael

@ ราฟาเอล: ใช่ ฉันเพิ่งคัดลอกข้อความคำตอบที่นี่ไปยังคำตอบของฉันสำหรับคำถามอื่น
Dave Clarke

คำตอบ:


25

การตั้งค่าของฉันสำหรับ Coq แต่ฉันคิดว่าคนอื่นชอบ Isabelle หนึ่งในสิ่งประหลาดที่ฉันพบเกี่ยวกับอิสซาเบลคือมีไวยากรณ์สองระดับซึ่งคำจำกัดความของคุณบางคำต้องอยู่ในเครื่องหมายคำพูดคู่ ไม่มีเรื่องไร้สาระเช่นนี้ใน Coq

ในที่สุดสิ่งที่เหมาะสมที่สุดสำหรับคุณอาจขึ้นอยู่กับสิ่งที่คุณต้องการพิสูจน์ ทั้งสองภาษามีการสนับสนุนห้องสมุดจำนวนมากและชุมชนที่ใช้งานอยู่ซึ่งมีการพัฒนาและทฤษฎีตัวอย่างทุกประเภท หากภาษาหนึ่งให้การสนับสนุนห้องสมุดเพียงพอ (หรืออื่น ๆ ) สำหรับประเภทของทฤษฎีที่คุณต้องการพัฒนาแล้วฉันจะเลือกภาษานั้น

กลยุทธ์หนึ่งคือทำแบบฝึกหัดอย่างง่าย ๆ ในทั้งสองภาษาและติดตามอย่างที่รู้สึกดีที่สุด ตัวอย่างเช่น,

นี่คือการโพสต์บล็อกสั้น ๆ เปรียบเทียบทั้งสองโดยคนที่ชอบอิสซาเบลในท้ายที่สุด

ตรวจสอบให้แน่ใจว่าคุณใช้ IDE ที่เหมาะสม (เช่นProofGeneral ) แทนที่จะทำสิ่งต่าง ๆ บนบรรทัดคำสั่ง

อีกวิธีในการรับ Coq คือการลองใช้Software Foundationsออนไลน์โดย Benjamin Pierce และคณะ มันมีการสอนที่ยอดเยี่ยมพร้อมรายละเอียดมากมาย จุดเน้นส่วนใหญ่เกี่ยวกับความหมายของภาษาการเขียนโปรแกรม แต่พื้นฐานจำนวนมาก (และอื่น ๆ ) ของ Coq และการพิสูจน์ทฤษฎีบทกึ่งอัตโนมัตินั้นครอบคลุมไปตลอดทาง


4
ProofGeneral ยอดเยี่ยมเมื่อคุณเชื่องแล้ว! เกี่ยวกับไวยากรณ์ของ Isabelle: iirc สิ่งที่อยู่ในเครื่องหมายคำพูดคู่คือสิ่งที่คุณพูดถึงสูตร ทุกอย่างอื่นคือการควบคุมที่พิสูจน์ได้ ฉันแม้ว่าความแตกต่างที่ชัดเจนเป็นสิ่งที่ดี แต่การเสนอราคาสองครั้ง (และการขาดการเน้นไวยากรณ์ที่อยู่ภายในเครื่องหมายคำพูด) อาจไม่ใช่วิธีที่ดีที่สุดในการนำไปใช้
Raphael

4
เราได้จัดทำหลักสูตรIsabelle / HOL wikiเมื่อปีที่แล้ว มันมีภาพรวมที่ดีบางอย่างที่หาได้ยากโดยทางอื่น
Raphael

18

สิ่งหนึ่งที่ฉันคิดว่าคุณจะพบว่าน่าสนใจก็คือคำว่า "ทฤษฎีบทพิสูจน์" นั้นแตกต่างกันไปอย่างมากขึ้นอยู่กับว่าคุณอยู่ในสาขาใดในขณะที่พวกเขาอยู่ - ในเชิงนามธรรม - เกี่ยวข้องกับทฤษฎีพิสูจน์เชิงปฏิบัติ ดูรายละเอียดเพิ่มเติมในคู่มือการใช้เหตุผลอัตโนมัติ) มีส่วนเกี่ยวข้องกับ Coq หรือ Isabelle น้อยกว่าที่คุณคิด

เมื่อฉันเริ่มเรียนรู้เกี่ยวกับทฤษฎีบทที่พิสูจน์สิ่งต่าง ๆ ที่เกี่ยวข้องหนังสือเล่มแรกที่ฉันอ่าน (ถึงตอนนี้ค่อนข้างเก่า ) เป็นคำสั่งที่ยอดเยี่ยมอันดับแรกของ Melvin Fitting และทฤษฎีการพิสูจน์แบบอัตโนมัติ หนังสือเล่มนี้เป็นหนังสือที่ยอดเยี่ยมมาก ๆ ซึ่งครอบคลุมหัวข้อต่างๆที่คุณจะเห็นว่าเกี่ยวข้องกับลอจิคัลการสั่งซื้อที่ต่ำกว่าซึ่งคุณจะได้รับระบบอัตโนมัติจำนวนพอใช้ ตรรกะชนิดที่คุณเรียนรู้ควรถูกกำหนดโดยสิ่งที่คุณต้องการให้เหตุผลและไม่ใช่ทฤษฎีบทมากมายที่พิสูจน์ได้เพื่อประโยชน์ของมัน ตัวอย่างเช่นในขณะที่ตรรกะการสั่งซื้อครั้งแรกช่วยให้คุณมีความหมายที่ชัดเจนและความสามารถในการใช้เหตุผลจำนวนมากชุมชนภาษาการเขียนโปรแกรมส่วนใหญ่ ถังของสิ่งต่าง ๆ ซึ่ง decidable มากขึ้น แต่แสดงออกน้อยกว่า)

อย่าใช้สิ่งนี้เพื่อหมายถึง - อย่างไรก็ตาม - สิ่งต่าง ๆ เช่นการใช้เหตุผลในการสั่งซื้อครั้งแรกและการตรวจสอบแบบจำลองนั้นไม่มีประโยชน์อย่างมากในทางปฏิบัติ พวกเขาได้รับ! คุณสามารถดู ACL2 เป็นตัวอย่างของตรรกะที่สร้างขึ้นบนยอดสั่งซื้ออันดับแรกซึ่งมีจำนวนประสบความสำเร็จที่น่าทึ่งในดินแดนอุตสาหกรรม นอกจากนั้นยังมีการพัฒนาจำนวนมากในการแก้ปัญหา SMT Modern SMT solver นั้นสร้างขึ้นจากตัวแก้ SAT ที่ทรงพลัง (ส่วนใหญ่ผ่านการค้นพบภายในยี่สิบปีที่ผ่านมาเพื่อการปรับปรุง DPLL) และได้เห็นการใช้งานจำนวนมากในสิ่งต่าง ๆ เช่นการใช้สัญลักษณ์

อย่างไรก็ตามอย่างที่ฉันพูดในขณะที่บิต "ทฤษฎีบทที่พิสูจน์" แบบดั้งเดิมมากขึ้นคือความสนุก แต่ก็มีอะไรอีกมากมายให้เรียนรู้ การเรียนรู้ Coq - มีน้อยที่ต้องทำเกี่ยวกับการเรียนรู้เครื่องมืออัตโนมัติที่ให้คุณและมีจำนวนมากที่จะทำกับการเรียนรู้ทฤษฎีประเภทที่มันเป็นพื้นฐาน (แคลคูลัสเชิงกริยาของกองกำลังเชิงโครงสร้าง) หากคุณไม่คุ้นเคยกับตรรกะเชิงสร้างสรรค์แกงมอร์ฮอร์มอร์ฟิซึ่มหรือทฤษฎีการพิมพ์คุณจะมีเวลาที่น่าตื่นเต้นในการเรียนรู้เครื่องมือเหล่านี้ แต่ฉันแทบจะไม่สามารถคิดได้เลยว่ามันเกี่ยวข้องกับสิ่งที่คุณเห็นในเล่มแรกมากเกินไป ของคู่มือ

ดังนั้นตัดสินใจว่าคุณต้องการทำอะไร: ตรวจสอบแบบจำลองและทฤษฎีบทด้วยตรรกะอันดับหนึ่งหรือใช้ทฤษฎีชนิดทรงพลังเพื่อให้เหตุผลเกี่ยวกับความถูกต้องของโปรแกรมของคุณ (หรือทฤษฎีบทในเชิงตรรกะ) หากเป็นครั้งแรกเรียนรู้เกี่ยวกับเทคนิคการหักอัตโนมัติมากขึ้นถ้าเป็นอันดับที่สองเรียนรู้เพิ่มเติมเกี่ยวกับ Coq, HOL และอื่น ๆ โดยวิธีการถ้าคุณต้องการเรียนรู้ Coq ในขณะที่การอ้างอิงข้างต้นเป็นสิ่งที่ดีฉันคิดว่า มีการอ้างอิงหลักสองประการสำหรับการเรียนรู้ Coq:

หนังสือฐานรากซอฟต์แวร์ของเบนจามินเพียร์ซ (ดร. เพียร์ซเป็นนักเขียนที่ยอดเยี่ยมและฉันขอแนะนำให้คุณดู "อิฐหนังสือ" ยอดนิยมของเขาถ้าคุณยังไม่ได้)

การเขียนโปรแกรมที่ผ่านการรับรองด้วยประเภทการพึ่งพา (Adam Chlipala เขียนได้ค่อนข้างดีแม้ว่าหนังสือของเขาจะมีวุฒิภาวะและความฉลาดมากกว่าการแนะนำที่ง่ายกว่าของ Pierce)


15

มีระบบที่หลากหลายสำหรับ Interactive Theorem Proving (ITP) - ดูการประชุมของชื่อนั้นเช่น Coq, Isabelle, HOLs, ACL2, PVS เป็นต้น

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

อาจมี "คุณสมบัตินักฆ่า" ที่คุณต้องการสำหรับงานของคุณ

นอกจากนี้ยังช่วยให้มีเพื่อนผู้เชี่ยวชาญในระบบใดระบบหนึ่งเหล่านี้

  • Coq และ Isabelle แตกต่างกันอย่างไร

ทั้งคู่เป็นลูกหลานของระบบ LCF จาก Stanford / Edinburgh / Cambridge ในปี 1985 G. Huet และ L. Paulson ทำงานร่วมกันใน Cambridge LCF เวอร์ชันสุดท้าย จากนั้นความแตกแยกก็เกิดขึ้นกับ Coc / CIC / COQ (ปัจจุบันคือ Coq) ในฝรั่งเศสและ Isabelle ใน Cambridge และมิวนิค โปรดทราบว่า HOL4, HOL-Light, HOL-XYZ เป็นลูกหลานอื่น ๆ ที่เกี่ยวข้องของ LCF

กว่า 20 ปีที่ผ่านมาความแตกต่างของ Coq กับ Isabelle น่าจะเกิดขึ้นตามรากฐานทางตรรกะ: ตรรกะที่พิมพ์ขึ้นอยู่กับที่นี่และตรรกะคลาสสิกที่เรียบง่ายที่นั่น วันนี้มีผลกระทบเล็กน้อยในทางปฏิบัติที่น่าประหลาดใจเนื่องจากมีการเพิ่มเลเยอร์จำนวนมากขึ้นบนระบบที่เป็นทางการของแต่ละระบบรวมถึงเครื่องมือเสริมและห้องสมุด

  • ฉันควรเรียนรู้ทั้ง Isabelle หรือ Coq หรือทั้งสองอย่าง?

คุณควรดูทั้งคู่และลองรับความรู้สึกถ้าคุณชอบไวน์และชีสมากกว่านี้หรือ Bratwurst และ Sauerkraut (ในฐานะหนึ่งในคนที่อยู่เบื้องหลังอิสซาเบล แต่ปัจจุบันที่ฝรั่งเศสฉันประหลาดใจว่ามีชาวฝรั่งเศสจำนวนมากที่ชอบ Sauerkraut เมื่อพวกเขาอยู่ที่บ้านโดยส่วนตัวและไม่มีใครดู :-)

  • มีข้อได้เปรียบในการเรียนรู้ Isabelle หรือ Coq ก่อนหรือไม่?

ฉันไม่คิดอย่างนั้น อาจมีอันตรายที่คุณติดอยู่กับสิ่งที่คุณลองก่อนและไม่ลองครั้งที่สองหรือคุณรู้สึกผิดหวังเร็วเกินไปกับคนที่หนึ่งแล้วเลิกเร็วเกินไป ไม่ว่าในกรณีใดคุณจะต้องใช้เวลาและความพยายามในการสร้างผลงานด้วยระบบใดระบบหนึ่ง

เนื่องจาก Proof General ในชื่อ "IDE" ถูกกล่าวถึงแล้ว: Proof General / Emacs เคยเป็นอินเตอร์เฟสรวมสำหรับ Coq และ Isabelle มาหลายปี แต่ฉันคงไม่เคยเรียกมันว่า IDE นอกจากนี้ยังมี CoqIDE พร้อมกับ "IDE" ในชื่อของมัน แต่เป็นตัวแก้ไขพื้นฐานที่ค่อนข้างด้านบนของวิดเจ็ต Gtk ปัจจุบัน Isabelle รวมถึง Isabelle / jEdit ซึ่งไม่มี "IDE" ในชื่อของมัน แต่มีไว้เพื่อประมาณสิ่งที่คุณเห็นเป็นประจำใน Netbeans หรือ IntelliJ IDEA --- สำหรับข้อความหลักฐานแทนรหัส Java


10

นี่คือวิดีโอ Coq แบบฝึกหัดที่ดีโดย Andrej Bauer มันไม่สมบูรณ์ แต่ฉันคิดว่ามันเป็นการแนะนำที่ดี


1
ที่ดี! สังเกตประโยคกลางใน "หลักฐานแรกด้วย Coq": "ลองคิดดูว่าคุณจะทำมันอย่างไรบนกระดาษ" คำแนะนำที่ดีที่สุด
Raphael

4

การแนะนำอิสซาเบลนี้ค่อนข้างละเอียดถี่ถ้วน

โปรดดูการแนะนำนี้กับอิสซาเบล

โดยทั่วไปอิสซาเบลนั้นค่อนข้างง่ายในการเริ่มต้นเนื่องจากมีตัวอย่างมากมาย ตัวอย่างเช่นในเว็บไซต์อย่างเป็นทางการ

ป.ล. - ฉันไม่มีส่วนเกี่ยวข้องกับอิสซาเบลฉันเป็นนักทฤษฎีในรูปแบบที่เป็นทางการ แต่ฉันรู้ว่าอิสซาเบลเกิดขึ้นบ่อยครั้งเป็นจุดเริ่มต้นเริ่มต้น


1
“ ฉันรู้ว่าอิสซาเบลเกิดขึ้นบ่อยครั้งเป็นจุดเริ่มต้นเริ่มต้น”: ฉันอยากจะบอกว่า HOL มักจะมาเป็นจุดเริ่มต้นเริ่มต้นและในฐานะผู้ช่วยพิสูจน์นั่นคือ Coq ซึ่งมักจะมาเป็นค่าเริ่มต้น คิดว่ามันเป็นเรื่องตลก…ตรรกะที่มีชื่อเสียงที่สุด (HOL มีชื่อเสียงมากกว่า CoC) และผู้ช่วยพิสูจน์ที่มีชื่อเสียงที่สุด (Coq มีชื่อเสียงมากกว่า Isabelle) ไม่ตรงกัน (Coq อิงจาก CoC และ Isabelle on HOL)
Hibou57

2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.