คอมไพเลอร์พิสูจน์ความถูกต้อง


20

ฉันกำลังมองหาวัสดุการสอนที่ครอบคลุมการพิสูจน์ความถูกต้องของคอมไพเลอร์โดยเฉพาะอย่างยิ่งการใช้วิธีการ denotational ในระดับเริ่มต้นของนักเรียนที่จบการศึกษา

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

คำตอบ:


10

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

พิสูจน์ความถูกต้องเชิงสัมพันธ์อย่างง่ายสำหรับการวิเคราะห์แบบคงที่และการแปลงโปรแกรม Nick Benton 2004

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

เอกสารเหล่านี้อาจสนใจคุณเช่นกัน พวกเขาช่วยฉันอย่างมาก!

  1. การพิสูจน์ความถูกต้องของการปรับแต่งคอมไพเลอร์โดย Temporal Logic , David Lacey, Neil D. Jones, Eric Van Wyk, Carl Christian Frederiksen ฉันจะคิดว่ามีเนื้อหามากขึ้นโดยใช้ bisimulation ในบริบทของการเพิ่มประสิทธิภาพคอมไพเลอร์ หากเป้าหมายของคุณคือเทคนิคการถอดแบบจริงๆคุณสามารถเข้ารหัสข้อพิสูจน์เหล่านี้โดยใช้ลักษณะของการแบ่งส่วน
  2. การสร้างการปรับแต่งคอมไพเลอร์จากบทพิสูจน์ , Ross Tate, Michael Stepp และ Sorin Lerner รวมถึงการทำให้เป็นหมวดหมู่เชิงทฤษฎีของวิธีการพิสูจน์ของพวกเขา
  3. การพิสูจน์การปรับให้เหมาะสมถูกต้องโดยใช้ Parameterized Program Equivalence , Sudipta Kundu, Zachary Tatlock และ Sorin Lerner ไปที่นั่นถ้าคุณชอบความสัมพันธ์เชิงตรรกะ
  4. คอมไพเลอร์ที่ได้รับการตรวจสอบอย่างเป็นทางการแบ็กเอนด์ซาเวียร์เลอรอย

10

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


7

Adam Chlipala คอมไพเลอร์รักษาประเภทที่ได้รับการรับรองจากแลมบ์ดาแคลคูลัสเป็นภาษาแอสเซมบลีดูเหมือนจะเป็นตัวอย่างที่ดีของการพิสูจน์ความถูกต้องของคอมไพเลอร์อย่างง่ายโดยใช้วิธีการ denotational โดยมีข้อดีเพิ่มเติม


1
นั่นเป็นกระดาษที่ดีมาก
Neel Krishnaswami

7

Graham Hutton มีตัวอย่างเล็ก ๆ ในหนังสือ"Programming in Haskell"ซึ่งเป็นจุดเริ่มต้นที่ดี

ฉันยังมีหลักฐานอันยานยนต์ไม่กี่ (logics ต่างๆ) ของคอมไพเลอร์แมคคาร์-จิตรกรในรายงานที่ฉันได้สำหรับปริญญาเอกของฉัน


7

บางทีอาจจะไม่ได้เป็นตัวอย่างที่ง่าย แต่ซาเวียร์เลอรอยได้ทำมากของการทำงานในพื้นที่นี้เช่นได้รับการยืนยันอย่างเป็นทางการเรียบเรียง C เขาได้นำเสนอผลงานของโรงเรียนภาคฤดูร้อนโดยใช้ภาษา IMP ขนาดเล็กที่จำเป็นซึ่งเป็นการแนะนำเบื้องต้นเกี่ยวกับงานที่ก้าวหน้ายิ่งขึ้น

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