Professional Documents
Culture Documents
Capı́tulo 2
Autómatas Finitos
Los autómatas son máquinas abstractas muy simples que tienen la capacidad de reconocer
lenguajes. Históricamente, su estudio se originó con la llamada “máquina de Turing”,
que fue propuesta en 1936 por el matemático británico Alan Turing (1912–1954) con el
propósito de precisar las caracterı́sticas y las limitaciones de un dispositivo de computación
mecánica. En los años 40 y 50 del siglo XX se adelantaron investigaciones sobre máquinas
de Turing con capacidad restringida, lo que dio lugar a la noción de autómata finito.
3. q0 ∈ Q, estado inicial.
23
Introducción a la Teorı́a de la Computación. Capı́tulo 2 24
Una cadena de entrada u se coloca en la cinta de tal manera que el primer sı́mbolo de u
ocupa la primera casilla de la cinta. La unidad de control está inicialmente en el estado
q0 escaneando la primera casilla:
u
a a ··· b ≡ ···
Unidad q
de control 0
δ(q, s) = q 0
q q0
La unidad de control de un autómata siempre se desplaza hacia la derecha una vez procesa
o “consume” un sı́mbolo; no puede retornar ni tampoco sobre-escribir sı́mbolos sobre la
cinta.
Puesto que δ está definida para toda combinación estado-sı́mbolo, una cadena de en-
trada u cualquiera es procesada completamente, hasta que la unidad de control encuentra
la primera casilla vacı́a. Si el estado en el cual termina el procesamiento de u pertenece
a F , se dice que la entrada u es aceptada (o reconocida) por M ; de lo contrario, se dice
que u es rechazada (o no aceptada).
Ejemplo Consideremos el autómata definido por los siguientes cinco componentes:
Introducción a la Teorı́a de la Computación. Capı́tulo 2 25
Σ = {a, b}.
Q = {q0 , q1 , q2 }.
q0 : estado inicial.
F = {q0 , q2 }, estados de aceptación.
Función de transición δ:
δ a b
δ(q0 , a) = q0 δ(q0 , b) = q1
q 0 q0 q1
δ(q1 , a) = q1 δ(q1 , b) = q2
q 1 q1 q2
δ(q2 , a) = q1 δ(q2 , b) = q1 .
q 2 q1 q1
u
a a b a b ≡ ···
q 0 q 0 q 0 q 1 q 1 q 2
u
a a b a b a ≡ ···
q 0 q 0 q 0 q
1 q 1 q 2 q 1
≡ ≡ ···
q 0
Introducción a la Teorı́a de la Computación. Capı́tulo 2 26
s
q q0
Las etiquetas de los arcos entre nodos (estados) son entonces sı́mbolos del alfabeto de
entrada Σ. Si dos estados están unidos por dos arcos que tienen la misma dirección, basta
trazar un solo arco con doble etiqueta, separando los sı́mbolos con comas. Ası́ por ejemplo,
Introducción a la Teorı́a de la Computación. Capı́tulo 2 27
s
q q0
s, t
q q0
El grafo de un autómata es muy útil para hacer el seguimiento o rastreo completo del pro-
cesamiento de una cadena de entrada. Una cadena u es aceptada si existe una trayectoria
etiquetada con los sı́mbolos de u, que comienza en el estado q0 y termina en un estado de
aceptación.
Ejemplo Grafo del autómata presentado en la sección anterior.
Σ = {a, b}.
Q = {q0 , q1 , q2 }.
q0 : estado inicial.
F = {q0 , q2 }, estados de aceptación.
Función de transición δ:
δ a b
δ(q0 , a) = q0 δ(q0 , b) = q1
q0 q0 q1
δ(q1 , a) = q1 δ(q1 , b) = q2
q1 q1 q2
δ(q2 , a) = q1 δ(q2 , b) = q1
q2 q1 q1
a a
q0 b q1
a, b b
q2
Examinando directamente el grafo podemos observar fácilmente que, por ejemplo, la en-
trada aaababbb es aceptada mientras que aabaaba es rechazada.
Introducción a la Teorı́a de la Computación. Capı́tulo 2 28
q0 b q1
b
a
Ejemplo Sea Σ = {a, b} y L = a+ = {a, a2 , a3 , . . .}. AFD M tal que L(M ) = L:
a
a
q0 q1
a
b b
q2
b
a
q0 a q1
En la versión simplificada omitimos el estado limbo q2 :
Introducción a la Teorı́a de la Computación. Capı́tulo 2 29
Ejemplo Σ =∗ {a, b}. L = lenguaje de las cadenas que contienen exactamente dos aes
= b ab∗ ab∗ . AFD M tal que L(M ) = L, omitiendo el estado limbo:
b b b
q0 a q1 a q2
Ejemplo Σ = {0, 1}. L = lenguaje de las cadenas sobre Σ que tienen un número par
de sı́mbolos (cadenas de longitud par ≥ 0). AFD M tal que L(M ) = L:
0, 1
q0 q1
0, 1
Ejemplo Σ = {0, 1}. L = lenguaje de las cadenas sobre Σ que contienen un número
par de ceros. AFD M tal que L(M ) = L:
1 1
0
q0 q1
0
∗
Ejemplo Sean Σ = {a, b} y L = (b ∪ ab) . Construimos un AFD de tal forma que
el estado inicial q sea el único estado de aceptación y en él confluyan las
0
b
a
q0 q1
Ejercicios de la sección 2.3
À Sea Σ = {a, b}. Diseñar AFD (autómatas finitos deterministas) que acepten los
siguientes lenguajes:
(i) a∗ b∗ . (ii) a∗ ∪ b∗ .
(iii) (ab)∗ . (iv) (ab)+ .
(v) ab∗ ∪ b∗ a. (vi) a(a ∪ ab)∗ .
Introducción a la Teorı́a de la Computación. Capı́tulo 2 30
(vii) ab+ a∗ . Un AFD que acepte este lenguaje requiere como mı́nimo 5 estados más
un estado limbo (6 estados en total).
(vii) = a∗ b ∪ b∗ a. Un AFD que acepte este lenguaje requiere como mı́nimo 6 estados
más un estado limbo (7 estados en total).
(ix) b∗ (ab ∪ ba).
(x) b∗ (ab ∪ ba)a+ .
(i) Diseñar un AFD que acepte el lenguaje de todas las cadenas que contienen un
número par de aes y un número par de bes. Se entiende que par incluye a 0.
Ayuda: utilizar 4 estados.
(ii) Para cada combinación de las condiciones “par” e “impar” y de las conectivas
“o” e “y”, diseñar un AFD que acepte el lenguaje L definido por
 Sea Σ = {0, 1}. Diseñar AFD (autómatas finitos deterministas) que acepten los
siguientes lenguajes:
à Sea Σ = {a, b, c}. Diseñar AFD (autómatas finitos deterministas) que acepten los
siguientes lenguajes:
(i) a∗ b∗ c∗ .
(ii) a+ b∗ ∪ ac∗ ∪ b∗ ca∗ .
(iii) a∗ (ba ∪ ca)+ .
Ä Sea L = {a2i b3j : i, j ≥ 0} definido sobre el alfabeto Σ = {a, b}. Encontrar una
expresión regular para L y un AFD M tal que L(M ) = L.
Introducción a la Teorı́a de la Computación. Capı́tulo 2 31
3. q0 ∈ Q, estado inicial.
s qi3
q
s s
qi2
q i1
Introducción a la Teorı́a de la Computación. Capı́tulo 2 32
Es decir, para que una cadena u sea aceptada, debe existir algún procesamiento en el que
u sea procesada completamente y que finalice estando M en un estado de aceptación. En
términos del grafo del AFN, una cadena de entrada u es aceptada si existe por lo menos
una trayectoria etiquetada con los sı́mbolos de u, desde el estado q0 hasta un estado de
aceptación.
Ejemplo Sea M el siguiente AFN:
a a b
b
a ∆ a b
q0 q1 q2
q0 {q0 , q1 , q3 } ∅
a b q1 {q1 } {q2 }
q2 ∅ {q1 , q2 }
q3
q3 ∅ {q3 }
u
Procesamiento de rechazo: a b b ≡ ···
q0 q 1 q 2 q 2
Introducción a la Teorı́a de la Computación. Capı́tulo 2 33
u
Procesamiento de aceptación: a b b ≡ ···
q 0 q 3 q 3 q 3
u
Otro procesamiento de aceptación: a b b ≡ ···
q 0 q 1 q 2 q 1
u
Procesamiento abortado: a b b ≡ ···
q 0 q 0
El grafo de M nos permite ver que la cadena aabbaa es aceptada mientras que aabaa es
rechazada. También son rechazadas todas las cadenas que comienzan con b.
∗ +
Ejemplo Considérese el lenguaje L = ab ∪a sobre el alfabeto Σ = {a, b}. El siguiente
AFN M satisface L(M ) = L.
b
a
q0 q1
a
a
q2
Introducción a la Teorı́a de la Computación. Capı́tulo 2 34
Un AFD que acepte a L requiere como mı́nimo cuatro estados más un estado limbo (cinco
estados en total).
Ejemplo Σ = {0, 1}, L = (01 ∪ 010)∗ . El siguiente AFN acepta a L.
0
q0 1 q1
0 0
q2 q3
1
Otro AFN que acepta el mismo lenguaje y que tiene sólo tres estados es el siguiente:
0
q0 q1 1 q2
0
Ejercicios de la sección 2.4
À Sea Σ = {a, b}. Diseñar AFN (autómatas finitos no-deterministas) que acepten los
siguientes lenguajes:
Á Sea Σ = {0, 1}. Diseñar AFN (autómatas finitos no-deterministas) que acepten los
siguientes lenguajes:
0
q0 q1 1 q2
∆ 0 1
∆ 0 1 q0 {q1 } ∅
q0 {q1 } ∅ q1 ∅ {q0 , q2 }
q1 ∅ {q0 , q2 } q2 {q0 } ∅
q2 {q0 } ∅ {q0 , q2 } {q0 , q1 } ∅
{q0 , q1 } {q1 } {q0 , q2 }
Introducción a la Teorı́a de la Computación. Capı́tulo 2 36
0
{q0 } {q1 } {q2 }
1 0
0
{q0 , q2 } {q0 , q1 }
Los estados de aceptación son aquéllos en los que aparezca q0 ya que q0 es el único estado
de aceptación del autómata original.
Puesto que el estado {q2 } en el nuevo autómata no interviene en la aceptación de
cadenas, es inútil y puede ser eliminado. El autómata M 0 se puede simplificar en la
siguiente forma:
p0 0 p1
1 0
0
p2 p3
Ejemplo Sean Σ = {0, 1} y L2 el lenguaje de todas las cadenas de longitud ≥ 2 en
las que el segundo sı́mbolo, de derecha a izquierda es un 1. Una expresión
regular para este lenguaje es (0 ∪ 1)∗ 1(0 ∪ 1) y es fácil diseñar un AFN M que acepte a
L2 :
0, 1
1 0, 1
q0 q1 q2
Introducción a la Teorı́a de la Computación. Capı́tulo 2 37
Por simple inspección no es tan fácil diseñar un AFD que acepte a L2 , pero aplicando el
procedimiento de conversión podemos encontrar uno. Hacemos la tabla de la función de
transición ∆ y la extendemos con las nuevas combinaciones de estados.
∆ 0 1
q0 {q0 } {q0 , q1 }
q1 {q2 } {q2 }
q2 ∅ ∅
{q0 , q1 } {q0 , q2 } {q0 , q1 , q2 }
{q0 , q2 } {q0 } {q0 , q1 }
{q0 , q1 , q2 } {q0 , q2 } {q0 , q1 , q2 }
En el nuevo autómata los estados {q1 } y {q2 } resultan inútiles; una vez eliminados obte-
nemos el siguiente AFD equivalente al AFN M :
0
0
1
1 0
{q0 } {q0 , q1 } {q0 , q2 }
1 0
{q0 , q1 , q2 }
L(M ) = {u ∈ Σ∗ : ∆(q
b 0 , u) contiene por lo menos un estado de aceptación}.
donde
δ : ℘(Q) × Σ −→ ℘(Q)
(S, a) 7−→ δ(S, a) := ∆(S, a).
F 0 = {S ⊆ Q : S contiene por lo menos un estado de aceptación de M }.
Razonando por recursión sobre u, se demostrará para toda cadena u ∈ Σ∗ , δ({q0 }, u) =
∆(q0 , u). Para u = λ, claramente se tiene δ({q0 }, λ) = {q0 } = ∆(q0 , λ). Para u = a, a ∈ Σ,
se tiene
δ({q0 }, a) = ∆({q0 }, a) = ∆(q0 , a).
Supóngase (hipótesis recursiva) que δ({q0 }, u) = ∆(q0 , u), y que a ∈ Σ. Entonces
u ∈ L(M 0 ) ⇐⇒ δ({q0 }, u) ∈ F 0
⇐⇒ ∆(q0 , u) ∈ F 0
⇐⇒ ∆(q0 , u) contiene un estado de aceptación de M
⇐⇒ u ∈ L(M ).
Ejercicios de la sección 2.5
(i)
4
b
3 q0 a q1
b b
1
0 q2 q3
−5 −4 −3 −2 −1 0 1 2 a 3 4 5 6 7 8 9
Introducción a la Teorı́a de la Computación. Capı́tulo 2 40
a
(ii)
4
b
3 q0 a q1
b b
1
0 q2 q3
−5 −4 −3 −2 −1 0 1 2 a 3 4 5 6 7 8 9
b a
(iii)
3
a
q0 b q1 q2
2
1
b
−1 0 1 2 3 4 5 6 7 8 9 10 11 12 13
a
(iv)
3
b
q0 a q1 q2
2
a
1
0
−1 0 1 2 3 4 5 6
a 7 8 9 10 11 12 13
∆ : Q × (Σ ∪ {λ}) → ℘(Q).
q0 a q1 b q2
λ λ
q5 q3 a
b
a
q4
b
Introducción a la Teorı́a de la Computación. Capı́tulo 2 42
u
a b a b ≡ ···
q0 q 1 q 2 q 3 q 4
q 3
v
a a a b b ≡ ···
q0 q 3 q 3 q 3 q 4 q 4
q2
q3
También puede observarse sobre el grafo de M que para la cadena abbb hay dos trayectorias
de aceptación diferentes, a saber, abλbb y λλabbb.
Los AFN-λ permiten aún más libertad en el diseño de autómatas, especialmente cuando
hay numerosas uniones y concatenaciones.
Introducción a la Teorı́a de la Computación. Capı́tulo 2 43
Ejemplo Diseñar AFN-λ que acepten los siguientes lenguajes:
Las expresiones regulares para estos dos lenguajes se pueden obtener a partir de las tres
sub-expresiones a∗ , (ab ∪ ba)∗ y b+ , para las cuales es fácil diseñar autómatas.
a
1
0
−11 −10
Autómata
−9 −8
que
−7
acepta
−6
a−5∗ : −4 −3 −2 −1
q1
0 1 2
q3
4
a
3 b
∗ q2
Autómata que acepta (ab ∪ ba) :
2 a
1 b
q4
0
−5 −4 −3 −2 −1 0 1 2 3 4 5 6 7 8 9 10
b
1
+ q5 b q6
0
−11 −10
Autómata
−9 −8
que
−7
acepta
−6
b−5 : −4 −3 −2 −1 0 1 2 3 4 5
(1) Para aceptar a∗ ∪(ab∪ba)∗ ∪b+ utilizamos un nuevo estado inicial q0 y tres transicio-
nes λ que lo conectan con los tres autómatas anteriores. Los estados de aceptación
se mantienen. Esta manera de unir autómatas la llamaremos “conexión en parale-
lo”. Desde el estado inicial q0 el autómata puede proseguir el procesamiento de una
entrada por tres caminos diferentes para aceptar a∗ , (ab∪ba)∗ y b+ , respectivamente:
Introducción a la Teorı́a de la Computación. Capı́tulo 2 44
a
7
6 q1
λ q3
4
a
3 b
q0 λ q2
2 a
1 b
q4
0
λ
b
−1
−2 q5 b q6
2 3 4 5 6 7 8 9 10 11 12
(2) Para aceptar a∗ (ab ∪ ba)∗ b+ unimos linealmente los tres autómatas por medio de
transiciones λ. Esta manera de unir autómatas la llamaremos “conexión en serie”.
Nótese que hay un único estado de aceptación correspondiente al bucle final b∗ . Los
estados q1 y q2 no pueden ser de aceptación en el nuevo autómata:
5
q3
4
a a b
3 b
q1 λ q2 λ q5 b q6
2 a
1 b
q4
0
2 3 4 5 6 7 8 9 10 11 12 13 14
Ejercicios de la sección 2.6
À Sea Σ = {a, b}. Diseñar AFN-λ (autómatas finitos no-deterministas con transicio-
nes λ) que acepten los siguientes lenguajes:
(i) (ab ∪ b)∗ ab∗ a∗ .
Introducción a la Teorı́a de la Computación. Capı́tulo 2 45
Á Sea Σ = {0, 1}. Diseñar AFN-λ (autómatas finitos no-deterministas con transicio-
nes λ) que acepten los siguientes lenguajes:
(i) (1 ∪ 01 ∪ 001)∗ 0∗ 1∗ 0+ .
(ii) 0+ 1(010)∗ (01 ∪ 10)∗ 1+ .
(iii) (101)∗ ∪ 1∗ (1 ∪ 10)∗ 0+ (01 ∪ 10)∗ .
∆0 : Q × Σ −→ ℘(Q)
∆0 (q, a) := λ ∆(λ[q], a) .
(q, a) 7−→
grafo que aparece a continuación, que es una porción de un AFN-λ. Por simple inspección
observamos que, una vez procesada una a, el autómata puede pasar desde el estado q
a uno de los siguientes estados: {q9 , q10 , q11 , q12 , q3 , q4 , q5 , q6 , q8 }. Para obtener esta lista de
estados se tienen en cuenta todas las posibilidades, o sea las transiciones λ que preceden
o siguen el procesamiento del sı́mbolo a.
a
q9 q7 q8 q4
a λ λ
λ λ a
q q1 q2 q3
a
a
λ
q10 q11 q5
λ λ
q12 q6
obtenida arriba por simple inspección. De esta forma M 0 simula las transiciones λ de M
teniendo en cuenta todas las posibles trayectorias.
Ejemplo Utilizar la construcción del Teorema 2.7.1 para encontrar un AFN equivalente
al siguiente AFN-λ M .
q1
a b a b
q0 λ q2 λ q3
Introducción a la Teorı́a de la Computación. Capı́tulo 2 47
3 q1
2
a b a b
b a
1
q0 a q2 b q3
0
−1
0 1 2 3
a,4 b 5 6 7 8
Puesto que q3 , que es el único estado de aceptación del autómata original M , pertenece
a λ[q0 ], a λ[q2 ] y a λ[q3 ], los tres estados q0 , q2 y q3 son estados de aceptación en el
autómata M 0 .
Ejercicios de la sección 2.7
Utilizando el procedimiento presentado en esta sección, construir AFN equivalentes a los
siguientes AFN-λ:
b a
À
3
a
q0 λ q1 q2
2
1
b
0
−1 0 1 2 3 4 5 6 λ 7 8 9 10 11 12 13
Introducción a la Teorı́a de la Computación. Capı́tulo 2 48
6 Á λ
a
5
q0 λ q1 b q2
4
2
λ a
q3
1
0 b
−3 −2 −1 0 1 2 3 4 5 6 7 8 9 10
1 0, 1
M: 0
q0 q1 0 q2
1 0, 1
M: 0
q0 q1 0 q2
a, b
q0 b q1
a, b
q0 b q1
Utilizar la noción de complemento de un AFD para diseñar AFD que acepten los siguientes
lenguajes:
À El lenguaje de todas las cadenas que no contienen la subcadena bc. Alfabeto: {a, b, c}.
Á El lenguaje de todas las cadenas que no tienen tres unos consecutivos. Alfabeto:
{0, 1}.
 El lenguaje de todas las cadenas que no terminan en 01. Alfabeto: {0, 1}.
à El lenguaje de todas las cadenas que no terminan en 22. Alfabeto: {0, 1, 2}.
Introducción a la Teorı́a de la Computación. Capı́tulo 2 50
M1 × M2 = (Σ, Q1 × Q2 , (q1 , q2 ), F, δ)
donde el estado inicial (q1 , q2 ) está conformado por los estados iniciales de los dos autóma-
tas, y la función de transición δ está dada por
δ : (Q1 × Q2 ) × Σ −→ Q1 × Q2
δ((qi , qj ), a) = (δ1 (qi , a), δ2 (qj , a)).
(iii) Si F = {(qi , qj ) : qi ∈ F1 ó qj ∈
/ F2 } entonces L(M1 × M2 ) = L1 − L2 . Es decir, para
aceptar L1 − L2 , en el autómata M1 × M2 se escogen como estados de aceptación
los pares de estados (qi , qj ) en los que el primero es de aceptación y el segundo no
lo es.
(2.9.1) b i , qj ), u) = (δb1 (qi , u), δb2 (qj , u)) para toda cadena u ∈ Σ∗ , qi ∈ Q1 , qj ∈ Q2 .
δ((q
recursiva que (2.9.1) se cumple para una cadena arbitraria u; se pretende establecer la
igualdad para la cadena de entrada ua, donde a ∈ Σ. Se tiene
δ((q
b i , qj ), ua) = δ(δ((q
b i , qj ), u), a) (definición de δ)
b
= δ((δb1 (qi , u), δb2 (qj , u)), a) (hipótesis recursiva)
= (δ1 (δb1 (qi , u), a), δ2 (δb2 (qj , u), a)) (definición de δ)
= (δb1 (qi , ua), δb2 (qj , ua)) (definición de δb1 y δb2 ).
u ∈ L(M ) ⇐⇒ δ((q
b 1 , q2 ), u) ∈ F ⇐⇒ (δb1 (q1 , u), δb2 (q2 , u)) ∈ F.
Ejemplo Utilizar el Teorema 2.9.1 para construir un AFD que acepte el lenguaje L de
todas las cadenas sobre el alfabeto Σ = {a, b} que tienen un número par de
aes y un número par de bes.
Solución. En el ejercicio Á de la sección 2.3 se pidió diseñar, por ensayo y error, un
AFD para aceptar este lenguaje. Ahora podemos proceder sistemáticamente siguiendo el
método del teorema Teorema 2.9.1 ya que el lenguaje L se puede escribir como L = L1 ∩L2
donde L1 es el lenguaje de las cadenas con un número par de aes y L2 es el lenguaje de las
cadenas con un número de par de bes. Esto nos permite utilizar la parte (ii) del Teorema
a partir de autómatas que acepten a L1 y L2 , respectivamente.
AFD M1 que acepta L1 (cadenas con un número par de aes):
b b
a
q1 q3
b
(q1 , q2 ) (q1 , q4 )
b
a a a a
b
(q3 , q2 ) (q3 , q4 )
b
Ejemplo Utilizar el Teorema 2.9.1 para construir un AFD que acepte el lenguaje L de
todas las cadenas sobre el alfabeto Σ = {a, b} que tienen un número par de
bes pero que no contienen la subcadena bb.
Este problema se puede resolver de dos maneras ya que el lenguaje L se puede expresar ya
sea como una diferencia o como una intersección de lenguajes. Consideremos los lenguajes:
Entonces L = L1 − L2 y también L = L1 ∩ L3 .
Solución 1. Utilizamos la parte (iii) del Teorema 2.9.1 expresando L como L = L1 − L2 .
Para ello encontramos fácilmente un AFD M1 que acepta el lenguaje L1 :
a a
M1 : b
q1 q3
a a, b
M2 : b
q2 q4 b q5
(q1 , q2 )
a a b
b a
(q1 , q4 ) (q3 , q2 ) (q3 , q4 )
b b
b
(q3 , q5 ) (q1 , q5 )
Se observa que los estados (q3 , q5 ) y (q1 , q5 ) son “estados limbo” que no conducen a la
aceptación. El autómata simplificado se reduce al mostrado en el siguiente grafo.
a
(q1 , q2 )
a a b
b a
(q1 , q4 ) (q3 , q2 ) (q3 , q4 )
Solución 2. Utilizamos la parte (ii) del Teorema 2.9.1 expresando L como L = L1 ∩L3 . Para
obtener un AFD que acepte L3 basta formar el complemento del autómata M2 (mostrado
en la página 53). Obtenemos ası́ el siguiente AFD M3 :
Introducción a la Teorı́a de la Computación. Capı́tulo 2 55
a a, b
M3 : b
q2 q4 b q5
À Utilizar el Teorema 2.9.1 para construir AFD que acepten los siguientes lenguajes
sobre el alfabeto {0, 1}:
(i) El lenguaje L de todas las cadenas que tienen longitud par o que terminan en
10.
(ii) El lenguaje L de todas las cadenas que tienen longitud impar y que terminan
en 01.
(iii) El lenguaje L de todas las cadenas que tienen longitud impar y que no terminan
en 11.
Á Utilizar el Teorema 2.9.1 para construir AFD que acepten los siguientes lenguajes
sobre el alfabeto {a, b, c}:
(i) El lenguaje L de todas las cadenas que tienen longitud par y terminan en a.
(ii) El lenguaje L de todas las cadenas que tienen longitud par o que tienen un
número impar de c’s.
(iii) El lenguaje L de todas las cadenas que tienen longitud impar y que tienen un
número par de ces.
Introducción a la Teorı́a de la Computación. Capı́tulo 2 56
(iv) El lenguaje L de todas las cadenas que tienen longitud impar y que no terminan
en c.
(v) El lenguaje L de todas las cadenas de longitud impar que tengan exactamente
dos aes.