Está en la página 1de 13

Computabilidad y Complejidad de Algoritmos

MÓDULO 1: MÁQUINA DE TURING

1.1 Definición:
La máquina de Turing es un modelo computacional introducido por Alan Turing en el trabajo
“On computable numbers, with an application to the Entscheidungs problem”, publicado por la
Sociedad Matemática de Londres, en el cual se estudiaba la cuestión planteada por David Hilbert
sobre si las matemáticas son decidibles, es decir, si hay un método definido que pueda aplicarse a
cualquier sentencia matemática y que nos diga si esa sentencia es cierta o no. Turing construyó un
modelo formal de computador, la máquina de Turing, y demostró que existían problemas que una
máquina no podía resolver. La máquina de Turing es un modelo matemático abstracto que formaliza
el concepto de algoritmo.
La maquina de Turing utiliza una cinta infinita como su memoria. Tiene una cabeza de la cinta
con la cual puede leer y escribir símbolos y moverse sobre la cinta. Inicialmente la cinta contiene sólo
la cadena de entrada y está en blanco en cualquier otro lugar. Si la máquina necesita almacenar
información lo puede hacer en la cinta. Para leer la información que se ha escrito, la máquina puede
mover su cabeza y colocarse sobre la información. La máquina continúa computando hasta que
decide producir una salida. La cadena de entrada es aceptada o rechazada al entrar a los estados de
aceptación o rechazo, respectivamente. Si no entra a un estado de aceptación o rechazo, la máquina
seguirá por siempre, nunca se detendrá.

Figura 1.1. Esquema de una máquina de Turing

La siguiente lista resume las diferencias entre una autómata finito y una máquina de Turing:
 Una máquina de Turing puede escribir a una cinta y leer de ella
 La cabeza de la cinta puede moverse a la izquierda y a la derecha
 La cinta es infinita
 Los estados especiales para aceptar y rechazar tienen efecto inmediato

Definición formal:
De manera formal, una máquina de Turing (TM de sus siglas en inglés Turing Machine) se
representa por: M=(Q, , , , q0, B, F) en donde:
Q es un conjunto finito de estados.
 es el conjunto finito de símbolos de cinta admisibles.
B símbolo de , es el espacio en blanco.
 subconjunto de  que no incluye a B, es el conjunto de los símbolos de entrada.
 es la función de movimientos siguiente, una transformación de Q x  a Q x  x {L, R} ( 
puede sin embargo, permanecer indefinida por algunos argumentos).
q0 en Q es el estado inicial.
F  Q es el conjunto de estados finales.
Computabilidad y Complejidad de Algoritmos

En esta definición se supone que el valor inicial de todas las celdas de la cinta es el símbolo
B. La definición requiere que B  . Generalmente permitimos que   - {B}. La función de
transición  transforma pares (q, ) formados por el estado actual y los símbolos de la cinta en ternas
de la forma (p, t, x), donde p es el estado siguiente, t es el símbolo escrito en la cinta y x es un
movimiento de lectura/escritura de la cabeza, que puede ser L o R, según que el movimiento sea
hacia la izquierda o hacia la derecha (nos imaginamos que la cinta se extiende de izquierda a
derecha).
Por ejemplo, la transición (q1, a)=(q5, b, R) provoca que la TM pase de una configuración
figura 5.2. A la configuración de la figura 5.3.
a b b a b b

Cabeza de
Cabeza de lectura/escritura
lectura/escritura

Figura. 5.2 Estado interno q1. Figura. 5.3 Estado interno q1.

Usaremos una descripción instantánea (ID) de la máquina de Turing, para su notación


denotando el paso de una configuración a otra por medio del símbolo .
Ejemplo: consideremos la máquina de Turing que acepta el lenguaje regular a*, definida
mediante

Q ={q1, q2}
 ={a, b}
 ={a, b, B}
F ={q2}
q0 =q1
y  dada por la siguiente tabla::
los datos de  también se pueden listar de la siguiente manera:

Estados a b B
q1 (q1, a, R) -- (q2,B, R)
q2 -- -- --
Q3

1. (q1, a) = (q1, a, R)
2. (q1, B) = (q2, B,R)

Por lo tanto, la ejecución de la máquina de Turing para la cadena “aaa”


es la siguiente configuración:

q1aaa por la regla 1 aq1aa, por la regla 1 aaq1a, por la regla 1


aaaq1B, por regla 2 aaaBq2
Computabilidad y Complejidad de Algoritmos

Esta máquina de Turing para en el estado q2, sólo si se analiza una cadena de cero o más a’s.

Las notaciones * y +
tienen el significado usual “cero o más” o “una o más”,
respectivamente.
Cuando (q, a) está indefinido y la configuración de la máquina de Turing es imposible que
pase a otra se dice que la máquina de Turing está parada. La secuencia de todos los movimientos
que conducen a una configuración de parada se llama computación. Para los casos donde la
máquina de Turing nunca parará se dice, que la máquina se encuentra en un bucle infinito.

Existen en la literatura un abundante número de definiciones alternativas, pero todas ellas


tienen el mismo poder computacional, por ejemplo se puede añadir el símbolo como símbolo de
"no movimiento" en un paso de cómputo o el símbolo Σ para indicar el alfabeto de entrada.
Computabilidad y Complejidad de Algoritmos

1.2 Lenguajes recursivamente enumerables (r.e)


Aunque existen varias definiciones equivalentes, ésta es una de las principales:
1. Un lenguaje recursivamente enumerables es un lenguaje formal para el cual existe una
máquina de Turing que acepta y se detiene con cualquier cadena del lenguaje. Pero que
puede parar y rechazar, o bien iterar indefinidamente, con una cadena que no pertenece al
lenguaje, en contraposición a los lenguajes recursivos en cuyo caso se requiere que la
máquina de Turing pare en todos los casos.

Todos los lenguajes regulares, independientes de contexto, dependientes de contexto y recursivos


son recursivamente enumerables.

Sea M = (Q, , , s, Б, F, ) una máquina de Turing. Entonces el lenguaje aceptado por M es

L(M) = {w  *
| q1w * w1pw2 para p  F y wi  *
}

Los lenguajes aceptados por las máquinas de Turing se conocen como lenguajes recursivamente
enumerables.

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:
(q1, a) = (q1, a, R)
(q1, b) = (q2, a, R)
(q2, a) = (q2, a, R)
(q2, Б) = (q3, Б, L)
(q3, a) = (q4, b, L)
(q4, a) = (q4, a, L)
(q4, Б) = (q5, Б, R)

a/a a/a a/a

q b/a q Б/Б q a/b q Б/Б q

La siguiente máquina de Turing reconoce el lenguaje anbn.

(q1, a) = (q2, c, R)
(q2, a) = (q2, a, R)
(q2, d) = (q2, d, R)
(q3, b) = (q3, d, L)

(q3, d) = (q3, d, L)
(q3, a) = (q3, a, L)
(q3, c) = (q1, c, R)

(q1, d) = (q4, d, R)
(q4, d) = (q4, d, R)
(q4, Б) = (q5, Б, L)
Computabilidad y Complejidad de Algoritmos

c/c
a/a a/a

a/c b/d
q q q

d/d
d/d d/d
Б/Б
q q

d/d

Construcción de máquinas de Turing

Lenguajes aceptados por Máquinas de Turing

Definición. Una lenguaje L sobre un alfabeto se dice que es recursivamente enumerable si es


aceptado por alguna máquina de Turing. Es decir, L es recursivamente enumerable si para alguna
máquina de Turing M tenemos que

L(M) = {w  *
| qw * upv para p  F y u, v  }
*

(donde q es el estado inicial de M y F es el conjunto de estados finales de M).


Un lenguaje L es recursivo si L es recursivamente enumerable y hay alguna máquina de Turing que
para sobre todas las entradas que acepta L.

Lenguajes regulares, independientes del contexto, recursivos y recursivamente


enumerables

Sea M = (Q, , s, F, ) un autómata finito determinista. Se puede construir una máquina de Turing
M’ = (Q’, ', , s’, Б, F’, ’) para la cual L(M) = L(M’) por medio de:

Q’ = Q  {q’}, donde q’ es un nuevo estado que no esta en Q.


'=
=  {Б}
F’ = {q’}
’(q, ) = ( (q, ), , R), para q  Q y  ‘
Б) Б, 
’(q, = (q’, S), para todo q F, donde S es la directiva de cinta “no
moverse”

Teorema. Si L es un lenguaje regular, entonces L es también un lenguaje recursivo.


Computabilidad y Complejidad de Algoritmos

Sea M un autómata de pila no determinista. Podemos construir una máquina de Turing que emule el
comportamiento de M. Supongamos un MT con dos cintas, la primera contendrá la cadena de
entrada y la segunda se utilizará para almacenar la pila. Un apilamiento se emula moviendo la
cabeza de la segunda cinta a la derecha y escribiendo el símbolo que se apilará.
Consideremos el siguiente ADPND dado por

Q = {q1, q2, q3}, s = q1,


= {a, b}, F = {q3},
= {a, b, z},
(q1, , z) = {(q3, )}, (q1, a, z) = {(q1, az)},
(q1, a, a) = {(q1, aa)}, (q1, b, a) = {(q2, )},
(q2, b, a) = {(q2, )}, (q2, , z) = {(q3, )},

Este ADPND reconoce anbn. La máquina de Turing empezará en el estado q’. Primero se marca el
fondo de la pila en la cinta 2. Por tanto, tendremos las transiciones

(q’, (a, Б)) = (q1, (a, z), (S, S))


(q’, (Б, Б)) = (q1, (Б, z), (S, S))

para realizar un apilamiento y consumir un símbolo se tendrán las transiciones

(q1, (a, z)) = (p1, (a, z), (S, R))


(q1, (a, a)) = (p1, (a, a), (S, R))
(p1, (a, Б)) = (q1, (a, a), (R, S))

las cuales apilan aes sobre la pila. Para desapilar tendremos

(q1, (b, a)) = (q2, (b, a), (R, L))


(q2, (b, a)) = (q2, (b, a), (R, L))

Finalmente, la cadena se acepta cuando ha sido totalmente consumida y se ha vaciado la pila. La


transición del ADPND (q1, , z) = {(q3, )} corresponde al movimiento

(q2, (Б, z)) = (q3, (Б, z), (S, L))

de la máquina de Turing.

Teorema. Si L es un lenguaje independiente del contexto, entonces L es también un lenguaje


recursivo.

Teorema. Si L1 y L2 son lenguajes recursivos, entonces L1  L2 también lo es.

Lema 5.3.1. Si L es un lenguaje recursivo, entonces * L es un lenguaje recursivo.

Teorema 5.3.2. Hay un lenguaje recursivamente enumerable L para el cual * L no es


recursivamente enumerable.

Teorema 5.3.3. Si L1 y L2 son lenguajes recursivamente enumerables, entonces L1  L2 es también


recursivamente enumerable.
Computabilidad y Complejidad de Algoritmos

Teorema 5.3.4. Si L es un lenguaje recursivamente enumerable para el cual * L también es


recursivamente enumerable, entonces L es un lenguaje recursivo.

Teorema 5.3.5. Un lenguaje L es recursivamente enumerable si y solo si L es enumerado por alguna


máquina de Turing.

Definición 5.4.1. Una gramática no restringida (que también se conoce como una gramática
estructurada por frase) es una 4-tupla G = (N, , S, P), donde

N es un alfabeto de símbolos no terminales


es un alfabeto de símbolos terminales con N   = 
S  N es el símbolo inicial
P es un conjunto finito de producciones de la forma   , donde  
(N  )+ y   (N  )* (es decir, P  (N  )+  (N  )* y es un conjunto
finito ).

Teorema 5.4.2. Si G es una gramatica no restringida, entonces L(G) es un lenguaje recursivamente


enumerable.

Teorema 5.4.3. Si L = L(M) es un lenguaje recursivamente enumerable y G se construye de la forma


descrita, entonces L = L(G).

Teorema 5.4.4. Un lenguaje L es recursivamente enumerable si y solo si L = L(G) para alguna


gramática G, no restringida.

Definición 5.5.1. Una gramática G = (N, , S, P) es una gramática sensible al contexto si todas las
producciones son de la forma   , donde ,  (N  )+ y |  |  |  |.

Lema 5.5.2. El conjunto de los lenguajes sensibles al contexto contiene al conjunto de los lenguajes
independientes del contexto.

Lema 5.5.3. Sea G = (N, , S, P) una gramática sensible al contexto. Entonces, existe una gramática
G1 = (N1, , S1, P1) sensible al contexto, para la cual L(G) = L(G1) y S1 nunca aparece en el lado
derecho de una producción de P1.

Lema 5.5.4. Sea G = (N, , S, P) una gramática sensible al contexto. Entonces, existe una una
máquina de Turing T, que para sobre toda entrada y acepta L(G).

Teorema 5.5.5. Si L es un lenguaje sensible al contexto, entonces L es recursivo.

Lema 5.5.6. Hay lenguajes recursivos que no son lenguajes sensibles al contexto.

Teorema 5.5.7. Los lenguajes sensibles al contexto contienen, propiamente, a los lenguajes
independientes del contexto. A su vez, los lenguajes recursivos contienen, propiamente, a los
lenguajes sensibles al contexto.

Teorema 5.5.8. Sobre un alfabeto dado, el conjunto de los lenguajes recursivamente enumerable
contienen propiamente a los lenguajes recursivos que contienen propiamente al conjunto de los
Computabilidad y Complejidad de Algoritmos

lenguajes sensibles al contexto que contienen propiamente al conjunto de los lenguajes


independientes del contexto. Que a su vez, contienen propiamente los lenguajes regulares.

Lregular  Li.c.  Ls.c.  Lrecursivo  Lr.e

1.3 Técnicas de construcción de máquinas de Turing


Mediante esta técnica se puedan desarrollarse maquinas de Turing complejas a partir de bloques de
elementales a partir de maquinas mas pequeñas mediaste diagramas de transiciones.
La construcción de maquinas de Turing se lleva a cabo mediante los diagramas de transición y
combinarlos de manera parecida a lo que se realiza en la formación de la unión y concatenación de
los autómatas finitos.

Pasos para la construcción de una máquina de Turing


a) Elimine las características de inicio de los estados iniciales de las maquinas, excepto la de
aquel donde iniciara la maquina compuesta.
b) Elimine las características de detención de los estados de parada de todas la maquinas e
introduzca un nuevo estado de parada que nos se encuentre en ninguno de los diagramas
que se combinan.
c) Para cada uno de los antiguos estados de parada p y cada x en y.

Una máquina de Turing es un autómata que se mueve sobre una secuencia lineal de datos. En cada
instante la máquina puede leer un solo dato de la secuencia (generalmente un carácter) y realiza
ciertas acciones en base a una tabla que tiene en cuenta su "estado" actual (interno) y el último dato
leído.
Entre las acciones está la posibilidad de escribir nuevos datos en la secuencia; recorrer la secuencia
en ambos sentidos y cambiar de "estado" dentro de un conjunto finito de estados posibles.
Computabilidad y Complejidad de Algoritmos

1.4 Tipos de máquinas de Turing (varias cintas, acceso aleatorio, no


determinista).
Existen muchas alternativas de la máquina de Turing, incluyendo cintas múltiples o
indeterminismo. Estas son llamadas variantes del modelo de la máquina de Turing. Tanto el modelo
original como sus variantes tienen el mismo poder, es decir, reconocen la misma clase de lenguajes.

Para ilustrar la robustez del modelo de la máquina de Turing, hagamos una variación de la
función de transición permitida. En la definición original, la función de transición fuerza a la cabeza
de la cinta a moverse a la izquierda o a la derecha después de cada paso, la cabeza de la cinta no
puede permanecer sin movimiento. Supongamos que le damos a la máquina de Turing la habilidad
para que la cabeza de la cinta permanezca sin movimiento. La función de transición tendría la forma
δ: Q x Γ → Q x Γ x { L, R, S }. ¿ Permitirá esta nueva característica aceptar reconocer lenguajes
adicionales, dando más poder al modelo ? Por supuesto que no, ya que es posible convertir este
nuevo tipo de MT en una MT original.

Este pequeño ejemplo contiene la clave para mostrar la equivalencia de las variantes de la
máquina de Turing. Para mostrar que dos modelos son equivalentes simplemente hay que mostrar
que podemos simular un modelo en el otro.

4.2.1. Máquina de Turing multicinta

Una máquina de Turing multicinta es como una máquina ordinaria con muchas cintas. Cada
cinta tiene su propia cabeza de la cinta. Inicialmente la cadena de netrada se encuentra en la cinta 1
y las otras cintas están en blanco. La función de transción se modifica para permitir la lectura,
escritura y movimiento de todas las cintas simultáneamente. Formalmente, se define como
δ: Q x Γk → Q x Γk x { L, R }k,

donde k es el número de cintas. La expresión


δ(qi, a1, …, ak) = (qj, b1, …, bk, L, R, …, L)

significa que, si la máquina se encuentra en el estado qi y las cabezas 1 a la k están leyendo los
símbolos a1 hasta ak, la máquina va al estado qj, escribe los símbolos b1 hasta bk y mueve cada
cabeza a la izquierda o derecha según se especifica.

Pareciera que las máquinas de Turing multicinta son más poderosas que las máquinas de
Turing ordinarias, pero podemos mostrar que son equivalentes. Recordemos que dos máquinas son
equivalentes si reconocen el mismo lenguaje.
Computabilidad y Complejidad de Algoritmos

Teorema de equivalencia entre máquinas de Turing ordinarias y máquinas de Turing multicinta

Cada máquina de Turing multicinta tiene una máquina de Turing ordinaria equivalente.

DEMOSTRACIÓN

Mostramos como convertir una MT multicinta M a una MT S con una sóla cinta. La idea
principal es mostrar como simular M con S.

Digamos que M tiene k cintas. Entonces S simula el efecto de k cintas almacenando la


información de las cintas en su cinta sencilla. S utiliza el símbolo # para delimitar el contenido de
las cintas. Además del contenido de cada cinta, S debe almacenar la posición de las cabezas.
Esto se hace marcando el símbolo donde está colocada la cabeza en cada cinta. En la figura 4.6 se
ilustra como puede usarse una cinta para representar tres cintas.

Figura 4.6. Representando tres cintas con una sóla

S = “Sobre la cadena de entrada w = w1 … wn


1) Primero S coloca su cinta en el formato que representa las k cintas de M. La cinta con
el formato contiene

a. # w1 w2 … wn # Џ # Џ # … #

2) Para simular un movimiento, S barre su cinta desde el primero hasta el último símbolo #
para determinar los símbolos bajo las cabezas virtuales. Después S
hace un segundo barrido para actualizar las cintas de acuerdo a como
dicta la función de transición de M.

3) Si en algún punto S mueve una de las cabezas virtuales a la derecha sobre un símbolo
#, esta acción significa que M ha movido la cabeza correspondiente sobre la porción de
cinta aún no leída (con símbolos blancos). De tal forma que S escribe un símbolo
blanco en su cinta y recorre una posición todos los símbolos desde ahí hasta el símbolo
# más a la derecha. Después continua la simulación como antes.”
Computabilidad y Complejidad de Algoritmos

Corolario

Un lenguaje es reconocido por Turing si y sólo si alguna máquina de Turing multicinta lo


reconoce.

DEMOSTRACIÓN

Un lenguaje reconocido por Turing es reconocido por una máquina de Turing ordinaria, la cual
es un caso especial de una máquina de Turing multicinta. Esto prueba una dirección del
corolario. La otra dirección se probó en el teorema anterior.

4.2.2. Máquina de Turing indeterminista

Una máquina de Turing indeterminista se define de la forma esperada. En cada punto en una
computación la máquina puede proceder de acuerdo a varias posibilidades. La función de transición
para una máquina de Turing indeterminista tiene la forma
δ: Q x Γ → P(Q x Γ x { L, R })

La computación de una máquina de Turing indeterminista es un árbol cuyas ramas


corresponden a las diferentes posibilidades para la máquina. A continuación mostraremos que el
indeterminismo no afecta el poder del modelo de la máquina de Turing.

Teorema de equivalencia entre máquinas de Turing ordinarias y máquinas de Turing indeterministas

Cada máquina de Turing indeterminista tiene una máquina de Turing ordinaria (determinista)
equivalente.
IDEA DE LA DEMOSTRACIÓN

Mostraremos que podemos simular cualquier MT indeterminista N con una MT


determinista D. La idea detrás de la demostración es hacer que D intente todas las
posibilidades de la computación de N. Si D encuentra el estado de aceptación en
alguna de estas ramas, D acepta. De otra manera la simulación de D no terminará.

DEMOSTRACIÓN

La MT D tiene tres cintas (Utilizando el teorema anterior). D utiliza sus cintas de


manera particular, como se ilustra en la figura 4.7.. La cinta 1 siempre contiene la
cadena de entrada y nunca se altera. La cinta 2 Mantiene una copia de la cinta de N en
alguna rama de su computación. La cinta 3 sigue la pista de la posición de D en el árbol
de computación de N.
Computabilidad y Complejidad de Algoritmos

Figura 4.7. MT determinista D simulando la MT indeterminista N

1. Inicialmente la cinta 1 contiene la entrada w y las cintas 2 y 3 están vacías.


2. Copiar la cinta 1 a la cinta 2.
3. Usar la cinta 2 para simular N con la entrada w en una rama de su computación.
Antes de cada paso de N consultar el siguiente símbolo en la cinta 3 para elegir cual
opción tomar entre las permitidas por la función de transición. Si ya no hay más
símbolos en la cinta 3 o si está elección es inválida, terminar con esta rama e ir al
paso 4. También ir al paso 4 si se encuentra una configuración de rechazo. Si se
encuentra una configuración de aceptación, aceptar la entrada.
4. Reemplazar la cadena de la cinta 3 con la siguiente cadena. Simular la siguiente
rama de la computación de N a través del paso 2.

………………………………………………………………………………………………………………………
………………………

Corolario

Un lenguaje es reconocido por Turing si y sólo si alguna máquina de Turing indeterminista lo


reconoce.

DEMOSTRACIÓN

Cualquier MT determinista es automáticamente una MT indeterminista y de ahí se prueba una


dirección del teorema.

………………………………………………………………………………………………………………………
………………………

Corolario

Un lenguaje es decidible si y sólo si alguna máquina de Turing indeterminista lo decide.

4.2.3. Enumeradores

Un enumerador es una máquina de Turing con una impresora, la cual puede utilizarse como
un dispositivo de salida para imprimir cadenas. La siguiente figura muestra un esquema de este
modelo.
Computabilidad y Complejidad de Algoritmos

Figura 4.8. Esquema de un enumerador

Un enumerador empieza con una cinta de entrada en blanco. Si el enumerador no se detiene,


puede imprimir una lista infinita de cadenas. El lenguaje enumerado por E es la colección de todas
las cadenas que eventualmente imprime.

Teorema sobre enumeradores

Un lenguaje es reconocido por Turing si y sólo si algún enumerador lo enumera.

DEMOSTRACIÓN

Primero mostraremos que si tenemos un enumerador E que enumera un lenguaje A, una MT


M reconoce A. La MT M trabaja de la siguiente manera:

M = “Sobre la cadena de entrada w:


1. Ejecutar E. Cada vez que E imprima una cadena, compararla con w.
2. Si w aparece en la salida de E, aceptar.

Claramente, M acepta aquellas cadenas que aparecen en la lista de E.


Ahora demostraremos en la otra dirección. Si la MT M reconoce un lenguaje A, podemos
construir el siguiente enumerador E para A. Digamos que s1, s2, s3, … es una lista de todas las
posibles cadenas en Σ*.

M = “Ignorar la entrada w:
1. Repetir lo siguiente para i = 1, 2, 3, …
2. Ejecutar M para i pasos sobre cada entrada s1, s2, … si
3. Si cualquier computación acepta, imprimir la sk correspondiente

Si M acepta una cadena particular s, eventualmente aparecerá en la lista generada por E.

También podría gustarte