Teoria obliczeń i złożoności obliczeniowej Wykład 5
Transkrypt
Teoria obliczeń i złożoności obliczeniowej Wykład 5
Teoria obliczeń i złożoności obliczeniowej Wykład 5 (18.03.2005) Przykład: (program do DTM-U z poprzedniego wykładu) 1 000 010 110110 001 011 110111110 001 011 11010 100 111 11 1931r. Kurt Goedel pokazuje niezupełność arytmetyki Peano. Problem STOP Dana: P - Program Turinga-Posta; x - dana do P Pytanie: Czy dla danego (dowolnego) programu Turinga-Posta i danej do tego programu x można za pomocą obliczenia sprawdzić, czy program P zatrzyma się jeśli jego obliczenie rozpoczęto z daną x. TWIERDZENIE (o problemie stopu) Nie istnieje procedura obliczeniowa sprawdzająca, czy dane wyrażenie taśmowe doprowadzi ostatecznie do zatrzymania programu uniwersalnego U jeśli obliczenie U zostało rozpoczęte dla tego wyrażenia taśmowego. DOWÓD: (niewprost) 1. Założenie: istnieje procedura PUS, która realizuje rozwiązanie problemu stopu dla programu uniwersalnego U. 2. v ∈ℕ (zapis binarny v) 3. P - procedura, która zawiera w sobie PUS, i która realizuje następujący algorytm: 3.1. Próbuj zdekodować v jako pewien program Turinga-Posta, tzn. znajdź takie P, iż kod(P) = v. Jeśli taki P nie istnieje to idź do 3.1, w przecziwnym razie idź do 3.2. 3.2. Zrób kopię ciągu v i umieść ją po v (stworzony ciąg vv = kod(P)v). 3.3.Użyj procedury PUS, aby sprawdzić, czy program U zatrzyma się, gdy rozpocznie 1/2 swoje obliczenie od wyrażenia taśmowego vv. Jeśli TAK to idź do 3.3. Jeśli NIE to zatrzymaj się. 4. Procedura P zatrzyma się wtedy i tylko wtedy, gdy: 4.1. v = kod(P) 4.2. program uniwersalny U nie zatrzyma się, gdy rozpocznie obliczenie od wyrażenia taśmowego vv. 5. Ponieważ U symuluje obliczenie programu P na danej v, to możemy napisać, że P zatrzyma się wtedy i tylko wtedy, gdy ∃P : kod P 1 =v i P1 na v nie zatrzyma się. 1 6. Ponieważ P jest obliczalna, to istnieje program Turinga-Posta P0 opisujący P. 7. Obliczenie programu P0 zatrzyma się z daną v wtedy i tylko wtedy, gdy obliczenie U nie zatrzyma się z daną vv. 8. Niech v0 = kod(P0) 9. (z konstrukcji P) z punktu 7: P0 zatrzyma się na danej v0 wtedy i tylko wtedy, gdy U nie zatrzyma się z daną v0v0 . 10. Program uniwersalny U pracując na danej wejściowej v0 v0 = kod(P0)v0 symuluje obliczenie P0 na danej v0. U zatrzyma się z daną v0 v0 wtedy i tylko wtedy, gdy P0 zatrzyma się z daną v0. Z 9. i 10. wynika sprzeczność. Czyli nie istnieje PUS rozwiązująca problem stopu. Przykłady problemów nieobliczalnych: • równania diofantyczne 4x - 2y = 3 4x - y = 3 x2 + y2 = z2 • problem słowa Dany jest alfabet {a, b, c} i słowa nad tym alfabetem oraz pewne równania: ba = abc bc = cba ac = ca Czy można za pomocą danych równać przekształcić jedno słowo nad alfabetem w drugie słowo nad tym alfabetem. 2/2