Doğruluk kanıtı olmayan bir algoritma örneği


18

Hoare mantığımız var. Neden bir algoritmanın doğru olduğu hala mümkün, ancak doğru olduğuna dair bir kanıt yok? Algoritmanın C ile ifade edildiğini varsayalım. Sonra adım adım yapması gerekeni yaptığını söyleyebiliriz.

Benim sorum şu:

Bana doğru olan ancak doğruluk kanıtı olmayan bir algoritma örneği verin.

EDIT: Ben küçük bir arka plan nereye gittiğimi açıklığa yardımcı olabilir düşünüyorum. Scott Aaronson'dan alıntı yapmama izin verin:

1970'lerden bu yana, P NP'nin Zermelo-Fraenkel set teorisi gibi matematik için standart aksiyom sistemlerinden bağımsız (yani ne kanıtlanabilir ne de çekilmez) olabileceği spekülasyonları vardır . Açık olmak gerekirse, bu ya

  1. NP-tam problemleri için bir polinom-zaman algoritması mevcut değildir, ancak bunu asla kanıtlayamayız (en azından olağan resmi sistemlerimizde değil), ya da başka

  2. NP-tam problemleri için bir polinom zamanlı algoritması yapar mevcut olmakla ya biz çalıştığını kanıtlamak asla veya bunu polinom zamanda durur kanıtlamak olamaz.

İkinci olasılıktan bahsediyorum. Aaronson bunu bir olasılık olarak çok güvenli bir şekilde listeleyebileceğinden, mevcut bir tip 2 örneği olması gerektiğini düşünüyorum. Bu yüzden bu soruyu soruyorum. Ancak hızlı ve net bir cevap görünmüyor gibi görünüyor.


17
Doğruluk kanıtı yoksa bir algoritmanın doğru olduğunu söylemek ne anlama gelir?
David Richerby

14
Şunu mu demek istediniz: "doğruluk kanıtı imkansız" veya "kimse doğru olduğunu kanıtlamadı" mı?
gnasher729

12
Algoritmaların doğru olması gerekmez ... varsayalım: (1) sabahları pencere kenarına boş bir kova koyun. (2) akşamları indir. (3) kovadaki su hacmini ölçün. (4) ertesi sabah tekrarlayın. Bu bir algoritmanın açıklamasıdır, ancak bir streç olmadan "doğru" olarak adlandırılabilecek hiçbir şeyi tanımlamaz. İlginç bir şekilde, dünyadaki çoğu programlama kodu bu şekilde yazılmıştır: sadece yaptığı şeyin doğruluğu ile ilgili değildir.
wvxvw

@wvxvw O zaman kafam karıştı, bir algoritmanın "doğru" olması ne anlama geliyor? Eğer yapmak istediği şeyi yaparsa, bu doğru olduğu anlamına gelmez mi? Senaryonuzun amacı yağmur sırasında kovada toplanan ortalama su miktarını bulmak olsaydı, her gün için algoritma doğru olmaz mı?
Abdul

8
@chi sen anlamıyorsun ... programcıların kodlarının doğruluğunu umursamadıkları değil, bazı algoritmalar için "doğruluk" kavramının uygulanamaması. Etkiye bir şey söyleyen bazı .NET WindowsForms uygulamasını alın: "bu düğmeyi bu konuma bu konuma koyun, sonra bu diğer düğmeyi diğer konuma yerleştirin ve bu şekilde devam edin ..." - bunun ne olduğuna dair bir yorum olabilir. programın yaptığı (altında) doğru olarak değerlendirilebilir (örneğin grafik tasarımcı "çirkin görünüyor" der), ama bu kadarıyla gidiyor.
wvxvw

Yanıtlar:


50

İşte kimlik fonksiyonu için bir algoritma:

  • Giriş: n
  • Olmadığını kontrol edin ikili dize inci bir kanıtı kodlar 0 > 1 ZFC içinde ve eğer öyleyse, çıkış n + 1n0>1n+1
  • Aksi takdirde, n çıkışın

Çoğu insan bu algoritmanın kimlik işlevini hesapladığından şüphelenir, ancak bilmiyoruz ve bunu yaygın olarak kabul edilen matematik ZFC çerçevesinde kanıtlayamayız .


2
Emin misin olmadığını kontrol ikili dize inci bir kanıtı kodlar 0 > 1 ZFC içinden0>1 bir algoritma nedir?
Dmitry Grigoryev

23
Hayır, ancak kontrol kesinlikle algoritmik olarak uygulanabilir (yani bir Turing makinesi tarafından). Aslında bu, ispat sistemleri için sahip olduğumuz şartlardan biridir - ispat geçerliliği algoritmik olarak kontrol edilebilir.
Yuval Filmus

6
@Puppy ZFC kanıtlar . Ancak (f) tutarsızsa, 0 > 1'i de kanıtlayabilir . Neredeyse herkes elbette ZFC'nin tutarlı olduğuna inanıyor, ancak eksiklik teoremleri nedeniyle bunu kesin olarak bilemeyiz. ¬(0>1)0>1
chi

1
@Nathaniel Hiç de değil. Örneğin, her ders kitabı algoritmasının doğruluğunu kolayca kanıtlayabilirsiniz. Bu algoritma , ZFC'nin kanıtlayamadığı bir şey olan ZFC'nin tutarlılığına dayanması bakımından farklıdır .
Yuval Filmus

1
@Nathaniel: İsterseniz, bu tartışmaya sohbette devam edelim .
user21820

9

Çoğu algoritmanın Hoare mantığında doğru olduğu kanıtlanmamıştır. Bunun ana nedeni, bu tür doğruluk kanıtlarının Ocak 2017'den itibaren, 'salt' programlamaya kıyasla muhtemelen birkaç büyüklük düzeyinde çok pahalı olmasıdır. Bu maliyeti otomasyonla azaltmak için çok fazla çalışma var, ancak bu zorlu bir mücadele.

Bir algoritmanın doğruluk kanıtına sahip olmamasının ve pratikte Yuval ve chi'nin bahsettiği eksiklik fenomenlerinden daha alakalı olan bir başka nedeni, bu spesifikasyonun ne olduğunu bilmeyebileceğimizdir. Bu sorunun iki boyutu vardır.

  • Müşteriler ne istediklerini bilmiyorlar. Bu, yazılım mühendisliğinde iyi bilinen bir sorundur ve yazılım mühendisleri bununla başa çıkmak için birçok yaklaşım geliştirmiştir.

  • Şartname zor. Buna iyi bir örnek, kriptografik algoritmaların doğruluğudur. Sadece kısa bir süre önce Micali & Goldwasser, Turing ödüllerini kriptografik güvenliğin ne anlama geldiğini belirttiği için kazandı . Bununla birlikte, bu tanımın (bildiğim kadarıyla) bir güvenlik parametresi n olan "teorik şifreleme" için olduğunu unutmayın.ndoğal sayılar üzerinde ve rakipler polinom zaman olasılık Turing makineleri vardır. Bildiğim kadarıyla (teorik ve pratik arasında bir uyumsuzluk var ve AES ve SHA256 gibi somut algoritmalar bu teorik özelliklerin kapsamı içinde değil). Bu tür algoritmalar için tam bir spesifikasyon olduğunu düşünmüyorum, bu yüzden prensip olarak bunları Hoare mantığı açısından doğrulayamayız.


AES, kriptografik güvenliğin tanımları kapsamındadır. (Asimptotik tanımlardan ziyade somut güvenlik tanımları kullanmanız gerekir, ancak uygulamada güvenlik istiyorsanız yine de bunu yapmalısınız.)
DW

@DW İlginç. Bunun farkında değildim. Teorik kriptografinin asimptotik doğası nasıl engellenir? Beni bu konudaki bir makaleye yönlendirebilir misiniz? Somut kriptografik hash fonksiyonları hakkında ne söylenebilir?
Martin Berger

en.wikipedia.org/wiki/Concrete_security ve burada listelenen referanslar. Karma işlevler daha karmaşık bir durumdur, çünkü bunları ne için kullandığınıza bağlıdır - ancak karmaşıklıklar büyük ölçüde asimptotik güvenliğe karşı somut güvenliğe diktir.
DW

2
Şifreleme için iki algoritmaya ihtiyacınız vardır: Biri şifreleyen, diğeri deşifre eden. Bunlardan biri kendi başına doğru olamaz. Yalnızca bir çiftte doğru olabilirler (şifrelenmiş bir girişin şifresini çözmenin orijinali oluşturduğunu kanıtlarsınız). Ancak şifreleme için bunun kırılmaz olmasını istersiniz ve bu "doğruluk" ile yakalayamayacağınız bir şeydir.
gnasher729

1
@DW Biraz katılmıyorum. Rogaway ve Bellare'nin makaleleri, herhangi bir şekilde ilkellerin güvenlik kanıtlarına izin verdiklerini ima etmekte büyük yanıltıcıdır. Her iki makale de esas olarak protokollerle ilgilidir (yani AES, SHA, RSA vb. Gibi ilkellerin güvenli olduğunu varsayarlar) ve oradan bir şeyler kanıtlarlar. İlkellerin kendilerini güvence altına almasının asıl sorunu kalır. İlkellerin kanıtlarının güvende olduğuna dair herhangi bir referansınız varsa, ilgilenirim. Örneğin ikinci makale RSA'nın zor olduğunu ve bunun da açık bir sorun olduğunu varsayar.
DRF

5

Bu, altta yatan mantığın eksikliğine bağlıdır. Gerçekten de, Hoare mantığı genellikle zayıflatıcı veya "post-post" kuralı buradaPsonuçları

PP{P}c{Q}QQ{P}c{Q}
ihtiyaç Zermelo-Fraenkel (ZF) gibi bazı dizi-teorik aksiyomlaştırılması ile altta yatan mantık, genellikle Birinci Dereceden Mantık (FOL) yeniden kanıtlanmalıdır.PP,QQ

Zor kısmı, Gödel'in neredeyse bir asır önce kanıtladığı gibi, böyle bir mantığın eksik olduğunu biliyoruz. Daha somut olarak, P ( 0 ) , P ( 1 ) , P ( 2 ) mantığının içinde kanıtlayabildiğimiz doğal sayıları üzerinde bir belirti vardır, ancak herhangi bir doğal sabit için böyle bir yol yoktur. kanıtlamak için n N . P ( n ) .P(n)P(0)P(1)P(2)nN. P(n)

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


5

Sorun: even 4 her çift sayı iki asalın toplamı ise "Evet" ve iki asalın toplamı olmayan çift ≥ 4 varsa "Hayır" yazdırabilirsiniz.

Algoritma: "Evet" yazdır

Çoğu insan algoritmanın doğru olduğunu düşünür. Hiçbir bilinen kanıtı olduğunu ve orada oldukça mümkündür olduğunu hiçbir kanıt.


3

Doğru olan ancak çalıştırmanın ne kadar sürdüğünü bilmediğimiz herhangi bir algoritma, garanti edilen bir süre içinde duran bir algoritmaya dönüştürülebilir, ancak doğru olup olmadığından emin değiliz.

nn+10log(n)20n

P=NP

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.