FINITOS DETERMINISTICOS A
EXPRESIONES REGULARES
Investigación Por: Fernando David Irías Escher
1
CONTENIDO
2
INTRODUCCIÓN
Al finalizar este informe, se espera que el lector tenga la capacidad de aplicar un método que le
facilite la conversión de DFAs a Expresiones Regulares, por lo cual se le dará un marco teórico
para comprender la nomenclatura que se utilizare a través del estudio. También se
desarrollaran tres ejemplos utilizando el método seleccionado, los cuales se explicará paso a
paso su resolución.
MARCO TEÓRICO
¿QUÉ ES UN DFA?
Un Autómata Finito Determinístico (DFA) no es más que una máquina que consta de un
conjunto finito de estados, de ahí el nombre de Máquina de Estados. Uno de estos estados debe
ser la entrada de la máquina. En todo DFA debe existir uno o varios estados finales o de
aceptación.
Todo DFA contiene un conjunto de transiciones. Cada estado debe tener una transición por cada
símbolo que exista en el lenguaje. Estas transiciones deberán comunican un estado con otro (o
se mantiene recursivos en el mismo estado). Una transición puede ser transitada si, y solo si, el
símbolo de entrada que se está procesando es uno de los símbolos1 que permite el paso a través
de la transición.
Una cadena (o palabra) es una sucesión de símbolos que están contenidos dentro del lenguaje
del autómata. Se dice que una cadena es aceptada cuando al haber consumido todos los
símbolos contenidos en esta (por medio de las transiciones), se llega a un estado final o de
aceptación.
3
¿QUÉ ES UNA EXPRESIÓN REGULAR?
Una Expresión Regular es una manera en que se puede representar una máquina de estados.
Esta se considera más descriptiva que los DFAs, ya que presenta de una manera más legible
para el humano el tipo de cadenas acepta la máquina.
Se dice que los DFAs y las Expresiones Regulares son congruentes entre sí, ya que de ambas
maneras se pueden representar una infinidad de Máquinas de Estados. Ya que estas se
consideran congruentes, esta investigación se enfocara en demostrar que se puede hacer una
conversión de un DFA a una Expresión Regular.
OPERACIONES DE UTILIDAD
Nos limitaremos a solo establecer algunas de las operaciones que nos serán útiles al momento
de desarrollar la conversión2:
2. ∅ܴ ≅ ܴ∅ ≅ ∅
3. ∅ + ܴ ≅ ܴ + ∅ ≅ ܴ
4
CONVERSIÓN DE UN DFA A UNA
EXPRESIÓN REGULAR
Básicamente este método consiste en seleccionar tres estados: ݍ , el cual no deberá ser ni el
estado inicial, ni ninguno de los estados finales o de aceptación, también se deberá seleccionar
un estado ݍ௫ y ݍ௬ , de manera que ݍ௫ pueda llegar (por medio de transiciones) a ݍ௬ utilizando a
ݍ como estado intermedio entre estos. Después de haber seleccionado estos estados, se debe
proceder a eliminar el estado ݍ , haciendo una transición que vaya de ݍ௫ a ݍ௬ y que por medio
de la concatenación de las transiciones que llegan de ݍ௫ a ݍ y salen de ݍ a ݍ௬ (incluyendo las
que hacen un bucle en ݍ ). En caso de que ya exista una transición que va de ݍ௫ a ݍ௬ , se hace la
unión de la Expresión Regular de dicha transición con la Expresión Regular de la nueva
transición antes creada. Esto se repite hasta que solo existan estados iniciales y finales en el
DFA. Luego de tener la máquina de esta forma se debe generar la Expresión Regular a partir de
ella.
En el párrafo anterior se explico a groso modo (sin ningún detalle) como se debe reducir la
máquina de estados, y también vimos que al reducirla la debemos transformar a una Expresión
Regular. Ahora vamos a definir paso por paso y con detalle cómo se debe hacer la reducción.
Veremos que al hacer la reducción se pueden dar tres casos en los que tendremos que generar la
Expresión Regular de una manera ligeramente diferente.
5
EJEMPLO #1
PASO 1: Por cada transición ܳ 3 que pueda ser recorrida con múltiples símbolos, se hará una
transición ܳ (siendo esta una transición que contiene una Expresión Regular)4 que contenga los
símbolos de dicha transición ܳ representados como una Expresión Regular, específicamente
como una unión.
APLICACIÓN: Como podemos observar, la transición que hace un bucle en ݍଶ es la única
transición que tiene múltiples símbolos con la cual puede ser transitada, por lo tanto la
representaremos como una unión de la siguiente manera: a + b. Nos resulta en:
ILUSTRACIÓN 2: PASO 1
6
PASO 2: Por cada estado ݍ , se debe verificar si hay una transición ܳ que llegue a cada estado
ݍ (donde ݍ = ݍ ) de la máquina. En caso de no existir esta transición se deberá agregar una
transición que va desde ݍ hasta ݍ con el valor ∅.
APLICACIÓN: Al aplicar el paso 2 a nuestro DFA, podemos ver que no hay transición de ݍ a ݍଶ ,
tampoco existe un bucle en ݍଵ , tampoco hay transición de ݍଷ a ݍଶ , etc. Por lo tanto agregaremos
todas las transiciones que hacen falta para conectar cada estado con el resto de estados de la
máquina. Estos estados tendrán el símbolo ø. Por lo tanto nuestro DFA resulta en:
ILUSTRACIÓN 3: PASO 2
PASO 3: Seleccionar un estado ݍ , talque ݍ NO sea un estado inicial y/o final. Luego, por cada
estado ݍ௫ se selecciona un camino, pasando por ݍ , hacia cada estado ݍ௬ del DFA, talque
ݍ௫ ≠ ݍ y ݍ௬ ≠ ݍ . Ahora se crea una transición ܳ que tenga como Expresión Regular el
símbolo (o Expresión Regular) de la transición que va de ݍ௫ a ݍ concatenado con el símbolo de
la transición que va de ݍ a ݍ௬ . Al bucle que se hace en ݍ se le aplicará la operación de clausura
(o clausura Kleene) y se concatenará con la Expresión Regular antes encontrada. A esta nueva
transición ܳ se le aplica una operación de unión con el símbolo de la transición que va de ݍ௫ a
ݍ௬ . La transición ܳ deberá quedar de la forma ܶ ܵ ∗ ܶ + ܶ . Esta nueva transición ܳ transitará
del estado ݍ௫ al estado ݍ௬ .
7
APLICACIÓN: Ahora bien, seleccionaremos como estado ݍ a ݍଵ . Haciendo la concatenación da
cada transición desde todos los estados ݍ௫ hacia todos los estados ݍ௬ usando a ݍ como
intermediario, nos resulta las siguientes Expresiones Regulares:
࢞ ࢟ ࡽ
0 0 ܾܽ
0 2 ܽØ
0 3 ܽܽ
2 0 ܾØ
2 2 ܾØ
2 3 ܽØ
3 0 ܾØ
3 2 ܾØ
3 3 ܽØ
࢞ ࢟ ࡽ
0 0 ܽØ∗ ܾ
0 2 ܽØ∗ Ø
0 3 ܽØ∗ ܽ
2 0 ܾØ∗ Ø
2 2 ܾØ∗ Ø
2 3 ܽØ∗ Ø
3 0 ܾØ∗ Ø
3 2 ܾØ∗ Ø
3 3 ܽØ∗ Ø
El siguiente paso es hacer la unión del ܳ que ya tenemos con el símbolo de la transición que va
de ݍ௫ a ݍ௬ directamente. También agregaremos una columna con la Expresión Regular ya
simplificada, por lo tanto obtenemos:
࢞ ࢟ ࡽ Simplificación
∗
0 0 ܽØ ܾ + ܾ ࢇ࢈ + ࢈
0 2 ܽØ∗ Ø + Ø Ø
0 3 ܽØ∗ ܽ + Ø ࢇࢇ
2 0 ܾØ∗ Ø + Ø Ø
2 2 ܾØ∗ Ø + ܽ + ܾ ࢇ+࢈
2 3 ܽØ∗ Ø + Ø Ø
3 0 ܾØ∗ Ø + ܾ ܾ
3 2 ܾØ∗ Ø + ܽ ܽ
3 3 ܽØ∗ Ø + Ø Ø
8
Excelente! Hemos logrado eliminar el estado ݍଵ de nuestro DFA. Ahora se deben seguir los
mismos pasos hasta tener un DFA que solo contenga el estado inicial y los finales (en este caso
ݍ y ݍଶ ). El DFA nos queda de la siguiente manera:
ILUSTRACIÓN 4: PASO 3
࢞ ࢟ ࡽ Simplificación
∗
0 0 ܽܽØ ܾ + ܾܽ ܾܽܽ + ܾܽ + ܾ
+ܾ
0 2 ܽܽØ∗ ܽ + Ø ܽܽܽ
2 0 ØØ∗ ܽ + Ø Ø
2 2 ØØ∗ ܽ + ܾ + ܽ ܾ+ܽ
Hemos terminado de eliminar los estados no iníciales y no finales de nuestro DFA. Aplicando
todas las Expresiones Regulares de la tabla anterior a nuestro DFA, nos quedaría así:
ILUSTRACIÓN 5: PASO 3
9
PASO 4: Si tenemos un estado inicial ݍ௫ y un estado final ݍ௬ donde ݍ௫ ≠ ݍ௬ , se debería generar
una Expresión Regular a partir de este DFA de la forma ሺܴ + ܷܵ ∗ ܶሻ∗ ܷܵ ∗ , donde R es un bucle en
ݍ௫ , S es el camino que va de ݍ௫ a ݍ௬ , U es un bucle en ݍଶ y T es el camino que va de ݍ௬ a ݍ௫ .
10
EJEMPLO #2
Ahora presentaremos un nuevo ejemplo más corto, pero de mucha importancia, ya que el estado
inicial y final son el mismo. Para resolver esto debemos hacer un paso preliminar antes de
continuar. Todos los demás pasos se mantienen iguales.
Antes de comenzar a reducir el DFA, debemos llevar a cabo un paso alternativo que nos permita
separar el estado inicial y el estado final en dos estados distintos.
PASO A1: Si existe un estado ݍ௫ talque ݍ௫ sea el estado inicial y un estado final, haremos un
nuevo estado ݍ௬ que pasara a ser el estado final y ݍ௫ permanecerá solo como estado inicial. Se
debe crear una transición ܳ que tendrá como símbolo ߝ5.
APLICACIÓN: Creamos un nuevo estado ݍଷ y ponemos una transición que vaya de ݍ a ݍଷ con el
símbolo ߝ.
ILUSTRACIÓN 7: PASO A1
5 ߣ=ߝ
11
Una vez hecha la separación de los estados podemos proseguir con los pasos 1-4. Como
podemos ver, cada transición de nuestro DFA tiene un símbolo único que le permite ser
transitada, por lo tanto el paso 1 nos generará en mismo DFA de la ilustración 7. Aplicamos el
paso 2 para poner todas las transiciones que nos hacen falta. Con esto obtenemos:
ILUSTRACIÓN 8: PASO 2
Esta es la tabla con las expresiones regulares ya simplificadas que nos resulta después de haber
hecho el paso tres para el estado ݍଵ :
࢞ ࢟ ࡽ
0 0 0 + 01
0 2 11
0 3 ߣ
2 0 1 + 00
2 2 01
2 3 ∅
3 0 ∅
3 2 ∅
3 3 ∅
12
A continuación el DFA que nos resulta al haber eliminado ݍଵ :
ILUSTRACIÓN 9: PASO 3
Hacemos lo mismo para ݍଶ , con esto tendremos solo estados iniciales y finales en nuestro DFA.
La tabla de transiciones es:
࢞ ࢟ ࡽ
0 0 0 + 10 + 11ሺ01ሻ∗ ሺ1 + 00ሻ
0 3 ߣ
3 0 Ø
3 3 Ø
Al aplicar el paso tres a todos los estados no iniciales y no finales, obtenemos el siguiente DFA:
13
PASO A2: Si existe un estado ݍ௫ inicial y ݍ௬ final talque hay una transición ߣ entre estos
estados, se deberá hacer una concatenación de las cerradura Kleene de las Expresiones
Regulares que tienen la transición que hace bucle en ݍ௫ , la transición que va de ݍ௬ a ݍ௫ y la
transición que hace bucle en ݍ௬ . A este conjunto se le aplicará la cerradura Kleeme y se le
concatenará la cerradura Kleene de la transición que hace bucle en ݍ௫ y la transición que hace
bucle en ݍ௬.
ሺ + + ሺሻ∗ ሺ + ሻሻ∗
14
EJEMPLO #3
Ahora haremos un nuevo ejercicio para reforzar los métodos aprendidos anteriormente. El
siguiente DFA acepta cadena con un número par de 0´s y de 1´s:
Creamos un nuevo nodo final ݍସ con la transición ߣ que va desde ݍ hasta ݍସ , nos resulta en:
15
Agregamos todas las transiciones ∅ para conectar cada estado con el resto de estados del
DFA:
࢞ ࢟ ࡽ
0 0 00
0 2 1
0 3 01
0 4 ߣ
2 0 1
2 2 ∅
2 3 0
2 4 ∅
3 0 10
3 2 0
3 3 11
3 4 ∅
4 0 ∅
4 2 ∅
4 3 ∅
16
ILUSTRACIÓN 14: PASO 3
࢞ ࢟ ࡽ
0 0 00 + 01ሺ11ሻ ∗ 10
0 2 1 + 01ሺ11ሻ ∗ 0
0 4 ߣ
2 0 1 + 0ሺ11ሻ ∗ 10
2 2 0ሺ11ሻ ∗ 0
2 4 ∅
4 0 ∅
4 2 ∅
4 4 ∅
17
Ahora eliminaremos el estado ݍଶ . Presentamos a continuación la tabla de transiciones y el
DFA sin el estado ݍଶ :
࢞ ࢟ ࡽ
0 0 00 + 01ሺ11ሻ ∗ 10 + ሺ1 + 01ሺ11ሻ ∗ 0ሻሺ0ሺ11ሻ ∗ 0ሻ ∗ ሺ1 + 0ሺ11ሻ ∗ 10ሻ
0 4 ߣ
4 0 ∅
4 4 ∅
Y para finalizar, generamos la Expresión regular final. La Expresión Regular ya simplificada es:
18