ตัวอย่างของอัลกอริทึมที่ไม่มีข้อพิสูจน์ความถูกต้อง


18

เรามีตรรกะของ Hoare ทำไมจึงเป็นไปได้ว่าอัลกอริทึมนั้นถูกต้อง แต่ไม่มีข้อพิสูจน์ว่าถูกต้องหรือไม่? สมมติว่าอัลกอริธึมแสดงออกเป็นซีจากนั้นเราสามารถโต้แย้งทีละขั้นตอนว่ามันทำในสิ่งที่ควรทำ

ดังนั้นคำถามของฉันคือ:

ให้ตัวอย่างของอัลกอริทึมที่ถูกต้อง แต่ไม่มีข้อพิสูจน์ความถูกต้อง

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

ตั้งแต่ปี 1970 มีการคาดเดาว่า P NP อาจเป็นอิสระ (นั่นคือไม่สามารถพิสูจน์ได้หรือพิสูจน์ไม่ได้) จากระบบสัจพจน์มาตรฐานสำหรับคณิตศาสตร์เช่นทฤษฎีเซตของ Zermelo-Fraenkel เพื่อความชัดเจนนี่ก็หมายความว่าอย่างใดอย่างหนึ่ง

  1. อัลกอริทึมเวลาพหุนามสำหรับปัญหา NP-complete ไม่มีอยู่ แต่เราไม่สามารถพิสูจน์ได้ (อย่างน้อยไม่ได้อยู่ในระบบปกติของเรา) หรืออย่างอื่น

  2. ขั้นตอนวิธีการพหุนามเวลาสำหรับปัญหา NP-สมบูรณ์ไม่อยู่ แต่ทั้งที่เราไม่สามารถพิสูจน์ได้ว่าการทำงานหรือเราไม่สามารถพิสูจน์ได้ว่ามันหยุดในเวลาพหุนาม

ฉันหมายถึงความเป็นไปได้ที่สอง เนื่องจาก Aaronson สามารถระบุว่าเป็นไปได้อย่างมั่นใจดังนั้นฉันจึงคิดว่าต้องมีตัวอย่างประเภท 2 ที่มีอยู่นั่นคือสาเหตุที่ฉันถามคำถามนี้ แต่ดูเหมือนว่าคำตอบที่รวดเร็วและชัดเจนไม่ได้อยู่ในมุมมอง


17
การบอกว่าอัลกอริทึมนั้นถูกต้องหมายความว่าอย่างไรถ้าเราไม่มีหลักฐานความถูกต้อง?
David Richerby

14
คุณหมายถึง "หลักฐานการถูกต้องเป็นไปไม่ได้" หรือ "ไม่มีใครพิสูจน์ได้ว่าถูกต้อง"?
gnasher729

12
อัลกอริทึมไม่จำเป็นต้องถูกต้อง ... สมมติว่าคุณมีสิ่งนี้: (1) วางที่ว่างเปล่าบนขอบหน้าต่างในตอนเช้า (2) เอามันลงในตอนเย็น (3) วัดปริมาตรน้ำในถัง (4) ทำซ้ำในเช้าวันรุ่งขึ้น นี่เป็นคำอธิบายของอัลกอริทึม แต่มันไม่ได้อธิบายสิ่งที่สามารถเป็นได้โดยไม่มีการยืดเรียกว่า "ถูกต้อง" น่าสนใจที่โค้ดส่วนใหญ่ในโลกเขียนขึ้นในลักษณะนี้โดยเฉพาะ: มันไม่ได้เกี่ยวข้องกับความถูกต้องของสิ่งที่มันทำเลย
wvxvw

@wvxvw ฉันสับสนแล้วมันหมายความว่าอัลกอริทึมที่จะ "ถูกต้อง" แล้ว? ถ้ามันทำในสิ่งที่ตั้งใจทำนั่นไม่ได้หมายความว่าถูกต้องหรือไม่? หากเป้าหมายของสถานการณ์ของคุณคือการหาปริมาณน้ำเฉลี่ยที่เก็บในถังในช่วงที่มีฝนตกทุกวันขั้นตอนวิธีจะไม่ถูกต้องหรือไม่
Abdul

8
@chi คุณไม่เข้าใจ ... ไม่ใช่ว่าโปรแกรมเมอร์ไม่สนใจความถูกต้องของรหัส แต่สำหรับอัลกอริทึมบางแนวคิดของ "ความถูกต้อง" นั้นไม่สามารถใช้ได้ ใช้แอปพลิเคชั่น. NET WindowsForms บางอย่างซึ่งบอกอะไรบางอย่างกับเอฟเฟกต์: "วางปุ่มนี้พร้อมกับป้ายกำกับนี้ที่ตำแหน่งนี้จากนั้นวางปุ่มอื่นนี้ไว้ที่ตำแหน่งอื่นนี้เป็นต้น ... " - อาจมีการตีความบางอย่าง โปรแกรมทำภายใต้สิ่งที่มันอาจถูกตัดสินว่าเป็น (ใน) ถูกต้อง (เช่นนักออกแบบกราฟิกบอกว่ามัน "ดูน่าเกลียด") แต่นั่นก็เท่าที่จะไป
wvxvw

คำตอบ:


50

นี่คืออัลกอริทึมสำหรับฟังก์ชันตัวตน:

  • อินพุต: n
  • ตรวจสอบว่าสตริงไบนารี่ที่เข้ารหัสการพิสูจน์0 > 1ใน ZFC หรือไม่และถ้าเป็นเช่นนั้นเอาต์พุตn + 1n0>1n+1
  • มิฉะนั้นเอาต์พุตn

คนส่วนใหญ่สงสัยว่าขั้นตอนวิธีนี้คำนวณฟังก์ชั่นตัวตน แต่เราไม่ทราบและเราไม่สามารถพิสูจน์ได้ในกรอบที่ยอมรับกันทั่วไปสำหรับคณิตศาสตร์ZFC


2
คุณแน่ใจหรือไม่ตรวจสอบว่าสตริงไบนารีตัวที่เข้ารหัสการพิสูจน์0 > 1ใน ZFCn0>1เป็นอัลกอริทึมหรือไม่
Dmitry Grigoryev

23
ไม่ได้ แต่การตรวจสอบสามารถดำเนินการได้อย่างเป็นอัลกอริธึม ในความเป็นจริงนี่เป็นหนึ่งในข้อกำหนดที่เรามีสำหรับระบบการพิสูจน์ - ความถูกต้องของการพิสูจน์นั้นสามารถตรวจสอบอัลกอริทึมได้
Yuval Filmus

6
@Puppy ZFC พิสูจน์ ) แต่มันก็สามารถพิสูจน์ได้ว่า0 > 1ถ้า (f) ไม่สอดคล้องกัน เกือบทุกคนเชื่อว่า ZFC นั้นสอดคล้องกันแน่นอน แต่เนื่องจากทฤษฎีความไม่สมบูรณ์ที่เราไม่สามารถรู้ได้อย่างแน่นอน ¬(0>1)0>1
Chi

1
@ นาธาเนียลไม่เลย คุณสามารถพิสูจน์ความถูกต้องของอัลกอริทึมตำราเรียนได้ทุกตัวอย่างเช่น อัลกอริทึมนี้แตกต่างกันโดยขึ้นอยู่กับความสอดคล้องของ ZFC ซึ่งเป็นสิ่งที่ ZFC ไม่สามารถพิสูจน์ได้
Yuval Filmus

1
@Nathaniel: หากคุณต้องการให้เรายังคงอภิปรายนี้ในการแชท
user21820

9

อัลกอริทึมส่วนใหญ่ไม่ได้รับการพิสูจน์ว่าถูกต้องในตรรกะของ Hoare เหตุผลหลักคือการพิสูจน์ความถูกต้องดังกล่าวมีราคาแพงมากในเดือนมกราคมปี 2017 ซึ่งอาจเป็นเพราะขนาดของคำสั่งที่หลากหลายเมื่อเทียบกับการเขียนโปรแกรม 'เพียง' มีงานจำนวนมากที่ดำเนินการอย่างต่อเนื่องเพื่อลดค่าใช้จ่ายนี้ด้วยระบบอัตโนมัติ แต่เป็นการต่อสู้ที่ยากลำบาก

อีกเหตุผลหนึ่งที่อัลกอริทึมอาจไม่มีการพิสูจน์ความถูกต้องและสิ่งหนึ่งที่เกี่ยวข้องในทางปฏิบัติมากกว่าปรากฏการณ์ที่ไม่สมบูรณ์ที่ Yuval และ Chi กล่าวถึงคือเราอาจไม่รู้ว่าข้อกำหนดนี้คืออะไร ปัญหานี้มีสองมิติ

  • ลูกค้าไม่รู้ว่าต้องการอะไร นี่เป็นปัญหาที่รู้จักกันดีในวิศวกรรมซอฟต์แวร์และวิศวกรซอฟต์แวร์ได้พัฒนาวิธีการมากมายในการจัดการกับปัญหานี้

  • nอาหารกว่าจำนวนธรรมชาติและศัตรูเป็นพหุนามเวลาน่าจะเป็นเครื่องจักรทัวริง เพื่อความรู้ที่ดีที่สุดของฉัน (โปรดแก้ไขให้ฉันถ้าฉันผิด) มีความไม่ตรงกันระหว่างทฤษฎีและการปฏิบัติและอัลกอริทึมที่เป็นรูปธรรมเช่น AES และ SHA256 นั้นไม่ได้อยู่ในขอบเขตของข้อกำหนดทางทฤษฎีเหล่านั้น ฉันไม่คิดว่ามีคุณสมบัติครบถ้วนสำหรับอัลกอริทึมดังกล่าวดังนั้นเราจึงไม่สามารถตรวจสอบได้ในหลักการในแง่ของเหตุผลเช่น Hoare logic


AES อยู่ในขอบเขตของคำจำกัดความของการรักษาความปลอดภัยการเข้ารหัส (คุณจำเป็นต้องใช้คำจำกัดความด้านความปลอดภัยที่เป็นรูปธรรมแทนที่จะเป็นคำนิยามเชิงเส้นกำกับ แต่คุณควรทำอย่างนั้นถ้าคุณต้องการความปลอดภัยในทางปฏิบัติ)
DW

@DW ที่น่าสนใจ ฉันไม่ได้ตระหนักถึงสิ่งนี้ ลักษณะของการเข้ารหัสเชิงทฤษฎีของแอมป์โทติคถูกหลีกเลี่ยงอย่างไร? คุณช่วยชี้ฉันทางกระดาษนี้ได้ไหม ฟังก์ชันแฮชการเข้ารหัสลับที่เป็นรูปธรรมคืออะไร
Martin Berger

en.wikipedia.org/wiki/Concrete_securityและการอ้างอิงที่ระบุไว้ที่นั่น ฟังก์ชั่นแฮชเป็นกรณีที่ซับซ้อนมากขึ้นเพราะมันขึ้นอยู่กับสิ่งที่คุณใช้สำหรับ - แต่ความซับซ้อนนั้นส่วนใหญ่จะเป็นมุมฉากกับความปลอดภัยแบบซีมโทติคและความปลอดภัยที่เป็นรูปธรรม
DW

2
สำหรับการเข้ารหัสคุณต้องมีสองอัลกอริทึม: หนึ่งที่เข้ารหัสหนึ่งที่ถอดรหัส หนึ่งในนั้นไม่สามารถแก้ไขได้ด้วยตนเอง สามารถแก้ไขได้ในคู่เท่านั้น (คุณพิสูจน์ได้ว่าการถอดรหัสอินพุตที่เข้ารหัสสร้างต้นฉบับ) แต่สำหรับการเข้ารหัสคุณต้องการให้สามารถถอดรหัสได้และนั่นคือสิ่งที่คุณไม่สามารถจับได้ด้วย "ความถูกต้อง"
gnasher729

1
@DW ฉันต้องไม่เห็นด้วยบ้าง ในขณะที่เอกสารของ Rogaway และ Bellare นั้นยอดเยี่ยมแสดงให้เห็นว่าพวกเขาในทางใดทางหนึ่งทำให้หลักฐานการรักษาความปลอดภัยแบบดั้งเดิมนั้นทำให้เข้าใจผิด เอกสารทั้งสองเกี่ยวข้องกับโปรโตคอลเป็นหลัก (เช่นพวกเขาถือว่าดั้งเดิมเช่น AES, SHA, RSA เป็นต้น) มีความปลอดภัยและพิสูจน์สิ่งต่าง ๆ จากที่นั่น ปัญหาที่สำคัญของการพิสูจน์ความปลอดภัยดั้งเดิมยังคงอยู่ หากคุณมีการอ้างอิงใด ๆ สำหรับการพิสูจน์ความปลอดภัยดั้งเดิมฉันจะสนใจ ตัวอย่างเอกสารที่สองสมมติว่า RSA นั้นยากซึ่งเป็นปัญหาเปิดมาก
DRF

5

PP{P}c{Q}QQ{P}c{Q}
PP,QQ

P(n)P(0)P(1)P(2)nN. P(n)

MnP(n)Mn. P(n)Mn. P(n)


5

ปัญหา: พิมพ์ "ใช่" หากทุกหมายเลขคู่≥ 4 คือผลรวมของสองช่วงเวลาและ "ไม่" หากมีจำนวนคู่≥ 4 ที่ไม่ใช่ผลรวมของสองช่วง

อัลกอริทึม: พิมพ์ "ใช่"

คนส่วนใหญ่คิดว่าอัลกอริทึมนั้นถูกต้อง ไม่มีข้อพิสูจน์ที่รู้จักและเป็นไปได้ค่อนข้างที่จะไม่มีข้อพิสูจน์


3

อัลกอริทึมใด ๆ ที่ถูกต้อง แต่เราไม่ทราบว่าต้องใช้เวลานานเท่าใดจึงจะสามารถแปลงเป็นอัลกอริทึมที่หยุดในระยะเวลารับประกัน แต่เราไม่แน่ใจว่าถูกต้องหรือไม่

nn+10log(n)20n

P=NP

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