Вы находитесь на странице: 1из 52

Programas y

Mquinas de Turing
Roberto Moriyn

Algoritmos: Orgenes de la palabra


Al-Khwrizm, astrnomo y matemtico
persa, escribi en 825 un tratado en rabe
sobre el Clculo con Cifras Indes, que se
tradujo al latn en el siglo XII como
Algoritmos con nmeros indios.
La raz es la misma que la de la palabra
lgebra.

Algoritmos: Definicin y tipos


Conjunto de instrucciones (en un
lenguaje entendido por la computadora,
una mquina o persona) que especifica las
operaciones para procesar una
informacin de entrada arbitraria, y
producir una informacin de salida
deseada.
Informacin: Datos (nmeros, cadenas de
caracteres)
Tipos de algoritmos: Procedimientos para
realizar tareas, recetas de clculo,

Diversidad de tipos de datos


Los tipos de datos que se utilizan en los
distintos mecanismos computacionales son
equivalentes: cadenas de caracteres,
nmeros en diferentes representaciones, ...
(excepcin: el Lambda-Clculo)
La equivalencia anterior no es vlida si nos
interesa la eficiencia algortmica.
Otros tipos de datos no se pueden (o no se
saben) tratar computacionalmente: estado
instantneo de un ser vivo,

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

Algoritmos: Orgenes del concepto


Algoritmos concretos: se conocen desde
antes de nuestra era
Mtodo de Euclides para calcular el mximo
comn divisor de dos nmeros
Mtodo de Eratstenes para obtener la lista
de los nmeros primos

El concepto de algoritmo data del primer


tercio del siglo XX.

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

Qu os puedo decir que no sepis ya?


Pueden entrar en bucles interminables.
Es imprevisible cundo lo hacen.
Incluso es imposible distinguir cundo
estn dentro de un bucle interminable y
cundo estn ejecutando un algoritmo
complejo.
En teora permiten definir todas las
funciones calculables (o recursivas).

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.

Posibilidad adicional: Definicin de


funciones y recursividad.

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.

Observacin: Los ejemplos anteriores definen


funciones matemticas (parciales). Hay
programas que las implementan.

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;

al ejecutarse sobre unos datos?

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.

Por lo anterior, la condicin P no se para


sobre P no es calculable.

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.

Mquinas de Turing con


submquinas
La ejecucin de una transicin con una
submquina en una mquina de Turing es
como sigue:
Si la submquina es determinista, se ejecuta a
partir del contenido de la cinta. Si la submquina
tiene xito, se da por terminada la transicin de
la mquina inicial.
Si la submquina es indeterminista, la mquina
inicial puede pasar indeterministamente a
contener en la cinta cada uno de los contenidos
de la cinta en la submquina en estados de
aceptacin, pasando al estado siguiente.

Mquinas de Turing con


submquinas, II
Lo anterior se puede describir mediante pasos atmicos
como sigue:
En cada momento de la ejecucin hay una pila de mquinas en
funcionamiento, cada una apuntando a una casilla de la cinta.
En cada paso si es posible se ejecuta una transicin de la
mquina que est sobre la pila. Si la transicin tiene asociada
una submquina, se pone en marcha con la misma cinta y se
introduce sobre la pila. Si no se puede aplicar ninguna
transicin, en caso de que la ltima mquina est en un estado
final (de aceptacin) se extrae de la pila.
La mquina tiene xito si la pila se queda vaca.

La forma de ejecucin anterior se puede aplicar tambin


en el caso de MdT con submquinas y recursividad.

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.

Ejemplo de codificacin de MdT y


de sus estados instantneos
EstIni.EstFin
0
aa+

;Trans,

aa+

ba-

ba4

2
ba-

aa+

aa+

ba3

aa+

:Cinta1EstadoCinta2
0.24
;
0a1a+,0b4a-,1a2a+,1b0a-,
2a3a+,2b1a-,3a4a+,3b2a-,
4a0a+,4b3a-

Mquina de Turing universal


Hay mquinas de Turing capaces de
emular el funcionamiento de otras
cualesquiera a partir de su codificacin.

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.

Вам также может понравиться