La semántica de una expresión regular define un lenguaje.
Dado una expresión regular (sobre un alfabeto ). ¿Qué tiene que ver el lenguaje con un lenguaje aceptado por un autómata finito ?
Veremos: para cada expresión regular existe un autómata no-determinista con transiciones , o sea un AFND-, que acepta el mismo lenguaje (es decir, ).
Ya sabemos: entonces también existe un autómata finito determinista, o sea un AFD, aceptando el mismo lenguaje.
De hecho, comprobaremos algo más: para cada sobre existe un AFND- con y
La comprobación sigue la definición inductiva de la expresión regular, lo describimos solamente con los grafos de los autómatas. Entonces, sean , , y expresiones regulares sobre algún alfabeto .
Ejemplo: construimos el AFND- para
La otra dirección, es decir, comprobando que para cada autómata finito existe una expresión regular que describe el mismo lenguaje, nos costará un poco más de trabajo.
Sea un AFD (sabemos que cualquier AFND o AFND- se puede convertir en un AFD).
Describimos un algoritmo que sucesivamente construye la clausura transitiva del autómata dado y así construye finalmente--como atributos de las aristas entre y un nuevo estado --la expresión regular.
Por eso permitimos que se pueden escribir expresiones regulares a las aristas de un autómata, es decir, para escribimos (pues, la arista del estado al estado con atributo ), o teniendo expresiones regulares (pues, una arista de a con atributo ), o con dibujo:
(Observa: si entonces existe una arista con entre y , por eso, , y entonces no hay que considerar un caso especial para contemplar lazos reflexivos en porque .)
Ejemplo:
XXX
Una comprobación formal de la corrección del algoritmo es bastante técnica. Principalmente hay que realizar una inducción estructural con propiedades de dichos autómatas extendidos (que tienen expresiones regulares en sus aristas). No lo detallamos aquí, cae en la categoría: lo creemos (en estos momentos).
Como vimos en el ejemplo, hemos construido una expresión regular totalmente diferente a la de partida. Debemos transformar dicha expresión regular sin cambiar el lenguaje que define para conseguir finalmente una expresión regular igual a la de partida. Por eso:
Dos expresiones regulares y son equivalentes ( ) si definen el mismo lenguaje, es decir, si .
Obviamente hay operaciones con expresiones regulares que mantienen la equivalencia, por ejemplo:
Con eso y un poco de ímpetu podemos transformar sucesivamente la expresión regular obtenida para obtener al final la expresión regular que era la base para el autómata finito inicial.
XXX
El problema de comprobar en general si dos expresiones regulares son equivalentes no es nada fácil. Dicho problema cae en la clase de los problemas PSPACE que contiene problemas aún más complejos que los problemas de la clase NP que (a lo mejor) veremos hacia el final del curso (un problema NP es el problema del viajante). Aquí nos basta constatar que un algoritmo determinista que resuelve el problema necesita un tiempo que crece más que exponencial en la longitud de la expresión regular.