Rozszerzenie tematu obliczalności (informatyka). Nie istnieje program, który dla dowolnego innego programu rozstrzygnie, czy ten się zatrzyma, czy będzie działał w nieskończoność — są rzeczy zasadniczo nieobliczalne. Alan Turing udowodnił to w 1936 r., definiując przy okazji model komputera (maszynę Turinga).
Co się właśnie stało?
Dla programu A („licz do 100") od razu widać, że się zatrzyma. Dla programu B („while prawda") — że będzie działał w nieskończoność. Ale dla programu C („szukaj kontrprzykładu pewnej hipotezy") nie wiadomo: jeśli kontrprzykład istnieje, program go znajdzie i stanie; jeśli nie istnieje — będzie szukał wiecznie. A my z góry nie wiemy, który przypadek zachodzi.
Problem stopu (halting problem)
To fundamentalny wynik informatyki teoretycznej, udowodniony przez Alana Turinga w 1936 r. — w tej samej pracy, która zdefiniowała maszynę Turinga, matematyczny model komputera. Pytanie brzmi: czy da się napisać jeden uniwersalny program (detektor ), który dla DOWOLNEGO innego programu i jego danych rozstrzygnie, czy się kiedyś zatrzyma, czy będzie działał w nieskończoność?
Dowód przez sprzeczność (samo-odniesienie)
Turing udowodnił, że taki nie istnieje. Dowód jest genialny i przewrotny — w duchu paradoksu Russella. Załóżmy, że istnieje. Zbudujmy z niego przewrotny program , który robi ODWROTNIE, niż twierdzi detektor:
Teraz uruchommy na nim samym — :
Otrzymujemy samo-sprzeczność: jeśli detektor twierdzi, że się zatrzyma, to celowo wpada w pętlę (nie zatrzyma się) — i odwrotnie. Skoro założenie o istnieniu prowadzi do sprzeczności, taki program nie może istnieć. Problem stopu jest NIEROZSTRZYGALNY (ang. undecidable).
Co to znaczy w praktyce?
Konsekwencja jest głęboka: istnieją problemy zasadniczo nieobliczalne — których żaden komputer, choćby nieskończenie szybki, nigdy nie rozwiąże. To nie kwestia „za mało mocy", lecz fundamentalna granica tego, co algorytmy mogą osiągnąć. Dlatego nie da się napisać programu, który idealnie wykryje wszystkie wirusy, wszystkie błędy w cudzym kodzie albo wszystkie nieskończone pętle.
Po co Ci to na maturze:
Odkrycie Turinga — równolegle z twierdzeniami Gödla o niezupełności — wyznaczyło granice matematyki i informatyki, a zarazem założyło podwaliny pod całą informatykę (Turing jest uważany za jej ojca). To rozszerzenie tematu obliczalności: sam schemat dowodu przez sprzeczność i argument przekątniowy (samo-odniesienie) to klasyczne narzędzia logiki i teorii mnogości.
Zapamiętaj: istnieją problemy nierozstrzygalne algorytmicznie — żaden program nie rozwiąże problemu stopu dla wszystkich możliwych programów. To nie brak mocy obliczeniowej, lecz twarda, matematyczna granica obliczalności.
Nie — problem stopu jest nierozstrzygalny, udowodnił to Alan Turing w 1936 r.
Na sprzeczności: gdyby istniał detektor zatrzymania, można by zbudować program, który go oszukuje (samo-odniesienie).
Że istnieją problemy, których żaden algorytm nie rozwiąże, niezależnie od mocy komputera.
Powiązane eksperymenty