programas mt

52
Programas y Máquinas de Turing Roberto Moriyón

Upload: alex-aeron

Post on 03-Oct-2015

21 views

Category:

Documents


3 download

DESCRIPTION

Programas maquinas de turing, presentacion de power point

TRANSCRIPT

  • Programas yMquinas de TuringRoberto Moriyn

    *

  • Algoritmos: Orgenes de la palabraAl-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 tiposConjunto 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 datosLos 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 datosLos programas son datos y definen funcionesNormalmente usaremos cadenas de caracteresA menudo nos restringiremos a clculos sobre cadenas que son programasAs pues, a menudo los datos sern programas y definirn funcionesP(P1, , Pn): aplicacin de la funcin de P

    *

  • Algoritmos: Orgenes del conceptoAlgoritmos concretos: se conocen desde antes de nuestra eraMtodo de Euclides para calcular el mximo comn divisor de dos nmerosMtodo de Eratstenes para obtener la lista de los nmeros primosEl concepto de algoritmo data del primer tercio del siglo XX.

    *

  • Mecanismos computacionalesLenguajes de programacinMquinas de Turing (Turing) y variantesGramticas (Chomsky)Funciones recursivas (Gdel, Herbrandt)Lambda-clculo (Church)Sistemas cannicos de reescritura (Post)Computacin cuntica,

    *

  • Mecanismos computacionales, IIAlgunos 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: FuncionesCasi todos los mecanismos anteriores permiten definir funciones.Pueden ser funciones sobre cadenas de caracteres, sobre nmeros o sobre funcionesA 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 terminaLas funciones definidas a partir de mecanismos computacionales son funciones parciales sobre un dominio universal (*, , )

    *

  • Mecanismos computacionales: Funciones, IIDistintos 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, IIIEjemplo: Dada una mquina de Turing M con alfabeto , definimos la funcin

    an, si M para sobre w f(w) = en caso contrariodonde 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, IVEl 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, VOtro 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, VIUn 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 ChurchNo 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 programacinQu 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, IILenguajes minimales:VariablesTipos 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.

    *

  • CuestionesLa 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: AutoaplicacinEn 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.

    *

  • CuestionesCmo se puede implementar un programa que calcula la cantidad de variables que aparecen en otro programa?

    *

  • CuestionesCmo 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?

    *

  • CuestionesCmo se puede implementar un programa como el anterior de manera sistemtica, que sirva tambin para otros programas?

    *

  • CuestionesCmo se puede implementar un programa que emula el funcionamiento de otro programa cualquiera a partir de unos datos arbitrarios?

    *

  • CuestionesCmo se puede implementar un programa que determina si otro programa arbitrario no termina nunca de ejecutarse a partir de unos datos arbitrarios?

    *

  • CuestionesCriticar 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, {wn}, por ejemplo por orden lexicogrfico.Definimos f(wn)=0+resultado(Pn, wn).

    *

  • ObservacinEn el caso particular en que el conjunto de cadenas que elegimos es el de todos los programas, es decir que wn sea el n-simo programa por orden lexicogrfico, el mismo orden en ambos casos, la construccin anterior es

    f(Q)=0+resultado(Q, Q).

    *

  • CuestionesCriticar 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, {wn}, por ejemplo por orden lexicogrfico.

    *

  • CuestionesDefinimosf(wn)=0 si Pn no se para en tiempo finito a partir de wn.f(wn)=0+resultado(Pn, wn) en caso contrario.

    *

  • CuestionesLo anterior permite implementar un programa que define una funcin no calculable? Por qu no?

    *

  • ObservacinEn 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 esf(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.

    *

  • DiagonalizacinLos argumentos anteriores son ejemplos concretos de un tipo de demostracin genrico que se utiliza en mbitos distintos. Hay ms ejemplos.

    *

  • Diagonalizacin, IISi fn:XY, n0, son funciones, y1,y2Y,

    y1 y2 y {xn}n0 son elementos distintos dos a dos de X, entonces la funciny1 si x=xn y fn(x)=y2f(x)=y2 en caso contrarioes diferente de todas las fn.Demostracin: Por definicin, fn(xn)f(xn).

    *

  • Diagonalizacin, IIISi {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, confn(x)=[2nx]%2 (n-sima cifra binaria de x):x0 = 0,x00x01x02x03x1 = 0,x10x11x12x13x2 = 0,x20x21x22x23x3 = 0,x30x31x32x33y = 0,y00y11y22y33(ykk = 1 xkk)

    *

  • Mquinas de TuringMecanismo 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 MdTIndeterministas (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 submquinasLa 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, IILo 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 MdTLas 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 instantneosEstIni.EstFin;Trans,:Cinta1EstadoCinta20.24;0a1a+,0b4a-,1a2a+,1b0a-,2a3a+,2b1a-,3a4a+,3b2a-,4a0a+,4b3a-:aa2bab

    *

  • Mquina de Turing universalHay mquinas de Turing capaces de emular el funcionamiento de otras cualesquiera a partir de su codificacin.

    *

  • CuestinComparar 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 paradaDada una MdT M y una palabra w, llega M a un estado de parada a partir de w?Solucin del problema: SeraMdT 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.

    *

    **

    *

    *

    **

    *

    *

    *

    *

    *

    *

    **

    *

    *

    *

    **

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    **

    *

    *

    **

    *

    *

    **

    *

    *

    *

    *

    **

    *

    **

    *

    *

    *