เครื่องมือสร้างต้นแบบความหมายภาษาโปรแกรม


11

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

ฉันถามสิ่งนี้เพราะฉันกำลังอ่านหนังสือเกี่ยวกับAlloyและมีฟังก์ชั่นที่แน่นอนที่ฉันต้องการ แต่สำหรับรุ่นที่แสดงโดยใช้ตรรกะเชิงสัมพันธ์

ฉันรู้เรื่องOttแต่ไม่มีความสามารถในการ "ตรวจสอบแบบจำลอง" เนื่องจากมันมุ่งเน้นไปที่การสร้างรหัสสำหรับระบบผู้ช่วยที่พิสูจน์ได้

การอ้างอิงถึงการมีอยู่ของเครื่องมือดังกล่าวจะดีมาก


1
Ott เป็นขั้นตอนที่หนึ่งจากนั้นคุณทำการตรวจสอบแบบจำลองในผู้ช่วยพิสูจน์ที่คุณชื่นชอบ
Gilles 'หยุดความชั่วร้าย'

@Gilles: ตกลง แต่จุดหนึ่งของเครื่องมือตรวจสอบรูปแบบคือมันสร้างทั้งชุดขององค์ประกอบขนาดที่กำหนดเพื่อตรวจสอบว่าทรัพย์สินนั้นถูกต้องสำหรับพวกเขาหรือไม่ ด้วยวิธีนี้ฉันจะต้องเขียนโค้ดส่วนการสร้างนี้สำหรับทุกภาษาที่กำหนดไว้ คุณรู้หรือไม่ว่ามีวิธีใดที่จะทำให้ขั้นตอนการสร้างเป็นไปโดยอัตโนมัติ?
Rodrigo Ribeiro

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

คำตอบ:


8

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

เมื่อพูดถึงแล้วมีหลายทางเลือก (อาจไม่แตกต่างกันมาก) ที่คุณอาจเลือกใช้ (ซึ่งรวมถึงสิ่งที่คุณได้กล่าวถึงไปแล้ว):

  • ใช้ภาษา / กรอบงานเฉพาะที่ออกแบบมาสำหรับการสร้างและสร้างต้นแบบภาษาใหม่: เช่น Redex [1] ภาษาเฉพาะโดเมนที่ฝังอยู่ใน Racket สำหรับการระบุและตรวจสอบความหมาย (ปฏิบัติการ) ของภาษาโปรแกรมซึ่งให้คำจำกัดความของ ภาษาให้การจัดการงานง่าย ๆ เช่นการเรียงพิมพ์ (ในลาเท็กซ์) การตรวจสอบร่องรอยของการลดการทดสอบหน่วยและการทดสอบแบบสุ่ม (เช่นการตรวจสอบการพิมพ์)
  • ใช้ภาษาการสร้างแบบจำลองทั่วไปที่เสนอการกำหนดและดำเนินการวิเคราะห์บางอย่างได้อย่างง่ายดายตราบใดที่พวกเขาสามารถจับภาพภาษาเฉพาะที่อยู่ในมือในระดับที่จำเป็น; อัลลอยด์ [2] เป็นตัวอย่างของวิธีการดังกล่าว: แม้ว่าจะค่อนข้างทั่วไปและมีความยืดหยุ่นภาษาที่สามารถจำลองเป็นความสัมพันธ์ระหว่างรัฐในขณะที่การสนับสนุนสำหรับการตรวจสอบรูปแบบ (เช่นการประเมินภายในภาษาดังกล่าว) มาฟรีหลังจากความหมายจะแสดงด้วย โมเดลความสัมพันธ์ (เช่นแนวคิดบางประการสำหรับการสร้างแบบจำลองความหมายของภาษาสามารถพบได้ใน [3])
  • การฝังภาษาเพื่อตรวจสอบคุณสมบัติโดยใช้ทฤษฏีบทพิสูจน์ ตัวอย่างจะกำหนดภาษาเช่นเดียวกับความหมายของมันโดยการฝังไว้ในระบบพิสูจน์เช่น Coq [4] (รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการนี้เช่นเดียวกับการอภิปรายและการสาธิตความแตกต่างระหว่างการฝังลึกและตื้นใน Coq 5])
  • ใช้ Ott Ott ช่วยให้คุณสามารถกำหนดภาษาการเขียนโปรแกรมในสัญกรณ์ที่สะดวกและผลิตการเรียงพิมพ์และคำจำกัดความในระบบพิสูจน์ (โดยปกติจะฝังลึก) ซึ่งการตรวจสอบส่วนใหญ่ (เช่นการพิสูจน์) จะต้องดำเนินการด้วยตนเอง
  • การพัฒนาภาษาและความหมายของมันเช่นเดียวกับการตรวจสอบที่เหมาะสม (เช่นการทดสอบ) "ตั้งแต่เริ่มต้น" ในภาษาโปรแกรมวัตถุประสงค์ทั่วไปและการแปลเป็นระบบอื่น ๆ หากจำเป็นต้องมีสำหรับการตรวจสอบจุดประสงค์ (บางภาษาเช่น Leon [6]) รวมตัวตรวจสอบในตัวซึ่งอนุญาตให้พิสูจน์คุณสมบัติบางอย่างโดยอัตโนมัติและทำให้วิธีนี้คล้ายกับการฝังในระบบพิสูจน์)

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

[1] Casey Klein, John Clements, Christos Dimoulas, Carl Eastlund, Matthias Felleisen, Matthew Flatt, Jay A. McCarthy, Jon Rafkind, Sam Tobin-Hochstadt และ Robert Bruce Findler ดำเนินการวิจัยของคุณ: กับประสิทธิผลของเครื่องจักรน้ำหนักเบา POPL, 2012

[2] Daniel Jackson โลหะผสม: สัญกรณ์การสร้างแบบจำลองวัตถุที่มีน้ำหนักเบา TOSEM, 2002

[3] Greg Dennis, Felix Chang, Daniel Jackson การตรวจสอบรหัสแบบแยกส่วนด้วย SAT ISSTA, 2006

[4] ระบบการจัดการพิสูจน์แบบเป็นทางการ Coq

[5] การใช้เหตุผลอย่างเป็นทางการเกี่ยวกับโปรแกรม Adam Chlipala, 2016

[6] ระบบอัตโนมัติของ Leon เพื่อตรวจสอบซ่อมและสังเคราะห์โปรแกรมสกาล่าที่ใช้งานได้

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