AUTOMATAS FINITOS DETERMINISTA
Descripción
del proyecto:
Definición
de autómata finito determinista Un autómata finito determinista consta
de:
1. Un conjunto finito de estados, a menudo designado como Q.
2. Un conjunto finito de símbolos de entrada, a menudo
designado como Σ.
3. Una función de
transición que toma como argumentos un estado y un símbolo de entrada y
devuelve un estado. La función de transición se designa habitualmente como δ.
En nuestra representación gráfica informal del autómata, δ se ha representa
mediante arcos entre los estados y las etiquetas sobre los arcos. Si q es un
estado y a es un símbolo de entrada, entonces δ(q,a) es el estado p tal que
existe un arco etiquetado a que va desde q hasta p. 2
4. Un estado inicial,
uno de los estados de Q.
5. Un conjunto de
estados finales o de aceptación F. El conjunto F es un subconjunto de Q. A
menudo haremos referencia a un autómata finito determinista mediante su
acrónimo: AFD. La representación más sucinta de un AFD consiste en un listado
de los cinco componentes anteriores. Normalmente, en las demostraciones,
definiremos un AFD utilizando la notación de “quíntupla” siguiente: A =
(Q,Σ,δ,q0,F) donde A es el nombre del AFD, Q es su conjunto de estados, Σ son
los símbolos de entrada, δ es la función de transición, q0 es el estado inicial
y F es el conjunto de estados finales.
Cómo procesa cadenas un AFD
primero que tenemos que entender sobre un AFD es cómo decide
si “aceptar” o no una secuencia de símbolos de entrada. El “lenguaje” del AFD
es el conjunto de todas las cadenas que acepta. Supongamos que a1a2 ···an es
una secuencia de símbolos de entrada. Comenzaremos con el AFD en el estado
inicial, q0. Consultamos la función de transición δ, por ejemplo δ(q0,a1) = q1
para hallar el estado al que pasará el AFD A después de procesar el primer
símbolo de entrada a1.
A continuación procesamos el siguiente símbolo de entrada,
a2, evaluando δ(q1,a2); supongamos que este estado es q2. Continuamos aplicando
el mismo procedimiento para hallar los estados q3,q4,...,qn tal que δ(qi−1,ai)
= qi para todo i. Si qn pertenece a F, entonces la entrada a1a2 ···an se acepta
y, si no lo es se “rechaza”.
EJEMPLO 2.1
Especificamos
formalmente un AFD que acepte únicamente todas las cadenas de ceros y unos que
contengan la secuencia 01 en cualquier posición de la cadena. Podemos describir
este lenguaje L como sigue: {w | w tiene la forma x 01y para algunas cadenas x
e y constan sólo de ceros y unos} Otra descripción equivalente que utiliza los
parámetros x e y a la izquierda de la barra vertical es: {x 01y | x e y son
cadenas cualesquiera formadas por 0s y 1s} Algunos ejemplos de cadenas de este
lenguaje son: 01, 11010 y 100011. Algunos ejemplos de cadenas que no pertenecen
a este lenguaje son: ε, 0 y 111000. ¿Qué sabemos sobre un autómata que puede
aceptar este lenguaje L? En primer lugar, sabemos que su alfabeto de entrada es
Σ = {0,1}. Tiene un determinado conjunto de estados, Q, siendo uno de ellos,
por ejemplo q0, el estado inicial. Este autómata tiene que recordar las entradas
que ha leído hasta el momento. Para decidir si 01 es una subcadena de la
entrada, A tiene que recordar: 1. ¿Ha leído ya una subcadena 01? En caso
afirmativo, aceptará cualquier secuencia de entradas futura; es decir, sólo se
encontrará en estados de aceptación. 2. ¿Todavía no ha leído la secuencia 01,
pero la entrada más reciente ha sido un 0, de manera que si ahora lee un 1,
habrá leído la subcadena 01 y podrá aceptar cualquier cosa que lea de ahí en
adelante? 3. ¿Todavía no ha leído la secuencia 01, pero la última entrada no
existe (acaba de iniciarse) o ha sido un 1? En este caso, A no puede aceptar la
entrada hasta que no lea un 0 seguido inmediatamente de un 1.
Cada una de estas tres condiciones puede representarse
mediante un estado. La condición (3) se representa mediante el estado inicial,
q0. Nada más comenzar seguramente necesitaremos leer un 0 seguido de un 1. Pero
si estando en el estado q0 lo primero que leemos es un 1, entonces no leeremos
la secuencia 01 y, por tanto, deberemos permanecer en el estado q0. Es decir,
δ(q0,1) = q0. Sin embargo, si estamos en el estado q0 y a continuación leemos
un 0, nos encontraremos en el caso de la condición (2). Es decir, nunca
leeremos la secuencia 01, pero tenemos un 0. Por tanto, utilizaremos q2 para representar
la condición (2). La transición de q0 para la entrada 0 es δ(q0,0) = q2.
Consideremos ahora las transiciones desde el estado q2. Si leemos un 0, no
mejoramos nuestra situación pero tampoco la empeoramos. No hemos leído la
secuencia 01, pero 0 ha sido el último símbolo, por lo que quedamos a la espera
de un 1. El estado q2 describe esta situación perfectamente, por lo que
deseamos que δ(q2,0) = q2. Si nos encontramos en el estado q2 y leemos una
entrada 1, entonces disponemos de un 0 seguido de un 1. Ahora podemos pasar a
un estado de aceptación, que denominaremos q1, y que se corresponde con la
condición (1). Es decir, δ(q2,1) = q1. Por último, tenemos que diseñar las
transiciones para el estado q1. En este estado, ya hemos leido una secuencia
01, así que, independientemente de lo que ocurra, nos encontraremos en una
situación en la que hemos leído la secuencia 01. Es decir, δ(q1,0) = δ(q1,1) =
q1. Por tanto, Q = {q0,q1,q2}. Como hemos dicho, q0 es el estado inicial y el
único estado de aceptación es q1; es decir, F = {q1}. La especificación
completa del autómata A que acepta el lenguaje L de cadenas que contienen una
subcadena 01 es A = ({q0,q1,q2},{0,1},δ,q0,{q1}) donde δ es la función de
transición descrita anteriormente.
Notaciones más
simples para los AFD Especificar un AFD utilizando una quíntupla con una
descripción detallada de la función de transición δ resulta bastante tedioso y
complicado de leer. Hay disponibles dos notaciones más cómodas para describir
los autómatas: 1. Un diagrama de transiciones, que es un grafo como los que hemos
visto en la Sección Una tabla de transiciones, que es una ordenación tabular de
la función δ, la cual especifica el conjunto de estados y el alfabeto de
entrada. Diagramas de transiciones Un diagrama de transiciones de un AFD A =
(Q,Σ,δ,q0,F) es un grafo definido como sigue: a) Para cada estado de Q, existe
un nodo. b) Para cada estado q de Q y cada símbolo de entrada a de Σ, sea
δ(q,a) = p. Entonces, el diagrama de transiciones tiene un arco desde el nodo q
hasta el nodo p, etiquetado como a. Si existen varios símbolos de entrada que
dan lugar a transiciones desde q hasta p, entonces el diagrama de transiciones
puede tener un único arco etiquetado con la lista de estos símbolos. c) Existe
un flecha dirigida al estado inicial q0, etiquetada como Inicio. Esta flecha no
tiene origen en ningún nodo. d) Los nodos correspondientes a los estados de
aceptación (los que pertenecen a F) están marcados con un doble círculo. Los
estados que no pertenecen a F tienen un círculo simple. EJEMPLO 2.2 La Figura
2.4 muestra el diagrama de transiciones del AFD que hemos diseñado en el
Ejemplo 2.1. En este diagrama podemos ver los tres nodos correspondientes a los
tres estados. Hay una flecha etiquetada como Inicio que entra en el estado
inicial, q0, y un estado de aceptación, q1, representado mediante un doble
círculo. De cada estado sale un arco etiquetado con 0 y otro con 1 (aunque los
dos arcos se han combinado en uno con una doble etiqueta en el caso de q1).
Cada uno de los arcos corresponde a una de las situaciones de δ desarrolladas
en el Ejemplo 2.1. Tablas de
transiciones Una tabla de transiciones es una representación tabular
convencional de una función, como por ejemplo δ, que toma dos argumentos y
devuelve un valor. Las filas de la tabla corresponden a los estados y las
columnas a las entradas. La entrada para la fila correspondiente al estado q y
la columna correspondiente a la entrada a es el estado δ(q,a).
Figura 2.4. Diagrama de transiciones del AFD que acepta
todas las cadenas que contienen la subcadena 01.
EJEMPLO 2.3 La tabla de transiciones correspondiente a la
función δ del Ejemplo 2.1 se muestra en la Figura 2.5. También pueden verse
otras dos características de una tabla de transiciones. El estado inicial se marca
mediante una flecha y los estados de aceptación mediante un asterisco. Dado que
es posible deducir los conjuntos de estados y los símbolos de entrada fijándose
en los encabezamientos de las filas y las columnas, podemos obtener a partir de
la tabla de transiciones toda la información necesaria para especificar el
autómata finito de forma unívoca.
Extensión a cadenas de la función de transición Hemos
explicado informalmente que el AFD define un lenguaje: el conjunto de todas las
cadenas que dan lugar a una secuencia de transiciones desde el estado inicial
hasta un estado de aceptación. En términos del diagrama de transiciones, el
lenguaje de un AFD es el conjunto de etiquetas ubicadas a lo largo de todos los
caminos que van desde el estado inicial hasta cualquier estado de aceptación.
Ahora es necesario precisar la notación del lenguaje de un AFD. Para ello,
definimos una función de transición extendida que describirá lo que ocurre
cuando se parte de cualquier estado y se sigue cualquier secuencia de entradas.
Si δ es la función de transición, entonces la función de transición extendida
construida a partir de δ será δ. La función de transición extendida es una
función que toma un estado q y una cadena w y devuelve un estado p (el estado
al que el autómata llega partiendo del estado q y procesando la secuencia de
entradas w). Definimos δ por inducción sobre la longitud de la cadena de
entrada como sigue: BASE. δ (q,ε) = q. Es decir, si nos encontramos en el
estado q y no leemos ninguna entrada, entonces permaneceremos en el estado q.
PASO INDUCTIVO. Supongamos que w es una cadena de la forma xa; es decir, a es
el último símbolo de w y x es la cadena formada por todos los símbolos excepto
el último. 3 Por ejemplo, w = 1101 se divide en x = 110 y a = 1. Luego δ(q,w) δ
(q,x),a (2.1) La Ecuación (2.1) puede parecer complicada, pero la idea es
simple. Para calcular δ(q,w), en primer lugar se calcula δ(q,x), el estado en
el que el autómata se encuentra después de procesar todos los símbolos excepto
el último de la cadena w. Supongamos que este estado es p; es decir, δ(q,x) =
p. Entonces δ(q,w) es lo que obtenemos al hacer la transición desde el estado p
con la entrada a, el último símbolo de w. Es decir, δ(q,w) = δ(p,a).
EJEMPLO 2.4 Deseamos diseñar un AFD que acepte el lenguaje L
= {w | w tiene un número par de ceros y un número par de unos} La tarea de los
estados de este AFD es la de contar el número de ceros y el número de unos
contando en módulo 2. Es decir, el estado se emplea para recordar si el número
de ceros es par o impar hasta el momento y también para recordar si el número
de unos leídos hasta el momento es par o impar. Existen por tanto cuatro
estados que pueden interpretarse de la manera siguiente: q0: tanto el número de
ceros como el de unos leídos hasta el momento es par. q1: el número de ceros
leídos hasta el momento es par, pero el de unos es impar. q2: el número de unos
leídos hasta el momento es par, pero el de ceros es impar. q3: tanto el número
de ceros como el de unos leídos hasta el momento es impar. El estado q0 es
tanto el estado incial como el único estado de aceptación. Es el estado inicial
porque antes de leer ninguna entrada, la cantidad de ceros y unos leídos hasta
el momento es igual a cero y cero es par. Es el único estado de aceptación
porque describe de forma exacta la condición para que una secuencia de ceros y
unos pertenezca al lenguaje L. Ahora ya sabemos cómo especificar el AFD para el
lenguaje L. Así A = ({q0,q1,q2,q3},{0,1},δ,q0,{q0}) donde la función de
transición δ se describe mediante el diagrama de transiciones de la Figura 2.6.
Observe cómo cada entrada 0 hace que el estado cruce la línea de puntos
horizontal. Así, después de leer un número par de ceros siempre estaremos por
encima de la línea en el estado q0 o q1, mientras que después de leer un número
impar de ceros siempre estaremos por debajo de la línea, en los estados q2 o
q3. Por el contrario, cualquier entrada 1 hace que el estado cruce la línea de
puntos vertical. Así, después de leer un número par de unos, siempre estaremos
en la parte izquierda, en el estado q0 o el estado q2, mientras que después de
leer un número impar de unos estaremos en la parte de la derecha, en los
estados q1 o q3. Estas observaciones constituyen una demostración informal de
que los cuatro estados tienen las interpretaciones que les hemos atribuido. Sin
embargo, debemos demostrar formalmente la corrección de las afirmaciones acerca
de los estados aplicando la inducción mutua.
También podemos representar este AFD mediante una tabla de
transiciones. La Figura 2.7 muestra esta tabla. Sin embargo, no sólo vamos a
ocuparnos del diseño de este AFD, sino que también queremos utilizarlo para
ilustrar la construcción de δ a partir de su función de transición δ.
Supongamos que la entrada es 110101. Dado que esta cadena tiene un número par
de ceros y unos, podemos asegurar que pertenece al lenguaje. Así, tendremos que
δ (q0,110101) = q0, ya que q0 es el único estado de aceptación. Verifiquemos
ahora esta afirmación. La comprobación supone calcular δ(q0,w) para cada
prefijo w de 110101, comenzando por ε y aumentando progresivamente el tamaño.
El resumen de este cálculo es: δ(q0,ε) = q0. δ(q0,1) = δ
δ(q0,ε),1 = δ(q0,1) = q1. δ(q0,11) = δ
δ(q0,1),1 = δ(q1,1) = q0. δ(q0,110) = δ
δ(q0,11),0 = δ(q0,0) = q2. δ(q0,1101) = δ
δ(q0,110),1 = δ(q2,1) = q3. δ(q0,11010) = δ
δ(q0,1101),0 = δ(q3,0) = q1. δ(q0,110101) = δ
δ(q0,11010),1 = δ(q1,1) = q0.
2.2.5 El lenguaje de
un AFD Ahora podemos definir el lenguaje de un AFD A = (Q,Σ,δ,q0,F). Este
lenguaje se designa por L(A) y se define como: L(A) = {w | δ(q0,w) pertenece a
F} Es decir, el lenguaje de A es el conjunto de cadenas w que parten del estado
inicial q0 y van hasta uno de los estados de aceptación. Si L es L(A) para un
determinado AFD A, entonces decimos que L es un lenguaje regular. EJEMPLO 2.5
Como hemos dicho anteriormente, si A es el AFD del Ejemplo 2.1, entonces L(A)
es el conjunto de todas las cadenas de ceros y unos que contiene una subcadena
01. En cambio, si A es el AFD del Ejemplo 2.4, entonces L(A) es el conjunto de
todas las cadenas de ceros y unos, cuya cantidad de ceros y unos es par. Introducción a la teoría de autómatas, lenguajes
y computación Notación estándar y variables locales Después de leer esta
sección, es posible que sea capaz de imaginar que la notación personalizada que
hemos empleado es necesaria; es decir, debe utilizar δ para designar la función
de transición, A para el nombre del AFD, etc. A lo largo de todos los ejemplos,
normalmente emplearemos las mismas variables para designar las mismas cosas, ya
que esto ayuda a recordar los tipos de variables, de la misma forma que una
variable i en un programa casi siempre designa un tipo entero. Sin embargo,
tenemos la libertad de denominar a los componentes de un autómata de la manera
que deseemos. Así, el lector es libre de denominar al autómata M y a su función
de transición T, si así lo desea. Además, no deberá sorprenderle que la misma
variable signifique cosas diferentes en contextos distintos.
Criterios Utilizados
para los caminos de Aceptación y no Aceptación:
En este programa describimos los criterios utilizados hacia
los caminos para que el programa nos acepte el autómata finito determinístico
para que sea aceptado así también para que nos muestre el error cuando no es un
autómata finito determinístico.
1.-Para que un autómata finito determinístico sea aceptado
que cumpla sus reglas.
2.-El programa no aceptara si el autómata no cumple dichas
reglas.
Conclusiones:
Teoría
de Autómatas: Rama de las ciencias de la
computación que estudia las máquinas abstractas y los problemas que éstas son
capaces de resolver.
Autómata
Finito (AF): Modelo computacional que realiza procesos
en forma automática sobre una entrada para producir una salida. Está conformado
por un alfabeto, un conjunto de estados finito, una función de transición, un
estado inicial y un conjunto de estados finales. M = (I, S, δ, F). Hay dos
tipos de AF: Los Autómatas Finitos Deterministas (AFD) y los Autómatas Finitos
No Deterministas (AFND).
Ejemplo
de AF: Interruptor de
apagado/encendido(on/off).
Autómata
Finito Determinista (AFD): M
= (Q, Σ, Δ, q0, F). El autómata no puede estar en más de un estado
simultáneamente.
Autómata
Finito No Determinista (AFND): M=(Q,
Σ, f, q0, F). Puede estar en varios estados al mismo tiempo.
-LISTADO DEL CODIGO
FUENTE DE LA CLASE DE LA MAQUINA Y LA APLICACIÓN DE PRUEBA
import
java.util.Scanner;
public class
Automata {
int cont;
char [] car;
boolean aceptado;
public static void main(String[] args) {
String cadena;
//String cadena ="ababa";
Scanner teclado=new Scanner(System.in);
Automata aut = new Automata();//
TODO code application logic here
cadena=teclado.next();
aut.car =
cadena.toCharArray();
aut.inicio();
if(aut.aceptado)
System.out.println("aceptacion");
else System.out.println("no
aceptacion");
}
public void
inicio(){
cont =0;
q0();
}
public void q0(){
System.out.println("En q0");
aceptado=false;
if(cont<car.length){
if(car[cont]=='a'){
cont++;
q1();
}else if(car[cont]=='b'){
cont++;
q4();
}
}//else System.out.println("En
error");
}
public void q1(){
System.out.println("En q1");
if(cont<car.length){
if(car[cont]=='b'){
cont++;
q2();
}}
//else System.out.println("En
error");
}
public void q2(){
System.out.println("En q2");
if(cont<car.length){
if(car[cont]=='a'){
cont++;
q2();
}else if(car[cont]=='b'){
cont++;
q3();
}
}//else System.out.println("En
error");
}
public void q3(){
System.out.println("En q3
");
aceptado=true;
if(cont<car.length){
if(car[cont]=='a'){
cont++;
q3();
}else if(car[cont]=='b'){
cont++;
qerror();
}
}//else System.out.println("En
aceptacion");
}
public void q4(){
System.out.println("En q4");
if(cont<car.length){
if(car[cont]=='a'){
cont++;
q4();
}else if(car[cont]=='b'){
cont++;
q5();
}
}//else System.out.println("En
error");
}
public void q5(){
System.out.println("En q5
");
aceptado=true;
if(cont<car.length){
if(car[cont]=='a'){
cont++;
q5();
}else if(car[cont]=='b'){
cont++;
qerror();
}
}//else System.out.println("En
aceptacion");
}
public void qerror(){
System.out.println("En error");
aceptado = false;
return;
}
}
BIBLIOGRAFIA:
Teoría de Autómatas y
Lenguajes Formales
SERAFIN MORAL
Universidad de granada
Introducción a la teoría de autómatas, Lenguajes y Computación.
HOPCROFT, J. E,, y ULLMAN, D
Addyson Wesley 20003.
https://www-db.sanford.edu/-ullman/ialc.hml.MaterialdellibrodeUllman(ingles)










