NexTutor
Wirtualne laboratorium/Matematyka/Teoria grafów/Problem stopu (Turing) — granice komputerów
Wielkie odkrycie 1936 — Turing

Problem stopu (Turing) — granice komputerów

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).

Matematyka · Teoria grafów · Problem stopu (Turing) — granice komputerów (1936)
Analizowany program PPProgram AZATRZYMA SIĘ
A: for i in 1..100: wypisz(i)
Czy da się napisać jeden program, który dla KAŻDEGO innego programu sprawdzi, czy się zatrzyma?
program P
A
werdykt
ZATRZYMA SIĘ
liczba kroków
100
detektor H
nie istnieje

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 HH), który dla DOWOLNEGO innego programu PP i jego danych rozstrzygnie, czy PP się kiedyś zatrzyma, czy będzie działał w nieskończoność?

H(P,x)={1gdy P(x) się zatrzyma0gdy P(x) działa w H(P, x) = \begin{cases} 1 & \text{gdy } P(x) \text{ się zatrzyma} \\ 0 & \text{gdy } P(x) \text{ działa w } \infty \end{cases}

Dowód przez sprzeczność (samo-odniesienie)

Turing udowodnił, że taki HH nie istnieje. Dowód jest genialny i przewrotny — w duchu paradoksu Russella. Załóżmy, że HH istnieje. Zbudujmy z niego przewrotny program DD, który robi ODWROTNIE, niż twierdzi detektor:

D(P)={pętla gdy H(P,P)=1STOPgdy H(P,P)=0D(P) = \begin{cases} \text{pętla} \ \infty & \text{gdy } H(P,P) = 1 \\ \text{STOP} & \text{gdy } H(P,P) = 0 \end{cases}

Teraz uruchommy DD na nim samym — D(D)D(D):

H(D,D)=1    D(D) się nie zatrzyma    H(D,D)=0H(D,D) = 1 \iff D(D) \text{ się nie zatrzyma} \iff H(D,D) = 0

Otrzymujemy samo-sprzeczność: jeśli detektor twierdzi, że D(D)D(D) się zatrzyma, to DD celowo wpada w pętlę (nie zatrzyma się) — i odwrotnie. Skoro założenie o istnieniu HH 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.

Model poglądowy · Wirtualne laboratorium NexTutor

Najczęstsze pytania

Czy da się sprawdzić dla każdego programu, czy się zatrzyma?

Nie — problem stopu jest nierozstrzygalny, udowodnił to Alan Turing w 1936 r.

Na czym polega dowód nierozstrzygalności?

Na sprzeczności: gdyby istniał detektor zatrzymania, można by zbudować program, który go oszukuje (samo-odniesienie).

Co to znaczy „nieobliczalne"?

Że istnieją problemy, których żaden algorytm nie rozwiąże, niezależnie od mocy komputera.