Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Mquinas de Turing
Roberto Moriyn
Tipos de datos
Los programas son datos y definen funciones
Normalmente usaremos cadenas de
caracteres
A menudo nos restringiremos a clculos
sobre cadenas que son programas
As pues, a menudo los datos sern
programas y definirn funciones
P(P1, , Pn): aplicacin de la funcin de P
Mecanismos computacionales
Lenguajes de programacin
Mquinas de Turing (Turing) y variantes
Gramticas (Chomsky)
Funciones recursivas (Gdel, Herbrandt)
Lambda-clculo (Church)
Sistemas cannicos de reescritura (Post)
Computacin cuntica,
Mecanismos computacionales, II
Algunos de los mecanismos anteriores
(lenguajes de programacin, mquinas de
Turing indeterministas, funciones recursivas,
lambda clculo) se utilizan para definir
funciones.
Otros (mquinas de Turing indeterministas,
gramticas, reglas de reescritura) se utilizan
para reconocer la pertenencia a conjuntos de
datos (normalmente cadenas de caracteres).
Mecanismos computacionales:
Funciones
Casi todos los mecanismos anteriores permiten
definir funciones.
Pueden ser funciones sobre cadenas de
caracteres, sobre nmeros o sobre funciones
A veces al calcular el valor de la imagen de un
dato (cadena, nmero o funcin) mediante una
funcin no se obtiene ningn valor porque el
clculo nunca termina
Las funciones definidas a partir de mecanismos
computacionales son funciones parciales sobre
un dominio universal (*, , )
Mecanismos computacionales:
Funciones, II
Distintos programas pueden definir la misma
funcin.
Por ejemplo, hay infinitos programas que nunca
paran, y todos ellos definen la funcin de
dominio vaco.
No todas las funciones en el sentido matemtico
se pueden definir a partir de un mecanismo
computacional. Lo veremos ms adelante.
Mecanismos computacionales:
Funciones, III
Ejemplo: Dada una mquina de Turing M con
alfabeto , definimos la funcin
an, si M para sobre w
f(w) =
en caso contrario
donde n es el nmero de pasos que da la
mquina antes de pararse a partir de w.
A priori no est claro cmo definir f mediante
un mecanismo computacional.
Mecanismos computacionales:
Funciones, IV
El ejemplo anterior tiene trampa: todo
depende de cul sea la mquina M.
Por ejemplo, si M calcula a|w| directamen-te, f
se calcula mediante la misma M.
Si M se mete siempre en un bucle infinito, f
se puede calcular mediante la mquina que
borra el contenido de la cinta.
Hay alguna mquina M para la que f no se
puede calcular mediante otra mquina?
Mecanismos computacionales:
Funciones, V
Otro ejemplo: Hasta 1995 no se saba
cmo calcular la funcin f(n), que calcula
el primer valor no trivial de x, y y z tal
que xn+yn=zn a menos que no exista, en
cuyo caso le hace corresponder x(n)=0,
y(n)=0, z(n)=0. Tras la demostracin del
teorema de Fermat por Wiles, se sabe
que f(2)=(3,4,5) y f(n)=(0,0,0) si n2.
Mecanismos computacionales:
Funciones, VI
Un mecanismo computacional es ms
potente que otro cuando permite
calcular ms funciones.
Teorema: Las mquinas de Turing, los
lenguajes de programacin, las
funciones recursivas y el clculo lambda
tienen la misma potencia computacional.
Tesis de Church
No hay ningn mecanismo computacional
ms potente que los anteriores.
No es una afirmacin demostrable, pues
no hay una definicin rigurosa y absoluta
de mecanismo computacional.
Lenguajes de programacin
Lenguajes de programacin, II
Lenguajes minimales:
Variables
Tipos de datos bsicos (nmeros, cadenas)
Operaciones y condiciones bsicas
(incremento, anteposicin, igualdad, )
Instrucciones (asignacin, condicional)
Etiquetas y redireccionamiento.
Cuestiones
La definicin no recursiva de funciones
aade potencia a un lenguaje de
programacin?
La recursividad aade potencia a un
lenguaje de programacin con funciones?
La eliminacin de etiquetas y
redireccionamiento resta potencia a un
lenguaje de programacin con recursividad?
Lenguajes de programacin:
Autoaplicacin
En un lenguaje de programacin que admite
cadenas de caracteres, los programas pueden
ser datos sobre los que se corren otros
programas.
Ejemplos:
Programa que calcula la cantidad de variables que
aparecen en otro programa.
Programa que calcula el tiempo(P,D) que tardar otro
programa al ejecutarse sobre unos datos dados.
Programa que calcula el resultado(P,D) de ejecutar
otro programa sobre unos datos dados.
Cuestiones
Cmo se puede implementar un programa
que calcula la cantidad de variables que
aparecen en otro programa?
Cuestiones
Cmo se puede implementar un programa
que calcula el tiempo que tarda el programa
int y = 0;
while (x>0) {
x -= 2;
y++; }
return y;
Cuestiones
Cmo se puede implementar un programa
como el anterior de manera sistemtica,
que sirva tambin para otros programas?
Cuestiones
Cmo se puede implementar un programa
que emula el funcionamiento de otro
programa cualquiera a partir de unos
datos arbitrarios?
Cuestiones
Cmo se puede implementar un programa
que determina si otro programa arbitrario
no termina nunca de ejecutarse a partir de
unos datos arbitrarios?
Cuestiones
Criticar el siguiente procedimiento para
construir una funcin que no sea calculable:
Construimos un programa P que ordena los
programas, {Pn}, por ejemplo por orden
lexicogrfico (no alfabtico!!!).
Construimos otro programa w que ordena un
conjunto infinito de cadenas de caracteres, {w n},
por ejemplo por orden lexicogrfico.
Definimos f(wn)=0+resultado(Pn, wn).
Observacin
En el caso particular en que el conjunto
de cadenas que elegimos es el de todos
los programas, es decir que wn sea el nsimo programa por orden lexicogrfico,
el mismo orden en ambos casos, la
construccin anterior es
f(Q)=0+resultado(Q, Q).
Cuestiones
Criticar el siguiente procedimiento para
construir una funcin que no sea calculable:
Construimos un programa P que ordena los
programas, {Pn}, por ejemplo por orden
lexicogrfico (no alfabtico!!!).
Construimos otro programa w que ordena un
conjunto infinito de cadenas de caracteres, {w n},
por ejemplo por orden lexicogrfico.
Cuestiones
Definimos
f(wn)=0 si Pn no se para en tiempo finito a partir de
wn.
f(wn)=0+resultado(Pn, wn) en caso contrario.
Cuestiones
Lo anterior permite implementar un
programa que define una funcin no
calculable? Por qu no?
Observacin
En el caso particular en que el conjunto de
cadenas que elegimos es el de todos los
programas, con el mismo orden en ambos
casos, la construccin anterior es
f(P)=0 si P no se para en tiempo finito a partir
de P.
f(P)=0+resultado(P, P) en caso contrario.
Diagonalizacin
Los argumentos anteriores son ejemplos
concretos de un tipo de demostracin
genrico que se utiliza en mbitos
distintos. Hay ms ejemplos.
Diagonalizacin, II
Si fn:XY, n0, son funciones, y1,y2Y,
y1 y2 y {xn}n0 son elementos distintos dos a
dos de X, entonces la funcin
y1 si x=xn y fn(x)=y2
f(x)=
y2 en caso contrario
es diferente de todas las fn.
Demostracin: Por definicin, fn(xn)f(xn).
Diagonalizacin, III
Si {xn}n0 son nmeros reales entre 0 y 1, hay
otros que no estn en la sucesin.
La idea es la misma del ejemplo anterior, con
fn(x)=[2nx]%2 (n-sima cifra binaria de x):
x0 = 0,x00x01x02x03
x1 = 0,x10x11x12x13
x2 = 0,x20x21x22x23
x3 = 0,x30x31x32x33
y = 0,y00y11y22y33
(ykk = 1 xkk)
Mquinas de Turing
Mecanismo basado en una mquina de estados
con acceso a una cinta infinita de lectura y
escritura que permite definir algoritmos
generales sobre cadenas de caracteres.
Estados iniciales y finales, funcin de transicin.
Se pueden utilizar para reconocer palabras con
un criterio de aceptacin o para generarlas a
partir de otras.
Ejercicios
[T1] Programar una mquina de Turing que
elimina los ceros de un nmero binario,
dejando solamente los unos sin espacios
entre medio.
[T2] Programar una mquina de Turing que
acepte palabras de la forma (ab)n.
[T3] Programar una mquina de Turing que
reconoce las palabras que tienen tantas aes
como bes.
EJERCICIO
[PILA] Dar un autmata a pila que
reconozca al lenguaje {anbcn | n>0} y una
mquina de Turing que emule al autmata
a pila.
Utilizacin de MdT
Un lenguaje L es computable si hay una MdT
que reconoce cundo wL y otra que reconoce
cundo wL.
Una funcin f es computable si hay una MdT
que reconoce cundo f(x)=y y otra que reconoce
cundo f(x)y (es decir, si el lenguaje
L={v + : + f(v) | v }
es computable).
Variaciones de MdT
Indeterministas (para reconocimiento de
lenguajes).
Con submquinas (no recursivas o recursivas).
Con varias cintas.
Con cinta limitada por un lado.
Con un alfabeto de dos smbolos.
Con infinitas cintas (superficie cuadriculada)
Todas ellas son computacionalmente
equivalentes a las MdT normales.
Ejercicios
[T4] Programar una mquina de Turing con
submquinas que acepte palabras que o
bien pertenecen al lenguaje del ejercicio T2
o estn formadas nicamente por aes.
[T5] Programar una mquina de Turing con
submquinas que acepte palabras tales
que al separarlas en varias subpala-bras
separadas por ces, cada palabra resultante
pertenezca al lenguaje anterior.
EJERCICIO
[SUBMQUINA]
Dar una mquina de Turing con
submquinas y otra mquina de Turing sin
submquinas que emule a la primera.
Se puede aplicar el mismo procedimiento
a cualquier mquina de Turing con
submquinas? Debera estar claro cmo
generalizar la construccin a cualquier
otra MdT con submquinas.
EJERCICIO
[VARIAS CINTAS]
Describir el funcionamiento de una MdT
con varias cintas.
Dar un ejemplo de una MdT que utilice
dos cintas y otra MdT normal que emule a
la primera. Debera estar claro cmo
generalizar la construccin a cualquier
otra MdT con varias cintas.
EJERCICIOS
[CINTA LIMITADA] Dar un ejemplo de una
MdT con cinta limitada por la izquierda y
otra MdT normal que la emule. Debera
estar claro cmo generalizar la
construccin a cualquier otra MdT con
cinta limitada por la izquierda.
[SMBOLOS] Dar un ejemplo de una MdT
con 3 smbolos y otra con 2 smbolos que
la emule. Debera estar claro cmo
generalizar la construccin a cualquier otra
MdT con ms de 3 smbolos.
Codificacin de MdT
Las mquinas de Turing se pueden
codificar codificando cada transicin y
concatenando los resultados con
separadores.
De esta forma se define un lenguaje de
programacin en el que hay tres
variables: El estado de la mquina y las
dos partes en que se divide la cinta.
;Trans,
aa+
ba-
ba4
2
ba-
aa+
aa+
ba3
aa+
:Cinta1EstadoCinta2
0.24
;
0a1a+,0b4a-,1a2a+,1b0a-,
2a3a+,2b1a-,3a4a+,3b2a-,
4a0a+,4b3a-
AplicaTransicin
BuscaTransicin
:Comprueba
Cuestin
Comparar lo anterior con la emulacin de
programas.
EJERCICIO
[BUSCA TRANSICIN] Escribir la
submquina BuscaTransicin de la MTU
[APLICA TRANSICIN] Escribir la
submquina AplicaTransicin de la MTU
[COMPRUEBA] Escribir la submquina
Comprueba de la MTU
EJERCICIOS
[EMULA DETERMINISTA] Dar una MdT
indeterminista y otra MdT determinista
que emula su funcionamiento.
[MTU DETERMINISTA] Dar una MdT
determinista que emule el funcionamiento
de una MdT arbitraria, determinista o no
Problema de la parada
Dada una MdT M y una palabra w, llega
M a un estado de parada a partir de w?
Solucin del problema: Sera
MdT que, al ejecutarse sobre una codificacin
de M + w, se para si y slo si M no lo hace a
partir de w.
No tiene solucin.
Demostracin: Anloga al caso de
programas.
EJERCICIO
[PARA PARA 1] Suponiendo que el
problema de la parada tuviera solucin,
escribir una MdT, PP, que utilice a la
anterior como submquina que, al
ejecutarse sobre la codificacin de otra
MdT M + una palabra w, se pare en el
estado 0 si M lo hace sobre w, y en ese
caso deje sobre la cinta el valor calculado
por M, y se pare en el estado 1 si M no lo
hace sobre w.