Durma Probleminin kararsızlığının kanıtı


25

Halting Probleminin kararsızlığının kanıtını anlamakta güçlük çekiyorum.

http://computing.guide/wp-content/uploads/2014/12/HaltingProblem1.jpg

Eğer döner programına olsun veya olmasın bir girişi durur b , neden kodunu geçmek zorunda do P ikisi için a ve b ?H(a,b)abPab

Neden P ve bazı rasgele girdilerle besleyemiyoruz , örneğin, x ?H()Px


Burada kullanılan hesaplama modelinde, (kodlanmış) herhangi bir girişe izin verildiğini unutmayın. Tip kontrolü veya bunun gibi bir şey yok. Bir programı her zaman kodlayabilir ve kendi kendine bir girdi olarak geçirebilirsiniz.
asmeurer

2
Sen olabilir beslemek istersen girdi. Bu kanıtın yapısı belirli bir girdiyi dikkate almayı gerektirir. H
David Richerby

1
Programa herhangi bir giriş sağlayabilirsiniz. Amaç çelişkiyi bulmak. Teorik olarak 'H' makinesi her türlü girdi için çalışmalıdır. Bu nedenle, çelişkilere yol açan tüm olası girdilerden birini ele alıyoruz.
Ugnes

Bu kanıt çok kusurlu. Kendisi dışında her şey için işe yarayan bir H () olup olmadığını düşünün; Bu, Halting Problemine hala genel bir çözüm olacaktır.
Joshua

İlgili, muhtemelen yinelenen: cs.stackexchange.com/questions/42819/…
Ilmari

Yanıtlar:


27

Kanıt bir çelişki bulmayı amaçlamaktadır. neden kendisine bir girdi olarak kullanıldığını anlamak için, türetilen çelişkilerin ne olduğunu anlamalısınız . Çelişki, gayri resmi olarak: “a'yı b” kabul eden bir makinemiz H (a, b) varsa, o zaman kendilerini kabul etmeyen makineleri kabul eden bir makine yapabiliriz. (Oku sizin kadar birkaç kez bunu elde söyledi.) Resimde gösterilen makineyi - let en diyoruz M - M ( P ) = gelmez P kabul etmeyen P ?PMM(P)=PP

Eğer sorduğunuzda çelişki olur: yok kabul M ? Bir çelişki olup olmadığını görmek için iki seçeneği denemeye çalışın.MM

kabulM ve ancak eğer M kabul etmezM MMMM ; bu açıkça bir çelişkidir.

Bu nedenle, bazı keyfi girdiler değil, kendi üzerinde çalıştırılması ispatı önemlidir . Bu, diyagonal argümanlar olarak bilinen imkansızlık kanıtlarında yaygın bir temadır.P


38

H(a,b)HaabH(a,b)

  1. abH(a,b)abH(a,b) "hayır" cevap verecektir.
  2. H(a,b)

HPHPx

P(x) =
  run H(x, x)
  if H(x, x) answers "yes"
      loop forever
  else
      halt

Bunu görmek zor değil

P(x)x

PH bir program olacak.

PpP

P(p)P(p)

H(p,p)HH


Bu cevabı beğendim. Şimdi ispatı anladığım halde, H'nin bir özyineleme sınırı istisnası atabileceğini kanıtlıyor gibi görünüyor.
Faks

2
@Fax bir defadan Hfazla aranmıyor , hiçbir şekilde özyineleme Pyok. H(P, P)yürütmez P, sadece "sihirli bir şekilde" Pgeçtiğinde durup durmayacağını belirler .
Ajedi32

@ Ajedi32'nin H(P,P)yürütülmesi gerekmiyor P, ancak durdurulup durdurulmayacağının H(x ↦ H(x,x), P)belirlenmesinin bir parçası olarak yürütülmesi gerekiyor P. Hangi H(x ↦ H(y ↦ H(y,y), x), P)ve böylece genişler .
Faks

@Fax Bu ispatın uygulanması Hbelirtilmemiştir. Yani hayır, değil sahip olduğunu olsun, bir şey yürütmek Pveya kendisi. Kanıt H, durma problemini sihirli bir şekilde belirleyen bir programın var olduğu varsayımıyla başlar , daha sonra böyle bir programın varlığının bir çelişki olacağını kanıtlamaya devam eder ve bu nedenle böyle bir programın mevcut olmadığını kanıtlar.
Ajedi32

1
@Fax Kendi kendine çağrılmadığı sürece durma problemine karar veren bir programın mevcut olup olmadığı konusunda iyi bir noktaya değinirsiniz. Bakınız Kendi kendine referanslama veya köşegenleştirmeye bağlı olmayan durma sorununun kararsızlığının kanıtı var mı? Bununla ilgili ilginç bir soru için.
Ajedi32

9

Animasyonlarla daha güzel bir kanıt deneyin . Ve cevaplar bir siteye bir linkten daha fazlasını içermesi gerektiği için, sorunuzun cevabı.

İlk önce, Halting kehanetinin var olmadığının kanıtının nasıl çalıştığını hatırlayalım. HBir Halting kâhili için herhangi bir adaya verilen , bir program olduğunu Pve abunun Hne P(a)olduğunu doğru tahmin edemediğini gösteren bir kanıt olduğunu kanıtlıyoruz .

Teorem: İki girdi alan ve her zaman ya da geri dönen Hbir program olsun . Sonra bir program var ve böyle bir sonuç varsa ve sadece geri dönerse duracak bir giriş var .haltloopQaQ(a)H(Q,a)loop

Kanıt. Programı düşünün

program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return

Let Q = Pve a = P. Ya H(Q,a) = haltda H(Q,a) = loop:

  • eğer H(Q,a) = haltöyleyse Q(a)(ki bu sadece P(P)) tanımı ile sonsuza kadar çalışırP .
  • eğer H(Q,a) = loopöyleyse Q(a), tanımı ile durdurulur P.

QED

Biz kabul niçin sordun H(P,P)yerine H(P,X)başka için X. Açıkça cevap, "çünkü H(P,P)kanıtı işe yaratan şey budur"! Eğer kullanılırsa H(P,X)bazı İsteğe bağlı olmak üzere X, tıkanıp tanınacak. Aslında, kanıt daha sonra şöyle görünür:

Kırık kanıt. Programı düşünün

program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return

Q = PVe a = Xbazı keyfi için edelim X. Ya H(Q,X) = haltda H(Q,X) = loop:

  • Diyelim ki H(Q,X) = haltne P(X)yapacağımızı söyleyemeyiz , çünkü P(X)durmaların H(X,X)geri dönüşe bağlı olup olmadığı . Sıkıştık. Ancak, bunu biliyorsak P(X)ve X(X)aynı olsaydık, ilerleme kaydedebilirdik. (Yani, gerçekten almalıyız X = P).
  • eğer H(Q,a) = loopöyleyse yine sıkışıp kalırız ve eğer çözülürsek X = P.

QED yok.

Umarım bu, H(P,P)fikrimizi çalışır hale getirmek için göz önünde bulundurmamız gerektiğini gösterir .


Haha. Müthiş! :)
aelguindy

2

İspatın sonucu bu benzetmedir:

P(P)P(P)P(P)(P)(P)

(P)(P)

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.