Вы находитесь на странице: 1из 32

Lógica e Inteligencia Artificial

Semestre I-2011
Automatización
del razonamiento
Autómata Finito No Determinista
Un AFN es una 5-tupla (S,Σ,δ,s0,F) donde:
S : conjunto de estados
Σ : conjunto de símbolosdeentrada
δ: funciónde transición
δ: S xΣ→P(S)
s0 ∈∈S : estado inicial
F ⊆⊆S : conjunto de estados finales (o de
aceptación)
AFN
d
c 5 6
a
inicio d
1 3

c
b a
4

2
1) S ={1,2,3,4,5,6}
2) Σ ={a,b,c,d}
3) δ(1,c)={1} δ(1,d)={3} δ(1,a)={2,5} δ(2,b)={1}
δ(2,ε)={4} δ(1,c)={4} δ(5,d)={6}
1) s0 = 1
2) F = {3,6}
Cómo funciona un AFN?
Dado un string, debe determinar si lo acepta
o no.
El string c1c2...cn es aceptado por un AFN
cuando existe, en el grafo de transiciones,
un camino
c1 c2 cn
s0→s1→s2→... →sm-1→sm
de manera que sm es un estado final (de
aceptación)
¿Aceptaría el autómata “abcd”? ¿Y ”acd”?

inicio d
1 3

b a

2
¿Aceptaría el autómata “abcd”?

d
c 5 6
a
inicio d
1 3

c
b a
4

2

El indeterminismo puede generar problemas de eficiencia


(“backtraking”)
AFD
Un Autómata Finito Determinista (AFD) es
un caso particular de AFN
Es decir:
–toda transición exige un símbolo distinto de ∈
–desde un estado, no hay dos arcos
etiquetados con el mismo símbolo
AFD
Boolean simulaAFD(cadena x,AFD A)
Simular un AFD es
/* Pre: x es la cadena a aceptar A=(S,Σ,δ,s0,F) es
muy sencillo y el AFD
eficiente. En lo que Post:acep = x es aceptado por A */
sigue: {
–dada una e.r., estado sAct ∪{ERROR};
generar el AFN Int i:
–Convertir el AFN en
<i,sAct>=<1,s0>
un AFD y while( sAct<>ERROR and i<=length(x)){
minimizarlo sAct=mueve(A,sAct,x[i])
–Implementar el AFD i=i+1
}
acep=(sAct∈F)
return acep;
}
Conversión de una expresión regular a AFN

Objetivo: dada una expresión regular,


generar un AFD que la reconozca
Método: construcción de Thompson (Bell
Labs.)
AF para ∈
inicio ∈
S1 S2

AF para ‘a’ ∈Σ

inicio a
S1 S2
Conversión de una expresión regular a AFN

AF para la expresión regular R1R2

R1 ∈ R2
inicio

AF para la expresión regular R1|R2

R1
S1 S2
inicio
R2
AF para la expresión regular R* ∈
R1 ∈

S1 S2
inicio ∈

AF para un conjunto ER

inicio S1 R1 ∈

∈ ∈
S2 R2 S



S3
R3 ∈


Conversión de una expresión
regular a AFN
Ejemplo: proceso de construcción para
(ab|c)*d

inicio (ab|c)* ∈ d
1 2


inicio ∈ (ab|c)* ∈ ∈ d
3 4 1 2


Conversión de una e.r. en un AFN

∈ ab ∈
inicio ∈ ∈5 ∈ ∈ d
3 8 4 1 2
∈ ∈
c
6 7

a ∈ b
9 10 11 12


inicio ∈ ∈5 ∈ ∈ d
3 8 4 1 2
∈ ∈
c
6 7

Conversión de AFN a AFD
a

Am
inicio b
0 igü
a
1
b
2
b *
ed 3
ad

b a

a
1 2

Am
inicio
0
big
üe
d ad b

∈ b
3 4
Trasformación de AFN a AFD
La idea básica es que un estado del AFD
agrupa un conjunto de estados del AFN
inicio ∈
a
1 2 5

a a a
b b
3 4

inicio a
b
1,2 3,4,5 4,5

a a
b
5
Transformación de un AFN en un AFD
Sea = (S,Σ,δ, s0,F) un AFN
∈-clausura de s ∈S
Conjunto de estado de N alcanzables desde s usando
transiciones ∈
- ∈-clausura de T⊆S
∪ clausura∈(s)
s∈T
- mueve(T,c)
Conjunto de estados a los que se puede llegar desde
algún estado de T mediante la transición c
Algoritmo simulador de AFN
boolean simulaAFN(x,A)
{/* Pre: x es la cadena a aceptar
A=(S,Σ,δ,s0,F) es el AFN
Post:acep = x es aceptado por A */
Conjunto(estados ∪{ERROR}) T
int i
<i,T>:=<1,clausuraε({s0})>
While(T<>{ERROR} and i<=length(x)){
T =clausuraε(mueve(A,T,x[i]))
i =i+1
}
acep =(T∩ F<>∅)
return acep
}
AFD
Como es lógico, cuantos más estados tiene un AF,
más memoria es necesaria
El número de estados del AFD se puede/debe
minimizar
inicialmente, dos estados:
• uno con los de aceptación
• otro con los demás
sucesivas particiones de estados “globales” que no
concuerdan con algún sucesor para un símbolo de entrada
El AFD mínimo equivalente es único
Ejemplo
b c
a 2 3 4
inicio
1
d b c
5 6 7

c
1,2,3,5,6 4,7

b c
1,2, 5 3,6 4,7

a b c
1 2,5 3,6 4,7
d
Ejercicio
Los identificadores para un determinado
lenguaje de programación se definen de
acuerdo con la siguiente descripción: Un
identificador puede empezar con una letra o un
"underscore" (_), debe estar seguido por 0 ó
más letras, dígitos o underscores, pero con las
restricciones siguientes:
1) No pueden aparecer dos underscores
seguidos
2) Un identificador no puede terminar con un
underscore.Además, no hay ninguna limitación
en cuanto a la longitud de los identificadores.
Ejercicio
Dibujar el Autómata Finito Determinista
que corresponde a los identificadores
descritos anteriormente. Para etiquetar los
arcos, en lugar de utilizar caracteres
simples utilizar las siguientes clases de
caracteres:
letra [a-zA-Z] digito [0-9] und “_"
Ejercicio
Q={q1,q2} Para w=abba
(q1, abba, Z) ├ (q1, bba, AZ)
Σ = {a,b}
├ (q1, ba, Z)
Γ = {A,B,Z}
├ (q1, a, BZ)
s = q1
├ (q1, ε, Z)
F ={q2} ├ (q2, ε, Z)
z=Z
Δ (q1, ε,Z)={(q2,Z)}
Δ (q1, a,Z)={(q1,AZ)} Qué movimientos realiza para las cadenas:
Δ (q1, b,Z)={(q1, BZ)}
Δ (q1, a,A)={(q1,AA)} *abaababb
Δ (q1, b,A)={(q1, ε)} *abaa
Δ (q1, a,B)={(q1, ε)} ¿son aceptadas por M?
Δ (q1, b,B)={(q1, BB)}
Definición
Un autómata de pila es una 7-tupla
M=(Q,Σ,Γ, Δ , s, F, z) donde:
Q es un conjunto finito de estados
Σ es un alfabeto de entrada finito
Γ es un alfabeto de la pila finito
Δ ⊆ (Q × Σ* × Γ*) × (Q × Γ*) es la regla de
transición de estados
s ∈ Q es el estado inicial
F ⊆ Q es el conjunto de estados finales
z ∈ Γ es el símbolo inicial de la pila
Ejercicio
Q={q1, q2 ,q3}
Σ = {a,b}
Γ = {a,b,z}
s = q1
F ={q3}
z = simbolo inicial de la pila Dibujar y describir los movimientos
Δ (q1, a,z)={(q1,az)} que realiza sobre las cadenas
Δ (q1, a,a)={(q1,aa)} •c
Δ (q1, a,b)={(q1,ab)} • abcba
Δ (q1, b,z)={(q1,bz)}
• abcab
Δ (q1, b,a)={(q1,ba)}
Δ (q1, b,b)={(q1,bb)} • babbcbbab
Δ (q1, c,z)={(q2, z)}
Δ (q1, c,a)={(q2,b)}
Δ (q2, c,b)={(q2,b)}
Δ (q2, a,a)={(q2, ε)}
Δ (q2, b,b)={(q2, ε)}
Δ (q2, ε,z)={(q3, z)}
Ejercicio
El lenguaje
L = {wwi | w ∈ {a,b}+ }

es similar al lenguaje de este ejemplo, excepto porque no


hay ningún carácter que marque el limite entre w y wi. Por
tanto para que un autómata de pila no determinista acepte
L tendrá que existir una elección no determinista en un
punto medio que pasa de apilar caracteres en la pila a
compararlos y desapilarlos. Usar el ejemplo anterios como
punto de partida y construir un autómata no determinsta
que acepte L añadiendo o eliminando las transiciones
apropiadas
Ejemplo
¿Cuál es el lenguaje que reconoce?
Q ={q1,q2,q3,q4}
Σ = {a,b} Acción no determinista
Γ = {A,B}
Δ definida en la tabla Desempila B y cambia de estado
s = q1
F ={q4} Empila B sobre la pila y no cambia de estado
z=A

Δ
(a,A) (b,A) (ε,A) (a,B) (b,B) (ε,B)

q1 {(q2,BA),(q4,A)} {(q4, ε)}

q2 {(q2,BB} {(q3, ε)}


Ejercicios
Construir los autómatas que acepten
{anbn| n≥0}
{anb2n| n≥0}
{anbmcn+m | n≥0 y m ≥0 }
{anbm| n≤ m ≤ 3n}
{w ∈ {a,b}*|w contiene una a mas que bes}
{anbm | n≥0 y m ≠ n}
{w1cw2| w1,w2 ∈ {a,b}* y w1 ≠ wi2}
Ejercicio
Lenguaje definido por:
L={w ∈ {a,b}*| w contiene la misma cantidad
de aes que de bes}
Máquina de Turing
ALAN MATHISON TURING
1912-1954
FATHER OF COMPUTER SCIENCE,
MATHEMATICIAN, LOGICIAN, WARTIME
CODEBREAKER, VICTIM OF
PREJUDICE
"Mathematics, rightly viewed, possesses
not only truth but supreme beauty, a beauty
cold and austere like that of sculpture."