Considere los siguientes idiomas:
$$\newcommand{\A}{\mathtt{un}}
\newcommand{\B}{\mathtt{b}}
\newcommand{\P}{\mathtt{\#}}\begin{gather}
L_\text{long} = \{ x \P y : x , y \in \{ \A , \B \}^* , | x | > | y | \};\\
L_\text{short} = \{ x \P y : x , y \in \{ \A , \B \}^* , | x | < | y | \};\\
L_\text{diff} = \{ x \P y : x , y \in \{ \A , \B \}^* , | x | = | y |, ( \exists k ) ( x_k \neq y_k ) \}.
\end{se reúnen}$$
Tenga en cuenta que su lengua $L$ es claramente la unión de estos tres idiomas, por lo que no deterministas PDA para $L$ primero nondeterministically elegir cuál de estos tres idiomas de la cadena pertenece a y, a continuación, compruebe que la cadena pertenece al lenguaje. (No determinista) Pda para $L_\text{long}$ e $L_\text{short}$ son relativamente fáciles de construir, la verdadera dificultad es con $L_\text{diff}$.
No estoy diciendo que los $L_\text{diff}$ es independiente del contexto (yo realmente no creo que lo es), pero hay un contexto de un lenguaje libre que incluye a $L_\text{diff}$ como un sub-lenguaje, y es en sí mismo un sub-lenguaje de $L$: vamos a $L^\prime_{\text{diff}}$ consta de todas las cadenas $w \in \{ \A , \B , \P \}^*$ tal que
- $\P$ ocurre exactamente una vez en $w$; y
- si $w^\prime$ es la cadena que se obtiene por extracción de la instancia única de $\P$ en $w$,, a continuación,$w^\prime \in \{ xy \in \{ \A , \B \}^* : |x| = |y| , x \neq y \}$.
Debe quedar claro que $L_\text{diff}$ es un sub-lenguaje de $L_\text{diff}^\prime$, y cada cadena en $L_\text{diff}^\prime$ pertenece a $L$.
Supongamos que $x = x_1 \cdots x_n$ e $y = y_1 \cdots y_n$ son tales que $x \neq y$. Esto significa que hay un $k \leq n$ tal que $x_k \neq y_k$: por el momento, supongamos $x_k = \A$ e $y_k = \B$. Entonces podemos reescribir nuestra cadena como $$x y = x_1 \cdots x_{k-1} \;\A\; x_{k+1} \cdots x_n \; y_1 \cdots y_{k-1} \;\B\; y_{k+1} \cdots y_n$$ Note that the substring $x_{k+1} \cdots x_n \; y_1 \cdots y_{k-1}$ has length $(n-k) + (k - 1 ) = n - 1$ and so let us write it as $$z_1 \cdots z_{k-1} z_k \cdots z_{n-1}$$ Entonces
$$\begin{align}
xy &= x_1 \cdots x_{k-1} \;\A\; x_{k+1} \cdots x_n \; y_1 \cdots y_{k-1} \;\B\; y_{k+1} \cdots y_n \\
&= \overbrace{x_1 \cdots x_{k-1}}^{\text{length } k-1}\; \A\;\overbrace{z_1 \cdots z_{k-1}}^{\text{length } k-1} \; \overbrace{z_k \cdots z_{n-1}}^{\text{length }n-k} \;\B\; \overbrace{y_{k+1} \cdots y_n}^{\text{length }n-k}
\end{align}$$
Así, la cadena $xy$ puede ser visto como la concatenación de dos cadenas de longitud impar $u , w$ que tienen diferentes medio de símbolos. Una vez que esto se observa, es relativamente fácil construir un no deterministas PDA para este idioma. (Primer no-determinista decidir si la primera subcadena tiene un $\A$ como su medio de símbolos y el segundo, un $\B$, o viceversa, al leer la primera cadena de pop en un símbolo en la pila hasta que no determinista adivinar el centro el símbolo de la primera subcadena, y a continuación, el pop de los símbolos off; una vez que el juego es nuevo vacío pop símbolos y no de manera determinista adivinar, donde la media símbolo de la segunda cadena.)
Para obtener un no deterministas PDA para $L_\text{diff}^\prime$ también asegurarse de que usted encuentre uno (y sólo uno) $\P$ en la cadena antes de aceptar (pero de la lectura de un $\P$ no afecta a la pila de alguna manera).