Mam problem ze zrozumieniem dowodu nierozstrzygalności problemu zatrzymania.
Jeśli zwraca, czy program a zatrzymuje się na wejściu b , dlaczego musimy przekazać kod P zarówno dla a, jak i b ?
Dlaczego nie możemy karmić z P i jakimś arbitralnym wejściowego, powiedzmy, X ?
Odpowiedzi:
Dowód ma na celu znalezienie sprzeczności. Musisz zrozumieć, czym jest wyprowadzona sprzeczność, aby zrozumieć, dlaczego jest używane jako wkład do samego siebie. Sprzeczność jest, nieformalnie: jeśli mamy maszynę H (a, b), która decyduje „a akceptuje b”, wówczas możemy zbudować maszynę, która akceptuje maszyny, które same się nie akceptują. (Czytałem, że kilka razy, aż do uzyskania go.) Urządzenie pokazane na rysunku - nazwijmy go M - M ( P ) = nie P nie akceptuje ⟨ P ⟩ ?P. M. M.( P) = P. ⟨ P⟩
Sprzeczność się dzieje, gdy zapytać: czy zaakceptować ⟨ M ⟩ ? Spróbuj obliczyć dwie opcje, aby zobaczyć, jak istnieje sprzeczność.M. ⟨ M⟩
akceptuje ⟨ M ⟩ wtedy i tylko wtedy, gdy M nie akceptuje ⟨ M ⟩ ; jest to wyraźnie sprzeczność.M. ⟨ M⟩ M. ⟨ M⟩
Dlatego tak ważne jest, aby dowód uruchamiał na sobie, a nie na dowolnych danych wejściowych. Jest to powszechny temat w dowodach niemożliwości, znanych jako argumenty przekątne.P.
źródło
Zignoruj na chwilę obraz; dojdziemy do tego wkrótce. Program ma być testerem halt: kiedy dajemy H wejście programu A (zespoły jako listę programu) oraz w ogóle cokolwiek dla b , H ( , b ) działa w następujący sposóbH.( a , b ) H. za za b H.( a , b )
Argument, że jest niemożliwy do zbudowania, opiera się na działaniu określonego „perwersyjnego” programu P , takiego, który wykorzystuje H jako podprogram. P przyjmuje jako dane wejściowe listę dowolnego programu, x i wykonuje następujące czynności:H P H P x
Nietrudno to dostrzec
Jak dotąd tak dobrze: z pewnością będzie programem, o ile jego podprogram H jest programem.P H
źródło
H
nie jest wywoływany więcej niż raz, nie ma żadnej rekurencjiP
.H(P, P)
nie wykonuje sięP
, po prostu „magicznie” określa, czyP
zatrzymuje się po przejściu.H(P,P)
nie musi być wykonywanyP
, ale musi być wykonywanyH(x ↦ H(x,x), P)
w ramach określania, czy ma sięP
zatrzymać. Który rozwija sięH(x ↦ H(y ↦ H(y,y), x), P)
i tak dalej.H
nie jest określona w tym dowodzie. Więc nie, nie musi niczego wykonywać, czy to będzie,P
czy samo. Dowód zaczyna się od założenia, żeH
istnieje jakiś program , który magicznie decyduje o problemie zatrzymania, a następnie udowadnia, że samo istnienie takiego programu byłoby sprzecznością, a zatem taki program nie istnieje.Wypróbuj ładniejszy dowód z animacjami. A ponieważ odpowiedzi powinny zawierać coś więcej niż link do strony, oto odpowiedź na twoje pytanie.
Po pierwsze, przypomnijmy sobie, jak działa dowód nieistnienia wyroczni w Halting. Udowadniamy, że biorąc pod uwagę każdego kandydata
H
na wyrocznię z Stopu, istnieje programP
i dane wejściowe,a
dla którychH
nie można poprawnie przewidzieć, coP(a)
się stanie.Twierdzenie: Niech
H
będzie dowolnym programem, który pobiera dwa dane wejściowe i zawsze zwraca albohalt
alboloop
. Istnieje programQ
i dane wejściowea
, któreQ(a)
zatrzymują się, jeśli i tylko jeśliH(Q,a)
powróciloop
.Dowód. Rozważ program
Niech
Q = P
ia = P
. AlboH(Q,a) = halt
alboH(Q,a) = loop
:H(Q,a) = halt
wtedyQ(a)
(co jest sprawiedliweP(P)
) działa wiecznie zgodnie z definicjąP
.H(Q,a) = loop
następnieQ(a)
zatrzymają się z definitywnościąP
.CO BYŁO DO OKAZANIA
Zapytałeś, dlaczego rozważamy
H(P,P)
zamiastH(P,X)
jakiegoś innegoX
. Oczywista odpowiedź brzmi „ponieważH(P,P)
to sprawia, że dowód działa”! Jeśli użyjeszH(P,X)
jakiegoś arbitralnegoX
, utkniesz. Rzeczywiście, dowód wyglądałby następująco:Złamany dowód. Rozważ program
Niech
Q = P
ia = X
dla niektórych dowolnychX
. AlboH(Q,X) = halt
alboH(Q,X) = loop
:H(Q,X) = halt
że nie możemy powiedzieć, coP(X)
robi, ponieważ to, czyP(X)
zatrzymanie zależy od tego, coH(X,X)
powróci. Utknęliśmy. Gdybyśmy jednak wiedzieli o tymP(X)
i byliX(X)
tacy sami, moglibyśmy poczynić postępy. (Więc naprawdę powinniśmy wziąćX = P
).H(Q,a) = loop
wtedy utkniemy ponownie, i utknęlibyśmy, gdybyX = P
.Brak QED.
Mam nadzieję, że to pokazuje, że musimy rozważyć
H(P,P)
, aby nasz pomysł zadziałał.źródło
Rezultatem dowodu jest ta analogia:
źródło