Kurze Standardantwort: Erstellen Sie einen LBA, der die Sprache akzeptiert, und verwenden Sie die Simulation, um zu beweisen, dass kontextsensitive Grammatiken und LBA denselben Satz von Sprachen definieren. Aber das ist natürlich nicht das, wonach Sie suchen.
Versuchen Sie in diesem speziellen Fall, eine rechtslineare Grammatik für zweimal zu verwenden, eine für die linke und eine für die rechte Hälfte. Alles, was Sie tun müssen, um sicherzustellen, dass beide Grammatiken "synchron" abgeleitet werden.Σ∗
Dies kann durch Vertauschen eines Kontrolltokens erfolgen. Das heißt, die linke Grammatik wählt eine Regel aus, generiert das passende Steuerelement-Token und übergibt es an die rechte Grammatik. Die richtige Grammatik sieht das Steuerelement-Token und führt die Anpassungsregel aus. Beachten Sie, dass Sie auf diese Weise auch eine bidirektionale Kommunikation implementieren können, dies ist hier jedoch nicht erforderlich.
Bei kontextsensitiven Grammatiken gibt es ein Problem: Sie können niemals Nicht-Terminals löschen (außer wenn das leere Wort in der Sprache ist). Daher müssen wir nur so viele Nicht-Terminals erstellen, wie wir benötigen werden. Keiner kann redundant sein.S→ε
Eine Möglichkeit, dies zu erreichen, besteht darin, den gleichen Trick wie für bestimmte Beweise für LBA zu verwenden: Generieren Sie alle Nicht-Terminals, die Sie zuerst benötigen , dh bereiten Sie das "Band" vor. Bewegen Sie sich später auf diesem Band. Ersetzen Sie nur "am Ende" alle Nicht-Terminals durch Terminals.
Also sei mit (die Konstruktion erstreckt sich leicht auf größere Alphabete) und , gegeben durch die folgenden Regeln.
sind die Regeln zum Erzeugen des "Bandes". Es ist zu beachten, dass der Hut die "Kopfposition" bezeichnet und die Indizes angeben, zu welcher Hälfte des Wortes ein Nicht-Terminal gehört. Die kurzen Wörter werden also generiert, um einige der folgenden Regeln zu schützen. Jetzt brauchen wir Regeln, um ein Symbol im linken Teil abzuleiten:G=(N,Σ,δ,S)Σ={a,b}Nδ
SS′→X^lS′Xr∣aaaa∣abab∣baba∣bbbb∣aa∣bb∣ε→XlS′Xr∣XlX^r
l,r
X^lXlX^lXα→XγX^γl→XγXγα
für alle . Beachten Sie, wie wir den oberen Index verwenden, um das generierte Symbol nach rechts zu tragen. und sind "endgültige" Nicht-Terminals, die nur zum Verschieben des und zum späteren Ableiten von Terminals verwendet werden. Beachten Sie außerdem, dass die zweite Regel (nur) für das letzte Symbol der rechten Hälfte verwendet wird.
Um den Übertrag in die rechte Hälfte zu verschieben, müssen wir sowohl das verbleibende als auch das bereits generierte :(α,γ)∈Σ2XaXb
XlXα
X^γlXlX^γlXαXγlXlXγlXαXγαXβ→X^lXγl→X^lXγα→XlXγl→XlXγα→XαXγβ
für alle . Sobald der Übertrag das rechte Steuerelement erreicht hat, müssen wir die links verwendete Regel nachahmen:
für alle(α,β,γ)∈Σ3
XγlX^rXγαX^rX^γrXrX^γr→XlX^γr→XαX^γr→XγX^r→Xγ
(α,γ)∈Σ2. Beachten Sie, dass die erste Regel für das erste Symbol der rechten Hälfte verwendet wird und dass die letzte Regel nur für das allerletzte Symbol verwendet werden kann, da sonst die Ableitung niemals endet. Jetzt brauchen wir nur noch die Beendigungsregeln
für alle und wir sind fertig. Auch diese Regeln können erst angewendet werden, nachdem alles (links) erledigt ist, andernfalls wird die Ableitung nicht beendet.
Beachten Sie, dass diese Grammatik nicht eindeutig ist. kann nicht nur (sicher) überall links vom linken "Kopf" angewendet werden, sondern es können auch mehrere Übertragungen gleichzeitig ausgeführt werden. Da sie sich niemals gegenseitig überholen können, wird die richtige Reihenfolge beibehalten.
Xα→α
α∈Σ
Xα→α
Eine Bemerkung muss noch gemacht werden: Die obige Grammatik ist nicht kontextsensitiv, da viele Regeln beide Symbole auf der linken Seite ändern . Dies ist für kontextsensitive Grammatiken nicht zulässig. Glücklicherweise können wir jede Regel der Form simulieren
indem wir
damit wir gut sind und mit der kleineren Grammatik arbeiten können. Es bleibt eine Übung, zu zeigen, dass Interferenzen zwischen mehreren solchen Simulationen nicht schaden.R
AB→CD
ABAYRXRYRXRD→AYR→XRYR→XRD→CD
Sehen Sie, wie Sie dies auf ? Funktioniert es auch für ? Können Sie dieselbe Konstruktion für jedes für reguläres ?Lk={wk∣w∈Σ∗}L=⋃i≥1LkLkL