Czy istnieje jasna definicja „obliczalnego” dla modeli obliczeniowych, które nie są kompletne?

9

Jest to kontynuacja kolejnego pytania tutaj i mam nadzieję, że nie jest to zbyt filozoficzne. Jak zauważył Raphael w komentarzu do mojego poprzedniego pytania, tak naprawdę nie rozumiem definicji „obliczalnego”, ale zgodnie z niektórymi artykułami, które czytam, definicja nie jest również bardzo jasna, jeśli chodzi o modele obliczeń słabsze niż Turing maszyny ze względu na kodowanie wejścia i wyjścia.

Typowa definicja obliczania Turinga jest następująca:

Definicja 1: Funkcja nazywa się obliczalna Turinga, jeśli istnieje maszyna Turinga która oblicza przy użyciu odpowiedniego kodowania liczb naturalnych jako ciągów.f:NkNMf

Definicje różnią się, co dokładnie jest odpowiednie kodowanie jest, ale większość odnosi się do binarnego kodowania , kodowanie jednoargumentowego lub kodowania dziesiętnego jako jednego stałego i odpowiedniego kodowania. Możliwe jest również wykazanie, że ustalenie jednego kodowania jest wymagane do zdefiniowania obliczalności Turinga. Ale co sprawia, że ​​powiedzmy, binarne kodowanie liczb naturalnych jest wyjątkowe, abyśmy mogli go aksjomatyzować jako jedyne odpowiednie kodowanie? Prawdopodobnie dlatego, że pasuje do intuicyjnego pojęcia, co oznacza obliczalność przypadkowo .

A co jeśli spojrzymy na słabsze modele obliczeń niż maszyny Turinga? Rozważmy na przykład zestaw „okaleczonych” maszyn Turinga z alfabetem który może poruszać się tylko w prawo, oraz definicję kalekiego obliczania Turinga, która jest zgodna z definicją obliczalności Turinga:Mc{0,1}

Definicja 2: Funkcja nazywa się kalekim obliczeniowym przetwarzaniem Turinga lub obliczalnym w iff istnieje sparaliżowana maszyna Turinga która oblicza przy użyciu odpowiedniego kodowania liczb naturalnych jako sznurek.f:NkNMcMf

Jeśli zdefiniujemy „odpowiednie kodowanie” jako „kodowanie binarne”, wówczas funkcja nie jest obliczalna w . Jeśli aksjomatyzujemy „odpowiednie kodowanie” jako „kodowanie jednoargumentowe”, wówczas można obliczyć w . Wydaje się to niezręczne, biorąc pod uwagę fakt, że każdy może naprawić dowolne z nieskończenie wielu intuicyjnych kodowań do woli. Powinno być jasne, czy model obliczeniowy może obliczać czy nie bez odwoływania się do jakiegoś konkretnego kodowania - przynajmniej nigdy nie widziałem, aby ktokolwiek wspominał, jakie kodowanie jest stosowane, gdy stwierdza się, że „programy pętli są słabsze niż maszyny Turinga”.f:NN,nn+1Mcf Mcf


Po tym wstępie mogę w końcu sformułować moje pytanie: Jak zdefiniować „odpowiednie kodowanie” i „obliczalność” dla dowolnych modeli obliczeń, które nie pokrywają się z intuicyjnym pojęciem obliczalności? Czy jest to możliwe w ramach obliczalności Turinga?

Edycja: Skróciłem wprowadzenie, nie dodało się do pytania.

Stefan Lutz
źródło

Odpowiedzi:

6

Jednym z podstawowych faktów, których tu brakuje, jest to, że wszystkie wymienione kodowania są równoważne z punktu widzenia obliczalności: istnieje funkcja obliczalna odwzorowująca binarne kodowanie liczby na jej jednoargumentowe odwrotnie. Dlatego w celu zdefiniowania obliczalności nie ma znaczenia, które z tych kodowań wybierzesz dla liczb. Po prostu napraw swoje ulubione kodowanie.

Podstawą obliczalności jest właściwość funkcji łańcuchowych . Gdy definiujesz obliczalność w dowolnej innej domenie, musisz naprawić kodowanie. W praktyce wszystkie „rozsądne” kodowania są równoważne w rozumieniu poprzedniego akapitu, więc dokładne kodowanie nie ma znaczenia.f:ΣΣ

Kodowanie ma jednak znaczenie w ograniczonych modelach obliczeniowych. Dla skrajnego przykładu załóżmy, że rozważasz ograniczone czasowo maszyny Turinga: powiedz, że chcesz, aby twoja maszyna zakończyła się w czasie dla jakiegoś , gdzie jest długością danych wejściowych (jako ciąg). Nie możemy już przełączać się między kodowaniem binarnym a kodowaniem jednoargumentowym, ponieważ kodowanie binarne jest znacznie bardziej kompaktowe. Kiedy mówimy o funkcji liczb całkowitych obliczanej w czasie wielomianowym , określamy, że liczby całkowite są kodowane w postaci binarnej. Nawet to jest dość arbitralny wybór, ponieważ kodowanie dziesiętne prowadziłoby do tego samego pojęcia wielomianowego obliczania czasu.O(nc)cn

Aby odpowiedzieć na twoje pytanie - kodowanie jest określone jako część definicji modelu z ograniczeniami.

Yuval Filmus
źródło
„Jednym z podstawowych faktów, których tu brakuje, jest to, że wszystkie wymienione przez ciebie kodowania są równoważne z punktu widzenia obliczalności: istnieje funkcja obliczalna odwzorowująca binarne kodowanie liczby na jednoargumentowe lub odwrotnie” - tak, ja miałem to w oryginalnej wersji mojego pytania, ale nie widzę, jak to ma znaczenie dla pytania o słabsze modele. Oczywiste jest również, że kodowanie musi być określone jako część definicji modelu, ale pytanie brzmi, jak dojść do tak rozsądnej definicji.
Stefan Lutz
1
Tę definicję wyciąga się z kapelusza. Ponieważ różne definicje wydają się być równoważne, dokładna definicja nie ma znaczenia. Kiedy to nastąpi, pojawi się kilka różnych pojęć złożoności. Na przykład w przypadku niektórych algorytmów graficznych ma to znaczenie, jeśli otrzymasz macierz przylegania lub listę krawędzi.
Yuval Filmus
Podsumowując: a) Definicja każdego modelu obliczeniowego musi obejmować jego składnię, semantykę ORAZ odpowiednie kodowanie. b) Definicja „odpowiedniego kodowania” jest całkowicie niezależna od składni i semantyki modelu. c) Nie ma możliwości podania definicji „odpowiedniego kodowania”, która obowiązuje dla wszystkich modeli obliczeniowych. Czy to jest poprawne?
Stefan Lutz
Zgadzam się z a) ib), ale z c) tylko częściowo. Możesz zdefiniować odpowiednie kodowanie, które służy jako „standardowe kodowanie”, używane, chyba że zostanie wyraźnie wspomniane o tym fakcie. W przypadku liczb istnieje takie standardowe kodowanie - kodowanie binarne.
Yuval Filmus
W porządku, ale tak naprawdę nie stanowi to ogólnej definicji, tylko oszczędza czas ludzi, ponieważ nie muszą oni zapisywać w sposób jawny ”W tym modelu M, używamy kodowania binarnego ", ponieważ implikuje się, że nie zapisują go. Nadal mogą wybrać inne kodowanie dla swojego modelu. To, co miałem na myśli przez" ogólną definicję ", to zestaw właściwości, które każde kodowanie musi spełnić, aby było dozwolone jako kodowanie
Stefan Lutz
4

Przede wszystkim nie można naprawić „odpowiedniego kodowania” jako ciągów binarnych ani żadnego innego kodowania. Wynika to z utraty wielu modeli obliczeń, ponieważ różne modele obliczeń mogą mieć bardzo różne modele danych wejściowych i wyjściowych. Innymi słowy, nie mogą „wymawiać” łańcuchów.

Na przykład, terminy niepopisanego rachunku lambda są albo zmiennymi, albo zastosowaniem jednego terminu do drugiego, albo abstrakcją terminu lambda. Dane wejściowe i wyjściowe to terminy, dowolne ciągi znaków. Mimo to niepisany rachunek lambda jest zakończony metodą Turinga, ponieważ istnieje „odpowiednie kodowanie”, które koduje liczby naturalne jako terminy lambda pewnej postaci, a pod tym kodowaniem dla każdej funkcji obliczalnej istnieje termin lambda, który go oblicza.

Możesz sformalizować „odpowiednie kodowanie”, jeśli naprawisz maszyny Turinga jako referencyjny model obliczeń, a następnie wymagać, aby kodowanie i dekodowanie zi do ciągów binarnych było wykonywane przez maszynę Turinga, która zawsze zatrzymuje się. Na przykład maszyna Turinga byłaby w stanie przetłumaczyć liczbę naturalną jako ciąg binarny na wyrażenie Lambda, które wyraża tę liczbę, zasymulować zmniejszenie rachunku lambda i przełożyć wynik z powrotem na ciąg binarny.

W przypadku prostszych modeli obliczeń oczekiwałbym tego samego podejścia: weź referencyjny model obliczeń i napraw kodowanie liczb naturalnych, a następnie upewnij się, że kodowanie i dekodowanie odbywa się za pomocą instancji tego prostego modelu. Jak zauważyłeś, w przypadku okaleczonych maszyn Turinga stosowanie liczb jedno- i binarnie kodowanych nie dałoby równoważnego modelu obliczeń.

Hoopje
źródło
Czy to możliwe, że masz rzeczy odwrócone w ostatnim akapicie? Piszesz, że kodowanie odbywa się za pomocą prostego modelu, a nie modelu referencyjnego - w poprzednim akapicie chcesz, aby kodowanie było wykonywane przez model referencyjny, a nie inny model (rachunek lambda).
Stefan Lutz
Jeśli studiujesz słabsze modele obliczeń, nie chcesz nigdzie używać maszyn Turinga, nawet w fazie kodowania / dekodowania. Następnie możesz po prostu wykonać wszystkie obliczenia w fazie kodowania i prawie każdy model obliczeń byłby kompletny Turinga. Musisz więc użyć prostszego modelu referencyjnego do kodowania / dekodowania.
Hoopje
1
Wtedy nie widzę, jak możemy udowodnić kompletność Turinga rachunku lambda za pomocą cyfr kościelnych, jeśli naprawimy maszyny Turinga. Musimy założyć, że LC jest słabszy niż TM, więc niektóre przypadki „słabszego” modelu lambda calc mają numernN. za pomocą jego kodowania dohurdoh:N.lzambrezatmirm tak jak dohurdoh(n), a następnie oblicza jego funkcję tobjanzary:lzambrezatmirmlzambrezatmirm które generują ciąg binarny wΣ? Kodomains nie pasują. Nawet jeśli pozwolę, aby lambdatermy były interpretowane jako ciągi, istnieją inne modele, które nie mówią „ciągów”, jak powiedziałeś.
Stefan Lutz