ทดสอบว่าข้อพิสูจน์โดยพลการเป็นวงกลมหรือไม่?


13

ฉันกำลังคิดเกี่ยวกับการพิสูจน์และวิ่งเข้าไปในการสังเกตที่น่าสนใจ ดังนั้นการพิสูจน์จึงเทียบเท่ากับโปรแกรมผ่านทาง Curry-Howard Isomorphism และการพิสูจน์แบบวงกลมสอดคล้องกับการเรียกซ้ำแบบไม่สิ้นสุด แต่เรารู้จากปัญหาการหยุดชะงักที่โดยทั่วไปแล้วการทดสอบว่าโปรแกรมที่เกิดซ้ำโดยพลการเกิดขึ้นซ้ำ ๆ ตลอดไปนั้นไม่สามารถตัดสินใจได้ โดย Curry-Howard นั่นหมายความว่าไม่มี "ตัวตรวจสอบการพิสูจน์" ที่สามารถตรวจสอบว่าการพิสูจน์ใช้การให้เหตุผลแบบวงกลมหรือไม่?

ฉันคิดเสมอว่าการพิสูจน์ควรประกอบด้วยขั้นตอนที่ตรวจสอบได้ง่าย (ซึ่งสอดคล้องกับการใช้งานของกฎการอนุมาน) และการตรวจสอบทุกขั้นตอนจะช่วยให้คุณมั่นใจว่าข้อสรุปดังต่อไปนี้ แต่ตอนนี้ฉันสงสัยว่า: จริง ๆ แล้วมันเป็นไปไม่ได้ที่จะเขียนตัวตรวจสอบเพื่อพิสูจน์เพราะไม่มีวิธีใดที่จะแก้ไขปัญหาการหยุดชะงักและตรวจหาเหตุผลแบบวงกลมได้?

คำตอบ:


15

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

Ya.(aa)a

aaa

กุญแจสำคัญในที่นี้คือ Y-combinator นั้นมีอยู่แล้วภายในภาษามันถือเป็นสัจพจน์ ดังนั้นหากคุณไม่ต้องการให้เกิดปัญหาคุณเพียงกำจัดมันเป็นความจริง!

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

Coq ทำสิ่งนี้ในทางที่ค่อนข้าง จำกัด : เพียงแค่ต้องการให้ฟังก์ชัน recursive ใด ๆ มีอาร์กิวเมนต์ที่การเรียกแบบเรียกซ้ำใด ๆ จะใช้เฉพาะอาร์กิวเมนต์ที่มีขนาดเล็กกว่าเท่านั้น Agda ทำสิ่งที่คล้ายกัน แต่ด้วยการตรวจสอบแฟนซีเล็กน้อยเพื่อยอมรับโปรแกรมเพิ่มเติมอีกสองสามรายการ


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

1
@boyers FWIW ใน Coq หนึ่งสามารถใช้Functionหรือสิ่งProgram Fixpointปลูกสร้างเพื่อพิสูจน์ฟังก์ชั่นบางอย่างว่าเป็นผลรวมถ้าตัวตรวจสอบจำนวนทั้งสิ้นล้มเหลว ตัวอย่างง่ายๆคือฟังก์ชั่นการผสานเรียงลำดับในรายการ เราจำเป็นต้องพิสูจน์ด้วยตนเองเราแบ่งรายการ (ความยาว> 1) ออกเป็นรายการย่อยที่เล็กกว่าอย่างเคร่งครัด
Anton Trunov

@ boyers ใช่ต้องมีสิ่งที่คุณไม่สามารถพิสูจน์ได้ใน Coq ตามทฤษฎีบทแรกของGödel ในทางปฏิบัติมันเป็นเรื่องยากที่จะพบพวกเขา แต่มีอาร์กิวเมนต์ในแนวทแยงอยู่เสมอ: Coq ไม่สามารถพิสูจน์ Coq ได้มันสามารถพิสูจน์ได้เพียงเซตย่อย (เซตย่อยขนาดใหญ่มากใจรวมถึงฟีเจอร์ทั้งหมด แต่มีขีด จำกัด ต่ำกว่า มันสามารถจัดการได้) ฉันจำได้ว่าการอ่านว่าทฤษฎีของ Coq นั้นเทียบเท่ากับสัจพจน์ของ Peano บวกกับการมีอยู่ของลำดับที่มีขนาดใหญ่ (และหลักฐานที่สมมติว่าลำดับที่ใหญ่กว่านั้นไม่เหมาะสม) แต่ฉันไม่สามารถหาข้อมูลอ้างอิงได้ในตอนนี้
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@AntonTrunov ในบริบทนี้Programและสิ่งที่คล้ายกันคือปลาเฮอริ่งแดง พวกเขาไม่เปลี่ยนทฤษฎี สิ่งที่พวกเขาทำคือน้ำตาล syntactic เพื่อใช้การวัดในการพิสูจน์: แทนที่จะให้เหตุผลว่าวัตถุที่คุณสนใจมีขนาดเล็กลงคุณเพิ่มระดับของการอ้อม: คำนวณวัตถุอื่นที่เล็กลง (เช่นบางขนาด) และพิสูจน์ว่ามัน เล็กลง ดูWfห้องสมุด
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@Gilles ฉันคิดว่าบริบทเกี่ยวกับด้านปฏิบัติ (คอนกรีต) ที่เป็นประโยชน์เช่นเมื่อฮิวริสติกของ Coq ล้มเหลว ... คุณช่วยลองค้นหาบทความที่คุณพูดถึงได้ไหม? ลิงค์จะนิยมมาก
Anton Trunov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.