ยากแค่ไหนที่จะลดการยกเลิกให้ถูกต้องเพียงบางส่วน


14

หากคุณมีความคุ้นเคยกับการตรวจสอบโปรแกรมที่คุณมีแนวโน้มที่จะชอบอ่านคำถามก่อนที่จะมีประวัติความเป็นมา หากคุณไม่คุ้นเคยกับการยืนยันโปรแกรมคุณอาจยังสามารถตอบคำถามนี้ได้ แต่คุณน่าจะชอบอ่านแบ็คกราวน์ก่อน

พื้นหลัง

มันมักจะระบุว่าการตรวจสอบความถูกต้องบางส่วนไม่สามารถตัดสินใจได้ เพื่อการถกเถียงกันขอเลือกหนึ่งวิธีที่เจาะจงมากในการทำให้คำสั่งนี้แม่นยำในรูปแบบของ Floyd - Hoare flowgraphคือเดี่ยวกับที่แตกต่างโหนดเริ่มต้นจากการที่ทุกโหนดสามารถเข้าถึงได้ โปรแกรมเป็น flowgraph มีโหนดมีคำสั่ง มีสามประเภทของคำสั่ง (1) สมมุติฐานสมมติว่า q , (2) การยืนยันยืนยัน qและ (3) การมอบหมาย v: = e ที่นี่qคือสูตร fol (ตรรกะอันดับหนึ่ง) eคือคำศัพท์ fol และvคือตัวแปร

เราบอกว่าโปรแกรมนั้นถูกต้องบางส่วนเมื่อมีวิธีการใส่คำอธิบายประกอบแต่ละโหนดxด้วยเงื่อนไขa (x)และ postcondition b (x)เช่นนั้น (1) เงื่อนไขเบื้องต้นของโหนดเริ่มต้นนั้นถูกต้อง (2) { A (x) } x { B (x) } ถือสำหรับทุกคำสั่งxและ (3) ( ข (x)หมายถึงA (y) ) ที่ถูกต้องสำหรับขอบทั้งหมดจากxไปY นี่คือสิ่งที่ Hoare triples ถูกกำหนดดังนี้:

  • { p } ยืนยัน q { r } หมายความว่า ( pหมายถึง ( qและr )) ถูกต้อง
  • { p } สมมติว่า q { r } หมายความว่า (( pและq ) หมายถึงr ) ถูกต้อง
  • { p } v: = e { r } หมายความว่า (( p ที่มีeแทนสำหรับv ) หมายถึงr ) ถูกต้อง

นี่เป็นข้อโต้แย้งมือหยักว่าทำไมการตรวจสอบนี้ถูกต้องบางส่วนเป็น undecidable: เมื่อคุณกรอกข้อมูลในบางA (x)และบางข (x)คุณต้องตรวจสอบถ้าบางสูตร Fol ที่ถูกต้องและที่เป็นที่ตัดสินไม่ได้

วิธีทั่วไปในการเข้ารหัสการยกเลิกในความถูกต้องเพียงบางส่วนคือการเพิ่มการยืนยันพิเศษบางอย่างที่กล่าวว่า "ตั้งแต่ครั้งที่ฉันถูกประหารชีวิตครั้งสุดท้าย การยืนยันความก้าวหน้าเหล่านี้จะต้องถูกวางไว้เพื่อให้การเดินแบบไม่มีที่สิ้นสุดทั้งหมดบนโฟลกราฟ (ที่เริ่มต้นที่โหนดเริ่มต้น) มีการยืนยันความคืบหน้าจำนวนมากอย่างไม่ จำกัด การจะมีความเฉพาะเจาะจงมากขึ้นขอบอกว่ายืนยันความคืบหน้ามักจะมีแบบฟอร์มยืนยัน ยู < วีที่UและVเป็นจำนวนเต็มบวกจะนำหน้าด้วยการกำหนดU = Fและจะตามมาด้วยการกำหนดV = U นี่เป็นฟังก์ชั่นที่แตกต่างกัน , ยูเป็นค่าปัจจุบันของตนและวีคุ้มค่าในอดีต ตอนนี้เนื่องจากเราพูดถึง "จำนวนเต็มบวก" และเราเปรียบเทียบพวกเขาเราต้องให้แน่ใจว่ามีจำนวนมากกว่าเล็กน้อยที่มีอยู่: สมมุติว่าPeanoสามารถใช้เลขคณิตได้ (ฉันไม่รู้สึกอย่างแรงกล้าเกี่ยวกับตัวเลือกนี้อย่าลังเลที่จะเพิกเฉยหากสะดวก) แน่นอนว่าfอาจใช้ฟังก์ชั่นและค่าคงที่อื่น ๆ ที่กล่าวถึงในโปรแกรม (โปรดทราบว่าการเพิ่มสมมติฐานที่จุดเริ่มต้นของโปรแกรมนั้นเทียบเท่ากับการแนะนำความจริงที่ไม่ใช่ตรรกะ)

ตอนนี้หากโปรแกรมที่มีการยืนยันความคืบหน้ายังคงถูกต้องเพียงบางส่วนเราก็รู้ว่าโปรแกรมดั้งเดิมสิ้นสุดลง

คำถาม

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

เพื่อให้แตกต่าง: ฉันกำลังมองหาการอ้างอิงที่เป็นทางการปัญหาของการลดการเลิกจ้างเพื่อความถูกต้องบางส่วนแล้วพูดอะไรบางอย่างเกี่ยวกับความซับซ้อนของมัน คำตอบที่ทำทั้งหมดนี้แน่นอนยินดีต้อนรับ


ให้ฉันตรวจสอบว่าฉันเข้าใจสิ่งนี้หรือไม่ สิ่งที่คุณขอจะให้เราเหนือสิ่งอื่นใดอัลกอริทึมที่ใช้โปรแกรมที่คำนวณฟังก์ชั่นรวมซ้ำและส่งออกหลักฐานของคำสั่งว่าฟังก์ชั่นรวม (ในรูปแบบของฟังก์ชั่นที่แตกต่างและหลักฐานที่เหมาะสม )? ฟังดูไม่อาจโต้แย้งได้อย่างสุดซึ้งสำหรับฉัน
Andrej Bauer

อังเดรมันฟังดูไม่อาจโต้แย้งได้เช่นกัน สิ่งที่ฉันขอเป็นข้อพิสูจน์ว่ามันไม่สามารถคำนวณได้
Radu GRIGore

คำตอบ:


7

วิธีหนึ่งในการตอบคำถามนี้คือการพิจารณาความซับซ้อนในการคำนวณของปัญหาการตัดสินใจสำหรับคลาสของความถูกต้องบางส่วนและแบบสอบถามการเลิกจ้างที่ทราบว่าสามารถตัดสินใจได้ การตีความเชิงนามธรรมโดยใช้โดเมน polyhedral สามารถสรุปคำอธิบายประกอบที่ถูกต้องบางส่วนที่คุณพูดถึงในกรณีที่คำอธิบายประกอบที่จำเป็นนั้นเป็นคำสันธานของความไม่เท่าเทียมกันเชิงเส้น การคำนวณบทคัดย่อหลังเงื่อนไขเป็นเลขชี้กำลังเป็นจำนวนเต็มในตัวแปร จากนั้นมีค่าใช้จ่ายในการค้นหาจุดคงที่ ดูเอกสารฉบับแรกของ Cousot สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้และห้องสมุด Apron หากคุณต้องการเล่นกับมันโดยตรง

การค้นหาฟังก์ชั่นชุดตัวเลือกนั้นสามารถตัดสินใจได้เมื่อฟังก์ชันชุดตัวเลือกเป็นแบบเส้นตรง ฉันไม่สามารถหาลักษณะเฉพาะที่ซับซ้อนของสิ่งนี้ได้ แต่ "การยกเลิกโปรแกรมเชิงเส้น" โดย Tiwari มีส่วนที่พูดถึงความซับซ้อน ดูเพิ่มเติม "วิธีการที่สมบูรณ์แบบสำหรับการสังเคราะห์ฟังก์ชั่นการจัดอันดับเชิงเส้น" โดย Podelski และ Rybalchenko นอกจากนี้ Byron Cook ยังทำงานเกี่ยวกับการใช้การตีความเชิงนามธรรมเพื่อช่วยสร้างข้อโต้แย้งการเลิกจ้าง ดูตัวอย่างเช่น "การจัดอันดับบทคัดย่อ" และ "การวิเคราะห์ผลต่างจากการวิเคราะห์ค่าคงที่" สิ่งเหล่านี้อาจให้ข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับความสัมพันธ์ระหว่างความถูกต้องบางส่วนและการเลิกจ้าง

ลิงค์:


1
ฉันหวังว่าคุณจะไม่รังเกียจการแก้ไขคำตอบของฉันและทำให้ลิงก์ใช้งานได้
Andrej Bauer

4

มีการลดลงอย่างเห็นได้ชัดจากความไม่จำเป็นในการยกเลิกไปสู่ความถูกต้องบางส่วนกล่าวคือ:

Pไม่สิ้นสุดเมื่อเริ่มต้นในสถานะเริ่มต้นที่พอใจφ iff { φ } P {false} ถูกต้อง

ฉันรู้ว่านี่ไม่ใช่คำตอบอื่น ข้อดีคือมันสั้นกว่าที่กล่าวไว้ข้างต้น


3

มีเทคโนโลยีมาตรฐาน - โดยทั่วไปจะไม่สามารถตัดสินใจได้แน่นอน - สำหรับการเติมกราฟของคุณด้วยเงื่อนไขก่อนและหลังคือความหมายที่อ่อนแอที่สุดของเงื่อนไขเสรีนิยมที่อ่อนแอที่สุดซึ่งเป็นรูปแบบของความหมายของหม้อแปลงเพรดิเคตที่ให้เงื่อนไขที่อ่อนแอที่สุด -termination สิ่งนี้เป็นทฤษฎีที่สมบูรณ์เกี่ยวกับความถูกต้องบางส่วนสำหรับภาษาดังกล่าวและแน่นอนว่าความถูกต้องทั้งหมด

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

ความประทับใจของฉันคือการทำงานเกี่ยวกับการตีความเชิงนามธรรมที่บุกเบิกโดย Patrick Cousot นั้นเป็นงานที่มีพลังมากที่สุดในพื้นที่นี้ แต่ฉันไม่ได้แกล้งทำเป็นผู้เชี่ยวชาญ


ฉันพยายามถามถึงความซับซ้อนของฟังก์ชั่นการอนุมาน ขอโทษที่ยังไม่ชัดเจน! ในฐานะที่เป็นคนอยากรู้อยากเห็น Rustan Leino ขึ้นมาด้วยตัวอย่างเมื่อเย็น (ในผับ) ที่แนะนำให้ฉันอย่างยิ่งว่า wlp ไม่ทำงานเช่นเดียวกับ wp & sp สำหรับโปรแกรมที่ฉันอธิบายที่นี่ ฉันจะต้องตรวจสอบอีกครั้งเมื่อฉันไปถึงสถานที่ที่เหมาะสมกับการทำงานมากขึ้น :)
Radu GRIGore

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