คำถามติดแท็ก program-verification

เมื่อระบุข้อกำหนดโปรแกรมจะตอบสนองหรือไม่

4
ความสัมพันธ์ระหว่างสัญญาและการพิมพ์ที่ขึ้นอยู่กับ
ฉันอ่านบทความเกี่ยวกับประเภทและสัญญาการเขียนโปรแกรม จากส่วนใหญ่ของสิ่งที่ฉันได้อ่านดูเหมือนว่าสัญญาจะถูกตรวจสอบข้อ จำกัด แบบไดนามิกและประเภทขึ้นอยู่กับการตรวจสอบแบบคงที่ มีเอกสารบางฉบับที่ทำให้ฉันคิดว่าเป็นไปได้ที่จะมีสัญญาที่ตรวจสอบบางส่วนแบบคงที่: การตรวจสอบประเภทลูกผสม (C. Flanagan - 2006) การรวมประเภทและสัญญาแบบผสมผสาน (J. Gronski, C. Flanagan - 2007) ด้วยสิ่งนี้ดูเหมือนว่าจะมีการทับซ้อนจำนวนมากและการจัดประเภทสัญญาของฉันกับประเภทที่ขึ้นต่อกันเริ่มหายไป มีบางอย่างที่ลึกซึ้งยิ่งขึ้นในแนวคิดที่ฉันขาดหายไปหรือไม่? หรือเป็นเพียงหมวดหมู่คลุมเครือจริง ๆ ของการแสดงแนวคิดพื้นฐานเดียวกันหรือไม่

1
วิธีการตรวจสอบว่าการพิสูจน์ต้องใช้ "เทคนิคการให้เหตุผลที่สูงกว่าการสั่งซื้อ"?
คำถาม: สมมติว่าฉันมีสเปคของปัญหาซึ่งประกอบด้วยสัจพจน์และเป้าหมาย (เช่นปัญหาการพิสูจน์ที่เกี่ยวข้องคือว่าเป้าหมายนั้นเป็นที่น่าพอใจหรือไม่หากมีสัจพจน์ทั้งหมด) ให้เราสมมติว่าปัญหาไม่ได้มีความไม่สอดคล้อง / ความขัดแย้งใด ๆ ในสัจพจน์ มีวิธีการตรวจสอบล่วงหน้า (เช่นโดยไม่ต้องสร้างหลักฐานเต็มรูปแบบครั้งแรก) ที่พิสูจน์ปัญหาจะต้องมี "เหตุผลการสั่งซื้อที่สูงขึ้น"? โดย "เหตุผลการสั่งซื้อที่สูงขึ้น" ฉันหมายถึงการใช้ขั้นตอนการพิสูจน์ที่ต้องใช้ตรรกะลำดับสูงกว่าที่จะเขียนลง ตัวอย่างทั่วไปสำหรับ "เหตุผลที่สูงกว่าคำสั่งซื้อ" จะเป็นการเหนี่ยวนำ: การเขียนแผนการเหนี่ยวนำในหลักการต้องใช้ตรรกะการสั่งซื้อที่สูงขึ้น ตัวอย่าง: หนึ่งสามารถระบุปัญหาการพิสูจน์ "การบวกเลขสองตัวเป็นธรรมชาติได้หรือไม่" ใช้ตรรกะลำดับแรก (เช่นกำหนดจำนวนธรรมชาติผ่านคอนสตรัคเตอร์ศูนย์ / ซัคพร้อมกับสัจพจน์มาตรฐานพร้อมกับสัจพจน์ที่กำหนดฟังก์ชัน "บวก" ซ้ำ ๆ ) การพิสูจน์ปัญหานี้ต้องการการเหนี่ยวนำในโครงสร้างของอาร์กิวเมนต์แรกหรืออาร์กิวเมนต์ที่สองของ "บวก" (ขึ้นอยู่กับคำจำกัดความที่แน่นอนของ "บวก") ฉันจะรู้เรื่องนี้ก่อนที่จะพยายามพิสูจน์เช่นการวิเคราะห์ลักษณะของปัญหาการป้อนข้อมูล ... (แน่นอนว่านี่เป็นเพียงตัวอย่างง่าย ๆ สำหรับวัตถุประสงค์ในการประกอบภาพ - ในความเป็นจริงสิ่งนี้น่าสนใจสำหรับปัญหาการพิสูจน์ที่ยากกว่าการสับเปลี่ยนของบวก) บริบทเพิ่มเติมบางส่วน: ในการวิจัยของฉันฉันมักพยายามใช้ทฤษฎีลำดับขั้นตอนแรกโดยอัตโนมัติเช่น Vampire, eprover และอื่น ๆ เพื่อแก้ปัญหาการพิสูจน์ (หรือบางส่วนของปัญหาการพิสูจน์) ซึ่งบางอย่างอาจต้องใช้เหตุผลในการสั่งซื้อที่สูงขึ้น …

2
ความสมบูรณ์เต็มรูปแบบ vs สิ่งที่เป็นนามธรรมของการแปลโปรแกรม
ความพยายามในการตรวจสอบคอมไพเลอร์มักจะลงมาเพื่อพิสูจน์คอมไพเลอร์อย่างสมบูรณ์แบบ: มันรักษาและสะท้อนความเท่าเทียม (ตามบริบท) แทนที่จะให้หลักฐานที่เป็นนามธรรมอย่างเต็มรูปแบบงานตรวจสอบคอมไพเลอร์ล่าสุด (อิงตามหมวดหมู่) โดย Hasegawa [ 1 , 2 ] และ Egger et อัล [ 3 ] พิสูจน์ความครบถ้วนสมบูรณ์ของการแปล CPS ที่หลากหลาย คำถาม: อะไรคือความแตกต่างระหว่างความครบถ้วนสมบูรณ์และนามธรรมที่สมบูรณ์? สำหรับฉันแล้วความสมบูรณ์ดูเหมือนว่าการสะท้อนความเท่าเทียมกันสำหรับการแปลและความบริบูรณ์ดูเหมือนจะเป็นผลมาจากการรักษาสมดุล หมายเหตุ : ทั้ง Curien [ 7 ] และ Abramsky [ 8 ] สำรวจความสัมพันธ์ระหว่างความแน่นอนความเป็นนามธรรมเต็มและความสมบูรณ์แบบในระดับหนึ่ง ฉันสงสัยว่าแหล่งข้อมูลเหล่านี้อาจมีคำตอบสำหรับคำถามของฉัน แต่หลังจากอ่านพื้นผิวฉันยังไม่ได้ยืนยันว่า พื้นหลังบางส่วน : คำว่า "full ครบถ้วน" ได้รับการประกาศเกียรติคุณจาก Abramsky และ Jagadeesan [ …

9
จะสร้าง Mission Critical Software ได้อย่างไร
ฉันเรียนรู้วิธีการอย่างเป็นทางการด้วยตนเอง ฉันได้ยินมาว่ามีการใช้วิธีการอย่างเป็นทางการ (และมักใช้เท่านั้น) เพื่อสร้างซอฟต์แวร์ที่มีความสำคัญต่อภารกิจ (เช่นตัวควบคุมเครื่องปฏิกรณ์นิวเคลียร์ตัวควบคุมการบินของอากาศยานตัวควบคุมโพรบอวกาศ) นั่นเป็นเหตุผลที่ฉันสนใจที่จะเรียนรู้: p อย่างไรก็ตามหลังจากเรียนรู้วิธีการที่เป็นทางการ (โดยเฉพาะอย่างยิ่ง LTL, CTL และพี่น้องของพวกเขา) ฉันรู้สึกว่าพวกเขาสามารถใช้เพื่อตรวจสอบความถูกต้องของสเปคเท่านั้น (ความปลอดภัย, ความมีชีวิตชีวา, ความเป็นธรรม ฯลฯ ) แต่วิธีการตรวจสอบว่าซอฟต์แวร์ (ไม่เพียง แต่สเปค) ถูกต้องแน่นอน? ข้อจำกัดความรับผิดชอบ: ฉันเป็นคนงี่เง่า 90% เมื่อพูดถึงวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี ดังนั้นโปรดเมตตาในขณะตอบรับ

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

3
ยากแค่ไหนที่จะลดการยกเลิกให้ถูกต้องเพียงบางส่วน
หากคุณมีความคุ้นเคยกับการตรวจสอบโปรแกรมที่คุณมีแนวโน้มที่จะชอบอ่านคำถามก่อนที่จะมีประวัติความเป็นมา หากคุณไม่คุ้นเคยกับการยืนยันโปรแกรมคุณอาจยังสามารถตอบคำถามนี้ได้ แต่คุณน่าจะชอบอ่านแบ็คกราวน์ก่อน พื้นหลัง มันมักจะระบุว่าการตรวจสอบความถูกต้องบางส่วนไม่สามารถตัดสินใจได้ เพื่อการถกเถียงกันขอเลือกหนึ่งวิธีที่เจาะจงมากในการทำให้คำสั่งนี้แม่นยำในรูปแบบของ 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และ …

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

2
ศิลปะแห่งการเรียนแบบ Monadic
Monadic First Order Logic หรือที่เรียกกันว่า Monadic Class ของปัญหาการตัดสินใจเป็นที่ซึ่งเพรดิเคตทั้งหมดใช้อาร์กิวเมนต์เดียว มันก็แสดงให้เห็นว่า decidable โดย Ackermann และเป็นNEXPTIME สมบูรณ์ อย่างไรก็ตามปัญหาเช่น SAT และ SMT มีอัลกอริทึมที่รวดเร็วในการแก้ปัญหาแม้จะมีขอบเขตทางทฤษฎี ฉันสงสัยว่ามีการวิจัยคล้ายกับ SAT / SMT สำหรับลอจิกลำดับแรกแบบ monadic หรือไม่? "state of the art" คืออะไรในกรณีนี้และมีอัลกอริทึมที่มีประสิทธิภาพในการปฏิบัติแม้จะมีการ จำกัด ขอบเขตทางทฤษฎีในกรณีที่เลวร้ายที่สุด?

1
ระบบประเภทที่ป้องกันการรั่วไหลของหน่วยความจำที่เกี่ยวข้องกับความขี้เกียจ?
บางทีแหล่งที่มาหลักของปัญหาประสิทธิภาพการทำงานใน Haskell คือเมื่อโปรแกรมสร้างความลึกที่ไม่ได้ จำกัด ซึ่งทำให้เกิดการรั่วไหลของหน่วยความจำและการล้นสแต็กที่อาจเกิดขึ้น ตัวอย่างคลาสสิกคือการกำหนดsum = foldr (+) 0ใน Haskell มีระบบประเภทใดบ้างที่มีการบังคับใช้การขาด thunks ดังกล่าวในโปรแกรมที่ใช้ภาษาสันหลังยาวหรือไม่? ดูเหมือนว่าสิ่งนี้ควรอยู่ในลำดับเดียวกันของความยากลำบากเช่นเดียวกับการพิสูจน์คุณสมบัติของโปรแกรมคงที่อื่น ๆ โดยใช้ส่วนขยายของระบบประเภทเช่นความปลอดภัยของเธรดบางส่วนหรือความปลอดภัยของหน่วยความจำ

1
ทำไมต้องมี Proof Checker ใน Proof Carrying Code
ในกระดาษคลาสสิก PLDI'98 โดย Necula "การออกแบบและการใช้งานคอมไพเลอร์ที่ได้รับการรับรอง" ตัวตรวจสอบระดับสูงใช้: VCGen เพื่อสร้างเงื่อนไขการตรวจสอบ (เพรดิเคตความปลอดภัย) ทฤษฎีตรรกะตรรกะอันดับหนึ่งพิสูจน์ให้เห็นถึงเงื่อนไข LF Proof Checker เพื่อตรวจสอบขั้นตอน (2) ฉันสับสนเล็กน้อยตามขั้นตอน (3) ทำไมถึงต้องมีเลย? แค่ (1) และ (2) จะไม่พอเพียง? ทำไมเราไม่เชื่อหลักฐานที่สร้างขึ้นโดยนักพิสูจน์ทฤษฎีบท?

1
อะไรคือบทบาทที่เหมาะสมของการทวนสอบในการสุ่มตัวอย่างควอนตัมการจำลองและการทดสอบแบบขยายโบสถ์ (ECT)
เนื่องจากไม่ได้รับคำตอบจึงมีการตั้งค่าสถานะเพื่อขอให้แปลงคำถามนี้เป็นวิกิชุมชน ความคิดเห็นโดย Aaron Sterling, Sasho Nikolov และ Vor ได้รับการสังเคราะห์เป็นความละเอียดต่อไปนี้ซึ่งเปิดสำหรับการอภิปรายวิกิชุมชน: แก้ไขแล้ว: ด้วยความเคารพต่ออัลกอริธึมแบบคลาสสิกที่จำนวนเอาต์พุตตัวอย่างหรือวิถีการจำลองตรรกะเชิงคณิตศาสตร์ที่เข้มงวดต้องการให้ทั้งข้อเสนอทั้งสี่ข้อต่อไปนี้ได้รับการยอมรับหรือไม่มีเลย: เราสามารถแยกแยะอัลกอริธึมคลาสสิคแบบเวลาพหุนามเพื่อสร้างตัวเลขสุ่ม [1] “ เราสามารถแยกแยะอัลกอริธึมแบบคลาสสิกเวลาแบบพหุนามเพื่อสุ่มตัวอย่างการกระจายสัญญาณของคอมพิวเตอร์ควอนตัมภายใต้สมมติฐานเดียวที่ว่าลำดับชั้นพหุนามนั้นไม่มีที่สิ้นสุด " [2] "เราไม่สามารถจำลอง [วิถีเชิงกลควอนตัม] ψ ( t )ψ(เสื้อ)\psi(t)ตามปกติ…มีตัวแปรมากเกินไป " [3] Church-Turing-Thesis (ECT) ที่ขยายออกไปนั้นถูกตัดออกด้วยเหตุผลที่เข้มงวดว่าอัลกอริทึมแบบดั้งเดิมไม่สามารถสร้างตัวเลขสุ่มได้ [4] เพื่อเริ่มการสนทนาต่อไปนี้เป็นคำตอบเชิงยืนยันและเชิงลบที่แม้ว่าจะสามารถป้องกันได้ อาร์กิวเมนต์ที่ยืนยันอย่างมากอาจเป็น: ยืนยัน: ทั้งสี่ข้อความนี้สะท้อนทฤษฎีบทว่าเพื่อเคารพความเข้มงวดเราไม่เคยพูดถึงอัลกอริธึมแบบดั้งเดิมที่สร้างตัวเลขสุ่มตัวอย่างแบบสุ่มหรือการจำลองควอนตัม แต่จะพูดเฉพาะอัลกอริธึมแบบดั้งเดิมที่สร้างตัวเลขสุ่มหลอกและ (โดย ส่วนขยาย) ตัวอย่างแบบหลอกหลอกและแบบจำลองหลอกหลอกควอนตัม สิ่งนี้ถูกเข้าใจแล้วข้อความทั้งสี่นี้เป็นจริง ยิ่งกว่านั้นเพื่อหลีกเลี่ยงความคลุมเครือและป้องกันความสับสนนักคณิตศาสตร์ควรส่งเสริมนักวิทยาศาสตร์และวิศวกรให้ติดคำนำหน้า "หลอก" เพื่อใช้ประโยชน์จาก "สุ่ม", "ตัวอย่าง" และ "การจำลองควอนตัม" เกือบทั้งหมด อาร์กิวเมนต์ที่เป็นลบอย่างยิ่งอาจเป็น: ค่าลบ: ข้อความเหล่านี้ (และทฤษฎีบทอย่างเป็นทางการที่เกี่ยวข้อง) …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.