Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEPARTAMENTO DE MATEMÁTICAS
ESTRUCTURAS DISCRETAS II
ING. MSC. ADRIANA BARRETO
Una máquina de estado finito es una máquina abstracta que reconoce cadenas de
caracteres dando una respuesta de “SÍ” o “NO” basada en las transiciones entre “estados” de la
máquina, las transiciones se escogen en base al siguiente carácter de la cadena.
ALGORITMO
Repetir:
b. Transición al estado siguiente escogiendo el arco saliente etiquetado con ese carácter;
2. Componentes
Estado inicial
Estado final
Podemos representar también el “programa” para una máquina de estado finito en una tabla:
Cada fila en la tabla FSM tiene que ser distinta en sus dos primeras columnas para que la máquina
sea DETERMINISTA.
A medida que prosigue el proceso de reconocimiento se puede listar las transiciones que se
ejecutan listando cada fila de la tabla de transiciones.
Ejercicio.
Diseña una FSM, dando su representación gráfica y su tabla para reconocer cadenas binarias que
comiencen y terminen con “0” y contengan al menos un par de “1,s” adyacentes. Es decir cadenas
como: “0110” (la más corta) ó “0000111110”. Para esta última cadena escribe la lista de estados
de transición utilizados para el proceso de reconocimiento completo.
Para comprobar tu diseño puedes emplear la emulación de una FSM construida por un
estudiante en Inglaterra:
http://www.belgarath.demon.co.uk/java/fsme.html
2. Máquinas Equivalentes.
Sean las Máquinas Determinísticas A1=(å, Q1, f1, q01, F1) y A2=(å, Q2, f2, q02, F2),
Decimos que las dos máquinas son equivalentes si reconocen el mismo lenguaje. Es decir: si
f(q01,x)Î F1Ûf(q02,x)ÎF2, para todo xÎå*. Dicho de otro modo, decimos que dos máquinas son
equivalentes si sus estados iniciales los son: q01Eq02.
Teorema.- Sean dos MD A1=(å, Q1, f1, q01, F1) y A2=(å, Q2, f2, q02, F2), tales que Q1 y Q2 no
tienen estados comunes y |Q1|=n1 y |Q2|=n2. Entonces, A1 y A2 son equivalentes si q01 yq02 son
equivalentes en la máquina A=A1+A2, es decir, si ambas máquinas aceptan las mismas palabras de
longitud menor que n1+n2-1. Además, en general, n1+n2-2 es el valor más pequeño que cumple
siempre este teorema.
Ejemplo:
El máquina suma dará:
fÅ a b
®q1 q2 q1
*q2 q3 q1
*q3 q2 q1
q4 q1 q1
p1 p2 p1
*p2 p2 p1
p3 p2 p1
y
donde c y d son funciones apropiadas de conversión de palabras de un alfabeto a otro,
Observamos que el movimiento hacia una casilla contigua en la cinta de M se traduce a dos
movimientos contiguos en C. Cada vez que se ``atraviesa'' S en C se cambia de sentido: Un
movimiento a la derecha en M corresponde a dos hacia la izquierda en C y viceversa. Hechas estas
observaciones, de manera directa se puede simular a M usando C. Máquinas con cintas de varias
pistas, : Estas son máquinas de Turing cuyas cintas tienen varias ``pistas''. Pueden verse
también como máquinas de varias cintas con movimientos ``sincronizados'': Movimiento que se
hace en una cinta, se hace en todas.
2.
Consideremos una cinta de una sola pista en donde sus casillas se agrupan en bloques de
k casillas. La posición j-ésima de la i-ésima pista en la cinta de Mk corresponde a la posición
Máquinas con cintas de varias cintas , : Estas son máquinas de Turing con varias cintas
con movimientos ``independientes''.
Proposición y son equivalentes.
Demostraremos que y son equivalentes. En efecto, por un lado, tenemos que
toda máquina es en sí del tipo . Recíprocamente, dada una máquina del
tipo con k pistas, la podemos simular con una máquina del tipo , con 2k
pistas como sigue: Cada cinta Cj da origen a dos pistas Pj0,Pj1. La pista Pj1 tiene el mismo contenido
que la cinta Cj. La pista Pj0 está en blanco salvo en la posición donde se encuentra la j-ésima cabeza
lectora de , en la cual hay una marca `` '' para marcar que ésa es la casilla escudriñada en
la j-ésima cinta. Con esto, la máquina se construye de manera inmediata. Máquinas con dos
símbolos, : Estas son máquinas de Turing sobre el alfabeto (0+1).
. Cada símbolo en el alfabeto puede codificarse mediante una cadena de k bits. Por
tanto M puede verse como una m''aquina de k pistas. De acuerdo con la segunda construcción de
la máquina del tipo simuladora de una máquina del tipo , obtenemos una máquina
del tipo que simula a M.
Sea la máquina determinista (å, Q, f, q0, F). Decimos que dos estados p,qÎQ son
equivalentes (se representa por pEq) si para toda palabra xÎå*, se verifica que f(p,x)ÎFÛf(q,x)ÎF.
Dado AF=(å, Q, f, q0, F), con p,qÎQ , pEq si "xÎå* ® f(p,x)ÎFÛ f(q,x)ÎF
pEkq (p y q son k-equivalentes) si: "xÎå* | |x|<=k ® f(p,x)ÎFÛ f(q,x)ÎF
Ambas relaciones de equivalencia E y Ek inducen una partición de equivalencia sobre el
máquina finito. Es decir: E induce PE, y Ek induce Pk.
La primera partición que se establece es P0, se hace con: p E0q Û( pÎFÛ qÎF). Nota: Entonces
P0={(Q-F),F}
LEMA2.
Pk=Pk+1 Þ Pk= PE
LEMA3 (Se va a establecer cuando se estabiliza el valor de la partición)
Si |Q| = n >1 Þ pEnq Û pEn-2q
Es decir, n-2 es el grado de equivalencia menor al que habría que llegar para conseguir confirmar la
equivalencia de dos estados en un máquina con n estados.
TEOREMA
Si |Q|=n>1 Þ $j<=n-2 | Pj= Pj+1
P0={{qiÏF},{ qiÎF}}
Pn+1={ pEn+1q Û pEnq y f(p,a)Enf(q,a) "aÎå}
Pn =Pn+1 =PE
Ejemplo :
Para hallar las partes de equivalencia del máquina primero debemos partir de un máquina
finito conexo. Para ello vamos a eliminar q4, ya que no es posible acceder a él desde el estado
inicial (q1). Ahora vamos a establecer las partes de equivalencia:
Ahora hacemos P1, para ello sabemos que {q1} va a seguir igual, es decir, va a ser
equivalente con sigo mismo, puesto que accede a los mismo estados(finales o no finales).
Miramos {q2, q3} y comprobamos si acceden al mismo tipo de estado para las mismas
entradas, es decir, sabiendo que q2 E0 q3 vamos a ver si q2 E1 q3:
f(q2,a)=q3ÎF f(q2,b)=q1ÏF
f(q3,a)=q2ÎF f(q3,b)=q1ÏF
luego q2 E1 q3.
P1={{q1}, {q2, q3}}= P0= PE
Ejemplo:
Es un máquina conexo, pues todos sus estados son accesibles, vamos a hallar las partes de
equivalencia:
P0={{s,t,u,v},{p,q,r}} (={Q-F,F})
miramos la equivalencia de las clases de equivalencia establecidas en P0.
f(p,a) = pÎF; f(p,b)= qÎF;
f(q,a)= rÎF; f(q,b)=pÎF;
f(r,a)= rÎF; f(r,b)=rÎF;
aqui vemos que {p,q,r} se conserva pues tienen iguales transiciones a estados finales a
partir de las entradas.
f(s,a)=tÏF; f(s,b)=pÎF
f(t,a)=tÏF; f(t,b)=uÏF
f(u,a)=tÏF; f(u,b)=vÏF
f(v,a)=vÏF; f(v,b)=uÏF
ahora vemos que mientras t,u,v tienen iguales transiciones a estados no finales para
las mismas entradas, siguen siendo equivalentes, mientras que s para b transita a un
estado final, ya será equivalente a los tres estados anteriores:
P1={{p,q,r},{s},{t,u,v}}
Ahora hallamos P2:
f(p,a) = pÎF; f(p,b)= qÎF;
f(q,a)= rÎF; f(q,b)=pÎF;
f(r,a)= rÎF; f(r,b)=rÎF;
f(t,a)=tÏF; f(t,b)=uÏF
f(u,a)=tÏF; f(u,b)=vÏF
f(v,a)=vÏF; f(v,b)=uÏF
P2= {{p,q,r},{s},{t,u,v}} = P1
luego PE= {{p,q,r},{s},{t,u,v}}
4. Isomorfismo de Máquinas.
Se dice que A1 es isomorfo a A2, es decir, A1»A2 si $ i :Q1®Q2, (i : imagen). Por lo tanto :
i(p01) = p02 (la imagen del estado inicial de A1 es el estado inicial de A2.
Dados pÎF1, qÎF2 : i(p)ÎF2, y i(q)ÎF1.(es decir, la imagen de los estados finales de uno de los
máquinas, es un estado final del otro máquina).
Entonces si dos máquinas son isomorfos van a ser equivalentes, es decir, los lenguajes que
van a generar ambos máquinas van a ser el mismo : L(A1) = L(A2). Con esto comprobamos
que la isomorfía implica la equivalencia.
Teorema : Si dos máquinas son equivalentes, entonces sus máquinas mínimos son isomorfos,
es decir : A1EA2 Þ Â1»Â2 (siendo  i º máquina mínimo de Ai).
Sea la red de Petri que la representa. Según se vió, esta red puede describirse por la lista
de (transiciones-lugares-transiciones) siguiente:
Estas nociones son decidibles. De hecho, dado un conjunto de estados, entonces probando
cada uno de los símbolos de entrada se decide si acaso ese conjunto es congruente ya sea por
transiciones o por respuestas. Los elementos de son congruentes por la transición o por la
respuesta. En el procedimiento de minimización se trata de reconocer el subrecubrimiento
formado por los subconjuntos más grandes de conjuntos en tales que los elementos en sean a
la vez congruentes por transición y por respuesta. En tal caso, la red consistente de los lugares-
entradas y de los lugares-salidas anteriores más lugares correspondientes a elementos de con
las transiciones evidentes:
ALAN M. TURING
BIOGRAFIA
Alan Mathison Turing nació en 1912, y muy pronto mostró una extraordinaria intuición
científica.
Mientras su padre se hallaba en Madrás, trabajando para el Indian Civil Service, Turing
ganó numerosos premios escolares, y más tarde una beca que le llevaría al King's College de
Cambridge. Fue aquí cuando empezó a interesarse seriamente por los problemas de lógica
matemática.
En 1931, el matemático checo Kurt Godel descubrió que había teoremas matemáticos que
eran verdaderos aún cuando no se pudiesen probar. Ante esto, Alan Turing se puso a investigar
aquellos que sí podían ser probados. Quería intentar demostrar la vieja idea de que las
matemáticas no son un arte misterioso, sino una ciencia exacta regida por reglas lógicas.
Para hacerlo, ideó una máquina imaginaria capaz de realizar de manera totalmente mecánica los
procesos que normalmente llevaría a cabo un matemático. Había una máquina para cada proceso;
así, había una máquina que sumaba, otra que multiplicaba, etc. Estas máquinas acabarían por
recibir el nombre de "Máquinas de Turing". Básicamente, lo que quería era hacer una lista de los
problemas que una máquina sería capaz de resolver siguiendo reglas lógicas. Si esta lista abarcaba
todos los problemas matemáticos, entonces su tesis quedaría demostrada, y con ella la teoría de la
computabilidad.
Tras estudiar con detenimiento el funcionamiento de sus máquinas, concluyó que era
posible diseñar un artilugio único capaz de cumplir las funciones de cualquier otra máquina de
Turing. A ésta se le llamó la "Máquina Universal de Turing".
Al estallar la Segunda Guerra Mundial, Turing fue alejado del mundo académico y reclutado
por la Escuela de Códigos y Cifrados del gobierno británico. Las actividades que realizaba consistían
de manera primordial en descifrar el código militar alemán ENIGMA. Para ello desarrolló el invento
más secreto de dicha guerra: el Colossus, primer ordenador electromecánico del mundo. Más
adelante, sería destinado a los Estados Unidos con el fin de crear unos códigos seguros para las
comunicaciones transatlánticas entre los países aliados.
Una máquina de Turing consiste, básicamente, en una cinta infinita, dividida en casillas.
Sobre esta cinta hay un dispositivo capaz de desplazarse a lo largo de ella a razón de una casilla
cada vez. Este dispositivo cuenta con un cabezal capaz de leer un símbolo escrito en la cinta, o de
borrar el existente e imprimir uno nuevo en su lugar. Por último, contiene además un registro capaz
de almacenar un estado cualquiera, el cual viene definido por un símbolo. Los símbolos que definen
el estado del dispositivo no tienen por que coincidir con los símbolos que se pueden leer o escribir
en la cinta. En los programas presentados en el artículo, los posibles símbolos a leer o escribir en la
cinta son el 0 y el 1, y los posibles estados se representan con letras mayúsculas. En el emulador,
existe un cambio en la representación del estado, usando para ello los números del 0 al 99, para
permitir un mayor número de ellos.
Hemos puesto los posibles estados en columna, y los posible símbolos en fila, y hemos expresado
el nuevo estado, símbolo y sentido todo junto. El sentido lo expresamos con la dirección en la que
apunta el símbolo < o >.
cabezal
v
... 0 0 0 0 0 1 0 0 0 0 ...
Indicaremos el estado actual de la máquina encima del cabezal. Veamos los sucesivos pasos de
esta máquina si partimos del estado A:
1) A El estado es A y leemos un cero;
v luego debemos cambiar al estado B,
... 0 0 0 0 0 1 0 0 0 0 ... escribir un 1 y movernos a la derecha
2) B El estado es B y leemos un cero;
v luego debemos cambiar al estado A,
... 0 0 0 1 0 1 0 0 0 0 ... escribir un 1 y movernos a la derecha
3) A El estado es A y leemos un uno;
v luego debemos cambiar al estado B,
... 0 0 0 1 1 1 0 0 0 0 ... escribir un 0 y movernos a la izquierda
4) B El estado es B y leemos un uno;
v luego debemos cambiar al estado C,
... 0 0 0 1 1 0 0 0 0 0 ... escribir un 0 y movernos a la izquierda
5) C El estado es C y leemos un uno;
v luego debemos cambiar al estado C,
Las máquinas de Turing plantean una deducción bastante curiosa: dado que en ellas se puede
realizar cualquier trabajo computable, es posible programarlas para que simulen el comportamiento
de un potente ordenador. Y como una máquina de Turing puede ser codificada en CUALQUIER
ordenador, por pequeño que sea, sería posible (si disponemos de memoria suficiente, claro) emular
en nuestro ordenador de casa una máquina de Turing que simule un superordenador. Esto significa
que todos los ordenadores pueden realizar exactamente el mismo tipo de tareas, y que los cálculos
que pueda realizar el más grande los puede llevar a cabo también el más pequeño. La única
diferencia sería, obviamente, la velocidad.
Ejemplos:
Una de las tareas más simples que puede llevar a cabo una máquina de Turing es la suma
de dos números. Para ello debemos definir primero una convención para representar dichos
números en la cinta. En principio, podríamos pensar que, al usar los símbolos 0 y 1, podemos
representar los números directamente en binario; sin embargo, la cantidad de operaciones
necesarias para trabajar con ellos hace que el número de estados de la máquina sumadora crezca
sorprendentemente, debido a que es un sistema de numeración posicional.
Para simplificar el proceso, vamos a representar cada número por una cadena con tantos
unos como indique dicho número; así, para representar el tres, escribiríamos tres unos seguidos;
para un cinco, cinco unos.
Veamos como podemos sumarlos. Si tenemos dos números en una cinta, separados uno de
otro por un cero, la forma más fácil de sumarlos sería convertir uno de los unos de los extremos en
cero, y cambiar el cero de separación por un uno. De este modo tendríamos una cadena formada
por tantos unos como indica la suma de los dos números originales. Veámoslo con un ejemplo:
sumemos tres y cinco:
cinta inicial:
0000111011111000
ponemos un cero en el lugar del uno de la izquierda:
0000011011111000
ponemos un uno en el lugar del cero de separación:
0000011111111000
el resultado: ocho unos, el número ocho.
Una vez que ha puesto ese uno a cero, debe desplazarse hasta llegar al cero de separación,
pero sin alterar nada; luego, si estando en estado B encuentra un uno, debe poner un uno,
moverse a la derecha, y pasar de nuevo a estado B. Pero en cuanto detecte un cero, significa que
ha llegado a la separación, luego si estando en B encuentra un cero, debe ponerlo a uno.
Ahora que la suma está terminada, la máquina debe pararse, pasando al estado correspondiente.
Le denominaremos @ (arroba), para distinguirlo de otros posibles estados. En cuanto lo alcanza, la
máquina ya no leerá ningún símbolo más ni se desplazará.
Veamos un programa de máquina de Turing que lo hace. Los estados de la A a la H son los mismos
que los de la rutina de copia, para ahorrar espacio en el artículo. Esto significa que la máquina no
se debe poner en marcha en el estado A, sino en el estado J.
0 1 0 1
I 0,L,< 1,I,< M 1,N,> 1,M,<
J 0,J,> 0,K,> N ----- 0,K,>
K 0,A,> 1,K,> O 0,@ 1,O,<
L 1,O,< 1,M,<
El bloque ----- significa que esa condición nunca puede darse, por lo que se debe dejar sin
rellenar o bien poner un bloque ficticio.