ระบบประเภทสามารถทำหน้าที่เป็นผู้ช่วยที่พิสูจน์สำหรับฟังก์ชั่นต่างประเทศได้หรือไม่?


9

ระบุว่า:

  1. ภาษาที่มีระบบการพิมพ์ที่แสดงออกมาก (เช่นIdris ) สามารถมีกลไกการหลบหนีเช่นอินเตอร์เฟสของฟังก์ชันต่างประเทศ / unsafePerformIO
  2. มีผู้ช่วยที่พิสูจน์ได้ซึ่งสามารถใช้เพื่อพิสูจน์คุณสมบัติบางอย่างของโปรแกรมที่เขียนในภาษาที่ไม่มีระบบชนิดที่สามารถแสดงคุณสมบัติเหล่านั้นได้
  3. การโต้ตอบของ Curry – Howard แสดงให้เห็นว่าการใช้งานการตรวจสอบประเภทของฟังก์ชันที่มีประเภทที่กำหนดสำเร็จนั้นเป็นเครื่องพิสูจน์ว่าประเภทนั้นแสดงออกมาอย่างไร

หนึ่งสามารถแสดงหลักฐานที่ไม่น่าสนใจของคุณสมบัติของรหัสภาษาต่างประเทศในระบบชนิดของภาษาพื้นเมือง?

ตัวอย่างเช่นสมมติว่าฉันมีฟังก์ชั่น C ที่เรียกว่า stable_qsort ที่เรียงลำดับตัวเลขในวิธีที่ชาญฉลาดและมีประสิทธิภาพมากในขณะที่รักษาลำดับขององค์ประกอบที่เท่ากันอยู่แล้วและโปรแกรม Idris ที่เรียก stable_qsort ผ่าน FFI ของมัน ฟังก์ชั่น C ฉันสามารถพิสูจน์ได้ว่าฟังก์ชั่นไม่ได้เรียงลำดับองค์ประกอบที่เท่ากันสำหรับอินพุตทั้งหมดในรหัส Idris ของฉันแทนที่จะใช้ตัวช่วยพิสูจน์แยกต่างหากหรือไม่

คำตอบ:


10

เรื่องสั้นสั้น ๆ : คุณไม่สามารถทำได้ ฟังก์ชั่นต่างประเทศเป็นเหมือนกล่องดำและประเภทที่คุณกำหนดให้เป็นสัญญาที่คุณทำ: ในการติดต่อกับ Curry-Howard ที่จะสอดคล้องกับการเพิ่มสัจพจน์กับทฤษฎีของคุณ

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

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