Este tema es bsico para la construccin y programacin de maquinas de cualquier tipo 1
que deben realizar tareas repetitivas, y que reaccionan apropiadamente ante cualquier situacin diferente a la usual, que pueda presentarse. Por ejemplo, supongamos que en una embotelladora se tiene un maquina electrnica para colocar las etiquetas a los botellas que viajan en una banda transportadora. Esta mquina debe realizar unas cuantas tareas en forma repetitiva, bsicamente tomar una etiqueta y pegarla sobre el botella que vaya llegando, pero, qu debe hacer la mquina cuando no lleguen botellas? o cuando se acaben las etiquetas? Esto debi haber sido resuelto en el momento del diseo y programacin de la misma, y para eso, y otras cosas ms, sirven estos temas.
Como pueden darse cuenta, aqu, para tristeza de muchos, no se trabaja con botellas, sino nicamente con letras, nmeros, smbolos y en general palabras. La razn, el objetivo es desarrollar una teora bastante general, de tal manera que estos temas se puedan aplicar en diversidad de situaciones. Todos sabemos lo que ocurre cuando programamos en algn lenguaje, como C o C#, si una instruccin se escribe correctamente el compilador la acepta y la procesa, pero en caso que no sea as se informa que existe un error antes de generar el archivo compilado. Quien se encarga, en este caso, de revisar las instrucciones y verificar que todo este bien escrito, para que el compilador las pueda interpretar adecuadamente, es un componente de software (autmata) que hace parte del mismo. La teora que fundamenta todo esto y que facilita el desarrollo de este tipo de sistemas son los Autmatas y Lenguajes Formales.
Para hacer ms formal toda esta teora electrnico-matemtico-computacional es necesario, antes, conocer algunos formalismos que le dan cierto orden a todo este cuento. (Voy a hablar de ellos solo en los trminos de este escrito, que trabaja con autmatas que procesan cadenas de texto).
Alfabeto
Es un conjunto de smbolos que sirven para construir palabras (llamadas frecuentemente cadenas). Los dos ejemplos ms conocidos de alfabetos que nosotros utilizamos, son las letras del alfabeto espaol
a, b, c, e, f, , z
que permitieron, entro otros, escribir el contenido de este artculo.
Tambin estn los diez dgitos decimales matemticos que nos permiten construir cualquier nmero,
0, 1, 2, ., 9
Pero, resulta que, para complicarnos la vida, por que no pueden vernos yendo a la escuela felices y con ganas de aprender ms y ms sin necesidad de tanta simbologa
1 Las mquinas de las que se habla en este documento pueden ser virtuales. Un compilador es un ejemplo de las llamadas mquinas virtuales. www.pedrov.phpnet.us 2 rara, los cientficos de la computacin y las matemticas, y tambin los de la electrnica, se han inventado smbolos raros para representar estos elementos. En el caso de los alfabetos, se utiliza la letra griega sigma, , para su representacin. Entonces, si nos piden que escribamos el alfabeto espaol en trminos computacionales, debera hacerse algo como lo siguiente:
{ } , , , , , ,...., a b c d e f z = (Lo correcto sera escribir todo el alfabeto)
Cul es el alfabeto que se utiliza para escribir los nmeros arbigos? Sencillo, es,
{ } 0,1, 2, 3, 4, 5, 6, 7, 8, 9 =
En este ltimo caso, el lector se preguntar, y que palabras se construyen con este alfabeto? Lo que pasa es que en esta teora se llama palabra a todo lo que se pueda construir con la combinacin de los elementos de un alfabeto. Por ejemplo, el nmero 25 es una palabra.
Palabras
Como ya se explico arriba, las palabras son todas las combinaciones que se puedan obtener con los elementos de un alfabeto. Por ejemplo, con el alfabeto,
{ } 0,1, 2, 3, 4, 5, 6, 7, 8, 9 =
podemos construir todas las palabras que llamamos nmeros, tales como: 0, 12, 123222, 100000, etc.
Con el alfabeto espaol,
{ } , , , , , ,...., a b c d e f z =
podemos construir todas las palabras propias de nuestro idioma, como las que conforman este escrito, y otras que incluso no tienen sentido, tales como: seddddqqq, Mejor dicho, todas las combinaciones que se nos ocurran.
Una pregunta: Con el anterior alfabeto podr escribir la palabra Yo amo a mi pas!? La respuesta es, NO. Observe que, se han incluido al menos cuatro elementos que no estn en el alfabeto: los dos signos de admiracin, el espacio separador y una tilde. En esta teora las cosas son estrictas, solo se puede trabajar con los elementos del alfabeto definido, y si se necesitan otros, antes se los debe incluir en el alfabeto, o mejor utilizar otro alfabeto.
Operaciones con cadenas
La operacin bsica con cadenas es la concatenacin que consiste en unir palabras. Por ejemplo, si tenemos las palabras Colombia y Pasto, la concatenacin de estas es ColombiaPasto.
www.pedrov.phpnet.us 3 Se acostumbra a representar la concatenacin en forma similar a como las matemticas representan la multiplicacin. Se colocan las palabras entre parntesis una a continuacin de otra. Entonces nuestro ejemplo, lo podramos simbolizar como:
(Colombia) (Pasto) = ColombiaPasto
Y como siempre, para complicarnos ms las cosas, se acostumbra a utilizar variables que representan a cada palabra. Supongamos que w representa a Colombia y x representa a Pasto, entonces podemos representar todo como,
w = Colombia x = Pasto
y la concatenacin como
wx = ColombiaPasto
Adems, cuando se quiere representar la concatenacin de una palabra que se repite varias veces se utiliza la simbologa de la potenciacin (un caso particular de la multiplicacin). Supongamos que tenemos la palabra Pasto, entonces
O en forma simblica, si x es igual a Pasto entonces
x 0 = (vacio) x 1 = Pasto x 2 = PastoPasto x 3 = PastoPastoPasto x 4 = PastoPastoPastoPasto
Al conjunto de todas las palabras que sea posible formar, con sentido o sin l, con los smbolos de un alfabeto se lo simboliza con * .
Lenguaje
Con un alfabeto se podran construir cualquier cantidad de palabras, unas con sentido y otras sin sentido. Un lenguaje es un pequeo conjunto de palabras que se toman de ese gran conjunto.
Supongamos que tenemos el alfabeto que nos permite generar nmeros binarios,
{ } 0,1 =
www.pedrov.phpnet.us 4 Sabemos que con este conjunto podemos formar cualquier palabra formada por ceros y unos. De ese gran conjunto, en particular podramos tomar un conjunto formado por unas cuantas palabras, como por ejemplo,
{ } 1 01,10,11,111 L =
Este es un ejemplo de lenguaje definido sobre el alfabeto . Pero, este no es el nico lenguaje que podemos definir sobre este alfabeto. Mire este otro:
{ } 2 01, 0101, 010101, 01010101,... L =
Observe, que este ltimo lenguaje tiene algo particular. Est formado por palabras que resultan de la concatenacin de la palabra bsica 01. Teniendo en cuenta este detalle, podemos escribir este lenguaje como,
{ } 1 2 3 4 2 (01) , (01) , (01) , (01) ,... L =
O incluso, para simplificar an ms las cosas, podemos hacerlo como sigue:
{ } 2 (01) / 1 n L n =
La condicin 1 n significa que el mnimo valor que puede tomar n es 1 y por lo tanto, la primera cadena que contiene este lenguaje es 01.
Un ejercicio rpido: Escriba cinco elementos del lenguaje { } / 1 n L a bc n = > definido sobre el alfabeto { } , , a b c = .
Una pregunta: En el anterior lenguaje est la palabra abc? Y la palabra aabc?
Autmata
En la prctica, un autmata es un mtodo, tambin llamado mquina virtual, que sirve para saber si una palabra hace parte de un lenguaje. Un autmata se encarga de leer los smbolos que conforman una palabra, desde el primero hasta el ltimo en estricto orden, y determinar si cumple con las condiciones impuestas por el lenguaje. Por ejemplo en el lenguaje,
{ } 1 2 3 4 2 (01) , (01) , (01) , (01) ,... L =
el autmata asociado a l deber revisar si una palabra que se desea identificar cumple la condicin de ser una repeticin sucesiva de la base 01. Cuando el autmata revise la palabra 01010101 no tendr problema en aceptarla, pero la palabra 01010 no podr ser aceptada como miembro de este lenguaje.
www.pedrov.phpnet.us 5 Para no complicar las cosas, digamos que una forma de representar grficamente un autmata es mediante unos crculos y unas lneas que los unen, y que se conoce con el nombre de diagrama de transicin.
Los diagramas de transicin estn formados por crculos, que se llaman estados y flechas o arcos de transicin que se conocen como transiciones, y podemos considerarlo como un croquis de rutas a seguir. Un estado es un punto del diagrama donde hay que detenerse para definir hacia donde se contina el viaje. Cada estado se acostumbra a representarlo mediante letras y subndices, tal como q 0 , q 1 , q 2 , etc.
Para viajar de un estado hacia otro, se utilizan caminos llamados transiciones. Pero, el camino que se debe tomar lo define el smbolo que se vaya a leer. Por ejemplo, tenemos la palabra 101, que deseamos saber si pertenece a un determinado lenguaje, y un autmata que lo reconoce, representado en el siguiente diagrama:
101
Haga de cuenta que el dibujo esta trazado en el piso y que Usted se encuentra parado en q 0 . El crculo q 0 se llama estado inicial, y aqu se distingue con una flecha ubicada a su izquierda. El crculo q 2 , con lnea doble, se llama estado final o de aceptacin.
Observe que, estando en q 0 , tiene dos caminos por seguir, uno que lo lleva a darse una vuelta y volver al mismo punto y el otro que lo lleva al estado q 2 . Para realizar el viaje procedemos de la siguiente forma:
- Leemos el primer smbolo de la cadena. Como el primer smbolo ledo es 1, tiene que tomar el camino hacia q 2 , eso est marcado en el camino respectivo.
- Ahora estando en q 2 , debe leer el siguiente smbolo de la palabra, en este caso es 0. Nuevamente tenemos dos caminos por seguir, pero el camino que le corresponde a este valor es aquel que lo hace dar un recorrido y volver inmediatamente al mismo punto, q 2 .
- Leemos el tercer smbolo, que es 1, y este nos lleva al estado q 0 . Ah termina todo, por que ya se acabaron los smbolos.
Si despus de leer toda la palabra se llega al estado de aceptacin, entonces la palabra se da por aceptada, de lo contrario no. En el ejemplo anterior, la palabra 101 no es aceptada por el autmata, por que el punto de llegada fue q 0 , y no el estado final o de aceptacin q 2 , por lo tanto se concluye que no hace parte del lenguaje que se est analizando.
Analice los movimientos que hay que hacer para la palabra 1011 y determine si es aceptada por el autmata. (La respuesta es SI). www.pedrov.phpnet.us 6
Autmata finito determinista (AFD)
Un autmata se considera determinista cuando en cada uno de los estados existe una nica transicin o camino para cada una de las entradas.
Por ejemplo, si en nuestro autmata juguete, Usted se encuentra en el estado q2, y le llega un 1, sabe que tiene un nico camino por seguir, y es aquel que lo lleva a q0. Igual ocurre si le llega un 0, debe irse a dar una vuelta por el camino correspondiente y volver a q2. Es decir, todo est claramente determinado. Una condicin es que, todas las posibles entradas posean una transicin de salida en cada estado del autmata.
Autmata finito no determinista (AFND o AFN)
Un autmata no determinista, puede poseer ms de un camino sealado con la misma etiqueta. Es decir, para cada una de las entradas pueden existir varias transiciones, o incluso ninguna. El siguiente, es un ejemplo de autmata no determinista.
Realice el ejercicio mental de suponer que es un croquis dibujado en el piso. Si Usted se encuentra en la posicin q0, y le llega una a, tiene dos caminos para seguir, y se enfrentar a una incertidumbre Cul es el camino correcto? Si nos vamos hacia q1, y luego nos llega una b, podremos llegar al estado de aceptacin q2, pero si no llega dicha letra, habremos comprobado que tomamos el camino equivocado y talvez debamos regresar al punto de inicio.
Tambin podemos observar que, para b no existe una transicin de salida en q0. Algo similar ocurre en q2, donde no existen transiciones de salida ni para a ni para b. Como podemos darnos cuenta, en este tipo de autmatas nada est claramente determinado.
Este AFN, aceptar la cadena abbb? Y la cadena aaaaa? Las respuestas son Si y No, respectivamente. www.pedrov.phpnet.us 7
Esta es una descripcin demasiado elemental de la teora de autmatas. Hacen falta muchos detalles que deben tenerse en cuenta para fundamentar mejor el producto de estas teoras. Pero, en el intento de iniciar la comprensin de los conceptos bsicos de esta disciplina de la computacin, puede ser muy til.