Die zyklische Verschiebung (auch Rotation oder Konjugation genannt ) einer Sprache L
Für reguläre Sprachen wird der Abschluss in dieser Form als " Beweisen Sie, dass reguläre Sprachen unter dem Zyklusoperator geschlossen sind " erläutert .
Die zyklische Verschiebung (auch Rotation oder Konjugation genannt ) einer Sprache L
Für reguläre Sprachen wird der Abschluss in dieser Form als " Beweisen Sie, dass reguläre Sprachen unter dem Zyklusoperator geschlossen sind " erläutert .
Antworten:
Sie können versuchen, Pushdown-Automaten zu verwenden. Mit einem Pushdown-Automaten für die Originalsprache konstruieren wir einen für die zyklische Verschiebung. Der neue Automat arbeitet in zwei Stufen, die dem y- und dem x- Teil des Wortes y x entsprechen (wobei x y in der Originalsprache ist). In der ersten Stufe kann der Automat, wann immer er ein Nicht-Terminal A platzen lassen möchte , stattdessen ein Nicht-Terminal A ' drücken ; Die Idee ist, dass der Stapel am Ende der ersten Stufe in umgekehrter Reihenfolge die Symbole enthält, die nach dem Lesen von x im Stapel gefunden werden
Bearbeiten: Hier sind einige weitere Details. Angenommen, wir erhalten einen PDA mit dem Alphabet Σ , einer Menge von Zuständen Q , einer Menge von Akzeptanzzuständen F , Nichtterminals Γ , einem Anfangszustand q 0 und einer Menge zulässiger Übergänge. Jeder zulässige Übergang hat die Form ( q , a , A , q ' , α ) , was bedeutet, dass im Zustand q beim Lesen von a ∈ A (oder a = ϵ , in diesem Fall handelt es sich um einen freien Übergang) oben liegt -of-Stack ist A ∈
Der neue PDA hat eine neue nicht-terminale A ' für jedes A ∈ & Ggr; . Für jeweils zwei Zustände q , q ' ∈ Q und A ∈ & Ggr; ∪ { ε } , gibt es zwei Zustände ( q , q ' , 1 ) , ( q , q ' , 2 , A ) . Die Startzustände (der tatsächliche Startzustand wird über ϵ- Übergänge nicht deterministisch unter ihnen gewählt ) sind (
Für jeden Übergang ( q , a , A , q ' , α ) gibt es Übergänge ( ( q , q " , 1 ) , a , B ' , ( q ' , q " , 1 ) , B ' A ' α ). , wobei B ∈ & Ggr; ∪ { ε } , und ε ' =
Für jeden Übergang ( q , a , ϵ , q ' , α ) gibt es Übergänge ( ( q , q " , 2 , A ) , a , B ' , ( q ' , q " , 2 , A ) , B ' α ) , wobei A ∈ & Ggr; ∪ { ε } . Für jeden Übergang
(There might be a few transitions that I missed, and some of the details that I'm omitting are somewhat messy.)
Recall we're trying to accept a word yx
Here is a simple example. Consider an automaton for xnyn
Here is a more complicated example, for the language of balanced parentheses of various types ("()","[]","<>") such that the immediate descendants of each type of parentheses must belong to a different type. For example, "([]<>)" is OK but "()" is wrong. For each "(", we push A
Consider Greibach normal form. To construct a shifted language you only need to change productions S→αA1…An
It turned out to be a good idea to check the old Hopcroft and Ullman classic Introduction to Automata Theory (1979). Closure under cycle is Exercise 6.4c and is marked S**. The double stars mean it is one of the most difficult problems (in the book). Fortunately the S indicates it is one of the selected problems with a solution.
The solution is as follows. Take a CFG in Chomsky normal form. Consider any derivation tree and basically turn it upside down. Consider a path S=X1,X2,…,Xn in the original tree. To the left the tree has contributions x1,x2,…,xn to the right y1,y2,…,yn, meaning the string derived equals x1x2…xnyn…y2y1. (Actually as the grammar is CNF when the path continues left, the contribution will be to the right and the corresponding xi is empty, etc.)
The tree upside down has a path S′,ˆXn,…ˆX2,ˆX1 with contributions yn,…,y2y1 to the left and xn,…,x2x1 to the right, so the result is a derivation for yn…y2y1x1x2…xn. As required.
Full details of the construction are given in the book.
Note how this reminds of the (accepted) solution by Yuval. The nonterminals that are pushed instead of popped are in the opposite order on the stack. Quite similar to upside down in the tree.