Demostrar que una gramatica genera cadenas con igual numero de a's y b's
Fuente: Parcial 2 — ST0270-1587 (2024-2)
Enunciado
Considere la gramatica:
SAB→aB∣bA→aS∣bAA∣a→bS∣aBB∣by la siguiente afirmacion:
P: Si S∗x, entonces na(x)=nb(x).
Recuerde que ne(w) representa el numero de ocurrencias del simbolo terminal e en la cadena w.
(a) Proponga un ejemplo donde se evidencie lo que afirma P.
(b) Demuestre la afirmacion P. Sugerencia: Considere que
- Si A∗x, entonces na(x)=nb(x)+1, y
- Si B∗x, entonces nb(x)=na(x)+1.
La intuicion: cada no terminal lleva una “deuda” de simbolos
Piensa en S como “equilibrado” (mismas a‘s que b‘s), en A como “debe una a de mas” (siempre genera una a extra), y en B como “debe una b de mas”. Las producciones mantienen esa invariante: S→aB toma el equilibrio de S, agrega una a, y compensa con B que aporta una b extra. Lo mismo con S→bA.
Para la parte (a), basta derivar algo simple: S⇒aB⇒ab. Ahi na=nb=1.
La demostracion formal es por induccion sobre pasos de derivacion, probando tres cosas a la vez: que S produce igualdad, que A produce una a de mas, y que B produce una b de mas. Cada produccion se reduce a un caso mas chico donde aplica la hipotesis inductiva, y las cuentas de a‘s y b‘s cierran en cada caso.
(a) S⇒aB⇒ab. Se tiene na(ab)=1=nb(ab). ✓
(b) Se demuestran simultaneamente por induccion sobre k (pasos de derivacion):
- PS: Skx⟹na(x)=nb(x)
- PA: Akx⟹na(x)=nb(x)+1
- PB: Bkx⟹nb(x)=na(x)+1
Base (k=1): A⇒a: na=1=0+1=nb+1. ✓
B⇒b: nb=1=0+1=na+1. ✓
S no tiene derivacion terminal en 1 paso.
H.I.: Las tres afirmaciones valen para derivaciones en <k pasos.
Paso inductivo (k pasos):
S⇒aBk−1ax′: Por PB, nb(x′)=na(x′)+1. Entonces na(ax′)=na(x′)+1=nb(x′)=nb(ax′). ✓
S⇒bAk−1bx′: Por PA, na(x′)=nb(x′)+1. Entonces nb(bx′)=nb(x′)+1=na(x′)=na(bx′). ✓
A⇒aSk−1ax′: Por PS, na(x′)=nb(x′). Entonces na(ax′)=na(x′)+1=nb(x′)+1=nb(ax′)+1. ✓
A⇒bAAk−1bx1x2: Por PA, na(xi)=nb(xi)+1 para i=1,2. Entonces:
na(bx1x2)=na(x1)+na(x2)=nb(x1)+1+nb(x2)+1=nb(x1)+nb(x2)+2
=(nb(bx1x2)−1)+2=nb(bx1x2)+1✓
B⇒bSk−1bx′: Simetrico a A⇒aS. ✓
B⇒aBBk−1ax1x2: Simetrico a A⇒bAA. ✓
Por induccion, PS queda demostrado. ■
Gramatica
Gramatica
Parte (a): Ejemplo
Derivemos la cadena abba a partir de S:
S⇒aB⇒a(bS)⇒ab(aB)⇒aba(b)=abab
Verifiquemos: na(abab)=2 y nb(abab)=2. Efectivamente na=nb. ✓
Otro ejemplo mas simple:
S⇒aB⇒ab
Aqui na(ab)=1 y nb(ab)=1. ✓
Parte (b): Demostracion
Demostraremos tres afirmaciones simultaneamente por induccion sobre el numero de pasos de derivacion:
- P(S): Si S∗x, entonces na(x)=nb(x).
- P(A): Si A∗x, entonces na(x)=nb(x)+1.
- P(B): Si B∗x, entonces nb(x)=na(x)+1.
Caso base (derivacion en 1 paso)
- Para A: La unica derivacion en un paso es A⇒a. Tenemos na(a)=1 y nb(a)=0, luego na(a)=nb(a)+1=0+1=1. ✓
- Para B: La unica derivacion en un paso es B⇒b. Tenemos nb(b)=1 y na(b)=0, luego nb(b)=na(b)+1=0+1=1. ✓
- Para S: No hay derivacion de S en un solo paso que produzca una cadena terminal.
Hipotesis inductiva
Supongamos que para toda derivacion en menos de k pasos, las tres afirmaciones se cumplen.
Paso inductivo
Consideramos una derivacion en k pasos.
Caso Skx:
El primer paso debe ser S⇒aB o S⇒bA.
-
Si S⇒aBk−1ax′ donde Bk−1x′ (menos de k pasos). Por hipotesis inductiva P(B): nb(x′)=na(x′)+1. Entonces para x=ax′:
na(x)=na(x′)+1=nb(x′)−1+1=nb(x′)=nb(x)
Luego na(x)=nb(x). ✓
-
Si S⇒bAk−1bx′ donde Ak−1x′. Por hipotesis inductiva P(A): na(x′)=nb(x′)+1. Entonces para x=bx′:
nb(x)=nb(x′)+1=na(x′)−1+1=na(x′)=na(x)
Luego na(x)=nb(x). ✓
Caso Akx:
El primer paso es A⇒aS, A⇒bAA o A⇒a.
-
Si A⇒aSk−1ax′ donde Sk−1x′. Por hipotesis inductiva P(S): na(x′)=nb(x′). Entonces:
na(x)=na(x′)+1=nb(x′)+1=nb(x)+1
✓
-
Si A⇒bAAk−1bx1x2 donde A∗x1 y A∗x2, ambos en menos de k pasos. Por hipotesis inductiva P(A): na(x1)=nb(x1)+1 y na(x2)=nb(x2)+1. Entonces:
na(x)=na(x1)+na(x2)=(nb(x1)+1)+(nb(x2)+1)=nb(x1)+nb(x2)+2
nb(x)=nb(x1)+nb(x2)+1
Por lo tanto: na(x)=nb(x)+1. ✓
Caso Bkx:
Simetrico al caso de A.
-
Si B⇒bSk−1bx′ donde Sk−1x′. Por P(S): na(x′)=nb(x′). Entonces:
nb(x)=nb(x′)+1=na(x′)+1=na(x)+1
✓
-
Si B⇒aBBk−1ax1x2 donde B∗x1 y B∗x2. Por P(B): nb(x1)=na(x1)+1 y nb(x2)=na(x2)+1. Entonces:
nb(x)=nb(x1)+nb(x2)=(na(x1)+1)+(na(x2)+1)=na(x1)+na(x2)+2
na(x)=na(x1)+na(x2)+1
Por lo tanto: nb(x)=na(x)+1. ✓
Conclusion
Por induccion, queda demostrado que si S∗x, entonces na(x)=nb(x). ■