Vermutung über zwei Zählerautomaten

19

Ich möchte folgende Vermutung beweisen (oder widerlegen):

Vermutung : Ein Zwei-Zähler-Automat (2CA) kann die folgende Sprache nicht bestimmen:

n }L={n der ternären und der binären Darstellung von hat sowohl gerade als auch ungerade Längen}

Ein 2CA kann leicht überprüfen, ob die Binärdarstellung eine gerade oder ungerade Länge hat (teilen Sie einfach weiter durch zwei und aktualisieren Sie nach jeder Unterteilung ein "gerade Länge" -Flag). Auf die gleiche Weise kann geprüft werden, ob die ternäre Darstellung eine gerade oder ungerade Länge hat (einfach durch drei teilen und nach jeder Unterteilung ein Flag "gerade Länge" aktualisieren).

Aber um eines von ihnen zu berechnen, muss es seine Eingabe zerstören und kann es nicht wiederherstellen, um das andere zu berechnen; so scheint es, dass es keine Möglichkeit gibt, zu entscheiden .L

Kennen Sie eine Technik, mit der die Vermutung bewiesen werden kann?
Oder können Sie die Vermutung widerlegen, dass ein 2CA entsteht, der entscheidet ? L

Ich habe den gleichen Ansatz wie Ibarra versucht, um zu beweisen, dass ein 2CA sich nicht für{n2n1} , aber es scheint nicht der richtige Weg zu sein.

Hinweis : Der Einfachheit halber entspricht ein 2CA einem Programm mit einer Variablen , die anfänglich die Eingabe und den folgenden Befehlssatz enthält:c

  • INC : füge eins zur Variablen hinzu;
  • DEC : Dekrementiere (nur wenn es größer als Null ist);c
  • JZ- lab c l a b : Wenn Null ist, springen Sie zum Etikett- andernfalls fahren Sie fort.clab
  • MULK c K : Multipliziere mit dem Costanten ;cK
  • DIVK[,lab0,lab1,...,labK1] : dividiere durch die Konstante und speichere den Quotienten zu ( ); evtl. je nach Rest zu verschiedenen Labels springen ( );cKcc=c/KcmodK
  • GOTOlab : bedingungsloser Sprung;
  • HALT Accept | Reject : anhalten und annehmen oder anhalten und ablehnen.

Ein Programm zum Überprüfen, ob die Binärdarstellung von gerade Länge hat, lautet beispielsweise: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

(Wir können eine äquivalente 2CA bauen)

Marzio De Biasi
quelle
2
Ich weiß nicht, wie die Unmöglichkeitsbeweise verlaufen, aber der Fall { ∣ die ternäre Darstellung von hat ungerade Länge} ist lösbar, weil Sie Ihre Exponenten (n hier behandeln können, wenn Ihre Eingabe nur Primfaktoren kennt ) als Zähler in einem simulierten Automaten mit beliebig vielen Zählern (durch zusätzliche Primzahlen simuliert), also Turing-complete. 2 n2n2n
Ørjan Johansen
2
Ich habe Ihnen einen "Code" per E-Mail geschickt und ihn auch auf meine Website gestellt, falls jemand anderes zusieht.
Ørjan Johansen
1
@joro Die von mir beschriebene Methode unterliegt einer strengen Einschränkung: Sie kann nur endlich viele Primfaktoren der Eingabe verarbeiten (außer zum Testen, ob der Rest alle 0 ist oder nicht). Das Problem besteht darin, dass im allgemeinen Problem die Exponenten aller Primfaktoren sind Faktoren zählen. Sie können tatsächlich entweder Ihr oder Ihr bis zur Parität berechnen , aber meines Wissens gibt es keine Möglichkeit, einen allgemeinen Eingang mit oder ohne ihn dabei zu zerstören, sodass Sie ihn nicht testen können der andere danach. Meine Vermutung im Moment ist, dass das allgemeine Problem mit einem 2CA nicht lösbar ist. m 2 k 3 mkm2k3m
Ørjan Johansen
1
@ ØrjanJohansen: Ich bin mit vzn einverstanden: wenn du willst, kannst du die Antwort mit der Lösung des eingeschränkten einfacheren Problems posten (das Kopfgeld lohnt sich :-) und kann denen helfen, die sich schnell mit dem ursprünglichen Problem befassen wollen). Sie können auch SEHR kurz feststellen, warum der Ansatz von Ibarra für das allgemeine Problem fehlschlägt und warum die Lösung der einfacheren Version für das allgemeine Problem fehlschlägt (kopieren und fügen Sie den Kommentar in joro ein).
Marzio De Biasi
1
Danke! toll / selten, um all das Interesse / die Aktivität an diesem Problem zu sehen. Noch ein paar Kommentare / Fragen zu diesem Problem
vzn

Antworten:

11

Daher fordern mich die Leute immer wieder auf, dies zu posten, obwohl dies nur eine vereinfachte Version des Problems löst. Alles klar :)

Am Ende werde ich einen Teil dessen anführen, was ich aus der Arbeit von Ibarra und Trân gelernt habe, und warum diese Methode unser allgemeines Problem auflöst, aber vielleicht noch einige nützliche Informationen liefert.

Aber zuerst schauen wir uns das einfachere Problem an, bei dem wir versuchen, die Menge zu bestimmen

2 n }L={2n der ternären und der binären Darstellung von haben beide eine gerade oder ungerade Länge2n}

Beachten Sie, wie dies anstelle von wie im ursprünglichen Problem hat. Insbesondere wenn die eingegebene Zahl keine Zweierpotenz ist , möchten wir sie ablehnen, anstatt zu versuchen, ihre Länge in einer beliebigen Basis zu berechnen. n2nn

Dies vereinfacht die Sache erheblich: Wenn die ursprüngliche Zahl als , müssen wir für alle außer nur überprüfen dass sie alle .v i v 2 02v23v35v57v7...viv20

Dies ermöglicht es uns, dieses vereinfachte Problem zu lösen, indem wir eine Umhüllung der alten Methode (von Minsky, nehme ich an) zum Codieren des Zustands eines Zählerautomaten in die Exponenten der Primfaktorisierung der einzelnen Variablen eines Multiplikations- / Divisionsautomaten verwenden. Das entspricht, wie oben im OP vermerkt, einem 2-Zähler-Automaten.k

Zuerst brauchen wir einen Counter-Automaten zum Wickeln. Wir werden 3 Zähler mit den Namen , und .v 2 v 3 v 5kv2v3v5

Der Automat akzeptiert iff für die anfänglichen Zählerwerte, wenn die ternären und binären Darstellungen von beide eine gerade oder ungerade Länge haben und sowohl als auch Null sind. Wenn es akzeptiert, setzt es zuerst alle seine Zähler auf Null. v 3 v 52v2v3v5

Hier ist ein Code dafür in einem Assembler-Format, das dem OP ähnelt (ich habe den Anweisungen gerade Variablen hinzugefügt). Ich habe es nicht wirklich getestet, da ich nichts zu tun habe, aber ich halte dies für eine Formalität: 3-Zähler-Automaten sind dafür bekannt, vollständig zu sein und in der Lage zu sein, jede berechenbare Funktion von einer von ihnen zu konstruieren Anfangswerte.

// 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

Der nächste Schritt besteht dann darin, das Obige in die Exponenten eines einzelnen variablen Automaten umzucodieren. Da das Ergebnis ziemlich lang ist, beschreibe ich nur die allgemeine Methode, aber auf meiner Website befindet sich eine Vollversion (an Stellen leicht "optimiert").

                JZ vp, label
                DEC vp
next:           ...

wird (im Grunde durch p dividieren und dann aufräumen, um rückgängig zu machen, wenn die Teilung nicht gerade war):

                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 vpwird MUL p. Individuell JZund DECkann zunächst in die kombinierte Form geändert werden. GOTO labelund HALT Rejectsind unverändert.

HALT Acceptwäre unverändert, mit der Ausnahme , dass wir noch in unserem Fall eine abschließende Kontrolle zu tun haben: müssen wir sicherstellen , dass keine Primfaktoren der Zahl gibt es andere als 2,3 und 5. Da unsere speziellen 3-Zähler Automaten Nullen die Zähler es verwendet, wenn es akzeptiert, ist dies einfach: Testen Sie einfach, dass die endgültige Variable 1 ist, was durch Springen zum Code erfolgen kann

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

Der Code auf meiner Website hat auch eine erste Überprüfung, dass die Zahl nicht Null ist, was ich gerade festgestellt habe, ist redundant mit den v3, v5 Null-Überprüfungen, na ja.

Wie ich bereits erwähnte, funktioniert die obige Methode für das vereinfachte Problem, aber es hat wirklich keine Chance, für das allgemeine zu arbeiten, weil: Im allgemeinen Problem der genaue Wert des Exponenten jedes Prims für die Entscheidung seiner allgemeinen Größe und damit für seine Länge zählt hat in verschiedenen Basen. Das bedeutet, dass:

  • Wir haben keine "freien" Primzahlen für Zähler.
  • Auch wenn wir haben freie Primzahlen für die Zähler haben, wir haben nicht wirklich eine Möglichkeit , alle notwendigen Informationen aus den unendlich vielen anderen Primzahlen , deren Exponent Werte zu extrahieren tun Materie.

Lassen Sie uns also mit einer Erklärung des Kerns der allgemeinen Methode aus dem oben verlinkten Artikel von Ibarra und Trân ( frei herunterladbare Version ) abschließen, um zu beweisen, dass bestimmte Probleme von einem 2CA nicht lösbar sind , und wie es in unserem ärgerlich zusammenbricht Fall.

Erstens modifizieren sie jeden 2CA in eine "normale Form", in der die beiden Zähler in "Phasen" zwischen nur steigendem und nur fallendem Zähler wechseln, bis sie Null erreichen. Die Anzahl der Zustände diesen normalisierte Automat eine wichtige Rolle bei den Schätzungen spielt.s

Anschließend analysieren sie diesen Automaten und schließen daraus, dass sie bestimmte arithmetische Folgen von Zahlen konstruieren können, deren Verhalten miteinander verknüpft ist. Um genau zu sein (Einige davon werden nicht als Theoreme angegeben, sondern sind implizit im Beweis ihrer beiden Hauptbeispiele enthalten):

  1. Wenn eine Zahl x durch die Automaten akzeptiert wird, ohne dass die Größe der Nicht - Null - Zähler am Anfang einer Phase jemals gehen , dann gibt es eine ganze Zahl , so dass alle die Zahlen , werden akzeptiert.vixi sD>0x+nDn0
  2. Wenn eine Menge mindestens akzeptierte Zahlen enthält, so dass es für jede Zahl eine Phase so dass , dann können wir und ganze Zahlen finden so dassXs2+1xXivixsp,rXK1,K2

    • Für jede ganze Zahl werden entweder und vom Automaten akzeptiert oder beide verworfen.n0p+nK1r+nK2

(Gedanken:

  • Sie benötigen für aber ich denke, das ist eigentlich unnötig. Eigentlich ist es so, dass sie akzeptiert werden.x>sxX
  • Das meiste davon sollte auch für abgelehnte Nummern gelten, solange die Ablehnung durch explizites Anhalten und nicht durch Nichtbeendigung erfolgt.)

Für ihre eigenen Beispiele verwenden sie häufig auch die Tatsache, dass keine Primfaktoren . Um die Unmöglichkeit zu beweisen, leiten sie dann Widersprüche ab, indem sie zeigen, dass solche arithmetischen Folgen nicht existieren können.D,K1,K2>s

In unserem Problem bricht ein Widerspruch mit dem zweiten Fall zusammen. Wenn wir , wobei groß genug ist, dass keine Zahl zwischen und durch oder teilbar ist , dann gibt es auch keine Potenzen von 2 oder 3 zwischen und , also werden sie entweder beide akzeptiert oder beide abgelehnt. k p r 2 k 3 k p + 6 k n q + 6 k nK1=K2=6kkpr2k3kp+6knq+6kn

Punkt 1 kann immer noch als unmöglich gezeigt werden, da Potenzen von 2 und 3 meist immer weiter auseinander wachsen. Und ich glaube, ich kann den zweiten Fall unmöglich zeigen, wenn (ich habe @MarzioDeBiasi das Argument per E-Mail geschickt). Vielleicht könnte jemand diese Information nutzen, um die Form des Automaten weiter einzuschränken und daraus einen Widerspruch abzuleiten.K1K2

Ørjan Johansen
quelle
1
Sehr gute und klare Antwort!
Marzio De Biasi