Tema 4. Autómatas Finitos 4.1. Autómatas finitos. 4.1.1. Introducción. 4.1.2. Máquinas secuenciales. 4.2.1. 4.2.2. 4.2.3. 4.2.4. 4.2.5. 4.3.1. Minimización por el conjunto cociente. 4.3.2. Minimización por tablas. 4.4.1. 4.4.2. 4.4.3. 4.4.4. 4.4.5. 4.2. Autómatas finitos deterministas (A.F.D.). Introducción. Definición AFD. Representación. Extensión a palabras. Lenguaje aceptado por un AFD. Simulación algorítmica de un AFD 4.3. Minimización de Autómatas finitos. 4.4. Autómatas finitos no deterministas (A.F.N.D.). Introducción. Definición AFND. Representación. Extensión a palabras. Lenguaje aceptado por un AFND. Simulación algorítmica de un AFND 4.5. Equivalencia entre A.F.D. y A.F.N.D. TALF. Tema 4 nº 1 4.1.1. Autómatas Finitos. Introducción. Autómatas con salidas: Máquina de Moore. Salida asociada al estado. Máquina de Mealy. Salida asociada a la transición. Autómatas reconocedores de lenguajes regulares: Autómata Finito Determinista (AFD) Autómata Finito No Determinista (AFND) salidas: TALF. Tema 4 reconoce , no reconoce cadenas de un lenguaje regular; 0o1 nº 2 4.1.2. Máquinas secuenciales. Dado en prácticas. TALF. Tema 4 nº 3 4.2. Autómatas Finitos Deterministas. Introducción Un autómata finito es un conjunto de estados y un control que se mueve de un estado a otro en respuesta a entradas externas. Los autómatas finitos se pueden clasificar en función del tipo de control como: Deterministas, el autómata únicamente puede estar en un estado en un momento determinado. No Deterministas, el autómata puede estar en varios estados simultáneamente. Ambos definen los mismos lenguajes (regulares), sin embargo los No deterministas permiten describir más eficientemente determinados problemas. TALF. Tema 4 nº 4 4.2. Autómatas finitos deterministas (AFD). Introducción ¿Cómo procesa entradas un AFD? La entrada a un AF es un conjunto de símbolos tomados del alfabeto de entrada ∑, no hay límite en tamaño de la cadena. Existe un “puntero” que en cada momento apunta a una posición de la cadena de entrada. El autómata está siempre en un estado de Q, inicialmente se encuentra en el estado q0. a a a b a b a c c ... b q0 TALF. Tema 4 nº 5 4.2. Autómatas finitos deterministas (AFD). Introducción ¿Cómo procesa entradas un AFD? En cada paso el autómata lee un símbolo de la entrada y según el estado en el que se encuentre, cambia de estado y pasa a leer otro símbolo. a a a b a b a c c ... b qq03 2i TALF. Tema 4 Así sucesivamente hasta que se terminen de leer todos los símbolos de la cadena de entrada. Si en ese momento el AF está en un estado qi de F, se dice que acepta la cadena, en caso contrario la rechaza. nº 6 4.2.2. Autómatas finitos deterministas(AFD). Definición. Un autómata finito es una quíntupla M=(Q,∑,f,q0,F) : Q es un conjunto finito llamado conjunto de estados. ∑ es un conjunto finito de símbolos, llamado alfabeto de entrada. f es una aplicación llamada función de transición f: Q ∑ Q q0 es un elemento de Q, llamado estado inicial. F es un subconjunto de Q, llamado conjunto de estados finales. TALF. Tema 4 nº 7 4.2.2. Representación AFD. Tablas de transición. Es una representación clásica de una función con dos argumentos. En las filas se colocarán los estados y en las columnas los símbolos del alfabeto de entrada. Cada intersección fila (estado q) - columna (carácter a) corresponde al estado f(q,a). El estado inicial se representa con Los estados finales con un * Ejemplo: TALF. Tema 4 0 1 q2 q0 1 q1 q1 q2 q2 q1 q0 *q nº 8 4.2.2. Representación AFD. Diagramas de transición. Es un grafo en el que los vértices representan los distintos estados y los arcos las transiciones entre los estados. Cada arco va etiquetado con el símbolo que corresponde a dicha transición. El estado inicial se representa con Los estados finales con un con doble círculo. 1 q0 TALF. Tema 4 0 0 0, 1 1 q2 q1 nº 9 4.2.2. Representación AFD. Determinismo porque: No existen transiciones λ qQ , a∑ una única f(q,a) : una sóla arista etiquetada con a para cada símbolo; Para cada entrada en la tabla un solo estado La indeterminación en el caso que falten transiciones para algunas entradas se resuelve incluyendo un nuevo estado, llamado de absorción o muerto, al cual llegan todas las transiciones no definidas. Ejemplo: q0 *q 1 q2 TALF. Tema 4 0 1 q1 q2 - - q1 - 1 q0 q2 0 0 q1 0 1 q0 q1 q2 *q 1 M M q2 q1 M M M M 1 0, 1 1 M 0, 1 nº 10 4.2.3. AFD. Extensión de f a palabras. Si M=(Q,∑,f,q0,F) es un AFD se define la función de transición asociada a palabras como la función f´: Q ∑* Q dada por: f´(q,λ)=q f´(q,a)=f(q,a) f´(q,ax)=f´(f(q,a),x) donde x∑* y a∑ TALF. Tema 4 nº 11 4.2.4. Lenguaje aceptado por un AFD. Una cadena x∑* es aceptada por un autómata M=(Q,∑,f,q0,F) si y solo si f’(q0,x)F. En otro caso la cadena es rechazada por el autómata. El lenguaje aceptado o reconocido por un autómata es el conjunto de las palabras de ∑* que acepta: L(M)={x∑* / f’(q0,x)F} TALF. Tema 4 nº 12 4.2.5. Simulación algorítmica de un AFD Entrada: cadena de entrada x que termina con un carácter fin de cadena o fin de archivo (FDC). Salida: La respuesta ACEPTADA si el autómata reconoce x NO ACEPTADA en caso contrario Método: aplicar f al estado al cual hay una transición desde el estado q a un carácter de entrada c Función reconocer() q=q0 c= leer_carácter() Mientras c != FDC q=f(q,c) c= leer_carácter() fmientras Si q F entonces Devolver(ACEPTADA) Sino Devolver(NO ACEPTADA) fsi TALF. Tema 4 nº 13 4.2.5. Simulación algorítmica de un AFD. Ejemplo. Ejemplo:AFD que reconozca el nombre de variables empezando por letra y seguida de letras o dígitos. q1 letra q0 letra|digito letra|digito letra digito q0 q1 q2 *q 1 q1 q1 q2 q2 q2 digito q2 TALF. Tema 4 nº 14 4.2.5. Simulación algorítmica de un AFD. Ejemplo. Función reconocer_id() //Por el diagrama estado=0 s= leer_simbolo() Mientras s != FDC Caso estado sea 0: Si s=letra entonces estado=1 sino Si s=digito entonces estado=2 sino Error() //salir a la rutina de error léxico fsi fsi 1: Si s=letra or digito entonces estado=1 sino Error() //salir a la rutina de error léxico fsi 2: Si s=letra or digito entonces estado=2 sino Error() //salir a la rutina de error léxico fsi fcaso s= leer_simbolo() fmientras Si estado=1 entonces Devolver(SI) Sino Devolver(NO) fsi TALF. Tema 4 nº 15 4.2.5. Simulación algorítmica de un AFD. Ejemplo. Función reconocer_id() //por la tabla estado=0 s= leer_simbolo() Mientras s != FDC Caso s sea letra: entrada=letra digito: entrada=digito otro: Error() //salir a la rutina de error léxico fcaso estado= f(estado,entrada) s= leer_simbolo() fmientras Si estado=1 entonces Devolver(SI) Sino Devolver(NO) fsi TALF. Tema 4 nº 16 4.3.1. Minimización de Autómatas finitos por el conjunto cociente. Algoritmo para construir el conjunto cociente Q/En 1. Q/E1 = {c1 =qiF, c2 =qjQ-F} 2. Sea Q/Ei={c1, c2, ..., cj}. Q/Ei+1 se construye: p y q están en la misma clase si y solo si p,qck y a se verifica que f (p,a) y f (q,a) están en la misma clase cm de Q/Ei 3. Si Q/Ei=Q/Ei+1 entonces Q/Ei=Q/E , en caso contrario aplicar el paso 2. partiendo de Q/Ei+1 TALF. Tema 4 nº 17 4.3.1. Minimización de Autómatas finitos por el conjunto cociente. Dado el AFD M=(Q,∑,f,q0,F) existe un único AFD equivalente mínimo (Autómata del conjunto cociente) Mm=(Qm, , fm, q0m, Fm ) Donde Qm=Q/E a, fm(ci,a)=cj si pcj, qci /f(q,a)=p q0m=c0 si q0c0 y c0 Qm Fm= {ci / pci y pF} TALF. Tema 4 nº 18 4.3.1. Minimización de AFD por el conjunto cociente. Ejemplo Ejemplo: M=( {0,1},{q0,q1,q2,q3,q4}, f, q0,{q4}) 0 f 0 1 q0 q1 q2 q1 q1 q3 q2 q1 q2 q3 q1 q4 *q4 q1 q2 TALF. Tema 4 q1 0 q0 0 1 1 0 0 1 q2 q3 1 q4 1 nº 19 4.3.1. Minimización de AFD por el conjunto cociente. Ejemplo Conjunto cociente 1. Conjunto inicial Q/E1=({q0,q1, q2,q3},{q4}) 2. Q/Ei 2.1. Q/E2=({q0,q1,q2},{q3}, {q4}) 3. Q/E2 Q/E1 paso 2 2.2. Q/E3=({q0,q2},{q1},{q3},{q4}) 4. Q/E3 Q/E2 paso 2 f 0 1 q0 q1 q2 q1 q1 q3 q2 q1 q2 q3 q1 q4 *q4 q1 q2 2.3. Q/E4=({q0,q2},{q1},{q3},{q4}) 5. Q/E4= Q/E3 = Q/E TALF. Tema 4 nº 20 4.3.1. Minimización de AFD por el conjunto cociente. Ejemplo Autómata mínimo equivalente: Mm=({0,1},{c0,c1,c2,c3},fm,qom) Qm=(c0={q0,q2}, c1={q1}, c2={q3}, c3={q4}) f 0 1 q0 q1 q2 q1 q1 q3 q2 q1 q2 q3 q1 q4 *q4 q1 q2 fm 0 1 c0 c1 c0 c1 c1 c2 c2 c1 c3 *c3 c1 c0 1 c0 1 c3 0 0 1 c2 TALF. Tema 4 0 1 c1 nº 21 0 4.3.1. Minimización de Autómatas finitos por tablas. Dado en prácticas. TALF. Tema 4 nº 22 4.4.1. Autómatas Finitos No Deterministas. Introducción Un autómata finito es no determinista si: No f(q,a) para algún a∑ desde algún q Q a q2 b mas de una f(q,a) desde q Q con a∑ a a q1 ∑={a,b} q0 a ∑={a,b} q0 b a q1 q2 b f(q,λ) λ q0 b TALF. Tema 4 q1 q2 a ∑={a,b} b nº 23 4.4.2. Definición AFND. Un autómata finito no determinista (AFND) es un modelo matemático definido por la quíntupla M=(Q, ∑,f, q0, F) en el que: Q es un conjunto finito llamado conjunto de estados. ∑ es un conjunto finito de símbolos, llamado alfabeto de entrada. f es una aplicación llamada función de transición definida como: f: Q (∑ λ) P(Q) donde P(Q) es el conjunto de las partes de Q, es decir, conjunto de todos los subconjuntos que se pueden formar con elementos de Q q0 es un elemento o estado de Q, llamado estado inicial. F es un subconjunto de Q, llamado conjunto de estados finales. TALF. Tema 4 nº 24 4.4.2. Representación. Tablas de transición. 0 1 2 λ q0 {q0,q1} {q0} q1 {q1} {q1,q2} {q0,q2} *q {q2} {q2} 2 Diagramas de transición. 0,1 q0 0,2 0 1,2 λ,2 q1 q2 λ TALF. Tema 4 nº 25 4.4.3. función de transición. Extensión a palabras. Definición λ-clausura: Se llama λ-clausura de un estado al conjunto de estados a los que puede evolucionar sin consumir ninguna entrada, lo denotaremos como CL(q) o λ-clausura(q). CL(q) se define recursivamente: El estado q pertenece a la λ-clausura de q, qCL(q). Si el estado pCL(q) y hay una transición del estado p al estado r etiquetada con una transición nula (λ), entonces r también está en CL(q). Si PQ se llama λ-clausura de un conjunto de estados P a: CL(P)= qP CL(q) Algoritmo para el cálculo de λ-clausura(P) Procedimiento λ-clausura(P) Viejos= Nuevos=P Mientras viejosnuevos hacer Nuevos=viejos {q / f(pi,λ)=q, piviejos} Fmientras λ-clausura(P)=nuevos Fin_procedimiento TALF. Tema 4 nº 26 4.4.3. función de transición. Extensión a palabras. Si M=(Q,∑,f,q0,F) es un AFND se define la función de transición asociada a palabras como la función f’: Q ∑* P(Q) dada por: f’(q0,λ)=CL(q0) f’(P,λ)=P f’(P,ax)= f’( CL( f(q,a)),x) qP donde PQ, x∑* y a∑ TALF. Tema 4 nº 27 4.4.4. Lenguaje aceptado por un AFND. Una cadena x∑* es aceptada por un AFND M=(Q,∑,f,q0,F) si y solo si f’(q0,x) F En otro caso se dice que la cadena es rechazada por el autómata. Dado un AFND M=(Q,∑,f,q0,F) se llama lenguaje aceptado o reconocido por dicho autómata al conjunto de las palabras de ∑* que acepta, L(M)={x∑* / f’(q0,x)F} TALF. Tema 4 nº 28 4.4.5. Simulación algorítmica de un AFND Entrada: cadena de entrada x que termina con un carácter fin de cadena o fin de archivo (FDC). Salida: La respuesta ACEPTADA si el autómata reconoce x NO ACEPTADA en caso contrario Método: aplicar f al estado al cual hay una transición desde el estado q a un carácter de entrada c Función reconocer() A=CL(q0) c= leer_carácter() Mientras c != FDC A=CL ( f(q,c)) qP c= leer_carácter() fmientras Si A F entonces Devolver(ACEPTADA) Sino Devolver(NO ACEPTADA) fsi TALF. Tema 4 nº 29 4.5. Equivalencia entre AFND y AFD A partir de un AFND con estados q0,…qm , construiremos un AFD equivalente (que acepta el mismo lenguaje) con estados Q0,…Qn donde q0, Q0, son los estados iniciales. Premisas: Se definió inductivamente el conjunto de estados C = λ-clausura(s): s C. si t C y una transición vacía de t a u entonces u C. Se define el conjunto de estados G = f(s , a) : si una transición etiquetada con a entre s y t entonces t G. Estas definiciones se generalizan para conjuntos de estados S = { ... ti ... } : Si u λ-clausura(ti) entonces u λ-clausura(S) Si u f(ti , a) entonces u f(S , a). (f(G,a) son los estados s alcanzables con a desde algún qG) TALF. Tema 4 nº 30 4.5. Equivalencia entre AFND y AFD Algoritmo de construcción de la tabla de transiciones del AFD: 1. se crea una nueva tabla T[estado,símbolo], inicialmente vacía. 2. se calcula Q0 = λ-clausura(q0) 3. se crea una entrada en T para Q0. 4. para cada casilla vacía T[Q,a] : 1. se asigna T[Q,a] = λ-clausura(f(Q,a)) 2. si no existe una entrada en T para el estado T[Q,a], se crea la entrada. 5. se repite 4 mientras existan casillas vacías. TALF. Tema 4 nº 31 4.5. Equivalencia entre AFND y AFD. Ejemplo. Ejemplo: b a,b 1 λ a TALF. Tema 4 λ 0 1 1 2 1 2 1 3 2 0 4 3 4 1 *4 4 4 a a λ b 3 b 0 a a, b 2 4 b nº 32 4.5. Equivalencia entre AFND y AFD. Ejemplo. 1. 2. 3. se crea una nueva tabla T[estado,símbolo], inicialmente vacía. se calcula Q0 = λ-clausura(0) = {0,2} se crea una entrada en T para Q0. a b Q0 4. para cada casilla vacía T[Q,a] : 1. se asigna T[Q,a] = λ-clausura(f(Q,a)) λ-clausura(f(Q0={0,2},a))=λ-clausura(0,1)={0,1,2,3}=Q1 2. si no existe una entrada en T para el estado T[Q,a], se crea la entrada. a Q0 a b λ 0 1 1 2 1 2 1 3 2 0 4 3 4 1 *4 4 4 b Q1 Q1 5. se repite 4 mientras existan casillas vacías. TALF. Tema 4 nº 33 4.5. Equivalencia entre AFND y AFD. Ejemplo 5. 6. λ-clausura(f(Q0={0,2},b))=λ-clausura(1,4)={1,3,4}=Q2 λ-clausura (f(Q1= {0,1,2,3} , a)) = a b λ-clausura(0,1,2,4)={0,1,2,3,4}=Q3 Q Q Q Q λ-clausura(f(Q1={0,1,2,3},b))= Q λ-clausura(1,4)={1,3,4}=Q2 λ-clausura(f(Q2={1,3,4},a))=λ-clausura(2,4)={2,4}=Q4 λ-clausura(f(Q2={1,3,4},b))=λ-clausura(1,4)={1,3,4}=Q2 λ-clausura(f(Q3={0,1,2,3,4},a))=λclausura(0,1,2,4)={0,1,2,3,4}=Q3 λ-clausura(f(Q3={0,1,2,3,4},b))=λ-clausura(1,4)={1,3,4}=Q2 λ-clausura(f(Q4={2,4},a))=λ-clausura(0,4)={0,2,4}=Q5 λ-clausura(f(Q4={2,4},b))=λ-clausura(4)={4}=Q6 λ-clausura(f(Q5={0,2,4},a))=λ-clausura(0,2,4)={0,2,4}=Q5 λ-clausura(f(Q5={0,2,4},b))=λ-clausura(1,4)={1,3,4}=Q2 λ-clausura(f(Q6={4},a))=λ-clausura(4)={4}=Q6 λ-clausura(f(Q6={4},b))=λ-clausura(4)={4}=Q6 0 7. 1 2 1 2 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. TALF. Tema 4 nº 34 4.5. Equivalencia entre AFND y AFD. Ejemplo El AFD equivalente es: a TALF. Tema 4 b Q0 Q1 Q2 Q1 Q3 Q2 *Q2 Q4 Q2 *Q3 Q3 Q2 *Q4 Q5 Q6 *Q5 Q5 Q2 *Q6 Q6 Q6 nº 35