Komentarz do tex.SE mnie zastanawiał. Oświadczenie to zasadniczo:
Jeśli mogę napisać kompilator dla języka X w języku X, to X jest Turing-complete.
Pod względem obliczalności i języków formalnych jest to:
Jeśli decyduje L ⊆ L T, M i ⟨ M ⟩ ∈ L , to F L = R E .
Tutaj oznacza języka dla wszystkich maszyn Turinga kodowania i K L oznacza zbiór funkcji obliczonych przez maszyny w L .
Czy to prawda?
computability
turing-completeness
Raphael
źródło
źródło
Odpowiedzi:
Nieformalne oświadczenie nie jest prawdziwe, jak pokazuje poniższy język programowania. Każdy ciąg, powiedzmy, znaków ASCII jest poprawnym programem, a znaczenie każdego programu brzmi: „Wyprowadź program, który po prostu wypisuje kopię swojego wejścia”. Zatem każdy program w tym języku jest kompilatorem języka, ale język nie jest kompletny w Turingu.
Nie jestem pewien, czy twoja „wersja teorii obliczeń” jest równoważna, ale też nie jest prawdą. Zgodnie z drugim twierdzeniem Kleene o rekurencji dla dowolnego kodowania maszyn Turinga istnieje TM, która akceptuje własne kodowanie i odrzuca wszystkie inne. 1 To urządzenie jest kontrprzykładem do zdania. Mówiąc konkretniej, możemy osiągnąć wynik, wybierając kodowanie. Na przykład, niech każdy nieparzysty numer koduje maszynę zdefiniowaną przez „Jeśli moje dane wejściowe są nieparzyste, zaakceptuj ją, w przeciwnym razie odrzucaj” i niech cyfra 2 x koduje maszynę zakodowaną przez x w twoim ulubionym schemacie kodowania dla maszyn Turinga. ⟨ M ⟩ jest w języku L zaakceptowany przez MM. 2 x x ⟨ M⟩ L. M. ale nie jest ukończony przez Turinga.faL.
1 sekundy rekursji KLEENE Twierdzenie mówi, że na każdy wyliczenie częściowych funkcji rekurencyjnej (czyli dla każdego kodowania programów jako liczby całkowite) oraz każde częściowe funkcji rekurencyjnej P ( x , y ) nie jest liczba całkowita p taka, że ϕ p jest funkcją odwzorowującą y na Q ( p , y ) . W szczególności niech Q będzie funkcją, która akceptuje, jeśli x = y( ϕja)i ≥ 0 Q ( x , y) p ϕp y Q ( p , y) Q x = y i odrzuca inaczej. Według twierdzenia istnieje liczba całkowita która koduje program ϕ p ( y ) = Q ( p , y ) . Oznacza to, że ϕ p przyjmuje własne kodowanie p i odrzuca wszystkie inne dane wejściowe.p ϕp( y) = Q ( p , y) ϕp p
źródło