Ponieważ wiele naprawdę praktycznych problemów to ukrywanie problemu. Rozwiązanie ich rozwiązuje problem zatrzymania.
Chcesz kompilatora, który znajdzie najszybszy możliwy kod maszynowy dla danego programu? Właściwie problem zatrzymania.
Masz JavaScript, z niektórymi zmiennymi na wysokim poziomie bezpieczeństwa, a niektóre na niskim poziomie bezpieczeństwa. Chcesz się upewnić, że osoba atakująca nie może uzyskać informacji o wysokim poziomie bezpieczeństwa. To także tylko problem zatrzymania.
Masz parser dla swojego języka programowania. Zmieniasz go, ale chcesz się upewnić, że nadal analizuje wszystkie programy, których używał. Właściwie problem zatrzymania.
Masz program antywirusowy i chcesz sprawdzić, czy kiedykolwiek wykona złośliwą instrukcję. Właściwie to tylko problem zatrzymania.
Jeśli chodzi o przykład z wikipedii, tak, można modelować nowoczesny komputer jako maszynę o skończonym stanie. Ale są z tym dwa problemy.
Każdy komputer byłby innym automatem, w zależności od dokładnej liczby bitów pamięci RAM. Nie jest to więc przydatne do badania określonego fragmentu kodu, ponieważ automat zależy od komputera, na którym może działać.
Potrzebujesz stanów, jeśli masz n bitów RAM. Tak więc dla twojego nowoczesnego komputera o pojemności 8 GB, to 2 32000000000 . Jest to tak duża liczba, że wolfram alfa nawet nie wie, jak ją interpretować. Kiedy robię 2 10 9 , mówi, że ma 300000000 cyfr dziesiętnych. Jest to zdecydowanie za dużo do przechowywania na normalnym komputerze.2)n2)320000000002)109300000000
Problem zatrzymania pozwala nam rozumować względną trudność algorytmów. Daje nam to do zrozumienia, że istnieją pewne algorytmy, które nie istnieją, że czasami wszystko, co możemy zrobić, to zgadnąć problem i nigdy nie wiedzieć, czy go rozwiązaliśmy.
Gdybyśmy nie mieli problemu z zatrzymaniem, nadal szukalibyśmy magicznego algorytmu Hilberta, który wprowadzałby twierdzenia i wyprowadzałby, czy są prawdziwe, czy nie. Teraz wiemy, że możemy przestać szukać i możemy dołożyć starań, aby znaleźć heurystykę i najlepsze metody rozwiązywania tych problemów.
AKTUALIZACJA: Aby rozwiązać kilka problemów poruszonych w komentarzach.
@Tyler Fleming Cloutier: „Bezsensowny” problem pojawia się w dowodzie, że problem zatrzymania jest nierozstrzygalny, ale sednem nierozstrzygalności jest naprawdę nieskończona przestrzeń poszukiwań. Szukasz obiektu o danej właściwości, a jeśli nie istnieje, nie ma sposobu, aby wiedzieć, kiedy skończysz.
Trudność problemu może być związana z liczbą posiadanych kwantyfikatorów. Próbując pokazać, że istnieje ( ) obiekt o dowolnej właściwości, musisz szukać, aż go znajdziesz. Jeśli nie istnieje, nie ma możliwości (ogólnie), aby to wiedzieć. Udowodnienie, że wszystkie obiekty ( ∀ ) mają właściwość, jest trudne, ale można wyszukać obiekt bez właściwości, aby go obalić. Im więcej jest alternatywnych opcji dla forall i istnieje, tym trudniejszy jest problem.∃∀
Aby uzyskać więcej informacji na ten temat, zobacz Hierarchia arytmetyczna . Wszystko powyżej jest nierozstrzygalne, chociaż poziom 1 jest częściowo rozstrzygalny.Σ00= Π00
Można również wykazać, że istnieją nierozwiązywalne problemy bez użycia nonsensownego paradoksu, takiego jak problem Haltinga lub paradoksu Liarsa. Maszynę Turinga można zakodować za pomocą ciągu bitów, tj. Liczby całkowitej. Ale problem można zakodować jako język, tj. Podzbiór liczb całkowitych. Wiadomo, że nie występuje bijectja między zbiorem liczb całkowitych a zbiorem wszystkich podzbiorów liczb całkowitych. Więc muszą być pewne problemy (języki), które nie mają powiązanej maszyny Turinga (algorytmu).
@Brent: tak, to przyznaje, że jest to rozstrzygalne w przypadku nowoczesnych komputerów. Ale decyduje o tym konkretna maszyna. Jeśli dodasz dysk USB z miejscem na dysku lub możliwością przechowywania w sieci lub czymkolwiek innym, oznacza to, że urządzenie się zmieniło, a wynik nadal się nie utrzymuje.
Trzeba też powiedzieć, że wiele razy algorytm mówi „ten kod się zatrzyma”, ponieważ kod zawiedzie i zabraknie pamięci, a dodanie jednego dodatkowego fragmentu pamięci spowoduje, że kod odnieść sukces i dać inny wynik.
Chodzi o to, że maszyny Turinga nie mają nieskończonej ilości pamięci. Nigdy nie ma czasu, aby na taśmie zapisywano nieskończoną liczbę symboli. Zamiast tego maszyna Turinga ma „niezwiązaną” pamięć, co oznacza, że możesz nadal otrzymywać więcej źródeł pamięci, gdy jej potrzebujesz. Komputery są takie. Możesz dodać pamięć RAM lub USB, dyski twarde lub pamięć sieciową. Tak, kończy Ci się pamięć, kiedy zabraknie atomów we wszechświecie. Ale posiadanie nieograniczonej pamięci jest o wiele bardziej użytecznym modelem.