Respuesta predeterminada corta: cree un LBA que acepte el idioma y utilice la simulación utilizada para demostrar que las gramáticas sensibles al contexto y el LBA definen el mismo conjunto de idiomas. Pero eso, por supuesto, no es lo que buscas.
En este caso específico, trate de pensar en usar una gramática lineal derecha para dos veces, una para la izquierda y otra para la mitad derecha. Todo lo que tiene que hacer es asegurarse de que ambas gramáticas deriven "en sincronía".Σ∗
Esto se puede hacer cambiando un token de control. Es decir, las gramáticas de la izquierda escogen una regla, generan el token de control de ajuste y lo pasan a la gramática correcta. La gramática correcta ve el token de control y ejecuta la regla de ajuste. Tenga en cuenta que también puede implementar la comunicación bidireccional de esta manera, pero no es necesario aquí.
Hay un problema con las gramáticas sensibles al contexto: nunca pueden eliminar no terminales (excepto si la palabra vacía está en el idioma). Por lo tanto, tenemos que crear solo los no terminales que necesitemos; ninguno puede ser redundante.S→ ε
Una forma de lograr esto es usar el mismo truco que para ciertas pruebas sobre LBA: generar todos los no terminales que va a necesitar primero , es decir, preparar la "cinta". Más tarde, "muévete" en esa cinta. Solo "al final", reemplace todos los no terminales por terminales.
Deje que con (la construcción se extiende fácilmente a alfabetos más grandes) y , dada por las siguientes reglas.
son las reglas para generar la "cinta". Tenga en cuenta que el sombrero denota la "posición de la cabeza" e índicesG = ( N, Σ , δ, S)N δΣ = { a , b }norteδ
l,rSS′→ X^lS′Xr∣ a a a a ∣ a b a b ∣ b a b a ∣ b b b b ∣ a a ∣ b b ∣ ε→ XlS′Xr∣ XlX^r
l , rdenotar a qué mitad de la palabra pertenece un no terminal. Las palabras cortas se generan así para salvaguardar algunas reglas a continuación. Ahora necesitamos reglas para derivar un símbolo en la parte izquierda:
para todos . Observe cómo usamos el índice superior para llevar el símbolo generado a la derecha. y son no terminales "finales" que solo se utilizarán para mover el token de control y derivar terminales más tarde. Tenga en cuenta además que la segunda regla se usa (solo) para el último símbolo de la mitad derecha.
Para mover el carry a la mitad derecha, tenemos que pasar los dos restantes
(α,γ)∈Σ2XaXbXlXαX^lXlX^lXα→ XγX^γl→ XγXγα
( α , γ) ∈ Σ2XunaXsi
Xl y ya generado :
para todos . Ahora, una vez que el carry llega al token de control derecho, tenemos que imitar la regla utilizada a la izquierda:
para todosXα
X^γlXlX^γlXαXγlXlXγlXαXγαXβ→ X^lXγl→ X^lXγα→ XlXγl→ XlXγα→ XαXγβ
( α , β, γ) ∈ Σ3
XγlX^rXγαX^rX^γrXrX^γr→ XlX^γr→ XαX^γr→ XγX^r→ Xγ
( α , γ) ∈ Σ2 . Tenga en cuenta que la primera regla se usa para el primer símbolo de la mitad derecha, y que la última regla solo se puede usar para el último símbolo; de lo contrario, la derivación nunca termina. Ahora solo necesitamos las reglas de terminación
para todos y ya hemos terminado. Estas reglas, también, solo pueden aplicarse después de que todo (a la izquierda) esté hecho, de lo contrario la derivación no terminará.
Tenga en cuenta que esta gramática es ambigua. No solo se puede (de forma segura) en cualquier lugar a la izquierda de la "cabeza" izquierda en cualquier momento, sino que también se pueden realizar múltiples acarreos al mismo tiempo. Como nunca pueden adelantarse entre sí, se mantiene el orden correcto.
Xα→ α
α ∈ Σ
Xα→ α
Todavía hay que hacer una observación: la gramática anterior no es sensible al contexto, ya que muchas reglas cambian ambos símbolos en el lado izquierdo. Esto no está permitido para las gramáticas sensibles al contexto. Afortunadamente, podemos simular cualquier regla de la forma
por
para que seamos buenos y podamos trabajar con la gramática más pequeña. Mostrar que la interferencia entre múltiples simulaciones de este tipo no duele se deja como un ejercicio.R
A B → Cre
A BA YRXRYRXRre→ A YR→ XRYR→ XRre→ Cre
¿Ves cómo extender esto a ? ¿ también para ? ¿Puedes usar la misma construcción para cualquier para normal ?Lk= { wk∣ w ∈ Σ∗}L = ⋃i ≥ 1LkLkL