Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Automatas
1. Autómatas y Lenguajes Formales
Una breve introducción
Este tema es básico para la construcción y programación de maquinas de cualquier tipo1
que deben realizar tareas repetitivas, y que reaccionan apropiadamente ante cualquier
situación diferente a la usual, que pueda presentarse. Por ejemplo, supongamos que en
una embotelladora se tiene un maquina electrónica para colocar las etiquetas a los
botellas que viajan en una banda transportadora. Esta máquina debe realizar unas
cuantas tareas en forma repetitiva, básicamente tomar una etiqueta y pegarla sobre el
botella que vaya llegando, pero, ¿qué debe hacer la máquina cuando no lleguen
botellas? o ¿cuando se acaben las etiquetas? Esto debió haber sido resuelto en el
momento del diseño y programación de la misma, y para eso, y otras cosas más, sirven
estos temas.
Como pueden darse cuenta, aquí, para tristeza de muchos, no se trabaja con botellas,
sino únicamente con letras, números, símbolos y en general palabras. La razón, el
objetivo es desarrollar una teoría bastante general, de tal manera que estos temas se
puedan aplicar en diversidad de situaciones. Todos sabemos lo que ocurre cuando
programamos en algún lenguaje, como C o C#, si una instrucción 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
(autómata) que hace parte del mismo. La teoría que fundamenta todo esto y que facilita
el desarrollo de este tipo de sistemas son los Autómatas y Lenguajes Formales.
Para hacer más formal toda esta teoría electrónico-matemático-computacional es
necesario, antes, conocer algunos formalismos que le dan cierto orden a todo este
cuento. (Voy a hablar de ellos solo en los términos de este escrito, que trabaja con
autómatas que procesan cadenas de texto).
Alfabeto
Es un conjunto de símbolos que sirven para construir palabras (llamadas frecuentemente
cadenas). Los dos ejemplos más conocidos de alfabetos que nosotros utilizamos, son las
letras del alfabeto español
a, b, c, e, f, …, z
que permitieron, entro otros, escribir el contenido de este artículo.
También están los diez dígitos decimales matemáticos que nos permiten construir
cualquier número,
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 más y más sin necesidad de tanta simbología
1
Las máquinas de las que se habla en este documento pueden ser virtuales. Un compilador es un ejemplo
de las llamadas máquinas virtuales.
2. rara, los científicos de la computación y las matemáticas, y también los de la
electrónica, se han inventado símbolos raros para representar estos elementos. En el
caso de los alfabetos, se utiliza la letra griega sigma, ∑ , para su representación.
Entonces, si nos piden que escribamos el alfabeto español en términos computacionales,
debería hacerse algo como lo siguiente:
∑ = {a, b, c, d , e, f ,...., z} (Lo correcto sería escribir todo el alfabeto)
¿Cuál es el alfabeto que se utiliza para escribir los números arábigos? 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 teoría se llama palabra a todo lo que se pueda
construir con la combinación de los elementos de un alfabeto. Por ejemplo, el número
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 números, tales como: 0, 12, 123222,
100000, etc.
Con el alfabeto español,
∑ = {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
país!”? La respuesta es, NO. Observe que, se han incluido al menos cuatro elementos
que no están en el alfabeto: los dos signos de admiración, el espacio separador y una
tilde. En esta teoría 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 operación básica con cadenas es la concatenación que consiste en unir palabras. Por
ejemplo, si tenemos las palabras Colombia y Pasto, la concatenación de estas es
ColombiaPasto.
www.pedrov.phpnet.us 2
3. Se acostumbra a representar la concatenación en forma similar a como las matemáticas
representan la multiplicación. Se colocan las palabras entre paréntesis una a
continuación de otra. Entonces nuestro ejemplo, lo podríamos simbolizar como:
(Colombia) (Pasto) = ColombiaPasto
Y como siempre, para complicarnos más 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 concatenación como
wx = ColombiaPasto
Además, cuando se quiere representar la concatenación de una palabra que se repite
varias veces se utiliza la simbología de la potenciación (un caso particular de la
multiplicación). Supongamos que tenemos la palabra Pasto, entonces
(Pasto)0 = ε (vacío)
(Pasto)1 = Pasto
(Pasto)2 = PastoPasto
(Pasto)3 = PastoPastoPasto
(Pasto)4 = PastoPastoPastoPasto
O en forma simbólica, si x es igual a Pasto entonces
x0 = ε (vacio)
x1 = Pasto
x2 = PastoPasto
x3 = PastoPastoPasto
x4 = PastoPastoPastoPasto
Al conjunto de todas las palabras que sea posible formar, con sentido o sin él, con los
símbolos de un alfabeto se lo simboliza con ∑* .
Lenguaje
Con un alfabeto se podrían construir cualquier cantidad de palabras, unas con sentido y
otras sin sentido. Un lenguaje es un pequeño conjunto de palabras que se toman de ese
gran conjunto.
Supongamos que tenemos el alfabeto que nos permite generar números binarios,
∑ = {0,1}
www.pedrov.phpnet.us 3
4. Sabemos que con este conjunto podemos formar cualquier palabra formada por ceros y
unos. De ese gran conjunto, en particular podríamos tomar un conjunto formado por
unas cuantas palabras, como por ejemplo,
L1 = {01,10,11,111}
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:
L2 = {01, 0101, 010101, 01010101,...}
Observe, que este último lenguaje tiene algo particular. Está formado por palabras que
resultan de la concatenación de la palabra básica 01. Teniendo en cuenta este detalle,
podemos escribir este lenguaje como,
L2 = {(01)1 , (01) 2 , (01)3 , (01) 4 ,...}
O incluso, para simplificar aún más las cosas, podemos hacerlo como sigue:
L2 = {(01)n / n ≥ 1}
La condición n ≥ 1 significa que el mínimo valor que puede tomar n es 1 y por lo tanto,
la primera cadena que contiene este lenguaje es 01.
Un ejercicio rápido: Escriba cinco elementos del lenguaje L = {a n bc / n > 1} definido
sobre el alfabeto ∑ = {a, b, c} .
Una pregunta: En el anterior lenguaje ¿está la palabra abc? Y ¿la palabra aabc?
Autómata
En la práctica, un autómata es un método, también llamado máquina virtual, que sirve
para saber si una palabra hace parte de un lenguaje. Un autómata se encarga de leer los
símbolos 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,
L2 = {(01)1 , (01) 2 , (01)3 , (01) 4 ,...}
el autómata asociado a él deberá revisar si una palabra que se desea identificar cumple
la condición de ser una repetición sucesiva de la base 01. Cuando el autómata 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 4
5. Para no complicar las cosas, digamos que una forma de representar gráficamente un
autómata es mediante unos círculos y unas líneas que los unen, y que se conoce con el
nombre de diagrama de transición.
Los diagramas de transición están formados por círculos, que se llaman estados y
flechas o arcos de transición 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 continúa el viaje. Cada estado se acostumbra a
representarlo mediante letras y subíndices, tal como q0, q1, q2, etc.
Para viajar de un estado hacia otro, se utilizan caminos llamados transiciones. Pero, el
camino que se debe tomar lo define el símbolo que se vaya a leer. Por ejemplo, tenemos
la palabra 101, que deseamos saber si pertenece a un determinado lenguaje, y un
autómata 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
q0. El círculo q0 se llama estado inicial, y aquí se distingue con una flecha ubicada a su
izquierda. El círculo q2, con línea doble, se llama estado final o de aceptación.
Observe que, estando en q0, 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 q2. Para realizar el viaje
procedemos de la siguiente forma:
- Leemos el primer símbolo de la cadena. Como el primer símbolo leído es 1, tiene
que tomar el camino hacia q2, eso está marcado en el camino respectivo.
- Ahora estando en q2, debe leer el siguiente símbolo 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, q2.
- Leemos el tercer símbolo, que es 1, y este nos lleva al estado q0. Ahí termina todo,
por que ya se acabaron los símbolos.
Si después de leer toda la palabra se llega al estado de aceptación, entonces la palabra se
da por aceptada, de lo contrario no. En el ejemplo anterior, la palabra 101 no es
aceptada por el autómata, por que el punto de llegada fue q0, y no el estado final o de
aceptación q2, 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 autómata. (La respuesta es SI).
www.pedrov.phpnet.us 5
6. Autómata finito determinista (AFD)
Un autómata se considera determinista cuando en cada uno de los estados existe una
única transición o camino para cada una de las entradas.
Por ejemplo, si en nuestro autómata 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 condición es que, todas las
posibles entradas posean una transición de salida en cada estado del autómata.
Autómata finito no determinista (AFND o AFN)
Un autómata no determinista, puede poseer más de un camino señalado 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 autómata no determinista.
Realice el ejercicio mental de suponer que es un croquis dibujado en el piso. Si Usted se
encuentra en la posición q0, y le llega una a, tiene dos caminos para seguir, y se
enfrentará a una incertidumbre ¿Cuál es el camino correcto? Si nos vamos hacia q1, y
luego nos llega una b, podremos llegar al estado de aceptación q2, pero si no llega dicha
letra, habremos comprobado que tomamos el camino equivocado y talvez debamos
regresar al punto de inicio.
También podemos observar que, para b no existe una transición 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 autómatas 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 6
7. Esta es una descripción demasiado elemental de la teoría de autómatas. Hacen falta muchos detalles que deben
tenerse en cuenta para fundamentar mejor el producto de estas teorías. Pero, en el intento de iniciar la comprensión
de los conceptos básicos de esta disciplina de la computación, puede ser muy útil.
www.pedrov.phpnet.us 7