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


25

ACSL (ภาษาข้อกำหนดของ Ansi C) เป็นข้อกำหนดสำหรับรหัส C ซึ่งมีหมายเหตุประกอบเป็นความคิดเห็นพิเศษที่ช่วยให้สามารถตรวจสอบรหัส C ได้อย่างเป็นทางการ

ฉันไม่ได้ดูมัน แต่ฉันคิดว่าวิธีการอย่างเป็นทางการที่ใช้ในการตรวจสอบACSLจะคล้ายกับ Hoare Logic สำหรับภาษาที่ใช้งานได้จริงเช่น Haskell ฉันไม่สามารถจินตนาการได้ว่าจะใช้วิธีการแบบใดในการยืนยันที่เป็นทางการ

มีใครทำสิ่งที่คล้ายกับACSLแต่สำหรับภาษาทำงานบริสุทธิ์? ถ้าไม่ได้มีการวิจัยใด ๆ เกี่ยวกับการตรวจสอบอย่างเป็นทางการในรูปแบบคำอธิบายประกอบข้อมูลจำเพาะสำหรับภาษาทำงาน

ฉันรู้ว่ามีการพิมพ์ที่ต้องพึ่งพาซึ่งรองรับหลายภาษา (Agda, Idris, ฯลฯ ... ) แต่ในการพิมพ์ที่ขึ้นอยู่กับ Haskell นั้นเป็นเรื่องยากโดยไม่ต้องใช้ตัวช่วยพิมพ์ (ไม่สามารถอ่านได้บ้าง) ด้วยความคิดนั้นและเนื่องจาก Haskell มีการสนับสนุนห้องสมุดที่ดีกว่า Agda และ Idris ฉันจึงเชื่อว่าระบบดังกล่าวสำหรับการตรวจสอบการทำงานอย่างเป็นทางการอาจมีประโยชน์ แต่ฉันไม่ทราบว่ามีการทำวิจัยนี้หรือไม่

คำตอบ:


13

ของฮอนด้าและโยชิดะ

(อาจ) หัวหอก log Hoare สำหรับภาษาที่ใช้งานได้จริง งานนี้มีพื้นฐานมาจากตรรกะ Hennessy-Milner และการเข้ารหัสของฟังก์ชันของ Milner ไปยังกระบวนการดังที่อธิบายไว้ที่นี่:

งานของRégis-Gianas และคณะที่กล่าวถึงในคำตอบอื่นนั้นคล้ายคลึงกับงานแรกของ Honda / Yoshida สิ่งนี้ได้ขยายไปสู่ภาษาสไตล์ ML ที่มีประสิทธิภาพ:

โลจิสติกส์ที่กล่าวถึงคือสิ่งที่เรียกว่าการสังเกตอย่างสมบูรณ์ซึ่งหมายถึงการปฏิบัติการและความหมายเชิงตรรกะตรงกัน Arthur Charguéraudใช้สิ่งนี้เพื่องานของเขาในการตรวจสอบโปรแกรมการทำงาน Hoare-style ใน Coq


15

F* * * *

ดูเหมือนว่าจะมีการติดต่อที่ใกล้ชิดระหว่างประเภทการปรับแต่งและ ACSL เช่นสัญลักษณ์

ในที่สุดฉันก็สามารถแนะนำให้มอง Agda และ Idris ให้ละเอียดยิ่งขึ้นเนื่องจากพวกเขาสามารถคอมไพล์กับ Haskell ได้และมีจุดประสงค์เพื่อให้ผู้ใช้ภาษาโปรแกรมที่สามารถใช้งานได้ (โดยเฉพาะอย่างยิ่ง Idris) ฉันสงสัยว่าเป็นไปได้ที่จะรวมไลบรารี Haskell เข้ากับรหัส Idris โดยไม่มีปัญหามากเกินไป


ไม่มีปัญหามากเกินไป - ไม่จริง ไอดริสเข้มงวดโดยค่าเริ่มต้นและ Haskell ขี้เกียจ สิ่งเดียวที่ทำให้เกิดปัญหาใหญ่ ความเข้ากันได้กับ Haskell นั้นไม่เคยมีความสำคัญสูงนักสำหรับการออกแบบไอดริส
Bartek Banachewicz

ยุติธรรมพอสมควร AGDA การตรวจสอบการเลิกจ้างโดยปริยายแม้ว่าดังนั้นสิ่งที่ต้องการเข้มงวดจะไม่เกิดปัญหาในทางทฤษฎี แน่นอนว่าเวลาทำงานอาจแตกต่างกันอย่างมาก
ดี้

11

ดูเพิ่มเติม Yann Régis-Gianas ปริญญาเอกวิทยานิพนธ์กับFrançois Pottier: โฮร์ลอจิกโทรโดยราคาโปรแกรมหน้าที่ (MPC'08) งานนี้ขยายเพื่อครอบคลุมผลข้างเคียง ML ตามปกติโดย Johannes Kanig และ Jean-Cristophe Filliatre ในปี 2009: Who: Verifier สำหรับโปรแกรมระดับสูงที่มีประสิทธิภาพ


8

มีกระดาษในปีนี้คือICFP , ประเภทการปรับแต่งสำหรับ Haskell บทความนี้เกี่ยวข้องกับการตรวจสอบการเลิกจ้างแทนที่จะเป็นลอจิกแบบเต็ม Hoare แต่หวังว่าจะเป็นการเริ่มต้นในทิศทางนี้

ส่วนงานที่เกี่ยวข้องในกระดาษที่มีคำแนะนำบางอย่างเช่นซูเพย์ตันโจนส์และ Claessen ของการตรวจสอบการทำสัญญาแบบคงที่สำหรับ Haskellและ Sonnex, Drossopoulou และ Eisenbach ของนักปราชญ์และ Vytiniotis เพย์ตันโจนส์ Claessen และโรเซ็นของรัศมี


1

งานของเราเกี่ยวกับการตรวจสอบสัญญาอย่างนุ่มนวลนั้นมีความเกี่ยวข้องที่OOPSLA 2012และICFP 2014ช่วยให้คุณสามารถเขียนสัญญาซึ่งมีลักษณะคล้ายกับข้อกำหนดของ ACSL มากมายจากนั้นตรวจสอบแบบคงที่หรือใช้การตรวจสอบแบบไดนามิกที่รันไทม์

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