Siguiente: Propiedades, algoritmos de decisión,
Subir: Lenguajes regulares
Anterior: Equivalencia entre gramáticas lineales
Índice General
Siendo
una expresión regular, podemos construir un autómata
finito que acepta el lenguaje así definido, también podemos construir
para cualquier
fijo un autómata finito adecuado
(
sería una expresión regular extendida que define el
lenguaje correspondiente que contiene una sola palabra).
Pero no podemos construir un autómata finito que acepte el
lenguaje:
donde el parámetro
no es fijo, sino se quiere que haya tantas
's como
's.
¿Por qué no podemos construir tal autómata?
Observamos el comportamiento del siguiente autómata:
Lema (de bombeo para lenguajes regulares):
Sea
un lenguaje regular (infinito).
Entonces existe un
de tal manera que cada palabra
con
se puede dividir en tres partes,
cumpliéndose las tres propiedades:
-
- para todos los
Comprobación (ideas principales):
- Sea
un lenguaje regular (infinito).
- Entonces existe un autómata finito determinista
que acepta
.
- Sea
el número de estados de
(
).
- Sea
una palabra con
(tal palabra existe porque
es infinito).
- Entonces se visita un estado de
por lo menos dos veces.
- Escogemos el estado que se visita la primera vez dos veces,
le llamamos
.
- La parte de
que se lee hasta llegar la primera vez a
llamamos
(puede ser que
).
- La parte de
que se lee hasta llegar la segunda vez a
llamamos
(
porque un bucle en un AFD tiene aristas con símbolos).
- La longitud
porque hemos recorrido un camino dondo solo
un estado aparece dos veces.
- La parte que sobra para terminar aceptando
llamamos
.
- Entonces dividimos
en tres partes, es decir,
.
acepta tanto
, como
, como cualquier
para
todos los
porque podemos recorrer el bucle de
tantas veces
como queremos (esto se debe comprobar formalmente con inducción).
Entonces, comprobamos de nuevo que
no es regular, ahora
usando el lema de bombeo:
- Asumimos que
sea regular.
- El lema de bombeo nos garantiza la existencia de un
tal que
se cumplen las propiedades para palabras
con
.
- (Pensamos...): Elegimos
. Obviamente
y
.
- El lema de bombeo nos garantiza la existencia de una partición
con
,
,
y
.
(No conocemos la partición en concreto, pero sus propiedades.)
- Porque
el prefijo
no contiene ninguna
.
- Porque
la subpalabra
contiene por lo menos una
.
- Todos las
s están en
.
- Tanto
como
pero
contiene
por lo menos una
menos que
(hemos quitado
).
- Eso es una contradicción porque
no debe estar dentro
.
- Entonces
no puede ser regular.
Receta para el uso del lema de bombeo:
- Dado un lenguaje
.
- Queremos comprobar que
no es regular.
- Comprobación con contradicción.
- Asumimos que
sea regular.
- El lema de bombeo garantiza la existencia de un
(pero no lo conocemos).
- Buscamos
(con un poco de sabiduría) que depende de
, tal
que
- El lema de bombeo garantiza la existencia de la partición de
cumpliendo las 3 propiedades.
- Comprobamos (con un poco de sabiduría) que, independiente
de la partición de
en concreto (en los límites de las primeras
dos propiedades), se produce una contradicción con la tercera
propiedad.
Podemos describir dicha `receta' también como un juego para dos
personas:
- Juego para un lenguaje
.
- Jugador 1 selecciona
.
- Jugador 2 selecciona
con
.
- Jugador 1 selecciona partición
con
y
.
- Jugador 2 selecciona
.
- si
gana jugador 2, sino gana jugador 1.
- si jugador 2 puede ganar siempre, entonces
no es regular.
El lema de bombeo es el jugador 1, ¿quién es el jugador 2?
Otro Ejemplo:
es decir, todas las cadenas de ceros que tienen un número cuadrado
de símbolos.
Dos comentarios más:
- Este lema de bombeo solo garantiza una propiedad para lenguajes
regulares, es decir, todos los lenguajes regulares (infinitos) la tienen,
pero pueden existir más lenguajes que la tengan, o en otras palabras,
pueden existir lenguajes
donde encontramos tal
y la división de
en
con todas las propiedades, pero
no es regular.
- Con el lema de bombeo también se puede derivar: si tal
entonces
(el argumento es fácil: no hace falta que
lleguemos a una estado final en la comprobación, lo importante eran
los caminos recorridos).
Reglas de mano:
- Un lenguaje es regular si independientemente de la longitud de
la palabra de entrada, hay que memorizar solamente una cantidad constante
de información (en el caso de
deberíamos memorizar el número
de
's que no es constante).
- La comprobación formal se realiza con el lema de bombeo.
- El lema de bombeo se usa para comprobar que un lenguaje no
es regular, para comprobar que es regular, por ejemplo,
se construye un autómata finito,
una expresión regular, o una grámatica de tipo 3.
Pero ojo, existen lenguajes regulares que tienen que ver con números:
Ejercicio: contruye un autómata finito que acepte
.
Siguiente: Propiedades, algoritmos de decisión,
Subir: Lenguajes regulares
Anterior: Equivalencia entre gramáticas lineales
Índice General
© 2006, Dr. Arno Formella, Universidad de Vigo, Departamento de Informática