Dolna granica liczby wezwań wyroczni do rozwiązania przypadków problemu zatrzymania


9

Spotkałem następujące pytanie, które jest łatwym ćwiczeniem (spoiler poniżej).

Dostajemy wystąpień problemu z zatrzymaniem (np. TM ) i musimy dokładnie zdecydować, które z nich zatrzymają się na . Oznacza to, że musimy . Dostajemy wyrocznię za problem zatrzymania, ale musimy go użyć minimalną liczbę razy.nM1,...,Mnϵ{i:Mi halts on ϵ}

Nie jest trudno pokazać, że można tego dokonać za pomocą wywołań .log(n+1)

Moje pytanie brzmi: czy możemy udowodnić dolną granicę? Czy istnieje powód, by podejrzewać, że takie ograniczenie będzie bardzo trudne do znalezienia?

Odpowiedź na samo pytanie (spoiler, kursor myszy):

Rozważ przypadek baz TM. Możemy zbudować TM która równolegle i zatrzymuje się, jeśli przynajmniej dwa z nich zatrzymają się (w przeciwnym razie utknie). Podobnie możemy zbudować TM która zatrzyma się, jeśli przynajmniej jedna z nich się zatrzyma. Następnie możemy wezwać wyrocznię na . Jeśli się zatrzyma, możemy uruchomić maszyny równolegle i poczekać, aż jedna się zatrzyma. Następnie możemy zadzwonić do wyroczni w ostatnim. Jeśli wyrocznia mówi „nie”, to uruchamiamy wyrocznię na . Jeśli się zatrzyma, wtedy uruchamiamy maszyny, aż się zatrzyma, i tylko ta się zatrzyma. Jeśli się nie zatrzyma, żaden z nich się nie zatrzyma. Rozszerzenie tego na maszyn jest łatwe.3H2M1,M2,M3H1H2H1H1n

Pierwsze spostrzeżenie na temat tego pytania jest takie, że wydaje się niemożliwe do rozwiązania za pomocą narzędzi teoretycznych, ponieważ polegamy przede wszystkim na naszej zdolności do uzyskiwania informacji przez uruchamianie maszyn bez wyroczni.


@Kaveh - jak napisał Neal Young, musimy obliczyć dokładny zestaw maszyn zatrzymujących.
Shaull

Odpowiedzi:


11

Wynik można znaleźć w

  • Zestawy Beigel, R., Gasarch, WI, Gill, J. i Owings, J. Terse, superterse i verbose . Poinformować. i Comput. 103 (1993), nr. 1, 68–85.

Ich dowód w rzeczywistości pokazuje, że problemu nie można rozwiązać za pomocą mniej niż zapytań do dowolnego zestawu , nie mówiąc już o samym problemie zatrzymania. W przypadku niektórych notacji problem jest czasami oznaczany jako lub (w zależności od ulubionej notacji dotyczącej problemu zatrzymania).log2nXCnKCnHALT

Aby zobaczyć ten i wiele powiązanych wyników, zobacz także:


10

EDYCJA: Argument, na który odpowiedziałem, nie był zły, ale był nieco mylący, ponieważ pokazał tylko, że górna granica musiała być ciasna dla jakiegoś (co jest tak naprawdę trywialne, ponieważ musi być ciasna, gdy a granica wynosi 1).nn=2

Oto bardziej precyzyjny argument. Pokazuje, że jeśli górna granica jest luźna dla dowolnego konkretnego , to dla wszystkich wymagana liczba wywołań wyroczni wynosi .log2nn nO(1)

(Z pewnością nie jest to , więc górna granica nigdy nie jest luźna! Ale tak naprawdę nie udowadniam, że tutaj, a biorąc pod uwagę inną odpowiedź na problem, nie warto tego robić).O(1)

Rozważ problem obliczania maksymalnej wydajności :

Biorąc pod uwagę -tuple M_1 maszyn Turinga, oblicz maksymalną moc wyjściową (maszyn Turinga, które zatrzymają się, jeśli zostaną uruchomione na ). Jeśli żaden z nich się nie zatrzyma, zwróć 0.n(M1,,Mn)ϵ

W zależności od liczby najgorszy przypadek wywołań wyroczni wymaganych do obliczenia tej funkcji jest taki sam, jak liczba wymagana do podjęcia decyzji, które danych maszyn ma się zatrzymać. (Jeśli wiem, które maszyny się zatrzymają, mogę łatwo obliczyć maksymalną moc wyjściową. I odwrotnie, jeśli chcę wiedzieć, które maszyny się zatrzymują, postępując zgodnie z konstrukcją w problemu, mogę konstruować maszyny gdzie obsługuje wszystkie danych maszyn równolegle, a następnie zatrzymuje się i wyprowadza jeśli kiedykolwiek z nich się zatrzyma. Maksymalna wydajność powie mi liczbę, która się zatrzymała. Na tej podstawie mogę obliczyć który dokładnie się zatrzyma.)nn{Mi} (i=1,2,,n)Minii

Teraz niech będzie najmniejszą liczbą całkowitą (jeśli istnieje) taką, że następujące:n0n

Używając wywołań oracle, można obliczyć maksymalną wydajność danych maszyn. (To znaczy, górna granica nie jest ciasna dla .)C(n)=max{kZ:2k<n}nn

Wyraźnie , ponieważ . W rzeczywistości również, ponieważ , ale nie jest możliwe obliczenie maksymalnej wydajności danych maszyn (bez wywołań wyroczni). Teraz rozważ większe :n0>1C(1)=1n0>2C(2)=02n

Twierdzenie: Jeśli jest skończone, to dla dowolnego można obliczyć maksymalną wydajność danych maszyn w wywołaniach oracle. n0nnC(n0)(Zauważ, że jeśli jest skończone, to .)n0C(n0)=O(1)

Dowód. . Udowadniamy to przez indukcję na . Przypadki bazowe są , które posiadają z definicji i .nnn0n0C

Niech będzie TM, która, biorąc pod uwagę dowolne maszyny Turinga , oblicza maksymalną moc wyjściową, używając tylko wywołań do wyroczni.Q0n0C(n0)

Napraw dowolne . Biorąc pod uwagę dowolne maszyn , oblicz maksymalną moc w następujący sposób.n>n0nM1,,Mn

Skoncentruj się na pierwszych maszynach . Rozważ uruchomienie na tych komputerach . Zauważ, że wykonuje do wyroczni, i istnieje tylko możliwych odpowiedzi wyroczni na te wywołania. Zauważ, że z definicji . Niech oznacza tą możliwą odpowiedź. Dla każdego maszynę która symuluje na tych komputerach w następujący sposób:M1,,Mn0Q0n0Q0C(n0)n=2C(n0)n=2C(n0)<n0oiii=1,,nMiQ0

TM (na wejściu ):Miϵ

  1. Symuluj na maszynach , ale zamiast wywoływać wyrocznię, , że wyrocznia odpowiada zgodnie z .Q0n0(M1,,Mn0)oi
  2. Ta symulacja może się nie zatrzymać (np. Jeśli nie jest tym, co rzeczywiście powróciłaby wyrocznia).oi
  3. Jeśli symulacja się zatrzyma, niech będzie maksymalnym wyjściem, które według zostanie podane.hiQ0
  4. Dovetail wszystkie maszyny . Jeśli jeden z nich kiedykolwiek wyprowadza , zatrzymaj i .n0(M1,,Mn0)hihi

Teraz, w podanej sekwencji maszyn, zamień pierwsze maszyny na te maszyny . Zwraca wartość obliczoną przez rekurencję w tej sekwencji maszyn. (Zauważ, że wyrocznia nie jest wywoływana przed powtórzeniem, więc wyrocznia jest wywoływana dopiero po osiągnięciu przypadku podstawowego).nn0M1,,Mn0n<n0M1,,Mnn(n0n)<n

Oto dlaczego to obliczenie jest poprawne. Dla , że jest `` poprawną '' odpowiedzią wyroczni na zapytania, zatrzyma się i da poprawną maksymalną wydajność oryginalnych maszyn . Zatem maksymalna wydajność maszyn to co najmniej maksymalna wydajność maszyn . Z drugiej strony, w kroku 4 żaden nie może dać wyniku większego niż maksymalny wynik . Tak więc, dane wyjściowe maksimum maszynyioiQ0Min0n(M1,,Mn)n0(M1,,Mn0)Mi(M1,,Mn0)n(M1,,Mn) równa się maksymalnej wydajności maszyn , które zastępują. CO BYŁO DO OKAZANIAn0

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.