Wie kann ich die Turing-Maschine der erkannten Sprache in eine uneingeschränkte Grammatik umwandeln ?


19

Laut diesem Wikipedia-Artikel entsprechen uneingeschränkte Grammatiken Turing-Maschinen. Der Artikel stellt fest, dass ich jede Turing-Maschine in eine uneingeschränkte Grammatik umwandeln kann, es wird jedoch nur gezeigt, wie man eine Grammatik in eine Turing-Maschine umwandelt.

Wie mache ich das und wandle die Turingmaschine die erkannte Sprache in eine uneingeschränkte Grammatik um? Ich habe versucht, Übergangsregeln durch Grammatikregeln zu ersetzen, aber eine Turing-Maschine kann auch viele verschiedene Zustandskonfigurationen haben ...L

Antworten:


9

Wir kodieren den Bandinhalt der Turing-Maschine in sententialen Formen. Ein spezieller Satz von Nicht-Terminals codiert den aktuellen Status. Es kann zu jedem Zeitpunkt nur eine davon in der sententialen Form geben, die rechts neben dem Symbol steht, auf das das TM gerade zeigt.

Die zweite wichtige Idee ist, dass wir den Prozess umkehren müssen: TMs nehmen das Wort als Eingabe und wandeln es in oder , oder sie enden nicht. Die Grammatik muss jedoch das Wort erzeugen. Glücklicherweise sind Grammatiken von Natur aus nicht deterministisch, so dass wir einfach davon ausgehen können, woher die akzeptierende stammt. Alle Wörter, die das TM akzeptieren lassen, können dann generiert werden.0 1101

Es sei die Menge von Zustands-Nicht-Endpunkten; wlog Sei das Startzustands- Nicht-Endgerät und die Menge der Akzeptanzzustands-Nicht-Endgeräte. Zunächst benötigen wir Startregeln, die alle möglichen akzeptierenden Konfigurationen generieren:Q 0 Q FQQ={Q0,,Qk}Q0QFQ

S#1Qf# für alle .QfQF

Ebenso beenden wir, wenn wir den Ausgangszustand in der richtigen Position "erreichen", nämlich auf dem ersten Symbol:

#aQ0#a für alle .aΣ

Das Übersetzen der tatsächlichen Zustandsübergänge ist einfach:

aQcQ  for a,cΣ(a,Q,N)δ(c,Q)aQbacQ for a,b,cΣ(b,Q,L)δ(c,Q)abQcQb for a,b,cΣ(a,Q,R)δ(c,Q)

Es gibt einige technische Probleme, die behoben werden müssen. Zum Beispiel müssen Sie die Begrenzungsmarkierungen am Ende entfernen . Dies können Sie tun, indem Sie zwei spezielle Nichtterminals erzeugen, anstatt sie zu beenden, diese an die Enden tauschen und dann das mit ihnen entfernen . Darüber hinaus müssen mehr auf Anfrage erstellt werden; das erfordert einiges hacken der regeln mit .# # d = ####d=#

Außerdem wird die Konstruktion etwas komplizierter, wenn das TM Symbole ohne Eingabe verwendet. In diesem Fall können die Beendigungsregeln falsch sein: Wenn sich irgendwo auf dem Band nicht eingegebene Symbole befinden, haben wir kein richtiges Wort generiert. Dies kann ähnlich wie das Entfernen von : Spawn eines speziellen Nicht-Terminals aus , das nach rechts vertauscht und nur dann entfernt wird, wenn alle Symbole aus .Q 0 Σ#Q0Σ

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.