Capı́tulo 12 Máquinas de Turing 12.1. Definición y descripción Definición 1 Se llama máquina de Turing a toda séptupla M = (Γ, Σ, •, Q, q0 , f, F ), donde: Γ es el alfabeto de sı́mbolos de la cinta. Σ ⊆ Γ es el alfabeto de sı́mbolos de entrada. • ∈ Γ es el sı́mbolo blanco que no pertenece a Σ. Q es un conjunto finito de estados. q0 ∈ Q es el estado inicial. F ⊆ Q es el conjunto de estados finales. f es la función de transición, f : Q × Γ −→ Q × Γ × {L, R}. Intuitivamente, podemos imaginar una máquina de Turing como un dispositivo capaz de adoptar un estado determinado, y que está conectado a una cabeza de lectura–escritura que puede leer y escribir sı́mbolos en una cinta infinita. En cada movimiento o paso de computación: 1. La máquina lee el sı́mbolo de la cinta en la posición en la que se encuentra la cabeza de lectura–escritura. 2. En función del sı́mbolo leı́do y del estado actual, y siguiendo las reglas de la función de transición, la máquina realiza las tres acciones siguientes: a) Pasa a un nuevo estado. b) Imprime un sı́mbolo en la cinta en la misma posición donde acaba de leer el sı́mbolo actual. c) Mueve la cabeza de lectura–escritura una posición a la izquierda (L), o a la derecha (R). 1 2 CAPÍTULO 12. MÁQUINAS DE TURING Inicialmente, la cinta (infinita a ambos lados) contiene un número finito de sı́mbolos de Σ (la entrada), precedidos y seguidos por un número infinito de blancos. La cinta se comporta como un dispositivo de entrada–salida. La representación gráfica de una máquina de Turing es similar a la de un autómata: Vendrá dado por un grafo dirigido. Cada nodo corresponde con un estado de la máquina de Turing. El estado inicial se señala con una flecha, y los estado finales con un asterisco (o bien con doble cı́rculo). Cada transición f (qi , a) = (qj , b, X) con qi , qj ∈ Q, a, b ∈ Γ y X ∈ {L, R} corresponde con un arco del nodo qi al nodo qj marcado con la etiqueta (a, b, X). Por ejemplo, supongamos M = ({a, b, •}, {a, b}, •, {q0 , q1 }, q0 , f, {q1 }) una máquina de Turing donde la función de transición viene dada por f (q0 , a) = (q0 , a, R) f (q0 , b) = (q1 , •, L) Su representación gráfica es: q0 (b, •, L) q1∗ (a, a, R) Definición 2 Sea M = (Γ, Σ, •, Q, q0 , f, F ) una máquina de Turing. Llamaremos descripción instantánea a una cadena con el contenido de la cinta (sólo se escriben los blancos cuando sea necesario) y con el estado de la máquina en la posición delante del sı́mbolo donde se encuentra la cabeza de lectura–escritura. Por ejemplo, la descripción instantánea q0 aaaab representa la máquina de Turing en el estado q0 , la cinta de trabajo con el contenido aaaab, y la cabeza situada sobre la primera a. En cambio, aaaabq1 • representa la máquina de Turing en el estado q1 , la cinta de trabajo con el contenido aaaab, y la cabeza situada después de la b. Llamaremos movimiento o paso de computación al proceso en la que una máquina de Turing pasa de una descripción instantánea a otra, siguiendo las reglas dadas por la función de transición. Para expresar un movimiento entre la descrición D1 y la descripción D2 escribimos D1 ⊢ D2 . A partir de la noción de movimiento, podemos definir el cierre transitivo de dicha operación (denotado por ⊢∗ ). A partir de una descripción x1 qi x2 , podemos llegar a dos situaciones: CAPÍTULO 12. MÁQUINAS DE TURING 3 1. La máquina de Turing llega a un bucle infinito (esto es, no se para nunca): x1 qi x2 ⊢∗ ∞. 2. La máquina de Turing llega a una configuración en la que no es posible ningún movimiento: x1 qi x2 ⊢∗ y1 qj ay2 (para algún estado qj y algún sı́mbolo a tal que f (qj , a) no está definido). Si además qj ∈ F , decimos que la máquina para en un estado final (por convención no definimos transiciones para los estados finales). Definición 3 Sea M = (Γ, Σ, •, Q, q0 , f, F ) una máquina de Turing. Definimos el lenguaje reconocido o lenguaje aceptado por M al conjunto siguiente: L(M ) = {x ∈ Σ | q0 x ⊢∗ y1 qi y2 , con qi ∈ F, y1 , y2 ∈ Γ∗ }. Algunas observaciones a esta definición: Inicialmente la cinta contiene una palabra x y la cabeza de lectura–escritura se encuentra en la posición del primer sı́mbolo de x en el estado q0 . Esto es, la descripción instantánea es q0 x. La máquina acepta x si se para en un estado final. El contenido de la cinta al parar es irrelevante. Se rechaza x si la máquina no se para nunca o se para en un estado que no es final. Si la palabra a reconocer es λ, la configuración inicial es q0 •. Ejemplo 1 Diseña una máquina de Turing que reconozca: L = {x ∈ {a, b}+ | nb (x) > 0}. L = {bx | x ∈ {a, b}∗ }. L = {(aab)n | n ≥ 0}. Definición 4 Llamaremos Máquina de Turing no determinista M = (Γ, Σ, •, Q, q0 , f, F ) a toda séptupla donde cada término se define como en una máquina de Turing, y donde f es una aplicación f : Q × Γ −→ 2Q×Γ×{L,R} . Esto es, en una máquina de Turing no determinista pueden existir varias configuraciones a las que transitar a partir de una configuración dada. En particular, las máquinas de Turing “estandard” o “deterministas” son también un tipo de máquinas de Turing no deterministas. Teorema 5 Dada una máquina de Turing no determinista, existe una máquina de Turing determinista aceptando el mismo lenguaje. Por tanto, el no determinismo no aporta mayor poder de computación a las máquinas de Turing, con lo cual nos restringiremos al modelo determinista. 4 CAPÍTULO 12. MÁQUINAS DE TURING 12.2. La Máquina de Turing como máquina de cómputo Definición 6 Sea M = (Γ, Σ, •, Q, q0 , f, F ) una máquina de Turing, y sea f : D ⊆ Σ∗ −→ Σ∗ una aplicación parcial. Diremos que f es la función computada por M si para todo x ∈ D, q0 x ⊢∗ qi f (x), con qi ∈ F . Es decir, para toda palabra x ∈ D en el dominio de f , se tiene que la máquina de Turing se detiene en un estado final, el contenido de la cinta es f (x) y la cabeza lectora–escritora está señalando el comienzo de dicha cadena. Por ejemplo, la siguiente máquina computa la función f : N −→ {a, b}∗ con f (n) = an bn (la codificación de la entrada viene dada por notación unaria): (A, A, R) q0 (1, •, R) (b, b, L) q4 (•, •, R) q1 (1, A, R) (•, •, R) q2 (b, b, R) (1, 1, R) (•, b, L) q3 (b, b, L) (1, 1, L) q5 (A, a, L) Ejemplo 2 Diseña una máquina de Turing para calcular las siguientes funciones: f : N −→ N con f (x) = 2x. f : {a, b}∗ −→ {a, b}∗ con f (w) = ww. La codificación de los números naturales vendrá dado por la codificación unaria (tanto para la entrada como para la salida). 12.2.1. Funciones de varios parámetros Para simular la computación de una función que tenga más de un parámetro, se sigue el convenio de tener como entrada cada uno de los parámetros codificados, separados mediante el sı́mbolo blanco •. Por ejemplo, la siguiente máquina realiza la suma de dos números (representados en 5 CAPÍTULO 12. MÁQUINAS DE TURING notación unaria): q0 (1, 1, R) (•, 1, R) q1 (•, •, L) q2 (1, •, L) q3 (1, •, L) (1, 1, R) q4 (•, •, R) q5 (1, 1, L) Ası́, la configuración inicial para representar la entrada para la suma del dos y el tres es q0 111 • 1111. Ejemplo 3 Diseña una máquina de Turing para calcular la función f : N × N −→ N con f (x, y) = |x − y|. La codificación de los números naturales vendrá dado por la codificación unaria (tanto para la entrada como para la salida). 12.3. Máquinas de Turing y gramáticas Teorema 7 Dada una gramática de tipo cero, existe una máquina de Turing reconociendo el mismo lenguaje. Teorema 8 Dada una máquina de Turing, existe una gramática de tipo cero generando el mismo lenguaje. Con estos dos teoremas, obtenemos que las máquinas de Turing y las gramáticas generales (o de tipo cero) son capaces de reconocer el mismo tipo de lenguajes.