Proponer un NPDA para el lenguaje {0^n 1^m | m = 3n, n > 0}
Fuente: Parcial 2 — ST0270-2534 (2024-1)
Enunciado
Proponer un automata de pila no deterministico que acepte el lenguaje:
L={0n1m∣m=3n∧n>0}
Indicar explicitamente si el automata acepta por pila vacia o estado final.
La intuicion: apilar 3 marcas por cada 0
El lenguaje pide que por cada 0 haya exactamente tres 1‘s. La pila es perfecta para esto: por cada 0 que leemos, apilamos 3 marcas. Despues, por cada 1 que leemos, desapilamos 1 marca. Si al final la pila queda vacia, hubo exactamente 3n unos para n ceros.
En la practica, la primera vez que vemos un 0 apilamos XXX sobre Z0. Para cada 0 adicional, necesitamos agregar 3 X‘s mas, pero la transicion del PDA siempre opera sobre el tope: lee un X, y lo reemplaza por XXXX (remueve 1, agrega 4 = neto +3). Luego pasamos a leer 1‘s, y cada una simplemente desapila un X.
El automata es deterministico en la practica (aunque lo llamemos NPDA): no hay ambiguedad en que hacer en cada paso. La condicion n>0 se garantiza teniendo un estado inicial separado que solo transiciona al leer el primer 0; si no hay ceros, el automata nunca llega al estado de aceptacion.
NPDA
M=({q0,q1,q2,qf},{0,1},{X,Z0},δ,q0,Z0,{qf})
Acepta por estado final.
Transiciones
δ(q0,0,Z0)δ(q1,0,X)δ(q1,1,X)δ(q2,1,X)δ(q2,ε,Z0)={(q1,XXXZ0)}={(q1,XXXX)}={(q2,ε)}={(q2,ε)}={(qf,ε)}Traza: 0111
(q0,0111,Z0)⊢(q1,111,XXXZ0)⊢(q2,11,XXZ0)⊢(q2,1,XZ0)⊢(q2,ε,Z0)⊢(qf,ε,ε)✓Traza: 00111111
(q0,00111111,Z0)⊢(q1,0111111,XXXZ0)⊢(q1,111111,XXXXXXZ0)⊢(q2,11111,XXXXXZ0)⊢⋯⊢(q2,ε,Z0)⊢(qf,ε,ε)✓Automata
Solucion
Analisis del lenguaje
El lenguaje es L={0n1m∣m=3n∧n>0}.
Cada 0 debe corresponder a exactamente tres 1‘s. Ejemplos: 0111, 00111111, 000111111111.
Idea
Por cada 0 leido, apilamos 3 marcas. Luego, por cada 1 leido, desapilamos una marca. Al final, la pila debe estar vacia (excepto por el simbolo de fondo).
Definicion formal
M=({q0,q1,q2,qf},{0,1},{X,Z0},δ,q0,Z0,{qf})
El automata acepta por estado final.
Transiciones
δ(q0,0,Z0)δ(q1,0,X)δ(q1,1,X)δ(q2,1,X)δ(q2,ε,Z0)={(q1,XXXZ0)}={(q1,XXXX)}={(q2,ε)}={(q2,ε)}={(qf,ε)}primera 0: apilar 3 X’scada 0 adicional: reemplazar tope por 4 X’s (neto +3)primera 1: empezar a desapilarcada 1: desapilar un Xpila vacia: aceptarExplicacion
- Estado q0: Estado inicial. Al leer el primer 0, apilamos XXX sobre Z0 y vamos a q1. Esto garantiza n>0.
- Estado q1: Leyendo 0‘s. Por cada 0, desapilamos el tope X y apilamos XXXX (incremento neto de 3 X‘s). Al leer el primer 1, desapilamos un X y pasamos a q2.
- Estado q2: Leyendo 1‘s. Por cada 1, desapilamos un X. Cuando la pila solo tiene Z0, hacemos ε-transicion a qf.
- Estado qf: Estado de aceptacion.
Despues de leer n ceros, la pila tiene 3n marcas X (mas Z0). Despues de leer m unos, se desapilan m marcas. El automata acepta cuando m=3n y la pila queda solo con Z0.
Verificacion interactiva
Traza para 0111:
Traza para 00111111:
Verificacion: cadena 0111
| Paso | Estado | Entrada restante | Pila | Accion |
|---|---|---|---|---|
| 0 | q0 | 0111 | Z0 | Inicio |
| 1 | q1 | 111 | XXXZ0 | Leer 0: apilar XXX |
| 2 | q2 | 11 | XXZ0 | Leer 1: desapilar X |
| 3 | q2 | 1 | XZ0 | Leer 1: desapilar X |
| 4 | q2 | ε | Z0 | Leer 1: desapilar X |
| 5 | qf | ε | ε | ε-transicion: aceptar |
Acepta ✓
Verificacion: cadena 00111111
| Paso | Estado | Entrada restante | Pila | Accion |
|---|---|---|---|---|
| 0 | q0 | 00111111 | Z0 | Inicio |
| 1 | q1 | 0111111 | XXXZ0 | Leer 0: apilar 3 X‘s |
| 2 | q1 | 111111 | XXXXXXZ0 | Leer 0: apilar 3 X‘s mas |
| 3 | q2 | 11111 | XXXXXZ0 | Leer 1: desapilar X |
| 4-7 | q2 | ⋯ | ⋯ | Continuar desapilando |
| 8 | q2 | ε | Z0 | Todas las X desapiladas |
| 9 | qf | ε | ε | Aceptar |
Acepta ✓