Contoh algoritma yang tidak memiliki bukti kebenaran

18

Kami memiliki logika Hoare. Mengapa masih mungkin bahwa suatu algoritma itu benar tetapi tidak ada bukti bahwa itu benar? Misalkan algoritma dinyatakan dalam C. Kemudian kita dapat berdebat langkah demi langkah bahwa itu melakukan apa yang seharusnya dilakukan.

Jadi pertanyaan saya adalah:

Berikan saya contoh algoritma yang benar tetapi tidak memiliki bukti kebenaran.

EDIT: Saya pikir sedikit latar belakang dapat membantu memperjelas ke mana saya akan pergi. Biarkan saya mengutip Scott Aaronson:

Sejak tahun 1970-an, telah ada spekulasi bahwa P NP mungkin independen (yaitu, tidak dapat dibuktikan atau disangkal) dari sistem aksioma standar untuk matematika, seperti teori himpunan Zermelo-Fraenkel. Agar lebih jelas, ini juga berarti itu

  1. algoritma polinomial-waktu untuk masalah NP-complete tidak ada, tetapi kita tidak pernah bisa membuktikannya (setidaknya tidak dalam sistem formal kita yang biasa), atau yang lain

  2. algoritma polinomial-waktu untuk masalah NP-complete memang ada, tetapi kita tidak pernah bisa membuktikan bahwa itu berfungsi, atau kita tidak pernah dapat membuktikan bahwa ia berhenti pada waktu polinomial.

Saya mengacu pada kemungkinan kedua. Karena Aaronson dapat dengan percaya diri mendaftarkannya sebagai kemungkinan, saya pikir pasti ada contoh tipe 2. yang ada. Itulah mengapa saya mengajukan pertanyaan ini. Namun sepertinya jawaban yang cepat dan jelas tidak terlihat.

Zirui Wang
sumber
17
Apa artinya mengatakan bahwa suatu algoritma itu benar jika kita tidak memiliki bukti kebenaran?
David Richerby
14
Apakah maksud Anda "bukti kebenaran tidak mungkin" atau "tidak ada yang membuktikannya benar"?
gnasher729
12
Algoritma tidak harus benar ... seandainya Anda memiliki ini: (1) meletakkan ember kosong di ambang jendela di pagi hari. (2) bawa turun di malam hari. (3) mengukur volume air dalam ember. (4) ulangi keesokan paginya. Ini adalah deskripsi algoritma, tetapi tidak menjelaskan apa pun yang bisa, tanpa peregangan, disebut "benar". Menariknya, sebagian besar kode pemrograman di dunia ditulis dengan cara khusus ini: kode itu tidak peduli dengan kebenaran apa yang dilakukannya.
wvxvw
@ wvxvw Saya bingung kemudian, apa artinya algoritma menjadi "benar"? Jika itu melakukan apa yang seharusnya dilakukan, bukankah itu berarti itu benar? Jika tujuan skenario Anda adalah untuk menemukan jumlah rata-rata air yang dikumpulkan dalam ember selama curah hujan, untuk setiap hari, bukankah algoritme itu benar dalam kasus itu?
Abdul
8
@ ya Anda tidak mengerti ... bukan itu programmer tidak peduli untuk kebenaran kode mereka, itu untuk beberapa algoritma konsep "kebenaran" tidak berlaku. Ambil beberapa aplikasi .NET WindowsForms, yang mengatakan sesuatu: "letakkan tombol ini dengan label ini di posisi ini, lalu letakkan tombol ini di posisi lain ini dan seterusnya ..." - mungkin ada beberapa interpretasi tentang apa yang ini Program tidak, di mana apa yang dilakukannya dapat dinilai sebagai (dalam) benar (mis. desainer grafis mengatakan itu "terlihat jelek"), tetapi sejauh itulah yang terjadi.
wvxvw

Jawaban:

50

Berikut ini adalah algoritma untuk fungsi identitas:

  • Input: n
  • Periksa apakah string biner ke- mengkodekan bukti 0 > 1 dalam ZFC, dan jika demikian, hasilkan n + 1n0>1n+1
  • Jika tidak, output n

Kebanyakan orang menduga algoritma ini menghitung fungsi identitas, tetapi kami tidak tahu, dan kami tidak dapat membuktikannya dalam kerangka yang diterima secara umum untuk matematika, ZFC .

Yuval Filmus
sumber
2
Apakah Anda yakin Periksa apakah th tali biner mengkodekan bukti 0 > 1 di ZFCn0>1 adalah sebuah algoritma?
Dmitry Grigoryev
23
Tidak, tetapi pemeriksaan pasti dapat diterapkan secara algoritmik (yaitu dengan mesin Turing). Sebenarnya ini adalah salah satu persyaratan yang kami miliki untuk sistem bukti - bahwa validitas bukti dapat diperiksa secara algoritmik.
Yuval Filmus
6
@Puppy ZFC membuktikan . Tetapi bisa juga membuktikan 0 > 1 jika (f) tidak konsisten. Hampir semua orang percaya ZFC konsisten, tentu saja, tetapi karena teorema ketidaklengkapan kita tidak dapat mengetahui hal itu dengan pasti. ¬(0>1)0>1
chi
1
@Nathaniel Tidak sama sekali. Anda dapat dengan mudah membuktikan kebenaran dari setiap algoritma buku teks, misalnya. Algoritma ini berbeda karena bergantung pada konsistensi ZFC, yang merupakan sesuatu yang tidak dapat dibuktikan oleh ZFC sendiri.
Yuval Filmus
1
@Nathaniel: Jika Anda suka, biarkan kami melanjutkan diskusi ini dalam obrolan .
user21820
9

Sebagian besar algoritma belum terbukti benar dalam logika Hoare. Alasan utama adalah bahwa bukti ketepatan seperti itu sangat mahal pada Januari 2017, mungkin oleh beberapa urutan besarnya dibandingkan dengan pemrograman 'belaka'. Ada banyak pekerjaan berkelanjutan untuk mengurangi biaya ini dengan otomatisasi, tetapi ini adalah perjuangan yang berat.

Alasan lain mengapa suatu algoritma mungkin tidak memiliki bukti kebenaran, dan satu yang lebih relevan dalam praktik daripada fenomena ketidaklengkapan yang disebutkan Yuval dan chi, adalah bahwa kita mungkin tidak tahu apa spesifikasi ini. Masalah ini memiliki dua dimensi.

  • Pelanggan tidak tahu apa yang mereka inginkan. Ini adalah masalah yang terkenal dalam rekayasa perangkat lunak, dan insinyur perangkat lunak telah mengembangkan banyak pendekatan untuk mengatasi hal ini.

  • Spesifikasinya sulit. Contoh yang baik adalah kebenaran dari algoritma kriptografi. Hanya baru-baru ini Micali & Goldwasser memenangkan penghargaan Turing untuk menentukan apa arti keamanan kriptografi. Namun perlu dicatat bahwa definisi itu (sejauh yang saya ketahui) untuk "kriptografi teoretis" di mana Anda memiliki parameter keamanan nmulai dari bilangan asli, dan musuh adalah mesin Turing probabilistik waktu polinomial. Sejauh pengetahuan saya (tolong perbaiki saya jika saya salah) ada ketidakcocokan antara teori dan praktik, dan algoritma konkret seperti AES dan SHA256 tidak cukup dalam lingkup spesifikasi teoritis tersebut. Saya tidak berpikir ada spesifikasi lengkap untuk algoritma seperti itu, maka kita tidak bisa, pada prinsipnya memverifikasi mereka dalam arti logika misalnya Hoare.

Martin Berger
sumber
AES berada dalam lingkup definisi keamanan kriptografi. (Anda memang perlu menggunakan definisi keamanan konkret alih-alih definisi asimptotik, tetapi Anda tetap harus melakukan itu jika Anda menginginkan keamanan dalam praktik.)
DW
@DW Menarik. Saya tidak menyadari hal ini. Bagaimana sifat asimptotik dari kriptografi teoretis dielakkan? Bisakah Anda mengarahkan saya ke makalah tentang ini? Bagaimana dengan fungsi hash kriptografi konkret?
Martin Berger
en.wikipedia.org/wiki/Concrete_security , dan referensi yang tercantum di sana. Fungsi hash adalah kasus yang lebih kompleks, karena tergantung pada apa Anda menggunakannya - tetapi kompleksitasnya sebagian besar ortogonal untuk keamanan asimptotik vs keamanan konkret.
DW
2
Untuk enkripsi, Anda memerlukan dua algoritma: Satu yang mengenkripsi, satu yang mendekripsi. Salah satunya tidak bisa benar sendiri. Mereka hanya bisa benar berpasangan (Anda membuktikan bahwa mendekripsi input terenkripsi menghasilkan yang asli). Tetapi untuk enkripsi, Anda ingin itu tidak dapat dipecahkan dan itu adalah sesuatu yang tidak dapat Anda tangkap dengan "kebenaran".
gnasher729
1
@DW saya harus agak tidak setuju. Sementara makalah oleh Rogaway dan Bellare sangat bagus menyatakan bahwa mereka dengan cara apa pun memungkinkan bukti keamanan primitif menyesatkan. Kedua makalah pada dasarnya tentang protokol (yaitu mereka menganggap primitif seperti AES, SHA, RSA dll) aman dan kemudian membuktikan hal-hal dari sana. Masalah mendasar untuk membuktikan diri primitif itu aman masih ada. Jika Anda memiliki referensi untuk bukti keamanan primitif saya akan tertarik. Makalah kedua misalnya menganggap RSA sulit yang merupakan masalah terbuka.
DRF
5

Ini terkait dengan ketidaklengkapan dari logika yang mendasarinya. Memang, logika Hoare biasanya berisi aturan "post" yang melemah atau

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

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

M.nP(n)Mn. P(n)Mn. P(n)

chi
sumber
5

Masalah: Cetak "Ya" jika setiap angka genap ≥ 4 adalah jumlah dua bilangan prima, dan "Tidak" jika ada bilangan genap ≥ 4 yang bukan jumlah dua bilangan prima.

Algoritma: Cetak "Ya"

Kebanyakan orang berpikir bahwa algoritma itu benar. Tidak ada bukti yang diketahui, dan sangat mungkin bahwa ada adalah tidak ada bukti.

gnasher729
sumber
3

Algoritma apa pun yang benar tetapi kami tidak tahu berapa lama waktu yang dibutuhkan untuk menjalankannya dapat diubah menjadi suatu algoritma yang berhenti dalam jumlah waktu yang dijamin tetapi kami tidak yakin apakah itu benar.

nn+10log(n)20n

P=NP

Dan Brumleve
sumber