Wiem, że istnieje Maszyna Turinga, jeśli funkcja jest obliczalna. Jak więc pokazać, że funkcja nie jest obliczalna lub że nie ma do tego żadnej maszyny Turinga. Czy istnieje coś takiego jak lemat pompujący?
Wiem, że istnieje Maszyna Turinga, jeśli funkcja jest obliczalna. Jak więc pokazać, że funkcja nie jest obliczalna lub że nie ma do tego żadnej maszyny Turinga. Czy istnieje coś takiego jak lemat pompujący?
Odpowiedzi:
Zanim odpowiem na twoje ogólne pytanie, pozwól mi najpierw cofnąć się o krok, podać tło historyczne i odpowiedzieć na wstępne pytanie: Czy istnieją funkcje niepoliczalne?
[notacja: możemy powiązać dowolną funkcję z językiem a następnie omówić rozstrzygalność zamiast obliczalności ]
Istnieje kilka języków, których nie może określić żadna maszyna Turinga. Argument jest prosty: istnieje „tylko” wiele różnych baz TM, ale niepoliczalnie wiele różnych języków. Zatem istnieje co najwyżej rozstrzygalnych języków, a pozostałe (nieskończenie wiele) są nierozstrzygalne. Dalsza lektura:
Aby położyć dłoń na konkretnym nierozstrzygalnym języku, pomysł polega na użyciu techniki o nazwie diagonalizacja (Georg Cantor, 1873), która pierwotnie została użyta do wykazania, że jest więcej liczb rzeczywistych niż liczb całkowitych, lub innymi słowy, że .
Pomysł skonstruowania pierwszego nierozstrzygalnego języka jest prosty: wymieniamy wszystkie maszyny Turinga (co jest możliwe, ponieważ można je wyliczyć!) I tworzymy język, który nie zgadza się z każdą TM na co najmniej jednym wejściu.
Powyżej, każdy wiersz to jedna TM, a każda kolumna to jedno wejście. Wartość komórki wynosi 0, jeśli TM odrzuca lub nigdy się nie zatrzymuje, i 1, jeśli TM akceptuje te dane wejściowe. Definiujemy język tak, aby D zawierał i- ty sygnał wejściowy tylko wtedy, gdy i- ta TM nie akceptuje tego wejścia.
Zgodnie z powyższą tabelą ponieważ M 1 akceptuje ε . Podobnie 0 ∉ D , ale 1 ∈ D, ponieważ M 3 nie akceptuje 1 .
Załóżmy teraz, że decyduje D i wyszukuje wiersz k w tabeli: jeśli w k- tej kolumnie jest 1 , to M k akceptuje to wejście, ale nie ma go w D , a jeśli jest tam 0 , to wejście jest w D, ale M k tego nie akceptuje. Dlatego M k nie decyduje D i dotarliśmy sprzeczność.
Teraz twoje pytanie. Istnieje kilka sposobów udowodnienia, że język jest nierozstrzygalny. Spróbuję dotknąć najczęstszych.
Pierwszą metodą jest bezpośrednie pokazanie, że język jest nierozstrzygalny, poprzez pokazanie, że żadna TM nie może go zdecydować. Zwykle jest to zgodne z przedstawioną powyżej metodą diagonalizacji.
Przykład.
Pokaż, że (dopełnienie) Język przekątnej jest nierozstrzygalny.
Dowód.
Załóżmy, że jest rozstrzygalne i niech M D będzie decydującym. Istnieją dwa przypadki:
Czasami możemy użyć właściwości zamknięcia, aby pokazać, że jakiś język nie jest rozstrzygalny, w oparciu o inne języki, o których wiemy, że nie są rozstrzygalne.
W szczególności, jeśli nie jest rozstrzygalne (piszemy L ∉ R ), to również jego dopełnienie ¯ L jest nierozstrzygalne: jeśli istnieje decydujący M dla ¯ L, możemy po prostu użyć go do podjęcia decyzji L , akceptując, gdy M odrzuca i odwrotnie. Ponieważ M zawsze zatrzymuje się z odpowiedzią (jest to decydujący), zawsze możemy odwrócić jego odpowiedź.
Wniosek: przekątnej język jest nierozstrzygalnym, L D ∉ R .
Podobny argument można zastosować, zauważając, że jeśli zarówno jak i jego uzupełnienie ¯ L są rekurencyjnie policzalne, oba są rozstrzygalne. Jest to szczególnie przydatne, jeśli chcemy udowodnić, że języka nie da się wyliczyć rekurencyjnie, co jest silną właściwością niż nierozstrzygalność.
Zwykle dość trudno jest bezpośrednio udowodnić, że język jest nierozstrzygalny (chyba że jest już skonstruowany w sposób „diagonalny”). Ostatnią i najczęstszą metodą udowodnienia nierozstrzygalności jest użycie innego języka, o którym wiemy, że jest nierozstrzygalny. Chodzi o to, aby zredukować jeden język do drugiego: aby pokazać, że jeśli jeden jest rozstrzygalny, to drugi musi być również rozstrzygalny, ale wiadomo, że jeden z nich jest nierozstrzygalny, co prowadzi do wniosku, że pierwszy jest również nierozstrzygalny. Przeczytaj więcej na temat redukcji w „Jakie są typowe techniki wzajemnego zmniejszania problemów?” .
Przykład.
Pokaż, że przekątna język jest nierozstrzygalny.
Dowód.
Wiemy, że jest nierozstrzygalny. Zmniejszamy L D do H P (to jest oznaczone L D ≤ H P ), to znaczy, że wykazują, że jeśli H P był rozstrzygalne można było używać jej decydującym zdecydować L D , co jest sprzeczne.
Zmniejszenie polega na konwersji kandydata dla L D (to jest wejścia do potencjalnego decydującym / akceptora L D ) z kandydatem w ' do H P tak, że w ∈ L D wtedy i tylko wtedy, gdy w " ∈ H P . Zapewniamy, że ta konwersja jest obliczalna. Zatem decyzja w ' mówi nam, czy w ∈ L D , więc jeśli możemy zdecydować HP, będziemy mogli również zdecydować L D .¹
Konwersja jest następująca. Podjąć pewne i wyjściowe w ' = ⟨ M ' , ⟨ M ⟩ ⟩ , ² gdzie M ' jest tm, która zachowuje się jak M , ale jeśli M odrzutów, a M ' przechodzi w nieskończonej pętli.
Zobaczmy, że spełniają wymagania.
Jeśli w ∈ L D , to znaczy, że M postojów i akceptuje wejście ⟨ M ⟩ . W związku z tym, M ' również zatrzymanie i akceptuje wejście ⟨ M ⟩ . Tak więc, ⟨ M ' , ⟨ M ⟩ ⟩ ∈ H P .
Z drugiej strony, jeśli w ∉ L D następnie M albo odrzuca albo nigdy zatrzymanie na ⟨
. W obu przypadkach M " trafi do nieskończonej pętli na ⟨ M ⟩ . Tak więc, ⟨ M ' , ⟨ M ⟩ ⟩ ∉ H P , i pokazuje, że są wykonane w ∈ L D wtedy i tylko wtedy, gdy w " ∈ H P , i w ten sposób wykazać, że H P ∉ R .
Dalsza lektura: wiele przykładów redukcji i dowodzenia niemożności rozstrzygnięcia języków można znaleźć za pomocą tagu redukcji .
Obowiązują pewne ograniczenia dotyczące ograniczenia. Sama konwersja musi być obliczalna i dobrze zdefiniowana dla każdego wejścia.
Sygnał wejściowy o wygląda ⟨ M , x ⟩ , gdzie M jest TM i x jest kilka znaków. Więc tutaj wybieramy ciąg x, który ma być kodowaniem maszyny M , która jest tylko jakimś ciągiem ..
„Więc za każdym razem chcemy udowodnić jest nierozstrzygalny, musimy zmniejszyć L D (lub H P ) do tego? Czy to nie jest jakiś skrót?”
Cóż, w rzeczywistości jest. To jest twierdzenie Rice'a .
Twierdzenie mówi, że wiele języków o określonej strukturze jest nierozstrzygalnych. Ponieważ wszystkie te języki mają tę pewną strukturę, możemy wykonać redukcję raz i zastosować ją do dowolnego języka, który przyjmuje podobną strukturę.
Twierdzenie to formalnie sformułowano w następujący sposób:
Zestaw jest podzbiorem języków w ; nazywamy to właściwością, ponieważ opisuje właściwość akceptowanego języka . Wszystkie bazy TM, których język spełnia tę właściwość, należą do .
Na przykład może być właściwością, że zaakceptowany język zawiera dokładnie dwa słowa:
W tym przypadku jest zbiorem wszystkich baz TM, których język składa się z dokładnie dwóch słów:
Właściwość może być bardzo prosta, ale nie może to być wszystkie języki RE lub żaden z języków RE. Jeśli lub wówczas właściwość jest uważana za trywialną , a indukowany jest obliczalny. Przykładem prostego jest taki, który zawiera tylko jeden język, powiedzmy . Zauważ, że chociaż zawiera tylko jeden język, istnieje nieskończenie wiele maszyn których językiem jest , więc jest nieskończony i nierozstrzygalny.
Twierdzenie to jest bardzo silne, aby udowodnić nierozstrzygalność wielu języków.
Przykład.
Język , jest niezdecydowany
Dowód.
Możemy zapisać jako , to znaczy dla właściwości . Jest to nietrywialna właściwość (obejmuje język , ale nie obejmuje na przykład języka . Dlatego według twierdzenia Rice'a jest nierozstrzygalny.
Udowodnimy teraz twierdzenie. Jak wspomniano powyżej, pokażemy redukcję z do (dla dowolnego arbitralnego, nietrywialnego ).
Dowód.
Niech będzie nietrywialną własnością, . Pokazujemy , czyli zmniejszamy do , abyśmy mogli zdecydować moglibyśmy zdecydować (co, jak wiemy, jest niemożliwe, dlatego nie może być rozstrzygalne). W dowodzie poniżej zakładamy, że język nie jest pusta część , czyli . (jeśli pusty język jest w , równoważny dowód działa na właściwości dopełniacza , pominę szczegóły). Ponieważjest nietrywialny, obejmuje co najmniej jeden język; nazwijmy ten język i załóżmy, że jest maszyną, która akceptuje (taka maszyna istnieje, ponieważ zawiera tylko języki w RE).
Przypomnijmy, że przy takiej redukcji (patrz sekcja 3 powyżej) musimy pokazać, jak przekonwertować wejście dla na wejście dla , aby
Niech , konwertujemy go na gdzie opis maszyny (na wejściu ) jest następujący:
Widzimy, że ta konwersja jest ważna. Po pierwsze, należy łatwo skonstruować opis podany .
Jeśli , to zatrzymuje się na . W takim przypadku przechodzi do kroku 2 i zachowuje się jak . Dlatego jego akceptowaną język . Dlatego .
Jeśli to zapętla się na . W tym przypadku, pętle na dowolnym wejściu - że zostaje zatrzymany w etapie 1. Język akceptowane przez„w tym przypadku jest pusty, . Dlatego .
Twierdzenie Rice'a daje nam w łatwy sposób, aby pokazać, że pewnego języka , który spełnia pewne właściwości jest nierozstrzygalny, to znaczy, . Rozszerzona wersja twierdzenia Rice'a pozwala nam ustalić, czy język jest wymienny rekurencyjnie, czy nie, to znaczy określa, czy , sprawdzając, czy spełnia pewne dodatkowe właściwości.
Twierdzenie (Rice, rozszerzone). Biorąc pod uwagę właściwość , język jest wymienny ( ) tylko wtedy, gdy wszystkie następujące trzy instrukcje są łącznie utrzymać
- Dla dowolnych dwóch , jeśli oraz wówczas również .
- Jeśli to istnieje skończona podzbiór tak że .
- Zbiór wszystkich skończonych języków w jest wyliczalny (innymi słowy: istnieje TM, która wylicza wszystkie skończone języki ).
Dowód.
Jest to twierdzenie „wtedy i tylko wtedy” i powinniśmy udowodnić oba jego kierunki. Po pierwsze, pokazujemy, że jeśli jeden z warunków (1,2,3) nie jest spełniony, to . Następnie pokażemy, że jeśli wszystkie trzy warunki utrzymują się jednocześnie, to .
Jeśli (1,2) jest wstrzymane, ale (3) nie, to .
Załóżmy, że , i zobaczymy, że mamy sposób na zaakceptowanie dowolnych skończonych języków w (a zatem zestaw wszystkich tych języków to RE), a zatem warunek (3) zachowuje się i dochodzimy do sprzeczności . Jak zdecydować, czy skończony należy do czy nie? Łatwo - używamy opis skonstruować maszynę że akceptuje tylko słowa , a teraz możemy uruchomić maszynę na (pamiętaj - założyliśmy , więc nie jest to maszyna, która akceptuje!). Jeśli to a ponieważ , jego maszyna powie tak na wejściu , i gotowe.
Jeśli (2,3) utrzymuje, ale (1) nie, to .
Zakładamy, że i pokażemy, że mamy sposób decydować o , co prowadzi do sprzeczności.L S ∈REHP
Ponieważ warunek (1) nie posiada, nie jest językiem i rozszerzeniem tego, tak że . Teraz powtórzymy argument użyty w Rozdziale 4, aby zdecydować : biorąc pod uwagę dane wejściowe dla , konstruujemy maszynę której językiem jest jeśli lub w inny sposób, jego językiem jest . Następnie możemy zdecydować : albo zatrzymuje się na , albo maszyna RE dla akceptujeL 2 ⊇ L 1 L 2 ∉ S H P ( ⟨ M ⟩ , x ); możemy działać równolegle i mamy gwarancję, że przynajmniej jeden się zatrzyma.
Podajmy szczegóły budowy (na wejściu ):
Dlaczego to działa? Jeśli 1.1 nigdy się nie zatrzymuje, a akceptuje dokładnie wszystkie dane wejściowe, które są akceptowane w kroku 1.2, więc . Z drugiej strony, jeśli , to w pewnym momencie krok 1.1 zatrzymuje się, a akceptuje dokładnie . Może się zdarzyć, że zaakceptuje wcześniej, ale ponieważ , nie zmienia to języka w tym przypadku.
Jeśli (1,3) jest wstrzymane, ale (2) nie, to .
Ponownie założymy i pokażemy, że staje się rozstrzygalne, co jest sprzecznością.
Jeśli warunek (2) nie jest spełniony, to dla dowolnego wszystkie jego skończone podzestawy spełniają (zwróć uwagę, że musi być nieskończony, ponieważ ). Jak wyżej, aby zdecydować dla danego wejścia , konstruujemy maszynę której językiem jest if i niektóre skończone przeciwnym razie . Sprzeczność zachodzi w podobny sposób jak powyżej.
Konstrukcja tej maszyny jest dość podobna do poprzedniej którą zbudowaliśmy. Maszyna (na wejściu ) wykonuje:
Utrzymuje, że jeśli , to w pewnym momencie, powiedzmy po 1000 krokach, zatrzymuje się na . Dlatego krok 1 zatrzyma (i odrzuci) wszelkie dane wejściowe o długości . Dlatego w tym przypadku jest skończone . Należy również zauważyć, że , a w szczególności przez nasze założenia na unieważnienie warunkiem (2), że mamy .
Z drugiej strony, jeśli , to krok 1 nigdy się nie zatrzymuje, a my nigdy nie odrzucamy w kroku 2. W tym przypadku łatwo zauważyć, że i in zwłaszcza .
Pozostaje nam wskazać inny kierunek rozszerzonego twierdzenia. Oznacza to, że musimy pokazać, że jeśli wszystkie warunki (1,2,3) są spełnione, to mamy TM, która akceptuje , czyli . Innymi słowy, musimy pokazać maszynę , aby dla każdego wejścia dla którego , maszyna zaakceptowała te dane wejściowe, .
Oto jak zachowuje się maszyna (na wejściu ):
Dlaczego to działa? Jeśli ma skończony podzbiór , a gdy wyjdzie z tego podzbioru, w krokach 2.2 / 2.3 okaże się, że akceptuje wszystkie słowa w tym języku i zaakceptować.
Z drugiej strony, jeśli nie może być akceptując wszystkie słowa dla każdego . Rzeczywiście, pod warunkiem (1), każdy również znajduje się w , więc jeśli akceptuje wszystkie słowa w dla niektórych , to a zatem , w przeciwieństwie.
Na koniec zauważ, że poniższe jest prostym (i bardzo przydatnym) następstwem powyższych:
Następstwo (ryż, rozszerzone). Biorąc pod uwagę nietrywialną właściwość , tak że , język nie jest wymienny rekurencyjnie, to znaczy .
Jednym z przydatnych narzędzi jest twierdzenie Rice'a . Oto, co mówi:
Niech nietrywialnym zestaw części obliczeniowych funkcji pojedynczych, i Gödel numeracja od . Następnie zestaw indeksów
nie jest rekurencyjny.
Można go również znaleźć w postaci kodowania maszyn Turinga (lub dowolnego innego języka programowania Turinga), tj. ; tutaj definiuje numerację Gödla.
To znaczy, możesz użyć twierdzenia Rice'a, aby udowodnić takie zbiory nierekurencyjne, które są zestawami indeksów nietrywialnych zbiorów funkcji (lub takie można sprowadzać do ).
Zauważ, że istnieje rozszerzenie, którego można użyć, aby pokazać, że niektóre zestawy indeksów nie są wymienne rekurencyjnie.
Niech ma numerację Gödla. Rozważ zestaw naturals
.
Teraz, ponieważ dla
Twierdzenie Rice'a można zastosować, a nie jest rozstrzygalne.
Ponieważ wielu nie zna numeracji Gödla, należy zauważyć, że przykład działa również w zakresie maszyn Turinga (tj. Programów), używając .
Rozważ zestaw naturals
co z pewnością nie jest obliczalne. Jednak nie jest zestawem indeksów dla żadnego ! Niech jakiegoś . Ponieważ jest numeracją Gödla , istnieje (nieskończenie wiele) z ale dla wszystkich wstrzymanych, ponieważ .
Uważaj na to! Zasadniczo, jeśli indeks funkcji jest używany po „prawej stronie” lub jako parametr funkcji w definicji zestawu, prawdopodobnie nie jest to zestaw indeksów. Może być potrzebna właściwość numeracji Gödla i twierdzenie o punkcie stałym, aby pokazać, że zbiór nie jest zestawem indeksów.
Zobacz tutaj i tutaj pokrewne posty na temat twierdzenia Rice'a.