Przypuszczenie o dwóch automatach liczników


19

Chciałbym udowodnić (lub obalić) następującą hipotezę:

Przypuszczenie : automaty z dwoma licznikami (2CA) nie mogą zdecydować o następującym języku:

n }L={n trójskładnikowej i binarnej reprezentacji ma zarówno parzystą, jak i nieparzystą długośćn}

2CA może łatwo sprawdzić, czy reprezentacja binarna ma parzystą, czy nieparzystą długość (po prostu dziel dzielenie przez dwa i aktualizuj flagę „parzystej długości” po każdym dzieleniu); w ten sam sposób może sprawdzić, czy trójskładnikowa reprezentacja ma parzystą, czy nieparzystą długość (wystarczy dzielić przez trzy i aktualizować flagę „parzystej długości” po każdym podziale).

Ale aby obliczyć jeden z nich, musi zniszczyć swój wkład i nie może go odzyskać, aby obliczyć drugi; więc wydaje się, że nie ma sposobu, aby zdecydować, .L

Czy znasz technikę, której można użyć do udowodnienia przypuszczenia?
Czy możesz obalić domysł, budując 2CA, który decyduje o ? L

Wypróbowałem to samo podejście, którym podążyła Ibarra, aby udowodnić, że 2CA nie może zdecydować{n2n1} , ale wydaje się to niewłaściwa droga.

Uwaga : dla uproszczenia 2CA jest równoważne programowi z jedną zmienną która początkowo zawiera dane wejściowe i następujący zestaw instrukcji:c

  • INC : dodaj jeden do zmiennej;
  • DEC : zmniejszenie (tylko jeśli jest większe od zera);c
  • JZ lab c l a b : jeśli wynosi zero, przejdź do etykiet, w przeciwnym razie kontynuuj;clab
  • MULK : pomnóż c przez kosztowną K ;
  • K[,lab0,lab1,...,labK1]cKcc=c/KcmodK
  • Laboratorium GOTOlab : skok bezwarunkowy;
  • HALT Zaakceptuj | Odrzuć : zatrzymaj i zaakceptuj lub zatrzymaj i odrzuć.

Na przykład program sprawdzający, czy binarna reprezentacja ma parzystą długość, to:n

   loop: JZ even   // test if n = 0
         DIV 2
         JZ odd    // test if n = 0
         DIV 2
         GOTO loop
   even: HALT Accept
    odd: HALT Reject

(możemy zbudować równoważny 2CA)


2
Nie wiem, jak idą dowody niemożności, ale przypadek { trójskładnikowa reprezentacja ma nieparzystą długość} jest rozwiązywalna, ponieważ ilekroć twoje dane wejściowe zawierają tylko znane czynniki pierwsze, możesz leczyć swoje wykładniki (tutaj ) jako liczniki w symulowanym automacie z dowolną liczbą liczników (symulowanych przez dodatkowe liczby pierwsze), jak chcesz, a zatem Turing-complete. 2n2n
Ørjan Johansen

2
Wysłałem Ci e-mailem „kod”, a także umieściłem go na mojej stronie internetowej, na wypadek gdyby ktoś go oglądał.
Ørjan Johansen

1
@joro Opisana przeze mnie metoda ma ścisłe ograniczenie: może obsłużyć tylko skończenie wiele czynników pierwszych danych wejściowych (z wyjątkiem testowania, czy wszystkie pozostałe mają wartość 0 lub nie). Problem polega na tym, że w ogólnym problemie wykładniki wszystkich liczb pierwszych czynniki się liczą. Rzeczywiście można obliczyć zarówno swoją lub twoi aż do parytetu, ale o ile wiem, nie ma sposobu, aby porównać ogólną wejście do lub , nie niszcząc go w tym procesie, tak że nie można testu inny jeden później. Mam przeczucie, że ogólny problem jest nierozwiązywalny w przypadku 2CA. km2k3m
Ørjan Johansen

1
@ ØrjanJohansen: Zgadzam się z vzn: jeśli chcesz, możesz opublikować odpowiedź z rozwiązaniem ograniczonego prostszego problemu (warte nagrody :-) i może być pomocny dla tych, którzy chcą szybko dostać się do pierwotnego problemu). Możesz również BARDZO krótko zauważyć, dlaczego podejście Ibarry zawodzi w przypadku ogólnego problemu i dlaczego rozwiązanie prostszej wersji zawodzi w przypadku ogólnego (skopiuj i wklej komentarz do joro).
Marzio De Biasi,

1
dzięki! wspaniale / rzadko widzę zainteresowanie / aktywność tym problemem. kilka więcej komentarze / pytania dotyczące tego problemu
vzn

Odpowiedzi:


11

Dlatego ludzie ciągle mnie nakłaniają do opublikowania tego, mimo że rozwiązuje to tylko uproszczoną wersję problemu. W porządku :)

Na koniec przedstawię trochę tego, czego nauczyłem się z pracy Ibarry i Trâna, i dlaczego ta metoda załamuje nasz ogólny problem, ale być może nadal dostarcza użytecznych informacji.

Ale najpierw przyjrzymy się prostszemu problemowi przy podejmowaniu decyzji o zestawie

trójskładnikowy i binarnym z 2 n mają zarówno nawet długość lub nieparzystej długości }L={2n2n}

2nn

2v23v35v57v7...viv20

k

kv2v3v5

2v2v3v5

Oto kod do tego, w formacie asemblera podobnym do OP (właśnie dodałem zmienne do instrukcji). Właściwie to go nie testowałem, ponieważ nie mam z czym go uruchomić, ale uważam to za formalność: automaty 3-licznikowe są dobrze znane jako kompletne Turinga i zdolne do konstruowania dowolnej funkcji obliczeniowej jednego z ich Wartości początkowe.

// Check that v3 and v5 are both zero.
                JZ v3, check5
                GOTO reject
check5:         JZ v5, init3
                GOTO reject
// Decrement v2 until it is zero, constructing 2^n in the process.  If 2^n
// was even, we will then pass to even2 with 2^n in v3; If 2^n was odd, we
// will pass to odd2 with 2^n in v5.
init3:          INC v3          // Set v3 to 1 = 2^0 to start with.
even1:          // We have decremented v2 an even number of times so far.
                // 2^decremented amount is in v3.
                JZ v2, odd2
                DEC v2
dup3to5:        JZ v3, odd1
                DEC v3
                INC v5
                INC v5
                GOTO dup3to5
odd1:           // We have decremented v2 an odd number of times so far.
                // 2^decremented amount is in v5.
                JZ v2, even2
                DEC v2
dup5to3:        JZ v5, even1
                DEC v5
                INC v3
                INC v3
                GOTO dup5to3
// The second part checks the ternary length of 2^n, which starts out in v3
// or v5 according to whether the *binary* length of 2^n (i.e. n+1) was odd
// or even.
odd2:           // v3 needs to have odd ternary length to accept.
                // It is simplest to consider 0 to have even length in both
                // binary and ternary.  This works out as long as we're
                // consistent.
                JZ v3, reject
trisect3to5:    DEC v3
                DEC v3
                JZ v3, even2
                DEC v3
                INC v5
                GOTO trisect3to5
even2:          // v5 needs to have even ternary length to accept
                JZ v5, accept
trisect5to3:    DEC v5
                DEC v5
                JZ v5, odd2
                DEC v5
                INC v3
                GOTO trisect5to3
accept:         HALT Accept
reject:         HALT Reject

Następnym krokiem jest ponowne zakodowanie powyższego w wykładnikach automatu z jedną zmienną. Ponieważ wynik jest dość długi, opiszę tylko ogólną metodę, ale pełna wersja (nieco „zoptymalizowana” w punktach) znajduje się na mojej stronie.

                JZ vp, label
                DEC vp
next:           ...

staje się (w zasadzie podziel przez p, a następnie wykonaj czyszczenie, aby cofnąć, jeśli podział nie był nawet równy):

                DIV p, next, ..., newlabel.fp-1
newlabel.f1:    MUL p
                GOTO newlabel.i1
...
newlabel.fp-1:  MUL p
                INC
newlabel.ip-2:  INC
...
newlabel.i1:    INC
                GOTO label
next:           ...

INC vpstaje się MUL p. Indywidualne JZi DECmożna je najpierw zmienić w połączoną formę. GOTO labeli HALT Rejectpozostają niezmienione.

HALT Acceptpozostałby niezmieniony, z wyjątkiem tego, że w naszym przypadku mamy jeszcze jedną ostateczną kontrolę: musimy upewnić się, że nie ma żadnych czynników pierwszych w liczbie innej niż 2,3 i 5. Ponieważ nasz szczególny automat 3-licznikowy zeruje go, używa, gdy akceptuje, jest to proste: wystarczy przetestować, że zmienna końcowa ma wartość 1, co można zrobić, przechodząc do kodu

                DEC     // BTW it cannot be zero before this.
                JZ accept
                HALT Reject
accept:         HALT Accept

Kod na mojej stronie ma również wstępną kontrolę, czy liczba nie jest zerowa, co właśnie zdałem sobie sprawę, że jest zbędne w przypadku kontroli zerowych v3, v5, no cóż.

Jak wspomniałem, powyższa metoda działa na uproszczony problem, ale tak naprawdę nie ma szans na działanie w przypadku problemu ogólnego, ponieważ: W ogólnym problemie dokładna wartość wykładnika każdej liczby pierwszej ma znaczenie przy podejmowaniu decyzji o jego ogólnym rozmiarze, a tym samym o jego długości ma w różnych podstawach. To znaczy że:

  • Nie mamy „darmowych” liczb pierwszych do użycia dla liczników.
  • Nawet jeśli nie mają wolne liczb pierwszych dla liczników, tak naprawdę nie ma sposobu, aby wyodrębnić wszystkie niezbędne informacje od nieskończenie wiele innych liczb pierwszych, których wykładnik wartości zrobić materia.

Zakończmy więc wyjaśnienie istoty ogólnej metody z powyższego powiązanego artykułu autorstwa Ibarry i Trâna ( wersja do pobrania za darmo ), aby udowodnić, że niektóre problemy nie są rozwiązane przez 2CA, i jak irytująco psuje się w naszym walizka.

s

Następnie analizują ten automat, aby stwierdzić, że mogą konstruować pewne ciągi arytmetyczne liczb, których zachowanie jest powiązane. Aby być precyzyjnym (niektóre z nich nie są określone jako twierdzenia, ale są dorozumiane w dowodzie obu ich dwóch głównych przykładów):

  1. vixi sD>0x+nDn0
  2. Xs2+1xXivixsp,rXK1,K2

    • n0p+nK1r+nK2

(Myśli:

  • x>sxX
  • Większość z nich powinna obowiązywać również w przypadku numerów odrzuconych , o ile odrzucenie następuje poprzez wyraźne wstrzymanie, a nie zakończenie.)

D,K1,K2>s

K1=K2=6kkpr2k3kp+6knq+6kn

K1K2


1
Bardzo dobra i jasna odpowiedź!
Marzio De Biasi,
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.