Estoy leyendo Sipser y me resulta difícil entender cuál es el proceso, de modo que si me das k máquinas Turing con k cintas, puedo escupir una máquina Turing equivalente con una sola cinta. Un ejemplo sería bueno. En realidad, lo que realmente estoy buscando es un ejemplo resuelto que muestre cómo pasar de TM que tiene cintas a una que tiene 1 cinta. No he podido encontrar uno hasta ahora. Tampoco estoy buscando ninguna prueba.
turing-machines
simulation
usuario678392
fuente
fuente
Respuestas:
Una respuesta descaradamente copiada de mí mismo :
Una máquina de Turing de varias cintas es casi igual a una máquina de una sola cinta, excepto que tenemos una función de transición extendida donde es el número de cintas. Entonces, en cada estado, la función de transición lee el contenido de cada cinta, se mueve a un nuevo estado, (tal vez) escribe algo en cada cinta y mueve cada cabeza, como un TM normal, excepto que ahora tenemos más cosas para leer, escribir y muévete. kQ×Γk→Q×Γk×{L,R}k k
Como su pregunta sugiere, una máquina de este tipo puede simular una máquina de una sola cinta . Aún mejor, se puede hacer con solo una desaceleración cuadrática (por lo tanto, para clases polinomialmente cerradas, es suficiente hablar de máquinas de una sola cinta).
La prueba de esto es algo complicada y está fácilmente disponible con una simple búsqueda en la web, por lo que esbozaré el mapeo clave de las cintas en una sola cinta.k
La idea básica es bastante sencilla; simplemente agregamos algunos símbolos nuevos y hacemos un seguimiento de cada cinta y encabezado uno tras otro. En cada paso de la computación solo podemos haber visitado una cantidad finita de cualquiera de las cintas, por lo que solo necesitamos almacenar tanta información sobre cada cinta. Por lo tanto, para cada agregamos un nuevo símbolo a que indicará dónde está la cabeza (para cada cinta) en cualquier punto del cálculo. También presentamos un carácter separador a que indicará el inicio y el final de las cintas "virtuales". Entrada dadaγ _ Γ # Γ ω = ω 1 ... ω n # ω 1 _ ... ω n # ⊔ _ # ⊔ _ # ... # ⊔ _ # ⏟ k secciones, una por cinta ⊔ ⊔ ⊔ ⊔ ⊔ ⊔ ...γ∈Γ γ–– Γ # Γ ω=ω1…ωn (podemos suponer que incluso en la máquina de cintas múltiples, toda la entrada está en la primera cinta, lo que demuestra por qué es un buen ejercicio) en la máquina de cintas múltiples, nuestra máquina de cinta única tendrá entrada
Luego usamos el estado de la máquina de cinta única para codificar en qué estado se encuentra la máquina de cinta múltiple y lo que están mirando los cabezales. La función de transición de la máquina de una sola cinta es una simulación de múltiples etapas de la función de transición multi-cinta, donde realizamos las diferentes acciones de cinta apropiadamente, ascender en la sola cinta a cada sección a su vez. Las únicas arrugas que quedan son cambiar todo cuando nos quedamos sin espacio en una sección (pero esa máquina secundaria es un ejercicio simple): nunca reducimos el tamaño de cada sección.k
Un ejemplo (con suerte) simple:
Digamos que tenemos un TM de 3 cintas, donde el alfabeto de entrada es solo , el alfabeto de cinta es y la entrada es . El estado inicial de la cinta de la máquina se ve así: El " " es para indicar dónde está el cabezal de lectura / escritura en cada cinta.Σ={0,1} Γ={0,1,⊔} ω=10101
Para construir la máquina combinada de una sola cinta, necesitamos agregar nuevos símbolos al alfabeto de la cinta:
Entonces, para la máquina de una sola cinta, nuestro nuevo alfabeto de cinta es . El estado inicial de la cinta es: Observe la diferencia entre el cabezal de la máquina (la ) y los cabezales simulados de las 3 cintas simuladas (los caracteres subrayados). Por supuesto, la cinta se extiende infinitamente a la derecha como de costumbre. También he engañado ligeramente moviendo la cabeza de la cinta al primer carácter en la primera cadena; estrictamente debería comenzar en la celda más a la izquierda, pero este es un tecnicismo trivial.Γ′={0,1,⊔,0–,1–,⊔––,#}
Entonces tenemos tres secciones marcadas (entre las marcas ), que corresponderán a las 3 cintas de la máquina original.#
Ahora inventemos una acción para la máquina. Digamos que la máquina original lee desde la primera cinta, si ve un , escribe un en la segunda cinta, si ve un escribe un en la tercera cinta. En cada lectura o escritura, la cabeza se mueve hacia la derecha.1 1 0 1
Entonces, después del primer "paso" (quizás requiriendo varios estados y transiciones en la máquina real), las cintas deben tener un en la segunda cinta, y el primer y el segundo cabezal se habrán movido a la derecha un paso:1
En la segunda vuelta, la primera cinta lee un , por lo que escribimos en la tercera cinta:0
La máquina de cinta simple simula esto moviendo el subrayado (usando la versión alternativa de los caracteres en y escribiendo en la cinta simulada apropiada. Entonces, después del primer paso, la cinta combinada se ve así:Γ′
Después del segundo paso:
Por supuesto, esta es una vista de alto nivel del proceso: no he intentado explicar cómo construir los estados o cómo se alarga cada cinta simulada (para esto, necesita una pequeña rutina que verifique si se ha encontrado con el final de la cinta simulada, luego mueve todo a la derecha un paso y lo presiona en un nuevo espacio en blanco, es decir, solo agrega celdas de cinta simuladas cuando son necesarias).
fuente