อะไรคือข้อแตกต่างระหว่างการพิสูจน์และโปรแกรม (หรือระหว่างข้อเสนอและประเภท)?


26

เนื่องจากCurry-Howard Correspondenceแพร่กระจายอย่างกว้างขวางดังนั้นจึงมีความแตกต่างระหว่างหลักฐานและโปรแกรม (หรือระหว่างข้อเสนอและประเภท)? เราสามารถระบุได้จริงเหรอ?


1
ดูเหมือนว่าเหมาะสำหรับcstheory.stackexchange.com

หาก op ต้องการ, @ me ในความคิดเห็นและฉันสามารถโยกย้ายมันสำหรับคุณ

2
John Crossley เขียนบทความเกี่ยวกับเรื่องนี้ที่ฉันเห็นโพสต์เมื่อเร็ว ๆ นี้: [ความแตกต่างระหว่างบทพิสูจน์และรายการคืออะไร] [ citeseerx.ist.psu.edu/viewdoc/ ...... - ฉันยังไม่ได้อ่าน แต่ แนะนำให้มา ...
TJ Ellis

1
@TJ Ellis ขอบคุณสำหรับการเชื่อมโยง แต่หลังจากหางสั้น ๆ ดูเหมือนว่ากระดาษไม่ตอบคำถามที่วางอยู่ในชื่อของมัน (หรือคำตอบคือ "พวกเขาเหมือนกัน")
สูงสุด taldykin

@TJ Ellis, คุณเห็นมันโพสต์บน reddid / r / compsci หรือไม่? ฉันทำมัน;) @max ฉันรู้สึกเช่นนั้นนั่นเป็นเหตุผลที่ฉันโพสต์คำถามนี้

คำตอบ:


20

ภาษาการเขียนโปรแกรมที่ผู้คนใช้ในแต่ละวันไม่เหมาะกับการติดต่อกับ Curry-Howard เพราะระบบประเภทของพวกเขาอ่อนแอเกินไป หากต้องการพูดสิ่งที่น่าสนใจโดยใช้ Curry-Howard สำหรับโปรแกรมที่จำเป็นต้องมีระบบการพิมพ์ที่ซับซ้อนยิ่งขึ้น หนังสือดัดแปลงการพิสูจน์เป็นโปรแกรมผลักมุมนี้โดยมีจุดประสงค์ในการสังเคราะห์โปรแกรมที่จำเป็น ด้วยประเภทที่ขึ้นอยู่กับการเป็นที่นิยมมากขึ้นอย่างแน่นอนในภาษาหน้าที่การวิจัย ( Agda , Epigram ) ความแตกต่างจะกลายเป็นพร่าเลือน แน่นอนว่าคุณสามารถทำการสังเคราะห์ / แยกโปรแกรมภายในตัวพิสูจน์ทฤษฎีบทCoq (และอื่น ๆ ) ซึ่งเป็นไปตาม Curry-Howard

การติดต่อ Curry-Howard ยังสามารถใช้ในสถานการณ์ที่บทพิสูจน์ไม่สอดคล้องกับโปรแกรมอย่างชัดเจน (หรือไม่ใช่โปรแกรมที่ทุกคนจะทำงาน) หนึ่งในตัวอย่างนี้อยู่ในการอนุมัติหลักฐานการดำเนินการ ข้อเสนอนั้นตรงกับข้อความที่ว่าใครได้รับอนุญาตให้ทำอะไร หลักฐานแสดงหลักฐานที่จำเป็นว่าข้อเสนอมีไว้จึงอนุญาตให้มีการร้องขอได้ เพื่อเข้ารหัสการพิสูจน์คำแนะนำการพิสูจน์ (ผ่านแกง - ฮาวเวิร์ด) เงื่อนไขการพิสูจน์ถูกส่งระหว่างฝ่ายต่าง ๆ ในฐานะตัวแทนของการพิสูจน์ความถูกต้องของคำขอการให้สิทธิ์ แต่ไม่ถือว่าเป็นโปรแกรม


1
คุณควรพูดถึงภาษาที่พิมพ์อย่างพึ่งพาเนื่องจากเส้นแบ่งระหว่างการพิสูจน์และข้อเสนอนั้นเบลอ
Ohad Kammar

1
จริง อย่าลืมการสังเคราะห์ / การแยกโปรแกรมของ Coq
Dave Clarke

k T(e,k)¬k T(e,k)Tek

1
@Kaveh: ถามคำถามนี้เป็นคำถามแยกต่างหาก ในความคิดเห็นคุณสามารถพูดว่า "การแปล Godel-Gentzen เป็นการเปลี่ยนแปลงที่ต่อเนื่องผ่าน" แต่สิ่งที่คลุมเครือน้อยกว่าจะไม่พอดี :)
Neel Krishnaswami

@Neel เสร็จแล้ว: cstheory.stackexchange.com/q/5245/186
Kaveh

10

ใน Coq มี 2 ประเภท (Prop และ Set) โดยโปรแกรมเมอร์ใช้เพื่อแยกสิ่งที่พิสูจน์ว่าจะไม่ผลิตรหัสจริงและส่วนหนึ่งของการพิสูจน์ที่จะใช้ในการแยกรหัสทำงาน (โปรแกรมของคุณ)

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

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

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

ตัวอย่างจะทำให้ชัดเจนยิ่งขึ้นฉันหวังว่า:

เมื่อคุณใช้ฟังก์ชั่นตัวตนที่มีประเภทตามคุณต้องผ่านประเภทของคุณจะใช้ฟังก์ชั่นด้วย! กำลังใช้ประเภทนี้เป็นค่าใน "โปรแกรม" ของคุณ!

แลมบ์ดาที่ไม่ได้พิมพ์

λx.x

ด้วยประเภทที่ขึ้นอยู่กับ:

id: (A: Set) -> A -> A

(λA.(λx.x))

หากคุณใช้งานฟังก์ชั่นนี้คุณจะทำเช่นนี้:

id Naturals 1

โปรดสังเกตว่า "type" (ในกรณีนี้ Set of Naturals) ที่ถูกส่งผ่านเป็นค่าจะถูกโยนทิ้งไปดังนั้นจะไม่ถูกคำนวณ แต่ยังอยู่ในส่วน "โปรแกรม" ของคำ นั่นคือสิ่งที่จะเกิดขึ้นกับส่วน "พิสูจน์" พวกเขาจำเป็นต้องอยู่ที่นั่นเพื่อตรวจสอบคำศัพท์ แต่ในระหว่างการคำนวณพวกเขาจะถูกโยนทิ้งไป


6

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

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

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

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

x:xT

มันค่อนข้างง่าย แต่ฉันคิดว่ามันแนะนำความแข็งแกร่งของความคิด (แม้ว่าบางคนจะผูกพันไม่ชอบมัน ;-))


คำตอบที่ดีมาก
toto

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

ฉันคิดว่านี่เป็นบิตเล่ห์เหลี่ยมขึ้นอยู่กับว่าคุณกำหนด จำกัด และไม่มีที่สิ้นสุดด้วยความเคารพต่อบทพิสูจน์ โดยทั่วไปหลักฐานทั้งหมดที่เรายอมรับนั้นมี จำกัด เพราะพวกเขาจะต้องโน้มน้าวใจมนุษย์ในเวลาอัน จำกัด หลักฐานที่ต้องอาศัยโครงร่างการเหนี่ยวนำ (เช่นบทพิสูจน์ "อนันต์" ส่วนใหญ่) โดยการวัดนี้ยังคง จำกัด พวกเขามีเพียงขั้นตอนเชิงสัญลักษณ์ที่แสดงถึงการคำนวณแบบไม่มีที่สิ้นสุด แต่ปกติ หลักฐานที่ไม่มีที่สิ้นสุดอย่างแท้จริงที่ฉันคิดว่าพวกเราส่วนใหญ่จะปฏิเสธว่าเป็นข้อพิสูจน์ที่ถูกต้องจะเป็นสิ่งที่คุณต้องพิจารณาข้อเท็จจริงที่แตกต่างจำนวนมากเพื่อตรวจสอบ
Marc Hamann

5

หลักฐานที่ไม่เกี่ยวข้อง?

เมื่อคุณเขียนโปรแกรมบางโปรแกรมคุณมีความสนใจในประสิทธิภาพของโปรแกรมการใช้หน่วยความจำ
เช่นการใช้อัลกอริทึมการเรียงลำดับที่ชาญฉลาดแทนที่จะใช้การเรียงลำดับแบบมีฟองแม้ว่าการใช้งานของพวกเขาจะมีประเภทเดียวกัน

แต่เมื่อคุณพิสูจน์ทฤษฎีบทบางอย่างมันเป็นเพียงหลักฐานที่คุณสนใจ

แน่นอนว่าจากมุมมองด้านสุนทรียภาพการพิสูจน์บางอย่างนั้นง่ายกว่า / สวยงาม / เร้าใจ / ฯลฯ (เช่นหลักฐานจาก The Book)


4

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

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

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

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