คำถามติดแท็ก hoare-logic

5
ตัวอย่างของอัลกอริทึมที่ไม่มีข้อพิสูจน์ความถูกต้อง
เรามีตรรกะของ Hoare ทำไมจึงเป็นไปได้ว่าอัลกอริทึมนั้นถูกต้อง แต่ไม่มีข้อพิสูจน์ว่าถูกต้องหรือไม่? สมมติว่าอัลกอริธึมแสดงออกเป็นซีจากนั้นเราสามารถโต้แย้งทีละขั้นตอนว่ามันทำในสิ่งที่ควรทำ ดังนั้นคำถามของฉันคือ: ให้ตัวอย่างของอัลกอริทึมที่ถูกต้อง แต่ไม่มีข้อพิสูจน์ความถูกต้อง แก้ไข: ฉันคิดว่าพื้นหลังเล็กน้อยสามารถช่วยชี้แจงว่าฉันจะไปที่ไหน ให้ฉันพูด Scott Aaronson: ตั้งแต่ปี 1970 มีการคาดเดาว่า P NP อาจเป็นอิสระ (นั่นคือไม่สามารถพิสูจน์ได้หรือพิสูจน์ไม่ได้) จากระบบสัจพจน์มาตรฐานสำหรับคณิตศาสตร์เช่นทฤษฎีเซตของ Zermelo-Fraenkel เพื่อความชัดเจนนี่ก็หมายความว่าอย่างใดอย่างหนึ่ง≠≠\ne อัลกอริทึมเวลาพหุนามสำหรับปัญหา NP-complete ไม่มีอยู่ แต่เราไม่สามารถพิสูจน์ได้ (อย่างน้อยไม่ได้อยู่ในระบบปกติของเรา) หรืออย่างอื่น ขั้นตอนวิธีการพหุนามเวลาสำหรับปัญหา NP-สมบูรณ์ไม่อยู่ แต่ทั้งที่เราไม่สามารถพิสูจน์ได้ว่าการทำงานหรือเราไม่สามารถพิสูจน์ได้ว่ามันหยุดในเวลาพหุนาม ฉันหมายถึงความเป็นไปได้ที่สอง เนื่องจาก Aaronson สามารถระบุว่าเป็นไปได้อย่างมั่นใจดังนั้นฉันจึงคิดว่าต้องมีตัวอย่างประเภท 2 ที่มีอยู่นั่นคือสาเหตุที่ฉันถามคำถามนี้ แต่ดูเหมือนว่าคำตอบที่รวดเร็วและชัดเจนไม่ได้อยู่ในมุมมอง

1
ความแตกต่างระหว่างชนิดที่อ้างอิง, ประเภทการปรับแต่งและ Hoare Logic
ฉันรู้ทฤษฎีประเภทพึ่งพาน้อย จากวิกิพีเดีย: ชนิดที่ขึ้นต่อกันคือชนิดที่คำจำกัดความขึ้นอยู่กับค่า และจากหลักสูตรทฤษฎีของฉันฉันจำได้ว่าประเภทที่พึ่งพาคือ: ตระกูลของชนิดที่จัดทำดัชนีตามประเภท แต่ฉันมีความสับสนเกี่ยวกับประเภทพึ่งพาและประเภทการปรับแต่งและตรรกะ hoare เนื่องจากจากประเภทDepeneent vs Refinement ประเภทการปรับแต่งดูเหมือนว่าตรรกะของ Hoare มีประเภทการปรับแต่งพลังงานเพิ่มเติมอะไรอีกนอกเหนือจากการอนุญาตให้แจ้งล่วงหน้าว่าจะต้องได้รับความพึงพอใจ (ซึ่งคล้ายกับ Hoare Logic) มีอะไรเพิ่มเติมที่ประเภทการพึ่งพาให้เปรียบเทียบกับประเภทการปรับแต่ง และประเภท Dependent นั้นมีประสิทธิภาพมากกว่าประเภทการปรับแต่ง + ตัวแก้ Sat / Constraint ทุกคนสามารถล้างอากาศด้วยตัวอย่าง

2
วิธีจัดการกับอาร์เรย์ในระหว่างการพิสูจน์ความถูกต้องของ Hoare-style
ในการอภิปรายคำถามนี้ Gilles กล่าวอย่างถูกต้องว่าการพิสูจน์ความถูกต้องใด ๆ ของอัลกอริทึมที่ใช้อาร์เรย์ต้องพิสูจน์ว่าไม่มีการเข้าถึงอาร์เรย์นอกขอบเขต ขึ้นอยู่กับรุ่นรันไทม์สิ่งนี้จะทำให้เกิดข้อผิดพลาดรันไทม์หรือการเข้าถึงองค์ประกอบที่ไม่ใช่อาร์เรย์ เทคนิคหนึ่งที่พบบ่อยในการดำเนินการพิสูจน์ความถูกต้องเช่น (อย่างน้อยในการศึกษาปริญญาตรีและอาจจะอยู่ในการตรวจสอบโดยอัตโนมัติ) โดยใช้ตรรกะโฮร์ ฉันไม่ทราบว่าชุดกฎมาตรฐานมีอะไรที่เกี่ยวข้องกับอาร์เรย์ ดูเหมือนว่าพวกเขาจะถูก จำกัด ให้ตัวแปรตัวแปร ฉันจินตนาการถึงการเพิ่มสัจพจน์ของแบบฟอร์ม {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} แต่ก็ไม่เป็นที่ชัดเจนกับผมว่าคุณจะจัดการกับการเข้าถึงอาร์เรย์บนด้านขวามือคือถ้ามันเป็นส่วนหนึ่งของการแสดงออกที่ซับซ้อนในบางคำสั่งx : = EEEEx:=Ex:=Ex := E วิธีการเข้าถึงอาร์เรย์สามารถสร้างแบบจำลองในตรรกะของ Hoare เพื่อให้ไม่มีการเข้าถึงที่ไม่ถูกต้องสามารถและต้องได้รับการพิสูจน์ความถูกต้องของโปรแกรม? รู้รอบอาจสันนิษฐานได้ว่าเราไม่อนุญาตให้ใช้องค์ประกอบของอาร์เรย์ในงบนอกเหนือจากหรือเป็นส่วนหนึ่งของEบางตัวในx : = Eเนื่องจากไม่ได้ จำกัด การแสดงออก เราสามารถกำหนดตัวแปรชั่วคราวตามค่าที่ต้องการเช่น write t …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.