ซีแมนทิกส์ทางการของ OCaml ใน Coq


14

ความหมายของชุดย่อยขนาดใหญ่ของ OCaml เรียกว่าOCamllightเป็นกรงเล็บใน HOL โดย Owens เมื่อหลายปีก่อน เมื่อเร็ว ๆ นี้ประเภทความหมายของทฤษฎีเซตย่อยขนาดเล็กของ OCaml ได้ดำเนินการใน Nuprl โดยKreitz เฮย์เดนและ Hickey

มีการพัฒนาที่คล้ายกันใน Coq หรือไม่?


คุณอาจจะสนใจใน CakeML: cakeml.org ฉันไม่ใช่ OCaml โดยเฉพาะ
jmite

คำตอบ:


12

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

แทนที่จะสร้างระบบประเภทและความหมายขั้นตอนเล็ก ๆ เป็นความสัมพันธ์เชิงอุปนัยเขาให้เทคนิคสำหรับการแปลงโปรแกรม Caml เป็นสูตรลักษณะเฉพาะ นี้มีพื้นทั่วไปของความหมายหม้อแปลงกริยาที่จะสนับสนุนชุดย่อยขนาดใหญ่มากของ Ocaml - Obj.magicสะดุดตารวมทั้งบรรยากาศที่ไม่ปลอดภัยเช่น อ้างจากวิทยานิพนธ์ของเขา:

ฉันได้มุ่งเน้นไปที่ชุดย่อยของการเขียนโปรแกรม OCaml ซึ่งเป็นภาษาการเขียนโปรแกรมระดับสูงที่ต่อเนื่องตามค่าโทร การนำ CFML ไปใช้ในปัจจุบันรองรับ core calcul-แคลคูลัสซึ่งรวมถึงฟังก์ชั่นที่สูงกว่าการเรียกซ้ำการเรียกซ้ำแบบร่วมกัน มันรองรับสิ่งอันดับ, ตัวสร้างข้อมูล, การจับคู่รูปแบบ, เซลล์อ้างอิง, ระเบียนและอาร์เรย์ ฉันให้ห้องสมุด Caml เพิ่มเติมที่เพิ่มการสนับสนุนสำหรับพอยน์เตอร์พอยน์เตอร์และการอัปเดตที่รัดกุม

มันเป็นวิธีที่น่าสนใจมากหากคุณต้องการพิสูจน์ว่าโปรแกรม Caml นั้นถูกต้อง (น้อยกว่านั้นถ้าคุณสนใจ metatheory ของมัน)


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

สำหรับโปรแกรม OCaml ที่กำหนดสูตรลักษณะเฉพาะของมันสามารถนึกถึง denotational semantics เป็นข้อกำหนด "น้อยที่สุดทั่วไป" ที่สามารถใช้เพื่อพิสูจน์คุณสมบัติที่ต้องการของโปรแกรม หากคุณพูดถึง "ความถูกต้อง" ของ CFML ตัวเองคำถามคือ: ด้วยความหมายอย่างเป็นทางการทางเลือกใด?
gasche

แปลกที่มีโปรแกรมที่ควรรับรองซอฟต์แวร์และพฤติกรรมที่ไม่สามารถระบุได้ :)
Andrea Asperti

@AndreaAsperti คุณหมายถึงอะไร "ฝังตัวในระบบ"? แนวคิดที่อยู่เบื้องหลังสูตรลักษณะเฉพาะ (CFs) นั้นค่อนข้างตรงไปตรงมา: โปรแกรมแผนที่ไปยังสูตรเชิงตรรกะ (โดยทั่วไปคือก่อนและหลังเงื่อนไข) สูตรดังกล่าวจะอธิบายความหมายของโปรแกรมได้อย่างแม่นยำ กล่าวอีกนัยหนึ่งว่าโปรแกรมสองโปรแกรมตอบสนอง CFs เดียวกันถ้ามันแยกไม่ออกตามบริบท แผนที่จากโปรแกรมไปยัง CFs ทำโดยการเหนี่ยวนำโครงสร้างของโปรแกรมและสามารถกำหนดเป้าหมายตรรกะที่แสดงออกอย่างเพียงพอ A. Chargeuéraudเป็นเป้าหมายของตรรกะของ Coq แต่นั่นเป็นตัวเลือกที่อาจเกิดขึ้นได้
Martin Berger

1
@MartinBerger: กระดาษGuéneauและ al ได้รับการพิสูจน์แล้วว่ามีความสมบูรณ์เพราะการโพสต์ก่อนหน้า / โพสต์ที่ได้นั้นไม่ได้แสดงลักษณะของโปรแกรมที่ได้รับมา โฆษณา CF ของพวกเขามาจากความหมายที่ไม่เหมือนใครของ CakeML แต่ภาษาที่พิมพ์นั้นมีความเท่าเทียมเชิงสังเกตการณ์ที่แตกต่างกัน (สำหรับการตรวจสอบในทางปฏิบัติสิ่งนี้ไม่สำคัญอย่างยิ่งและง่ายกว่า)
Neel Krishnaswami

8

คุณอาจสนใจ Jacques Garrigue ในการใช้ ML ที่ได้รับการรับรองด้วย Polymorphism แบบโครงสร้างและแบบเรียกซ้ำ (Recursive Types ) ซึ่งกำหนดความสมบูรณ์ของความหมายแบบคงที่และไดนามิกและคุณสมบัติของการอนุมานประเภทสำหรับภาษา ML ด้วย (recursion และ) polymorphism เชิงโครงสร้าง มุมที่สูงขึ้นของ OCaml (ตัวแปรหลากหลายและประเภทวัตถุ)

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

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