INDICE
DEFINICION
Otra representación que se suele dar en numerosas ocasiones es la de un grafo, en la que los nodos representan los estados y los arcos el símbolo examinado y la acción. Estos grafos se llaman diagramas de transición de estados. EJEMPLO
Las transiciones entre estados están representadas por flechas etiquetadas por el símbolo que causa la transición. El símbolo que queda después del desplazamiento denota al carácter que va a ser impreso o, en caso de L y R, la dirección de movimiento de la cabeza de la cinta. El símbolo # denota el espacio en blanco B. TEOREMA Cualquier función parcial calculable por un programa Post-Turing puede calcularse por una máquina de Turing usando el mismo alfabeto. TEOREMA Sea f una función parcial de m variables parcialmente calculable definida en A para un alfabeto dado A. Entonces existe una máquina de Turing que calcula f estrictamente. DEFINICION A continuación veremos unas máquinas de Turing ligeramente distintas. En vez de tener cuádruplas que definan su funcionamiento, van a tener quíntuplas. Va a haber 2 tipos de quíntuplas: qi sj sk R qi qi sj sk L qi La diferencia está en que estas máquinas de Turing, en cada paso, imprimen un símbolo y, entonces, se mueven hacia la derecha o hacia la izquierda. Es decir, realizan dos acciones, una de imprimir y otra de movimiento. Así, para cada par de estado y símbolo en la cinta, se especifica el símbolo que se imprime, sk , el movimiento (L o R) y el nuevo estado qi . A estas máquinas les llamaremos máquinas de Turing de quíntuplas. Se puede demostrar el siguiente teorema. TEOREMA Cualquier función que sea calculada por una máquina de Turing puede calcularse con una máquina de Turing de quíntuplas y usando el mismo alfabeto TEOREMA Cualquier función parcial que pueda calcularse mediante una máquina de Turing de quíntuplas puede calcularse mediante un programa Post-Turing, usando el mismo alfabeto. COROLARIO Para una función parcial dada, f, las siguientes condiciones son equivalentes:
![]() ![]() DEFINICION Recordemos ahora la función parcialmente calculable F (x,z). Para un z fijo, F (x,z) es la función parcial de una variable calculada por el programa número z. Sea M la máquina de Turing que calcula esta función con el alfabeto {1}. A esta máquina de Turing le llamaremos máquina de Turing universal. EJEMPLO Sea g(x) una función parcialmente calculable de una variable y sea z0 el número de un programa P en el lenguaje Y que calcula g. Entonces, si comenzamos con la configuración B x B z0
donde x y z0 están escritos como series de 1 (en notación unaria), y la máquina M comienza a calcular, M puede usarse para calcular cualquier función parcialmente calculable de una variable.
DEFINICION Dada una máquina de Turing con alfabeto A = {s1,..., sn}, se dice que una palabra u Î A es aceptada por M, s M para cuando comienza con la configuración B u
q1 Es importante caracterizar los distintos lenguajes aceptados por los distintos tipos de máquinas o dispositivos. Este problema es fácil de resolver en las máquinas de Turing. TEOREMA Un lenguaje es aceptado por una máquina de Turing si y sólo si es recursivamente enumerable (r.e.) TEOREMA Un conjunto U de números es r.e. si y sólo si existe una máquina de Turing M con alfabeto {1} que acepta 1(x) si y sólo si x Î U EJEMPLO Vamos a considerar ahora algunas ambigüedades que a veces resultan al hablar de conjuntos de cadena r.e. Por ejemplo, consideremos el lenguaje L0 = { a{n} / n0 } sobre el alfabeto {a,b}
Lo que ocurre aquí no es una excepción. De hecho ocurriría siempre. Esto es una consecuencia del primer teorema de este apartado. El que una cadena sea aceptada por una máquina de Turing es independiente del orden de los símbolos del alfabeto. Por tanto, podemos afirmar que el hecho de que un lenguaje particular sobre un alfabeto determinado sea r.e. es independiente del orden que exista en el alfabeto. Lo mismo ocurre para los lenguajes recursivos. Ya que un lenguaje L sobre un alfabeto A, será recursivo si y sólo si los lenguajes L y A* - L son ambos r.e. EJEMPLO Otra ambigüedad viene del hecho de que un lenguaje particular puede considerarse respecto a más de un alfabeto. Sea, por ejemplo, A un alfabeto de n letras y Ø A un alfabeto de m letras que contiene a A (mn). Un lenguaje L sobre el alfabeto
es simplemente un subconjunto de A*.
De hecho, esta coincidencia va a ocurrir siempre como demuestra el siguiente teorema: TEOREMA Sea A ÍØ A donde A y Ø A son alfabetos y sea L Í A*. Entonces L es recursivamente enumerable (r.e.) en el alfabeto A si y sólo si es r.e. en Ø A COROLARIO
Sean A, Ø
A y L como en el teorema anterior. Entonces L es un lenguaje recursivo
en A si y sólo si es un lenguaje recursivo en Ø
A
Vamos a demostrar en esta sección que el problema de la parada para una máquina de Turing M no tiene solución, es decir, no existe ningún algoritmo (expresado en cualquiera de las formas conocidas) para determinar cuando M parará cuando empiece con una entrada dada. TEOREMA Existe una máquina de Turing K con alfabeto {1} cuyo problema de la parada asociado es irresoluble (indecidible) EJEMPLO Sea K
una máquina de Turing con alfabeto {1} que tiene un problema de
parada asociado irresoluble. Sean los estados de K, q1,
... , qk.
Podemos concluir entonces el siguiente teorema TEOREMA Existe una máquina de Turing K con alfabeto {1} y un estado qm tal que no existe ningún algoritmo que pueda determinar si K alcanzará el estado qm cuando comienza con una configuración dada.
Las máquinas de Turing
que hemos visto se llaman también determinísticas.
La diferencia fundamental es que puede haber varias cuádruplas comenzando por la misma pareja de símbolo estado. De esta forma ante una configuración inicial pueden existir distintos cálculos posibles. No existe una única línea de cálculo. Dada una configuración la máquina puede evolucionar a distintas configuraciones. Análogamente a las máquinas determinísticas, diremos que una configuración ... sj ...
qi es terminal si y sólo si no existe ninguna cuádrupla que comience por qisj. Cuando alcanza una configuración terminal, la máquina se dice que para. Usaremos el símbolo |- entre un par de configuraciones para indicar que se puede pasar de una a otra mediante una cuádrupla (un paso de cálculo) EJEMPLO Consideremos la máquina de Turing no determinística compuesta por las siguientes cuádruplas q1 B R q2 q2 1 R q3 q2 B B q4 q3 1 R q2 q3 B B q3 q4 B R q4
q4 B B q5
DEFINICION DE MÁQUINA DE TURING NO DETERMINISTICA. Sea A = {s1,..., sn} un alfabeto y sea u Î A*. Entonces la máquina de Turing no determinística M se dice que acepta la cadena u si existe una sucesión de configuraciones g1, g2, ..., gn tal que g1 es la configuración s0 u
g m es terminal respecto a M y g 1 |- g2|- ... |- g m En este caso, la sucesión g1, g2, ..., gm se llama un cálculo de aceptación de M para u. Si A es el alfabeto de M, entonces el lenguaje aceptado por M es el conjunto de todas las cadenas u ÎA* que son aceptadas por M. Claro está,
para máquinas determinísticas esta definición es la
misma de antes.
g 1 |- g2 |- g 3 |- ... siendo la primera configuración s0 u
Es solo necesario que una de las posibles sucesiones de cálculo conduzca a una configuración terminal. Esto se expresa, a veces, diciendo que "la máquina puede adivinar en cualquier momento el paso correcto entre todos los posibles" EJEMPLO En el ejemplo anterior, considerando el alfabeto A= {1}, resulta que M acepta la cadena 1111. De hecho, el lenguaje aceptado por M es {1{2n}} Como una máquina de Turing es también no determinística, podemos enunciar el siguiente teorema TEOREMA Para todo lenguaje L recursivamente enumerable existe una máquina de Turing M no determinística que acepta el lenguaje L. La propiedad
inversa es también cierta. Todo lenguaje aceptado por una máquina
de Turing no determinística será también r.e. . Por
la tesis de Church-Turing esto debería ser cierto. Sólo es
necesario simular una máquina no determinística M
para una entrada u, siguiendo todas las alternativas en cada paso, y dando
un valor (por ejemplo 0) si se alcanza una configuración terminal
en una de las posibles ramas. Esto define una función que es intuitivamente
parcialmente calculable y cuyo dominio es el lenguaje aceptado por M.
En los programas
de Post-Turing y en las máquinas de Turing ya sean de cuádruplas
o quíntuplas hemos supuesto que la memoria estaba constituida por
una única cinta ilimitada en ambas direcciones. Sin embargo se podrían
suponer otros dispositivos de memoria. Por ejemplo, en la formulación
original de Turing se consideraba que la cinta era infinita en una única
dirección, estando acotada por la derecha:
|
............ |
|
Esto
limita la memoria, pero también se puede pensar en ampliarla, por
ejemplo, usando varias cintas que pueden ser ilimitadas en ambas direcciones
o sólo en una. Pero, de acuerdo con la tesis de Church-Turing todas
estas formulaciones deben de ser equivalentes. En esta sección intentaremos
demostrarlo.
Vamos a comenzar considerando las máquinas de Turing con cinta ilimitada en una sola dirección. Para concretar vamos a suponer que cuando la máquina esté posicionada en la casilla más a la izquierda y haya que moverse a la izquierda, entonces la máquina para. Es evidente que todo lo que se pueda hacer en estas máquinas se puede hacer en una máquina de Turing. El problema está en determinar si este tipo de cintas limita la capacidad de cálculo. La realidad es que no es así. De hecho, Turing dio su modelo original con este tipo de cintas. Vamos a indicar la idea de la demostración. Esta se basa en representar el contenido de una cinta infinita bidireccional mediante una cinta unidireccional con dos pistas, dos filas de símbolos. Es decir, los símbolos que se escriben en la cinta unidireccional van a ser parejas de símbolos de la bidireccional. EJEMPLO Supongamos que tenemos la cinta: |
|
|
|
|
|
|
|
|
|
|
|
Entonces, eligiendo una casilla cualquiera de corte (por ejemplo la cuarta de la figura), esta cinta se puede representar como: |
|
|
|
|
|
|
|
|
|
|
|
|
Y
ésta se puede considerar como una cinta normal en la que se encuentran
los símbolos (a,B), (a,a), (b,c), ...
De forma más precisa, sea M una máquina de Turing con alfabeto {s1, ...,s2} y estados q1, ..., qk. Supongamos que M calcula la función unaria g en A0*, donde A0Î A. Cuando en esta máquina estamos calculando g(x) la configuración inicial de la cinta bidireccional será B x
A continuación construiremos una máquina de Turing ØM que calcule g con una cinta unidireccional |