Professional Documents
Culture Documents
Capı́tulo 1
1
Introducción a la Teorı́a de la Computación Capı́tulo 1 2
001
1011
001000001.
Para denotar cadenas concretas se utilizan letras como u, v, w, x, y, z, con subı́ndices si
es necesario. Si tales letras hacen parte del alfabeto de referencia Σ, entonces se utilizan
letras griegas.
Ejemplo Sea Σ = {a, b, c, d}. Utilizamos u, v, w para denotar (dar un nombre) a ciertas
cadenas concretas:
u = ddaba.
v = cababadda.
w = bbbcc.
Ejemplo Sea Σ = {a, b, c, d}.
Si u = bbcada =⇒ |u| = 6,
Si v = ccddd =⇒ |v| = 5.
Σ∗ = {λ, a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc, aaa, aab, abc, baa, . . .}.
En este caso, Σ∗ está formado por la cadena vacı́a λ, las 3 cadenas con un solo sı́mbolo
(a, b, c), las 9 cadenas con dos sı́mbolos (aa, ab, ac, ba, bb, bc, ca, cb, cc), las 27 cadenas con
tres sı́mbolos (aaa, aab, abc, baa, . . . , ccc), etc.
Obsérvese que los sı́mbolos de un alfabeto Σ juegan un doble papel: como sı́mbolos del
alfabeto de referencia y como cadenas de longitud uno.
(3) Cláusula de exclusión. Establece que los elementos de S se pueden obtener únicamente
utilizando las cláusulas (1) y (2).
La cláusula de exclusión se suele admitir de manera implı́cita y es corriente omitirla en
las definiciones recursivas concretas, algo que haremos en lo sucesivo.
∗
Ejemplo Dado un alfabeto Σ, el conjunto Σ de todas las cadenas, definido descripti-
vamente en la sección 1.1, se puede definir recursivamente. La idea es que a
partir de una cadena u ∈ Σ∗ se puede obtener una nueva cadena añadiendo a la derecha
un sı́mbolo a perteneciente al alfabeto Σ; dicha cadena será denotada por ua. Todas las
cadenas de Σ∗ se pueden obtener de esta manera a partir de la cadena vacı́a λ; se entiende
que λa = a, para cualquier sı́mbolo a ∈ Σ.
La definición recursiva de Σ∗ consta entonces de las siguientes dos cláusulas:
(1) λ ∈ Σ∗ .
(2) Si u ∈ Σ∗ entonces ua ∈ Σ∗ para cada sı́mbolo a ∈ Σ, donde ua es la secuencia de
sı́mbolos obtenida a partir de u añadiendo el sı́mbolo a a la derecha.
La recursión sobre cadenas es necesaria cuando se quiere demostrar propiedades con toda
rigurosidad.
(2) Si u = a1 a2 · · · an , v = b1 b2 · · · bm , donde a1 , . . . , an , b1 , . . . , bm ∈ Σ, n, m ≥ 1,
entonces
u · v = a1 a2 · · · an b 1 b 2 · · · b m .
Es decir, u · v es la cadena formada escribiendo los sı́mbolos de u y a continuación los
sı́mbolos de v.
(uv)w = u(vw).
Demostración. Primero hay que considerar los casos en los que alguna (o algunas) de las
cadenas u, v o w sea la cadena vacı́a λ. Por ejemplo, si v = λ tenemos (uv)w = (uλ)w =
uw mientras que u(vw) = u(λw) = uw.
Luego consideramos el caso en que u, v y w sean diferentes de λ. Entonces podemos
escribir
u = a1 · · · an , con ai ∈ Σ, n ≥ 1.
v = b1 · · · bm , con bi ∈ Σ, m ≥ 1.
w = c1 · · · cq , con ci ∈ Σ, q ≥ 1.
Entonces
(uv)w = (a1 · · · an b1 · · · bm )w = a1 · · · an b1 · · · bm c1 · · · cq .
u(vw) = u(b1 · · · bm c1 · · · cq ) = a1 · · · an b1 · · · bm c1 · · · cq .
Introducción a la Teorı́a de la Computación Capı́tulo 1 6
baaaddb = ba3 d2 b.
dddbbcccccaa = d3 b2 c5 a2 .
ababbbc = (ab)2 b2 c = abab3 c.
Introducción a la Teorı́a de la Computación Capı́tulo 1 7
1.7 Lenguajes
Un lenguaje L sobre un alfabeto Σ es un subconjunto de Σ∗ , es decir L ⊆ Σ∗ .
Casos extremos:
L = ∅, lenguaje vacı́o.
L = Σ∗ , lenguaje de todas las cadenas sobre Σ.
Todo lenguaje L satisface ∅ ⊆ L ⊆ Σ∗ , y puede ser finito o infinito. Los lenguajes se
denotan con letras mayúsculas A, B, C, . . . , L, M, N, . . ..
Ejemplos Los siguientes son ejemplos de lenguajes sobre los alfabetos especificados.
• Σ = {a, b, c}. L = {a, aba, aca}.
• Σ = {a, b, c}. L = {a, aa, aaa, . . .} = {an : n ≥ 1}.
• Σ = {a, b, c}. L = {aa, aba, ab2 a, ab3 a, . . .} = {abn a : n ≥ 0}.
• Σ = {a, b, c, . . . , x, y, z, A, B, C, . . . , X, Y, Z}. L = {u ∈ Σ∗ : u es una palabra
listada en el diccionario español DRA}. L es un lenguaje finito.
• Σ = {a, b, c}. L = {u ∈ Σ∗ : u no contiene el sı́mbolo c}. Por ejemplo, abbaab ∈ L
pero abbcaa ∈/ L.
• Σ = {0, 1}. L = conjunto de todas las secuencias binarias que contienen un número
impar de unos.
• Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. El conjunto N de los números naturales se puede
definir como un lenguaje sobre Σ, en la siguiente forma:
N = {u ∈ Σ∗ : u 6= λ y (u = 0 ó 0 no es un prefijo de u)}.
AB = {ab, ab2 , ab2 , ab3 , acb, acb2 } = {ab, ab2 , ab3 , acb, acb2 }.
BA = {ba, bab, bac, b2 a, b2 ab, b2 ac}.
Nótese que AB tiene cinco cadenas en total ya que la cadena ab2 se obtiene de dos maneras
distintas.
Ejemplo Si Σ = {a, b, c}, A = {ba, bc}, B = {bn : n ≥ 0}, entonces
1. A · ∅ = ∅ · A = ∅.
2. A · {λ} = {λ} · A = A.
3. Propiedad Asociativa,
A · (B · C) = (A · B) · C.
A · (B ∪ C) = A · B ∪ A · C.
(B ∪ C) · A = B · A ∪ C · A.
Introducción a la Teorı́a de la Computación Capı́tulo 1 10
Demostración.
1. A · ∅ = {uv : u ∈ A, v ∈ ∅} = ∅.
2. A · {λ} = {uv : u ∈ A, v ∈ {λ}} = {u : u ∈ A} = A.
3. Se sigue de la asociatividad de la concatenación de cadenas.
4. Caso particular de la propiedad general, demostrada a continuación.
S S
5. Demostración de la igualdad A · Bi = (A · Bi ):
i∈I i∈I
S S
x∈A· Bi ⇐⇒ x = u · v, con u ∈ A & v ∈ i∈I Bi
i∈I
⇐⇒ x = u · v, con u ∈ A & v ∈ Bj , para algún j ∈ I
⇐⇒ x ∈ AS · Bj , para algún j ∈ I
⇐⇒ x ∈ i∈I (A · Bi ).
S S
La igualdad Bi · A = (Bi · A) se demuestra de forma similar.
i∈I i∈I
A · (B ∩ C) = {a, λ} · ∅ = ∅.
Según la definición de las potencias de una lenguaje, A∗ consta de todas las concatena-
ciones de cadenas de A consigo mismas, de todas las formas posibles. Tenemos ası́ una
descripción explı́cita de A∗ :
A∗ = conjunto de todas las concatenaciones
(Descripción 2) de cadenas de A, incluyendo λ
= {u1 · · · un : ui ∈ A, n ≥ 0}.
De manera similar se define la clausura positiva de un lenguaje A, A ⊆ Σ∗ , denotada por
A+ . [
A+ = Ai = A1 ∪ A2 ∪ · · · ∪ An · · ·
i≥1
(1) λ ∈ A∗ .
(2) Si u ∈ A∗ y v ∈ A entonces u · v ∈ A∗ .
(1) Si u ∈ A entonces u ∈ A+ .
(2) Si u ∈ A+ y v ∈ A entonces u · v ∈ A+ .
Ejemplo Sea Σ = {a, b, c}.
2. A∗ = A+ si y solamente si λ ∈ A.
3. A+ = A∗ · A = A · A∗ .
4. A∗ · A∗ = A∗ .
n
5. A∗ = A∗ , para todo n ≥ 1.
6. A+ · A+ ⊆ A+ . En general, A+ · A+ 6= A+
∗
7. A∗ = A∗ .
Introducción a la Teorı́a de la Computación Capı́tulo 1 13
+
8. A∗ = A∗ .
∗
9. A+ = A∗ .
+
10. A+ = A+ .
Demostración.
Las propiedades 1 y 2 se siguen inmediatamente de las definiciones de A∗ y A+ .
3. A · A∗ = A · (A0 ∪ A1 ∪ A2 ∪ · · · )
= A1 ∪ A2 ∪ A3 ∪ · · ·
= A+ .
Similarmente se demuestra que A∗ · A = A+ .
4. Si x ∈ A∗ · A∗ , entonces x = u · v, con u ∈ A∗ , v ∈ A∗ . De modo que, x = u · v, con
u = u1 u2 · · · un , ui ∈ A, n ≥ 0 y v = v1 v2 · · · vm , vi ∈ A, m ≥ 0.
De donde
x = u · v = u1 · u2 · · · un · v1 · v2 · · · vm .
con ui ∈ A, vi ∈ A, n ≥ 0. Por lo tanto, x es una concatenación de n + m cadenas de
A. Ası́ que x ∈ A∗ .
Recı́procamente, si x ∈ A∗ , entonces x = x · λ ∈ A∗ · A∗ .
Hemos probado que x ∈ A∗ · A∗ ⇐⇒ x ∈ A∗ , lo cual establece la igualdad.
5. Se sigue de la propiedad 4.
6. La demostración de A+ · A+ ⊆ A+ es similar a la demostración de A∗ · A∗ ⊆ A∗
presentada en la propiedad 4, pero tomando m, n ≥ 1.
Para exhibir un contraejemplo de A+ · A+ = A+ , consideramos Σ = {a, b} y A = {a}.
Se tiene que
A+ = A1 ∪ A2 ∪ · · · = {a} ∪ {aa} ∪ {aaa} ∪ · · · = {an : n ≥ 1}.
A+ · A+ = {a, a2 , a3 , . . . } · {a, a2 , a3 , . . . } = {a2 , a3 , a4 , . . . } = {an : n ≥ 2}.
Se observa que A+ · A+ 6= A+
∗ 0 1 2
7. A∗ = A∗ ∪ A∗ ∪ A∗ ∪ · · ·
= {λ} ∪ A∗ ∪ A∗ ∪ A∗ ∪ · · ·
= A∗ .
+ 1 2 3
8. A∗ = A∗ ∪ (A∗ ∪ (A∗ ∪ · · ·
= A∗ ∪ A∗ ∪ A∗ ∪ · · ·
= A∗ .
Introducción a la Teorı́a de la Computación Capı́tulo 1 14
∗ 0 1 2
9. A+ = A+ ∪ A+ ∪ A+ ∪ · · ·
= {λ} ∪ A+ ∪ A+ A+ ∪ · · ·
= A∗ ∪ (conjuntos contenidos en A+ )
= A∗ .
+ 1 2 3
10. A+ = A+ ∪ A+ ∪ A+ ∪ · · · ,
= A+ ∪ (conjuntos contenidos en A+ )
= A+ .
2. (A ∪ B)∗ = (A∗ B ∗ )∗ = (B ∗ A∗ )∗ .
Demostración.
1. Se sigue inmediatamente de las definiciones de A∗ y B ∗ .
2. Demostraremos la igualdad (A ∪ B)∗ = (A∗ B ∗ )∗ . La contenencia ⊆ se sigue de
A ⊆ A∗ , B ⊆ B ∗ =⇒ A ⊆ A∗ B ∗ , B ⊆ A∗ B ∗
=⇒ A ∪ B ⊆ A∗ B ∗
=⇒ (A ∪ B)∗ ⊆ (A∗ B ∗ )∗ por la propiedad 1.
AR = {uR : u ∈ A}.
1. x ∈ (A · B)R ⇐⇒ x = uR , donde u ∈ A · B
⇐⇒ x = uR , donde u = vw, v ∈ A, w ∈ B
R
⇐⇒ x = (vw) , donde v ∈ A, w ∈ B
⇐⇒ x = wR v R , donde v ∈ A, w ∈ B
⇐⇒ x ∈ B R · AR .
5. x ∈ (A∗ )R ⇐⇒ x = uR , donde u ∈ A∗
⇐⇒ x = (u1 · u2 · · · un )R , donde los ui ∈ A, n ≥ 0
⇐⇒ x = uR R R
n · u2 · · · u1 , donde los ui ∈ A, n ≥ 0
⇐⇒ x ∈ (AR )∗ .
Ejercicios de la sección 1.12
À Demostrar las propiedades 2, 3, 4 y 6 de la reflexión de cadenas.
Á ¿Se pueden generalizar las propiedades 2 y 3 anteriores para uniones e intersecciones
arbitrarias, respectivamente?
(1) ∅, {λ} y {a}, para cada a ∈ Σ, son lenguajes regulares sobre Σ. Estos son los
denominados lenguajes regulares básicos.
(2) Si A y B son lenguajes regulares sobre Σ, también lo son
A∪B (unión),
A·B (concatenación),
A∗ (estrella de Kleene).
(2) Si R y S son expresiones regulares sobre Σ que representan los lenguajes regulares A
y B, respectivamente, entonces
(a ∪ b∗ )a∗ (bc)∗
Introducción a la Teorı́a de la Computación Capı́tulo 1 18
Ejemplo Dado el alfabeto Σ = {a, b},
b∗ ab∗ .
b(a ∪ b)∗ .
(a ∪ b)+ ∪ a+ b+ .
(a ∪ b)(a ∪ b)∗ ∪ aa∗ b∗ b.
representan el mismo lenguaje.
Introducción a la Teorı́a de la Computación Capı́tulo 1 19
A · (B ∪ C) = A · B ∪ A · C,
Ejemplo Sea Σ = {0, 1}. Encontrar una expresión regular para el lenguaje de todas
las cadenas cuyo penúltimo sı́mbolo, de izquierda a derecha, es un 0.
Solución. El penúltimo sı́mbolo debe ser un cero pero para el último hay dos posibili-
dades: 0 o 1. Estos casos se representan como una unión:
1. Lenguaje de todas las cadenas que tienen un número par de sı́mbolos (cadenas de
longitud par ≥ 0).
Solución. Aparte de la cadena vacı́a λ, todas las cadenas de longitud par ≥ 2 se
obtienen concatenando de todas las formas posibles los cuatro bloques aa, ab, ba y
bb. Ası́ llegamos a la expresión
(aa ∪ ab ∪ ba ∪ bb)∗ .
Introducción a la Teorı́a de la Computación Capı́tulo 1 20
La expresión regular R = b∗ (ab∗ a)∗ b∗ no es una solución correcta porque en medio de dos
bloques de la forma ab∗ a no se podrı́an insertar bes. De modo que cadenas como abab2 aba
y ab3 ab4 ab5 a no harı́an parte de L[R], a pesar de que poseen un número par de aes.
Ejemplo Sea Σ = {0, 1}. Encontrar una expresión regular que represente el lenguaje
de todas las cadenas que no contienen dos ceros consecutivos.
Solución. La condición de que no haya dos ceros consecutivos implica que todo cero debe
estar seguido necesariamente de un uno, excepto un cero al final de la cadena. Por lo tanto,
las cadenas de este lenguaje se obtienen concatenado unos con bloques 01, de todas las
formas posibles. Hay que tener en cuenta, además, que la cadena puede terminar ya sea
en 1 o en 0. A partir de este análisis, llegamos a la expresión regular
(1 ∪ 01)∗ ∪ (1 ∪ 01)∗ 0.
Factorizando (1 ∪ 01)∗ , obtenemos otra expresión para este lenguaje: (1 ∪ 01)∗ (λ ∪ 0).
Otras dos soluciones análogas son:
(a ∪ c ∪ ?)∗ .
Introducción a la Teorı́a de la Computación Capı́tulo 1 21
Una b puede estar seguida solamente de otra b o de una a; por lo tanto, conjeturamos con
la expresión (a ∪ c ∪ b∗ a)∗ . Pero debemos permitir cadenas que terminen en bes; haciendo
el ajuste correspondiente llegamos a la primera solución:
(a ∪ c ∪ b∗ a)∗ b∗ .
(c ∪ b∗ a)∗ b∗ .
c∗ (a ∪ b ∪ ac∗ )∗ ,
(a ∪ c ∪ b+ a)∗ b∗ .
c∗ (a ∪ b ∪ ac+ )∗ .
Ejercicios de la sección 1.14
À Encontrar expresiones regulares para los siguientes lenguajes definidos sobre el al-
fabeto Σ = {a, b}:
(i) Lenguaje de todas las cadenas que comienzan con el sı́mbolo b y terminan con
el sı́mbolo a.
(ii) Lenguaje de todas las cadenas de longitud impar.
(iii) Lenguaje de todas las cadenas que tienen un número impar de aes.
(iv) Lenguaje de todas las cadenas en las que el número de bes es un múltiplo ≥ 0
de 3.
(v) Lenguaje de todas las cadenas que no comienzan con la subcadena ba ni ter-
minan en b.
(vi) Σ = {a, b}. Lenguaje de todas las cadenas que no contienen la subcadena bba.
Á Encontrar expresiones regulares para los siguientes lenguajes definidos sobre el al-
fabeto Σ = {0, 1, 2}:
(i) Lenguaje de todas las cadenas que comienzan con 2 y terminan con 1.
(ii) Lenguaje de todas las cadenas que no comienzan con 1 ni terminan en 2.
Introducción a la Teorı́a de la Computación Capı́tulo 1 22
(iii) Lenguaje de todas las cadenas que tienen exactamente dos ceros.
(iv) Lenguaje de todas las cadenas que tienen un número par de sı́mbolos.
(v) Lenguaje de todas las cadenas que tienen un número impar de sı́mbolos.
(vi) Lenguaje de todas las cadenas que no contienen dos unos consecutivos.
 Encontrar expresiones regulares para los siguientes lenguajes definidos sobre el al-
fabeto Σ = {0, 1}:
(i) Lenguaje de todas las cadenas que tienen por lo menos un 0 y por lo menos
un 1.
(ii) Lenguaje de todas las cadenas que no contienen tres ceros consecutivos.
(iii) Lenguaje de todas las cadenas cuya longitud es ≥ 4.
(iv) Lenguaje de todas las cadenas cuya longitud es ≥ 5 y cuyo quinto sı́mbolo, de
izquierda a derecha, es un 1.
(v) Lenguaje de todas las cadenas que no terminan en 01.
(vi) Lenguaje de todas las cadenas de longitud par ≥ 2 formadas por ceros y unos
alternados.
(vii) Lenguaje de todas las cadenas de longitud ≥ 2 formadas por ceros y unos
alternados.
(viii) Lenguaje de todas las cadenas que no contienen dos ceros consecutivos ni dos
unos consecutivos.
(ix) Lenguaje de todas las cadenas de longitud impar que tienen unos en todas las
posiciones impares.
(x) Lenguaje de todas las cadenas cuya longitud es un múltiplo de tres.
(xi) Lenguaje de todas las cadenas que no contienen cuatro ceros consecutivos.
(xii) Lenguaje de todas las cadenas que no comienzan con 00 ni terminan en 11.
(xiii) Lenguaje de todas las cadenas que no contienen la subcadena 101.