Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Máquinas de Turing
2
Aumentando el poder Hasta aquí:
Autómatas finitos (lenguajes regulares), el poder de cómputo de los sistemas con memoria finita. Bastante limitados: pueden describir patrones “simples” en texto. Autómatas de pila (lenguajes de libre contexto), memoria no acotada pero de acceso limitado. Pueden describir lenguajes de programación, humanos... Pero ciertamente un computador puede hacer más. Como reconocer {w=anbncn}, o {w=uu}
3
Aumentando el poder ? lenguajes de libre contexto lenguajes regulares
4
Memoria más accesible Ahora agregaremos la posibilidad de moverse con libertad por la memoria (sin ir borrando lo que se lee, como en el PDA). La memoria será una cinta potencialmente infinita, en la que podemos escribir y leer símbolos. Movemos la cinta una posición a la izquierda o a la derecha, para acceder a otras posiciones de memoria. Alternativamente, podemos pensarlo como que estamos moviendo un “cabezal” sobre la cinta.
5
Memoria y unidad de control
Cinta ...... ...... Cabezal para leer y escribir Al igual que antes, la máquina tiene una cantidad finita de estados, que representamos con un grafo de transiciones. “Unidad de control”
6
Memoria y unidad de control
… … Este esquema de “unidad de control” interactuando con una memoria de acceso “libre” suena familiar para un informático, y no es casualidad. Pero notemos que es una extensión de los modelos de cómputo anteriores: En los AF, no había memoria externa. En los PDA, estaba restringida a una pila.
7
Input en cinta; posición inicial
Hasta ahora el input lo hemos estado leyendo de una “cinta” aparte. Ahora no será necesario: podemos asumir que viene escrito en la cinta. input casillas en blanco ...... w0 w1 w2 wn ... posición inicial del cabezal Lee un símbolo de la cinta Escribe un símbolo en la cinta Mueve el cabezal a izquierda o derecha Actualiza su estado interno En cada paso, la máquina
8
Representando transiciones
lo que escribo el movimiento del cabezal (L:left, R:right) lo que leo el cambio de estado de la máquina Nota: también se usa la notación (a,b,L), en lugar de ab,L.
9
Representando transiciones
Aparte del contenido de la cinta, lo único que necesitamos para conocer el estado del sistema es la ubicación del cabezal y el estado de la máquina. Por eso se suelen anotar juntos: ...... ......
10
Representando transiciones
Si la descripción de la máquina incluye un transición lo que ocurrirá será ...... Tiempo k ...... Tiempo k+1
11
Representando transiciones
Otro ejemplo, aplicando ...... ...... ......
12
Determinismo Hasta que indiquemos lo contrario, las máquinas de Turing serán deterministas: Para un mismo estado y símbolo en la cinta, sólo hay una transición posible. Nada de transiciones .
13
Función parcial Pero a diferencia de los AFD, no exigiremos que todos los casos estén cubiertos. Por lo tanto, puede ser que para un cierto símbolo leído, y cierto estado, no haya ninguna transición. Si eso ocurre, la máquina se detiene. En particular, los estados de aceptación no tienen transiciones de salida. Por lo tanto, son estados finales: la máquina acepta y se detiene.
14
Rechazo o aceptación Cuando la máquina se ejecuta partiendo con una palabra w en la cinta, decimos que la máquina Acepta w: si se detiene en algún momento en un estado de aceptación Rechaza w: Cuando no acepta. Esto puede ocurrir: si se detiene en algún momento en un estado que no es de aceptación ...o si nunca se detiene
15
Un ejemplo T=0 Consideremos la máquina de la arriba, y hagámosla correr sobre el input aaa. T=1 T=2 T=4 T=3 Stop y acepta
16
Un ejemplo de rechazo T=0 T=1
La misma máquina pero con input aba, rechaza. T=1 Stop y rechaza
17
Otro tipo de rechazo T=0 Para ver un caso de rechazo por loop infinito, modificamos un poco la máquina. T=1 T=2 T=4 ...etc
18
Formalmente Una máquina de Turing queda definida por
M = ( Q, , , , q0, F, ) donde Q es un conjunto finito de estados es el alfabeto de la cinta es el alfabeto leído por la máquina \ es el carácter “blanco” de la cinta (también se usa B, o ) q0Q es el estado inicial F son los estados de aceptación
19
Formalmente Una máquina de Turing queda definida por
M = ( Q, , , , q0, F, ) donde : QQ{L,R} es la función de transición Como dijimos antes, se permite que para algunos pares (q,a) el valor de (q,a) no esté definido. Lo podemos interpretar como que en esos casos (q,a) vale “stop” (y algunos libros lo tratan así).
20
Descripción instantanea
El sistema se echa a andar con el input w* escrito en la cinta el resto de la cinta en blanco la máquina en estado q0 el cabezal apuntando al comienzo de w Por lo tanto, en cualquier momento T la máquina no habrá visitado aún las casillas que estén a distancia mayor que T respecto a la posición inicial. En todo instante el tramo de la cinta que no está en blanco es finito.
21
Descripción instantanea
Eso permite dar una descripción finita del estado del sistema en un momento dado: Sea v el contenido de la cinta desde la posición del cabezal hasta el último símbolo no blanco. Sea u el contenido de la cinta desde el primer símbolo no blanco hasta la casilla anterior a la del cabezal. Sea q el estado interno de la máquina. Entonces anotamos la descripción instantánea o configuración como uqv. Si hay que evitar alguna confusión, escribimos [u,q,v]. u v
22
Descripción instantanea
Como antes, escribimos u q v u’ p v’ si lleva el sistema de uqv a u’pv’ Usamos la misma “” para denotar su clausura transitiva (aplicación reiterada de ). Podemos entonces definir el lenguaje aceptado por M como L(M) = { w*: q0w uqv, qF }
23
Una convención práctica
área de trabajo Llamémosle "área de trabajo" a la zona de la cinta que no está en blanco. ... Es recomendable no usar el símbolo dentro del área de trabajo; así siempre podemos usarlo para identificar los bordes. Seguiremos ese consejo. El área de trabajo puede crecer y crecer, pero en cualquier momento dado será finita (pues partió siendo finita). La descripción instantanea uqv da el contenido del área de trabajo (uv), el estado interno de la máquina (q) y su ubicación (entre u y v, apuntando al comienzo de u).
24
Volvamos al ejemplo: una observación
Claramente, el lenguaje aceptado por el ejemplo que vimos es a* Ese es un lenguaje regular. Nótese además que esta MT no escribe. No es casualidad: no es dificil ver que cualquier lenguaje regular puede ser aceptado por una MT que no altera su cinta.
25
MT para lenguajes regulares
Idea: La MT simplemente lee la palabra como lo haría el AFD, avanzando siempre hacia la derecha. Sus estados corresponden a los del AFD. Se agrega un estado extra para la aceptación (pues los del AFD no eran de detención; pierden su condición de estado de aceptación al pasar a la MT), y para llegar a él se chequea el fin del input.. Detalles: ejercicio. De hecho es un ssi: Si a la MT le prohibimos escribir, sólo puede aceptar lenguajes regulares.
26
Otro ejemplo Veamos un MT para el lenguaje {anbn}
27
T= 0
28
T= 1
29
T= 2
30
T= 3
31
T= 4
32
T= 5
33
T= 6
34
T= 7
35
T= 8
36
T= 9
37
T= 10
38
T= 11
39
T= 12
40
T= 13 Para & acepta
41
El segundo ejemplo Podemos resumir el funcionamiento de esa máquina de Turing mediante pseudocódigo: While veo a ax Avanzar (R) saltando {a,y}, hasta ver b by Avanzar (L) saltando {a,y}, hasta ver x Avanzar (R) Avanzar (R) saltando {y} hasta ver Aceptar La gracia: nada nos impide extender la idea para reconocer {anbncn}.
42
{anbncn}, pseudocódigo
While veo a ax Avanzar (R) saltando {a,y}, hasta ver b by Avanzar (R) saltando {b,z}, hasta ver c cz Avanzar (L) saltando {a,y,b,z}, hasta ver x Avanzar (R) Avanzar (R) saltando {y,z} hasta ver Aceptar Ejercicio: Hacer la MT Proponer alternativa que use sólo {a,b,c,x,} como alfabeto en la cinta.
43
LR:decidido; LRE:aceptado
Decimos que una máquina de Turing M decide un lenguaje L si M acepta L, y además M siempre se detiene. Los lenguajes que son decididos por alguna MT se llaman lenguajes recursivos (LR). Los lenguajes que son aceptados por alguna MT se llaman lenguajes recursivos enumerables (LRE). Nótese que, por definición, LR LRE.
44
Funciones Turing-computables
Otra forma de “usar” una MT es mirando lo que deja en la cinta cuando se detiene. Como la MT es determinista, el estado final de la cinta está determinado completamente por el estado inicial: es una función del estado inicial. Dada una MT M y un input w*, hay dos casos: Si M se detiene con configuración upv, definimos fM(w)=uv. Si M nunca se detiene, definimos fM(w)= (decimos que para w, fM diverge).
45
Funciones Turing-computables
Config. inicial Config. final Loop () Entonces, toda MT M induce una función fM:**{} Decimos que una función f es Turing-computable si existe una MT que la induce.
46
Funciones Turing-computables
Observaciones: Sin perder generalidad, podemos suponer que el dominio de f está restringido a un dominio D *. Algunos autores exigen que al terminar el cómputo el cabezal esté en el inicio de f(w). No es difícil modificar la MT para cumplir con eso, si hace falta. Para efectos prácticos, los argumentos de fM se suelen codificar en * (i.e., en general no los escribimos tal cual como los leeríamos nosotros).
47
Ejemplo: x+y Para simplificar, codificaremos números enteros en sistema unario. 5 decimal 101 binario 11111 unario Demostremos que la suma de números naturales es una función computable. Input: x0y Aprovecharemos que x concatenado con y da x+y, en unario Output: xy0
48
Ejemplo: x+y
49
T= 0
50
T= 1
51
T= 2
52
T= 3
53
T= 4
54
T= 5
55
T= 6
56
T= 7
57
T= 8
58
T= 9
59
T= 10
60
T= 11
61
T= 12 Parar y aceptar
62
Otro ejemplo: 2x Esta MT calcula 2x, para x en unario:
63
Otro ejemplo: 2x Describamos su funcionamiento en pseudocódigo informal: Reemplazar cada 1 por un $. REPETIR Encontrar el $ de más a la derecha, cambiarlo a 1. Ir al extremo derecho, insertar un 1. HASTA que no queden $ ¿Cómo calcularíamos xy? ¿Y n!?
64
Más cómputos Si quisiéramos calcular el “pseudocódigo” sería:
Para cada 1 en x, ir borrándolo y borrando un 1 del y. Si en algún momento busco un 1 en y, y no encuentro, entonces borrar todo y escribir un 1. Si eso nunca ocurre, y es x el que se acaba, borrar todo y escribir un 0. Ejercicio: construir la MT.
65
Combinación de máquinas
Programar MT es engorroso, pero esencialmente fácil. El paradigma resulta sorprendentemente flexible. También es notablemente robusto: es posible agregar muchas “features” (por ejemplo, una segunda cinta) a una MT sin que su poder de cómputo cambie. Veremos varios de esos “features”; con ellos en mano, es más fácil construir MT más ambiciosas.
66
Combinación de máquinas
MT input output En particular, será posible ver cada MT como una “caja negra”, que se puede usar como subrutina en otra MT. MT comparadora MT sumadora MT borradora
67
Variaciones c/r a las MT estándar
Nuestro modelo estándar: 1 cinta, infinita en ambas direcciones cabezal que escribe y lee (movimiento es a izquierda o derecha) transiciones entre los estados internos de la MT son determinísticas
68
Variaciones c/r a las MT estándar
Algunas variantes: Cinta semi-infinita. Varias cintas. “Cinta” bidimensional. Opción de no mover el cabezal. Opción de insertar símbolos. Transiciones no deterministas. MT “offline” (el input queda sin tocar, en su propia cinta). Largo Etc.
69
Variaciones c/r a las MT estándar
Ninguna de estas variantes altera el poder de cómputo de las MT. ¿Qué significa eso? Que los lenguajes que se pueden aceptar o decidir son los mismos. En cada caso se demuestra que si MT estándar M, entonces MT M’ del tipo modificado que es equivalente, y viceversa.
70
Variaciones c/r a las MT estándar
¿Qué significa que las máquinas sean equivalentes? Si estamos viendo la MT como un reconocedor de lenguajes, significa dos cosas: que L(M)=L(M’) que M se detiene con input w ssi M’ se detiene con input w. Si en cambio vemos la MT como el cómputo de una función, significa que fM=fM’ (Pues en la opción fM(w)= ya está incluida la información sobre la detención)
71
MT con opción “Stay” Una MT+stay (máquina de Turing con opción “stay”) es similar a la MT estándar, pero además de poder mover el cabezal a izquierda o derecha (“L” o “R”), tiene la opción de dejarlo donde está (“S”). Por ejemplo, una transición podría ser y al aplicarla ocurrirán cosas del tipo ... ...
72
MT con opción “Stay” Teorema: las MT+stay tienen el mismo poder de cómputo que las MT estándar. Demostración: demostraremos que Las MT+stay tienen al menos el poder de cómputo de las MT estándar. 2. Las MT estándar tienen al menos el poder de cómputo de las MT+stay.
73
MT con opción “Stay” Las MT+stay tienen al menos el poder de cómputo de las MT estándar. Demostración: directo, pues la MT estándar es un caso particular de MT+stay. 2. Las MT estándar tienen al menos el poder de cómputo de las MT+stay. Para eso, veremos cómo convertir una MT+stay en una MT estándar, sin alterar su funcionamiento.
74
MT con opción “Stay” Para cada transición que use el “S” (stay), agregamos un estado auxiliar, y reemplazamos la transición por 1+|| transiciones: Una de esas por cada x QED
75
MT con opción “Stay” T = 1 T = 2 T = 1 T = 2 T = 3 en M, la MT+stay
la MT estándar
76
Ejercicio: MT con movimiento en dos pasos
A sugerencia del público, ejercicio: Diremos que una MT es de "dos pasos" si sus opciones de movimiento son {L, L2, R, R2}, donde L y R se entienden como antes, L2 mueve el cabezal dos posiciones hacia la izquierda, y R2 lo mueve posiciones a la derecha. EJ: Demostrar que las MT de "dos pasos" tienen el mismo poder de cómputo de las MT estándar. De hecho, dado kN, una MT con movimientos {L, L2,..., Lk, R, R2,...,Rk} también sigue siendo equivalente.
77
MT con varias “pistas” Una MT “multitrack” (varias pistas) tiene una única cinta de memoria, pero esa cinta tiene más de una pista de información: pista 1 pista 2 Habrá transiciones de la forma
78
MT con varias “pistas” Claramente las MT multitrack son una generalización de las MT estándar (basta con ignorar las pistas adicionales para volver al caso estándar). pista 1 pista 2 Por otro lado, para simular una MT multitrack con alfabeto y k pistas, usando una MT estándar, basta que tomemos ’ = k. Cada casilla de la cinta nueva contendrá lo que había en las k pistas, en esa posición.
79
MT con varias “pistas” M, multitrack M’, estándar T=0 T=1
80
MT con memoria "interna" finita
Una MT con memoria interna posee una o más variables cuyo valor se guarda dentro del estado interno (no en la cinta); cada variable debe tener un rango finito. Por ejemplo: una MT podría tener las variables m1 D1 = {0, 1} m2 D2 = {blanco, azul, rojo} m3 D3 = {,} Los valores se pueden consultar y modificar en las transiciones (si no se modifican, quedan como estaban).
81
MT con memoria "interna" finita
Sin perder generalidad, podemos verlo como que fuese una sola variable: m = (m1,m2,m3) D = D1D2D3 Claramente, es una extensión c/r a las MT estándar. Pero: no cambia el poder de cómputo. Para simular una MT con memoria interna mediante una MT estándar, la idea es: Reemplazar Q por Q' = QD.
82
MT con memoria "interna" finita
Q' = Q D estado interno estado "de control" variables internas La condición sobre valores de variables se convierte simplemente en condición sobre el estado interno, y la modificación de valores, en elegir a qué estado paso. Es importante que el rango (valores posibles) de las variables internas sea finito; de lo contrario, Q' quedaría infinito. Nótese que esta extensión también funciona para AFD y para PDA.
83
MT con cinta semi-infinita
Una MT con cinta semi-infinita tiene una cinta que es infinita en una sola dirección: en lugar de ... se tiene Aquí el # marca el fin de la cinta (como el "$" que marcaba el fondo de la pila en los PDA). Algunos textos (p.ej. el Hopcroft) usan este tipo de MT como "estándar".
84
MT con cinta semi-infinita
A diferencia de las modificaciones previas, esta no es una "generalización", sino una "restricción" respecto a nuestras MT estándar. Las restricciones pueden restringir el poder de cómputo (por ejemplo, si la MT no puede escribir, su poder se reduce al de los AFD). Sin embargo, esta restricción particular no cambia el poder de cómputo:
85
MT con cinta semi-infinita
Es directo ver que toda MT con cinta semi-infinita puede ser simulada por una MT estándar: simplemente no usamos la cinta a la izquierda. En dirección contraria: necesitamos probar que dada una MT estándar, la podemos simular en una con cinta semi-infinita.
86
MT con cinta semi-infinita
Fijamos un punto de referencia en nuestra cinta infinita (puede ser la posición de inicio del cabezal). "Doblamos" la cinta infinita en torno a ese punto, dejando una cinta semi-infinita de dos pistas: lado derecho lado izquierdo
87
MT con cinta semi-infinita
lado derecho lado izquierdo Los movimientos L, R se invierten si estamos "abajo". Al pasar por el punto de referencia, "viramos". Aplicamos el método previo para pasar a una única cinta. Para saber si hay que mirar arriba o abajo, guardamos una variable en memoria interna ("arriba", "abajo").
88
MT con marcas en la cinta
Podemos agregar a la MT la posibilidad de poner y quitar marcas en la cinta (aparte del símbolo contenido en la celda). Y luego podemos usar la marca para reconocer la celda. La condición es que la variedad de marcas sea finita: por ejemplo, M={,,} (donde es "sin marca"). ¿Cómo hacemos esto con una MT estándar? Reemplazamos por ' = M
89
MT con Insert/Delete Una MT con insert puede hacer transiciones del tipo (Duplica la celda, y se sitúa a la izquierda).
90
MT con Insert/Delete Una MT con delete puede hacer transiciones del tipo (Borra la celda, y se sitúa a la izquierda).
91
MT con Insert/Delete Ambas operaciones se pueden implementar en una MT estándar: Para duplicar: Marcamos la celda Avanzamos hasta el final del área de trabajo Retrocedemos copiando cada celda en la siguiente ...hasta llegar a la celda marcada. Para borrar: Marco la celda y copia en ella el valor de la celda vecina. Sigo copiando hasta llegar al final del área de trabajo Me devuelvo hasta la celda marcada.
92
MT con varias cintas Unidad de control Cinta 1 Cinta 2
A diferencia de la máquina "con varias pistas" que vimos antes, en la MT "multicinta" cada cinta tiene su propio cabezal. Las transiciones miran ambas cintas, y deciden escritura y movimiento en ambas cintas.
93
MT con varias cintas Cinta 1 Cinta 2 T = 1 T = 2
94
MT con varias cintas ¿Cómo podemos simular una MT multicinta, usando una MT estándar? Lo que haremos será simularla usando una MT con una cinta, pero varias pistas (y esa ya sabemos que es equivalente a la estándar). Idea: Por cada cinta de la MT multicinta, ponemos dos pistas: Una con los datos Otra que indica dónde está el cabezal.
95
MT con varias cintas Cinta 1 Cinta 2 Cinta 1 "Cabezal" de la cinta 1
Cabezal de la MT multipista
96
MT con varias cintas Para simular un paso de la MT multicinta, la MT multipista hace lo siguiente: Sitúa su cabezal a la izquierda de todos los "cabezales". Avanza hacia la derecha hasta ver todos los "cabezales", y guardando en variables internas el símbolo apuntado por cada uno de ellos. Aplica la regla de la MT multicinta, y guarda en variables internas los nuevos símbolos y los movimientos de cada cinta. Avanza a la izquierda, aplicando eso a cada cinta a medida que va encontrando los cabezales.
97
MT con varias cintas Por lo tanto, toda MT multipista se puede simular con una MT estándar, y viceversa. Observaciones: Obviamente esta construcción es poco práctica: la máquina multipista requiere muchos pasos para simular cada paso de la máquina multicinta. Sin embargo, por ahora no nos interesa la velocidad. Lo que interesa: es que lo computable (lenguajes, funciones) no cambia.
98
MT multidimensionales
En una MT multidimensional, en lugar de tener una cinta infinita (que se puede ver como una función Z), tenemos un plano, volumen, o algo de dimensión mayor (que se pueden ver como funciones Z2, Z3, etc). En dimensión 2, los movimientos serán L,R,U,D (agregamos up y down). El poder de cómputo tampoco aumenta (pero no lo demostraremos!).
99
MT no-deterministas En una MT no determinista, existe más de una transición posible a partir de una configuración dada. T = 1 T = 2 Opción 1 Opción 2
100
MT no-deterministas Como de costumbre, el lenguaje asociado a una MT no-determinista será el conjunto de palabras para las cuales existe alguna cadena de decisiones que conduce a un estado de aceptación. Nuevamente se tiene la equivalencia: todo lenguaje aceptado por una MT no-determinista, es aceptado por una MT estándar (determinista). Hay varias construcciones posibles; aquí solo bosquejaremos una. Sea M la MT no-determinista, y veamos como construir M' estándar, equivalente a M.
101
MT no-deterministas Idea: a la usanza de los viejos sistemas operativos, simularemos una máquina paralela usando una máquina secuencial. En la cinta habrá una serie (finita) de áreas de trabajo, cada una con la posición de su "cabezal" marcada. ...... ...... $ área 1 $ área 2 $ En cada vuelta, M' recorrerá todas las áreas, ejecutando una iteración de M en cada una de ellas.
102
...... ...... ...... ...... MT no-deterministas $ área 1 $ área 2 $
área 1a $ $ área 1b $ área 2 $ Cada vez que toque "adivinar" un paso, el área de trabajo se bifurcará (usamos un "insert"), y ahora habrá un área por cada opción. Si en algún momento en alguna versión del área de trabajo M llega a aceptar el input, M' lo aceptará.
103
MT offline Una MT offline tiene dos cintas: el input, que sólo se lee, y otra para trabajar. Cinta de entrada sólo lectura Unidad de control lectura/escritura Cinta de trabajo Claramente, el poder de cómputo tampoco cambia.
104
LLC LRE Ya vimos que los lenguajes regulares pueden ser aceptados por MT (y sin siquiera escribir en la cinta). Para ver que los lenguajes de libre contexto son aceptados por MT, tomamos un PDA cualquiera... Input Pila Estados internos PDA ...y lo podemos ver como una MT no-determinista con dos cintas: una de sólo lectura (con el input) la otra (la pila) inicialmente vacía.
105
Jerarquía de lenguajes
Sabíamos que los lenguajes regulares eran un caso particular de los lenguajes de libre contexto; ahora vemos que los de libre contexto son caso particular de los recursivos. Vimos un lenguaje ( {anbncn} ) que es recursivo pero no es LLC. E hicimos notar que recursivo recursivo enumerable (es decir, que ser decidido por una MT implica ser aceptado por una MT). Tenemos entonces las siguientes inclusiones:
106
Jerarquía de lenguajes
Lenguajes recursivos enumerables (r.e.) Lenguajes recursivos Lenguajes de libre contexto Lenguajes regulares Pronto veremos ejemplos concretos que muestran que cada una de estas inclusiones es propia.
107
Dos teoremas sobre complementos
Teorema: L es recursivo ssi LC es recursivo. Demostración: Usamos la misma MT, pero cambiamos sus estados de aceptación: F' = Q \ F. Teorema: Si L es r.e. y LC es r.e., entonces L es recursivo. Dado un input w, ejecutamos simultáneamente las MT de L y de LC (un paso a la vez para cada una). Tarde o temprano una de las dos se tiene que detener, y sabremos si wL.
108
Enumeración Dijimos que un conjunto es numerable si es finito, o si tiene el cardinal de los números naturales (N). Para evitar confusión le llamaremos a eso contable. Ejemplos de infinitos contables: Z (enteros) Q (racionales) Z (pares ordenados de enteros) 2Z (números pares) Ejemplos de infinitos no contables: R (reales) [0,1] (o cualquier intervalo con más de 1 elemento) P(N) (cjto. formado por los subconjuntos de N).
109
Enumeración Por lo general para demostrar que un conjunto es contable lo que se hace es describir un procedimiento de enumeración. Sea L un conjunto de palabras. Definiremos un procedimiento de enumeración para L como una máquina de Turing que: no recibe ningún input genera todas las palabras de L cada palabra es generada en tiempo finito Podemos suponer que hay una cinta de trabajo, y otra en la cual escribir las palabras de L.
110
...... ...... ...... Enumeración área de trabajo w1 # w2
Es útil pensar en la cinta de salida como una "impresora", donde la MT va agregando palabras. Que la MT enumere L significa que: wL, tw en que w es impresa. Si w es impresa, wL.
111
Enumeración OJO: Diremos que un lenguaje es enumerable (con "e") si hay una MT que lo enumere. Si un conjunto (en particular, un lenguaje) es enumerable, entonces necesariamente es contable (de hecho, cualquier lenguaje es contable). Sin embargo, lo contrario no es necesariamente cierto: puede que un conjunto sea contable y sin embargo no exista una MT que lo enumere.
112
Enumeración Sea un alfabeto (es decir, un conjunto finito cualquiera). Entonces * es un conjunto infinito enumerable. ¿Por qué? Hay que describir una forma de enumerar las palabras de * No toda idea es buena. Tomemos ={a,b} como ejemplo. Una idea que no funciona es listarlas en orden alfabético (poniéndole algún orden alfabético a ): como hay infinitas palabras que parten con a, jamás llegaremos a listar las que parten con b.
113
Enumeración En cambio, sí podemos enumerar * si primero listamos todas las palabras de largo 0, luego las de largo 1, luego las de largo 2, etc. Dentro de las de un mismo largo, podemos seguir orden alfabético. # a # b # aa # ab # ba # bb # aaa #... A este tipo de orden (en longitud creciente, y orden alfabético dentro de la misma longitud) se le llama orden canónico.
114
Enumeración Teorema: L* es recursivo enumerable ssi existe una MT que lo enumera. Demostración: () Existe una MT ME que enumera L, y queremos crear una MT MA que acepte L. MA: Recibe un input w, y lo deja intacto en una cinta. Usa dos cintas más para echar a correr ME. Cada vez que ME imprime una palabra, MA la compara con w. Si es igual, acepta w y se detiene. De lo contrario, continúa.
115
Enumeración Teorema: L* es recursivo enumerable ssi existe una MT que lo enumera. Demostración: () Existe una MT MA que acepta L, y queremos crear una MT ME que enumere L. Tentación: que ME vaya listando las palabras de * en orden canónico, y ejecutando MA para cada una, para ver acaso están en L (e imprimiéndolas, cuando la respuesta es sí). Problema: para alguna palabra MA puede no detenerse, y ME se quedará pegada (y nunca seguirá listando).
116
Enumeración Teorema: L* es recursivo enumerable ssi existe una MT que lo enumera. Solución a eso: Construimos ME para que funcione de acuerdo al siguiente algoritmo: Para k=0,1,2,... Listar las primeras k palabras (del orden canónico): w1,...,wk Para cada wi, Ejecutar MA con input wi durante k pasos. Si MA aceptó wi, imprimir wi. QED
117
Enumeración Teorema: L* es recursivo enumerable ssi existe una MT que lo enumera. Teorema: L* es recursivo ssi existe una MT que lo enumera en orden canónico. Demostración: ejercicio. Otros ejercicios: construir MT para enumerar: {anbn, n>0} los números naturales, en binario los números enteros, en decimal
118
Codificación Para efectos de enumerar, pero también para efectos de calcular funciones, y/o decidir propiedades, necesitamos convertir el input en un string. Sólo así puede ser input para una MT Eso puede requerir una codificación no trivial, pero en principio es siempre posible (con información digital). Después de todo, los mp3, avi, jpg, son precisamente información convertida a strings. Lo importante es precisar qué codificación se usa. Luego nuestra MT se ocupará de entenderla.
119
Codificación Ejemplo: codificar un grafo dirigido.
Una opción: codificar la cantidad de nodos, y la matriz de adyacencia, en que Aij=1 si hay arco de i a j, Aij=0 si no. A B C A B C A 0 1 1 B 0 1 0 C 0 1 0 111# Cantidad de nodos (en unario) Matriz de adyacencia
120
Codificación Ejemplo: codificar un grafo dirigido.
Otra opción: codificar la cantidad de nodos, y luego los arcos. A B C 111#1#11#11#11#1#111#111#11 Cantidad de nodos (en unario) (A,B) (B,B) (A,C) (C,B) Ejercicios: codificar AFD codificar GLC
121
Codificación Algo más complicado: las propias máquinas de Turing.
Podemos codificar en unario los símbolos de y los estados de Q (usaremos el contexto para evitar ambigüedad). También los movimientos del cabezal: 1 para L, 11 para R. símbolos codificación estados
122
Codificación Codificando una transición: Codificando las transiciones:
123
Codificación Podemos codificar la máquina entera dando:
[cantidad de estados] # [cantidad de símbolos en ] # [lista de transiciones] # [lista de estados que son de aceptación] Y tendremos un lenguaje LMT sobre el alfabeto {#,1}, formado por todas las posibles MT.
124
Codificación LMT es un lenguaje recursivo:
podemos construir una MT que vaya generando las palabras de {#,1}* en orden canónico para cada una, chequeará si es una MT válida (basta ver que siga el formato que describimos) y los números calcen si es válida, imprime la palabra; si no, la ignora. LMT se puede enumerar, y más aún, se puede enumerar en orden canónico.
125
Codificación Se deduce que existen lenguajes que no son r.e. (es decir, no son aceptados por ninguna MT): Fijemos el alfabeto, . Como vimos, * es un infinito contable. P(*) es un infinito no contable: es decir, existe una infinidad no contable de lenguajes distintos. Las MT sobre el alfabeto son un conjunto enumerable, ergo contable. No puede haber una MT (distinta) para cada lenguaje. ¡No alcanzan!
126
Un lenguaje fuera de LRE
Sin embargo, podemos ser un poco más explícitos: usaremos el método diagonal de Cantor para construir: un lenguaje que no es r.e. un lenguaje que es r.e., pero no recursivo Consideremos el alfabeto = {a}. Consideremos también las MT que aceptan lenguajes sobre . Son enumerables: llamémoslas M1, M2, M3, ...
127
Un lenguaje fuera de LRE
Cada L(Mi) es un conjunto de palabras de la forma an. Podemos entonces hacer una "tabla" infinita anotando qué palabras están en qué lenguajes. Definamos el lenguaje L como { ak: ak L(Mk) } L
128
Un lenguaje fuera de LRE
Por construcción, LC (ojo, el complemento de L) no coincide con L(Mk) para ningún k. LC no es recursivo enumerable L
129
Un lenguaje en LRE, pero no recursivo
Por otro lado, L sí es recursivo enumerable. Demostración: Podemos contruir una MT que lo acepta, de la siguiente forma: Dado un input w=ak, identificamos el valor de k. Usando la MT que enumera las M1, M2,..., encontramos Mk. Echamos a correr Mk, dándole el input w. Si se detiene y acepta, aceptamos w.
130
Un lenguaje en LRE, pero no recursivo
L es recursivo enumerable. LC no es recursivo enumerable. Por lo tanto, L no es recursivo : Si lo fuera, LC sería recursivo también. Pero en tal caso sería r.e. contradicción
131
LC L ¿Dónde quedan? LC no es recursivo enumerable. Lenguajes
Lenguajes recursivos enumerables (r.e.) L L es recursivo enumerable pero no recursivo. Lenguajes recursivos Lenguajes de libre contexto Lenguajes regulares
132
Máquina de Turing Universal
Turing, luego de definir el formalismo general y mostrar MT que implementan diversas funciones, define una MT muy especial: una máquina de Turing universal (MTU). La MTU recibe como input: La descripción de una máquina de Turing M cualquiera. Una palabra w.
133
Máquina de Turing Universal
input w M con input w MT <M> La MTU simula la máquina M, con input w. Por lo tanto, lo que hubiese hecho M a partir de w, lo hará la MTU.
134
Máquina de Turing Universal
No es difícil construir una MTU usando tres cintas: Cinta 1 Descripción de M Máquina de Turing Universal Cinta 2 ... Cinta de M Cinta 3 p Estado (interno) actual de M
135
Problema de membresía Esta noción de MT simulando otras MT es poderosa. En particular, sirve para demostrar la existencia de problemas indecidibles. Problema de membresía: Input: una MT M, y una palabra w Problema: ¿M acepta w? Teo.: el problema de membresía es indecidible. Demo.: por contradicción. Supongamos que el problema de membresía es decidible.
136
SÍ ¿M acepta w? NO Problema de membresía
En tal caso, existirá una MT (llamémosla B) que resuelve el problema: M acepta w ¿M acepta w? NO SÍ M rechaza w
137
SÍ aceptar w ¿M acepta w? NO rechazar w Problema de membresía
Escojamos en particular una M que acepte un lenguaje L(M) que no es recursivo (ya vimos que eso existe). M no siempre se detiene. Usando la descripción de esa M en B, construyamos la siguiente máquina: NO SÍ aceptar w rechazar w ¿M acepta w?
138
SÍ aceptar w ¿M acepta w? NO rechazar w Problema de membresía
Esta máquina recibe w y responde (siempre) acaso w está en L(M). En ese caso L(M) sería recursivo: contradicción. La máquina B no puede existir. El problema de membresía es indecidible. QED NO SÍ aceptar w rechazar w ¿M acepta w?
139
Problemas / lenguajes Nota: hablaremos indistintamente de lenguajes y problemas. ¿Motivo? A todo lenguaje le corresponde un problema. A todo problema de decisión (sí/no) le corresponde un lenguaje (eso lo imponemos, porque el concepto de “problema” no está definido!). Ejemplo: Problema: ¿es N primo? Lenguaje: L={n:n es primo}, ¿NP?
140
Problemas / lenguajes Ejemplo:
Problema: sean G1 y G2 dos gramáticas de libre contexto. ¿Generan el mismo lenguaje? Lenguaje: L={ (G,G'): G y G' son GLC, y L(G)=L(G') }. ¿ (G1 ,G2) L? Observación: L es recursivo “¿wL?” es decidible Por ejemplo: si definimos La = { <M,w>: M describe una MT, w es una palabra, y M acepta w }, lo que acabamos de demostrar es que La no es recursivo.
141
Problema de membresía Veamos otra demostración de la indecidibilidad del problema de membresía, que no usa resultados previos. A partir de B, definamos una máquina C que hace lo siguiente: Recibe una descripción de máquina <M> Le entrega a B el par <M>,<M>, de modo que B responderá acaso M acepta <M>. Si B responde que sí, C rechaza; si B responde que no, C acepta.
142
SÍ NO Problema de membresía rechazar ¿M acepta <M>? aceptar
¿Qué pasa si a C le entregamos <C> ? Si C acepta <C>, B dice que sí, luego C rechaza <C>. Si C rechaza <C>, B dice que no, luego C acepta <C>. Contradicción!!
143
Problema del alto El problema indecidible más conocido es el “problema del alto” o “problema de detención” (halting problem). Input: una MT M, y una palabra w. Problema: ¿se detiene alguna vez M, si parte con input w? Teo.: el problema del alto es indecidible. Demostración: Similar a la primera que hicimos para La. Supongamos que M con L(M) r.e., pero no recursivo. Supongamos que “H” decide el problema del alto.
144
Problema del alto NO Rechazar w ¿M se detiene al partir con w? SÍ
Aceptar w Correr M con input w Rechazar w Entonces esta máquina decidiría L(M) contradicción!!!
145
¿Qué acabamos de hacer? Reducción
"reducir un problema P a un problema Q" significa que si tenemos una MT para Q, tenemos una MT para P. Acabamos de reducir el problema de membresía de una MT no recursiva al problema del alto: Si tuvieramos una MT para el alto, podríamos decidir un problema que es (por definición!) indecidible.. Ojo: la próxima semana veremos una noción de reducción que requiera además ser "barata"; pero en esta sección sólo nos interesa que exista alguna reducción.
146
¿Qué acabamos de hacer? Reducción
"reducir un problema P a un problema Q" significa que si tenemos una MT para Q, tenemos una MT para P. Q se reduce a P permite crear Solución de P Solución de Q P no es más difícil que Q Q es al menos tan difícil como P
147
¿Qué acabamos de hacer? Reducción
se reduce a P Si P es indecidible, Q también lo es: De lo contrario, usando Q decidiríamos P, y tendríamos una contradicción. Para demostrar que un problema Q es indecidible, la técnica habitual es: Tomar algún problema P que ya sabemos indecidible Reducirlo a Q.
148
¿Qué acabamos de hacer? Reducción
se reduce a P Por otro lado, si Q es decidible, P también lo es (es la contrarrecíproca de lo anterior). Para demostrar que un problema P es decidible, lo podemos reducir a un Q que ya sabemos que es decidible. Alternativamente [más usual] podemos describir directamente un algoritmo decida P.
149
Otra reducción: problema de acceso
Problema de acceso a un estado ("A"): Input: Una máquina de Turing M, una palabra w, y un estado q de M. Problema: ¿Partiendo con input w, pasa alguna vez M al estado q? Teorema: el problema A es indecidible. Demostración: reduciremos el problema del alto ("H") al problema A.
150
Problema de acceso a un estado
Modus operandi: Suponer que tenemos una MT para A. Pensar cómo usar eso para obtener una MT para H. Mostrar la construcción (o explicar en detalle suficiente el algoritmo). Entonces, asumimos que existe MT que decide A sí no M pasa a q, al partir de w M no pasa a q, al partir de w
151
Problema de acceso a un estado
y queremos MT que decide H sí no M se detiene, al partir de w M no se detiene, al partir de w El truco: modificamos M para que, justo al detenerse, pase a un estado especial (nuevo).
152
Problema de acceso a un estado
Dada una máquina M, que tenía varios estados de detención (que, recordemos, no tienen transiciones salientes!), creamos M': Agregamos transiciones hacia un nuevo estado q. Ese estado será el nuevo (y único) estado de detención. estado nuevo estados de detención
153
Problema de acceso a un estado
M' pasa al estado q M se detiene Para resolver H con input (M,w), podemos transformar M en M' y aplicar A con input (M',w,q). estado nuevo estados de detención
154
Problema de acceso a un estado
La máquina que decidiría H sería entonces: generar M' MT que decide A sí no Hemos reducido H a A. Como H es indecidible, A también debe serlo.
155
Ejercicios Problema del alto con cinta vacía: Input: una MT M.
Problema: Si M se ejecuta con input vacío (cinta inicialmente en blanco), ¿se detiene alguna vez? Ejercicio: demostrar que este problema es indecidible. Hint: reducir el problema del alto. Vacuidad de lenguaje: Input: una MT M. Problema: ¿L(M)=? Ejercicio: demostrar que este problema es indecidible. Hint: reducir el problema de membresía.
156
Teorema de Rice Diremos que una propiedad relativa al lenguaje reconocido por una máquina de Turing es trivial si es cierta para todas las MT, o para ninguna. Teorema (Rice): cualquier propiedad no trivial de los lenguajes de las MT es indecidible. Demostración: en las próximas transparencias, pero sólo para los curiosos, y para que no pelen. Pero no es muy intuitiva, así que pueden saltársela sin daño.
157
Teorema de Rice: demostración
Esquema de la demostración del teorema de Rice: Sea T el conjunto de todas las MT cuyo lenguaje cumple la propiedad no trivial. Sea M una MT con lenguaje . Sin perder generalidad, podemos suponer que MT (de lo contrario, trabajamos con TC). Sea M1 una MT que sí está en T. Mostraremos que si T es decidible, entonces el problema del alto ("H") lo es.
158
Teorema de Rice: demostración
Dados M y w, para los que queremos resolver el problema del alto, construimos M', una máquina que, dado un input x, hace lo siguiente: (Si al ejecutar M(w), o M1(x), alguna no se detiene, entonces M' tampoco se detiene.) Ejecuta M con input w Si M aceptó w: Ejecuta M1 con input x Si M1 aceptó x, aceptar. Si M1 rechazó x, rechazar.
159
Teorema de Rice: demostración
Ejecuta M con input w Si M aceptó w: Ejecuta M1 con input x Si M1 aceptó x, aceptar. Si M1 rechazó x, rechazar. M'(x): Si M no se detiene con w: M' rechaza cualquier x L(M')= M' T Si M se detiene con w: M' acepta x M1 acepta x L(M')=L(M) M' T Si pudiéramos decidir la propiedad T, podríamos decidir el problema del alto.
160
Teorema de Rice: uso El teorema mismo no hay que saltárselo, pues es muy poderoso. Por ejemplo: existen MT que tienen lenguajes finitos, y existen MT que tienen lenguajes infinitos. Ser finito es una propiedad no trivial del lenguaje asociado a las MT. Es indecidible el problema de determinar acaso el lenguaje asociado a una MT es finito. También será indecidible acaso el lenguaje de una MT es regular, acaso contiene dos palabras del mismo largo, etc etc.
161
Funciones no computables
Una función es [Turing-]computable ssi existe una MT que las calcula. Si no existe ninguna, es no-computable. ¿Ejemplo de función no computable? Fácil: L={ <M,w>, donde M describe una MT, w es input} f:L{0,1} definida como f(<M,w> ) = 1 si M se detiene al partir con input w, 0 si no. Si una MT calculara f, resolvería el problema del alto. Ocurrirá lo mismo con cualquier problema indecidible: su función indicatriz es no computable.
162
Funciones no computables
Veamos un ejemplo más interesante: la función/juego de los castores atareados (busy beaver). Propuesto por Tibor Radó en 1962: dado k y n, diseñar una máquina de Turing estándar M con n estados (sin contar el de detención), y cinta de k símbolos, tal que: M se detenga al iniciarse con cinta en blanco. Tarde lo más posible en detenerse.
163
Funciones no computables
Nótese que la cantidad de máquinas posibles, para k y n dados, es finita. Siempre existe una máquina que gana el juego. Podemos definir BB(n,k) como la cantidad de pasos que demora esa máquina en detenerse. Teorema: BB(n,k) es una función no computable. Demostración: ejercicio! Hint: reducir el problema de detención con cinta en blanco.
164
Funciones no computables
Start 01 ... qstop BB(1,2) = 1 el caso que más se ha estudiado es k=2, ={0,1}
165
Funciones no computables
01,R Start H A 11,R B 01,L 11,L BB(2,2) = ? Esta máquina tarda 6 pasos en detenerse; por lo tanto, BB(2,2) 6. De hecho, está demostrado que BB(2,2)=6 (esta máquina alcanza el máximo).
166
Funciones no computables
Es una función que crece más rápido que cualquier función computable. Encontrar MT que batan records de BB es una labor necesariamente creativa (pues sabemos que no existe algoritmo para construirlas!). BB(1,2) = 1 BB(2,2) = 6 BB(3,2) = 21 BB(4,2) = 107 BB(5,2) = desconocido Mejor hasta la fecha: (Marxen & Buntrock, 1989) BB(6,2) = desconocido Mejor hasta la fecha: > (Pavel & Kropitz, 2010)
167
Motivos para la tesis de Church-Turing
Un punto que dejamos pendiente: ¿será razonable hacer la ecuación “algoritmo=MT” ? Hay varios argumentos para hacerlo. En primer lugar, la intuición que se gana luego de “programar” varias MT es que se puede hacer “cualquier cosa” con ellas. Además, el poder de cómputo de las MT de Turing vuelve y vuelve a aparecer, aunque tratemos de irnos por otros lados.
168
MT y PDAs “aumentados” Por ejemplo: puede parecer un poco brusco el salto desde los LLC y los PDA, a las máquinas de Turing. Sin embargo: Definamos los "autómatas de cola", como autómatas finitos a los que en lugar de agregarles una pila, les agregamos una cola. Definamos los "2PDA", autómatas finitos a los que en lugar de agregarles una pila, les agregamos 2 pilas. Ejr.: cada una de esas clases es equivalente a las MT.
169
Gramáticas generales Dijimos que una gramática, en su forma más general, admitía producciones de la forma abbacXaYb bbabXX Xa baa | Y A diferencia de la GLC, en el caso general no hay restricción sobre el lado izquierdo de las producciones. Al derivar una palabra, se usan las reglas para ir reemplazando lo que está a la izquierda por lo que esté a la derecha.
170
Gramáticas generales Ejemplo: una gramática para un lenguaje que no es de libre contexto. S XYZS | XY YX YZ ZY XZ ZX X a Y b Z c Teorema [no veremos la demo.]: un lenguaje es recursivo enumerable ssi existe una gramática que lo genera.
171
Otros modelos de cómputo
Por distintos lados (gramáticas, autómatas con cola, autómatas con dos pilas, MT) se llega a la misma clase de lenguajes (el mismo poder de cómputo). Al agregar más cosas (más cintas, más pilas, no determinismo, etc etc), los lenguajes decidibles, los lenguajes aceptables, las funciones computables, siguen siendo los mismos. No es difícil ver cómo se puede simular un computador con una MT. Incrédulos, leer (o algún otro texto mostrando como simular random access machines en MT).
172
Otros modelos de cómputo
Todos los otros modelos de computo que se han inventado, a lo largo del último siglo, han resultado ser equivalentes (o inferiores) al poder de cómputo de las máquinas de Turing. ¿Cómo tendría que ser un modelo de cómputo para sobrepasar a las MT? Para empezar, no podríamos simularlo en un computador, ni en ninguna máquina digital (si se pudiera, lo podríamos simular en una MT de Turing).
173
Tesis de Church -Turing
La tesis de Church-Turing (por Alonzo Church y Alan Turing) consiste en la afirmación de que las MT reflejan correctamente la noción intuitiva de algoritmo. Ojo: ¡¡¡no es un teorema!!! (No podría serlo, pues la noción de "algoritmo" no tiene otra definición). Es una "suposición", validad por 75 años. En informática cuando se dice "existe un algoritmo..." estamos diciendo "existe una máquina de Turing..."
174
Hardware y software Un programa P, (o un algoritmo, o una MT), pueden ser vistos como la descripción de una máquina. Si construimos físicamente la máquina, entonces lo estamos convirtiendo en hardware. Si usamos una máquina para simular el funcionamiento de P, lo estamos usando como software.
175
Hardware y software Si el programa P es capaz de recibir la descripción de cualquier algoritmo, y ejecutarlo, entonces corresponde a una máquina de Turing universal. Si lo convertimos en hardware, el resultado es un computador. Si usamos una máquina para simular su funcionamiento, lo estamos usando como una máquina virtual. Pero ojo, para que sea posible ejecutarlo, la máquina que lo simula será a la vez una MTU! Un computador es la implementación física de una máquina de Turing universal.
176
MT y lenguajes de programación
En principio, la forma de demostrar que algo tiene el poder de las MT es demostrar que cualquier MT puede ser simulada. Sin embargo, basta probar que se puede simular una MT universal (de ese modo, indirectamente, se pueden simular todas). Un lenguaje de programación capaz de simular una MT universal se dice Turing-completo. Todo lenguaje de programación decente lo es!!!
177
MT y lenguajes de programación
Por lo tanto, si X es un lenguaje de programación Turing-completo, al decir "existe un algoritmo" podríamos decir "existe un programa en X". Turing-completos: C, C++, Java, Lisp, Python, Visual Basic.... Menos obvios: LaTeX, Postscript, el preprocesador de C++... Se desprende que todos los lenguajes de programación son equivalentes (pero puede haber diferencias en eficiencia, legibilidad, etc, etc.)
178
MT y lenguajes de programación
Es bueno que un lenguaje sea Turing-completo: si no lo fuera, habrá cosas que no podremos hacer. Lo malo : Los lenguajes Turing-completos heredan la indecidibilidad. Si pudieramos resolver el problema del alto en C (i.e., tener un algoritmo que reciba un programa en C y conteste acaso ese programa se detiene), entonces lo podríamos usar para resolver el problema del alto de las MT contradicción.
179
MT y lenguajes de programación
Y no sólo el problema del alto: un montón de problemas más (el teorema de Rice ya provee muchos): Dado un programa P y una palabra w, ¿alguna vez P escribe w en stdout? Dado un documento en PostScript, ¿termina alguna vez de imprimir? Dado un programa P y un valor M, ¿P ocupa más de M megabytes? Dado un programa P, ¿borrará mi disco duro?
180
MT y lenguajes de programación
No existe algoritmo general para esos problemas. La idea común es: los programas no pueden analizar programas. La razón de fondo: las contradicciones de la auto-referencia. Para algunas tareas puntuales es preferible usar lenguajes que no padezcan de estos problemas, y en que podamos saber de antemano qué usan, qué hacen, etc. Pero el precio a pagar es alto: lo que se puede programar es muy poco!
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.