Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porSebastian Orellana Modificado hace 7 años
1
Computabilidad & Complejidad Computacional (En rodaje)
2
GeneralidadesGeneralidades ½ de un curso de 6 créditos, en cámara lenta A futuro, obligatorio Esta primera vez: semestral y en construcción; el programa puede variar. Requisitos: Lógica, grafos, probabilidades TALF se supone que no Evaluación: Tareas (individuales) Certamen (a partir de una lista conocida) Material disponible: Bibliografía en pdf Ppts y audio de clases
3
GeneralidadesGeneralidades Bibliografía: Hopcroft et al, Introduction to Automata Theory, Languages and Computation (3ed, 2007) Sipser, Introduction to the Theory of Computation (2005) Papadimitriou, Computational Complexity (1994) Arora & Barak, Computational Complexity: A Modern Approach (2009) Moore & Mertens, The Nature of Computation (2011) +, informalmente: Aaronson, Quantum Computing Since Democritus (2013)
4
Tema y programa ¿De qué trata el curso? Como “computer scientists”, hay algunas preguntas que uno esperaría que seamos capaces de responder. Por ejemplo: ¿Qué es un computador? ¿Qué problemas puede resolver un computador? ¿Qué no puede hacer, ni siquiera “en teoría”? ¿Qué problemas podemos resolver en la práctica? ¿Podemos clasificar la dificultad de los problemas? ¿Podemos detectar cuándo es preferible pasar a métodos probabilistas, o aproximados, o a heurísticas? ¿Para qué problemas es útil tener un cluster?
5
Tema y programa Supongamos dos conjuntos de secuencias de ADN, {a 1,...,a n } y {b 1,...,b n }. En bioinformática aparecen preguntas como: ¿Cuál es la secuencia de ADN más corta que admite a a 1,...,a n y también a b 1,...,b n como subsecuencias? ¿Cuál es la secuencia de ADN más corta, formada por elementos traslapados de estos conjuntos, que parte con a i y termina con b k ? ¿Existe un conjunto de índice i 1,..., i n, tal que a i 1 + a i 2 +... + a i n = b i 1 + b i 2 +... + b i n ? ¿Es posible parear cada a i con un b j distinto, de tal forma que a i y b j coincidan en un 99%? ¿De cuántas maneras se puede?
6
Tema y programa De estos problemas: Hay uno para el cual es imposible diseñar un algoritmo. Los otros tres sí admiten solución. En un caso, la solución es eficiente. En los otros dos, la solución es ineficiente y probablemente siga siéndolo para siempre. Necesitamos ser capaces de distinguir, clasificar, demostrar!
7
Tema y programa Otros problemas: ¿Es posible hacer un programa que escriba su propio código? ¿Es posible determinar acaso un programa escribe su propio código (¡¡virus!!)? ¿Es posible automatizar la matemática? Es decir, ¿es posible hacer un programa que distinga entre teoremas ciertos y teoremas falsos? FÁCIL IMPOSIBLE
8
Tema y programa PROGRAMA DEL CURSO (en principio) Máquinas de Turing. Lenguajes recursivos y recursivos enumerables; funciones computables. Máquina de Turing universal. Tesis de Church-Turing. Problemas indecidibles, teorema de Rice y funciones no computables. Complejidad algorítmica. Clases de complejidad computacional. Reducciones eficientes y completitud. P y NP. C-Value y C-Sat; teorema de Cook-Levin. Otros problemas NP- completos. CoNP, EXP, NEXP. Diagonalización y teoremas de jerarquía. Oráculos. Complejidad espacial. PSPACE y NL. Complementos: definición de otras clases importantes (BPP, NC, BQP); dificultad de aproximación y teorema PCP.
9
Los problemas de cómputo tiene diversas formas. Por ejemplo: Dado un programa, determinar si sigue la sintaxis del C. Dado un programa, determinar acaso se detiene. Dadas dos matrices, calcular su producto. Dado un entero, encontrar sus factores primos. Dada una fórmula booleana, contar cuántas combinaciones de V/F que la hacen verdadera. Dados dos nodos de un cierto grafo, encontrar el camino más corto entre ellos. Los problemas de cómputo tiene diversas formas. Por ejemplo: Dado un programa, determinar si sigue la sintaxis del C. Dado un programa, determinar acaso se detiene. Dadas dos matrices, calcular su producto. Dado un entero, encontrar sus factores primos. Dada una fórmula booleana, contar cuántas combinaciones de V/F que la hacen verdadera. Dados dos nodos de un cierto grafo, encontrar el camino más corto entre ellos. Cómputo y lenguajes
10
Sin embargo, hay un esquema general: inputoutput Computador Información digital Secuencia de símbolos CPU con estados internos (finitos!) Memoria también es información digital!
11
Cómputo y lenguajes Es natural ver el cómputo como una función que recibe un string, y contesta con otro string. Problemas de funciones: dado un string x, calcular f(x) (incluye el caso de optimización y conteo) Problemas de decisión: dado un string x, contestar SÍ/NO Los problemas de decisión son más simples de estudiar, y en la práctica capturan mucho de la dificultad del cómputo. Nos centraremos en ellos.
12
Nociones básicas de palabras y lenguajes ALFABETO: un conjunto finito, no vacío, de símbolos. PALABRA (=“string”) : una secuencia finita de símbolos. Ejemplos: ={0,1}, ={a,b,c,...,z}, =ASCII, =Unicode Con alfabeto ={0,1}, podemos escribir palabras como 101010, 01, 0000011, etc. En particular si la secuencia tiene 0 símbolos obtenemos la palabra nula, típicamente representada por .
13
Nociones básicas de palabras y lenguajes k denota el conjunto de todas las palabras de largo k con alfabeto . Por ejemplo, con ={0,1}, tendríamos 0 = { } 1 = { 0, 1 } 2 = { 00, 01, 10, 11 }... Definimos * como el conjunto de todas las palabras con alfabeto . Es decir,
14
Nociones básicas de palabras y lenguajes A veces queremos excluir el caso de k=0; para eso se define también LENGUAJE: es cualquier conjunto de palabras L *. Se define la concatenación de dos lenguajes como el lenguaje formado por todas las concatenaciones posibles entre sus palabras:
15
Nociones básicas de palabras y lenguajes Esto permite escribir y análogamente definir L k para cualquier k. Además (y L + si excluimos el k=0).
16
Lenguajes y problemas Nótese que a todo lenguaje L se le asocia de manera natural un problema de decisión: Dada una palabra w, ¿w L? Es el llamado problema de membresía para L. Recíprocamente, cada vez que estudiamos un problema de decisión, y decidimos una forma de codificar sus instancias en strings, el problema se convierte en el problema de membresía de un cierto lenguaje: el de las instancias con respuesta “SÍ”. ¿es n primo? L={n:n es primo}
17
Lenguajes y problemas Por lo tanto, hablaremos indistintamente de “clases de lenguajes” (sobre todo al comienzo) o de “clases de problemas” (más adelante). También veremos algunos casos en que el output no es SÍ/NO; en ese caso la noción de lenguaje deja de ser relevante.
18
Modelos de cómputo Para poder estudiar preguntas sobre la computabilidad de un problema, o sobre la complejidad de su solución, es necesario precisar el modelo de cómputo, la “máquina” de la que disponemos. inputoutput Máquina Debemos definirlo formalmente, para poder luego demostrar resultados sobre él. En (casi) todo este curso, el modelo son las máquinas de Turing, aunque no siempre será explícito.
19
Modelos de cómputo Un modelo más simple: autómatas finitos. Suponemos que la máquina puede estar en una cantidad finita de distintos estados, y que va cambiando de estado en la medida que recibe símbolos desde su input. La respuesta la leemos viendo el estado en que queda la máquina al terminar de leer el input: algunos estados se interpretan como “SÍ”, otros como “NO”. q0q0 q1q1 q2q2 10 00,11
20
Modelos de cómputo Un poco más complejo: autómatas de pila. Similar a un autómata finito, pero agregamos una pila, no acotada, donde es posible leer y guardar información. Los cambios de estado ahora consideran el símbolo que se ve en el tope de la pila, y pueden sacarlo y/o agregar otro. Se agrega la posibilidad de no determinismo: más de un cambio de estado es posible en un momento dado. Se contesta “sí” cuando existe una secuencia de decisiones que permite contestar “sí”.
21
Modelos de cómputo Los lenguajes que pueden decidirse con un autómata finito se llaman regulares; los que pueden decidirse con un autómata de pila se llaman de libre contexto. Ambas clases son muy útiles; los lenguajes regulares describen patrones simples en textos, mientras que los de libre contexto son capaces de describir lenguajes de programación, lenguajes humanos, XML, etc... En ambos casos existe algoritmos eficientes para resolver el problema de membresía.
22
Máquina de Turing Las máquinas de Turing son también similares a los autómatas finitos, pero les agregamos una cinta. input posición inicial del cabezal...... w0w0 w1w1 w2w2 wnwn... casillas en blanco Sobre la cinta va un cabezal, que lee y escribe. El input viene escrito en la cinta.
23
Transiciones entre estados 1) leo 2) escribo 3) me muevo (Left, Right) 4) cambio el estado de la máquina
24
Ejemplos de transiciones...... Tiempo k...... Tiempo k+1 Se suele anotar el estado de la máquina “en el cabezal”.
25
Determinismo; función parcial Salvo que digamos lo contrario, las máquinas de Turing serán deterministas. Si en un momento dado ninguna transición es aplicable, la máquina se detiene. En particular, los estados de aceptación no tienen transiciones de salida. Por lo tanto, son siempre estados finales : la máquina acepta y se detiene.
26
Aceptación, rechazo o divergencia Cuando la MT se ejecuta partiendo con un input w escrito en la cinta, puede... aceptar w: si se detiene en un estado de aceptación no aceptar w: eso puede ser porque rechaza w: si se detiene en un estado de no aceptación nunca se detiene. Decimos que una MT siempre se detiene si ningún input la hace caer en ese último caso.
27
T=4 Ejemplo: aceptación Consideremos la máquina de arriba, y hagámosla correr sobre el input aaa. Stop y acepta T=0 T=1 T=2 T=3
28
Ahora, con input aca. Stop y rechaza T=0 T=1 Ejemplo: rechazo
29
Ahora, con input aba. Ejemplo: divergencia T=0 T=1T=2T=4...etc! No acepta, pero tampoco rechaza.
30
FormalmenteFormalmente Una máquina de Turing queda definida por M = ( Q, , , , q 0, F, ) donde Q : conjunto finito de estados q 0 Q : estado inicial F Q : estados de aceptación : alfabeto del lenguaje a reconocer : alfabeto de la cinta [incluye a ] \ : carácter “blanco” [a veces usan “B”, o “ ”] :Q Q {L,R} { }: función de transición [ (q,a)= “Stop!” ]
31
Descripción instantánea área de trabajo El área de trabajo en un instante dado es la parte (finita) de la cinta que la máquina ha visitado hasta ese momento. caq 2 ba "Descripción instantánea" o "configuración" : uqv El contenido del área de trabajo es uv, la MT está en estado q, y el cabezal está al comienzo de v. Por lo tanto, una MT puede verse como un operador que transforma (localmente) un string en otro string.
32
Descripción instantánea En el ejemplo que teníamos, q 0 aaa aq 0 aa aaq 0 a aaaq 0 aaq 1 a De modo que q 0 aaa aaq 1 a, y como q 1 F, aceptamos aaa. T=4 T=0 T=1 T=2 T=3
33
Lenguajes reconocidos, lenguajes decididos El lenguaje reconocido por una máquina M es L(M) = { w * : q 0 w uqv, q F } Si además M es una MT que siempre se detiene, decimos que M decide su lenguaje.
34
Lenguajes reconocidos, lenguajes decididos Con esto, las MT definen no una, sino dos clases de lenguajes: Un lenguaje L es “recursivo enumerable”, o “reconocible”, si existe una máquina de Turing que lo reconoce. Un lenguaje L es “recursivo”, o “decidible” si existe una máquina de Turing que lo decide. Nótese que, por definición, todo lenguaje decidible es reconocible.
35
Lenguajes Lenguajes reconocibles Lenguajes decidibles Lenguajes de libre contexto Lenguajes regulares Jerarquía de lenguajes
36
Volvamos al ejemplo Consideremos la máquina del ejemplo, con ={a,b,c}. ¿Qué lenguaje reconoce? a * +b(a+b+c) * No lo decide ; existen palabras (por ejemplo, “ab”) que provocan un loop. Sin embargo, es fácil hacer una MT que sí lo decida.
37
Otro ejemplo Veamos un MT para el lenguaje {a n b n } a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
38
T= 0 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
39
T= 1 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
40
T= 2 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
41
T= 3 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
42
T= 4 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
43
T= 5 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
44
T= 6 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
45
T= 7 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
46
T= 8 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
47
T= 9 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
48
T= 10 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
49
T= 11 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
50
T= 12 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
51
Para y acepta T= 13 a x,R x x,R y y,R a a,R q0q0 b y,L y y,L a a,L y y,R ,R q1q1 q3q3 q4q4 q2q2
52
El segundo ejemplo Podemos resumir el funcionamiento de esa máquina de Turing mediante pseudocódigo: While veo a a x Avanzar (R) saltando {a,y}, hasta ver b b y Avanzar (L) saltando {a,y}, hasta ver x Avanzar (R) Avanzar (R) saltando {y} hasta ver Aceptar
53
1. Definición, notación, ejemplos 2. Lenguajes de MT; funciones computables 3. Variaciones c/r a MT estándar 4. Conjuntos enumerables; codificación de inputs 5. Máquina de Turing Universal. Indecidibilidad, incomputabilidad, reducciones. Teorema de Rice. 6. Tesis de Church-Turing y los límites de la computación Máquinas de Turing
54
MT estándar cabezal que escribe y lee transiciones entre los estados internos de la MT son determinísticas 1 cinta, infinita en ambas direcciones (movimiento es a la izquierda o la derecha)
55
Variaciones c/r a las MT estándar Las MT son un paradigma bastante robusto: es posible definir modelos de cómputo aparentemente más poderosos, y resulta (una y otra vez) que las clases de lenguajes reconocibles y decidibles siguen siendo las mismas. Veremos algunas variantes; con ellas en mano, es más fácil construir MT más ambiciosas.
56
Ejemplo de extensión: MT con “Stay” MT+stay: como una MT estándar, pero las opciones de movimiento son L, R y "S" (quedarse donde está). Por ejemplo, una transición podría ser y al aplicarla...
57
Ejemplo de extensión: MT con “Stay” Teorema: las MT+stay tienen el mismo poder de cómputo que las MT estándar. Demostración: hay que mostrar que 1.Las MT+stay tienen al menos el poder de cómputo de las MT estándar. 2. Las MT estándar tienen al menos el poder de cómputo de las MT+stay.
58
Ejemplo de extensión: MT con “Stay” 2. Las MT estándar tienen al menos el poder de cómputo de las MT+stay. Para eso, veremos cómo convertir una MT+stay en una MT estándar, sin alterar su funcionamiento. 1.Las MT+stay tienen al menos el poder de cómputo de las MT estándar. Es directo, pues la MT estándar es un caso particular de MT+stay.
59
Ejemplo de extensión: MT con “Stay” Para cada transición que use el “S” (stay), agregamos un estado auxiliar, y reemplazamos la transición por 1+| | transiciones: Una flecha de esas por cada x QED
60
MT multipista ("multitrack") pista 1 pista 2 lo que leelo que escribe Se simula con una MT estándar: si son k pistas, la MT estándar usará ’ = k. En el ejemplo, k=2 y el cabezal lee “(b,a)”. ¿Qué es? ¿Cómo se hace?
61
MT con marcas......... Las transiciones podrán consultar la presencia de marcas, y decidir marcar o desmarcar una celda. ¿Cómo hacemos esto con una MT estándar? Ponemos una segunda pista para las marcas. ¿Qué? ¿Cómo?
62
MT con memoria "interna" finita Una MT podría “variables internas” finitas del tipo Parte “normal” de la regla Los valores se pueden consultar y modificar en las transiciones (si no se modifican, quedan como estaban). m 1 D 1 = {0, 1} m 2 D 2 = {,, } ¿Qué?
63
MT con memoria "interna" finita Para simular con una MT estándar, la idea es reemplazar Q por Q' = Q D 1 D 2 Con eso, las consultas y cambios de variables se reducen a ver en qué estado estoy y a cuál paso. estado interno estado de control variables internas =+...etc q q,0, q,1, ¿Cómo?
64
MT con varias cintas ("multitape") Cinta 1Cinta 2 Unidad de control ¿Qué?
65
MT con varias cintas T = 1 T = 2 Cinta 1Cinta 2 ¿Qué?
66
MT con varias cintas Podemos simularla usando una MT multipista, con marcas (“cabezales virtuales”), y con variables internas: Cinta 1 Cinta 2... Para simular cada iteración: Recorro y memorizo lo que los cabezales ven. Recorro de nuevo, aplicando los cambios. ¿Cómo?
67
MT no-deterministas En una MT no determinista, existe más de una transición posible a partir de una configuración dada. T = 1 T = 2 Opción 1Opción 2 ¿Qué?
68
MT no-deterministas Lenguaje aceptado por una MT no-determinista: el conjunto de inputs para las cuales existe alguna cadena de decisiones que lleva a estado de aceptación. El no-determinismo tampoco cambia la clase de lenguajes que una MT puede aceptar. ¿Qué? Bosquejemos una forma de simular una MT no- determinista M mediante una MT determinista M’.
69
MT no-deterministas En la cinta ponemos varias áreas de trabajo, cada una con un “cabezal virtual”....... área 1 $ $ área 2 $ En cada vuelta M' recorre todas las áreas, y hace en cada una lo que M habría hecho. Cada vez que toque "adivinar" un paso, M’ clonará esa área de trabajo, y habrá un área por cada opción. ¿Cómo?
70
MT no-deterministas Si en algún momento en algún área de trabajo M llega a estado de aceptación, M' acepta....... área 2 $ $ área 1b $ área 1a $ área 1 $ $ área 2 $ ¿Cómo?
71
Variaciones c/r a las MT estándar Respecto a las MT estándar, uno puede definir: Extensiones: generalizan las MT. Limitaciones: reducen las capacidades de la MT. Los ejemplos previos son todas extensiones. Ninguna extensión aumenta de verdad el poder de cómputo: los lenguajes reconocibles, las funciones computables, siguen siendo las mismas. Las limitaciones, en cambio, podrían reducir el poder de cómputo.
72
Una posible limitación: cinta semi-infinita... disponemos de:... Cualquier MT con cinta bi-infinita se puede convertir en una con cinta semi-infinita (no veremos la demostración). Algunos textos usan este tipo de MT como "estándar". “#” marca el fin de la cinta Un ejemplo de limitación que no reduce el poder de cómputo es la cinta semi-infinita. En lugar de
73
Funciones computables y conjuntos enumerables: otras formas de usar MT. Máquinas de Turing
74
Funciones Turing-computables Las MT también son flexibles en otro sentido: pueden usarse de distintas formas. Si miramos el contenido del área de trabajo al detenerse, vemos que una máquina M induce una función, f M : * * Config. inicialSe detiene, con config. final:
75
Funciones Turing-computables Una función f es computable si M tq f=f M. Una función computable es total si es inducida por una MT que se detiene siempre. En particular, la función indicatriz de un lenguaje L (definida como f L (w)=1 si w L y f L (w)=0 si w L) será computable ssi L es reconocible, y total ssi L es decidible.
76
Ejemplo: 2x, con x codificado en unario Describamos su funcionamiento en pseudocódigo informal: Reemplazar cada 1 por un $. REPETIR Encontrar el $ de más a la derecha, cambiarlo a 1. Ir al extremo derecho, insertar un 1. HASTA que no queden $ Sistema unario: n se escribe como 111...1 (n unos).
77
Otro ejemplo: log x, en binario Esta MT calcula la función log n, redondeado hacia abajo, con input y output en binario. Ejercicio: ¡convencerse!
78
Funciones “recursivas” Una función f:N k N se dice recursiva primitiva si puede obtenerse combinando las siguientes funciones... Función constante: para todo n y k, f(x 1,...,x k )=n es una función Función sucesor: S(x) se define f(x)=x+1 Función de proyección: P k i (x 1,...,x k ) se define como f(x 1,...,x k )=x i.
79
Funciones “recursivas”...usando los siguientes operadores: Composición Recursividad primitiva: a partir de un par de funciones g(x 1,...,x k ), h(y,z,x 1,...,x k ), se puede obtener la función (g,h) definida como f(y,x 1,...,x k ) tal que f(0,x 1,...,x k ) = g(x 1,...,x k ) f(y+1,x 1,...,x k ) = h(y,f(y, x 1,...,x k ),x 1,...,x k )
80
Funciones “recursivas” La mayoría de las funciones “razonables” son recursivas primitivas: producto, factorial, exponencial, etc. Es lo que se puede calcular en un lenguaje de programación que tenga operadores aritméticos, IF/THEN, y ciclos FOR de la forma “FOR i from 1 to n”, donde el n no se modifica dentro del loop. No hay otros tipos de loop. El cómputo siempre termina, de modo que las funciones recursivas primitivas son todas computables y totales.
81
Funciones “recursivas” La clase de las “funciones recursivas” incluye a las anteriores, pero admite un operador más: Minimización: a partir de una función f(y,x 1,...,x k ) se puede obtener la (f) definida como (f)(x 1,...,x k ) = z ssi f(z,x 1,...,x k )=0 y f(i,x 1,...,x k )>0 para i=0,...,z-1 Teorema: una función es recursiva ssi es computable. (demostración: no veremos) (Informalmente: si f tiene k+1 argumentos, podemos fijar k de ellos y pedir el primer valor del otro que hace f=0. Pero: si no existe, la función se indefine!)
82
Funciones “recursivas” De modo que funciones recursivas primitivas funciones computables totales funciones computables (a.k.a. recursivas) Sabemos que esa inclusión es propia ¿Serán iguales estas clases? NO. Ejemplo más conocido de función total que no es recursiva primitiva: la función de Ackermann.
83
Función de Ackermann (En rigor, esta es la función de Ackermann- Péter, la versión más conocida.) A(m,n) = n+1 A(m-1,1) A(m-1,A(m,n-1)) si m=0 si m>0, n=0 si m>0, n>0 Crece desquiciadamente rápido Un número de > 19 mil dígitos
84
A(4,2)=A(4,2)=
85
Función de Ackermann A(m,n) = n+1 A(m-1,1) A(m-1,A(m,n-1)) si m=0 si m>0, n=0 si m>0, n>0 La función de un argumento, A(n,n), crece más rápido que cualquier función recursiva primitiva. Nótese que sólo aplica +1 y -1... así que el tiempo que tarda evaluar A(m,n) es de orden A(m,n). Por lo mismo, su crecimiento deriva de la profundidad de la recursividad. Se ha usado como benchmark para evaluar qué tan bien los compiladores manejan la recursión.
86
Enumeración: otra forma de usar MT Máquinas de Turing: las podemos usar para... Reconocer lenguajes ¿w L? Calcular funciones ¿f(w)? Ahora agreguemos: enumerar lenguajes ¿L?
87
Enumeración: otra forma de usar MT Decimos que una MT enumera un lenguaje L si no recibe ningún input genera todas las palabras de L Podemos suponer que hay una cinta de trabajo, y otra (la “impresora”) en la que la MT escribe las palabras de L....... w2w2 w3w3 #w1w1 # # área de trabajo +
88
EnumeraciónEnumeración Que la MT enumere L significa que: w L, un tiempo t w en que w es impresa. Si w es impresa, w L. Un lenguaje L se dice “enumerable” si existe una MT que lo enumera....... w2w2 w3w3 #w1w1 # # área de trabajo +
89
Ejemplo: enumerar {a,b} * MT de dos cintas y con “stay”: [cuando no se menciona la 2ª cinta, es “stay”] ( , ) (a,#),S,R q1q1 q3q3 q0q0 q2q2 a a,L b b,L ,R (a, ) (a,a),R,R (b, ) (b,b),R,R ( , ) ( ,#),L,R b a,L a b,L a,S Pone “a” en el área de trabajo, # en el output Retrocede al comienzo del área de trabajo Copia el área de trabajo al output Actualiza el área de trabajo
90
EnumeraciónEnumeración # a # b # aa # ab # ba # bb # aaa # aab #... Sólo palabras de {a,b} * aparecen. Todas las palabras de {a,b} * aparecen tarde o temprano. A este tipo de orden (en longitud creciente, y en orden alfabético dentro de la misma longitud) se le llama orden canónico.
91
EnumeraciónEnumeración Teorema: L es reconocible MT que lo enumera. L es decidible MT que lo enumera en orden canónico.
92
EnumeraciónEnumeración MT que decide L MT que enumera L en orden canónico ( ) Tengo M EC que enumera L en orden canónico. Construyo M D que recibe un input w, y ejecuta M EC hasta ver las de largo |w|. Si está, acepta; si no, rechaza. ( ) Tengo M D que decide L. Construyo M EC que enumera * en orden canónico, y para cada palabra le pregunta a M D acaso está en L. Si está, imprime.
93
EnumeraciónEnumeración MT que acepta L MT que enumera L ( ) Tengo M E que enumera L. Construyo M A que recibe un input w, y echa a correr M E. Si en algún momento ve aparecer w, acepta. ( ) Tengo M A que acepta, quiero M E que enumere. Tentación: FOR w * IF M A acepta w THEN Imprimir w Problema: M A puede no detenerse.
94
EnumeraciónEnumeración Solución: Construimos M E de la siguiente forma: Para k=0,1,2,... Listar las primeras k palabras de * (en orden canónico): w 1,...,w k Para cada una de ellas, Ejecutar M A con input w i durante k pasos. Si M A aceptó w i, imprimir w i. QED MT que acepta L MT que enumera L
95
Nociones equivalentes QED MT que siempre para ¿w L? lenguajes reconocibles lenguajes decidibles ¿f(w)? funciones recursivas [parciales] funciones recursivas totales ¿L? lenguajes enumerables lenguajes enumerables en orden MT
96
CodificaciónCodificación En los tres “usos” es necesario codificar la información que entregamos como input (o recibimos como output). Es importante es precisar qué codificación se usa. Pronto, para complejidad computacional, se volverá especialmente relevante (p.ej., ¡no se usa unario!). No es grave que algunos inputs no sean codificaciones válidas, siempre y cuando el conjunto de inputs válidos sea un lenguaje decidible (de modo que la MT pueda chequearlos y proceder).
97
CodificaciónCodificación Ejemplo: codificar un grafo dirigido. Una opción: codificar la cantidad de nodos, y luego dar la matriz de adyacencia. 111#011010010 AB C 0 1 1 0 1 0
98
CodificaciónCodificación Ejemplo: codificar un grafo dirigido. Otra opción: codificar la cantidad de nodos, y luego los arcos. 111#1#11#11#11#1#111#111#11 AB C Cantidad de nodos (en unario) (A,B)(B,B)(A,C)(C,B)
99
CodificaciónCodificación 111#1#11#11#11#1#111#111#11 AB C Podemos definir L G {1,#} * como el conjunto de secuencias que codifican grafos dirigidos. Ejercicios: Construir una MT que decida L G Construir una MT que enumere L G en orden canónico. Construir una MT que calcule f:L G {0,1} definida como f(G) = 1si G tiene algún circuito 0si G no tiene circuitos
100
CodificaciónCodificación Algo más complicado: codificar máquinas de Turing. Codifiquemos en unario los símbolos de y los estados de Q (el contexto evitará ambigüedad). También los movimientos del cabezal: 1 para L, 11 para R. símbolos codificación estados
101
CodificaciónCodificación Podemos codificar una transición: y codificar varias transiciones:
102
CodificaciónCodificación Podemos codificar la máquina entera dando: [cantidad de estados] ### [cantidad de símbolos en ] ### [lista de estados que son de aceptación] ### [lista de transiciones] Ejemplo: Q={q 0,q 1 }, ={a, b, } 1 11 1 11 111 (q 0,a)=(q 0,a,R) (q 0,b)=(q 0,b,L) (q 0, )=(q 1, ,L) 1#1#1#1#11 1#11#1#11#1 1#111#11#111#1 11###111###11###1#1#1#1#11##1#11#1#11#1##1#111#11#111#1
103
CodificaciónCodificación Tendremos un lenguaje L MT sobre el alfabeto {#,1}, formado por todas las posibles MT. L MT es un lenguaje decidible: no es difícil hacer una MT que reciba w {#,1} * y revise si es una descripción válida de una MT [Ejercicio!] Por lo tanto, el conjunto formado por todas las MT se puede enumerar (y en orden canónico, si queremos). ¿Para qué sirve codificar máquinas de Turing?
104
1. Definición, notación, ejemplos 2. Lenguajes de MT; funciones computables 3. Variaciones c/r a MT estándar 4. Conjuntos enumerables; codificación de inputs 5. Máquina de Turing Universal. Indecidibilidad, incomputabilidad, reducciones. Teorema de Rice. 6. Tesis de Church-Turing y los límites de la computación Máquinas de Turing
105
Máquina de Turing Universal Alan Turing, luego de definir las MT y mostrar ejemplos que implementan diversas funciones, construyó una MT muy especial: una "máquina de Turing universal" (MTU). Una MTU recibe como input: M , la descripción de una máquina de Turing M Una palabra w.
106
Máquina de Turing Universal La MTU simula la máquina M, con input w. Es decir, hace exactamente lo que hubiese hecho M al partir con input w. U input w MT M con input w
107
Máquina de Turing Universal No es difícil construir una MTU usando tres cintas: Máquina de Turing Universal Descripción de M Cinta de M Estado actual de M Cinta 2 Cinta 3 Cinta 1 p 0 1 1...
108
Otras universalidades El conjunto formado por todas las funciones recursivas f:N N es enumerable; sea ( i ) i N una enumeración de ellas. Entonces una función u:N N N es universal si u(i,n) = i (n) donde la igualdad significa que el valor está definido en ambos lados y es el mismo, o está indefinido en ambos lados. También podríamos definir un “enumerador universal”: una MT que reciba como input una descripción, y enumere L M en su impresora.
109
UniversalidadUniversalidad La noción de MT universal es poderosa. Al leer las MT de una cinta, desaparece la distinción entre datos y máquina: la misma MT puede ser vista como ambas cosas. (Hoy a eso le llamamos ”software”.) Por desgracia, una consecuencia es que aparece la posibilidad de auto-referencia, con riesgo de paradojas.
110
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. Un poco de historia. A fines del s.XIX Georg Cantor crea la teoría [intuitiva] de conjuntos. En particular, define la noción de cardinal: |A| |B| ssi existe f:A B inyectiva |A|=|B| ssi existe f:A B biyectiva Se definen los cardinales como las clases de equivalencia de la relación |A|=|B|. Para conjuntos finitos, coinciden con los n° naturales.
111
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. Si un conjunto es infinito, su cardinal ya no está en N. Teorema: Para todo A infinito, |N| |A|. Por lo tanto, |N| es el menor cardinal infinito. Se le llama 0. Se tiene 0 =|N|=|Z|=|2Z|=|Q|=|N N|=... Llegado a este punto, Cantor se pregunta: ¿será el infinito uno solo? No.
112
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. |N| |P(N)| donde P(N) son las partes de N, ie, P(N)={A:A N} Para la demostración inventa el método diagonal. Supongamos que f:P(N) N inyectiva. Entonces podemos asignarle a cada A N un n° natural. Es decir, podemos listar P(N): A 1, A 2, A 3,... Cantor hace una tabla:
113
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. A1A1 A2A2 A3A3 A4A4 Para cada A i y cada j N, indica acaso j A i. Luego define el conjunto C como la negación de la diagonal: j C ssi j A j C = { 2, 5,.... } A5A5 23451 - - - - -- -- -- - -- -- C N; sin embargo, por construcción C A i i ¡contradicción!
114
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. Al cardinal de P(N) se le llama 1, el “cardinal del continuo”, y coincide con |R|. Se puede demostrar que siempre |A| |P(A)|. A los conjuntos con cardinal menor o igual que |N| se les llama contables. Todo conjunto finito es contable.
115
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. Antes de dejar a Cantor: Hoy le llamamos “intuitiva” o “naïve” a su teoría de conjuntos (aunque la parte de los cardinales subsiste). Bertrand Russell notó que permitía definir cosas como “el conjunto de todos los conjuntos que no se incluyen a si mismos”, una noción autocontradictoria. Nótese que es una instancia del propio método diagonal.
116
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. Hacemos una tabla con los posibles conjuntos, indicando si C i C j. El conjunto de Russell se obtiene como el complemento de la diagonal. C1C1 C2C2 C3C3 C4C4 R = { C 2, C 5,.... } C5C5 - - - - -- -- -- - -- -- C 1 C 2 C 3 C 4 C 5
117
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. Consecuencia histórica: Russell arruina no sólo la teoría naïve de conjuntos, sino también el intento de Frege de axiomatizar la aritmética. Es parte de la “crisis de los fundamentos”: se intenta refundar la matemática sobre bases axiomáticas sólidas. Volveremos a eso.
118
Lenguajes indecidibles, lenguajes no reconocibles. Preludio. Consecuencia para nos: hay lenguajes no reconocibles. Todo conjunto enumerable es contable. * es contable (i.e., | * |= 0 ). Todo lenguaje es contable. {M: M es una máquina de Turing} es contable. ¿Cuántos lenguajes reconocibles existen? 00 ¿Cuántos lenguajes existen? 1 = |P( * )| Existen lenguajes no reconocibles.
119
Un indecidible, un no reconocible Usemos el método diagonal de Cantor para construir: un lenguaje que no es reconocible un lenguaje reconocible pero indecidible Primero, un paréntesis técnico:
120
(Paréntesis técnico: 2 teoremas) Teorema: L es decidible ssi L C es decidible. Demostración: Usamos la misma MT, pero cambiamos su respuesta: si aceptaba, rechaza, si rechazaba, acepta. Teorema: Si L y L C son reconocibles, entonces L es decidible. Demostración: Dado un input w, ejecutamos simultáneamente las MT de L y de L C (un paso a la vez para cada una). Tarde o temprano una de las dos se tiene que detener, y sabremos si w L. Corolario: Si L es reconocible pero L C no lo es, entonces L no es decidible.
121
Un indecidible, un no reconocible Consideremos el alfabeto = {a}, y todas las MT que reconocen lenguajes sobre . Son enumerables: llamémoslas M 0, M 1, M 2,... Cada una reconoce un lenguaje: L(M 0 ), L(M 1 ),... Nótese que todos los lenguajes reconocibles con alfabeto estarán en esa lista. Hacemos la tabla.
122
Un indecidible, un no reconocible Definamos el lenguaje L 0 como { a k : a k L(M k ) }: w1w1 w2w2 w3w3 w4w4 w0w0 - - - - -- -- -- - L 0 = { , aa,aaa,...} L diag -
123
Un indecidible, un no reconocible L 0 es reconocible: Podemos construir una MT que lo reconoce, de la siguiente forma: Dado un input w=a k, identificamos el valor de k. Encontramos M k, usando la máquina que enumera las MT. Echamos a correr M k, dándole el input w. Si se detiene, comunicamos su respuesta. aaaaaaaaaa - - - - -- -- -- - L0L0 -
124
Un indecidible, un no reconocible Por otro lado, por construcción, L 0 C no coincide con L(M k ) para ningún k. L 0 C no es reconocible aaaaaaaaaa - - - - -- -- -- - L0L0 - aaaaaaaaaa - - - - -- -- -- - L0CL0C - - - L 0 reconocible, L 0 C no. Por el corolario previo, L 0 es indecidible.
125
¿Dónde quedan? Lenguajes Lenguajes reconocibles Lenguajes decidibles Lenguajes de libre contexto Lenguajes regulares L0L0 L 0 es reconocible pero no decidible. L0CL0C L 0 C no es reconocible.
126
El alto: un lenguaje indecidible más natural ALTO: Input: una MT M, y una palabra w Problema: ¿M(w) se detiene? L alto = { ( M ,w): M se detiene, si su input es w } equivalente al problema de decisión: Teorema: el problema del alto es indecidible. Demostración: El lenguaje indecidible más conocido es
127
Problema del alto Supongamos que “D alto ” decide el problema del alto. Entonces podríamos construir la siguiente MT, “Imp”: ¿Se detiene Imp( Imp )? Sí No, No Sí. ¿M se detiene al partir con ? NO SÍ Loop Stop ¡Contradicción!
128
Problema del alto Veámoslo de otra forma. Supongamos que el alfabeto es {0,1}, y w 1, w 2,... es una enumeración de {0,1} *. Podemos suponer que cada w i codifica una MT M(w i ) (para los w i mal formados, asignamos una MT trivial). Nótese que todas las MT con alfabeto {0,1} estarán en la lista M(w 1 ), M(w 2 ),... Hacemos una tabla indicando acaso M(w i ) se detiene con input w j :
129
Problema del alto w 1 w 2 w 3 w 4 w 5 - - - - -- -- -- - - M(w 1 ) M(w 2 ) M(w 3 ) M(w 4 )...Así que nuevamente es el método diagonal. Lo que hace IMP es comportarse al revés que la diagonal, para cada input, y por lo tanto no está en la lista.
130
Otros problemas indecidibles MEMBRESÍA: Input: una MT M, y una palabra w Problema: ¿M acepta w? L mem = { ( M ,w): M describe una MT que acepta w } equivale al problema Teorema: el problema de membresía es indecidible. Demostración:
131
Problema de membresía Supongamos que el problema de membresía fuera decidible, y que lo decide una hipotética MT que llamaremos “D mem ”. Sería posible construir la siguiente MT, “Imp 2 ”: Recibe ( M ,w) Genera M’ , idéntica a M salvo que todas las transiciones indefinidas han sido ruteadas a un estado de aceptación. Ejecutamos D mem ( M ,w) y damos la respuesta. Imp 2 resolvería el problema del alto. ¡Contradicción!
132
Lenguajes no reconocibles Así que tanto L mem como L alto son indecidibles. Sin embargo, son reconocibles: en ambos casos basta con echar a correr M sobre w y esperar. Por lo tanto, L mem C y L alto C no son reconocibles.
133
ReducciónReducción Dados L 1 1 * y L 2 2 *, decimos que L 1 se reduce por mapeo a L 2 (anotado L 1 M L 2 ) si existe : 1 * 2 * computable total tal que w 1 * w L 1 (w) L 2 Teorema: Si L 1 M L 2, y L 2 es decidible, entonces L 1 lo es. Corolario: Si L 1 M L 2, y L 1 es indecidible, entonces L 2 lo es. Lo que hicimos antes fue mostrar que L alto T L mem. Es fácil demostrar que también L mem T L alto. En ese caso diremos que son equivalentes por mapeo, y escribimos L alto M L mem.
134
ReducciónReducción Ejercicio: La relación M es refleja y transitiva. M es una relación de equivalencia. L 1 M L 2 L 1 C M L 2 C Teorema: Sea L reconocible. Entonces L M L alto. Demostración: Como L mem M L alto, basta con mostrar que L M L mem, y con la transitividad concluimos. Sea M tal que L=L(M). w se tiene w L (w) = ( M ,w) L mem
135
ReducciónReducción Teorema: Sea L 1 y L 2 dos lenguajes decidibles no triviales (es decir, no son ni * ). Entonces L 1 M L 2. Demostración: Fijamos u L 2, v L 2. Definimos (w) = Moraleja: Esta noción de reducción es trivial entre lenguajes decidibles. Por eso en complejidad computacional añadiremos restricciones. usi w L 1 vsi w L 1
136
Otros problemas indecidibles típicos ACCESO A UN ESTADO: Input: M , w, y un estado q de M. Problema: ¿Partiendo con input w, pasa alguna vez M por el estado q? ALTO CON CINTA VACÍA: Input: M . Problema: Si M se ejecuta con input vacío (cinta inicialmente en blanco), ¿se detiene alguna vez? VACUIDAD: Input: M . Problema: ¿L(M)= ?
137
Teorema de Rice Que la propiedad sea “no trivial” significa que existe al menos una MT cuyo lenguaje la cumple y existe al menos una MT cuyo lenguaje no la cumple. Teorema (Rice): cualquier propiedad no trivial de los lenguajes de las MT es indecidible. Ejemplo de propiedad trivial: “L es reconocido por una MT con cantidad par de estados”. Siempre es cierto, pues podemos agregar estados de relleno.
138
Teorema de Rice: demostración Demostración: Sea T={M: L(M) cumple la propiedad). Sea M una MT con lenguaje . Sin perder generalidad, podemos suponer M T (de lo contrario, trabajamos con T C ). Sea M 1 una MT que sí está en T. Mostraremos que si T fuese decidible, entonces el problema del alto lo sería.
139
Teorema de Rice: demostración Nos dan M,w. Construimos M', una máquina que, dado un input x, hace lo siguiente: Ejecuta M con input w Ejecuta M 1 con input x Si M 1 aceptó x, aceptar. Si M 1 rechazó x, rechazar. Si M(w) se detiene, L(M’)=L(M 1 ), así que M’ T Si M(w) no se detiene, L(M’)= =L(M ), así que M’ T Si pudiéramos decidir T, sabríamos acaso M(w) para.
140
Teorema de Rice: como se usa Ejemplos: Será indecidible determinar acaso el lenguaje de una MT es finito, acaso es regular, acaso contiene dos palabras del mismo largo, etc etc. Ojo: Tienen que ser propiedades del lenguaje. Sobre propiedades de las máquinas o su comportamiento, Rice no se pronuncia. Teorema (Rice): cualquier propiedad no trivial de los lenguajes de las MT es indecidible.
141
Teorema de Rice: corolario “Mi función, ¿reconoce los RUTs válidos?” Hay funciones que reconocen RUTs válidos, otras que no... “Mi función, ¿calcula el determinante de la matriz que recibe?” Permitiría reconocer el lenguaje (A, d) donde A es una matriz y d=det(A). Corolario: la verificación de software es indecidible. Teorema (Rice): cualquier propiedad no trivial de los lenguajes de las MT es indecidible.
142
Teorema de Recursión: preludio ¿Puede una máquina de Turing reproducirse? Como el I/O son strings, lo que estamos preguntando es acaso existe una MT que escriba su propia descripción. A priori no es claro: para que un programa del tipo print x pueda escribir su propio código tendríamos que tener x=“print x” y caemos en un problema de muñecas rusas infinitas. Sin embargo, se puede.
143
Teorema de Recursión: preludio Afirmación: para todo string w, es posible construir una MT M w que, dado cualquier input, tenga output w. Demostración: trivial. M w es la máquina que Borra lo que haya en la cinta Escribe w Para M 1101 sería, p.ej., q1q1 1, R q2q2 0 , R q0q0 q3q3 1, R q4q4 0, R 1, R
144
Teorema de Recursión: preludio Afirmación: existe una MT G que, dado w, genera M w a la izquierda a la w. Sea S una máquina formada combinando M G y G MGMG G Partiendo con cinta vacía, S: - M G escribe G G G - G genera a su izquierda M G MG G MG G O sea, imprime S
145
Teorema de Recursión Esta situación es caso particular (y apoyo para la demostración) del Teorema de Recursión: Sea : * * * una función recursiva. Entonces existe una máquina de Turing M tal que para cualquier input w, M (w) = ( M ,w) (Aquí la igualdad significa que una de dos: o ambos lados no paran, o ambos paran y dejan el mismo output). Idea de la demostración:
146
Teorema de Recursión: idea de la demo : * * * recursiva M tal que M (w) = ( M ,w) Sea T la MT que calcula . M es una combinación de M G T , G y T. M G T GT Partiendo con w, en M : # w - M G T escribe G y T G T # w - G escribe M G T M G T G T # w M # w - T calcula ( M ,w) ( M ,w)
147
Teorema de Recursión :N N N recursiva y {f n } una enumeración de las funciones recursivas n tal que f n (m) = (n,m) : * * * recursiva M tal que M (w) = ( M ,w) Teniendo el teorema, la existencia de MT autorreproductoras es un corolario: Basta tomar (u,v)=u En rigor es el “2° Teorema de Recursión de Kleene”, y se aplica a cualquier sistema de cómputo con poder equivalente a las máquinas de Turing. Por ejemplo,
148
Teorema de Recursión : * * * recursiva M tal que M (w) = ( M ,w) Corolario: en todo lenguaje de programación Turing- completo, existen quines. Quine: un programa que escribe su propio código. La demostración del teorema es constructiva, así que muestra cómo obtener el quine. Por desgracia requiere que el quine ejecute el programa descrito por un string arbitrario En principio un quine en Python requerirá implementar en un intérprete de Python en Python.
149
QuinesQuines Un deporte extremo entre programadores: encontrar quines pequeños, o con propiedades extra. Ejemplo en Python: javascript, hace rotar un globo terráqueo http://aem1k.com/world/ En general siguen el esquema del siguiente “quine” lingüístico: Escriba dos veces la siguiente frase, la segunda vez entre comillas: “Escriba dos veces la siguiente frase, la segunda vez entre comillas:” s = ‘s = %r\nprint(s%s)’ print(s%s)
150
QuinesQuines Quines en docenas de lenguajes, desde Algol a Brainfuck, en www.nyx.net/~gthompso/quine.htm Más info e instrucciones para quines en www.madore.org/~david/computers/quine.html Variaciones: Uroboros, “multiquines”.
151
Teorema de Recursión: consecuencias Consecuencias del teorema de recursión: Existencia de quines Existencia de funciones definidas recursivamente (No nos meteremos ahí) Posibilidad de autorreferencia en MT ¿Autorreferencia? Al definir una MT M(w) podemos asumir que conoce M . En efecto: podemos definir (x,w) que interpreta x como la descripción de una máquina, y el teorema de recursión garantiza que M(w) para la cual x es M .
152
Teorema de Recursión: consecuencias Sea QUINE(w) el problema de determinar, dado w, acaso w es la descripción de una MT que escribe su propia descripción. Teorema: QUINE es indecidible. Corolario: es imposible detectar virus. Demostración: reduzcamos ALTO a QUINE.
153
Teorema de Recursión: consecuencias Sean M ,w para los que queremos resolver ALTO. Sea S con input u una MT que hace lo siguiente: Borra el input u Simula M sobre w Si M(w) para, entonces escribe S y para. Si pudiéramos decidir QUINE(S), podríamos determinar acaso M(w) para. (Nótese que es el teorema de recursión el que nos permite definir S con referencia a S ).
154
Teorema de Recursión: consecuencias La autorreferencia es poderosa. Por ejemplo, demostremos (de nuevo) que no existe D mem que decida MEMBRESÍA( M ,w). Si existiera, podríamos definir la siguiente MT Imp 3 (w): If D mem ( Imp 3 ,w) rechaza else acepta Imp 3 es una máquina imposible, así que D mem no existe.
155
Teorema de Recursión: consecuencias Dada una codificación de MT (como la que vimos), diremos que una MT es minimal si no existe otra con descripción más corta y que reconozca el mismo lenguaje. Definamos Min TM = { M : M es minimal} Teorema: Min TM no es reconocible. Demostración: Supongamos Min TM reconocible. Entonces existe E que lo enumera, imprimiendo MT minimales M 1, M 2,...
156
Teorema de Recursión: consecuencias Imp 5 (w): Obtener Imp 5 Ejecutar E hasta que aparezca una descripción más larga que la de Imp 5 : | M i | > | Imp 5 | Ejecutar M i (w) L(Imp 5 )=L(M i ), pero Imp 5 tiene descripción más corta M i no era minimal Contradicción! Corolario: No existe el compilador óptimo (c/r al tamaño del ejecutable).
157
Teorema de Recursión: consecuencias Otro ejemplo (un poco informal). Supongamos que Test( M ) genera un conjunto de instancias que permiten testear el buen funcionamiento de M, según algún lenguaje de especificación. Consideremos este programa para calcular f(x)=x+1 Inc(x) if x Test( Inc ) output x+1 else output 0 Inc pasa el test, pero está malo. La verificación automática de software es imposible (si le pedimos que sea perfecta).
158
Un poco de historia Hoy, “computabilidad” es el estudio de los límites de lo que puede hacer un computador. Históricamente, fue al revés. Al intentar precisar qué es lo que las matemáticas pueden calcular, apareció la idea del procedimiento de cómputo universal, mecanizable (es decir, el computador). ¿Por qué estaban los matemáticos tratando de entender eso?
159
Un poco de historia Por milenios la matemática siguió el esquema de los Elementos de Euclides: Axiomas razonamiento Teoremas Pero: Los axiomas eran lo que el autor encontrara “obvio”. El razonamiento era verbal, aristotélico. ~1850, Boole inventa la lógica matemática ~1890, Frege la perfecciona: “lógica de primer orden” ~1900, “Crisis de los fundamentos”. Muchas cosas ya no resultan “obvias”. Al tratar de axiomatizar algo tan básico como los conjuntos, aparecen paradojas.
160
Un poco de historia Programa de Hilbert: para cada teoría, tener Axiomas lógica Teoremas con axiomas que sean: consistentes: que no se pueda demostrar un teorema y a la vez su negación completos: que todo teorema verdadero se pueda demostrar decidibles: que haya un algoritmo para decidir acaso un teorema es verdadero. Problema: ¿qué significan todas esas palabras?
161
Un poco de historia Los axiomas son strings. También los teoremas Y la lógica da reglas para obtener algunos strings a partir de otros. ¿Será posible definir “verdadero” como una propiedad de un string? ¿Será lo mismo que “demostrable”? El alfabeto para los strings será ~ x R 1,...R k } Aquí la x se usa para las variables, que se llamarán “x”, “xx”, “xxx”, etc., para evitar la necesidad de un alfabeto infinito. Sin embargo las escribiremos x 1, x 2, etc. Los R i son relaciones, no necesariamente binarias. De modo que habrá cosas como R 1 (x 1,x 3 ), R 2 (x 3 ), R 3 (x 1,x 2,x 5 ).
162
Fórmulas de primer orden ~ x R 1,...R k } Una “fórmula bien formada” se define de la forma intuitiva que alguna vez aprendieron. R 1 (x 1 ) R 2 (x 1,x 2,x 3 ) x 1 ( R 1 (x 1 ) R 2 (x 1,x 2,x 3 ) ) x 1 x 2 x 3 ( R 1 (x 1 ) R 2 (x 1,x 2,x 3 ) ) Los cuantificadores “ligan” variables en todo el ámbito en que se apliquen. Las variables no ligadas son “libres”. Una fórmula sin variables libres es una “proposición”. Ejemplo: la tercera.
163
Proposiciones y modelos Hasta aquí todo es sintaxis. Para darle contenido, hay que agregar un modelo. Un modelo M=(U,R 1,...R k ) consiste en: Un universo U (donde “viven” las variables) Interpretaciones concretas para los R i, como funciones que toman tuplas de elementos de U, y entregan “V” o “F”. Al menos la relación “=“ tiene que estar. Dado un modelo, una proposición puede ser verdadera o falsa. Por ejemplo, si R 1 (x 1,x 2 ) es “x 1 es menor estricto que x 2 ”, x 1 x 2 R 1 (x 2,x 1 ) NZ será falsa si M=(N,R 1 ), y verdadera si M=(Z,R 1 ).
164
Proposiciones y modelos Dado un modelo M, definimos Teo(M) * como el conjunto de todas las proposiciones que son verdaderas en M. Si C es un conjunto de modelos, definimos Teo(C) como las proposiciones que son verdaderas en todos ellos. Por otro lado, dada una proposición , definimos Mod( ) como el conjunto de todos los modelos en los cuales es verdadera. Teo(Mod( )) serán entonces las proposiciones que son verdaderas en todo modelo en el cual sea verdadera. Si Teo(Mod( )), decimos que es una consecuencia válida de , y lo anotaremos
165
Proposiciones y modelos Pero hay otra forma de obtener consecuencias: si afirmamos que es verdadera y aplicamos algún método de deducción, podemos deducir que cierta es verdadera. El método de deducción que conocen: cálculo de predicados. Se usan las identidades de la lógica, el modus ponens, etc., así como algunas proposiciones que son siempre válidas (por ejemplo, “ x (x=x)” ). Si puede deducirse a partir de , anotaremos Observación: el lenguaje { : } es reconocible. En efecto: podemos ir listando todas las consecuencias lógicas, y si en algún momento aparece , aceptamos.
166
CompletitudCompletitud Teorema de completitud de Gödel (1929): Esa fue una buena noticia: si representa un conjunto de axiomas (pegados con “y”), entonces la lógica que conocemos permite demostrar cualquier consecuencia inevitable de ellos.
167
Buenas y malas noticias ¿Qué hay de la lista de Hilbert? ¿Consistencia, completitud, decidibilidad? Por ejemplo, ¿será Teo(M) un lenguaje decidible? N Hay casos en que sí: por ejemplo, para M=(N,+). [Teorema 6.12 en Sipser; es vía autómatas finitos.] Pero en general no: NN 1er Teorema de Incompletitud de Gödel: Para cualquier conjunto de axiomas ={ 1,..., k } consistente cuyo modelo sea (N,+, ), existe una proposición Teo(N,+, ) que no se deduce de .
168
IncompletitudIncompletitud Idea de demostración: NDada una máquina de Turing M y un input w, es posible construir una fórmula M,w (x) en el lenguaje de (N,+, ) tal que x M,w (x) ssi M(w) se detiene M(w) para o no para; por lo tanto, x M,w (x) es V ó F. Si fuera completo, podríamos listar { : } hasta encontrar una demostración de x M,w (x) o de su negación. Pero con eso estaríamos resolviendo ALTO(M,w). ¡Contradicción!
169
IncompletitudIncompletitud ¿Cómo se construye M,w (x)? La idea es que M,w (x) “diga” que x (decodificado de alguna forma) representa una historia de cómputo M(w) que para. Podemos representar la MT como un número (por ejemplo, la codificación que vimos podría dar un n° binario, en lugar de un string de 1 y #). Podemos representar configuraciones (del tipo “0110q 2 101”) como números. Es posible escribir una fórmula db(x,i) que sea V ssi el i- ésimo dígito binario de x es 1.
170
IncompletitudIncompletitud Es posible escribir una fórmula f(m,x,y) que valga V ssi la configuración y se obtiene a partir de x con la MT m. Es posible combinar los números que representan varias configuraciones en uno solo. Por ejemplo, h=2 x 3 y 5 z. Es posible escribir una fórmula f(m,h) que valga V ssi h representa una historia de cómputos válidos de la MT m. Es posible escribir una fórmula f(m,h) que valga V ssi la última configuración descrita en h hace que m se detenga. &cétera. Es largo y técnico, pero posible (y ese es el punto).
171
IncompletitudIncompletitud Gödel es pre-Turing. ¿Cómo lo hizo él entonces? Codificó variables y símbolos lógicos usando números. Codificó propiedades de las fórmulas (como el hecho de que una se deduzca a partir de otra) como propiedades de los números que las representan. Construyó (vía método diagonal) una fórmula S que dice “S no se puede demostrar a partir de “. Si S se puede demostrar, entonces es inconsistente. Si S no se puede demostrar, entonces N S Teo(N,+, ) S { : }
172
IncompletitudIncompletitud Se puede construir algo como S usando el teo. de recursión. Sea M una MT que hace lo siguiente: Construir la proposición M = ~( x M, (x) ) Listar { : } hasta hallar una demostración de M Si la halló, aceptar Si M encuentra una demostración de M, entonces se detiene, con lo que M sería falsa, y sería inconsistente. Si es consistente, entonces eso no ocurrirá, y M correrá eternamente. Pero entonces N M Teo(N,+, ) M { : }
173
IncompletitudIncompletitud De cierta forma lo que Gödel demuestra es que si fuera completo para la aritmética, sería decidible. Y como ALTO se puede codificar en aritmética, eso es imposible. Ojo: indecidibilidad no implica, por si sola, incompletitud: Axiomas de grupo : completos, pero indecidibles. Geometría euclidiana : completa y decidible. La clave suele estar en la posibilidad de autorreferencia: RC(R,+, ) y (C,+, ) son decidibles. R(R,+, ,exp) se conjetura decidible. CR(C,+, ,exp) y (R,+, ,seno) son indecidibles. Z e 2 ix y sen( x) valen 1 ssi x Z : eso trae de vuelta la combinatoria y la autorreferencia.
174
ComputabilidadComputabilidad Gödel no demostró indecidibilidad, porque faltaba precisar qué significaba que algo fuera “decidible” (i.e., “computable”). La pelota queda rebotando: su construcción es casi código. Implícitamente incluye subrutinas, punteros, y varias otras cosas que aparecen en los lenguajes de programación. Tras Gödel, varios intentan capturar la noción general de “computable”.
175
ComputabilidadComputabilidad Alonzo Church: Define el -cálculo (véase: LISP). Demuestra que existen problemas indecidibles. Afirma la “tesis de Church”: que todo cálculo efectivamente realizable se puede escribir en -cálculo. Gödel no le cree. Alan Turing: Define las máquinas de Turing. Define la MT universal. Demuestra que existen problemas indecidibles. Demuestra que las MT equivalen al -cálculo. Gödel se convence.
176
ComputabilidadComputabilidad Todo eso ocurría en 1936. Además ~1934 Gödel define las funciones recursivas. 1936 Emil Post crea un modelo de cómputo muy similar al de Turing, y resulta ser equivalente. En las décadas siguientes se crean muchos modelos más; todos resultan iguales (o inferiores) a las MT. “Tesis Church-Turing”, sin retadores hasta hoy: todo procedimiento efectivo de cálculo se puede implementar en una MT (o en -cálculo, etc etc.) Ver Cap. 7, “The Grand Unified Theory of Computation”, del libro de Moore. Especialmente 7.6, “Computation Everywhere”.
177
Demostraciones y código Nótese que: Gödel para su teorema trata de capturar la noción más general de demostración... pero eso decanta en una noción general de cómputo. No es casual. Existe una relación estrecha entre “algoritmo” y “demostración”. Hay versiones concretas de eso (Google: correspondencia de Curry-Howard). Se explota en softwares de verificación automática de demostraciones (Google: Coq). No profundizaremos por ahí.
178
OráculosOráculos Turing post 1936: se doctora en EEUU, con Church. ¿Qué investiga ahí? Investiga la indecidibilidad relativa. Por ejemplo: si pudiésemos resolver el problema del alto, ¿qué problemas podríamos resolver? ¿Cuáles no? Tal como pronto (en complejidad computacional) veremos que hay problemas más decidibles que otros, resulta que también hay problemas más indecidibles que otros. Para estudiar eso, Turing introdujo la noción de oráculo.
179
OráculosOráculos Una MT con oráculo (aka MTO) es una máquina de Turing a la que le damos la posibilidad de “adivinar” la membresía en un lenguaje dado (digamos, “A”). La MTO tiene una cinta especial, inicialmente en blanco, y tres estados especiales q ?, q sí, q no. Llamemos w E al área de trabajo de la cinta especial en un momento dado. Es una forma de decir que la MT puede “preguntarle cosas” a un oráculo que sabe decidir A, en tiempo instantáneo. Por lo general se indica como superíndice: M A. (q ?,) = q sí si w E A q no si w E A ¡w E A!
180
OráculosOráculos Si B es un conjunto de lenguajes, entonces MTO B serán las MT que pueden definirse con algún oráculo en B. REC B = { L: existe una MTO con oráculo B que decide L} RE B = { L: existe una MTO con oráculo B que reconoce L} Decimos que L es decidible, o reconocible, con respecto a B. Además: coRE B = { L: existe una MTO con oráculo B que reconoce L C } REC y RE corresponden a los lenguajes decidibles (“recursivos”) y reconocibles (“recursivos enumerables”) que ya conocemos.
181
OráculosOráculos Reducción por mapeo: dados L 1 1 * y L 2 2 *, L 1 M L 2 si : 1 * 2 * : w 1 *, w L 1 (w) L 2. Si L 2 es decidible, entonces L 1 lo es. Diremos que L 1 se Turing-reduce a L 2, anotado L 1 T L 2, si L 1 es decidible con respecto a L 2. Obs.: L T L C es cierto para cualquier L. Teo.: Si L 1 M L 2, entonces L 1 T L 2. La recíproca en general no es cierta: L C alto T L alto Si L C alto M L alto, L C alto sería reconocible y sabemos que no lo es. Dijimos: + Si L 2 es reconocible, entonces L 1 lo es.
182
OráculosOráculos Además: La relación T es transitiva y refleja. Si L 1 T L 2 y L 2 es decidible, entonces L 1 es decidible. L 1 y L 2 son Turing-equivalentes, L 1 T L 2, si L 1 T L 2 y L 2 T L 1 El grado de Turing de un lenguaje L es su clase de equivalencia en la relación T. Los lenguajes decidibles forman una clase de equivalencia, y por lo tanto son un grado de Turing. L alto T L mem, así que tienen el mismo grado de Turing.
183
Grados de Turing Nótese que: Para todo L reconocible, L T L alto. Decimos que L alto es “ T -completo” para los lenguajes reconocibles, y su grado de Turing es maximal entre ellos. ¿Existirán lenguajes con grado intermedio? Sí. No lo demostraremos, pero existen problemas reconocibles, indecidibles, que no son equivalentes al Alto. De hecho, hay infinitos grados intermedios.
184
Grados de Turing ¿Existirán grados de Turing mayores al de L alto ? Sí. Demostración: Se repite la construcción que hicimos con el método diagonal para obtener ejemplos de un lenguaje reconocible pero indecidible (que era el de la diagonal) y uno no reconocible (su complemento). La única salvedad es que en lugar de decir “enumeramos todas las MT...” decimos “enumeramos todas las MTO con oráculo L alto...” Se obtiene un lenguaje en RE ALTO \REC ALTO + otro que no pertenece a RE ALTO.
185
Grados de Turing O, similarmente, podemos definir el problema del alto de segundo orden (ALTO 2 ): ALTO 2 : Dada una MTO M con oraculo L alto y un input w, determinar acaso M(w) para. La construcción de máquina imposible sigue funcionando, sólo que ahora las M con las que trabaja son MTO. ¿M se detiene al partir con ? NO SÍ Loop Stop Y tal como L alto es completo para los lenguajes reconocidos por MT, L alto 2 es completo para los reconocidos por MTO alto.
186
RelativizaciónRelativización En otras palabras, esas demostraciones son insensibles a la presencia de oráculos. Se dice que se “relativizan”. Hay muchas cosas que se relativizan. Por ejemplo, el teorema de recursión (se le puede agregar un oráculo B a todas las MT que menciona, y sigue válido). Otro ejemplo: L REC B ssi L C REC B. Otro: si L RE B y L C RE B, entonces L REC B. Volveremos a esto en complejidad computacional.
187
Jerarquía aritmética Ya dijimos que existen lenguajes indecidibles, incluso con un oráculo para el alto. Pero la cosa no termina ahí. Se definen 0 = {L:L es decidible} 1 = {L:L es reconocible} y para k 1 k = RE k-1 = {L:L es reconocible con respecto a k-1 } Además se definen k = coRE k-1 = {L:L C k } y k = REC k-1 = {L:L es decidible con respecto a k-1 } (para k 1; a dedo se define 0 = 0 ).
188
Jerarquía aritmética 0 = decidibles 1 = RE 0 = reconocibles 1 = coRE 0 = co-reconocibles k = reconocibles con oráculo en k-1 (o, equiv., en k-1 ) k = co-reconocibles con oráculo en k-1 (o, equiv., en k-1 ) Nótese que: Para todo k, k k, y k k Para todo k, k = k k Para todo k, k k+1, y k k+1 Y en particular k k+1
189
Jerarquía aritmética 1 = reconocibles 22 1 =decidibles = 0 = 0 = 0 22 22 1 = co-reconocibles 33 33 33 L alto 2 2 \ 1 ; su complemento 2 \ 1. Se pueden definir ALTO 3, ALTO 4,... Todas las inclusiones aquí son propias. ALTOALTO C ALTO 2 ¿Habrá problemas “naturales” que vivan por allá arriba?
190
Caracterización alternativa de RE y coRE Antes de eso, un rodeo: volvamos a las clases “bajas” de lo reconocible (RE) y lo co- reconocible (coRE). Nótese que esa parte, vista como función de M,w y t, es decidible. Esto resulta ser general. RE REC coRE ALTOALTO C Los problemas en RE\REC que vimos compartían cierta forma: L alto : { (M,w): M(w) para } = { (M,w): t M(w) para en tiempo t} L mem : { (M,w): M(w) acepta} = { (M,w): t M(w) acepta en tiempo t}
191
Caracterización alternativa de RE y coRE Un predicado computable es una función computable del tipo R(x,y): * * {V,F}. R(w,t) ( ): Si L es de la forma { x: y R(x,y) }, construimos M L que recorra todos los posibles y, aceptando cuando encuentre uno que haga R verdadero. REC coRE RE Teorema: L RE ssi L= { x: y R(x,y) } para algún pred.comp. R Dem.: ( ): Sea M la MT que reconoce L. Entonces w L ssi M(w) acepta L = { w: t: M(w) acepta en tiempo t}
192
Jerarquía aritmética L RE ssi L = { x: y R(x,y) } para algún R. Al y se le llama certificado : Es algo que puedo darle a un incrédulo para convencerlo de que x efectivamente está en L. El incrédulo podrá chequear que efectivamente R(x,y) Los lenguajes reconocibles entonces son aquellos en los que es posible, para cualquier palabra del lenguaje, dar un certificado de su pertenencia. REC coRE RE
193
Jerarquía aritmética Los lenguajes co-reconocibles (coRE) son aquellos en que se puede dar un certificado para los casos en que x no está en el lenguaje. En particular, si L coRE\RE, significa que no es posible dar un certificado finito para mostrar que x L. ¿De qué forma son los lenguajes de coRE? L coRE cuando L C RE O sea, cuando L C = { x: y R(x,y) } para algún R L = { x: y ~R(x,y) } (y el ~ da lo mismo: si R es un predicado, ~R también) REC coRE RE L RE ssi L = { x: y R(x,y) } para algún R.
194
Jerarquía aritmética En términos de la jerarquía, 1 = lenguajes de la forma { x: y R(x,y) } 1 = lenguajes de la forma { x: y R(x,y) } ¿Qué pasa si agregamos cuantificadores? Apilar cuantificadores del mismo tipo no tiene efecto: decir que “ x y...” es lo mismo que decir “ z: z=x#y...”. Ídem con varios “ ”. Pero alternar cuantificadores de tipos distintos si afecta.
195
Jerarquía aritmética Sea L de la forma { x: y z R(x,y,z) } Y viceversa. Se tiene 1 = lenguajes de la forma { x: y R(x,y) } 1 = lenguajes de la forma { x: y R(x,y) } 2 = lenguajes de la forma { x: y z R(x,y,z) } 2 = lenguajes de la forma { x: y z R(x,y,z) } 3 = lenguajes de la forma { x: y z w R(x,y,z,w) } 3 = lenguajes de la forma { x: y z w R(x,y,z,w) }...etc L 2
196
Jerarquía aritmética Ejemplo: El problema de Totalidad consiste en determinar acaso una MT M se detiene para todos sus inputs. L TOT ={ M : w t M(w) para en tiempo t} Totalidad está en 2. De hecho, es completo para 2 : Sea A 2. Entonces R tal que x A y z R(x,y,z) Lo resolvemos invocando al oráculo de Tot para esta MT: M x (y): z=0 while ~R(x,y,z) z = z+1 aceptar
197
Jerarquía aritmética Finitud: dada M, ¿es L(M) finito? Se puede escribir como L FIN = { M : n w |w| n M(w) no acepta } L FIN = { M : n w |w| n t ~( M(w) acepta en t pasos} L FIN = { M : n w |w| n t R(n,w,t)} L FIN = { M : n w |w| n t R(n,w,t)} L FIN = { M : n w,t |w| n R(n,w,t)} R(n,w,t) = { M : n w,t R’(n,w,t)} R’(n,w,t) Finitud está en 2. (De hecho es 2 -completo). Co-finitud: dada M, determinar si L(M) C es finito. Ejercicio: Co-finitud está en 3.
198
Jerarquía aritmética 11 22 1 =decidibles = 0 = 0 = 0 22 22 11 33 33 33 ALTOALTO C TOTFIN CO-FIN L(M 1 )=L(M 2 ) L(M)=
199
Jerarquía aritmética Cuando decimos que un lenguaje está en la jerarquía aritmética (“arithmetical hierarchy”), estamos diciendo que pertenece a ¿Por qué se llama jerarquía “aritmética“ ? Una fórmula de primer orden en aritmética se escribe con ~ x y,z,..., además de los números, + y Siempre es posible trasladar los cuantificadores al principio de la fórmula (se habla de forma “PRENEX”). Así que la jerarquía clasifica todos los conjuntos que la aritmética puede definir con fórmulas de primer orden.
200
Jerarquía aritmética En particular, Teorema “de indefinibilidad de la verdad” de Tarski: N Teo(N,+, ) AH ¿Estarán todos los lenguajes en AH? No, pues sigue siendo una colección enumerable... |AH|= 0 Es decir: la aritmética no puede definir el conjunto de las sentencias verdaderas de la aritmética. Se generaliza para cualquier lenguaje formal suficientemente poderoso. Y desde ahí, es filosofía.
201
Teoría algorítmica de la información Haremos una pasada rápida por [lo básico de] la teoría algorítmica de la información. En teoría de probabilidades, no tiene sentido decir que una secuencia de resultados es “más aleatoria” que otra: sólo se puede hablar de la aleatoriedad del proceso que la genera. Como resultado de una moneda, las siguientes secuencias son igualmente probables: CCCCCCCCCC, CSCSCSSSCS, CSCCSCSSCC.
202
Teoría algorítmica de la información O estas: 01010101010101010101010 100111011101011100100110 110100110010110100101100 Pero nuestra intuición nos dice que la primera es menos aleatoria. ¿Por qué? Porque sigue un patrón claro. En otras palabras, porque podemos dar una descripción corta de la secuencia. De la tercera también: el i-ésimo dígito es 1 cuando la expansión binaria de i tiene una cantidad impar de unos.
203
Teoría algorítmica de la información Idea: la cantidad de información contenida en un string se puede medir como la manera más corta de describirlo. Es una noción muy amplia; permite comparar cosas tan dispares como strings, dibujos, objetos físicos, modelos, lo que sea. Se relaciona, por ejemplo, con el principio de minimum description length: la mejor hipótesis para un conjunto de datos es la que más los comprime (formaliza la “navaja de Occam”). Depende, para bien o mal, del lenguaje en que se haga la descripción.
204
Teoría algorítmica de la información Para hacer una teoría, se opta por descripciones binarias de strings binarios. ¿Y cómo hacemos que un string describa a otro? Con máquinas de Turing! Consideremos una codificación binaria de máquinas de Turing, como la que vimos. Sea x {0,1} *. Su descripción más corta, d(x), será el string M,w más corto tal que M(w) se detiene con output x. Su complejidad de Kolmogorov será K(x)=|d(x)|
205
Teoría algorítmica de la información Teorema: c tal que x {0,1} *, K(x) |x| + c O sea, la información en x no es mucha más que |x|. Demostración: Sea M 1 la máquina que se detiene de inmediato. M 1 (x)=x, así que M 1,x es una descripción de x. K(x) M 1,x = | M 1 | + |x|
206
Teoría algorítmica de la información Teorema: c tal que x {0,1} *, K(xx) |x| + c O sea, la información en xx no es mucha más que la que hay en x. Demostración: Sea M 2 una máquina que Recibe M,w Escribe M(w) dos veces. Entonces M 2,d(x) es una descripción de xx. K(xx) | M 2,d(x) | | M 2 | + |d(x)| = | M 2 | + K(x)
207
Teoría algorítmica de la información Teorema: c tal que x,y {0,1} *, K(xy) 2K(x) + K(y) + c O sea, la información en xy está más o menos acotada por la de x e y sumadas. Idea de demostración: Sean d(x)= M x,w x , d(y)= M y,w y . Sea M 3 la MT que recibe w y lo separa en M x,w x y M y,w y ; luego imprime M x (w x ) seguido de M y (w y ). Idealmente uno quisiera K(xy) | M 3,d(x)d(y) | | M 3 | + |d(x)| + |d(y)| y concluiríamos “K(xy) K(x) + K(y) + c”.
208
Teoría algorítmica de la información Teorema: c tal que x,y {0,1} *, K(xy) 2K(x) + K(y) + c ¿Por qué falla? Se puede mejorar, bajando ese K(x) extra a log(K(x)) pero no se puede eliminar. Teorema: c tal que x,y {0,1} *, K(xy) K(x) + K(y) + log(K(x)) + c Porque M 3 necesita separar d(x) // d(y) Para eso duplicamos los bits de M x,w x (será algo de la forma “001111001100...”), y luego usamos un “01” para indicar que lo que sigue es M y,w y .
209
Sin demostración (aquí) Teorema: x,y {0,1} *, K(x,y) = K(x) + K(y|x) + O(log K(x,y)) Donde K(y|x) es el tamaño de la máquina mínima que genera y, si es que además conoce x. Corolario: K(x)-K(x|y) K(y)-K(y|x) (donde indica “=, salvo por posible término logarítmico”) Podemos ver K(x)-K(x|y) como “lo que y sabe sobre x”. Es el “Teorema de simetría de la información”, demostrado por Levin & Kolmogorov en 1970. [En teoría clásica de la información existe un resultado análogo, pero con entropía e información mutual.]
210
Teoría algorítmica de la información ¿Por qué hacerlo con máquinas de Turing? ¿Por qué no definir K(x) como el largo del menor programa en Python que escribe x? Se puede. Dado un lenguaje de programación P, definamos d P (x) como el menor programa en P que escribe x, y K P (x)=|d P (x)|. Teorema: Para todo lenguaje P, c tal que x {0,1} * K(x) K P (x) + c Idea de dem.: Sea M una MT que interpreta su input como un programa en P, y lo ejecuta. Entonces M,d P (x) será una descripción de x.
211
Teoría algorítmica de la información Nótese que si P es Turing-completo, el argumento funciona para ambos lados, así que también habrá c’ tal que K P (x) K(x) + c’. Por lo tanto, K(x) y K P (x) difieren a lo más en una constante aditiva, que depende de P (pero no de x). ¿Interesa el valor exacto de K(x)? Por lo general no; lo que se estudia son propiedades asintóticas. Más nos vale, porque...
212
Teoría algorítmica de la información Teorema: K(x) no es computable. Demo.: Usamos el teorema de recursión. Supongamos que existe una MT que calcula K(x). Definimos una MT S que hace lo siguiente: For i=1,2,... For x: |x|=i If K(x) > | S | print x; stop S escribirá un número cuya K es mayor que | S |: contradicción! Corolario: no existe el “zip” perfecto.
213
Teoría algorítmica de la información Teorema: K(x) no es computable. S encarna la “Paradoja de Berry”: ¿cuál es “el menor entero positivo que no se puede definir en menos de quince palabras”? La incomputabilidad de K(x) tiene que ver con la dificultad de encontrar descripciones compactas de algo que vemos como complejo o aleatorio. 1415926535897932384626433832795028 84197169399375105820974944592307816 40628620899862803482534211706798214 8086513282306647093844609550582231 725359408128481117450284102701938521 10555964462294895493038196442881097 56659334461284756482337867831652712
214
Strings incomprimibles Decimos que x es incomprimible si K(x) |x|. Teorema: Para todo n, existe x incomprimible, |x|=n O sea: hay strings incomprimibles de cualquier longitud. Demo.: Existen 2 n strings de largo n. Existen a lo más 1+2+4+...+2 n-1 = 2 n -1 descripciones de largo < n. Al menos un string queda sin descripción mínima < n.
215
Strings incomprimibles Teorema: Para todo n y todo c n, la probabilidad de que x de largo n escogido al azar tenga K(x) n-c es al menos 1-1/2 c. O sea: la mayoría de los strings son incomprimibles. Demo.: # de strings de largo n: 2 n. # de descripciones de largo n-c 2 n-c -1 Ergo, si escojo x al azar la probabilidad de K(x)<n-c es a lo más
216
Incomprimible = Aleatorio Una idea a priori extraña, pero en retrospectiva evidente: los strings con más contenido de información son los que nos parecen más aleatorios. En probabilidades (o información à la Shannon) la entropía mide “desorden”, pero a la vez “contenido de información”. Aquí es definición: se define “x es aleatorio” [en el sentido de Kolmogorov] como sinónimo de “x es incomprimible”. x
217
Incomprimible = Aleatorio Una palabra infinita w 1 w 2... se dice “aleatoria” [en el sentido de Kolmogorov] si c n, se tiene K(w 1 w 2...w n ) > n-c. Se puede demostrar que una palabra infinita aleatoria pasa todos los tests de aleatoriedad estadística. Una gracia: como K(x) depende del modelo de cómputo a lo más en una constante aditiva, la definición de arriba no depende del modelo de cómputo. La mala noticia: dado incluso un string finito x... Teorema: La propiedad “x es aleatorio” es indecidible. De hecho es peor todavía.
218
Verdades Aleatorias Teorema de Incompletitud de Chaitin: Para cualquier axiomatización consistente de la aritmética, existe un N tal que la afirmación “K(x) es aleatorio” es indemostrable para todo x con |x|>N. O sea: A lo más se puede demostrar que una cantidad finita de strings es aleatoria. Los strings largos, si es que son aleatorios, no se pueden demostrar aleatorios. Sin embargo sabemos que para la graaaan mayoría de ellos, la afirmación es cierta! Sin embargo todo esto se usa. Como herramienta teórica, y también usando winzip (por ejemplo) como proxy de K(x).
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.