Ayuda con autómatas (informática)

Buenas!

Estoy preparandome el examen de autómatas, y respecto a la parte de teoría tengo un problema que siempre me cuesta ver xD

No puedo ir a tutorías ya, así que a ver si algún alma caritativa me puede orientar, es muy básico.

Dado un lenguaje L, ¿cómo sé si es regular?.

Por ejemplo:

L={x € {a,b}* / |x|a Mod 2 = 1}

(Tomad el símbolo del euro como el de pertenece xD)

Lenguaje formado por todas aquellas palabras que tienen un número impar de "a". ¿Cómo podríais decir que es regular?

También he visto que sigma * y el conjunto vacío son regulares, pero no sé por qué...

Es lo que más me cuesta en los exámenes, el resto lo llevo bien, pero quiero ir sobre seguro :P

Muchas gracias!
Así en frío, de forma algebráica no sabría decirte, pero nuestro profesor nos enseñó un método muy sencillo por el que reconocer casi a golpe de vista el tipo de lenguaje que era.

Es un sistema de pilas que funciona de la siguiente forma:
Un lenguaje regular no necesita ninguna pila para ser aceptado.
Un lenguaje irregular necesita alguna pila para ser aceptado.


¿Qué es esto de las pilas? Creo que con un par de ejemplos te lo imaginarás mejor:
L = {a^i b^j / i>= j>=0}
O lo que es lo mismo, un lenguaje con mayor o igual número de 'a's que de 'b's y con un número indefinido de 'b's.

Para saber en qué momento deja de cumplirse el requisito al leer una palabra necesitas "recordar" lo que has leido previamente. Cuando necesitas recordar, quieres decir que todo lo que leas se introduce en una pila, y por lo tanto que es un lenguaje irregular.
En este caso, por cada 'a' que leemos la vamos insertando en la pila imaginaria, y luego, cuando empezamos a leer las 'b's, por cada una que leamos, se elimina una 'a' de la pila. Así, si lees 'b's sin que queden 'a's en la pila significa que j > i y esa palabra no pertenece al lenguaje. Se aceptará la palabra si al terminar de leerla la pila está vacía o sólo quedan 'a's.


En el caso de un lenguaje regular, no hace falta ninguna pila. Así que haz la prueba, intenta verificar mentalmente si puedes comprobar que una palabra pertenece a un lenguaje sin necesidad de recordar lo leido anteriormente.
L = {1 0^n / n>=0}
Fíjate que aquí lees un 1, todo va bien, lees el primer 0, ya pertenece al lenguaje, sigues leyendo 0s sin que te importe lo anterior. No necesitas pila alguna y por tanto es un lenguaje regular.


En tu caso:
L={x € {a,b}* / |x|a Mod 2 = 1}
Necesitas ir llevando la cuenta de 'a's que tiene la palabra. Traduciéndolo a al ejemplo de la pila, la primera 'a' se introduce en la pila, la segunda 'a' elimina la 'a' anterior. Así, cuando termines de leer la palabra, si hay una 'a' en la pila significa que había un número impar, sino hay, es que las 'a's de la palabra estaban pares.


Creo que no me he equivocado, aunque tengo esto algo oxidado, espero que te sirva de ayuda. Practícalo un poco y verás como le coges el truco.
mira, en ese tipo de asignaturas hay dos tipos de problemas:
demostrar que algo es regular y demostrar que algo no lo es
para demostrar que es regular, lo mas facil es montarse un automata finito determinista que te genere ese mismo lenguaje. si eres capaz de crearlo ya has demostrado que es regular
(si no puedes ya te toca aplicar el lema del bombeo o similares)
por otra parte para demostrar que algo no lo es lo más facil es ir haciendo operaciones sobre el lenguaje (homomorfismos, ¿interesecciones? con lenguajes regulares) que sepas que el resultado te de un lenguaje regular. si llegas a un lenguaje incontextual (aprendete unos cuantos) ya has demostrado que no es regular.


http://es.wikipedia.org/wiki/Lenguaje_regular
Ante cualquier duda mirate el Hopcroft, un libro que todo informatico debiera comprarse.

PD: y el lenguaje ese que propones es regular

2 estados.
estado 0 no final
estado 1 final

del estado 0 con b vas al 0
del estado 0 con a vas al 1
del estado 1 con b vas al 1
del estado 1 con a vas al 0

voilá, un lenguaje que acepta solo aquellas palabras con un numero de "a" impares
Para demostrar que es regular lo que te ha dicho YaMPeKu, crear un autómata regular de ejemplo, para demostrar que no lo es nosotros usábamos el lema de bombeo.
Muchas gracias a todos por las respuestas y la ayuda aportada. Me queda bastante más claro, voy a probar con ejercicios resueltos.

Gracias!
Sepho escribió:Muchas gracias a todos por las respuestas y la ayuda aportada. Me queda bastante más claro, voy a probar con ejercicios resueltos.

Gracias!

y bueno, si estas en la escuela tecnica superior de informatica de la UPV pasate por la web de la delegacion de alumnos (dafi) que tienes examenes de TAL resueltos
YaMPeKu escribió:
Sepho escribió:Muchas gracias a todos por las respuestas y la ayuda aportada. Me queda bastante más claro, voy a probar con ejercicios resueltos.

Gracias!

y bueno, si estas en la escuela tecnica superior de informatica de la UPV pasate por la web de la delegacion de alumnos (dafi) que tienes examenes de TAL resueltos


En la misma :P

Tengo varios que pusieron en la propia web de la asignatura, me pasaré por la de delegación a ver ^^

Gracias!
si tienes cualquier duda agregame al msn ;)
7 respuestas