910 likes | 1.91k Views
MÁQUINAS DE TURING. Teoría del Autómata. Definición. Definimos una máquina de Turing como una 7-tupla M = ( Q , S , G , s , b , F , d ), donde. Q es un conjunto finito de estados S es un alfabeto de entrada G es un alfabeto llamado alfabeto de la cinta
E N D
MÁQUINAS DE TURING Teoría del Autómata
Definición Definimos una máquina de Turing como una 7-tupla M = (Q, S, G, s, b, F, d), donde Q es un conjunto finito de estados S es un alfabeto de entrada G es un alfabeto llamado alfabeto de la cinta sQ es el estado inicial bG es el símbolo blanco FQ es el conjunto de estados finales o de aceptación d: QGQG {L, R} es una función parcial que se llama función de transición
La cinta La máquina de Turing posee una cinta dividida en celdas, cada celda es capaz de almacenar un símbolo. Además posee una cabeza lectora/escritora que lee y escribe un símbolo en la cinta. Inicialmente la cinta contiene b en todas sus celdas. La función de transición d transforma pares (q, s) en ternas de la forma (p, t, X), donde p es el siguiente estado, t es el símbolo escrito en la cinta y X es el movimiento de la cabeza lectora/escritora, que puede ser L o R. d(q1, a) = (q5, b, R) b b b a b b Estado interno q5 Estado interno q1 Posición de la cabeza lectora/escritora Posición de la cabeza lectora/escritora
Representación instantánea Se puede dar una descripción instantánea de la máquina de Turing similar a la de los ADPND, para la transición anterior sería (q1, abb) ├─ (q5, bbb) el carácter subrayado indica la posición de la cabeza lectora/escritora. Otra posibilidad es anteponer el estado actual al carácter señalado por la cabeza lectora/escritora como se muestra q1abb ├─ bq5bb
Máquinas de Turing como aceptadores de lenguajes Sea M = (Q, S, G, s, b, F, d) una máquina de Turing. Entonces el lenguaje aceptado por M es L(M) = {wS* | q1w ├─* w1pw2 para pF y wiG*} Los lenguajes aceptados por las máquinas de Turing se conocen como lenguajes recursivamente enumerables. Una cadena puede rechazarse por una máquina de Turing si se termina de procesarla en un estado de no aceptación. Otra forma es rechazarla al entrar en un bucle infinito.
Ejemplo El lenguaje regular a* es aceptado por la máquina Q = {q1, q2}, s = q1, F = {q2}, d(q1, a) = (q1, a, R) y d(q1, #) = (q2, #, R) También puede se aceptar por la máquina: Q = {q1, q2 , q3}, s = q1, F = {q3}, d(q1, a) = (q1, a, R) d(q2, a) = (q2, a, R) d(q1, b) = (q2, b, R) d(q2, b) = (q2, b, R) d(q1, #) = (q3, #, R) d(q2, #) = (q2, #, R)
Ejemplo El lenguaje anbn es aceptado por la máquina Q = {q1, q2 , q3 , q4 , q4}, s = q1, F = {q5} d(q1, a) = (q2, c, R) d(q2, d) = (q2, d, R) d(q2, a) = (q2, a, R) d(q2, b) = (q3, d, L) d(q3, d) = (q3, d, L) d(q3, a) = (q3, a, L) d(q3, c) = (q1, c, R) d(q1, d) = (q4, d, R) d(q4, d) = (q4, d, R) d(q4, #) = (q5, #, L)
Ejemplo El siguiente grafo muestra una máquina de Turing transforma una cadena de la forma anbam en an+mb mediante la siguiente función de transición: d(q1, a) = (q1, a, R) d(q1, b) = (q2, a, R) d(q2, a) = (q2, a, R) d(q2, #) = (q3, #, L) d(q3, a) = (q4, b, L) d(q4, a) = (q4, a, L) d(q4, #) = (q5, #, R)
Maquinas de Turing y lenguajes Una máquina de Turing que acepta un lenguaje no necesita detenerse para cualquier cadena de entrada, solo para las que pertenecen al lenguaje. Hay lenguajes RE para los cuales ninguna máquina de Turing que los acepte para con todas las entradas. La subclase de lenguajes que son aceptados al menos por una máquina de Turing que para con toda cadena de entrada se llaman lenguajes recursivos.
Funciones Turing computables Se dice que una función de cadena f e sTuring computable si existe una máquina de Turing M = (Q, S, G, q1, #, F, d) para la cual q1w |–* qf u para algún qf F, cuando f (w) = u. La función f (m, n) = m + n se puede implementar con d(q1, a) = (q1, a, R) d(q3, a) = (q4, b, L) d(q1, b) = (q2, a, R) d(q4, a) = (q4, a, L) d(q2, a) = (q2, a, R) d(q4, #) = (q5, #, R) d(q2, c) = (q3, b, L)
Diagrama de estados a/a,R a/a,R a/a,L a/b,L b/a,R #/#,L #/#,R q2 q3 q4 q5 q1
Ejemplo La siguiente máquina de Turing reconoce el lenguaje anbn. d(q1, a) = (q2, c, R) d(q2, a) = (q2, a, R) d(q2, d) = (q2, d, R) d(q2, b) = (q3, d, L) d(q3, d) = (q3, d, L) d(q3, a) = (q3, a, L) d(q3, c) = (q1, c, R) d(q1, d) = (q4, d, R) d(q4, d) = (q4, d, R) d(q4, b) = (q5, b, L) c/c, R a/a, R a/a, L a/c, R b/d, L q2 q3 q1 d/d, R d/d, R d/d, L q4 b/b, L q5 d/d, R
Construcción de Máquinas de Turing Definición. Sean M1 y M2 dos máquinas de Turing sobre el mismo alfabeto de entrada S y el mismo alfabeto de salida G, donde M1 = (Q, S, G, s1, b, F1, d1) M2 = (Q, S, G, s2, b, F2, d2) se supone Q1Q2 = , La composición de máquinas de Turing M1 y M2 es la máquina de Turing M = (Q, S, G, s, b, F, d), que se denota por M1M2. donde Q = Q1Q2 s=s1 F = F2 d1(q, s) si q Q1 y d1(q, s) (p, t, X) p F1 d = d2(q, s) si q Q2 (s2, t, X) si q Q1 y d1(q, s) =(p, t, X) para algún p F1 {
Bloques de construcción Definimos M1M2 estará dada por d(q1, a) = (q2, a, R)d(q1, #) = (q2, #, R)d(q2, a) = (q2, a, R)d(q2, #) = (q3, #, L)d(q3, #) = (p1, #, R)d(q3, a) = (p1, a, R)d(p1, a) = (p2, a, R)d(p1, #) = (p2, a, R) con F = {p2} Se mueve al siguiente blanco a la derecha y escribe una a. Definimos Rb como la máquina M1 con F1 = {q4} con d1(q1, a) = (q2, a, R)d1(q1, #) = (q2, #, R)d1(q2, a) = (q2, a, R)d1(q2, #) = (q3, #, L)d1(q3, #) = (q4, #, R)d1(q3, a) = (q4, a, R) Mueve la cabeza lec/esc hasta la posición del siguiente blanco a la derecha. Definimos la máquina M2 con F2 = {p2} con d2(p1, a) = (p2, a, R)d2(p1, #) = (p2, a, R) Escribe a en la posición de la cabeza lec/esc. Se representa por el símbolo a.
Ejemplo Antes de R#R# a a a a a a # Cabeza lec/esc Después de R#R# a a a a a a Cabeza lec/esc
Lb Esta máquina busca el primer símbolo de la izquierda que no sea blanco.
Ejemplo Antes de R#L# a a a a a a Cabeza lec/esc Después de R#L# a a a a a a Cabeza lec/esc
Otras máquinas útiles Escribe el símbolo a sobre la cinta y deja la cabeza sobre el símbolo La siguiente máquina termina en q3 si el símbolo en la cinta es un blanco y termina en q5 si es una a. Esta máquina representa una bifurcación y se representa mediante dos flechas. s = # s = a
Máquina de Turing que cambia aes por bes y bes por aes. En el simulador JCT: s = a R b s = b a
Flechas múltiples a a, b, # b R R RR o R2 R R # s = a a s a a R b R b
Desplazamiento de una cadena w R#R #Ra L2 s = a s = # s = b SR R #Rb En el simulador JCT: R#R s # #Rs L2 s = # El símbolo s indica que la máquina recuerda cual símbolo escribió sobre #. R
Reconocedor de wwI s # t # s = t #R#L # L# R s = # s t t = # # # Para en estado de aceptación Para en estado de no aceptación s # t # s = t #R#L b L# R s = # s t t = # # # s Para en estado de aceptación
Modificaciones de las máquinas de Turing Transiciones sin movimiento de la cabeza lec/esc. Modificar d: Q G Q G {R, L} Por d: Q G Q G {R, L, S} Donde S significa permanecer. Puede obtenerse con una máquina normal agregando d(q, s) = (p’, s’, R) y d(p’, t) = (p, t, L) t G
Cinta dividida en subceldas La cinta contiene múltiples caracteres. El movimiento de la cabeza dependerá del estado actual y de la n-tupla que represente el contenido actual. a a a a a b a a a b b a
Suma binaria El alfabeto estará formado por las ternas: (b, b, b) (1, 1, b) (1, 1, 0) (1, 1, 1)(0, 0, b) (0, 0, 0) (0, 0, 1) (b, b, 1)(0, 1, b) (0, 1, 0) (0, 1, 1)(1, 0, b) (1, 0, 0) (1, 0, 1) Primero buscará el extremo derecho mediante d(q1, s) = (q1, s, R) si s <> (b, b, b) d(q1, s) = (q2, s, L) si s = (b, b, b) además: d(q2, (0, 0, b)) = (q2, (0, 0, 0), L) d(q3, (0, 0, b)) = (q2, (0, 0, 1), L) d(q2, (0, 1, b)) = (q2, (0, 1, 1), L) d(q3, (0, 1, b)) = (q3, (0, 1, 0), L) d(q2, (1, 0, b)) = (q2, (1, 0, 1), L) d(q3, (1, 0, b)) = (q3, (1, 0, 0), L) d(q2, (1, 1, b)) = (q3, (0, 0, 0), L) d(q3, (1, 1, b)) = (q3, (1, 1, 1), L) d(q2, (b, b, b)) = (q4, (b, b, 0), S) d(q3, (b, b, b)) = (q2, (b, b, 1), S)
Cinta semiinfinita Máquina de Turing con una cinta semiinfinita. a a a a b a b a b Máquina de Turing con una cinta infinita puede simularse con una cinta semiinfinita de dos pistas a b a a b a b a b a b a a b a b a b * a a b a * a a b a * b a b a b * b a b a b
Máquinas multicinta Contiene varias cintas independientes. En un solo movimiento, esta máquina de Turing 1. Cambia de estado dependiendo del estado actual y del contenido de las celdas de todas las cintas, que están analizando actualmente las cabezas lec/esc. 2. Escribe un nuevo símbolo en cada una de las celdas barridas por sus cabezas lec/esc. 3. Mueve cada una de las cabezas hacia la izquierda o hacia la derecha (de forma independiente al resto de las cabezas). d: QGn QGn {L, R}n d(q,(s1, s2, s3,..., sn)) = (p,(t1, t2, t3,..., tn),(X1, X2,X3,...,Xn))
Ejemplo: reconocer anbn d(q1, (a, b)) = (q1, (a, a), (R, R))d(q1, (b, b)) = (q2, (b, b), (S, L))d(q2, (b, a)) = (q2, (b, a), (R, L))d(q2, (b, b)) = (q3, (b, b), (R, L)) estado: q1 estado: q1 estado: q1 a a b b a a b b a a b b a a a estado: q2 estado: q2 estado: q2 a a b b a a b b a a b b a a a a a a
Máquina Universal de Turing una máquina Universal de Turing es una máquina que a partir de una descripción de una máquina de Turing M y una cadena de entrada w, simula el comportamiento de M sobre la cadena w. Suponemos que Q = {q1, q2, ..., qn} donde q1 es el estado inicial y q2 es el único estado de aceptación. Además G = {s1, s2, ..., sm} donde s1 es el símbolo blanco. Codificamos M de la siguiente manera representamos q1 por 1 representamos q2 por 11, etc representamos s1 por 1 representamos s2 por 11, etc representamos L por 1 y representamos R por 11 Ejemplo: d(q3, s1) = (q4, s3, L) 0111010011110111010
Máquina Universal de Turing La máquina de Turing Universal Mu consta de tres cintas 1er cinta – la codificación de M en uno y ceros. 2a. cinta – la codificación del contenido de la cinta de M en unos y ceros. 3a. cinta – la codificación del estado actual codificado de M.
Problema de la parada El problema de la parada o problema de la detención para máquinas de Turing es el ejemplo de problema irresoluble más conocido. Consiste en determinar si una máquina de Turing se detendrá con cierta entrada, o bien quedará en un ciclo infinito. Este fue el primer problema que se demostró formalmente que no tenía solución.
Problema de la parada Definición Sea M una máquina de Turing arbitraria con un alfabeto de entrada Σ. Sea . ¿Puede decidirse si la máquina M se detendrá con la entrada w? Demostración Para demostrarlo, supongamos que el problema de la parada tiene solución, es decir, supondremos que existe una máquina de Turing que es capaz de determinar si otra máquina de Turing para con una entrada determinada.
Problema de la parada Consideremos una máquina de Turing P, que recibe como entrada una máquina de Turing M y una cadena w codificadas en la cinta y una a continuación de la otra (Mw), y que se encarga de ejecutar M sobre la cadena w. La máquina P parará y aceptará la entrada si M para con w, y parará y rechazará la entrada si M no para con w.
Modificamos la máquina P, creando una máquina P' equivalente. Esta máquina no parará si M para con w, y parará si M no para con w.
Ahora crearemos una máquina D, cuya función es la siguiente. Recibe una máquina M, la pasa por una máquina que se encarga de copiar la máquina M a continuación. Por lo tanto, a la salida de la máquina copia, la cinta contendrá MM (la codificación de la máquina repetida). A continuación, D coge este resultado y lo pasa a través de P'. Con esto intentamos decidir si la máquina M para con la entrada M. Es decir, si M para con la entrada M, entonces D no para, y si M no para con la entrada M, entonces D para.
Por último, tomaremos una máquina D (denominaremos SD), y le aplicaremos como entrada una máquina D. SD aplica como entrada a la máquina que recibe, la misma máquina. Por lo tanto, esta máquina en principio parará si D no para con entrada D, y no parará si D para con entrada D. Pero si SD no para y si D para con entrada D, sabiendo que D=SD, llegamos a una contradicción, por que aplicar D a SD debería dar como resultado lo mismo que aplicar D sobre D. Del mismo modo para el otro caso. Por lo tanto, el problema de la parada no tiene solución. Obtenido de "http://es.wikipedia.org/wiki/Problema_de_la_parada"
Lenguajes recursivamente enumerables Un lenguaje L sobre un alfabeto S se dice que es recursivamente enumerable si es aceptado por una máquina de Turing. Un lenguaje L es recursivo si L es recursivamente enumerable y hay alguna máquina de Turign que para sobre todas las entradas que acepta L.
Máquina para reconocer un lenguaje regular Sea M = (Q, S, s, F, d), un autómata finito determinista, Se puede construir una máquina de Turing que reconozca el lenguaje reconocido por M, M’ = (Q’, S’, G, s’, #, F’, d’), donde Q’ = Q {q’} S’ = S G = S {#} F’ = {q’} d’(q, s) = (d’(q, s), s, R) para todo qQ y s S d’(q, #) = (q, #, S) para todo qQ
Gramáticas no restringidas Una gramática no restringida (también se conoce como una gramática estructurada por frases) es una 4-tupla G = (N, S, S, P), donde N es el alfabeto de símbolos no terminales S es el alfabeto de símbolos terminales SN es el símbolo inicial P es un conjunto de producciones de la forma a b, donde a (N S)+ u b (N S)* (es decir, P (N S)+ (N S)* y es un conjunto finito)
Ejemplo La producción CB BC intercambia los no terminales B y C, obteniendo una cadena de la forma anBnCn. Las producciones aB ab y bB bb transforman toda B en b, obteniendo anbnCn. Las producciones bC bc y cC cc transforman toda C en c, obteniendo anbncn S aSBC | aBC CB BC aB ab bB bb bC bc cC cc
Ejemplo A y B actúan como marcadores de final de la cadena de aes. C se desplaza a la derecha al duplicarse el número de aes hasta que está junto a B, entonces se transforma en D. D se desplaza hacia la izquierda hasta que encuentra una A, y entonces se convierte en C. Cuando CB se reemplaza por E, termina la generación de aes. Entonces E se desplaza a la izquierda hasta que encuentra la A, momento en el cual se elimina AE. Lenguaje generado: S ACaB Ca aaC CB DB | E aD Da AD AC aE Ea AE e