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

Teora de la Computacin para Ingeniera de Sistemas: un enfoque prctico

Prof. Hilda Contreras

15 de abril de 2012

ndice general
1. Introduccin
1.1. 1.2. 1.3. 1.4. 1.5. Marco histrico de la teora de la computacin . . . . . . . . . . . . . Conceptos bsicos: Alfabeto, Palabra o Cadena, Lenguaje y Problema Jerarqua de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . Los problemas en la Teora de la Computacin . . . . . . . . . . . . . Preguntas y respuestas, ejercicios resueltos y propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . 7 . 9 . 10 . 11 . . . . . .

2. Lenguajes Regulares y autmatas nitos

2.1. Autmatas de estados nitos . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Autmatas nitos determinista (AFD) . . . . . . . . . . . . . . . . . 2.1.2. Autmatas nitos no determinista (AFND) . . . . . . . . . . . . . . 2.1.3. Autmatas nitos no determinista con transiciones nulas (AFND-) 2.1.4. Herramientas, implementacin y uso de Lenguajes regulares . . . . . 2.1.5. Preguntas y respuestas, ejercicios resueltos y propuestos . . . . . . .

15
15 15 19 23 29 32

NDICE GENERAL

Captulo 1

Introduccin
La teora de la Computacin es un poco ms antigua que las computadoras electrnicas. Uno de sus pioneros, Alan Turing, pudo anticipar el poder de las computadoras a travs de un modelo conceptual en 1936. Otras disciplinas como la matemtica, losofa, lingstica, biologa e ingeniera elctrica intervienen para completar sus teoras. Las teoras de bases son dos: Teora de Autmatas y Teora de los Lenguajes Formales. En general, la Teora de la Computacin facilita la comprensin de muchas reas de la ciencia de la computacin (como los compiladores), adems: 1. Se utiliza en el diseo y construccin de aplicaciones importantes de software y hardware. 2. Ayuda a comprender que esperar del software. 3. Permite deducir si es posible resolver un problema (determinar los lmites de la computacin). Adems, la comprensin de estas teoras representa en la prctica un conjunto de herramientas muy tiles como alternativas simples y ecientes para resolver problemas.

1.1. Marco histrico de la teora de la computacin


Esta teora surge a partir de importantes antecedentes del rea de las matemticas, la cual estuvo en una profunda cirsis a nales del siglo XIX y primera mitad del XX. La lgica y las matemticas trabajaron juntas en la formalizacin de la ciencia de la computacin, los siguientes hechos son los mas resaltantes: Entre 1910 y 1923, Bertrand Russell elabora el "Principia Matemtica"presentando la relacin entre la lgica y la matemtica pura. En 1928, el matemtico alemn David Hillbert, presenta a sus colegas como reto demostrar tres proposiciones de gran generalidad sobre su ciencia:
La matemticas son completas. Las matemticas son consistentes. Las matemticas son decidibles.

CAPTULO 1.

INTRODUCCIN

En 1928, el matemtico Ackermann presenta tambin el problema de la decisin en un estudio sobre la lgica de primer orden. En 1930, el matemtico checo Kurt Gdel prueba que las matemticas no pueden ser completas y consistentes al mismo tiempo (teorema de la Incompletitud). En 1936, el matemtico americano Alonzo Church responde negativamente en un artculo al tercer problema propuesto por Hillbert, el problema decisorio (Teorema de Church y -clculo). En ese mismo ao 1936, el matemtico ingls Alan Turing da una respuesta tambin negativa a esa tercera cuestin, sus resultados son ms consistentes que los obtenidos por Church. La demostracin de Turing se basa en principios completamente bsicos y elementales. Turing enuncia el problema de decisin de la siguiente forma: "Buscar un algoritmo para determinar si una conclusin particular puede derivarse de ciertas premisas con el uso de reglas de prueba". Da una nocin precisa del concepto de algoritmo, como aquello que pueda ser realizado por una mquina abstracta, la Mquina de Turing. De este modo, Alan Turing con su mquina universal capaz de realizar el trabajo de cualquier otra mquina, mediante la lectura de su descripcin en una cinta, delinea el diseo de un computardor. En 1969, S. Cook extiende el estudio de Tuning. Cook separa aquellos problemas que pueden ser solucionados de aquellos que en principio pueden ser solucionados pero que en la prctica toman demasiados recursos (Complejidad computacional). En 1937, Claude Shannon presenta su tesis de licenciatura en el MIT, estableciendo el paralelismo entre la lgica de Boole y los circuitos de transmisin. En 1943, McCulloch-Pitts desarrolla unas mquinas simples, en cuanto su funcionamiento, que fueron conocidas como autmatas nitos de actividad nerviosa, para modelar el funcionamiento de una neurona biolgica. En 1956, Moore publica el primer estudio riguroso sobre autmatas. Con anterioridad, debido al desarrollo de los primeros computadores, se haban estudiado diversos mtodos para la sntesis de circuitos secuenciales (Human en 1954 y Mealy en 1955). En los aos 60 es donde se realizan la mayor parte de trabajos sobre la teora de los autmatas nitos. En 1956, N. Chomsky comienza el estudio formal de las gramticas (como generadoras de lenguajes). Formaliza matemticamente los conceptos de gramtica generativa o reglas para la construccin las frases de un lenguaje. Enuncia la teora sobre el origen y la naturaleza de los lenguajes naturales. Estas herramientas fueron empleadas para la formalizacin de los lenguajes de computacin: Teora de los Lenguaje Formales. A nales de los aos 50 se relacionan los autmatas, las gramticas y los lenguajes (Jerarqua de Chomsky).

1.2. CONCEPTOS BSICOS: ALFABETO, PALABRA O CADENA, LENGUAJE Y PROBLEMA

1.2. Conceptos bsicos: Alfabeto, Palabra o Cadena, Lenguaje y Problema


La Teora de la Computacin puede entenderse como un paradigma o un enfoque para resolver problemas. Este paradigma tiene los siguientes conceptos bsicos sobre los cuales se fundamenta: Alfabeto, Palabra o Cadena, Lenguaje y Problema. Para todas estas deniciones debe tenerse presente primero el concepto de un Conjunto, como la estructura que las soporta.

Conjunto

Coleccin (no importa el orden) de objetos (elementos del mismo tipo) sin repeticin. Existen 2 (dos) tipos de representacin de los conjuntos: Por Extensin, se enumeran todos sus elementos, por ejemplo: {0, 1} Por Comprensin, se dene de manera formal las caractersticas de sus elementos, por ejemplo: { i | Para todo j entero i = 2j }

El conjunto vaco se representa as: . La pertenencia de un elemento a un conjunto: A = {0, 1, 2} y 1 A o tambin se escribe 1 en A.  El subconjunto: A B signica que todo elemento de A esta en B. Si A B y A = B entonces escribimos A B (subconjunto propio). Operadores sobre conjuntos: Unin: A B = {x | x en A o x en B} Interseccin: A B = {x | x en A y x en B} Diferencia: A - B = {x | x en A y x no est en B} Conjunto Producto Producto Cartesiano: A B {(x,z) | x en A y z en B}. Si A tiene n elementos y B tiene m elementos entonces A B tiene n m elementos y A tiene 2n elementos. Conjunto de Potencias 2A A , es el conjunto de todos los subconjuntos de A. Tam es denominado Clausura de Kleene de A. Las deniciones formales son: A bin |A | i A| = i=0 Ai y A+ = |iA =1 A (clausura positiva que no incluye al conjunto vaco). Donde Ai representa todos los subconjuntos de A con i elementos. Ejemplo: Dados los conjuntos A = {1,2} y B = {2,3}, se realizan las siguientes operaciones sobre conjuntos: A B = {1, 2, 3} A B = {2} A - B = {1} A B = {(1,2),(1,3),(2,2),(2,3)} 2A = A = {,{1},{2},{1,2}}


Nota: es un smbolo que puede ser utilizado por algunos autores para denotar a la cadena vaca.

CAPTULO 1.

INTRODUCCIN

En la Teora de la Computacin se visualizan las entradas, salidas y procesos de un dominio de aplicacin como un tipo de problema particular: resolver la pertenencia de un elemento a un conjunto. El problema, los elementos y el tipo de conjunto que se van a utilizar se denen en base a los siguientes conceptos bsicos: 1. Alfabeto: Denotado con (sigma). Conjunto nito de smbolos no vacos. Por ejemplo: Alfabeto binario = {0,1}. Smbolo: es una entidad abstracta que no se dene, por ejemplo nmeros, letras, etc. 2. Cadena (Palabra): secuencia nita de smbolos pertenecientes a un alfabeto (yuxtapuestos = uno detrs del otro). Por ejemplo: Cadena binaria "0111001". Sobre las cadenas se denen:
a ) Cadena Vaca (lambda): contiene cero (0) smbolos, puede construirse a partir de cualquier alfabeto. b ) Longitud de una Cadena: nmero de posiciones de la cadena ocupadas por smbolos del alfabeto. Denotado con el pipe |, por ejemplo para el alfabeto binario, las longuitudes de las siguientes cadenas son |01101|= 5 y ||=0 c ) Concatenacin de Cadenas : x y y son cadenas entonces xy denota la concatenacin. Por ejemplo: x = 011 y = 1110, la concatenacin de xy = "0111110" d ) Potencias de un Alfabeto: Conjunto de todas las cadenas formadas a partir de un alfabeto de cierta longitud. k Cadenas de longitud k formadas por smbolos del alfabeto . Para el alfabeto binario = {0,1}, 2 = {00, 11, 10, 01} Conjunto de todas cadenas formadas por smbolos las i del alfabeto . Se 0 i 0 i dene por = . Donde = {} y = i=1 . Adems se denota el + = {} e ) Sujo, Prejo: cualquier cadena al nal o comienzo respectivamente de la cadena. Por ejemplo para la cadena w=abca, formada de = {a, b, c}, se tiene: Los prejos de w= , a, ab, abc, abca Los sujos de w= , a, ca, bca, abca f ) Prejo (Sujo) propio, es cualquier Prejo (Sujo) que no sea la misma cadena.

3. Lenguaje: Conjunto de cadenas de smbolos del mismo alfabeto. El lenguaje formado por toda las cadenas posibles de un alfabeto se denota por (Sigma asterisco).
es el lenguaje vaco, es un lenguaje para cualquier alfabeto.

{} es un lenguaje formado por la cadena vaca. Es un lenguaje para cualquier alfabeto . Por Ejemplo: 1 = {0, 1}, 2 = {00, 1}
1 = {, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, ... } 2 = {, 00, 1, 001, 100, 0000, 11, 00001, 00100, 10000, 1001, 0011, 111, 000000,...

} Las cadenas formadas con 2 al aplicarle la cardinalidad: |001| = 2 y |1100| = 3

1.3.

JERARQUA DE CHOMSKY

Figura 1.1: Denicin de Problema en la Teora de la Computacin 4. Problema: consiste en determinar la pertenencia de una cadena sobre un lenguaje. Este tipo de problema es llamado un Problema de Decisin : funcin con salida binaria (si, no) aplicada sobre conjuntos. Por ejemplo ver gura 1.1: se dene un conjunto A con todas las posibles respuestas y un conjunto B que es subconjunto de A cuyos elementos son positivos (salida si, que pertenecn a B). Expresado en trminos de la teora de la computacin, si es un alfabeto y L es un lenguaje de , entonces el problema sobre L es el siguiente:

Dada una cadena w que pertenece a , decidir si w pertenece o no a L?

1.3. Jerarqua de Chomsky


Noan Chomsky en los aos 50, fue el creador de una jerarqua de lenguajes segn las gramticas que los generan. Esta gramtica est organizada en base al poder generativo formal de la gramtica y donde se destaca 4 tipos de gramticas (denominados tipo 0, tipo 1, tipo 2 y tipo 3), cada una denida por la clase de reglas que contiene. El cuadro 1.1, muestra una jerarqua implicativa, de modo que los lenguajes denidos por gramticas del tipo-i incluyen los lenguajes del tipo-(i+1). Dicho de otra forma: Tipo 3 Tipo 2 Tipo 1 Tipo 0. Por tanto las gramticas de tipo 0 son las ms poderosas y las de tipo 3 las ms restringidas. La Teora de Autmatas y la Teora de las Gramticas formales tienen una estructura similar aunque traten de aspectos diferentes - procedimientos y gramticas, respectivamente-. Las gramticas generan un tipo de lenguaje y los autmatas reconocen un tipo de lenguaje, es decir el punto de conexin son los lenguajes. Esta es la razn por la cual se utiliza la jerarqua de Chomsky en la solucin de problemas: un problema consiste en determinar si una cadena pertenece a un lenguaje, entonces si se conoce el tipo de lenguaje se puede determinar con que mquina reconocerlo o con cual tipo de gramtica generarlo.
Los smbolos del alfabeto pueden ser de diferentes tamaos

10

CAPTULO 1.

INTRODUCCIN

Cuadro 1.1: Jerarqua de Chomsky Tipo 0 1 2 3 Lenguaje Recursivamente enumerable Dependiente del Contexto Mquina Mquina de Turing Autmata linealmente acotado Independiente Autmata de del Contexto Pila Lenguaje Regu- Autmata lar nito Gramtica G = (V,T,P,S) Gramtica sin restricciones (, en (V T ) , contiene una variable) Gramtica al contexto (, sensible en (V T ) , contiene una variable, | | ||) Gramtica libre de contexto A (A en V y en (V T) ) Gramtica Regular A aB, A a, (A,B en V y a en T)

1.4. Los problemas en la Teora de la Computacin


Teora de la Computacin trata de una teora o formalismo general, la idea es aplicarla sobre todos los problemas que se pueden calcular en cualquier mquina. La teora usa modelos de mquinas abstractas, pues no tendra sentido usar las mquinas reales que cambian constantemente en el tiempo y que adems son diferentes y complejas. Entonces qu sucede con los problemas?, los problemas tambin son abstractos?. Lo que se pretende calcular, es decir el Problema o Clculo, puede ser de cualquier tipo, naturaleza y condicin. Los que han programado han podido resolver, de muchas formas, con un lenguaje de programacin mltiples tipos de problemas. Adems hay muchos lenguajes de programacin e incluso algunos especcos para ciertas caractersticas de los problemas. Se sabe que los problemas no son iguales, entonces, cmo esta Teora puede generalizar a todos los problemas para aplicar sus reglas y sus modelos abstractos?. Bien, es lo primero que hay que entender, lo que hace la Teora de la Computacin es formalizar un solo tipo de problema, por tanto se debe convertir, transformar o reducir cualquier problema a lo que se llaman un "problema de decisin". Un problema de decisin es un problema que puede dar una respuesta positiva o negativa (si o no). Un problema de decisin, en trminos matemticos, es equivalente a decidir si un elemento pertenece o no a un conjunto dado. El conjunto equivalente al problema esta formado por los elementos para el cual la respuesta es positiva (si). La gura 1.2 muestra el esquema general de los problemas. El Entscheidungsproblem [1] (problema de decisin en alemn) se dene como "dada una

Figura 1.2: Problema de decisin en Teora de la Computacin frase del clculo de predicados de primer orden, decidir si ella es un teorema", es el problema de

1.5.

PREGUNTAS Y RESPUESTAS, EJERCICIOS RESUELTOS Y PROPUESTOS

11

decisin que motiv a Turing y a Church a dar origen a la Teora de la Computacin en 1936. Un ejemplo tpico de este tipo de problema es la siguiente pregunta: Es primo un nmero entero dado?, y una instancia de este problema sera: Es 17 un nmero primo?. Se trata de entender al 17 como un elemento del conjunto de todos los nmeros enteros y se quiere saber si pertenece al conjunto de los nmeros primos. Lo anterior lleva a la pregunta de si realmente es posible reducir o redenir todos los problemas a la forma de un problema de decisin. Para lo cual le sugiero platearse ejemplos e investigar esta posibilidad, pues es en base a esta generalizacin de problemas sobre la cual funciona la Teora de la Computacin. Esto puede parecer una desventaja, como lo menciona Hopcroft [2]: . . . Un aspecto potencialmente poco satisfactorio de esta denicin de problema es que normalmente no se piensa en los problemas como cuestiones de decisin (es o no verdadero lo siguiente?) sino como solicitudes para calcular o transformar algunos valores de entrada (encontrar la mejor forma para realizar esta tarea) . . . Sin embargo, segn la computabilidad y complejidad las soluciones al problema de decisin y al problema original se diferencian a lo sumo por un factor lineal y se puede decir que vale la pena esta generalizacin de los problemas a cambio del formalismo que necesita la Ciencia de la Computacin. Esta teora de la computacin entonces va a denir los problemas en funcin de un lenguaje. Justamente, el cuadro 1.1 muestra la jerarqua de Chomsky en donde se relacionan los tipos de lenguajes (problemas) con el tipo de mquina (modelo) que reconoce cadenas que pertenecen a cada tipo y a la gramtica (modelo) que genera las cadenas que pertenecen al tipo de lenguaje. Dicha jerarqua estable una relacin inclusiva entre los lenguajes, asi, el lenguaje Tipo 3 Tipo 2 Tipo 1 Tipo 0. Esto quiere decir que los lenguajes Tipo 0 son el tipo de lenguaje que abarca a todos los que se pueden resolver a travs de una Mquina de Turing (la ms poderosa).

1.5. Preguntas y respuestas, ejercicios resueltos y propuestos


Preguntas y respuestas
1. Qu es una teora? [3] Dentro del proceso de produccin cientca: Una Teora es un conjunto de medios de representacin conceptual y simblica (explicativo de los hechos), que tiene adems un conjunto de reglas de inferencia que permiten la previsin de los datos de hecho. 2. Qu es una mquina abstracta? Es una mquina que no existe fsicamente, pero que ejecuta instrucciones sobre una entrada y produce una salida, habitualmente se han empleado en el estudio de la computabilidad. Ejemplos: Autmatas Finitos, Autmatas a Pila, Autmatas linealmente acotados y Mquina de Turing. La computadora que utilizamos es compleja, cambia con el tiempo, por tanto una teora basada en especicaciones de hardware no sera muy til, por tanto los Modelos de Computacin estn basados en mquinas abstractas. (matemtica). 3. Qu es el poder de una mquina abstracta?, qu signica que una mquina sea ms poderosa que otra?. En el contexto de la Teora de la Computacin, una mquina es

12

CAPTULO 1.

INTRODUCCIN

poderosa en la medida que soluciona problemas sin importar como lo hace (no importa la eciencia en tiempo y recursos, sino su efectividad en lograr resolver el problema). En los trminos del paradigma, si una mquina reconce lenguajes ms complejos ser ms podedora, segn la Jerarqua de Chomsky la mquina que reconoce el lenguaje tipo 0 es la ms poderosa.

Ejercicios resueltos
1. Diferencia entre el operador clausura de Kleene aplicado sobre un conjunto y sobre un alfabeto. Por ejemplo: El conjunto A = {a,b} cul es el A* y para el alfabeto B = {a,b} cul es B*. La diferencia se debe a que el operador estrella o clausura de Kleene es polimrco. Aunque A y B son el mismo conjunto, se interpretan de forma diferente para el operador. En el caso de A es un conjunto de elementos y A* es el conjunto de todos sus subconjuntos, A es nito y A* tambin, A* = {, {a}, {b}, {a, b}}. En el caso de B, es interpretado como un alfabeto, es decir un conjunto nito de smbolos. Aplicando el mismo operador a B nos d un conjunto innito, B* = {, a, b, aa, ab, ba, bb, aaa, aab, aba, ... } (se est formando el conjunto de todas las cadenas, incluyendo la cadena vaca, que se puede formar con el alfabeto B). 2. Considere el proceso de compilacin de un programa escrito en un lenguaje de programacin. Identique el alfabeto, cadena, lenguaje y problema segn la Teora de la Computacin. El problema de la compilacin de un programa escrito en algn lenguaje de programacin puede ser visto a travs del paradigam de lenguajes formales que contiene la Teora de la Computacin. El compilador no es ms que un sistema que es capaz de ver si una entrada (el cdigo fuente) esta bien escrito y sigue las reglas del lenguaje de programacin que est reconociendo. Es decir, el compilador es una mquina reconocedora de textos (cdigos fuente) que pertenecen al conjunto de todos los cdigos escritos en un lenguaje de programacin. De esta forma se denen: El alfabeto : es el conjunto de smbolos que puede escribirse en un teclado de computador con el cual puede escribirse texto (caracteres alfanumricos, caracteres especiales, espacio, etc.). Cadena de entrada w: La entrada del compilador visto como una mquina reconocedora, no es ms que cualquier texto que podamos escribir con el teclado del computador (es decir con ). Cada cadena w se puede generar concatenando elementos de , de esta maneras tenemos innitas cadenas (textos)y entonces es innito. El lenguaje L: es el subconjunto de formado por las cadenas (texto) que siguen las reglas de un lenguaje de programacin especco. El compilador reconoce un lenguaje L innito pues las reglas de un lenguaje de programacin (aunque son nitas) permiten escribir innitos programas que formaran parte de L. El problema P: El compilador resuelve un problema de decisin al determinar si un texto de entrada compila o no. Decir que un texto compila signica que pertenece al lenguaje L de todas los posibles e innitos cdigos que pueden escribirse en

1.5.

PREGUNTAS Y RESPUESTAS, EJERCICIOS RESUELTOS Y PROPUESTOS

13

el lenguaje de programacin. Decir que un texto o cadena de entrada en no compila es decir que no pertenece a L, es decir que no sigue las reglas del lenguaje de programacin. Comentario: Evidentemente, el compilador es un sistema que adems de resolver el problema de decisin aporta como valor agregado un listado de errores en el caso de no poder compilar y el cdigo objeto en el caso de compilar. El problema P (compilacin), es un problema de pertenencia de un conjunto: pertenece el programa w al conjunto innito de programas L escritos en un lenguaje de programacin particular?. Si L fuese nito resultara sencillo de resolver, pero como afortunadamente (para quienes programan) L es innito (se pueden escribir innitos programas utilizando un lenguaje de programacin) se debe buscar el modelo nito de L que permita reconocer un programa bien escrito en un lenguaje de programacin dado. Este modelo nito es justamente lo que la Teora de la Computacin permite hacer.

Ejercicios propuestos
1. Qu es un lenguaje formal?, Diferencia con los lenguajes naturales 2. Contestar verdadero (V) o falso (F):
a ) es un lenguaje formado por el alfabeto. b ) La clausura de Kleene sobre el alfabeto puede ser en algunos alfabetos un conjunto nito. c ) Dado el alfabeto = {a,b} y = {0,1}, la cadena w = a1b0 pertenece al alfabeto

d ) Segn la Jerarqua de Chomsky un lenguaje esta asociado un nivel de clasicacin de problemas asociado a una mquina e ) Un algoritmo es el conjunto de instrucciones que puede calcular f ) No existe un lenguaje innito L en el alfabeto = {a,b} para el cual L sea diferente a L* (L = L*)

3. Sea A, B y C lenguajes de un alfabeto . En cada una de los tems siguientes se indican la expresin de 2 lenguajes. Seale si son siempre iguales y justique (indique contraejemplos en caso de ser apropiado)
a ) A (B C) y AB b ) A*B* y (AB)*

AC

4. Enumere al menos 5 lenguajes (que no sean lenguajes de programacin o idiomas) que haya utilizado. Para cada uno de ellos identique el alfabeto y de ejemplo de una cadena del lenguaje, describa el lenguaje.

14

CAPTULO 1.

INTRODUCCIN

Captulo 2

Lenguajes Regulares y autmatas nitos


Los lenguajes regulares, de tipo 3 segn la jerarqua de Chomsky, son aquellos que son reconocidos por autmatas de estados nitos, son denotados por expresiones regulares y generados por gramticas regulares. Estos lenguajes contienen a todos los lenguajes nitos generados a partir de cualquier alfabeto. Los lenguajes innitos tipicados como regulares poseen ciertas propiedades que lo caracterizan y distinguen de otros lenguajes ms complejos (ver tema sobre las propiedades y algoritmos de decisin de los lenguajes regulares).

2.1. Autmatas de estados nitos


Los Autmatas de Estados Finitos (AF): Describen, reconocen y denen a los Lenguajes Regulares. Es el modelo matemtico de un sistema con estados y salidas discretas. Los Tipos de Autmatas Finitos son: 1. Autmata Finito Determinista (AFD). No pueden estar en ms de un estado simultneamente. 2. Autmata Finito No Determinista (AFN). Puede estar en varios estados al mismo tiempo.

2.1.1. Autmatas nitos determinista (AFD)


Un AFD es una quntupla A = (Q , , , q0 , F), siendo: Q = conjunto nito de estados.
= conjunto nito de smbolos del alfabeto.

q0 = es el estado inicial (denotado con echa a inicio) F = conjunto de estados nales (o estados de aceptacin), F Q
= La funcin de transicin entre estados, : Q x Q.

15

16

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

En los AFD debe cumplirse que: Para toda a que esta en existe exactamente una transicin de salida de cada estado, es decir la funcin de transicin dado un estado y un valor de entrada se obtiene como resultado siempre un solo valor (estado). Las siguientes son las tres formas para expresar y representar la funcin de transicin, las cuales son equivalentes entre si, cualquiera de ellas es suciente para completar el diseo del AFD: 1. Diagrama de Transicin: representado a travs de un grafo. Un grafo G = (V,E) consiste de un conjunto nito de vrtices (o nodos) V y un conjunto nito de pares de vrtices (o aristas) E llamados enlaces (los cuales son bidireccionales). Un camino en un grafo es una secuencia de vrtices V1 , V2 , ... , Vk , con k 1, tal que hay un enlace (Vi ,Vi+1 ) con 1 i k. La longitud del camino es k-1. Si V1 = Vk entonces el camino es un ciclo. Una clase de grafo dirigido Dgrafo G =(V,E), consiste en un conjunto nito de vrtices V (o nodos) y un conjunto nito de pares ordenados de vrtices E llamados arcos (una sola direccin). Un arco de v a w se denota como v w. Un camino en un dgrafo es una secuencia de vrtices V1 , V2 , ... , Vk , con k 1, tal que Vi Vi+1 es un arco con 1 i k. La longitud del camino es k-1. El camino es de V1 a Vk (importa la direccin). Si v w es un arco entonces v es predecesor de w y w es sucesor de v. Ejemplo: Dado el Grafo G = ({1,2,3,4}, {i j | i < j }) 1,2,3,4 es un camino de longitud 3 de 1 a 4. 1,4 es un camino de longitud 1 de 1 a 4. 3,3 no es un camino. 3 es un camino de longitud 0 de 3 a 3? Por notacin, dado un AFD si p y q estan en Q y a en , se dene la transicin (q,a) = p. como un arco (enlace) etiquetado a entre el estado (vrtice) q y el estado (vrtice) p. Los estados o vrtices de aceptacin se denotan grcamente con un doble crculo. Por ejemplo si r esta en F debe ser denotado con doble crculo como se observa en la gura 2.1.

Figura 2.1: Ejemplo de transicin en AFD 2. Funcin de transicin: representada a travs de una funcin. Una funcin asigna a cada elemento de un conjunto (Conjunto Dominio) un elemento de otro conjunto (Conjunto Rango o Codominio). As la funcin f se denota f : A B, siendo A el dominio y B el rango. Por ejemplo, la siguiente funcin f(x)= x2 , se dene f: N N, donde N es el conjunto de los nmeros naturales. Los tipos de funciones son: Inyectiva: Si a1 = a2 , entonces f (a1 ) = f (a2 )

2.1.

AUTMATAS DE ESTADOS FINITOS

17

Cuadro 2.1: Estructura de la Tabla de Transicin

Smbolos de Estados

Estados

Sobreyectiva: Si todo elemento de B es imagen de alguno de A, es decir la funcin inversa  f 1 (b) = , para todo b en conjunto Rango o Codominio. La funcin de transicin de un AFD esta denida como : Q x Q, es decir tiene como dominio cualquier par del producto cartesiano (Q x ) del conjunto de estados Q y el alfabeto de entrada , y da como resultado un elemento del conjunto rango de estados Q. En la gura 2.1 se muestra un ejemplo de una funcin de transicin (q,a) = p. 3. Tabla de Transiciones: representada a travs de una matriz. La tabla tiene en las columnas todas las entradas del alfabeto y en las las los estados de Q, por lo que el par FilaxColumna representa el dominio de la funcin de transicin (Q x ). Por notacin, en la tabla se escriben los estados de aceptacin o estados nales con asterisco al lado del estado y el estado inicial con una echa. En cada celda interna de la tabla se muestra el resultado de la transicin (codominio) es decir el estado Q al cual se realiza la transicin dado la la y la columna de la posicin de la celda respectiva. En los AFD cada celda de la tabla debe tener un estado, no se permiten celdas vacias. Ver cuadro 2.1.

Ejemplo: Dado = { 0, 1 } y el lenguaje L = { x | x en y x comienza con 0 }, es decir

todas las cadenas binarias que comienzan con 0. El AFD que lo reconoce, en sus tres representaciones, es el siguiente: M = (Q, , , q0 , F) Donde Q = {q0 , q1 , q2 }, = {0,1} y F = {q1 } 1. Diagrama de transicin: se observa en la gura 2.2.

Figura 2.2: Ejemplo de AFD: cadenas binarias que comienzan con cero
 Dada f:A B, la funcin inversa f 1 :B A, se dene como f 1 (b) = {x | x en A y f(x) = b } para todo b en B

18

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Cuadro 2.2: Ejemplo de Tabla de Transicin


q0 * q1 q2

0
q1 q1 q2

1
q2 q1 q2

2. Funcin de transicin
(q0 , 0) = q1 (q0 , 1) = q2 (q1 , 0) = q1 (q1 , 1) = q1 (q2 , 0) = q2 (q2 , 1) = q2

3. Tabla de transicin: se observa en el cuadro 2.2 Las tres representaciones del AFD son equivalentes y cada una de ellas es suciente para expresar el modelo. Sin embargo, debe enterderse la relacin entre ellas aunque se seleccione solo una de ellas para representar al autmata.

Ejecucin de un Autmatas de estados nitos determinista (AFD)


Para la ejecucin formal de un AFD se utiliza la denicin de la funcin de transicin extendida sobre cadenas . La denicin de su dominio y rango es: = Q x Q. La denicin recursiva de la funcin se dene: 1. Caso base para la cadena vaca : Para todo q en Q, (q,) = q. Esto quiere decir que desde cualquier estado la cadena vaca no cambia el estado del AFD. 2. Caso recursivo para cadenas de cardinalidad mayor que 1: Para todo w en y a en , se cumple que (q,wa) = ( (q,w),a). Por ejemplo: Dado el AFD anterior que reconoce el lenguaje sobre = {0, 1} y L = {x | x en y x comienza con 0}, pruebe si las cadenas w1 = 010 y w2 = 101 estn en el lenguaje L: 1. (q0 ,010) = ( (q0 ,01),0) = ( ( (q0 ,0),1),0) = ( ( ( (q0 , ),0),1),0)

( ( (q0 , 0), 1), 0) ( (q1 , 1), 0) (q1 , 0) = q1 Se acepta al terminar de procesar la cadena 010 y quedar en un estado de aceptacin (q0 ,010) = q1 (q1 est en F)

2.1.

AUTMATAS DE ESTADOS FINITOS

19

2. (q0 ,101) = ( (q0 ,10),1) = ( ( (q0 ,1),0),1) = ( ( ( (q0 , ),1),0),1)

( ( (q0 , 1), 0), 1) ( (q2 , 1), 0) (q2 , 0) = q2 No se acepta al terminar de procesar la cadena 101 y quedar en un estado que no es de aceptacin (q0 ,101) = q2 (q2 no est en F)

Lenguaje aceptado por un AFD


Dado M = (Q, , , q0 , F) un AFD, el lenguaje L aceptado por M est denido por: L(M)= { w | w en y (q0 ,w) pertenece a F } Es decir, el lenguaje de M, es un conjunto de cadenas w que llevan al autmata M desde q0 a un estado de aceptacin. Si L es un L(M) para algn AFD M, entonces decimos que L es un Lenguaje Regular. Nota importante: Para poder vericar si la cadena w est (es aceptada) o no est (no es aceptada) en L se debe terminar de procesarse la cadena w (desde el principio hasta el nal).

2.1.2. Autmatas nitos no determinista (AFND)


Son autmatas de estados nitos que tienen la capacidad de estar en ms de un estado simultneamente. No hay que considerar todos los casos en cada estado, ya que permiten cero, una o ms transiciones de salida de un estado para el mismo smbolo del alfabeto de entrada. Ellos tienen la ventaja de ser ms compactos, exibles y fciles de disear que los AFD. Esta compuesta por la misma tupla de elementos que un AFD A = (Q, , , q0 , F), la diferencia es la denicin de la funcin y el rango de la funcin de transicin, : Q x 2Q tambin : Q x Q En la gura 2.3 se muestra el diagrama de transicin (q,a) = {p,r}, donde el AFND dado el estado q y el smbolo a se mueve a dos estados (un conjunto de estados) simultneamente. Como : Q x Q , entonces (q,a) = R, donde R Q.

Figura 2.3: Ejemplo de transicin en AFND

Ejecucin de un Autmatas de estados nitos determinista AFND


Para la ejecucin formal de un AFND se utiliza la denicin de la funcin de transicin extendida sobre cadenas : Q x Q , denida recursivamente as:

20

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Cuadro 2.3: Tabla de transicin: Lenguaje de las cadenas binarias que terminan en 01
q0 q1 * q2

0 1 {q0 , q1 } {q0 } {q2 }


1. Caso base para la cadena vaca : (q,) = {q}. Es desde cualquier estado del autmata la cadanea vaca no cambia de estado. 2. Paso recursivo para cadenas de cardinalidad mayor que 1: (q,xa) = { r | para algn p en (q,x), (p,a) = r }. Sea w de la forma w = xa donde a es el smbolo nal (sujo de longitud 1) de w y x el resto de w. (q,x) = {p1 , p2 , ..., pn } sea k i=1 (pi ,a) = {r1 , r2 , ..., rn } Entonces (q,x) = ( (q,x),a) = {r1 , r2 , ..., rn }, ver gura 2.4. La extensin para de Q x: ((P,w) = qenP (q,w), para todo conjunto de estados P en Q

Figura 2.4: Denicin de en un AFND Ejemplo: Dado el alfabeto = {0,1} y el lenguaje de todas las cadenas binarias que terminan en 01, L= { x | x en y x termina en 01 }, hallar el AFND que lo reconozca L = { 01, 0001, 101, 1001, 10101, ... } A = (Q, , , q0 , F), donde: Q = {q0 , q1 , q2 }, = {0,1} y F = {q2 } En la gura 2.5 y el cuadro 2.3 se observa el AF que reconoce el lenguaje. Para las cadenas

Figura 2.5: Ejemplo de AFND: cadenas binarias que terminan en 01

2.1.

AUTMATAS DE ESTADOS FINITOS

21

w1 = 01 y w2 = 10101 se muestra la ejecucin formal a partir de la funcin de transicin extendida :

1. (q0 ,01) = ( (q0 ,0),1) = ( ( (q0 , ),0),1) ( ({q0 },0),1) ({q0 , q1 },1) = (q0 ,1) (q1 ,1) = {q0 } {q2 } = {q0 , q2 }, Acepto porque {q0 , q2 } {q2 } = , es decir al menos uno de los estados del autmata es de aceptacin (pertenece a F) luego de procesar la cadena. 2. (q0 ,10101) = ( (q0 ,1010),1) = ( ( ( ( ( (q0 , ),1),0),1),0),1) ( ( ( ( ({q0 },1),0),1),0),1), ({q0 },1) = {q0 } ( ( ( ({q0 },0),1),0),1), ({q0 },0) = {q0 , q1 } ( ( ({q0 , q1 },1),0),1), ({q0 , q1 },1) = (q (q1 ,1) = {q0 } 0 ,1) {q2 } = {q0 , q2 } ( ({q0 , q2 },0),1), ({q0 , q2 },0) = (q (q2 ,0) = { q 0 , q1 } = { q 0 , q 1 } 0 ,0) ({q0 , q1 },1), ({q0 , q (q1 ,1) = {q0 } {q2 } = {q0 , q2 } 1 },1) = (q0 ,1) Acepto porque {q0 , q2 } {q2 } = , es decir al menos uno de los estados es de aceptacin (pertenece a F).

Lenguaje aceptado por un AFND


Dado M = (Q, , , q0 , F) un AFND, el lenguaje L aceptado por M est denido por: L(M) = { w | w en y (q0 ,w)
F = }

Es el conjunto de cadenas pertenecientes a tal que ejecutar el AFND desde el estado inicial q0 con la cadena w, la funcin de transicin extendida (q0 ,w) contiene al menos un estado de aceptacin (es diferente del vaco la interseccin con F).

Equivalencia entre AFD y AFND


Todo Lenguaje regular puede describirse con ambos tipos de autmatas AFND y AFD. Generalmente un AFND es ms fcil de disear (capturar su modelo) y un AFD es mas fcil de implementar (ejecutar para el conocimiento de cadenas). El AFD ms grande puede tener 2n estados y el AFND ms pequeo solo tiene n estados.

Teorema 1. Si L es aceptado por un AFND entonces existe un AFD que acepta L (es decir,
ambos aceptan la misma clase de lenguaje: lenguajes regulares).

Algoritmo para la Construccin de Subconjuntos: Este algoritmo permite a partir de un AFND obtener un AFD equivalente que reconoce el mismo lenguaje. Su nombre se debe a que se intenta construir todos los subconjuntos del conjunto de estados del AFND. AFN N = (QN , , N , q0 , FN ) AFD D = (QD , , D , {q0 } , FD ) Tal que L(N) = L(D) (el lenguaje reconocido por el autmata N sea el mismo que el lenguaje

22

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Cuadro 2.4: Tabla de transicin N : Lenguaje de las cadenas binarias que terminan en 01
N q0 q1 * q2

0 1 {q0 , q1 } {q0 } {q2 }


reconocido por el autmata D, por tanto sean equivalentes) Algoritmo : 1. son iguales para N y D. 2. QD es el conjunto de los subconjuntos de QN , (Conjunto potencia QD = Q N ). No todos los estados de QD son accesibles desde q0 , los estados inalcanzables desde el estado inicial sern eliminados. 3. FD es el conjunto S de subconjuntos de QN (S QN ) tal que S FN = . Es decir FD contiene todos los conjuntos de estados de N que incluyen al menos un estado de aceptacin de N. 4. Para todo S QN y a en , entonces D (S,a) =

pS N (p,a).

Ejemplo: Dado el AFDN de la gura 2.5 y el cuadro 2.4 denotado como N = (QN , , N , q0 , FN ), con = {0,1} y QN = {q0 , q1 , q2 }, FN = {q2 }. Obtener D un AFD tal que L(N) = L(D) a travs del algoritmo de construccin de subconjuntos.

Figura 2.6: Relacin AFDN y AFD: construccin de subconjunto sobre el AFND de la gura 2.5 1. = {0, 1} 2. D = (QD , , D , {q0 }, FD ) 3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q0 , q2 }, {q1 , q2 }, {q0 , q1 , q2 }} (Conjunto de todos los subconjuntos de Q)

2.1.

AUTMATAS DE ESTADOS FINITOS

23

Cuadro 2.5: Tabla de transicin D a travs de la construccin de subconjuntos


q0 q1 q2 D {q0 } {q0 , q1 } *{q0 , q2 }

0 { q0 , q 1 } { q0 , q 1 } { q0 , q 1 }

1 { q0 } { q0 , q 2 } { q0 }

4. FD = {{q2 }, {q0 , q2 }, {q1 , q2 }, {q0 , q1 , q2 }} 5. Generar D , ver cuadro 2.5 y gura 2.6 (se renombran los estados {q0 } = q0 , {q0 , q1 } = q 1 , {q 0 , q 2 } = q 2 )
a) b) c) d) e) f)
D ({q0 },0) = N (q0 ,0) = {q0 , q1 } D ({q0 },1) = N (q0 ,1) = {q0 } D ({q0 ,q1 },0) = N (q0 ,0) N (q1 ,0) D ({q0 ,q1 },1) = N (q0 ,1) N (q1 ,1) D ({q0 ,q2 },0) = N (q0 ,0) N (q2 ,0) D ({q0 ,q2 },1) = N (q0 ,1) N (q2 ,1)

= {q0 ,q1 } = {q0 ,q1 } = {q0 } {q2 } = {q0 ,q2 } = {q0 ,q1 } = {q0 ,q1 } = {q0 } = {q0 }

A continuacin se realiza la ejecucin de AFD resultante para evaluar la cadena w=10101:


D ({q0 },10101) = D (D ({q0 },1010),1) = D (D (D (D (D (D ({q0 }, ),1),0),1),0),1) D (D (D (D (D ({q0 },1),0),1),0),1) = D (D (D (D (D ({q0 },1),0),1),0),1) = D (D (D (D ({q0 },0),1),0),1) = D (D (D ({q0 , q1 },1),0),1) = D (D ({q0 , q2 },0),1) = D ({q0 , q1 },1) = {q0 , q2 }

Se acepta la cadena porque {q0 , q2 } esta en FD La demostracin de este algoritmo se encuentra en el libro de Hopcroft [2] : Se demuestra por induccin sobre el tamao de w, donde el caso base N (q0 , ) = N ({q0 }, ) y para el caso inductivo N (q0 ,w) = N ({q0 },w).

2.1.3. Autmatas nitos no determinista con transiciones nulas (AFND-)


Es un AFND que permite transiciones para la cadena vaca . Antes los AF no se movan con la cadena vaca, es decir N (q, ) = {q} y D (q, ) = q, los AF se quedaban en el mismo estado cuando procesan a la cadena vaca. Ahora con AFND- se tienen transiciones espontneas, es decir sin recibir o procesar ningn smbolo de la entrada. Se aplica si no pertenece al conjunto de smbolos de . Su utilidad:

24

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Facilidad para modelar (autmatas ms sencillos y con menos estados y transiciones). Relacin directa con las expresiones regulares (equivalencia demostrada formalmente) Un AFND- es una quntupla: A=(Q, , , q0 , F), siendo: Q = conjunto nito de estados.
= conjunto nito de smbolos del alfabeto. q0 = es el estado inicial (denotado con echa ) a inicio

F = conjunto de estados nales (o estados de aceptacin). F Q


= la funcin de transicin entre estados : Q x

{} Q .

Ejemplo: Dado L = {0n 1m 2p | n,m,p 0 }, el lenguaje de todas las cadenas de 0, 1 o ms digitos cero (0n ) seguidas de 0, 1 o ms dgitos uno (1m ), y seguidas de 0, 1 o ms digitos dos (2p ). Los siguientes autmatas de las guras 2.7 y 2.8 reconocen a L: En la tabla de transicin 2.6, del AFND- puede o no asumirse la transicin espontnea de

Figura 2.7: AFND para el lenguaje 0n 1m 2p

Figura 2.8: AFND- para el lenguaje 0n 1m 2p la cadena vaca . Es decir, (q,) = {q}. Por ejemplo en el estado q2 , puede ser pero sin embargo tambin es {q2 }.

2.1.

AUTMATAS DE ESTADOS FINITOS

25

Cuadro 2.6: Tabla de transicin de un AFND-


q0 q1 * q2

0 { q0 }

1
{q1 }

2
{q2 }

{q1 } {q2 }

Ejecucin de un Autmatas de estados nitos no determinista AFND-


Dada una cadena w y un AFND-, para reconocer dicha cadena se debe aplicar la funcin extendida para cadenas : Q x Q . Donde (q,w) es el conjunto de todos los estados pi tal que se puede ir de q a cada pi por un camino etiquetado w que puede incluir arcos etiquetados . Para calcular este camino es necesario denir el trmino de la -clausura(q) de un estado q (q en Q) como, el conjunto de todos los estados a los cuales se puede llegar a partir de q siguiendo un camino de arcos nicamente etiquetados con .

La denicin recursiva de -clausura(q):

Base: -clausura(q) = {q} , es decir por denicin (q,) = {q}, podemos imaginarnos un bucle de un estado a si mismo etiquetado . Ver gura 2.9. Paso inductivo: Si es la funcin de transicin de AFND- y p est en la -clausura(q), es decir (q, ) = {p} entonces la -clausura(q) tambin contiene los estados (p,). Ver gura 2.9.

Figura 2.9: Ejemplo de la denicin de -clausura en un AFND- La denicin de la funcin de transicin extendida de los AFND-, con la que se pueden ejecutar este tipo de autmata, es la siguiente: 1. (q0 , ) = -clausura(q0 ) 2. Para todo w en y a en , (q,wa) = -clausura(P) con P Q, Donde:
-clausura(P) = { p | para algn r en (q,w), p en (r,a) } , Aplicar -clausura a cada p en P.

3. Como aplicar la funcin a un conjunto de estados R. (R,a) =

qenR

(q,a), R Q

26

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Figura 2.10: Ejemplo de la denicin de -clausura en un AFND- en caso inductivo 4. Como aplicar la funcin a un conjunto de estados R. (R,a) = qenR (q,a), R Q. Entonces se tienen las siguientes deniciones (q,w) = (q,x) = {r1 , r2 , ..., rk } con w = xa. k m i=1 (ri ,a) = {p1 , p2 , ..., pm } y (q,w) = j =1 -clausura(pj ). Ver gura 2.10. Ejemplo: Dada la cadena w = 02 determinar si pertenece o no al lenguaje 0n 1m 2p reconocido por el AFND- de la gura 2.8 Denicin de la -clausura de los estados del autmata:
-clausura(q0 ) = {q0 , q1 , q2 } -clausura(q1 ) = {q1 , q2 } -clausura(q2 ) = {q2 }

Aplicando la funcin de transicin extendida :


(q0 ,02) = -clausura( ( (q0 ,0),2)) = -clausura( (-clausura( ( (q0 ,),0)),2)) -clausura( (-clausura( ({q0 , q1 , q2 },0)),2)) (q0 , ) = -clausura(q0 ) = {q0 , q1 , q2 } -clausura( (-clausura({q0 }),2)) ({q0 , q1 , q2 },0) = {q0 } = {q0 }

= -clausura( ({q0 , q1 , q2 },2)) -clausura({q0 }) = -clausura(q0 ) = {q0 , q1 , q2 }


{q2 } = {q2 } {q2 } Acepto la cadena w = 02 ya que (q0 ,02) F = {q2 } = . -clausura(q2 ) ({q0 , q1 , q2 },2) =

Lenguaje aceptado por un AFND-


Dado un AFND- E = (Q, , , q0 , F) el L(E) se dene como: L(E)= { w | w en , (q0 ,w)

F = }

2.1.

AUTMATAS DE ESTADOS FINITOS

27

El lenguaje L(E), el reconocido por el autmata E, es el conjunto de cadenas de que al aplicar la funcin de transicin extendida se obtiene un conjunto de estados de Q donde al menos uno pertenece al conjunto de estados de aceptacin (F).

Equivalencia entre AFD y AFND- (construccin de subconjuntos de ) Teorema 2. Si L es aceptado por un AFND con -transiciones entonces L es aceptado por
un AFND sin -transiciones. es aceptado por un AFD.

Teorema 3. Un lenguaje regular L es aceptado por un AFND con -transiciones si y slo si


A partir de estos teoremas se deriva un algoritmo para pasar de un AFND- a un AFD, es decir para eliminar las transiciones y obtener un autmata equivalente que reconozca el mismo lenguaje de forma deterministica. Dado E un AFND- se quiere lograr que L(E) = L(A), con y A un AFD, es decir E (q0E ,w) = D (q0D ,w) para todo w en L: E (AFND-) = (QE , , E , q0E , FE ) D (AFD) = (QD , , D , q0D , FD ) Algoritmo: 1. q0D = -clausura(q0E ) 2. QD = Q E , es decir el conjunto de subconjuntos de QE 3. FD = { s | s en QD y {s}
FE = }

4. D (S,a) para todo a en y S en QD , se cumple: D (S,a) = n j =1 -clausura(rj ), {r1 , r2 , ..., rn } = k i=1 E (pi ,a) con S = {p1 , p2 , ..., pk }. Ver gura 2.11

Figura 2.11: Construccin de subconjuntos en un AFND-

28

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Cuadro 2.7: Tabla de transicin D a travs de la construccin de sunconjuntos de


q0 q1 q2 D {q0 , q 1 , q 2 } { q1 , q 2 } *{q2 }

0 {q0 , q1 , q2 }

1 { q1 , q 2 } { q1 , q 2 }

2 { q2 } { q2 } { q2 }

Ejemplo: Dado el AFND- E de la gura 2.8, encontrar un AFD equivalente que reconozca el mismo lenguaje. E = (Q, , , q0 , F), donde Q = {q0 , q1 , q2 }, = {0, 1, 2} y F = {q2 }. Se obtiene el AFD D = (QD , , D , q0D , FD ), aplicando el algorimos de construccin de subconjuntos de : 1. = {0, 1, 2} 2. q0D = -clausura(q0 ) = {q0 , q1 , q2 } 3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q1 , q2 }, {q0 , q2 }, {q0 , q1 , q2 }} 4. FD = {{q2 }, {q1 , q2 }, {q0 , q2 }, q0 , q1 , q2 } 5. Clculo de D : (ver cuadro 2.7) Para el estado inicial {q0 , q1 , q2 } se aplica la para todos los elementos de : denicin * D ({q0 , q1 , q2 },0) = -clausura(E (q0 , 0) E (q1 , 0) E (q2 , 0)) = -clausura({q0 } ) = -clausura({q0 }) = -clausura(q0 ) = {q 0 , q1 , q 2 } * D ({q0 , q1 , q2 },1) = -clausura(E (q0 , 1) E (q1 , 1) E (q2 , 1)) = -clausura( {q1 } ) = -clausura({q1 }) = -clausura(q1 ) = {q 1 , q2 } * D ({q0 , q1 , q2 },2) = -clausura(E (q0 , 2) E (q1 , 2) E (q2 , 2)) = -clausura( {q2 }) = -clausura({q2 }) = -clausura(q2 ) = {q2 } Para el estado {q1 , q2 } se aplica la denicin para todos los elementos de : * D ({q1 , q2 },0) = -clausura(E (q1 , 0) E (q2 , 0)) = -clausura( ) = -clausura() = * D ({q1 , q2 },1) = -clausura(E (q1 , 1) E (q2 , 1)) = -clausura({q1 } ) = clausura({q1 }) = -clausura(q1 ) = {q1 , q 2} * D ({q1 , q2 },2) = -clausura(E (q1 , 2) E (q2 , 2)) = -clausura( {q2 }) = clausura({q2 }) = -clausura(q2 ) = {q2 } Para el estado {q2 } se aplica la denicin para todos los elementos de : * D ({q2 },0) = -clausura(E (q2 , 0)) = -clausura() = * D ({q2 },1) = -clausura(E (q2 , 1)) = -clausura() = * D ({q2 },2) = -clausura(E (q2 , 2)) = -clausura({q2 }) = -clausura(q2 ) = {q2 } Hay dos formas de interpretar la construccin de subconjuntos-, una para crear un AFD y otra AFND. La idea es llegar a un AF ms fcil de implementar (es decir obtener un AFD). AFD: Se toma cada estado como un conjunto de etiquetas. Ver gura 2.12 AFND: Se interpreta el contenido de la etiqueta de cada estado. Ver gura 2.13

2.1.

AUTMATAS DE ESTADOS FINITOS

29

Figura 2.12: AFD equivalente del AFND- de la gura 2.8 a travs de la Construccin de subconjuntos

Figura 2.13: AFND equivalente del AFND- de la gura 2.8 a travs de la Construccin de subconjuntos

2.1.4. Herramientas, implementacin y uso de Lenguajes regulares


Implementacin de un AFD: programacin basada en autmatas
La simulacin de un AFD resulta un enfoque de programacin que permite aumentar el nivel de abstraccin ante la solucin de un problema. El siguiente algoritmo (no recursivo) expresado en pseudocdigo muestra el funcionamiento del AFD de la gura 2.2:
INICIO Conjunto Q[Estado] = {q0 , q1 , q2 } Conjunto [Simbolo]= {0,1} Conjunto F[Estado] = {q1 } Estado Actual = q0 Simbolo A A = LeerSimboloCadena() Mientras a = entonces Actual = transicion (Actual, A) A = LeerSimboloCadena() fin Mientras Si Pertenece(Actual,F) entonces

30

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Imprimir("Se acepta la cadena") sino Imprimir("No se acepta la cadena") fin Si FIN Funcin transicion (Estado q, Smbolo a): Estado Estado S Seleccin q q q q q q = = = = = =
q0 q0 q1 q1 q2 q2

y y y y y y

a a a a a a

= = = = = =

0: 1: 0: 1: 0: 1:

S S S S S S

= = = = = =

q1 q2 q1 q1 q2 q2

fin Seleccin Retornar S fin Funcin

Donde se asume que se tiene los siguientes tipos de datos: Conjunto (paramtrico por el tipo de elemento), Estado, Simbolo. Para ellos se tiene las siguientes operaciones:
LeerSimboloCadena() que permite obtener desde la entrada estndar un Smbolo de la

cadena de entrada w (desde el comienzo, secuencialmente uno a uno) acepta o no la cadena de entrada

Imprimir(CadenaCaracter) funcin que permite imprimir la salida del autmata, si Pertenece(Estado A, Conjunto B[Estado]), es una operacin del tipo de dato Con-

junto que determina si el elemento A (del tipo Estado) pertenece al Conjunto de Estados B. Una posible implementacin del algoritmo anterior en lenguaje C se muestra a continuacin:
#include <iostream> #include <string> #include <stdio.h> using namespace std; enum estados { q0, q1, q2 }; void transicion(enum estados *estado, char a) // funcin de transicin { switch(*estado) { case q0: if(a == '0') {

2.1.

AUTMATAS DE ESTADOS FINITOS

31

putchar(a); *estado = q1; } else { if(a == '1') { putchar(a); *estado = q2; } } break; case q1: if(a == '0' || a == '1') { putchar(a); *estado = q1; } break; case q2: if(a == '0' || a == '1') { putchar(a); *estado = q2; } break; } } int main() { char c; string cad; enum estados state = q0; cout << "AFD que reconoce todas las cout << "Estado inicial: " << state c = getchar(); cad = c; while((c == '0') || (c == '1')) { transicion(&state, c); cout << " Estado actual: " << state c = getchar(); if ((c == '0') || (c == '1')) cad = } if (state == q1) cout << "La cadena else cout << "La cadena " << cad << return 0; }

cadena binarias que comienzan con 0" << endl; << endl;

<< endl; cad + c; " << cad << " SI esta en el lenguaje" << endl; " NO esta en el lenguaje" << endl;

32

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

2.1.5. Preguntas y respuestas, ejercicios resueltos y propuestos


Preguntas y respuestas
1. Qu es un autmata?. Es una mquina abstracta, dispositivo terico o modelo matemtico que procesa una secuencia nita de smbolos de un alfabeto, cambiando su estado de acuerdo al smbolo que est leyendo o procesando, lo que permite saber si una cadena se encuentra dentro o no de un lenguaje dado. Tiene un conjunto nitos de estados posibles y muestra las posibles transiciones entre los estados. 2. Por qu en los AF se tiene siempre un slo estado de inicial y uno o ms estados nales?. El objetivo de una AF es aceptar cadenas de un lenguaje y para eso necesita estados de aceptacn, por tanto el conjunto F no puede ser vaco, pero si puede tener uno o ms caminos para reconocer esas cadenas (tener mas de un estado en F). Con respecto al estado inicial se necesita slo uno, pues el AF necesita saber de forma precisa por donde comenzar el funcionamiento de la mquina. Si se tiene ms de un estado inicial el AF debe seleccionar por donde comenzar, lo cual resultara complicado para un modelo matemtico sencillo. De forma anloga ocurre en los lenguajes de programacin donde slo hay un inicio para el programa (main) pero puede tener mas de un nal (exit). 3. Por qu un AF debe terminar de procesar la cadena de entrada para saber si est o no en el lenguaje?. La mayora de los autmatas o mquinas de reconocimiento (excepto la Mquina de Turing) tienen esta restriccin que les permite simplicar el funcionamiento de su modelo. Si bien es cierto que para algunos lenguajes no hace falta recorrer toda la cadena pues su denicin no lo requiere (por ejemplo puede estar relacionada slo con el prejo de las cadenas), hacer que estos casos funcionen como los dems es lo ms simple y general en un modelo matemtico. 4. Por qu el conjunto de estados de un AF es nito? Una de las caractersticas de los autmatas nitos es que el conjunto de estados es nito. Esto se debe a una propiedad matemtica sobre los lenguajes regulares (relacin de equivalencia) que establece particiones nitas sobre el lenguaje (aunque el lenguaje puede ser innito). Esta propiedad es diferente en otros tipos de lenguajes ms complejos pues las particiones se hacen innitas y por ende el nmero de estados para representarlas. 5. Puede obtener un AFND algortmicamente a partir de un AFD?, por qu? El procedimiento de la construccin de subconjuntos permite llevar de un AFND a AFD, es decir eliminar el no determinismo. El no determinismo implica el manejo de opciones o alternativas en cada paso de transicin generando instancias simultneas del Autmata en cada alternativa. El caso contrario parte de un AFD y se quiere obtener un AFND, es decir agregar no determinismo al autmata. Este proceso no tiene un algortimo, pero si dicho algoritmo pudiera existir tendra que ser en si no determinstico, es decir aplicar alternativas nitas en cada paso de transicin que incluso podra no tener sentido, sera muy complejo e incluso dicil de aplicar en algunos lenguajes regulares. 6. Qu signica la equivalencia de autmatas?. Dos autmatas son equivalente cuando reconocen exactamente el mismo lenguaje. Es necesario distinguir entre ser iguales y ser equivalente. Dos autmatas diferentes pueden tener diferente cantidad de estados, con diferentes transiciones e incluso diferente cantidad de estados de aceptaciin, es decir

2.1.

AUTMATAS DE ESTADOS FINITOS

33

son diferentes en todo sentido y por tanto no son iguales. Sin embargo, estos autmatas diferentes, M1 = M2 , son capaces de procesar cadenas de y reconocer el mismo lenguaje L (todas y cada una de las cadenas que forman a L, ni una ms ni una menos), en ese caso son llamados autmatas equivalentes, es decir L(M1 ) = L(M2 ).

Ejercicios resueltos
1. Determine las diferencias entre un AFD y un AFND. Ver el cuadro 2.8 2. Aplicaciones de la vida real que pueden ser vistos como AF. Algunas aplicaciones interesantes de los AF estn referidas al almacenamiento de diccionarios como los usados en los celulares, en la que se utilizan sus caractersticas para hacer bsquedas, inserciones o modicaciones rpidas. As como tambin para mejorar el ordenamiento y bsqueda en otros tipos de aplicaciones como los circuitos digitales, texto, secuencias lgicas de funcionamiento (como la maquinaria industrial, robtica) y otras. Tambin son tiles para el modelado de aquellos casos en los que a partir de una accin anterior se puede llegar a un conjunto determinado de destinos, pero no se tiene certeza anticipada de cul de ellos es el indicado, utilizados para modelar protocolos de comunicacin, sistemas distribuidos, planicacin, etc. 3. Modelar un AF que reconozca un identicador vlido en el lenguaje de programacin C. Un identicador es un nombre que dene a una variable, una funcin o un tipo de datos. Un identicador vlido ha de empezar por una letra o por el carcer de subrayado _, seguido de cualquier cantidad de letras, dgitos o subrayados. Adems: No debe contener caracteres especiales, tales como @, $, #, no debe haber espacios en blanco en los identicadores. El AF que reconoce este lenguaje es el siguiente: A = (Q, , , q0 , F), donde Q = {q0 , q1 }, son todos los caracteres alfanumricos y caracteres especiales permitidos (tales como -,_,.) , F = {q1 }, y se expresa en el diagrama de transicin de la gura 2.14 , donde se observa dos conjuntos de caracteres: A = conjunto de caracteres alfabticos B = conjunto de caracteres alfabticos, numricos y subrayados

Figura 2.14: AF que reconoce un identicador en el lenguaje C Existen palabras propias del lenguaje (palabras reservadas) que no pueden ser usadas como identicadores ej: if, do, while, etc. Cmo puede modicar el AF anterior para no considerar como identicadores a las palabras reservadas del lenguaje.

34

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Cuadro 2.8: Tabla comparativa de AFD y AFND Caracterstica Funcin de transicin Denicin del Lenguaje que reconoce Estado actual AFD : Q x Q, rango es un elemento de Q L(M)={w|w y (q0 ,w) F }, Lenguaje regular L reconocido por el AFD M Un solo estado actual en cada paso del autmata AFND : Q x Q , rango es un subconjunto de Q L(M)={w|w y (q0 ,w) F = }, Lenguaje regular L reconocido por el AFND M El estado actual puede ser un conjunto de estados (subconjunto de Q), es deir mltiples estados simultaneamente No hay restricciones con respecto a las transiciones, un smbolo de puede tener 0, 1 o ms transciones de salida desde el mismo estado Las posiciones de las celdas pueden tener cualquier subconjunto de Q (incluyendo el ). Los AFND se utilizan en lenguajes regulares con alfabetos grandes y muchos estados, pues es ms sencillo de modelar, tiene relacin directa con las expresiones regulares y son utiles para aplicar operaciones sobre autmatas El modelo de un AFND es sencillo pues no exige evaluar todo en cada estado, al contrario puede considerar solo las opciones que aceptan las cadenas y muestra un diseo ms sencillo. Por el contrario, su implementacin requiere simular las alternativas simultneas en cada paso de transicin (bsqueda en un rbol realizando backtracking) y puede hacer complejo y poco eciente su programacin e implementacin

Condicin del Desde cada estado existe una trandiagrama de sicin de salida por cada smbolo de transicin Condicin de Cada posicin de la celda de la tala tabla de bla debe tener slo un estado (estar transicin completa) Utilidad Los AFD son los que se implementan para el reconocimiento de lenguajes regulares, se usan para simular AFND

Facilidad de El modelo de un AFD deben consimodelado y derar todo en cada estado, esto lo programacin hace exhaustivo y difcil de disear. En cambio su programacin o implementacin es un algortimo determinstico (tiene denido que hacer en cada caso) eciente

2.1.

AUTMATAS DE ESTADOS FINITOS

35

4. Modelar un AF que reconozca el conjunto de enteros y nmeros en punto otante o tambin llamadas "literales numricas". En el lenguaje C, las siguientes expresiones son literales numricas vlidas: 3, +0, -2E+7, 13., -01, -14.4, 41.16, -.4E-7, 0.2E-20, 00E0, 01E-06. La letra E se reere a un exponente y su presencia hace que el nmero subsiguiente sea un entero. Se supone que no existe lmite en el nmero de dgitos consecutivos en ninguna parte de la expresin (no hay el problema de la precisin). El AF que reconoce este lenguajs puede ser el siguiente: B = (Q, , , q0 , F), donde Q = {qi | 0 i 7 }, son todos los caracteres numricos y caracteres especiales permitidos (tales como .,+,-,E), F = {q1 , q4 , q5 , q6 }, y se expresa en el diagrama de transicin de la gura 2.15, donde se observa el conjunto de caracteres N = {0,1,2,3,4,5,6,7,8,9}.

Figura 2.15: AF que reconoce un literal numrico en el lenguaje C Se plantea como ejercicio pensar cmo puede modicar el AF de la gura 2.15 para reconocer lo siguiente: cambiar el uso del punto para que en su lugar la coma (,) se utilice para separar enteros y decimales, y el punto (.) se emplee como separador de las unidades decimales (comenzando desde el lado derecho de tres en tres). Por ejemplo, partes enteras de las literales numricas como: 1.300 o 35.413 o 38 o 23.300.080, etc.

Ejercicios propuestos
1. Para = {0,1} construya un AFD que acepte los siguientes lenguajes:
a ) El conjunto de cadenas que tiene 011 como subcadena. b ) El conjunto de todas las cadenas cuyo tercer elemento desde el extremo izquierdo sea un 1. c ) El conjunto de cadenas en las que el nmero de ceros es divisible por 3. d ) El conjunto de cadenas que terminan con 01. e ) El conjunto vaco. f ) El conjunto de la cadena vaca.

2. Constuya un AF para los siguientes lenguajes:


a ) El conjunto de cadenas basadas en ={a,b,c} cuyo ltimo smbolo no haya aparecido antes en la misma entrada.

36

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Cuadro 2.9: Tabla de transicin


p

q r *s

0 {p, q} {r} {s} {s}

1 {p} {r}

{s}

Cuadro 2.10: Tabla de transicin


p

*q r *s

0 {q, s} {r} {s}

1 {q} {q, r} {p} {p}

b ) Conjunto de 0 y 1 que contenga 2 ceros separados por un nmero de posiciones mltiplo de 3. Ntese que 0 es un mltiplo de 3 vlido.

3. Obtenga un autmata nito (de cualquier tipo) para reconocer los siguientes lenguajes apartir del alfabeto binario:
a) b) c) d) e) f) g) h) a) b) c) d)

cadenas acabadas en 00 cadenas con dos unos consecutivos cadenas que no contengan dos unos consecutivos cadenas con dos ceros consecutivos o dos unos consecutivos cadenas con dos ceros consecutivos y dos unos consecutivos cadenas acabadas en 00 o 11 cadenas con un 1 en la antepenltima posicin cadenas de longitud 4
M1 = ({p, q, r, s}, {0, 1}, , p, {s}) donde est dada por el cuadro 2.9 M2 = ({p, q, r, s}, {0, 1}, , p, {q, s}) donde est dada por el cuadro 2.10 M3 = ({p, q, r}, {a, b, c}, , p, {r}) donde est dada por el cuadro 2.11 M4 = ({q0 , q1 , q2 , q3 , q4 }, {a, b}, , q0 , {q4 }) donde est dada por el cuadro 2.12

4. Construir un AFD equivalente a los siguientes autmatas:

2.1.

AUTMATAS DE ESTADOS FINITOS

37

Cuadro 2.11: Tabla de transicin


p

q *r

{p} {q}

a {p} {q} {r}

b {q} {r}

c {r}

{p}

Cuadro 2.12: Tabla de transicin


q0 q1 q2 q3 q4

a b {q1 , q2 } {q1 , q3 } {q3 } {q4 } {q4 }


38

CAPTULO 2.

LENGUAJES REGULARES Y AUTMATAS FINITOS

Bibliografa
[1] Alonzo Church: A note on the Entscheidungsproblem. Journal of Symbolic Logic. 1 (1936). pp 40 - 41. [2] Hopcroft, Rajeev Motwani, Jerey D. Ullman. Introduccin a la Teora de Autmatas y Lenguajes Formales. PrenticeHall, 2002. [3] Chacn, M. y Padrn, J. (1994) Qu es teora. Investigacin y Docencia. Caracas: Publicaciones del Decanato de Postgrado, USR. [4] Seymour Lipschutz (1970) Teora de Conjuntos y Temas anes. macGraw-Hill

39

Вам также может понравиться