Modelos Abstractos de C´alculo Elvira Mayordomo C´amara 18 de enero de 2008
Cap´ıtulo 0
Presentaci´ on La asignatura de Modelos Abstractos de C´alculo consta de dos partes: computabilidad (tambi´en llamada recursividad) y complejidad, cada una de ellas ocupa aproximadamente un 50 % de las clases de teor´ıa y problemas. Parte I: Computabilidad. Los contenidos fundamentales son los siguientes: Existen problemas que no se pueden resolver con ning´ un algoritmo. Veremos ejemplos importantes de estos problemas “irresolubles” y m´etodos para saber que un problema es de este tipo. Se conjetura que cualquier noci´on razonable de algoritmo da lugar al mismo conjunto de problemas resolubles. EJERCICIOS Escribir los siguientes procedimientos ada (y probarlos): 0.1. Function check(f:file type; n:integer) return boolean; {Pre: f es un fichero que contiene un programa ada que lee de teclado un u ´nico valor entero. Post: devuelve true si el programa contenido en f con entrada n termina; devuelve false si se queda “colgado”} 0.2. Procedure fermat(n:in integer; x,y,z:out integer); 1
´ CAP´ITULO 0. PRESENTACION
2
{Pre: n ∈ IN Post: x, y, z ∈ IN tales que xn + y n = z n } Parte II: Complejidad. En esta parte veremos: C´omo medir la velocidad de un algoritmo en funci´on del tama˜ no de la entrada. Existen problemas que se pueden resolver en tiempo razonable y otros no, se trata de los problemas tratables e intratables. Nos dedicaremos a los segundos. EJERCICIO Escribir un programa en ada que resuelva el siguiente problema (atenci´on a la eficiencia): 0.3. Se trata de un viajante que necesita recorrer n ciudades en el menor tiempo posible. Disponemos de la distancia correspondiente a cada pareja de ciudades, d(i, j) es la distancia de la ciudad i a la j, las ciudades est´an numeradas correlativamente de 1 a n. Escribir un programa que dados n y d(i, j) para todo i, j encuentre un camino (una ordenaci´on de las n ciudades) de forma que la suma de las distancias recorridas en ese camino sea la m´ınima posible.
Bibliograf´ıa [Jones] N. Jones: “Computability and Complexity From a Programming Perspective”, MIT press, 1997. [Cu80] N.J. Cutland: “Computability: An Introduction to Recursive Function Theory”, Cambridge University Press, 1980. [So87] R. Soare: “Recursively Enumerable Sets and Degrees”, SpringerVerlag, 1987. [LP81] H.R. Lewis, C.H. Papadimitriou: “Elements of the Theory of Computation”, Prentice-Hall, 1981. [GJ78] M. Garey, D. Johnson: “Computers and Intractability: A Guide to the Theory of NP-Completeness”, Freeman, 1978. [HMU02] J.E. Hopcroft, R. Motwani, J.D. Ullman, “Introducci´on a la Teor´ıa de Aut´omatas, Lenguajes y Computaci´on”, AddisonWesley, 2002. ` [SACL01] M. Serna, C. Alvarez, R. Cases, A. Lozano: “Els l´ımits de la computaci´o. Indecidibilitat i NP-completesa”, Edicions UPC, 2001.
3
Cap´ıtulo 1
Preliminares. Numerabilidad y diagonalizaci´ on Referencia: Cap´ıtulo 1 de [LP81]. En el estudio de la calculabilidad y la complejidad, es imprescindible formular afirmaciones rigurosas y relacionarlas mediante deducciones rigurosas. En este contexto el lenguaje matem´atico nos permitir´a expresarnos con precisi´on y agilidad. Este cap´ıtulo contiene un repaso de la notaci´on y conceptos principales de l´ogica, demostraciones, teor´ıa de conjuntos, lenguajes y alfabetos, y funciones, adem´as de una breve introducci´on a la teor´ıa de cardinales y a la diagonalizaci´on.
1.1.
Preliminares
1.1.1.
Notaci´ on l´ ogica: proposiciones
Una proposici´on o enunciado es una frase declarativa ´o sentencia que podemos clasificar como cierta o falsa, por ejemplo “α es la primera letra del alfabeto griego”, o “el sol se pone por el este”. Si P y Q son dos proposiciones, podemos formar otras mediante las conectivas l´ogicas ¬, ∧, ∨, ⇒, ⇔:
4
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
Notaci´on formal ¬P P ∨Q P ∧Q P ⇒Q P ⇔Q
5
Significado informal “no P ” “P ´o Q” “P y Q” “P implica Q” ´o “si P entonces Q” ´o “P s´olo si Q” “P si y s´olo si Q” ´o “P es equivalente a Q”
La asignaci´on de valores de verdad a las proposiciones compuestas mediante las conectivas ∧, ∨, ¬ corresponde a la interpretaci´on usual de las palabras y, o y no, respectivamente. El valor de verdad de la proposici´on P ⇒ Q equivale al de (¬P ) ∨ Q de manera que la asignaci´on de valores de verdad P = cierto y Q = f also es la u ´nica que hace falsa P ⇒ Q. La proposici´on P ⇒ Q es equivalente a (¬Q) ⇒ (¬P ). P ⇒ Q NO es equivalente a Q ⇒ P . No es equivalente decir “Si Juan es ingl´es entonces Juan es europeo” a decir “Si Juan es europeo entonces Juan es ingl´es”. El valor de verdad de P ⇔ Q corresponde al de (P ⇒ Q) ∧ (Q ⇒ P ). Para ahorrarnos par´entesis estableceremos precedencias entre las diferentes conectivas. En orden de precedencia decreciente tenemos: ¬, ∧, ∨, ⇒, ⇔ 1.1.2.
Notaci´ on l´ ogica: predicados
Un predicado es una sentencia que contiene una ´o m´as variables. Cada variable puede tomar valor en un cierto universo. Por ejemplo, si x es un entero (variable en el universo de los enteros), el predicado P (x) = (x es primo ∧ (x ≤ 100)) cumple que P (19) = cierto y P (20) = f also. Cuando todas las variables se sustituyen por valores, el predicado se convierte en una proposici´on. Por ejemplo, P (33) = (33 es primo ∧ (33 ≤ 100)) es una proposici´on falsa. Un predicado como el anterior, que contiene s´olo una variable, se llama propiedad. Si P (x) es cierto, decimos que x
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
6
tiene o cumple la propiedad P ; si es falso, decimos que x no tiene o no cumple la propiedad P . Otra forma de obtener proposiciones a partir de predicados consiste en cuantificar las variables. Si tenemos un predicado P (x), podemos construir dos proposiciones nuevas mediante el cuantificador existencial ∃ y el cuantificador universal ∀ de la siguiente forma: Notaci´on formal ∃xP (x) ∀xP (x)
Significado informal Para alg´ un x, P (x) Para todo x, P (x)
La proposici´on ∃xP (x) es cierta si P (x) es cierto para alg´ un valor de x, mientras que ∀xP (x) es cierta si P (x) es cierto para todo posible valor de x. En el caso del cuantificador existencial, se introduce tambi´en el s´ımbolo 6 ∃, que permite abreviar el enunciado ¬(∃P (x)) con 6 ∃P (x). El s´ımbolo ∃ se puede considerar como la extensi´on de ∨ al caso infinito (y ∀ como extensi´on de ∧). El universo de valores que puede tomar una variable (los n´ umeros naturales, las palabras sobre un determinado alfabeto, etc) depende del predicado concreto y es usual no especificarlo si se puede deducir f´acilmente del contexto (por ejemplo, en el caso del predicado P (x) del ejemplo anterior). Por otro lado, podemos escribir ∃x, y, z ∈ IN+ x2 + y 2 = z 2 para establecer claramente que x, y, z toman valores naturales positivos. Tambi´en podemos escribir ∀n > 2 P (n) para indicar que n toma valores naturales mayores que 2. Existen toda una serie de equivalencias entre sentencias, por ejemplo las llamadas leyes de Morgan: 1. ¬(P ∧ Q) ⇔ (¬P ) ∨ (¬Q) 2. ¬(∀xP (x)) ⇔ ∃x ¬P (x) y las sim´etricas que se obtienen intercambiando las conectivas ∧ y ∨, en 1, y los cuantificadores ∀ y ∃, en 2.
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
1.1.3.
7
Demostraciones
Un teorema es cualquier proposici´on para la que existe una demostraci´on. A lo largo de esta asignatura utilizaremos algunos m´etodos de demostraci´on: 1. Demostraci´on directa: a partir de una serie de teoremas ya conocidos deducimos un nuevo teorema. 2. Reducci´on al absurdo: para demostrar P demostramos que su negaci´on implica una contradicci´on, es decir ¬P ⇒ f also. Por ejemplo, para demostrar X ⇒ Y demostramos que X ∧ ¬Y implica que todos los naturales son pares. Como hemos visto anteriormente, es equivalente demostrar P ⇒ Q que demostrar ¬Q ⇒ ¬P , y para demostrar P ⇔ Q hemos de demostrar que P ⇒ Q y Q ⇒ P . 1.1.4.
Notaci´ on de conjuntos
Dado un universo de elementos (por ejemplo, los n´ umeros naturales), representaremos con {x | P (x)} el conjunto de los elementos que cumplen la propiedad P . Utilizaremos las operaciones: 1. Uni´on: A ∪ B = {x | x ∈ A ∨ x ∈ B}. 2. Intersecci´on: A ∩ B = {x | x ∈ A ∧ x ∈ B}. 3. Diferencia: A − B = {x | x ∈ A ∧ x 6∈ B}. 4. Complementaci´on: A = {x | x 6∈ A}. 5. Producto cartesiano: A×B = {(x, y) | x ∈ A ∧ y ∈ B} (el conjunto de todos los pares ordenados de elementos de A y de B). Obs´ervese que la equivalencia entre las expresiones de conjuntos y los predicados correspondientes permite deducir las igualdades A = A, A − B = A ∩ B, A ∩ B = A ∪ B.
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
8
Dados dos conjuntos A y B diremos que A est´a inclu´ıdo en B (o A es un subconjunto de B), representado con A ⊆ B, si todo elemento de A pertenece a B, es decir, si es cierta la proposici´on ∀x x ∈ A ⇒ x ∈ B Para demostrar una igualdad de conjuntos A = B demostraremos A ⊆ B y B ⊆ A. Representaremos con A 6⊆ B el hecho de que A no est´a inclu´ıdo en B (¬(A ⊆ B)). Cuando se cumple que A ⊆ B pero B 6⊆ A, diremos que A est´a estrictamente inclu´ıdo en B, y lo representaremos con A ⊂ 6= B. Representaremos por kAk el cardinal de un conjunto A (en el caso de conjuntos finitos, el n´ umero de elementos que lo componen). Dado un conjunto A cualquiera, el conjunto de todos los subconjuntos de A se llama conjunto de las partes de A y se denota P(A). Si kAk = n entonces kP(A)k = 2n . 1.1.5.
Lenguajes
Hacemos un repaso r´apido de los primeros conceptos sobre lenguajes. Un alfabeto es un conjunto finito no vac´ıo. Sus elementos se llaman s´ımbolos. Una palabra sobre un alfabeto es una secuencia finita de s´ımbolos. La secuencia que no contiene ning´ un s´ımbolo se llama palabra vac´ıa y se representa con λ. Un lenguaje sobre un alfabeto es un conjunto de palabras. Dado un alfabeto Σ, Σ∗ es el lenguaje de todas las palabras sobre Σ. La longitud de una palabra x es el n´ umero de s´ımbolos que tiene, denotado como |x|. Dado un alfabeto Σ y n ∈ IN, Σn es el conjunto de las palabras de longitud n, y Σ≤n el conjunto de las palabras de longitud menor o igual a n.
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
9
Por ejemplo, si Σ = {0, 1}, Σ0 = {λ}, Σ2 = {00, 01, 10, 11}. La siguiente proposici´on nos da el n´ umero de palabras de cada longitud y se puede demostrar f´acilmente por inducci´on. Proposici´on 1.1 Dado un alfabeto Σ y un n ∈ IN, kΣn k
= kΣkn
kΣ≤n k =
kΣkn+1 −1 kΣk−1
En esta asignatura trataremos a menudo con conjuntos de lenguajes, que llamaremos clases. 1.1.6.
Funciones
Nota muy importante: En esta asignatura utilizaremos la palabra funci´on EXCLUSIVAMENTE con el significado matem´atico que se explica a continuaci´on. Para evitar confusiones nunca la utilizaremos para denotar procedimientos o programas con un s´olo par´ametro de salida, que en muchos lenguajes de programaci´on reciben tambi´en este nombre. Dados dos conjuntos A y B, una funci´on f : A → B es, informalmente, una forma de asociar a x ∈ A un elemento de B que llamamos f (x). Nos referiremos siempre a funciones parciales. Es decir, una funci´on f : A → B no tiene que estar definida para todos los elementos de A. Ejemplo 1.2 Sea f : IN → IN la funci´on definida como: f (2n) = n, o equivalentemente, (
f (x) =
x/2 si x es par indefinido en otro caso
Definici´on 1.3 El dominio de una funci´on f : A → B es el conjunto Dom(f ) definido como sigue Dom(f ) = {x | f (x) est´a definida } Definici´on 1.4 El rango de una funci´on f , tambi´en llamado imagen de f , es el conjunto Im(f ) (tambi´en Rang(f )) Im(f ) = {f (x) | x ∈ Dom(f )}
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
10
As´ı pues, Im(f ) es el conjunto de las im´agenes de la funci´on f . Si f : A → B entonces Dom(f ) ⊆ A, Im(f ) ⊆ B. Como convenio de notaci´on, dadas dos funciones f y g, s´olo escribiremos f (x) = g(y) cuando x ∈ Dom(f ) e y ∈ Dom(g), es decir, si f (x) y g(y) est´an ambas indefinidas diremos que f (x) 6= g(y). Existe una funci´on de dominio vac´ıo, que llamaremos la funci´on vac´ıa, y que est´a indefinida en todos los puntos. Ejemplo 1.5 La funci´on f : IN → IN que devuelve la raiz cuadrada exacta de un n´ umero la podemos definir como: ( √ x si x es un cuadrado perfecto f (x) = indefinido en otro caso En este caso Dom(f ) = {x | x es un cuadrado perfecto} y Im(f ) = IN. Definici´on 1.6 f es una funci´on inyectiva si se cumple que para cada x, y ∈ Dom(f ) con x 6= y, f (x) 6= f (y). Es importante notar que la definici´on de inyectividad se refiere s´olo a los puntos donde est´a definida la funci´on. Por ejemplo la funci´on vac´ıa es trivialmente inyectiva. Definici´on 1.7 Si f es una funci´on inyectiva f : A → B , definimos la inversa de f , f −1 : A → B, de la siguiente forma: para cada z ∈ Im(f ) f −1 (z) = x tal que f (x) = z. Notar que Dom(f −1 ) = Im(f ). Definici´on 1.8 f : A → B es suprayectiva si Im(f ) = B. Definici´on 1.9 f : A → B es total si Dom(f ) = A. Definici´on 1.10 f : A → B es una biyecci´on si f es total, inyectiva y suprayectiva. Definici´on 1.11 Dadas dos funciones f, g : A → B, se dice que f extiende a g si 1. Dom(g) ⊆ Dom(f ),
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
11
2. ∀x ∈ Dom(g), f (x) = g(x). Definici´on 1.12 Dada f : A → B y C ⊆ A, la restricci´on de f a C, f /C, es la funci´on f /C : C → B de dominio Dom(f /C) = C ∩ Dom(f ) y definida como f /C(x) = f (x) para x ∈ C ∩ Dom(f ). Ejemplo 1.13 Sea f la funci´on definida en el ejemplo 1.5. La funci´on ( √ x si x es un cuadrado perfecto g(x) = 0 en otro caso es una extensi´on total de f . Definici´on 1.14 Dadas f : A → B y g : B → C tales que Im(f ) ⊆ Dom(g), la composici´on de f y g, g ◦ f , es la funci´on g◦f :A→C definida como g ◦ f (x) = g(f (x)) para x ∈ Dom(f ). Definici´on 1.15 Dado un conjunto A, su funci´on caracter´ıstica es: (
χA (x) =
1.2.
1 si x ∈ A 0 si x 6∈ A
Numerabilidad
Una definici´on intuitiva de cardinal de un conjunto es el n´ umero de elementos que tiene. Si suponemos que n´ umero quiere decir n´ umero natural, entonces no podemos hablar de cardinal de conjuntos como IN. Si itimos infinito como posible n´ umero de elementos, entonces tanto IN como IR tienen infinitos elementos. Sin embargo, nos gustar´ıa poder expresar que hay m´as reales que naturales. En la b´ usqueda de una definici´on de cardinal, comparamos el conjunto de los pares y el de los impares:
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
12
pares 0, 2, 4, 6, . . . , 2n, . . . impares 1, 3, 5, 7, . . . , 2n − 1, . . . Parece que hay el mismo n´ umero de pares que de impares, porque tenemos una biyecci´on entre los dos conjuntos. Esta es exactamente la definici´on de cardinal. Definici´on 1.16 Dos conjuntos A y B tienen el mismo cardinal si existe una biyecci´on f : A → B . Nota: Es equivalente decir que existe una inyecci´on total de A en B y otra de B en A. Nota: Si A tiene el mismo cardinal que B y B tiene el mismo cardinal que C, entonces A tiene el mismo cardinal que C. En el caso finito esta definici´on se corresponde con lo que dec´ıamos al principio de este secci´on: dos conjuntos de tres elementos {A, B, C}, {X, Y, Z} tienen el mismo cardinal, mientras que {A, B, C, D}, {X, Y, Z} no lo tienen. En el caso infinito esto se corresponde con la idea de que hay tantos pares como naturales 0 1 2 3 4 ... 0 2 4 6 8 ...
f (n) = 2n
hay tantos naturales como potencias de dos 0 1 2 3 4 ... 1 2 4 8 16 . . .
f (n) = 2n
Por supuesto, con cardinales infinitos no se puede operar como con finitos: ¿Cu´anto vale ∞ − ∞? Depende IN− pares = impares (cardinal infinito) IN−IN= ∅ (cardinal 0) IN−{1, 2, 3, 4, . . .} = {0} (cardinal 1) Esto nos lleva a la observaci´on de que los naturales tienen muchos subconjuntos con el mismo cardinal que IN. Esto s´olo puede pasar para conjuntos infinitos, y de hecho podr´ıamos definir “A es un conjunto infinito si existe B ⊆ A con B 6= A y B tiene el mismo cardinal que A”. A partir de ahora trataremos los infinitos m´as peque˜ nos, llamados numerables.
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
13
Definici´on 1.17 A es numerable si A es finito ´o A tiene el mismo cardinal que IN. Es decir, si A es numerable infinito tenemos una biyecci´on f : IN → A, lo que nos permite enumerar los elementos de A y podernos referir a f (0) como “cero´esimo elemento de A”, a f (1) como “primer elemento de A”, . . ., f (x) como “x-´esimo elemento de A”. Otra forma intuitiva de verlo es: si A es numerable infinito tenemos una biyecci´on g : A → IN, lo que nos permite dar a cada elemento x ∈ A su n´ umero de orden dentro de A, x es el elemento g(x)-´esimo de A. Veamos algunas propiedades b´asicas de los numerables (algunas de las demostraciones se dejan como ejercicios): Propiedad 1.18
IN es numerable.
Si A ⊆ B y B es numerable, entonces A es numerable. Propiedad 1.19 Si existe una inyecci´ on total f : A → IN, entonces A es numerable. Si existe una funci´ on suprayectiva f : IN → A, entonces A es numerable. Dem. Para la primera parte, si definimos g : A → Im(f ) como g(x) = f (x) ∀x ∈ Dom(f ), entonces g es total e inyectiva, por serlo f , y adem´as suprayectiva, por estar definida de A en Im(f ), luego g es una biyecci´on. Por tanto A tiene el mismo cardinal que Im(f ). Como Im(f ) ⊆ IN y IN es numerable, por la propiedad anterior Im(f ) es numerable y por tanto tambi´en lo es A. La segunda parte se demuestra de manera an´aloga. Ejemplos 1.20 de conjuntos numerables. IN × IN Definimos f : IN × IN → IN que corresponde al siguiente recorrido de los puntos de IN × IN
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
14
es decir, recorrido primero por diagonales: primero los puntos que suman 0, luego los que suman 1, etc. f (n, m) =
(1 + n + m)(n + m) +m 2
Otros recorridos posibles:
IN × IN × IN Sea f biyecci´on de IN × IN en IN. Entonces g : IN × IN × IN → IN definida como g(x, y, z) = f (f (x, y), z) es biyecci´on: • inyectiva. Si (x, y, z) 6= (x0 , y 0 , z 0 ): si (x, y) 6= (x0 , y 0 ) entonces f (x, y) 6= f (x0 , y 0 ) y por tanto f (f (x, y), z) 6= f (f (x0 , y 0 ), z 0 ) si (x, y) = (x0 , y 0 ) entonces z 6= z 0 (ya que (x, y, z) 6= (x0 , y 0 , z 0 )). Por tanto f (f (x, y), z) 6= f (f (x, y), z 0 ).
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
15
• total: por serlo f . • suprayectiva: Im(g) = Im(f /Im(f )×IN ) = Im(f /IN×IN ) = Im(f ). Im(f ) = IN (por ser f suprayectiva). Z
(
f (x) =
2x si x ≥ 0 −2x − 1 si x < 0
f es biyecci´on de Z en IN. (Basta ver que los positivos van a los pares y los negativos a los impares). En general, tenemos la siguiente propiedad para productos cartesianos: Propiedad 1.21 Si A y B son numerables, entonces A×B es numerable. Q Como Z y IN son numerables, tambi´en lo es Z × IN (propiedad 1.21). Sea f la funci´on total: f : Q → Z × IN q 7→ (n, m) con
n m
fracci´on irreducible de q
f es inyectiva, ya que una fracci´on irreducible representa un u ´nico n´ umero racional. Por la propiedad 1.19, Q es numerable. Dado Σ un alfabeto, Σ∗ es el conjunto de todas las palabras sobre Σ. No podemos enumerar Σ∗ por orden alfab´etico (ej: Σ = {0, 1}, λ, 0, 00, 000, . . .) ya que hay infinitas palabras empezando por la primera letra del alfabeto, y nunca llegar´ıamos a las que empiezan por la segunda. La forma de hacer una biyecci´on de IN en Σ∗ es enumerar las palabras por orden lexicogr´afico por longitudes, es decir, por longitudes, y dentro de cada longitud por orden alfab´etico. f : Σ∗ → IN |w| −1 w 7→ kΣk − 1+ “lugar de w por orden kΣk−1 alfab´etico en longitud |w|”
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
16
Nota: “Lexicogr´afico por longitudes” lo abreviaremos como lexicogr´afico. En cap´ıtulos sucesivos fijaremos un lenguaje de programaci´on de alto nivel. Cada programa podemos codificarlo como una cadena de caracteres, es decir, una palabra sobre un alfabeto finito Σ (el alfabeto de los caracteres isibles). Por tanto podemos establecer una biyecci´on del conjunto de todos los programas en un subconjunto de Σ∗ . Por esta raz´on hay una cantidad numerable de programas.
1.3.
Diagonalizaci´ on
En esta secci´on vamos a demostrar que algunos conjuntos son no numerables usando una t´ecnica de Cantor llamada diagonalizaci´on. Esta t´ecnica consiste en, dado un conjunto numerable A, construir un elemento x 6∈ A por etapas. Lema 1.22 Sea A un conjunto numerable, A ⊆ [0, 1] (donde [0, 1] es el intervalo de los n´ umeros reales entre 0 y 1). Entonces existe x ∈ [0, 1] tal que x 6∈ A. Dem. Por definici´on de numerable, existe una biyecci´on f : IN → A. Dado n ∈ IN, denoto f (n) como rn . Entonces Im(f ) = A = {r0 , r1 , r2 , r3 , . . . , rn , . . .} Consideremos a los n´ umeros de A escritos en binario. Dados i, j ∈ IN denotamos como ri [j] al (j +1)-´esimo bit de la representaci´on en binario de ri , es decir, si ri = 0, 00101
ri [2] = 1 ri [0] = 0
Vamos a construir x ∈ [0, 1] tal que ∀i ∈ IN, x 6= ri como sigue (
x[i] =
1 si ri [i] = 0 0 si ri [i] = 1
de esta forma ∀i x[i] 6= ri [i], y por tanto ∀i x 6= ri .
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
17
(Esto es lo que se llama diagonalizaci´on, construir x que cumpla x 6= r0 x 6= r1 ... x 6= rn ...
usando x[0] usando x[1] ... usando x[n] ...
es decir, cumplir una lista de objetivos x 6= r0 , x 6= r1 , . . ., x 6= rn , . . . de forma constructiva). Por construcci´on x 6∈ {r0 , r1 , . . .} = A. Pero x es la representaci´on en binario de un n´ umero entre 0 y 1, luego x ∈ [0, 1]. Nota bene. Hay n´ umeros (los decimales peri´odicos) que tienen doble representaci´on en binario. 0, 0ˆ1 = 0, 1 0, 010ˆ1 = 0, 11 etc. Pero podemos considerar el conjunto de todas las representaciones binarias de los elementos de A en lugar de A en la demostraci´on anterior. (Si A es numerable, tambi´en lo es el conjunto de todas sus representaciones en binario, que son como m´aximo dos por cada n´ umero). Teorema 1.23 [0, 1] no es numerable. Dem. Reducci´on al absurdo. Supongamos que [0, 1] es numerable, entonces por el lema anterior existe x ∈ [0, 1] tal que x ∈ 6 [0, 1]. Esto es una contradicci´on, luego [0, 1] no es numerable. Teorema 1.24 IR no es numerable. Dem. Como [0, 1] ⊆ IR no es numerable, por la propiedad 1.18, IR no es numerable. Teorema 1.25 El conjunto de las funciones totales de IN en IN no es numerable. Dem. Vamos a diagonalizar en S, el conjunto de todas las funciones totales de IN en IN.
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
18
Lema 1.26 Sea A un conjunto numerable, A ⊆ S. Entonces existe x ∈ S tal que x 6∈ A. Dem. Por definici´on de numerable, existe una biyecci´on F : IN → A. Dado n ∈ IN, denoto F (n) como fn . Entonces Im(F ) = A = {f0 , f1 , f2 , . . . , fn , . . .} Voy a construir una funci´on total que no est´a en A. Sea g : IN → IN n 7→ fn (n) + 1 g es total porque todas las fn lo son. Para todo n, g(n) 6= fn (n), por tanto para todo n, g 6= fn . (Consigo g 6= f0 g 6= f1 ... g 6= fn ...
usando g(0) usando g(1) ... usando g(n) ...
Luego g 6∈ {f0 , f1 , f2 , . . . , fn , . . .} = A. (lema) El teorema se demuestra por reducci´on al absurdo como en el caso de [0, 1]. Teorema 1.27 Dado un alfabeto Σ, el conjunto de las funciones totales de Σ∗ en Σ∗ no es numerable. Dem. An´aloga a la anterior. Corolario 1.28 Dado un alfabeto Σ, el conjunto de las funciones de Σ∗ en Σ∗ no es numerable. Hemos visto que el conjunto de todos los programas s´ı es numerable. En el cap´ıtulo siguiente formalizaremos la idea de que cada programa calcula una funci´on (a cada entrada le hace corresponder una salida). De momento ya sabemos un hecho importante: Corolario 1.29 Existen funciones que no se pueden calcular con ning´ un programa.
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
19
EJERCICIOS 1.1. Sea f : Q × Q → Q una funci´on definida por f (a, b) = a/b. ¿Es f total? ¿Cu´al es el dominio de f ? ¿Cu´al es su imagen? 1.2. Demostrar la Proposici´on 1.1 usando inducci´on. 1.3. Demostrar la Propiedad 1.18: si A ⊆ B y B es numerable, entonces A es tambi´en numerable (utilizar la definici´on original de numerable, esta es una propiedad b´asica de la que se deducen otras definiciones equivalentes). 1.4. Dados dos conjuntos numerables A y B, demostrar que A × B, el producto cartesiano de A y B, es numerable (Propiedad 1.21). 1.5. Demostrar que el conjunto de los subconjuntos finitos de IN es numerable. 1.6. Demostrar que el conjunto de las funciones de IN en IN con dominio finito es numerable. 1.7. Estudiar la demostraci´on vista en clase de que R, el conjunto de los n´ umeros reales, no es numerable. ¿Por qu´e no sirve una demostraci´on similar para demostrar que Q, el conjunto de lo n´ umeros racionales, no es numerable? 1.8. Demostrar que el conjunto de los subconjuntos de IN no es numerable. 1.9. Demostrar que el conjunto de los lenguajes sobre un alfabeto Σ no es numerable. 1.10. Demostrar que el conjunto de las funciones totales de IN en {0, 1} no es numerable. 1.11. Demostrar que el conjunto de las funciones de IN en IN con imagen finita no es numerable. 1.12. Demostrar que si {A1 , A2 , A3 , . . .} es una colecci´on numerable de conjuntos numerables disjuntos, entonces [ i∈IN
Ai
CAP´ITULO 1. PRELIMINARES. NUMERABILIDAD Y ...
es un conjunto numerable.
20
Cap´ıtulo 2
Problemas y datos. Un modelo abstracto de c´ alculo: la m´ aquina de registros Referencia: Cap´ıtulo 1 de [Cu80]. Comenzaremos este tema modelizando problemas mediante objetos formales (lenguajes o funciones) para un tratamiento formal posterior. Despu´es definiremos el modelo de c´alculo que utilizaremos el resto del curso, la m´aquina de registros con sus programas.
2.1.
Problemas, lenguajes y funciones
2.1.1.
Problemas decisionales y funcionales
Quiz´a la manera m´as f´acil de analizar las diferentes componentes de la definici´on de un problema es mediante ejemplos. Empezaremos con un problema cl´asico de la teor´ıa de grafos. (Recordemos que un grafo dirigido G = (V, A) es un conjunto de v´ertices V y un conjunto de aristas A ⊆ V × V . Para un grafo de n v´ertices tomaremos siempre como conjunto de v´ertices V = {1, 2, 3, . . . , n}.) Ejemplo 2.1 Accesibilidad de grafos (GAP): Dado un grafo dirigido G = (V, A) y dos v´ertices u, v ∈ V , determinar si existe un camino de u a v en G. 21
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
22
En el enunciado del problema se pregunta si se satisface o no una propiedad. A este tipo de problemas les denominaremos problemas decisionales. En un problema decisional se define un conjunto de datos, los datos de entrada y una propiedad. Un segundo tipo de enunciado de problema pide la construcci´on de un objeto, o el c´alculo de un valor. Ejemplo 2.2 true gates (TG): Dado un circuito booleano, y una asignaci´on de valores a sus entradas, calcular el n´ umero de puertas que eval´ uan a uno. Ejemplo 2.3 Camino (PATH): Dado un grafo dirigido G = (V, A) y dos v´ertices u, v ∈ V , calcular un camino de u a v en G. Este problema no est´a especificado completamente, pues puede haber m´as de un camino. Podemos decir, por ejemplo, “calcular el primer camino, por orden alfab´etico”. A los problemas en cuyo enunciado se pide la construcci´on de un objeto (en caso de que exista) o el c´alculo de un valor, les denominaremos problemas funcionales. Un problema decisional se define a partir de un conjunto de datos E, que denominamos conjunto de entradas, y una propiedad R. Se expresa como: Dado x ∈ E, ¿se satisface R(x)? Un problema funcional se define a partir de dos conjuntos de datos E, conjunto de entradas, y S, conjunto de salidas, junto con una propiedad Q y se expresa como: Dado x ∈ E, calcular y ∈ S para el que se cumple Q(x, y). Para una entrada x, el n´ umero de objetos y que verifican Q(x, y) es 1 ´o 0. En nuestros ejemplos GAP y PATH, el conjunto de entradas E es el conjunto {(G, u, v) | G es un grafo dirigido y u y v son v´ertices de G} 2.1.2.
Representaci´ on de datos, tama˜ no
Analicemos un poco m´as a fondo los conjuntos de datos. Nos interesan los problemas en los que cada dato es representable mediante una estructura de datos finita. En los problemas que hemos planteado hasta
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
23
ahora, se cumple este requisito, es f´acil dise˜ nar una estructura de datos para las entradas. Por supuesto que la estructura nunca ser´a u ´nica, pero dise˜ narla es el primer paso en el dise˜ no de un algoritmo. Si a alto nivel requerimos que los conjuntos de datos sean representables mediante estructuras de datos, a bajo nivel queremos representarlos mediante una cadena de caracteres. A este proceso lo llamaremos codificaci´on. A trav´es de la codificaci´on podemos asociar a cada dato un tama˜ no, la longitud de la cadena de caracteres que lo representa. Dado un conjunto de datos D utilizaremos la siguiente notaci´on: x es un elemento de D representado mediante una estructura de datos. hxi es la cadena de caracteres que codifica a x, |x|, el tama˜ no de x, es la longitud de hxi. Por ejemplo la representaci´on usual de un n´ umero natural es en binario, con lo que si la tomamos como la codificaci´on sobre el alfabeto Σ = {0, 1} tenemos que para un n´ umero natural x, |x| = log x + 1. Como hxi es x en binario en este caso no haremos distinci´on entre hxi y x. Nota: Denotamos por log el logaritmo en base 2 por defecto, es decir blog2 c, con valor m´ınimo 1. Para representar un grafo G = (V, A) con v´ertices V = {1, . . . , n} podemos utilizar una estructura de datos consistente en una matriz booleana M definida como sigue: (
M (i, j) =
1 si (i, j) ∈ A 0 si (i, j) 6∈ A
A bajo nivel la codificaci´on de esta matriz puede ser escribir la matriz por filas, obteniendo as´ı una cadena sobre el alfabeto {0, 1}. El tama˜ no de un grafo G ser´a en este caso el cuadrado del n´ umero de v´ertices. En general, a una codificaci´on le pediremos que sea “razonable” queriendo expresar con ello que no debe engordar artificialmente el tama˜ no de los objetos que codifica. Adem´as deben existir algoritmos eficientes que permitan pasar de la estructura de datos x a su codificaci´on hxi, reconocer si una cadena codifica una estructura de datos, y pasar de una cadena hxi a la estructura de datos que codifica x.
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
24
Podemos codificar una estructura de datos formada a partir de tipos de datos elementales a partir de las codificaciones de los mismos. Por ejemplo la entrada de PATH formada por un grafo dirigido G y dos v´ertices u, v podemos codificarla a partir de la codificaci´on de G, X ∈ {0, 1}∗ , y las codificaciones en binario de u y v, Y, Z ∈ {0, 1}∗ . Una forma simple de hacer esto es a˜ nadir un s´ımbolo nuevo # para separar las componentes, por ejemplo si X = 001110000, u = 1, v = 2 la entrada G, u, v se codificar´ıa como 001110000#1#10 sobre el alfabeto {0, 1, #}. Con esta codificaci´on el tama˜ no de la entrada (G, u, v) es |G|+|u|+|v|+2. En el mismo ejemplo, si queremos codificar entradas de la forma G, u, v sobre el alfabeto {0, 1}, podemos hacerlo a partir de la codificaci´on anterior con tres s´ımbolos, simplemente asociando al s´ımbolo 0 la palabra 00, al 1 la palabra 01 y al # la palabra 11. Con la misma entrada que en el p´arrafo anterior obtenemos ahora 0000010101000000001101000100. Con esta codificaci´on el tama˜ no de la entrada (G, u, v) es 2(|G|+|u|+|v|+2). Ejercicio. Buscar otras posibles codificaciones de entradas formadas por varios datos elementales tanto con el alfabeto {0, 1} como con alfabetos de m´as de dos s´ımbolos. 2.1.3.
Lenguajes y funciones
Fijado un alfabeto de codificaci´on Σ (muy a menudo Σ = {0, 1}), asociaremos a cada problema decisional un lenguaje y a cada problema funcional una funci´on. Consideremos un problema decisional Π con un conjunto de entradas E, de manera que cada elemento x ∈ E es representable mediante una cadena de caracteres hxi. Supongamos que Π est´a definido mediante la propiedad R, asociaremos al problema Π el lenguaje: L(Π) = {hxi | R(x)} Por ejemplo, si tenemos el problema: PRIMO: Dado un n´ umero natural n, determinar si n es primo. Asociaremos a PRIMO el lenguaje: L(PRIMO) = {n | n es un n´ umero primo}. A cada lenguaje L le asociamos la funci´on caracter´ıstica χL : Σ∗ →
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
25
{0, 1} (ya definida en el cap´ıtulo 1): (
χL (x) =
1 si x ∈ L 0 si x 6∈ L
Luego cada problema decisional lo podemos representar mediante un lenguaje o bien mediante una funci´on total de Σ∗ en {0, 1}. Analicemos ahora un problema funcional. Supongamos que tenemos un problema funcional Π con conjunto de entradas E, conjunto de salidas S, ambos codificados sobre Σ, y Π definido mediante la propiedad Q. Asociamos a Π la funci´on fΠ : Σ∗ → Σ∗ definida como: fΠ (hxi) = hyi tal que se cumple Q(x, y) Para una entrada x sabemos que el n´ umero de soluciones (objetos y que verifican Q(x, y)) es 1 ´o 0, as´ı que la funci´on fΠ puede no estar definida en algunos puntos.
2.2.
La m´ aquina de registros o ´ Random Access Machine
En el cap´ıtulo 1 hemos visto que existen funciones que ning´ un programa puede calcular. La siguiente pregunta a tratar es si dentro de estas funciones no calculables hay alguna interesante, de esto se ocupa la teor´ıa de la calculabilidad. Antes de empezar a tratar lo que se puede o no calcular con un programa, tenemos que fijar qu´e m´aquina estamos programando y qu´e lenguaje de programaci´on usamos. Nos interesa un modelo de m´aquina y un lenguaje lo m´as generales posibles, es decir, que resuelvan tantos problemas como el computador m´as potente. De esta forma, si probamos que un problema no se puede resolver en nuestro modelo, no se podr´a resolver en ning´ un computador. Nuestro modelo va a ser un modelo abstracto o ideal, en el sentido de no real. Se trata de la “Random Access Machine” (RAM), que es una m´aquina de registros dotada de un n´ umero ilimitado de registros. Cada registro puede almacenar un n´ umero entero de cualquier tama˜ no. (Es la no limitaci´on en el n´ umero de registros y en el tama˜ no de los mismos lo
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
26
que hace que la RAM sea un modelo no real, ya que es un modelo de memoria no acotada.) Nosotros programaremos la RAM usando un lenguaje de alto nivel que representamos en una notaci´on algor´ıtmica convencional. Dispondremos de constantes y variables de tipos elementales (naturales, enteros, reales, booleanos y cadenas de caracteres) as´ı como tipos no elementales de los que nos interesar´a a menudo la codificaci´on a bajo nivel, de cara a medir el tama˜ no de los datos. Tendremos las instrucciones de asignaci´on, condicional y bucles, as´ı como las operaciones b´asicas de los tipos elementales. Debemos recordar que disponemos de una cantidad de memoria ilimitada, es decir, podemos usar cualquier n´ umero de variables y no hay l´ımite en el tama˜ no de los datos que estas variables pueden almacenar. Podemos utilizar la codificaci´on de datos descrita en 2.1.2, y asumir que todos los datos de entrada de un programase codifican como una u ´nica cadena de caracteres. Es por ello que, siempre que nos convenga, asumimos que todos nuestros programas tienen un u ´nico par´ametro de entrada, de tipo cadena de caracteres. Este par´ametro corresponde a la codificaci´on de la entrada seg´ un se haya fijado. De esta forma, el primer paso del programa ser´a decodificar la entrada. Por ejemplo los dos programas siguientes son esencialmente el mismo: Leer W: cadena decodificacion(W, X, Y); % % El procedimiento decodificacion decodifica W=hX, Yi Z:=X+Y; Devuelve Z; Leer X, Y:natural Z:=X+Y; Devuelve Z; Los programas tendr´an un u ´nico par´ametro de salida de tipo cadena de caracteres que corresponder´a a la codificaci´on de la salida seg´ un se haya fijado.
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
2.2.1.
27
Codificaci´ on de programas
Algunos de los problemas que nos interesan tienen como entrada o parte de la entrada (o de la salida) un programa. Para resolverlos algor´ıtmicamente tendremos que representar los programas mediante una estructura de datos y a bajo nivel establecer su codificaci´on. Para definir el tipo de datos programa simplemente utilizaremos que cada programa en nuestro lenguaje de alto nivel se puede escribir como una cadena de caracteres. Al escribir cada caracter en c´odigo ASCII tenemos la codificaci´on del programa sobre {0, 1}. Dada w ∈ {0, 1}∗ usaremos la notaci´on Pw para el programa con codificaci´on w, aunque a menudo identificaremos directamente w con el programa de codificaci´on w. Aunque a menudo identificaremos cadenas y programas, usando w para el programa Pw y siendo muy laxos en la tipificaci´on de datos. Tambi´en asociaremos a cada i ∈ IN un programa Pi . Pi es el programa que ocupa la posici´on i-´esima entre todos los programas por orden lexicogr´afico (es decir, por longitudes y dentro de cada longitud por orden alfab´etico). Tambi´en identificaremos directamente i con el programa Pi . Notemos que de esta forma Pi est´a definido para todo i ∈ IN y para todo programa p existe un i ∈ IN tal que Pi = p. Adem´as existe un programa que a partir de i ∈ IN calcula una codificaci´on de Pi , y existe otro programa que a partir de una codificaci´on w ∈ {0, 1}∗ calcula i ∈ IN tal que Pi = Pw . Ejercicio. Escribir un programa que a partir de i ∈ IN calcula una codificaci´on de Pi . Escribir un programa que a partir de una codificaci´on w ∈ {0, 1}∗ calcula i ∈ IN tal que Pi = Pw . 2.2.2.
Notaci´ on para programas
Dado un programa p y una entrada x utilizaremos la siguiente notaci´on: p(x) ↓ El programa p con entrada x termina su ejecuci´on y da una salida. p(x) ↑ El programa p con entrada x no acaba nunca o bien acaba pero no da salida. ϕp Funci´on que calcula el programa p, es decir: ϕp (x) = Salida del programa p con entrada x, si p(x) ↓.
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
28
Luego Dom(ϕp ) = {x | p(x) ↓}. Nota: Diremos que “p(x) para” (o termina, o acaba) si p(x) ↓. Si en alg´ un momento queremos expresar el hecho “p(x) acaba pero no da salida” lo indicaremos expl´ıcitamente. Denominamos paso al tiempo de ejecuci´on de una instrucci´on de alto nivel. Dado t ∈ IN, diremos que “p(x) ↓ en t pasos” si p(x) para en t pasos o menos. Si en alg´ un momento queremos expresar el hecho “p(x) ↓ en t pasos exactamente” lo indicaremos expl´ıcitamente. 2.2.3.
M´ as sobre programas
Existe un programa int´erprete o simulador, simular con el siguiente perfil: ´ simular(Q:in programa; X:in cadena; EXITO:out booleano; RESULTADO:out cadena); Dados un programa p y una entrada x: ´ Si p(x) ↓ entonces simular(p, x, EXITO, RESULTADO) ↓ y da sali´ da EXITO=TRUE, RESULTADO=ϕp (x). ´ Si p(x) ↑ entonces simular(p, x, EXITO, RESULTADO) ↑. Este programa nos permite simular un programa como parte de otro programa: Leer Q, X ... ´ simular(Q, X, EXITO, RESULTADO); % % El resto s´olo se ejecuta si Q(X)↓ ... Existe un programa reloj, simularConReloj, que es una versi´on del int´erprete con control de tiempo: ´ simular(Q:in programa; X:in cadena; T:in natural; EXITO:out booleano; RESULTADO:out cadena);
´ Dados un programa p, una entrada x y un n´ umero natural t, simularConReloj(p, x, t, EXITO, quiere decir “simular p con entrada x durante tiempo t”. Para cualquier ´ p, x, t, simularConReloj(p, x, t, EXITO, RESULTADO) ↓ y se cumple:
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
29
´ Si p(x) ↑ entonces ∀t simularConReloj con entrada (p, x, t, EXITO, RESULTADO) ´ da salida EXITO=FALSE. Si p(x) ↓ entonces ∃t0 ∈ IN tal que ´ • si t ≥ t0 entonces simularConReloj con entrada (p, x, t, EXITO, RESULTADO) ´ da salida EXITO=TRUE, RESULTADO=ϕp (x) ´ • si t < t0 entonces simularConReloj con entrada (p, x, t, EXITO, RESULTADO) ´ da salida EXITO=FALSE. Por tanto podemos utilizar este programa para simular un programa durante un tiempo: Leer Q, X, T ... ´ simularConReloj(Q, X, T, EXITO, RESULTADO); % % esto es simular Q(X) durante T pasos; ...
Es pues muy diferente utilizar los programas simular y simularConReloj, ya que el primero puede no parar. Compara la ejecuci´on de estos dos programas, ¿los dos ejecutan el bloque de instrucciones S? Leer Q, X Leer Q, X ´ T:=30; simular(Q, X, EXITO, RESULTA ´ simularConTiempo(Q, X, T, EXITO, RESULTADO); S; S; ... ... Compara estos otros dos: Leer Q, X Leer Q, X ´ T:=30; simular(Q, X, EXITO, RESULTADO); ´ ´ simularConTiempo(Q, X, T, EXITO, RESULTADO); Si EXITO ´ Si EXITO entonces A entonces A % % No sirve para nada poner un else. else B
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
30
Ejercicio. Implementar en un lenguaje de programaci´on (por ejemplo ADA) un TAD programa que contenga los procedimientos simular y simularConReloj. Hay que empezar escribiendo dos procedimientos, el primero que devuelvan la configuraci´on inicial (contenido de las variables al inicio de la ejecuci´on del programa), y el segundo que a partir de una configuraci´on (contenido de las variables y n´ umero de l´ınea en que se encuentra la ejecuci´on) calcule la siguiente configuraci´on.
2.3.
Definici´ on de funci´ on calculable
Terminamos el cap´ıtulo definiendo lo que entendemos por funci´on calculable.
Definici´on 2.4 Sea f : Σ∗ → Σ∗ una funci´on. Decimos que f es calculasi x ∈ Dom(f ) entonces p con entrada ble si existe un programa p tal que f = ϕp , es decir: si x 6∈ Dom(f ) entonces p(x) ↑. Es importante notar que las funciones calculables pueden ser parciales. Si x 6∈ Dom(f ) entonces el programa que calcula f , con entrada x no para (lo que quiere decir que no termina o no da salida). Ejemplos 2.5 El producto de n´ umeros naturales es una funci´on calculable total. La divisi´on es una funci´on calculable parcial. La funci´on: f (x) = 1 si x(x) ↓ es calculable. El hecho de que una funci´on sea calculable parcial no quiere decir necesariamente que el programa que la calcule funcione “mal”: Leer X, Y Si Y6= 0 entonces Devuelve X DIV Y; El programa anterior calcula la divisi´on de naturales y termina siempre (pero no siempre da salida).
CAP´ITULO 2. PROBLEMAS Y DATOS. UN MODELO ...
31
Leer X SUMA:=0; SUMANDO:=X; EPSILON:=0,01; Mientras que SUMANDO > EPSILON hacer SUMA:=SUMA+SUMANDO; SUMANDO:=SUMANDO * X; Fmq; Devuelve SUMA; Este programa calcula una aproximaci´on de X ≥ 1 el programa no para.
P∞
n=1
X n , si X < 1. Si
Nota: Cl´asicamente se utilizaba el t´ermino “funci´on recursiva” en lugar de “funci´on calculable”. Nosotros evitaremos el primero porque est´a cayendo en desuso y porque la palabra recursiva tiene demasiadas connotaciones en inform´atica.
Cap´ıtulo 3
Problemas decidibles y semidecidibles Referencia: Cap´ıtulo 7 de [Cu80]. En el cap´ıtulo anterior hemos tratado el problema de si una funci´on se puede calcular o no con un algoritmo, definiendo el concepto de funci´on calculable. En este tema trataremos de problemas decisionales, es decir, con s´olo dos respuestas posibles. En el cap´ıtulo anterior ya hemos identificado problemas decisionales con lenguajes o conjuntos de palabras. Estudiaremos en este cap´ıtulo los conjuntos o problemas decidibles, que corresponden a problemas decisionales resolubles por medio de algoritmos, y los problemas o conjuntos semidecidibles, que representan un concepto menos restrictivo. Nota: Existe una notaci´on anterior que no utilizaremos, que habla de lenguages “recursivos” y “enumerables recursivamente”.
3.1.
Definici´ on y primeros ejemplos de conjunto decidible
Definici´on 3.1 Sea A ⊆ Σ∗ un conjunto de cadenas o lenguaje. A es decidible si existe un programa p que cumple: 1. Para todo x, p(x) ↓ 32
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
33
2. Si x ∈ A, entonces ϕp (x) = 1. 3. Si x 6∈ A, entonces ϕp (x) = 0. Es decir, un programa que resuelve completamente el problema de pertenencia a A. Tambi´en se dice problema decidible refiri´endose al siguiente problema correspondiente a un conjunto decidible A: Dada x, ¿x ∈ A? Un problema o conjunto indecidible es un problema o conjunto que no es decidible. Conocemos m´ ultiples ejemplos de conjuntos decidibles: los lenguajes regulares, que se vieron el curso pasado y que se pueden resolver con programas que usan memoria constante, el problema de saber si un n´ umero natural es primo, resoluble con un algoritmo que pruebe exhaustivamente todos los posibles divisores. Vamos a estar interesados en conjuntos relacionados con el comportamiento de los programas, especialmente con si paran o no. Durante este y los pr´oximos cap´ıtulos estudiaremos muchos conjuntos de este tipo debido a que son los m´as sencillos de analizar. Ejemplos 3.2 Los siguientes conjuntos son decidibles: A = {p, x, t | p(x) ↓ en t pasos o menos} A es decidible, ya que el siguiente programa resuelve A: Leer Q, X, T ´ SimularConReloj(Q,X,T,EXITO) ´ Si EXITO entonces Devuelve 1 else Devuelve 0;
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
34
B = {p, x, z, t | ϕp (x) = z, y la computaci´on de p con entrada x tarda t pasos o menos} B es decidible, ya que el siguiente programa resuelve B: Leer Q, X, Z, T ´ SimularConReloj(Q,X,T,EXITO,RESULTADO) ´ Si EXITO entonces Si RESULTADO=Z entonces Devuelve 1 else Devuelve 0 Fsi; else Devuelve 0;
3.2.
El problema de parada
Existe un problema muy interesante para la teor´ıa de la calculabilidad, es el problema de, dados un programa y una entrada, ¿para el programa con esta entrada? Se trata del problema de parada o “halting problem”, estudiado por Turing en 1936. El problema de parada se identifica con el conjunto: H = {p, x | p(x) ↓} Este ser´a nuestro primer ejemplo de conjunto no decidible o indecidible, es decir, problema decisional que no resuelve ning´ un programa. Para demostrar que H es indecidible estudiaremos primero el problema diagonal de parada, K: K = {p | p(p) ↓} Es decir, el conjunto de programas que, tomando como entrada su propia codificaci´on, paran. Teorema 3.3 K es indecidible.
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
35
Dem. Por diagonalizaci´on. Para cada conjunto decidible A, construiremos x0 testigo de que A 6= K. Sea A decidible. Sea pA un programa que resuelve A. Definimos x0 como el siguiente programa: Leer Z ´ Simular(pA, Z, EXITO, RESULTADO); Si RESULTADO=0 entonces Devuelve 1; Veamos que x0 ∈ K ⇔ x0 6∈ A: Si x0 ∈ K entonces x0 (x0 ) ↓, luego ϕx0 (x0 ) = 1 y ϕpA (x0 ) = 0. Por tanto x0 6∈ A. Si x0 6∈ K entonces x0 (x0 ) ↑, luego ϕpA (x0 ) = 1. Por tanto x0 ∈ A. Luego A 6= K. Como esto es cierto para cualquier A decidible, entonces K no es decidible. Corolario 3.4 H es indecidible. Dem. Por reducci´on al absurdo. Si H fuera decidible, sea pH un programa que resuelve H. El siguiente programa resuelve K: Leer X ´ Simular(ph,hX,Xi,EXITO,RESULTADO); Devuelve RESULTADO; Pero esto es imposible porque K es indecidible, luego pH no puede existir.
3.3.
Definici´ on y primeros ejemplos de conjunto semidecidible
Definici´on 3.5 Un conjunto L es semidecidible si existe un programa p que cumple: 1. Si x ∈ A, entonces ϕp (x) = 1. 2. Si x 6∈ A, entonces ϕp (x) = 0 ´o bien p(x) ↑
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
36
Luego para que un conjunto A sea semidecidible es suficiente que haya un programa que conteste bien en el caso x ∈ A, aunque pueda no contestar (o incluso colgarse) para alguna entrada x 6∈ A. Tambi´en se dice problema semidecidible refiri´endose al problema de pertenencia a un conjunto semidecidible. De las definiciones anteriores se sigue: Propiedad 3.6 Si un conjunto A es decidible entonces A es semidecidible. Tenemos pues como ejemplos de semidecidibles todos los decidibles. Veamos algunos otros. Ejemplo 3.7 El siguiente conjunto es semidecidible: C = {p, x, z | ϕp (x) = z} C cumple la definici´on de semidecidible, ya que tenemos el siguiente programa: paraC: Leer Q, X, Z ´ Simular(Q,X,EXITO,RESULTADO) ´ Si EXITO AND (RESULTADO=Z) entonces Devuelve 1. Este programa no para siempre. Si p, x cumplen que p(x) ↑, entonces el programa paraC con entrada p, x, z (para cualquier z) no para. Un ejemplo importante es el problema de parada. Teorema 3.8 H es semidecidible. Dem. El siguiente programa demuestra que H es semidecidible: Leer Q, X ´ Simular(Q,X,EXITO) ´ Si EXITO entonces Devuelve 1;
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
37
El programa anterior da salida 1 si la entrada est´a en H, y no da salida o incluso no termina si la entrada no est´a en H. Intuitivamente este algoritmo resuelve el problema de parada “en el caso positivo” aunque hemos demostrado que no existe ning´ un programa que lo resuelva completamente. Veremos otros muchos problemas decisionales en el mismo caso, son semidecidible pero no son decidibles. Como ejercicio se puede ver la propiedad an´aloga para K: Teorema 3.9 K es semidecidible.
3.4.
Caracterizaciones
Vamos a estudiar a continuaci´on caracterizaciones de los dos conceptos anteriores que utilizar´an la funci´on caracter´ıstica y los programas generadores. Nos centraremos s´olo en los conjuntos infinitos, ya que los finitos son casos triviales que trataremos en el siguiente apartado. Definici´on 3.10 Un programa p para siempre si para cualquier entrada x, p(x) ↓ Definici´on 3.11 Un programa p genera un conjunto L si p para siempre y L = {ϕp (n) | n ∈ IN}. Es decir, un programa p genera un conjunto L si las salidas del programa son exactamente las cadenas de L. Teorema 3.12 Dado un conjunto A infinito, son equivalentes: 1. A es semidecidible. 2. La funci´on ΠA es calculable, donde ΠA (x) = 1 si x ∈ A. 3. Existe un programa que genera A.
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
38
4. Existe un programa p que genera A sin repeticiones (es decir, para todo n, ϕp (n) 6∈ {ϕp (0), ϕp (1), . . . , ϕp (n − 1)}). 5. Existe una funci´on calculable y biyectiva f : IN → A. 6. A es el dominio de una funci´ on calculable. 7. A es el conjunto imagen de una funci´ on calculable. 8. A es el conjunto imagen de una funci´ on calculable total. Dem. Demostraremos primero la equivalencia de 1., 2., 6. y 7., despu´es la equivalencia de 3., 4., 5. y 8., y por u ´ltimo 1.⇒3. y 8.⇒7. 1. ⇒ 2. Por definici´on de semidecidible tenemos un programa p que resuelve A al menos en el caso positivo. A partir de ´el constru´ımos el siguiente programa que calcula ΠA : Leer X ´ Simular(p,X,EXITO, RESULTADO); ´ Si EXITO AND (RESULTADO=1) entonces Devuelve 1; 2. ⇒ 6. A = Dom(ΠA ). 6. ⇒ 7. Sea f una funci´on calculable que cumple 6. y p un programa que calcula f . Definimos la funci´on g: g(x) = x si x ∈ Dom(f ) Tenemos que Im(g) = Dom(f ) = A. Adem´as g es calculable ya que la calcula el siguiente programa: Leer X ´ Simular(p,X,EXITO); ´ Si EXITO entonces Devuelve X; 7. ⇒ 1. Sea f una funci´on calculable tal que A = Im(f ), sea p un programa que calcula f . El siguiente programa demuestra que A es semidecidible. (Como realiza varias simulaciones de p con distintas entradas hay que hacer simulaciones controladas.) Leer X T:=1;
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
39
TERMINADO:=FALSE; Mientras que NOT TERMINADO hacer Para Y:=0 hasta T hacer ´ SimularConTiempo(p,Y,T,EXITO,RESULTADO); ´ Si EXITO AND (RESULTADO=X) entonces TERMINADO:=TRUE; Fpara; T:=T+1; Fmq; Devuelve 1; 3. ⇒ 4. Sea p un programa que genera A. Vamos a eliminar las posibles repeticiones con el siguiente programa que con entrada n da como salida la n-´esima salida diferente que produce p. Leer N NDISTINTOS:=0; DISTINTOS:=vacio; M:=0; Mientras que (NDISTINTOS < N) hacer ´ Simular(p,M,EXITO,RESULTADO); Si NOT esta(RESULTADO,DISTINTOS) entonces NDISTINTOS:=NDISTINTOS+1; a˜ nadir(DISTINTOS, RESULTADO); Fsi; M:=M+1; Fmq; Devuelve RESULTADO; 4. ⇒ 5. Si p genera A sin repeticiones, ϕp es una funci´on calculable, total e inyectiva, Im(ϕp ) = A. Luego ϕp es la biyecci´on buscada de IN en A. 5. ⇒ 8. En 5., por ser f biyectiva es total, y Im(f ) = A. 8. ⇒ 3. Sea f : IN → Σ∗ una funci´on que cumple 8., sea p un programa que calcula f . Por 8. p para siempre y A = Im(f ) = {ϕp (n) | n ∈ IN}. 1. ⇒ 3. Por definici´on de semidecidible tenemos un programa p que resuelve A al menos en el caso positivo. El siguiente programa genera A:
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
40
Leer N NGENERADOS:=0; T:=1; Mientras que (NGENERADOS < N) hacer Para Y:=0 hasta T hacer ´ SimularConTiempo(p,Y,T,EXITO,RESULTADO); ´ Si (EXITO) AND (RESULTADO=1) entonces NGENERADOS:=NGENERADOS+1; Si NGENERADOS=N entonces ULTIMO:=Y; Fsi; Fpara; T:=T+1; Fmq; Devuelve ULTIMO; 8. ⇒ 7. Inmediato. Teorema 3.13 Dado un conjunto A infinito, son equivalentes: 1. A es decidible. 2. La funci´on χA es calculable. 3. Existe un programa p que genera A en orden y sin repeticiones (es decir, para todo n > 0, ϕp (n − 1) < ϕp (n)). Dem. 1. ⇒ 2. Al ser A decidible tenemos un programa p que resuelve A. Recordemos que la funci´on χA est´a definida como: (
χA (x) =
1 si x ∈ A 0 si x 6∈ A
Luego el mismo programa p calcula χA . 2. ⇒ 3. Sea p un programa que calcula χA . Al ser una funci´on total el programa para siempre y por tanto podemos ir enumerando en orden las entradas cuya salida es 1:
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
41
Leer N NELEMENTOS:=0; M:=0; Mientras que (NELEMENTOS < N) hacer ´ Simular(p,M,EXITO,RESULTADO); Si RESULTADO=1 entonces NELEMENTOS:=NELEMENTOS+1; Fsi; M:=M+1; Fmq; Devuelve RESULTADO; 3. ⇒ 1. Sea p un programa que genera A en orden y sin repeticiones. Para resolver A s´olo tenemos que ir generando elementos hasta que sepamos que est´a el que buscamos o que ya no va a aparecer: Leer X ´ Simular(p,0,EXITO,RESULTADO); N:=1; Mientras que (RESULTADO < X) hacer ´ Simular(p,N,EXITO,RESULTADO); N:=N+1; Fmq; Si RESULTADO=X entonces Devuelve 1 else Devuelve 0; Fsi; El programa anterior para siempre.
3.5.
Propiedades elementales de los conjuntos decidibles y semidecidibles
Propiedad 3.14 Todo conjunto finito es decidible. Dem. Sea L = {a1 , . . . , ak } un conjunto finito. Para resolver el problema
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
42
s´olo necesitamos un programa que compare la entrada con k constantes, las k palabras de L: Leer X Case X of a1 Devuelve a2 Devuelve ... ak Devuelve else Devuelve
1; 1; 1; 0;
Propiedad 3.15 Un conjunto L es decidible si y s´ olo si L es decidible. ∗ (L es el complementario de L, L = {x | x ∈ Σ ∧ x 6∈ L}.) Dem. Si p es un programa que resuelve L, el siguiente programa resuelve L: Leer X ´ simular(p,X,EXITO,RESULTADO); Si RESULTADO=0 entonces Devuelve 1 else Devuelve 0; La otra implicaci´on es id´entica, ya que L = L. Propiedad 3.16 Si A y B son conjuntos decidibles entonces A ∪ B es decidible y A ∩ B es decidible. Dem. Tenemos p y q programas que resuelven A y B respectivamente. Los siguientes programas resuelven A ∪ B y A ∩ B respectivamente. Leer X ´ simular(p,X,EXITO,RESULTADO); ´ simular(q,X,EXITO2,RESULTADO2); Si RESULTADO=1 OR RESULTADO2=1 entonces Devuelve 1 else Devuelve 0;
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
43
Leer X ´ simular(p,X,EXITO,RESULTADO); ´ simular(q,X,EXITO2,RESULTADO2); Si RESULTADO=1 AND RESULTADO2=1 entonces Devuelve 1 else Devuelve 0;
Propiedad 3.17 Un conjunto A es decidible si y s´ olo si A y A son ambos semidecidibles. Dem. ⇒) Si A es decidible entonces A es decidible (propiedad 3.15). Si A y A son decidibles entonces A y A son ambos semidecidibles (propiedad 3.6). ⇐) Por ser A y A semidecidibles tenemos p y q dos programas que resuelven al menos el caso positivo de A y A, respectivamente. El siguiente programa resuelve A: Leer X T:=1; TERMINADO:=FALSE; Mientras que NOT TERMINADO hacer ´ SimularConReloj(p,X,T,EXITO,RESULTADO); ´ Si EXITO entonces Devuelve RESULTADO; TERMINADO:=TRUE; else ´ SimularConReloj(q,X,T,EXITO2,RESULTADO2); ´ Si EXITO2 entonces Devuelve 1-RESULTADO2; TERMINADO:=TRUE; Fsi; Fsi; T:=T+1; Fmq;
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
44
Si x ∈ A entonces p(x) ↓, luego entrar´a en el primer entonces (si no ha entrado antes en el segundo). Si x 6∈ A entonces q(x) ↓, luego entrar´a en el segundo entonces (si no ha entrado antes en el primero). Luego el programa para siempre, y la respuesta que da es siempre correcta. Esta u ´ltima propiedad confirma la intuici´on de que A es semidecidible si se puede resolver ¿x ∈ A ? en el caso afirmativo. Como consecuencia tenemos el siguiente resultado para H (y para cualquier otro conjunto que sea semidecidible y no sea decidible). Corolario 3.18 H no es semidecidible Dem. Sabemos que H es semidecidible pero no decidible. Si H fuera semidecidible entonces, por la propiedad anterior H ser´ıa decidible. Propiedad 3.19 Si A y B son conjuntos semidecidibles entonces A ∪ B es semidecidible y A ∩ B es semidecidible Dem. Tenemos p y q programas que resuelven al menos el caso positivo de A y B respectivamente. Los siguientes programas resuelven al menos el caso positivo de A ∪ B y A ∩ B respectivamente. Leer X T:=1; TERMINADO:=FALSE; Mientras que NOT TERMINADO hacer ´ SimularConTiempo(p,X,T,EXITO,RESULTADO); ´ Si (EXITO) AND (RESULTADO=1) entonces TERMINADO:=TRUE; Fsi; ´ SimularConTiempo(q,X,T,EXITO2,RESULTADO2); ´ Si (EXITO2) AND (RESULTADO2=1) entonces TERMINADO:=TRUE; Fsi; T:=T+1; Fmq;
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
45
Devuelve 1; Leer X ´ Simular(p,X,EXITO,RESULTADO); ´ Simular(q,X,EXITO2,RESULTADO2); ´ ´ Si EXITO AND EXITO2 entonces Si RESULTADO=1 AND RESULTADO2=1 entonces Devuelve 1; En ambos casos los programas anteriores dan salida en los casos que nos interesan (A∪B y A∩B respectivamente), a pesar de que los programas p y q no necesariamente paran siempre. EJERCICIOS 3.1. Dadas dos funciones calculables f y g, sea h la funci´on h(x) = 0,
si x ∈ Dom(f ) ∪ Dom(g).
Demostrar que h es calculable. 3.2. Lo mismo que el anterior, con h definida como h(x) = 0,
si x ∈ Dom(f ) ∩ Dom(g).
3.3. Demostrar el Teorema 3.9. 3.4. Demostrar que el conjunto de los conjuntos semidecidibles es numerable. Hacer lo mismo para el conjunto de los conjuntos decidibles. 3.5.
1. ¿Existe alg´ un conjunto que no sea decidible y que contenga un subconjunto infinito decidible? 2. Demostrar que todo conjunto semidecidible e infinito tiene un subconjunto decidible infinito. (Idea: utilizar las caracterizaciones de las propiedades 3.12 y 3.13.)
3.6.
1. Demostrar por diagonalizaci´on que existe un conjunto que no es semidecidible.
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
46
2. Demostrar por diagonalizaci´on que no existe un programa que genere T , el conjunto de programas que para para todas las entradas. (Idea: Para cada programa p que genera A ⊆ T , definimos un programa q con ϕq (n) = ϕϕp (n) (n) + 1, que no est´a en A pero s´ı en T .) 3.7. Si definimos φ : Σ∗ × Σ∗ → IN como φ(x, y) = 1, si x(z) ↓ para alg´ un z ≤ y. ¿Es φ calculable? ¿Es total? 3.8. Si definimos φ como φ(x, y) = 1, si x(k) ↓ para alg´ un k > y. ¿Es φ calculable? ¿Es total? 3.9. Demostrar que toda funci´on de dominio finito es calculable. 3.10. Demostrar que no toda funci´on de imagen finita es calculable. 3.11. Sea f : IN → IN la funci´on definida como f (n) =
n X
ϕi (n), si 0(n) ↓, 1(n) ↓, . . . , n(n) ↓ .
i=0
1. Demostrar que f tiene dominio finito y por tanto es calculable. 2. Demostrar que el conjunto {n, m | f (n) = m} es decidible. 3.12. Sea ψ una funci´on calculable y A un conjunto semidecidible. Demostrar que ψ −1 (A) = {x | ψ(x) ∈ A} es semidecidible. 3.13. Sea A un conjunto semidecidible Demostrar que el conjunto B = {x | ∃y x, y ∈ A} tambi´en es semidecidible.
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
47
3.14. Sea A un conjunto semidecidible Demostrar que [
Dom(ϕi )
i∈A
tambi´en es semidecidible. 3.15. Demostrar que las funciones f y g definidas a continuaci´on son calculables pero no tienen ninguna extensi´on calculable total. 1. f (x, y) = ϕx (y) + 1 si x(y) ↓. (Idea, por diagonalizaci´on, para cada h calculable total tomamos M un programa que calcula v(x) = h(x, x). Estudiar f (M, M ) y h(M, M ).) 2. g(x, y) = t si x(y) para en exactamente t pasos. (Idea, usar reducci´on al absurdo, si existe tal extensi´on entonces H es decidible.) 3.16. Sea f la funci´on que con entrada x devuelve la codificaci´on del siguiente programa Leer N Si N= x entonces Devuelve 1 else Devuelve 0; 1. ¿Es f calculable? ¿Es f total? ¿Es f inyectiva? 2. Para cada x, ¿cu´anto vale la funci´on ϕf (x) ? ¿Es calculable? ¿Es inyectiva? 3. ¿Qu´e se puede decir del conjunto {x, y | ϕf (x) (y) = ϕf (y) (x)}? 4. ¿Es H ∩ {f (x), x | x ∈ Σ∗ } un conjunto decidible? 3.17. Sea h la funci´on que con entrada x devuelve la codificaci´on del siguiente programa Leer N Si N= x entonces Devuelve 1 else repetir hasta que 1 > 2;
CAP´ITULO 3. PROBLEMAS DECIDIBLES Y SEMIDECIDIBLES
48
1. ¿Es h calculable? ¿Es h total? ¿Es h inyectiva? 2. Para cada x, ¿cu´anto vale la funci´on ϕh(x) ? ¿Es total? ¿Es calculable? ¿Es inyectiva? 3. ¿Qu´e se puede decir del conjunto {x, y | ϕh(x) (y) = ϕh(y) (x)}? 4. ¿Es H ∩ {h(x), x | x ∈ Σ∗ } un conjunto decidible?
Cap´ıtulo 4
Reducciones. El teorema de Rice Referencia: Cap´ıtulos 9.1 y 6.1 de [Cu80]. Secci´on 10.1 de [Jones].
4.1.
Reducciones
En este apartado formalizaremos la idea de reducir un conjunto (o problema decisional) a otro, como medio de de mostrar que un conjunto es no decidible, o bien que no es semidecidible. La idea informal de que el conjunto A se puede reducir al conjunto B se puede expresar de varias formas: 1. “Resolver A se reduce a resolver B”: a partir de un programa que resuelve B podemos construir otro que resuelve A. 2. Resolver A no es m´as dif´ıcil que resolver B. 3. Resolver A es tan f´acil o m´as que resolver B. Nosotros usaremos la siguiente formalizaci´on de reducibilidad, que corresponde al tipo m´as sencillo: Definici´on 4.1 Un conjunto A es reducible a un conjunto B si existe una funci´on f calculable y total tal que, para cada x ∈ Σ∗ x ∈ A ⇔ f (x) ∈ B 49
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
50
Es decir, f transforma la pregunta ¿x ∈ A? a ¿f (x) ∈ B? de forma que si puedo resolver ¿f (x) ∈ B? tengo resuelto ¿x ∈ A? porque s´e que la respuesta es la misma. Notaci´on: A es reducible a B lo denotaremos: A ≤m B La funci´on f de la definici´on anterior es una reducci´on de A a B. Ejemplo 4.2 Sean H y K los conjuntos definidos en el cap´ıtulo anterior (el problema de parada y el problema diagonal de parada): K = {p | p(p) ↓} H = {p, x | p(x) ↓} Veamos que K ≤m H. Sea f : Σ∗ → Σ∗ la siguiente funci´on: ∀p f (z) = hp, pi f es total y claramente calculable. Veamos que f es una reducci´on de K en H. Si p ∈ K entonces p(p) ↓ y por tanto p, p ∈ H. Si p 6∈ K entonces p(p) ↑ y por tanto p, p 6∈ H. Luego p ∈ K ⇔ f (p) ∈ H y por tanto K ≤m H. Ejemplo 4.3 Dados dos conjuntos A y B, sea A ⊕ B = {0w | w ∈ A} ∪ {1w | w ∈ B} es decir, las palabras de A con 0 delante y las palabras de B con 1 delante. Esto se denomina uni´on marcada de A y B. Entonces K ⊕ K = {0w | w ∈ K} ∪ {1w | w ∈ K} = {0w | w ∈ K} ∪ {1w | w 6∈ K} Veamos que K ≤m K ⊕ K y K ≤m K ⊕ K Esto se demuestra utilizando las reducciones: f (x) = 0x g(x) = 1x
(para K ≤m K ⊕ K) (para K ≤m K ⊕ K).
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
51
Ejemplo 4.4 Veamos que H ≤m K. Sea f : Σ∗ → Σ∗ la funci´on: “Leer N constantes :=p; CX:=x; f (p, x) = ´ Simular(, CX, EXITO); ´ Si EXITO entonces Devuelve 5.” f es una funci´on total y calculable calculada por el programa:
Leer Q,X RESULTADO:=CONCATENAR(“Leer N; constantes :=”,Q); RESULTADO:=CONCATENAR(RESULTADO, “; CX:=”); RESULTADO:=CONCATENAR(RESULTADO, X); ´ ´ RESULTADO:=CONCATENAR(RESULTADO, “; Simular(, CX, EXITO); Si EXITO Devuelve RESULTADO; Veamos que f es una reducci´on de H en K. Si p, x ∈ H entonces p(x) ↓ y por tanto ∀n f (p, x)(n) ↓, es decir, para cualquier n el programa f (p, x) para con entrada n. Por tanto f (p, x) con entrada f (p, x) para. Si p, x 6∈ H entonces p(x) ↑ y por tanto ∀n f (p, x)(n) ↑, es decir, para cualquier n el programa f (p, x) con entrada n no para. Por tanto f (p, x)(f (p, x)) ↑ (f (p, x) con entrada f (p, x) no para). Luego p, x ∈ H ⇒ f (p, x) ∈ K p, x 6∈ H ⇒ f (p, x) 6∈ K y por tanto H ≤m K.
4.2.
Propiedades elementales de las reducciones
El siguiente teorema explica el inter´es de las reducciones. En ´el se formaliza la idea de que si A ≤m B entonces A es tanto o m´as f´acil que B. Teorema 4.5 Sean A y B dos conjuntos tales que A ≤m B. Entonces se cumple que: 1. Si B es decidible entonces A es decidible.
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
52
2. Si B es semidecidible entonces A es semidecidible. Dem. Sea f una reducci´on de A a B. 1. Como B es decidible, tenemos un programa p que resuelve B. Veamos que A es decidible dando un programa que resuelve A: Leer X Y:=f (X); ´ Simular(p,Y,EXITO,RESULTADO); Si RESULTADO=1 entonces Devuelve 1 else Devuelve 0. El algoritmo anterior para siempre ya que f es calculable total y p para siempre. Como x ∈ A ⇔ f (x) ∈ B, el algoritmo anterior resuelve A. 2. Como B es semidecidible, tenemos un programa p que resuelve al menos el caso positivo de B. Veamos que A es semidecidible dando un programa que resuelve al menos el caso positivo de A: Leer X Y:=f (X); ´ Simular(p,Y,EXITO,RESULTADO); ´ Si EXITO Si RESULTADO=1 entonces Devuelve 1. El algoritmo anterior para cuando x ∈ A y resuelve al menos el caso positivo de B ya que f es calculable total, p para cuando z ∈ B y x ∈ A ⇔ f (x) ∈ B. El teorema anterior se puede enunciar equivalentemente como: Teorema 4.6 Sean A y B dos conjuntos tales que A ≤m B. Entonces se cumple que: 1. Si A no es decidible entonces B no es decidible. 2. Si A no es semidecidible entonces B no es semidecidible. lo que nos servir´a para demostrar que algunos conjuntos son indecidibles o no son semidecidibles.
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
53
Ejemplo 4.7 Sea A el conjunto: A = {x | ϕx es inyectiva y Dom(ϕx ) 6= ∅} Veamos que K ≤m A. Sea f : Σ∗ → Σ∗ la funci´on: “Leer N constante :=p; f (p) = ´ Simular(, , EXITO); ´ Si EXITO entonces Devuelve N.” f es claramente total y calculable. Veamos que es la reducci´on que buscamos: p ∈ K ⇒ p(p) ↓⇒ f (p) es un programa que calcula la identidad, ∀n ϕf (p) (n) = n ⇒ ϕf (p) es inyectiva, Dom(ϕf (p) ) = Σ∗ ⇒ f (p) ∈ A. p 6∈ K ⇒ p(p) ↑⇒ f (p) es un programa que no para para ninguna entrada, ϕf (p) tiene dominio vac´ıo ⇒ f (p) 6∈ A. Luego K ≤m A. Utilizando el teorema 4.6 (que es el mismo que el 4.5), como sabemos que K no es decidible (teorema 3.3) sabemos que A no es decidible. El siguiente teorema demuestra que los conjuntos decidibles son reducibles a todos los conjuntos. Intuitivamente esto quiere decir que seg´ un el orden marcado por las reducciones ≤m los conjuntos decidibles son los m´as f´aciles. Teorema 4.8 Sea A un conjunto decidible. Sea B un conjunto cualquiera tal que B 6= ∅ y B 6= Σ∗ . Entonces A ≤m B Dem. Por ser B 6= ∅ y B 6= Σ∗ sabemos que existen palabras dentro y fuera de B. Fijamos b0 ∈ B y b1 6∈ B. La funci´on (
f (x) =
b0 b1
si x ∈ A si x ∈ 6 A
es total y calculable ya que la calcula el siguiente algoritmo, donde p es un programa que resuelve A:
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
54
Leer X ´ SIMULAR(p, X, EXITO, RESULTADO); Si RESULTADO=1 entonces Devuelve b0 else Devuelve b1 . (En este algoritmo b0 y b1 son constantes.) f es claramente una reducci´on de A en B. La reducci´on ≤m es transitiva: Teorema 4.9 Si A ≤m B y B ≤m C entonces A ≤m C. Dem. Sea f una reducci´on de A en B y g una reducci´on de B en C. Entonces la composici´on de f y g, g ◦ f (x) = g(f (x)) es una reducci´on de A a C, ya que es calculable total (por serlo f y g) y cumple: x ∈ A ⇔ f (x) ∈ B ⇔ g(f (x)) = g ◦ f (x) ∈ C. Vamos a ver a continuaci´on que H y K est´an entre los m´as dif´ıciles de los conjuntos semidecidibles. Definici´on 4.10 Dado un conjunto o clase de conjuntos C, un conjunto X ∈ C es completo para C si para todo A ∈ C, A ≤m X. Teorema 4.11 H es completo para la clase de los conjuntos semidecidibles, es decir, si A es un conjunto semidecidible entonces A ≤m H. Dem. Sea A un conjunto semidecidible. Sea p un programa que resuelve al menos el caso positivo de A. Existe un programa que resuelve al menos el caso positivo de A y s´olo da salida para las entradas en A: x0 : Leer X ´ Simular(p, X, EXITO, RESULTADO); ´ Si EXITO entonces Si RESULTADO=1 entonces Devuelve 1. Sea f : Σ∗ → Σ∗ la funci´on: f (z) = x0 , z f es claramente una funci´on total y calculable calculada por el programa:
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
55
Leer Z Devuelve x0 , Z. (x0 es una constante del programa.) Veamos que f es una reducci´on de A en H. z ∈ A ⇒ ϕx0 (z) = 1 ⇒ x0 (z) ↓⇒ f (z) = x0 , z ∈ H z 6∈ A ⇒ x0 (z) ↑⇒ f (z) = x0 , z 6∈ H
Por la transitividad tenemos: Corolario 4.12 Sea X un conjunto semidecidible y sea C un conjunto completo para los semidecidibles. Si C ≤m X entonces X es completo para la clase de los conjuntos semidecidibles. Dem. Sea A un conjunto semidecidible. Como sabemos que A ≤m C y por hip´otesis C ≤m X, aplicando transitividad (teorema 4.9) tenemos que A ≤m X. Con los dos u ´ltimos resultados tenemos: Corolario 4.13 K es completo para la clase de los conjuntos semidecidibles. Dem. H ≤m K (ejemplo 4.4) y H es completo para los semidecidibles (teorema 4.11), luego por el corolario anterior K es completo para los semidecidibles. Nota: Las reducciones que utilizaremos en los problemas ser´an a menudo reducciones desde H o desde H. Adem´as ser´an casi todas de unos de los dos tipos que inclu´ımos a continuaci´on. Definimos las funciones f1 y f2 como: “Leer N constante :=p; CX:=x; ´ f1 (p, x) = Simular(, CX, EXITO); ´ Si EXITO entonces ´ CODIGO1.”
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
56
“Leer N constante :=p; CX:=x; ´ SimularConTiempo(, CX, N, EXITO); ´ entonces f2 (p, x) = Si EXITO ´ CODIGO1 else ´ CODIGO2.” Veamos c´omo funcionaran f1 y f2 como reducciones desde H: ´ p, x ∈ H ⇒ p(x) ↓⇒ f1 (p, x) es un programa que ejecuta CODIGO1. p, x 6∈ H ⇒ p(x) ↑⇒ f1 (p, x) es un programa que no para para ninguna entrada, ϕf1 (p,x) tiene dominio vac´ıo. p, x ∈ H ⇒ p(x) ↓⇒ ∃n0 tal que p con entrada x tarda exactamente tiempo n0 , luego f2 (p, x) es un programa que con entrada n < n0 ejecuta ´ ´ CODIGO2 y con entrada n ≥ n0 ejecuta CODIGO1. ´ p, x 6∈ H ⇒ p(x) ↑⇒ f2 (p, x) es un programa que ejecuta CODIGO2. ´ ´ Eligiendo adecuadamente CODIGO1 y CODIGO1 podemos tener gran variedad de reducciones, como veremos en los problemas.
4.3.
Conjuntos de ´ındices, teorema de Rice
Hasta ahora hemos visto dos tipos de demostraciones de que un conjunto no es decidible: la que utilizamos para el problema de parada, basada en diagonalizaci´on, y las demostraciones del apartado anterior basadas en reducciones desde un conjunto indecidible utilizando el teorema 4.5. Vamos a ver ahora un tercer m´etodo que sirve exclusivamente para los conjuntos que llamaremos conjuntos de ´ındices, que nos servir´a para ahorrarnos unas cuantas reducciones. Definici´on 4.14 Sea f una funci´on. Llamaremos conjunto de ´ındices de f al siguiente conjunto: IND(f ) = {p | ϕp ≡ f } Es decir, el conjunto de ´ındices de una funci´on f est´a formado por todos los programas que calculan f .
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
57
Por supuesto, si f no es calculable entonces IND(f ) = ∅. Ejercicio: Demostrar que si f es una funci´on calculable entonces IND(f ) es infinito. Definici´on 4.15 Sea F un conjunto de funciones. Llamaremos conjunto de ´ındices de F a: IND(F ) =
[
IND(f ) = {p | ϕp ∈ F }
f ∈F
es decir, el conjunto de los programas que calculan una funci´on de F . Definici´on 4.16 Sea A un conjunto. Diremos que A es un conjunto de ´ındices si existe un conjunto de funciones F tal que A = IND(F ). En otras palabras, si un conjunto es un conjunto de ´ındices y contiene un programa que calcula una funci´on contiene todos los programas que la calculan, y viceversa, si no contiene uno no contiene ninguno. La siguiente propiedad se deja como ejercicio: Propiedad 4.17 Sea A un conjunto. A es un conjunto de ´ındices si y s´olo si [ INDϕx ⊆ A x∈A
A continuaci´on veremos que ning´ un conjunto de ´ındices no trivial es decidible. Teorema 4.18 Teorema de Rice. Sea A un conjunto de ´ındices con A 6= ∅ y A 6= Σ∗ . Entonces A es indecidible. Dem. Vamos a ver que se cumple al menos una de las dos siguientes afirmaciones: 1. H ≤m A 2. H ≤m A Si demostramos 1., como H no es decidible, A no puede serlo tampoco. Si demostramos 2., como H no es decidible, A tampoco. Sea v la funci´on de dominio vac´ıo, funci´on que calculan los programas que no paran para ninguna entrada. Como A es un conjunto de ´ındices, tenemos dos casos posibles:
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
58
1. IND(v) ∩ A = ∅. En este caso demostraremos que H ≤m A. 2. IND(v) ⊆ A. Aqu´ı demostraremos que H ≤m A. Caso 1: Si IND(v)∩A = ∅, sea g una funci´on calculable tal que IND(g) ⊆ A (g existe porque A 6= ∅ y es un conjunto de ´ındices), sea w0 un programa que calcula g. Definimos α la siguiente funci´on: “Leer N constante :=p; CX:=x; ´ Simular(,CX,EXITO); α(p, x) = ´ Si EXITO entonces ´ Simular(w0 ,N,EXITO2,RESULTADO2); ´ Si EXITO2 entonces Devuelve RESULTADO2.” Veamos que α es una reducci´on de H en A. Si p(x) ↓, α(p, x) es un programa que calcula g. Si p(x) ↑ entonces α(p, x) es un programa que no para con ninguna entrada, luego calcula v. Por tanto p, x ∈ H ⇒ α(p, x) ∈ IND(g) ⇒ α(p, x) ∈ A p, x 6∈ H ⇒ α(p, x) ∈ IND(v) ⇒ α(p, x) 6∈ A Luego en este caso H ≤m A. Caso 2: Si IND(v) ⊆ A, sea f una funci´on calculable tal que IND(f ) ∩ A = ∅ (f existe porque A 6= Σ∗ y es un conjunto de ´ındices), sea w1 la codificaci´on de un programa que calcula f . Definimos β la siguiente funci´on: “Leer N constante :=p; CX:=x; ´ Simular(,CX,EXITO); β(p, x) = ´ Si EXITO entonces ´ Simular(w1 ,N,EXITO2,RESULTADO2); ´ Si EXITO2 entonces Devuelve RESULTADO2.” Veamos que β es una reducci´on de H en A. Si p(x) ↑ entonces β(p, x) es un programa que no para con ninguna entrada, luego calcula v. Si p(x) ↓, β(p, x) es un programa que calcula f . Por tanto p, x ∈ H ⇒ β(p, x) ∈ IND(v) ⇒ β(p, x) ∈ A p, x 6∈ H ⇒ β(p, x) ∈ IND(f ) ⇒ β(p, x) 6∈ A
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
59
Luego en este caso H ≤m A. Como corolario al caso 2 de la demostraci´on anterior tenemos: Corolario 4.19 Sea A un conjunto de ´ındices con A 6= ∅ y A 6= Σ∗ y tal que A contiene un programa que calcula la funci´ on vac´ıa. Entonces A no es semidecidible. Dem. Esto es consecuencia de la demostraci´on anterior, ya que este caso, IND(v) ⊆ A, demostramos que H ≤m A. ¿Cu´ando podemos utilizar el teorema de Rice para demostrar que un conjunto no es decidible? Cuando dicho conjunto es un conjunto de ´ındices, es decir, cuando el hecho de que p est´e o no en el conjunto s´olo depende de qui´en es ϕp . Sea L = {x | ϕx es inyectiva}. L es el conjunto de Ejemplos 4.20 ´ındices de F = {f | f es inyectiva}. L 6= ∅ ya que existen funciones calculables e inyectivas, por ejemplo la funci´on identidad ident(x) = x ∀x. L 6= Σ∗ ya que existen funciones calculables no inyectivas, por ejemplo una funci´on constante f (x) = 0 ∀x. Luego por el teorema de Rice, L no es decidible. No se puede usar Rice para el siguiente conjunto L = {x | ϕx (x) = 1} ya que no es un conjunto de ´ındices, porque pueden existir dos programas x 6= y que calculan la misma funci´on f y tales que f (x) = 1, f (y) 6= 1. Tanto x como y est´an en IND(f ), pero x ∈ L y y 6∈ L. Luego L no es un conjunto de ´ındices. Tampoco se puede usar para K = {p | p(p) ↓} ya que pueden existir dos programas x, y que calculen la misma funci´on f , con f (x) definida y f (y) indefinida. En este caso x ∈ K, y 6∈ K, x, y ∈ IND(f ), luego K no es un conjunto de ´ındices.
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
60
En los dos casos anteriores el hecho de que p est´e o no en el conjunto NO depende s´olo de qui´en es ϕp , sino tambi´en de p tomado como entrada. Por tanto no se puede aplicar Rice. Cuando no es posible utilizar Rice, otro m´etodo para demostrar que un conjunto no es decidible son las reducciones vistas en este mismo cap´ıtulo. Ejemplo 4.21 Veamos que H ≤m L, donde L = {x | ϕx (x) = 1} Como sabemos que H no es decidible, entonces L no lo es. La reducci´on es “Leer N constante :=p; CX:=x; f (p, x) = ´ Simular(,CX,EXITO); ´ Si EXITO entonces Devuelve 1.” Si p, x ∈ H ⇒ p(x) ↓⇒ f (p, x) es un programa que calcula la funci´on constante 1 ⇒ ϕf (p,x) (f (p, x)) = 1 ⇒ f (p, x) ∈ L. Si p, x 6∈ H ⇒ p(x) ↑⇒ f (p, x) es un programa que no para nunca ⇒ f (p, x)(f (p, x)) ↑ ⇒ f (p, x) 6∈ L. EJERCICIOS Decir si los siguientes conjuntos son o no decidibles, y si son o no semidecidibles. 4.1. {x | ϕx (x) = x}. 4.2. {x, y, z | ϕx (y) = z}. 4.3. {x, y, z | ϕx (z) = ϕy (z)}. 4.4. {x | ϕx es suprayectiva}. 4.5. {x | ϕx no es suprayectiva}. 4.6. {x | ϕx es inyectiva}. 4.7. {x | ϕx no es inyectiva}.
CAP´ITULO 4. REDUCCIONES. EL TEOREMA DE RICE
61
4.8. {x | ϕx es biyectiva}. 4.9. {x | ϕx no es biyectiva}. 4.10. {x | ϕx es total}. 4.11. {x | x no da salida para ninguna entrada}. 4.12. {x | Dom(ϕx ) es indecidible}. 4.13. {x | Dom(ϕx ) es decidible}. 4.14. {x | Dom(ϕx ) no es semidecidible}. 4.15. {x | Dom(ϕx ) es semidecidible }. 4.16. {x | Im(ϕx ) = ∅}. 4.17. {x | Im(ϕx ) es indecidible }. 4.18. {x | Im(ϕx ) es decidible }. 4.19. {x | Im(ϕx ) no es semidecidible }. 4.20. {x | Im(ϕx ) es semidecidible }. 4.21. {x, y | y ∈ Im(ϕx )}. 4.22. {x | ϕx es constante}. 4.23. {x | ϕx tiene una extensi´on calculable total}. Pista: usar el ejercicio 3.15. 4.24. {x, y | Dom(ϕx ) = Dom(ϕy )}. 4.25. {x | ∃t(x(t) ↓ y ϕx (t) = ϕt (t))}. 4.26. {x | Im(ϕx ) ⊆ {0, 1}}. 4.27. {x | Im(ϕx ) ⊆ {0, 1} y (∀yϕx (y) = 1 si y s´olo si y(y) ↓)}. 4.28. {x | Im(ϕx ) ⊆ {0, 1} y (∀yϕx (y) = 1 ⇒ y(y) ↓)}. 4.29. {x, y | ϕx = ϕy }. 4.30. Demostrar la Propiedad 4.17.
Cap´ıtulo 5
Otros problemas indecidibles Referencia: Cap´ıtulos 6.3 de [Cu80] y 9.4 de [HMU02]. De los cap´ıtulos anteriores sabemos que los siguientes problemas son indecidibles: Dado un programa p, ¿termina p con cualquier entrada? Dados dos programas p y q, ¿calculan p y q la misma funci´on? Dado un programa p y una entrada x, ¿para p con entrada x? A continuaci´on enunciamos algunos problemas indecidibles hist´oricos. Por falta de tiempo no demostraremos la indecidibilidad. Ecuaciones diof´anticas. Dada una ecuaci´on de cualquier grado con coeficientes enteros, ¿tiene dicha ecuaci´on alguna soluci´on entera? El problema de correspondencia de Post. Dadas dos listas de palabras de Σ∗ , A = (x1 , . . . , xn ) y B = (y1 , . . . , yn ), ¿existe una secuencia no vac´ıa de enteros (i1 , . . . , ir ) con 1 ≤ ij ≤ n para 1 ≤ j ≤ r tal que xi1 . . . xir = yi1 . . . yir . Ejemplo de entrada del problema de Post: x1 = 111 y1 = 1 x2 = 10 y2 = 10111 x3 = 0 y3 = 10 Para esta entrada la soluci´on es SI, ya que y2 y1 y1 y3 = x2 x1 x1 x3 = 101111110 62
Cap´ıtulo 6
Otros modelos de c´ alculo: la tesis de Turing-Church Referencia: Cap´ıtulos 2 y 3 de [Cu80]. Hemos definido en los cap´ıtulos anteriores el concepto de funci´on calculable por un programa de nuestro modelo RAM (as´ı como el concepto de conjunto decidible que se puede caracterizar a partir del de funci´on calculable). En los u ´ltimos 50 a˜ nos ha habido muchas propuestas distintas para una caracterizaci´on formal precisa de la idea informal de “lo que se puede calcular de manera autom´atica”. La propuesta m´as reciente es la que hemos presentado en el cap´ıtulo 2, la m´aquina de registros o RAM. En este cap´ıtulo vamos a considerar algunas otras formalizaciones: Las funciones recursivas de G¨odel y Kleene (1936). Las m´aquinas de Turing (1936). El λ-c´alculo de Church (1930). De estos modelos nos interesan dos cuestiones: 1. ¿C´omo se relacionan las distintas formalizaciones entre s´ı, y en particular con la RAM? 2. ¿Con qu´e exactitud caracterizan estos modelos (y en particular la RAM) la idea intuitiva de calculable? 63
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
6.1.
64
Las funciones recursivas de G¨ odel y Kleene
G¨odel y Kleene definen expl´ıcitamente qu´e funciones son calculables, es decir, dan una definici´on independiente de un modelo de c´alculo concreto. Veremos que su definici´on coincide con la nuestra de funci´on calculable. En esta secci´on trabajamos con funciones de INn en IN (n ≥ 1). Veamos primero tres formas de construir unas funciones a partir de otras. Sea x = (x1 , . . . , xn ). 1. Dadas las funciones f (y1 , . . . , yk ), g1 (x ), g2 (x ), . . . gk (x ) la sustituci´on de g1 , . . . , gk en f es la funci´on h: h(x ) = f (g1 (x ), g2 (x ), . . . gk (x )) 2. Dadas las funciones f (x ), g(x , y, z) la recursi´on de f y g es la funci´on h: h(x , 0) = f (x ) h(x , y + 1) = g(x , y, h(x , y)) 3. Dada la funci´on f (x , y), la minimalizaci´on de f es la funci´on h tal que h(x ) = el m´ınimo y tal que (i) f (x , y) = 0, (ii) f (x , z) est´a definido, para todo z ≤ y, si existe tal y. indefinida, en otro caso (h es una versi´on fuerte de “el menor y tal que f (x , y) = 0”). Ejemplos 6.1
La funci´on h h(x, 0) = x+1 h(x, y + 1) = x + h(x, y)
es la recursi´on de f (x) = x + 1, g(x, y, z) = x + z.
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
65
La funci´on h h(0) = 1 h(y + 1) = y · h(y) es la recursi´on de f ≡ 1, g(y, z) = y · z. Dado p(x) un polinomio de coeficientes enteros, la funci´on h(z) =
“la menor raiz entera de p(x) − z (si existe tal raiz)”
es la minimalizaci´on de f (z, x) = p(x) − z. A continuaci´on damos la definici´on de funciones recursivas de G¨odel y Kleene. Definici´on 6.2 El conjunto de las funciones recursivas de G¨odel y Kleene es el menor conjunto que contiene las siguientes funciones: 1. La funci´on constante 0: 0(n) = 0 ∀n. 2. La funci´on sucesor s(n) = n + 1 ∀n. 3. Para cada n ∈ IN, i ≤ n, la funci´on de proyecci´on i-´esima Uin definida como: Uin (x1 , . . . , xn ) = xi y es cerrado por las operaciones de sustituci´on, recursi´on y minimalizaci´on. Nota: Un conjunto A es cerrado por una operaci´on ∗ si para todo f, g ∈ A se cumple que f ∗ g ∈ A. Esta definici´on de funci´on recursiva de G¨odel y Kleene dada es formalista, no usa ning´ un modelo de c´alculo sino que a partir de unas funciones elementales (1., 2. y 3.) se construyen todas las funciones recursivas de G¨odel y Kleene usando sustituci´on, recursi´on y minimalizaci´on. Ejemplos 6.3 Algunas funciones recursivas de G¨odel y Kleene: La funci´on suma, obtenida como recursi´on de U11 y la funci´on sucesor: suma(n, 0) = U11 (n) suma(n, m + 1) = s(U33 (n, m, suma(n, m)))
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
66
La funci´on suma de 3, obtenida aplicando la sustituci´on a la anterior: h(x, y, z) = suma(x, suma(y, z)) = suma(U13 (x, y, z), suma(U23 (x, y, z), U33 (x, y, z))) La funci´on predecesor p(m + 1) = m, p(0) = 0 puede obtenerse como p(m) = h(0, m) con h: h(n, 0) = 0(n) h(n, m + 1) = U23 (n, m, h(n, m)) ˙ = m´ax(x − y, 0) obtenida como recursi´on de U11 y La funci´on x−y la funci´on predecesor: ˙ n−0 = U11 (n) ˙ ˙ n−(m + 1) = p(U33 (n, m, n−m)) Si f es recursiva de G¨odel y Kleene, inyectiva y total, la funci´on f −1 (y) = x con f (x) = y obtenida por minimalizaci´on de h: ˙ (x)) + (f (x)−y) ˙ h(y, x) = (y −f Veamos que la definici´on de funci´on recursiva de G¨odel y Kleene coincide con nuestra definici´on de funci´on calculable, dada en el cap´ıtulo 2. Teorema 6.4 Una funci´on f es recursiva de G¨ odel y Kleene si y s´ olo si es calculable. Dem. (esquema) (Parte I) Demostramos que las funciones recursivas de G¨odel y Kleene son calculables: Una funci´on h recursiva de G¨odel y Kleene se obtiene aplicando a funciones b´asicas (0(x), s(x), Uin (x1 , . . . , xn )) un n´ umero finito de veces t, operaciones de sustituci´on, recursi´on y minimalizaci´on. Por inducci´on sobre t, el n´ umero de operaciones aplicadas: 1. t = 0. Se trata de una de las funciones b´asicas, para cualquiera de ellas podemos construir f´acilmente un programa que la calcula.
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
67
2. Paso de inducci´on, t > 0. Hay tres casos: (a) h es la sustituci´on de g1 (x1 , . . . , xn ), . . . , gk (x1 , . . . , xn ) en f , y cada una de las funciones g1 , . . . , gk , f se obtiene aplicando menos de t operaciones. Por hip´otesis de inducci´on, las funciones g1 , . . . , gk , f son calculables, y existen programas p1 , . . . , pk , q que calculan respectivamente g1 , . . . , gk , f . Utilizando estos programas y siguiendo la definici´on de h, tenemos un programa para h (n´otese que n es un valor fijo): Leer X1 , . . . , Xn Para I:=1 hasta k hacer AI := ϕpI (X1 , . . . , Xn ); Devuelve ϕq (A1 , . . . , Ak ). Por tanto h es calculable. (b) Los casos en que h es la recursi´on de dos funciones f y g, ´o h es es la minimalizaci´on de una funci´on f se demuestran an´alogamente al caso (a), utilizando la hip´otesis de inducci´on y la programaci´on de dichas operaciones. (Parte II) Esquema de la demostraci´on de que las funciones calculables son recursivas de G¨odel y Kleene: Sea h una funci´on calculable calculada por un programa p. Definimos dos funciones auxiliares c(x, t) = “contenido del registro de salida depu´es de t pasos de p con entrada x”. j(x, t) = “n´ umero de la instrucci´on ejecutada en el paso t de p con entrada x (vale 0 si p con entrada x termina antes)” Notemos que la minimalizaci´on de j(x, t) es el tiempo que tarda el programa p con entrada x. Si llamamos f (x) a esa minimalizaci´on, h(x) = c(x, f (x)). La demostraci´on se completa demostrando que tanto c como j son funciones recursivas de G¨odel y Kleene. Debido a la equivalencia de esta definici´on con la de funci´on calculable basada en el modelo RAM, podemos asegurar que todo programa es equivalente a un n´ umero finito de aplicaciones de los operadores sustituci´on, recursi´on y minimalizaci´on.
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
6.2.
68
Las m´ aquinas de Turing
Una m´aquina de Turing, abreviadamente TM, es un aut´omata finito con una cinta infinita adicional. La cinta est´a dividida en celdas, la m´aquina accede a la informaci´on de la cinta a trav´es de una cabeza lectora/escritora que puede leer/escribir sobre una u ´nica celda cada vez. La cabeza se puede mover a derecha o izquierda, pero s´olo una posici´on cada vez.
Una transici´on de una m´aquina de Turing depende del estado en que est´a la m´aquina y del contenido de la cabeza lectora, seg´ un estos se realizar´an las siguientes tres acciones: cambio de estado, escritura en la celda sobre la que est´a la cabeza, movimiento de la cabeza. Inicialmente, la posici´on m´as a la izquierda de la cinta contiene un car´acter especial .. A partir de esta posici´on contiene la palabra de entrada. El resto de la cinta contiene en todas las celdas un car´acter especial denominado blanco, al que representaremos con el signo b. itiremos tres tipos de movimientos para la cabeza: celda a la derecha, celda a la izquierda y no moverse. Si la cabeza est´a en la posici´on m´as a la izquierda de la cinta y se pide un movimiento a la izquierda, la cabeza no se mover´a. La definici´on formal de una m´aquina de Turing es: Definici´on 6.5 Una m´aquina de Turing es una estructura (Q, Σ, Γ, δ, q0 ), donde Q es un conjunto finito de estados,
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
69
Σ es un alfabeto, el alfabeto de entrada, Γ = Σ ∪ {., b} es el alfabeto de cinta (b,. 6∈ Σ), δ : Q × Γ → Q × Γ × {i, d, n} es una funci´on de transici´on, q0 es el estado inicial (q0 ∈ Q), La funci´on de transici´on especifica, dado el estado actual y el s´ımbolo que lee la cabeza, el nuevo estado, el nuevo s´ımbolo de dicha posici´on y un movimiento de la cabeza. Inicialmente la m´aquina se encuentra en el estado q0 , con una palabra w ∈ Σ∗ escrita en la parte izquierda de la cinta, precedida por el s´ımbolo ., y la cabeza sobre la segunda celda de la cinta (primer s´ımbolo de w). La m´aquina ejecuta transiciones mientras pueda aplicar la funci´on de transici´on. Si en alg´ un momento la m´aquina se encuentra en un estado q con car´acter a en la cabeza y no hay transici´on definida para el par (q, a), entonces la m´aquina para. Nota: Existen varias definiciones equivalentes de m´aquina de Turing que pueden encontrarse en la literatura. Por ejemplo se pueden definir m´aquinas de Turing con dos (o m´as) cintas, en ese caso la entrada se escribe u ´nicamente en la primera cinta, inicialmente todas las cabezas de cinta est´an sobre la segunda celda, y la funci´on de transici´on es de la forma: δ : Q × Γ × Γ → Q × Γ × {i, d, n} × Γ × {i, d, n} Utilizaremos la siguiente notaci´on: M (w) ↓ representa que la TM M con entrada w para. M (w) ↑ representa que la TM M con entrada w no para. M (w) representa el contenido de la cinta desde el car´acter . hasta el primer blanco, despu´es de que M con entrada w ha parado (si M (w) ↓). Definici´on 6.6 La funci´on calculada por una TM M , denotada por ϕM , se define como: ϕM (w) = M (w) si M (w) ↓ Dada una funci´on f : Σ∗ → Σ∗ diremos que M calcula f si f = ϕM .
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
70
Ejercicio. Dise˜ nar m´aquinas de Turing que calculen la funci´on identidad y la funci´on sucesor para n´ umeros naturales codificados en binario. Cada m´aquina de Turing calcula una funci´on. ¿C´omo se comparan estas funciones con las calculables? La respuesta es el siguiente teorema. Teorema 6.7 Una funci´on es calculable si y s´ olo si existe una m´ aquina de Turing que la calcula. Dem. (idea) Para la implicaci´on de derecha a izquierda, dada una m´aquina de Turing M es f´acil construir un programa que la simule. Dicho programa calcular´a la misma funci´on que M . Para la otra implicaci´on se utiliza la caracterizaci´on de las funciones calculables como funciones recursivas de G¨odel y Kleene.
6.3.
El λ-c´ alculo de Church
El λ-c´alculo es un modelo en el que se trabaja con expresiones que se transforman mediante una u ´nica operaci´on, la reescritura. Definici´on 6.8 Sea A un conjunto finito, el conjunto de las variables. Llamamos λ-expresi´on a e, una palabra sobre A ∪ {λ, [, ]} que cumple una de las siguientes condiciones: e ∈ A, e = [f g], donde f y g son λ-expresiones, e = λa.f , donde a ∈ A y f es una λ-expresi´on. Definici´on 6.9 Dada una λ-expresi´on e = [λx.P Q], e se reescribe en R si R es el resultado de sustituir x por Q cada vez que aparezca x en la expresi´on P . Lo denotaremos [λx.P Q] → R Ejemplos 6.10 [λx.y 3] → y
[λx.x + 2 5] → 5 + 2
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
71
[λx.[x x] λx.[x x]] → [λx.[x x] λx.[x x]] [λx.[λy.x + y 3] 2] → [λy,2 + y 3] → 2 + 3 Intuitivamente, interpretamos una expresi´on M como un programa, y ejecutar M con una entrada N es reescribir iteradamente la expresi´on [M N ]. La ejecuci´on termina cuando no se puede seguir reescribiendo, es decir, cuando no aparece [λ Algunas expresiones nunca terminan de reescribirse, como la del ejemplo, [λx.[x x] λx.[x x]] Nota: (Sobre los nombres de las variables) Una λ-expresi´on ser´a ilegal si contiene una subexpresi´on de la forma [P Q] de forma que tanto P como Q contienen una misma variable x pero P contiene λx mientras que Q no (o viceversa). S´olo itiremos expresiones donde esto no ocurre, las que llamaremos legales. Un ejemplo de expresi´on ilegal es [λx.y λu.[x u]], la x aparece precedida de λ en λx.y y “libre” en λu.[x u]. Podemos transformar expresiones ilegales en otras legales “similares” renombrando en la subexpresi´on correspondiente variables que aparecen precedidas de λ. (El ejemplo anterior pasa a [λw.y λu.[x u]]). Tampoco itiremos λ-expresiones que contengan una subexpresi´on de la forma [λx.P Q] de forma que P contiene λx. Por ejemplo no itiremos [λx.[λx.ya] [uv]] Para hablar de funciones que pueden calcularse en este modelo, primero hemos de definir las expresiones que representan los naturales, que se denominan naturales de Church: 0 ≡ λf.λx.x 1 ≡ λf.λx.[f x] 2 ≡ λf.λx.[f [f x]] 3 ≡ λf.λx.[f [f [f x]]] n ≡ λf.λx.[f [f [f [f . . . [f x] . . .] ([f aparece n veces) Definici´on 6.11 Dada una λ-expresi´on M , ϕM : IN → IN es la funci´on definida como ϕM (n) = m si [M n] se reescribe a m donde dentro de las expresiones, m y n denotan el correspondiente natural de Church.
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
72
Definici´on 6.12 Una funci´on f : IN → IN es λ-calculable si existe una λ-expresi´on M tal que ϕM = f . Por ejemplo, la siguiente expresi´on calcula la funci´on sucesor: succ ≡ λn.λy.λz.[y [[n y] z]] [succ 1] ≡ [λn.λy.λz.[y [[n y] z]] λf.λx.[f x]] → λy.λz.[y [[λf.λx.[f x] y] z]] → λy.λz.[y [λx.[y x] z]] → λy.λz.[y [y z]] ≡ 2 Un programa que no para nunca: M ≡ λy.[λx.[x x] λx.[x x]] [M a] → [λx.[x x] λx.[x x]] →
[λx.[x x] λx.[x x]] . . .
Las siguientes expresiones representan los valores true y false. true ≡ λx.λy.x f alse ≡ λx.λy.y [[true P ]Q] ≡ [[λx.λy.x P ]Q] → [λy.P Q] → P [[f alse P ]Q] ≡ [[λx.λy.y P ]Q] → [λy.y Q] → Q La funci´on not: not ≡ λx.[[x f alse] true] [not true] ≡ [λx.[[x f alse] true] true] → [[true f alse] true] → f alse [not f alse] ≡ [λx.[[x f alse] true] f alse] → [[f alse f alse] true] → true La funci´on if: if ≡ λc.λp.λq.[[c p] q] Ejercicio. Reescribir [[[if A] B] C] donde A es la expresi´on true o la expresi´on false. Ejercicio. Averiguar qu´e funciones calculan las siguientes expresiones: zerop ≡ λn.[[n [true f alse]] true] mif uncion ≡ λx.[[[if [zerop x]] [succ x]] [[∗ x] x]] Cada λ-expresi´on calcula una funci´on. El siguiente teorema nos dice que se trata de las funciones calculables. Teorema 6.13 Una funci´ on es calculable si y s´ olo si es λ-calculable.
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
73
Dem. (idea) Para la implicaci´on de derecha a izquierda, dada una expresi´on M es f´acil construir un programa que con entrada n haga la reescritura iterada de [M n]. Dicho programa calcular´a la misma funci´on que M . Para la otra implicaci´on se utiliza la caracterizaci´on de las funciones calculables como funciones recursivas de G¨odel y Kleene.
6.4.
La tesis de Turing-Church
En este cap´ıtulo hemos visto el siguiente resultado general: Teorema 6.14 Los tres modelos vistos en este cap´ıtulo dan como funciones calculables las funciones calculables definidas con la m´ aquina de registros RAM. Hay otros modelos que se han ido proponiendo para caracterizar lo que se puede “computar”. Todos ellos han resultado equivalentes. Esto ha dado lugar a la siguiente tesis o conjetura: Tesis de Turing-Church. Cualquier modelo razonable de computaci´on calcula exactamente las funciones calculables. La palabra “razonable” hace que esta tesis no sea precisa. El significado concreto es: la comunidad cient´ıfica, con los conocimientos actuales, opina que no hay ning´ un modelo de computaci´on m´as potente que los conocidos (potente en el sentido de calcular m´as funciones). En la segunda parte del curso veremos que la situaci´on puede variar ligeramente cuando comparamos la eficiencia de los distintos modelos. EJERCICIOS 6.1. Para cada una de las siguientes funciones, dar una m´aquina de Turing que la calcule. 1. Dado A = {w | w = #y, y ∈ {0, 1}∗ , y = y R }, f : {0, 1#}∗ → w 7→ w 7→
{0, 1, #}∗ # si w ∈ A indefinido, en otro caso
´ CAP´ITULO 6. OTROS MODELOS DE CALCULO: LA TESIS DE ...
74
2. Dado A = {0n 1n | n ∈ IN}, f : {0, 1}∗ → w 7→ w 7→
{0, 1}∗ 1 si w ∈ A 0 en otro caso
3. Dado A = {0n 1n 0n | n ∈ IN}, f : {0, 1}∗ → w 7→ w 7→
{0, 1}∗ 1 si w ∈ A 0 en otro caso
4. Dado A = {w | w ∈ {0, 1}∗ , |w|0 = |w|1 }, f : {0, 1}∗ → w 7→ w 7→
{0, 1}∗ 1 si w ∈ A 0 en otro caso
6.2. Demostrar que las siguientes funciones son funciones recursivas de G¨odel y Kleene (f.r.g.) ˙ de los Ejemplos 1. f (n, m) = m´ın(n, m) (Usar la funci´on x−y 6.3.) 2. f (n, m) = m´ax(n, m) 3. f (n) = n! 4. f (n, m) = m.c.d.(n, m). (Usar el algoritmo de Euclides.) 5. La funci´on f definida como f (0) = 1 f (1) = 1 f (n + 2) = f (n) + f (n + 1)
Cap´ıtulo 7
Complejidad y codificaci´ on Referencia: Cap´ıtulos 1 y 2 de [GJ78] En la primera parte del curso nos hemos ocupado de saber si un problema dado se puede resolver o no con un algoritmo. En ning´ un momento nos hemos preocupado de si un algoritmo que resuelve un problema concreto es eficiente o no. De esto se va a ocupar el resto de este curso: queremos saber qu´e problemas se pueden resolver con un algoritmo eficiente, lo que en la actualidad se identifica con un algoritmo que tarda tiempo polin´omico en el tama˜ no de la entrada.
7.1.
El problema del viajante
Continuamos la presentaci´on del tema utilizando el siguiente problema concreto. Dado un n´ umero n ∈ IN que representa el n´ umero de ciudades, y n × n n´ umeros d(i, j) ∈ IN para 1 ≤ i, j ≤ n que representan las distancias entre cada dos ciudades (y tales que d(i, j) = d(j, i) y d(i, i) = 0 para todo i, j). ¿Cu´anto mide el camino m´as corto que pasa por todas las ciudades una sola vez? Este problema se llama problema del viajante. Puede resultar sorpendente saber que no se conoce ning´ un algoritmo que resuelva completamente el problema y que sea sustancialmente mejor que la b´ usqueda 75
´ CAP´ITULO 7. COMPLEJIDAD Y CODIFICACION
76
exhaustiva, es decir, probar todos los caminos y quedarse con el m´as corto. Como para n ciudades hay n! caminos, y n! ≈ nn , este m´etodo es bastante lento. El alumno puede intentar encontrar un algoritmo para el problema del viajante que trabaje en tiempo menor que n! para todas las entradas. Vamos a estudiar este problema y muchos otros del mismo tipo para los que no se conocen algoritmos m´ınimamente eficientes. Nos vamos a centrar en problemas decisionales porque son m´as sencillos de formalizar. Una versi´on decisional del problema del viajante es la siguiente, que llamaremos TSP: Dados n ∈ IN, d(i, j) ∈ IN para 1 ≤ i, j ≤ n (tales que d(i, j) = d(j, i) y d(i, i) = 0 para todo i, j), y k ∈ IN. ¿Existe un camino que pasa por todas las ciudades una sola vez y que tiene una longitud total menor o igual que k? El pasar de la versi´on funcional a la versi´on decisional en este caso puede parecer una gran simplificaci´on pero no lo es tanto si tenemos en cuenta que tampoco se conocen algoritmos eficientes para TSP, y que en realidad la complejidad de TSP es similar a la del problema general, ya que a partir de un algoritmo q que resuelva TSP podemos resolver el problema del viajante usando b´ usqueda dicot´omica: Leer N, D PN−1 L SUP:= I=1 D(I,I+1); L INF:=0; Mientras que L INF
´ CAP´ITULO 7. COMPLEJIDAD Y CODIFICACION
7.2.
77
Complejidad en tiempo
Definici´on 7.1 Dado un algoritmo p y una entrada x, tp (x) es el n´ umero de pasos que tarda p con entrada x. Falta concretar qu´e consideramos un paso. Un paso es una instrucci´on de alto nivel, exclu´ıdas las multiplicaciones. Multiplicar dos enteros a y b consideraremos que cuesta log(a) + log(b) pasos. De esta forma podemos asegurar que si y es el resultado de p con entrada x, entonces |y| ≤ |x| · tp (x). En la secci´on 2.1.2 hemos definido qu´e es el tama˜ no de una entrada. Vamos a medir la complejidad en tiempo de un programa p en funci´on de la longitud de las entradas, seg´ un la siguiente definici´on de Tp (m): Definici´on 7.2 Dado un algoritmo p y m ∈ IN, Tp (m) es el n´ umero de pasos que tarda p con una entrada de tama˜ no m en el caso peor: Tp (m) = m´ax tp (x) |x|=m
Tanto para tp como para Tp nos interesan las cotas superiores, es decir, Tp (m) ≤ m2 que quiere decir que para cualquier entrada de tama˜ no m, p tarda tiempo 2 como mucho m .
7.3.
C´ omo codificamos las entradas
En esta segunda parte del curso trataremos con datos de diferentes tipos, entre ellos grafos. Vamos a detallar algunas de las codificaciones que utilizaremos y ver c´omo podemos acotar el tiempo de un algoritmo en funci´on del tama˜ no de la entrada. Un grafo G = (V, A) es un conjunto de v´ertices o nodos V y un conjunto de aristas A. Si G es un grafo dirigido, las aristas son pares de v´ertices (A ⊆ V × V ), es decir, la arista (u, v) es distinta de la (v, u). Si G es un grafo no dirigido, cada arista es un conjunto de dos v´ertices {u, v}, es decir, las aristas no tienen direcci´on ( {u, v} = {v, u} ). Para un grafo de n v´ertices tomaremos siempre como conjunto de v´ertices V = {1, 2, 3, . . . , n}.
´ CAP´ITULO 7. COMPLEJIDAD Y CODIFICACION
78
Codificaremos los grafos (dirigidos y no dirigidos) de 3 formas distintas: 1. Con la matriz de adyacencia. 2. Con listas de adyacencia. 3. Con la lista de aristas. 1. Dado un grafo de n v´ertices, la matriz de adyacencia es una matriz M n × n con valores en {0, 1} definida como sigue: para grafos dirigidos (
1 si (i, j) ∈ A 0 si (i, j) 6∈ A
(
1 si {i, j} ∈ A 0 si {i, j} 6∈ A
M (i, j) = para grafos no dirigidos M (i, j) =
La codificaci´on de cada grafo G se realizar´a sobre {0, 1} y consistir´a en la matriz de adyacencia de G escrita por filas, es decir, la codificaci´on de un grafo de n v´ertices ser´a: M [1, 1]M [1, 2] . . . M [1, n] . . . M [n, n] y por tanto |G| = n2 . Dado un grafo G, el tama˜ no de G con esta primera codificaci´on s´olo depende del n´ umero de v´ertices. Notemos que en el caso de grafos no dirigidos la matriz de adyacencia tiene informaci´on redundante, ya que siempre M [i, j] = M [j, i]. 2. Dado un grafo G y un v´ertice i, la lista de adyacencia de i est´a formada por los v´ertices j tales que (i, j) ∈ A (en el caso dirigido) ´o {i, j} ∈ A (en el caso no dirigido). Vamos a codificar los grafos utilizando las listas de adyacencia. Los codificamos sobre {0, 1, #, ; }. Para cada v´ertice inclu´ımos el v´ertice en binario, su lista de adyacencia con los v´ertices en binario separados por # y por u ´ltimo ; para separarlo de la siguiente lista, es decir: 1#b11 #b21 # . . . #bx1 1 ; 2#b12 # . . . #bxnn ;
´ CAP´ITULO 7. COMPLEJIDAD Y CODIFICACION
79
donde b1i , . . . , bxi i es la lista de adyacencia de v´ertice i. El tama˜ no de G depende ahora del tama˜ no de cada lista de adyacencia y del n´ umero de v´ertices. Si tenemos un grafo G con n v´ertices y k aristas, podemos acotar superiormente |G| con |G| ≤ n(log(n) + 2 + k(log(n) + 2)) (para cada v´ertice aparece como m´aximo su n´ umero (≤ log(n) + 1 bits) y hasta k elementos en su lista de adyacencia, cada uno un m´aximo de log(n) + 2 s´ımbolos). Podemos acotar inferiormente |G| con |G| ≥ 2n + 2k (para cada v´ertice aparece al menos un bit con su n´ umero y el separador ; y por cada arista aparece un elemento de una lista de adyacencia lo cual es al menos un bit con un n´ umero y el separador #). 3. Podemos codificar un grafo dirigido G con las aristas (a1 , b1 ) (a2 , b2 ) . . . (ak , bk ) (o un grafo no dirigido G con las aristas {a1 , b1 }{a2 , b2 } . . . {ak , bk }) sobre {0, 1, #, (, )} simplemente dando el n´ umero de v´ertices en binario, seguido de la lista de aristas, escribiendo los n´ umeros de los v´ertices en binario: n(a1 #b1 )(a2 #b2 ) . . . (ak #bk ) De esta forma |G| ≤ log(n) + 1 + k(2 log(n) + 5) y |G| ≥ log(n) + 1 + 5k. Ejemplo 7.3 Sea G el siguiente grafo no dirigido:
´ CAP´ITULO 7. COMPLEJIDAD Y CODIFICACION
80
Su codificaci´on seg´ un 1. ser´a 0101100000001000 seg´ un 2. 1#10#100; 10#1; 11; 100#1; y seg´ un 3. 100(1#10)(1#100)
7.4.
Transformaci´ on de cotas de tiempo
Hemos visto que la codificaci´on concreta que se elige influye de forma importante sobre el tama˜ no de las entradas. Veamos ahora c´omo podemos pasar de una cota dada a un algoritmo en funci´on de una parte de la entrada a una en funci´on del tama˜ no de la entrada. Sean p y q dos algoritmos que resuelven un problema con entrada un grafo. Dado un grafo G, llamamos n al n´ umero de v´ertices y k al n´ umero de aristas. Supongamos que tenemos las siguientes dos cotas para la complejidad en tiempo de p y q: tp (G) ≤ 2n3 + 6n tq (G) ≤ 3k 2 Veamos c´omo transformar las cotas anteriores en otras cotas que dependen s´olo del tama˜ no de la entrada. Para ello necesitamos desigualdades de la forma n ≤ f1 (|G|) ´o k ≤ f2 (|G|) para combinarlas con las dos desigualdades anteriores. 1. Primera codificaci´on. Sabemos que |G| ≥ n2 , luego n ≤ tanto Tp (m)
q
|G| y por
= m´ax|G|=m tp (G) ≤ m´ax|G|=m 2n3 + 6n ≤ ≤ m´ax|G|=m 2|G|3/2 + 6|G|1/2 ≤ 2m3/2 + 6m1/2
Para el caso de q, cuyo tiempo tenemos acotado en funci´on del n´ umero de aristas, sabemos que k ≤ n2 , luego |G| ≥ n2 ≥ k, por tanto Tq (m) = m´ax tq (G) ≤ m´ax 3k 2 ≤ m´ax 3|G|2 = 3m2 |G|=m
|G|=m
|G|=m
´ CAP´ITULO 7. COMPLEJIDAD Y CODIFICACION
81
2. Segunda codificaci´on. Sabemos que |G| ≥ 2n + 2k luego |G| ≥ k y |G| ≥ n. Por tanto Tp (m) = m´ax tp (G) ≤ m´ax 2n3 +6n ≤ m´ax 2|G|3 +6|G| ≤ 2m3 +6m |G|=m
|G|=m
|G|=m
De la misma forma Tq (m) ≤ 3m2 3. Tercera codificaci´on. Sabemos que |G| ≥ log(n) + 1 + 5k ≥ log(n). Por tanto n ≤ 2|G| . No podemos dar una cota inferior de |G| en funci´on de n mucho mejor, porque por ejemplo en el caso de un grafo de n v´ertices y ninguna arista, |G| = log(n) + 1 y n = 2|G|−1 . Por tanto m´ax|G|=m tp (G) ≤ m´ax|G|=m 2n3 + 6n
Tp (m) =
≤ m´ax|G|=m 23|G|+1 + 6 · 2|G| ≤ 23m+1 + 6 · 2m Para el caso de q, sabemos que |G| ≥ k, luego Tq (m) ≤ 3m2 Como vemos, para pasar de una cota superior de tp (x) que depende de una parte de la entrada z a una cota superior de Tp (m) en funci´on del tama˜ no de la entrada |x| el m´etodo es: Hacer una cota de la forma |x| ≥ g(z). Pasar a f (|x|) ≥ z. Acotar Tp (m) usando la cota de tp (x) que depende de z y el hecho de que z ≤ f (|x|).
Cap´ıtulo 8
Tiempo polin´ omico versus tiempo exponencial Referencia: Cap´ıtulos 1 y 2 de [GJ78]. En este cap´ıtulo estudiaremos P y EXP, dos clases o conjuntos de problemas decisionales. La clase EXP contiene casi todos los problemas que intentar´eis resolver con un algoritmo. P es una parte de EXP formada por los problemas que se pueden resolver eficientemente o resolubles en la pr´actica.
8.1.
Definiciones
Definici´on 8.1 Dada una funci´on f : IN → IN, llamamos O(f ) al conjunto O(f ) = {h : IN → IN | ∃c > 0 tal que h(m) ≤ c · f (m) ∀m} (es decir, O(f ) es el conjunto de funciones acotadas por c·f , para alguna constante c). Vamos a clasificar los problemas decisionales seg´ un el tiempo que se tarda en resolverlos en funci´on del tama˜ no de la entrada y en el caso peor, es decir, seg´ un Tp . Definici´on 8.2 Dada una funci´on f : IN → IN llamamos DTIME(f (m)) a la clase de problemas: 82
´ CAP´ITULO 8. TIEMPO POLINOMICO VERSUS TIEMPO ...
DTIME(f (m)) = { Π |
83
Π es un problema decisional y existe un algoritmo q que lo resuelve y cumple Tq ∈ O(f ) }.
Es decir, DTIME(f (m)) es el conjunto de problemas resolubles en tiempo menor o igual que c · f , para alguna constante c. Es importante notar que f es una cota superior, un problema que est´a en DTIME(f (m)) puede tener un programa que lo resuelva en tiempo mucho menor que f (m). Definici´on 8.3 P es el conjunto de problemas resolubles en tiempo (menor o igual que) polin´omico, es decir DTIME(mk )
[
P=
k∈IN
EXP es el conjunto de problemas resolubles en tiempo (menor o igual que) exponencial, es decir EXP =
[
k
DTIME(2m )
k∈IN k
k
Insistimos en que en DTIME(2m ), 2m es cota superior, no tiene pork que ser igualdad, el tiempo de un problema en DTIME(2m ) puede ser k mucho menor que 2m . Teorema 8.4 P ⊆ EXP Dem. Para cualquier k, sabemos que mk ∈ O(2m ) (ya que l´ımm mk /2m = 0), luego DTIME(mk ) ⊆ DTIME(2m ) y por tanto P ⊆ EXP. Se sabe que P 6= EXP (luego P ⊂ EXP). Esto quiere decir que hay m´as problemas en EXP que los de P, es decir, hay alg´ un problema que se puede resolver en tiempo acotado por una exponencial pero no por un polinomio.
´ CAP´ITULO 8. TIEMPO POLINOMICO VERSUS TIEMPO ...
8.2.
84
Problemas resolubles en la pr´ actica
P es el conjunto de problemas considerados resolubles en la pr´actica. Esto quiere decir que si un problema Π no est´a en P se considera no resoluble de forma eficiente. Las razones de P se considere el l´ımite de lo resoluble de forma eficiente son de ´ındole pr´actico y se resumen en: 1. La mayor´ıa de los algoritmos q que se implementan cumplen Tq (m) ∈ O(mk ) para alg´ un k. 2. Los problemas naturales que se sabe que est´an en P tienen algoritmos “r´apidos” (que cumplen Tq (m) ≤ c · mk para k ≤ 3 y c peque˜ na), luego se pueden resolver en tiempo polin´omico pero para polinomios muy peque˜ nos. 3. Los problemas naturales para los que no se conocen algoritmos polin´omicos, tampoco tienen algoritmos conocidos con tiempo muy por debajo de una exponencial 2cm , es decir, no se conocen algoritmos para problemas interesantes con tiempos intermedios como 2 mlog(m) , mlog(m) , etc. Por tanto en la pr´actica se trata de comparar algoritmos que tardan tiempo mk con algoritmos que tardan tiempo al menos 2m . Basta examinar las tablas siguientes para ver que los algoritmos que tardan tiempo 2m ´o m´as son in´ utiles en la pr´actica. Considerando la velocidad de un pentium 4 (cada instrucci´on tarda alrededor de 1,5 ×10−9 segundos, suponiendo una velocidad de 2,4 GHz y 4 ciclos por instrucci´on) veamos en la siguiente tabla cu´anto valen las funciones de tiempo m, m2 , m3 , m5 , 2m y 3m para distintos valores de m.
´ CAP´ITULO 8. TIEMPO POLINOMICO VERSUS TIEMPO ...
m = 10 m 1,5×10−8 seg. 2 m 1,5×10−7 seg. 3 m 1,5×10−6 seg. 5 m 1,5×10−4 seg. 2m 1,5×10−6 seg. 3m 8,8×10−5 seg.
20 3×10−8 seg. 6×10−7 seg. 1,2×10−5 seg. 0,0048 seg. 0,0015 seg. 5,2 seg.
A continuaci´on vemos el hora: tiempo computador de hoy m N1 = 24 · 1011 2 m N2 = 1550000 3 m N3 = 13200 m5 N4 = 300 m 2 N5 = 41, 1 m 3 N6 = 25, 9
30 4,5×10−8 seg. 1,35×10−6 seg. 4×10−5 seg. 0,036 seg. 1,611 seg. 3 d´ıas
40 6×10−8 seg. 2,4×10−6 seg. 9,6×10−5 seg. 0,15 seg. 27,6 minutos 5,8 siglos
85
50 7,5×10−8 seg. 3,75×10−6 seg. 1,9×10−4 seg. 0,47 seg. 19 d´ıas 3×105 siglos
60 9×10−8 seg. 5,4×10−6 seg. 3,2×10−4 seg. 1,17 seg. 59,4 a˜ nos 2×1010 siglos
mayor tama˜ no de entrada resoluble en una 100 veces m´as r´apido 100N1 10N2 4,64N3 2,5N4 N5 +6,64 N6 +4,19
1000 veces m´as r´apido 1000N1 31,6N2 10N3 3,98N4 N5 +9,97 N6 +6,29
Esta tabla presenta el efecto de la mejora tecnol´ogica el varios algoritmos de tiempo polin´omico y exponencial. En los siguientes cap´ıtulos nos ocuparemos de muchos problemas que es importante resolver eficientemente, ya que aparecen en todo tipo de aplicaciones, pero para los cuales no se conocen algoritmos eficientes, es decir, no se sabe que est´en en P. Terminamos se˜ nalando que existen algunos (pocos) problemas para los que el mejor algoritmo conocido tarda tiempo exponencial en el caso peor (Tp (m) ≈ 2m ) pero que funcionan bien en la pr´actica, por ejemplo el problema de la mochila. Esto es debido a que la definici´on de Tp (m) es en caso peor, pero para las entradas m´as frecuentes tp (x) se mantiene bajo y son entradas menos usadas las que hacen Tp (m) exponencial. Este comportamiento an´omalo se da para muy pocos problemas.
´ CAP´ITULO 8. TIEMPO POLINOMICO VERSUS TIEMPO ...
8.3.
86
Tesis extendida de Turing-Church
Hemos estudiado distintos modelos de c´alculo, que son equivalentes respecto a la definici´on de funci´on calculable (y por tanto conjunto decidible, que corresponde a problema decisional resoluble). Vamos a comparar ahora estos modelos respecto a la definici´on de las clases P y EXP. Tomando el modelo de las m´aquinas de Turing, cada m´aquina calcula una funci´on a base de acciones elementales o transiciones, cada una de ellas consistente en cambiar de estado, escribir un s´ımbolo y moverse una casilla. Llamamos paso a cada una de estas transiciones. Definici´on 8.5 Dada una m´aquina de Turing M defino tM y TM como: tM (x) =
N´ umero de pasos de M con entrada x desde que empieza hasta que se para. TM (m) = m´ax tM (x). |x|=m
Ahora podemos definir clases de problemas decisionales clasific´andolos a partir de TM : Definici´on 8.6 Dada una funci´on f : IN → IN, llamamos DTIME1 (f (m)) a la clase: DTIME1 (f (m)) = { Π |
Π es un problema decisional y existe una m´aquina M que lo resuelve y cumple TM ∈ O(f ) }.
El siguiente resultado t´ecnico relaciona las clases DTIME y DTIME1 : Lema 8.7 Dada una funci´ on f : IN → IN que sea total, creciente y k recursiva (por ejemplo f (m) = mk y f (m) = 2m ) DTIME1 (f (m)) ⊆ DTIME(f 3 (m)) DTIME(f (m)) ⊆ DTIME1 (f 3 (m)) Omitimos la demostraci´on, que requiere manejo avanzado de las m´aquinas de Turing. Por tanto podemos definir P y EXP utilizando m´aquinas de Turing:
´ CAP´ITULO 8. TIEMPO POLINOMICO VERSUS TIEMPO ...
87
Corolario 8.8 P =
[
DTIME1 (mk )
k∈IN
EXP =
[
k
DTIME1 (2m )
k∈IN
Dem. Por el lema anterior, para cada k ∈ IN, DTIME1 (mk ) ⊆ DTIME(m3k ) ⊆ P luego [
DTIME1 (mk ) ⊆ P
k∈IN
Tambi´en para cada k ∈ IN, DTIME(mk ) ⊆ DTIME1 (m3k ) luego P=
[ k∈IN
DTIME(mk ) ⊆
[
DTIME1 (mk )
k∈IN
En general, para cada uno de los modelos conocidos con una definici´on natural de paso, P y EXP corresponden a tiempo polin´omico y exponencial respectivamente. Por ejemplo, en el λ-c´alculo, un paso es una aplicaci´on de la regla de reescritura. Esta situaci´on ha motivado la siguiente tesis o conjetura: Tesis extendida de Turing-Church: Para cualquier modelo razonable (y secuencial) de c´alculo, P y EXP corresponden a n´ umero de pasos polin´omico y exponencial respectivamente. La conjetura anterior est´a siendo replanteada a la luz de los recientes estudios sobre el computador cu´antico. Este modelo, formulado en 1982 por Deutsch, Lloyd y Feynman es de naturaleza muy distinta a los otros modelos secuenciales. En 1994, Nishino resolvi´o con este modelo en tiempo polin´omico problemas para los que no se conocen algoritmos polin´omicos. Tambi´en Shor
´ CAP´ITULO 8. TIEMPO POLINOMICO VERSUS TIEMPO ...
88
en el 94 prov´o que es posible factorizar n´ umeros en tiempo medio polin´omico con un computador cu´antico, lo cual hasta el momento no se ha conseguido con los computadores tradicionales. Si embargo, a pesar de los m´ ultiples intentos de varios grupos de investigadores, no se ha constru´ıdo todav´ıa un computador cu´antico, y todav´ıa no est´a claro si ser´a viable construirlo en el futuro. EJERCICIOS 8.1. Demostrar que los siguientes problemas est´an en la clase P. 1. Mochila-f´acil: Datos: n, p1 , . . . , pn , k, C ∈ IN Salida: ¿Existe A ⊆ {1, . . . , n} con #A = k y Σi∈A pi ≤ C ? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los n+3 n´ umeros naturales que componen una entrada se escriben en binario y se separan por comas. Pista: Ordenar p1 , . . . , pn . 2. 2-color: Datos: G = (V, A) grafo dirigido. Salida: ¿Pueden etiquetarse los v´ertices de G con dos colores de manera que los dos v´ertices de cada arista tengan colores diferentes? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es el n´ umero de v´ertices escrito en binario y ∗ v ∈ {0, 1} es la matriz de adyacencia de G escrita por filas, entonces la codificaci´on de la entrada G es la palabra u, v. Pista: Es equivalente a dividir V en dos conjuntos V1 y V2 de manera que no haya ninguna arista de un v´ertice de V1 a otro de V1 , ni de uno de V2 a otro de V2 . 3. Path-bet-two-vertices: Datos: G = (V, A) grafo dirigido, u, v ∈ V Salida: ¿Existe un camino de u a v?
´ CAP´ITULO 8. TIEMPO POLINOMICO VERSUS TIEMPO ...
89
Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si a ∈ {0, 1}∗ es el n´ umero de v´ertices escrito en binario, b ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, y x, y son u, v en binario, entonces la codificaci´on de la entrada G, u, v es la palabra a, b, x, y. Pista: Calcular el conjunto de los v´ertices que est´an a distancia menor o igual que n de u de forma incremental. 4. Shortest-Path-bet-two-vertices: Datos: G = (V, A) grafo dirigido, u, v ∈ V , k ∈ IN Salida: ¿Existe un camino de u a v de longitud menor o igual a k? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si a ∈ {0, 1}∗ es el n´ umero de v´ertices escrito en binario, b ∈ ∗ {0, 1} es la matriz de adyacencia de G escrita por filas, x, y son u, v en binario, y z es k en binario, entonces la codificaci´on de la entrada G, u, v, k es la palabra a, b, x, y, z. 5. Modulo: Datos: a, b, c ∈ IN Salida: ¿Existe un x ∈ IN tal que x < c y x ≡ a (m´od b)? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los 3 n´ umeros naturales que componen una entrada se escriben en binario y se separan por comas.
Cap´ıtulo 9
Estudio de algunos problemas importantes; la clase NP Referencia: Cap´ıtulos 2.6 y 3.1 de [GJ78]. En este cap´ıtulo estudiaremos tres problemas importantes: SAT, MOCHILA y CLIQUE, y definiremos la clase NP a la que pertenencen esos tres problemas.
9.1.
SAT
Sea X = {x1 , . . . , xn } un conjunto de variables booleanas. Definici´on 9.1 Un literal sobre X es una variable x ∈ X o su negaci´on ¬x. Definici´on 9.2 Una cl´ausula sobre X es una disyunci´on de literales. Ejemplos 9.3 Sea n = 8. Son cl´ausulas sobre X: x2 ∨ ¬x3 ∨ x8 ¬x2 Definici´on 9.4 Una f´ormula CNF sobre X es una conjunci´on de cl´ausulas. Ejemplos 9.5 Sea n = 15. Son f´ormulas CNF las siguientes: 90
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
91
(x7 ∨ x15 ) ∧ (x2 ∨ ¬x3 ∨ x8 ) (¬x2 ) ∧ (x4 ∨ ¬x2 ) Definici´on 9.6 Una asignaci´on de verdad de X es una funci´on α : X → {T, F }, es decir, una funci´on que asigna a cada variable el valor T (cierto) o el F (falso). Definici´on 9.7 Dada una f´ormula L y una asignaci´on de verdad α, α satisface L si al sustituir cada variable x por α(x) en L y operar seg´ un la definici´on habitual de los operadores booleanos ¬, ∨, ∧, el resultado es T . Ejemplos 9.8 α(x1 ) = T, α(x2 ) = F, α(x3 ) = T, α(x4 ) = T satisface la f´ormula (¬x2 ) ∧ (x4 ∨ ¬x2 ). Ya podemos definir el problema SAT. Restringiremos las entradas a f´ormulas en las que aparecen todas las variables de X. Datos: Un conjunto de variables X y una f´ormula CNF sobre X, L (que cumplen que todas las variables de X aparecen al menos una vez en L). Salida: ¿Existe una asignaci´on de verdad que satisface L? Es decir, el problema se trata de saber si una cierta f´ormula CNF se puede hacer cierta o si por el contrario es falsa para cualquier asignaci´on. Por ejemplo, cualquiera de los ejemplos anteriores son f´ormulas para las que existen asignaciones que las satisfacen. No existe ninguna asignaci´on que satisfaga la f´ormula (x2 ∨ x1 ) ∧ (¬x2 ∨ x1 ) ∧ (¬x2 ∨ ¬x1 ) ∧ (x2 ∨ ¬x1 ) ∧ (x2 ∨ ¬x2 ). Tenemos que especificar la codificaci´on de las entradas del problema anterior. Vamos a utilizar el alfabeto Σ = {0, 1, ¬, (, ), #, ∨, ∧} y codificar una entrada X, L como el n´ umero de variables n en binario, seguido de la f´ormula escribiendo los n´ umeros de variable en binario y los s´ımbolos de las operaciones l´ogicas necesarios. Por ejemplo, X = {x1 , x2 , x3 }, L = (x2 ∨ ¬x1 ) ∧ x3 se codifica como 11#(10 ∨ ¬1) ∧ 11 Vamos a relacionar el tama˜ no de una entrada X, L con el n´ umero de variables n y el n´ umero de cl´ausulas de la f´ormula k:
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
92
Como hemos restringido a las f´ormulas en las que aparecen todas las variables de X, y para cada una de las variables que aparece en L hay que escribir al menos un bit con el n´ umero de variable, |X, L| ≥ n. Para cada cl´ausula hay que escribir al menos un s´ımbolo, luego |X, L| ≥ k. El algoritmo de b´ usqueda exhaustiva, es decir, el que con entrada X, L eval´ ua la f´ormula L con cada una de las 2n asignaciones posibles, tarda tiempo tp (X, L) ≤ 2n ·(“tiempo de evaluar00 ), veremos m´as adelante que podemos evaluar L con una determinada asignaci´on en tiempo menor o igual que una constante c por kn. Como |X, L| ≥ n, |X, L| ≥ k, 2 2 Tp (m) ≤ 2m (cm2 ) ∈ O(2m ). Por tanto SAT ∈ DTIME(2m ) y SAT ∈ EXP. Pero ya hemos hablado de la inutilidad pr´actica de las cotas de tiempo exponenciales. Lo que ocurre es que no se conoce ning´ un algortimo que resuelva todas las entradas de SAT y tarde tiempo (en caso peor) sustancialmente menor que la b´ usqueda exhaustiva. Estudiamos a continuaci´on el problema de evaluaci´on de f´ormulas booleanas (EVAL), mucho m´as simple de resolver que SAT: Datos: Un conjunto de variables X, una f´ormula CNF sobre X, L y una asignaci´on de verdad α (que cumplen que todas las variables de X aparecen al menos una vez en L). Salida: ¿α satisface L? La codificaci´on de las entradas de EVAL, sobre el alfabeto Σ = {0, 1, ¬, (, ), #, ∨, ∧}, se basa en la codificaci´on de las entradas de SAT, pero tenemos que especificar la codificaci´on de las asignaciones de verdad. Una asignaci´on α sobre n variables la codificaremos con n bits w1 . . . wn de forma que wi = 1 si α(xi ) = T y wi = 0 si α(xi ) = F . La codificaci´on de una entrada X, L, α ser´a la codificaci´on de X, L como entrada de SAT, seguida de #, seguida de la codificaci´on de α descrita anteriormente, luego |X, L, α| = |X, L| + n + 1. Un simple algoritmo para EVAL es el que primero sustituye cada literal de L por su valor correspondiente seg´ un α y despu´es va simplificando los operadores booleanos:
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
93
Leer X, L, α /* X= {x1 , . . . , xn }, L= c1 ∧ c2 ∧ . . . ∧ ck , con ci clausula para 1 ≤ i ≤ k */ Para I=1 hasta k hacer Para cada H literal de cI hacer Si H=x sustituir H por α(x) else Si H=¬x sustituir H por ¬α(x) /* Sustituyo por T si α(x)=F, por F si α(x)=T */ Fpara; Fpara; RESULTADO:=TRUE; I:=1; Mientras que (I<= k) AND RESULTADO hacer ESTACLAUSULA:=FALSE; Mientras que (NOT ESTACLAUSULA) AND (ci 6= ∅) hacer Quitar CTE la siguiente constante de ci ; Si CTE=T entonces ESTACLAUSULA:=TRUE; Fmq; RESULTADO:=RESULTADO AND ESTACLAUSULA; I:=I+1; Si RESULTADO entonces Devuelve SI else Devuelve NO. Si p es el algoritmo anterior, como el n´ umero de literales por cl´ausula es como m´aximo 2n, tp (X, L, α) ≤ k · 2n + 2 + k(3 + 4n) + 1 ≤ 12kn Como |X, L, α| ≥ |X, L|, entonces |X, L, α| ≥ n y |X, L, α| ≥ k. Por tanto Tp (m) ≤ 12m2 , EVAL ∈ DTIME(m2 ) ⊆ P. La diferencia de tama˜ no entre las entradas de SAT y las de EVAL no es muy grande, ya que |α| = n ≤ |X, L|. Observemos que X, L tiene soluci´on S´ı para SAT ⇔ ∃α, |α| ≤ |X, L| X, L, α tiene soluci´on S´ı para EVAL Como conjuntos, SAT = {X, L | ∃α, |α| ≤ |X, L| X, L, α ∈ EVAL}.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
94
Esto se puede expresar informalmente como “podemos COMPROBAR SAT en tiempo polin´omico”, ya que EVAL es el problema de comprobar que un determinado α hace que X, L tenga soluci´on S´ı para SAT.
9.2.
MOCHILA
Sea MOCHILA el siguiente problema: Datos: n ∈ IN el n´ umero de objetos, p1 , . . . , pn ∈ IN los pesos de los objetos, P ∈ IN el peso m´aximo que ite la mochila, y d ∈ IN el hueco m´aximo permitido (d ≤ P ). Salida: ¿Existe un conjunto de objetos A ⊆ {1, . . . , n} que cumpla: P −d≤
X
pi ≤ P ?
i∈A
Es decir, ¿existe una forma de llenar la mochila pesando como m´ınimo d menos que el m´aximo permitido? Codificamos la entrada con el alfabeto Σ = {0, 1, #}, cada natural en binario y separados por #: n#p1 # . . . #pn #P #d Vamos a relacionar el tama˜ no de una entrada n, p1 , . . . , pn , P, d con el n´ umero de objetos n y con M = m´ax{p1 , . . . , pn , P }: Como hay que escribir n + 3 n´ umeros en binario, |n, p1 , . . . , pn , P, d| ≥ n. Como hay que escribir al menos una vez en binario el n´ umero M, |n, p1 , . . . , pn , P, d| ≥ log(M ). El algoritmo de b´ usqueda exhaustiva, es decir, el que con entrada n, p1 , . . . , pn , P, d P calcula el valor de i∈A pi para cada uno de los 2n subconjuntos de {1, . . . , n}, tarda tiempo tp (n, p1 , . . . , pn , P, d) ≤ 2n · n, ya que podemos calcular una suma de como m´aximo n naturales en tiempo menor o igual 2 que n. Como |n, p1 , . . . , pn , P, d| ≥ n, Tp (m) ≤ 2m · m ∈ O(2m ). Por 2 tanto MOCHILA ∈ DTIME(2m ) ⊆ EXP.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
95
Para MOCHILA tampoco se conoce ning´ un algortimo que resuelva todas las entradas y tarde tiempo (en caso peor) sustancialmente menor que la b´ usqueda exhaustiva. Estudiamos a continuaci´on una versi´on muy simplificada de MOCHILA, que llamamos compMOCHILA: Datos: n ∈ IN, p1 , . . . , pn ∈ IN, P ∈ IN, d ∈ IN (d ≤ P ) y A un subconjunto de {1, . . . , n}. Salida: ¿Se cumple: P −d≤
X
pi ≤ P ?
i∈A
La codificaci´on de las entradas de compMOCHILA, sobre el alfabeto Σ = {0, 1, #}, se basa en la codificaci´on de las entradas de MOCHILA, pero tenemos que especificar la codificaci´on de los subconjuntos de {1, . . . , n}. Un subconjunto de {1, . . . , n} lo codificaremos con n bits w1 . . . wn de forma que wi = 1 si i ∈ A y wi = 0 si i 6∈ A. La codificaci´on de una entrada n, . . . , d, A ser´a la codificaci´on de n, . . . , d como entrada de MOCHILA, seguida de #, seguida de la codificaci´on de A descrita anteriormente, luego |n, . . . , d, A| = = |n, . . . , d| + n + 1. Un algoritmo para compMOCHILA es un u ´nico bucle que para una P entrada n, p1 , . . . , pn , P, d, A calcula i∈A pi . Si q es este algoritmo, tq (n, p1 , . . . , pn , P, d, A) ≤ n Como |n, p1 , . . . , pn , P, d, A| ≥ |n, p1 , . . . , pn , P, d| ≥ n, Tq (m) ≤ m, compMOCHILA ∈ DTIME(m) ⊆ P. La diferencia de tama˜ no entre las entradas de MOCHILA y las de compMOCHILA no es muy grande, ya que |A| = = n ≤ |n, . . . , d|. Observemos que
n, p1 , . . . , pn , P, d tiene soluci´on S´ı para MOCHILA ⇔ ∃A, |A| ≤ |n, p1 , . . . , pn , P, d| n, p1 , . . . , pn , P, d, A tiene soluci´on S´ı para compMOCHILA Esto se puede expresar informalmente como “podemos COMPROBAR MOCHILA en tiempo polin´omico”.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
96
Tambi´en podemos escribir MOCHILA como:
MOCHILA = {n, p1 , . . . , pn , P, d | ∃A, |A| ≤ |n, p1 , . . . , pn , P, d| n, p1 , . . . , pn , P, d, A ∈ compM
9.3.
CLIQUE
Sea G = (V, A) un grafo no dirigido. Definici´on 9.9 Un clique de G es un conjunto de v´ertices U ⊆ V que forma un subgrafo completo, es decir, que cumple ∀u, v ∈ U, u 6= v {u, v} ∈ A Esto es, los v´ertices de U est´an unidos por todas las aristas posibles. El problema que tratamos aqu´ı es la b´ usqueda de cliques lo m´as grandes posibles. En versi´on decisional aparece el problema que sigue. Sea CLIQUE el siguiente problema: Datos: G = (V, A) un grafo no dirigido con n v´ertices, k ∈ IN con k ≤ n. Salida: ¿Existe un clique de G con k v´ertices? Codificamos la entrada con el alfabeto Σ = {0, 1, #}, utilizando la codificaci´on del grafo con matriz de adyacencia, despu´es # seguida de la codificaci´on de k en binario. Vamos a relacionar el tama˜ no de una entrada G, k con el n´ umero de 2 2 v´ertices n, sabemos que |G| = n , luego |G, k| ≥ n . El algoritmo de b´ usqueda exhaustiva, es decir, el que con entrada G, k prueba cada subconjunto de k v´ertices de G como posible clique, tiene n que probar k subconjuntos y para cada uno de ellos chequear la existencia de k(k −1)/2 aristas. Por tanto tarda tiempo tp (G, k) ≤ 1/2
n k
·k 2 ≤
2n ·n2 . Como |G, k| ≥ n2 Tp (m) ≤ 2m ·m ∈ O(2m ). Por tanto CLIQUE ∈ DTIME(2m ) ⊆ EXP. Para CLIQUE tampoco se conoce ning´ un algoritmo que resuelva todas las entradas y tarde tiempo (en caso peor) sustancialmente menor que la b´ usqueda exhaustiva.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
97
Estudiamos a continuaci´on una versi´on comprobaci´on que llamamos compCLIQUE: Datos: G = (V, A) grafo no dirigido, k ∈ IN, U subconjunto de V de k elementos. Salida: ¿Es U un clique de G ? La codificaci´on de las entradas de compCLIQUE, sobre el alfabeto Σ = {0, 1, #}, se basa en la codificaci´on de las entradas de CLIQUE, pero tenemos que especificar la codificaci´on de los subconjuntos de k elementos de {1, . . . , n}. Un subconjunto de k elementos de {1, . . . , n} lo codificaremos listando sus elementos en binario, por orden y separados por #. Por ejemplo U = {2, 6, 3} lo codificaremos como 10, 11, 110. La codificaci´on de una entrada G, k, U ser´a la codificaci´on de G, k como entrada de CLIQUE, seguida de #, seguida de la codificaci´on de U descrita anteriormente, luego |G, k, U | ≥ |G, k| ≥ n2 . Un algoritmo para compCLIQUE es un u ´nico bucle que para una entrada G, k, U comprueba si todas las parejas u, v con u, v ∈ U son aristas de G. Si q es el algoritmo anterior, tq (G, k, U ) ≤ k 2 ≤ n2 Como |G, k, U | ≥ n2 , Tq (m) ≤ m, compCLIQUE ∈ DTIME(m) ⊆ P. La diferencia de tama˜ no entre las entradas de CLIQUE y las de compCLIQUE no es muy grande, ya que |U | ≤ k · (log(n) + 2) ≤ n · (log(n) + 2) ≤ 3 · n2 , |G, k| ≥ n2 , luego |U | ≤ 3 · |G, k|. Observemos que G, k tiene soluci´on S´ı para CLIQUE ⇔ ∃U, |U | ≤ 3 · |G, k| G, k, U tiene soluci´on S´ı para compCLIQUE Esto se puede expresar informalmente como “podemos COMPROBAR CLIQUE en tiempo polin´omico”. CLIQUE = {G, k | ∃U, |U | ≤ 3 · |G, k| G, k, U ∈ compCLIQUE}.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
9.4.
98
La clase NP
Hemos visto que los tres problemas anteriores, SAT, MOCHILA y CLIQUE, tienen una propiedad en com´ un, son comprobables en tiempo polin´omico. Existen muchos problemas que cumplen esta propiedad, son los que forman la clase NP. Definici´on 9.10 Dado un problema decisional Π, Π es comprobable en tiempo polin´omico si existe un problema Λ ∈ P y una constante c que cumplen, para cualquier x entrada de Π: x tiene soluci´on S´ı para Π ⇔ ∃y, |y| ∈ O(|x| ), con x, y una entrada con soluci´on S´ı para Λ. c
Es decir, como conjunto, Π = {x | ∃y, |y| ∈ O(|x|c ) x, y ∈ Λ}. Definici´on 9.11 NP es el conjunto de problemas comprobables en tiempo polin´omico. Para demostrar que un problema est´a en NP tenemos que encontrar un problema Λ (versi´on comprobaci´on de Π) y dos constantes c, c0 que cumplan: 1. Λ ∈ P. 2. Una entrada x, y de Λ, con x entrada de Π, cumple |y| ≤ c0 · |x|c . 3. x tiene soluci´on S´ı para Π ⇔ ∃y tal que x, y tiene soluci´on S´ı para Λ. Ejemplos 9.12 Los siguientes problemas est´an en NP: SAT, ya que EVAL ∈ P, las entradas X, L, α de EVAL cumplen |α| ≤ |X, L| y por definici´on de EVAL se cumple 3.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
99
MOCHILA, ya que compMOCHILA ∈ P, las entradas n, p1 , . . . , pn , d, A de compMOCHILA cumplen |A| ≤ |n, p1 , . . . , pn , d| y por definici´on de compMOCHILA se cumple 3. CLIQUE, ya que compCLIQUE ∈ P, las entradas G, k, U de compCLIQUE cumplen |U | ≤ 3|G, k| y por definici´on de compCLIQUE se cumple 3. Resumiendo, los problemas de NP son aquellos que tienen una versi´on comprobaci´on que est´a en P, y de manera que las entradas de la versi´on comprobaci´on no tengan tama˜ no mucho mayor que el problema original. Veamos dos propiedades importantes de NP. Propiedad 9.13 P ⊆ NP. Dem. Sea Π ∈ P. Considero una versi´on comprobaci´on trivial Λ: Datos: x entrada de Π, w ∈ {0, 1}∗ con |w| = 1. Salida: ¿x tiene respuesta S´ı para Π ? Si Σ es el alfabeto para codificar las entradas de Π, codifico las entradas de Λ sobre Σ ∪ {0, 1, k}. Para codificar x, w a˜ nado a la codicaci´on de x kw, luego |w| ≤ |x|. Como |x, w| ≥ |x|, un algoritmo q para Λ que ignore w y utilice p un algoritmo para Π tarda tiempo Tq (m) ≤ Tp (m) luego Λ ∈ P. Es trivial que x tiene soluci´on S´ı para Π ⇔ ∃w, |w| ≤ |x| tal que x, w tiene soluci´on S´ı para Λ. Propiedad 9.14 NP ⊆ EXP. Dem. Sea Π ∈ NP. Sea Λ ∈ P el que cumple la definici´on 9.10. Sean c, c0 las constantes tales que si x, y es entrada de Λ, x entrada de Π, entonces |y| ≤ c0 · |x|c . Sea p un algoritmo en tiempo polin´omico para Λ. Sean k, k 0 constantes tales que Tp (m) ≤ k 0 · mk .
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
100
Podemos construir un algoritmo q para Π que con entrada x prueba todas las posibles y con |y| ≤ c0 · |x|c para ver si x, y da soluci´on s´ı para Λ: Leer X Para cada Y con |Y| ≤ c0 |X|c hacer RESPUESTA:= p(X,Y); Si RESPUESTA = SI entonces Devuelve SI; Fin; Fpara; Devuelve NO. Sea a el n´ umero de s´ımbolos del alfabeto que codifica las entradas de Λ. El n´ umero de y que cumplen |y| ≤ c0 |x|c es 0
c
ac |x| +1 − 1 a−1 Luego tq (x) ≤ ≤ 0
c
Como ac |x| = 2c
0
ac
0 |x|c +1
−1
a−1 0
c
ac |x| a−1
· Tp (c0 |x|c )
· k 0 c0k · (|x|c )k
log(a)|x|c
tq (x) ≤ k 0 c0k /(a − 1) · 2c c+1
Luego Tq (m) ∈ O(2m
0
log(a)|x|c
· (|x|c )k ∈ O(2|x|
c+1
)
) y Π ∈ EXP.
As´ı pues sabemos que P ⊆ NP ⊆ EXP. Estas son todas las relaciones conocidas entre NP y las clases P y EXP. Se sospecha que P 6= NP, es decir, que existan problemas comprobables en tiempo polin´omico pero no resolubles en tiempo polin´omico, pero no existe ninguna prueba de ello. Lo que tenemos son muchos problemas en NP, los llamados NP-completos, que no se saben resolver en tiempo polin´omico. Los estudiaremos en los siguientes cap´ıtulos. EJERCICIOS 9.1. Demostrar que los siguientes problemas est´an en la clase NP.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
101
1. TSP. 2. Compuesto: Datos: n ∈ IN Salida: ¿Existen x, y ∈ IN tal que x > 1, y > 1 y n = x · y? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1}, en binario. 3. Linear Divisibility: Datos: a, c ∈ IN Salida: ¿Existe un x ∈ IN tal que ax + 1 divide a c? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los 2 n´ umeros naturales que componen una entrada se escriben en binario y se separan por comas. 4. Hitting-Set: Datos: n ∈ IN, A1 , . . . , Al subconjuntos de {1, . . . , n}, k ∈ IN Salida: ¿Existe A ⊆ {1, . . . , n} con #A ≤ k y para todo i ≤ l, Ai ∩ A 6= ∅? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, n y k se escriben en binario, cada subconjunto de {1, . . . , n} se escribe con n bits (utilizando la secuencia caracter´ıstica) y los l + 2 datos se separan por comas. 5. Multiprocessor Scheduling Datos: n ∈ IN el numero de tareas, l1 , . . . , ln el tiempo de cada tarea, M ∈ IN el n´ umero de procesadores C ∈ IN el tiempo m´aximo permitido Salida: ¿Podemos repartir la n tareas entre los M procesadores de manera que cada procesador tarde un tiempo menor o igual a C?, es decir, ¿Existen A1 , . . . , AM subconjuntos de {1, . . . , n} tales que A1 ∪ A2 . . . ∪ AM = {1, . . . , n} y para cada i ≤ M Σj∈Ai lj ≤ C ? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los n+3 n´ umeros naturales que componen una entrada se escriben en binario y se separan por comas.
CAP´ITULO 9. ESTUDIO DE ALGUNOS PROBLEMAS ...
102
6. Subgrafo: Datos: G = (V, A), H = (V 0 , A0 ) dos grafos no dirigidos. Salida: ¿Es H un subgrafo de G?, es decir, ¿existe V1 ⊆ V y f : V1 → V 0 biyectiva tal que para cada u, v ∈ V1 , {u, v} ∈ A si y s´olo si {f (u), f (v)} ∈ A0 ? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si x ∈ {0, 1}∗ es el n´ umero de v´ertices de G escrito en binario, y ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas y z, t corresponden al n´ umero de v´ertices y matriz de adyacencia de H, entonces la codificaci´on de la entrada G, H es la palabra x, y, z, t. ¿Est´an en EXP?
Cap´ıtulo 10
Reducciones en tiempo polin´ omico Referencia: Cap´ıtulo 2.5 de [GJ78]. En el cap´ıtulo 4 estudiamos las reducciones recursivas entre lenguajes, ≤m . Aqu´ı vamos a estudiar una parte de estas reducciones, las calculables en tiempo polin´omico. En este caso daremos las definiciones para problemas decisionales codificados sobre un alfabeto cualquiera.
10.1.
Definici´ on
Definici´on 10.1 Dados dos alfabetos Σ y Γ, una funci´on f : Σ∗ → Γ∗ es calculable en tiempo polin´omico si existe un programa p que calcula f y una constante k ∈ IN tales que Tp (m) ∈ O(mk ). Nota: Si f es calculable en tiempo polin´omico, entonces existen c, k tal que |f (x)| ≤ c|x|k para toda x. Definici´on 10.2 Sean A y B problemas decisionales con entradas codificadas sobre los alfabetos Σ y Γ respectivamente. Una reducci´on en tiempo polin´omico de A en B es una funci´on f : Σ∗ → Γ∗ que cumple: 1. f es calculable en tiempo polin´omico. 2. Para todo x entrada de A:
103
´ CAP´ITULO 10. REDUCCIONES EN TIEMPO POLINOMICO
104
x tiene respuesta s´ı para A ⇔ f (x) tiene respuesta s´ı para B. Es decir, una reducci´on en tiempo polin´omico es una reducci´on de L(A) en L(B) en el sentido definido en el cap´ıtulo 4, pero exigiendo que la reducci´on se pueda calcular en tiempo polin´omico. Recordemos que L(Π) es el lenguaje asociado al problema decisional Π (cap´ıtulo 2). De hecho, la mayor´ıa de las reducciones vistas en el cap´ıtulo 4 son calculables en tiempo polin´omico. Definici´on 10.3 Dados dos problemas decisionales A y B, A es reducible en tiempo polin´omico a B si existe una reducci´on en tiempo polin´omico de A en B. Lo denotamos con A ≤pm B.
10.2.
Primer ejemplo
Recordemos TSP, el problema del viajante, definido en el cap´ıtulo 7. Vamos a ver una primera reducci´on desde un problema de grafos, el problema del hamiltoniano (HAM), en el problema del viajante (TSP). Comenzamos dando unas definiciones sobre caminos para poder enunciar HAM. Definici´on 10.4 Dado un grafo no dirigido G = (V, A) con V = {1, . . . , n}, un camino es una secuencia de v´ertices C = (c1 , . . . , ck ) que cumple que para todo i desde 1 a k − 1, {ci , ci+1 } ∈ A. La longitud de un camino C = (c1 , . . . , ck ) es k − 1. Un camino C = (c1 , . . . , ck ) es simple si no tiene v´ertices repetidos, es decir, para todo i desde 1 hasta k, ci 6∈ {c1 , . . . , ci−1 , ci+1 , . . . , ck }. Un camino hamiltoniano es un camino simple de longitud n−1, es decir, un camino simple que pasa por todos los v´ertices. Un circuito es un camino C = (c1 , . . . , ck ) tal que {ck , c1 } ∈ A. Sea HAM el siguiente problema: Datos: G = (V, A) un grafo no dirigido con n v´ertices, Salida: ¿Tiene G un camino hamiltoniano? Codificamos la entrada con el alfabeto Σ = {0, 1, ,}, utilizando la codificaci´on del grafo con matriz de adyacencia. Luego |G| = n2 .
´ CAP´ITULO 10. REDUCCIONES EN TIEMPO POLINOMICO
105
Ejercicio. Demostrar que HAM ∈ NP. Para reducir HAM a TSP en tiempo polin´omico queremos traducir cada entrada de HAM (un grafo no dirigido) en una entrada de TSP, es decir, un mapa de ciudades con sus distancias, de manera que el grafo original tenga un camino hamiltoniano si y s´olo si el mapa tiene un camino corto que pasa por todas las ciudades. Para eso pondremos el mismo n´ umero de ciudades que v´ertices tiene el grafo y haremos la distancia entre dos ciudades peque˜ na si los correspondientes v´ertices est´an unidos con una arista, y grande en caso contrario, es decir, para cada G = (V, A) un grafo de n v´ertices, la reducci´on f se define como: f (G) = (n, d(i, j)(1 ≤ i ≤ n, 1 ≤ j ≤ n), n − 1) con
(
d(i, j) =
1 si {i, j} ∈ A 2n en otro caso.
Veamos que se trata de una reducci´on de HAM a TSP y que se puede calcular en tiempo polin´omico. Para ver que es una reducci´on, sea G = (V, A) con V = {1, . . . , n} una entrada a HAM. Si G tiene soluci´on s´ı para HAM, entonces G tiene un camino hamiltoniano C = (c1 , . . . , cn ). Luego para cada i desde 1 hasta n − 1, {ci , ci+1 } ∈ A. Por tanto para cada i desde 1 hasta n − 1, d(ci , ci+1 ) = 1 luego existe unPcamino, C, que pasa por las n ciudades una sola vez con longitud total n−1 i=1 d(ci , ci+1 ) = n−1 y por tanto f (G) = (n, d(i, j)(1 ≤ i ≤ n, 1 ≤ j ≤ n), n − 1) tiene soluci´on s´ı para TSP. En la otra direcci´on, si f (G) tiene soluci´on s´ı para TSP, existe un camino C = (c1 , . . . , cn ) que pasa por las n ciudades una sola vez con longitud total menor o igual que n − 1. Como d(i, j) es siempre mayor que 0, P para que n−1 i=1 d(ci , ci+1 ) ≤ n − 1 tiene que ser d(ci , ci+1 ) = 1 para cada i desde 1 hasta n − 1. Luego para cada i {ci , ci+1 } ∈ A, C es un camino de G y por no repetir v´ertices y ser de logitud n − 1 es un camino hamiltoniano, luego G tiene soluci´on s´ı para HAM. El tiempo que tarda un programa en calcular f con una entrada G es n2 para calcular d m´as la instrucci´on de Devuelve, luego tp (G) ≤ n2 + 1. Como |G| ≥ n2 , Tp (m) ≤ m + 1 y por tanto f es calculable en tiempo polin´omico.
´ CAP´ITULO 10. REDUCCIONES EN TIEMPO POLINOMICO
10.3.
106
Propiedades elementales
Vamos a demostrar primero la propiedad que m´as nos interesar´a de las reducciones en tiempo polin´omico, que es que si A ≤pm B y B ∈ P entonces A ∈ P. Esta propiedad es similar a la propiedad 4.5 y formaliza la idea de que si A ≤pm B entonces A es tanto o m´as f´acil que B. Empezaremos con el siguiente lema. Lema 10.5 Sea h : IN → IN una funci´ on total creciente con h(m) ≥ m para todo m. Sean A y B dos problemas decisionales que cumplen 1. A ≤pm B y 2. B ∈ DTIME(h(m)). Entonces existen dos constantes c, k ∈ IN tales que A ∈ DTIME(h(cmk )). Dem. Sea p un programa que resuelve B en tiempo Tp (m) ≤ c1 · h(m) con c1 constante. Sea f una reducci´on de A en B calculable en tiempo polin´omico. Sea q un programa que calcula f con Tq (m) ≤ c2 · mc3 , con c2 y c3 constantes. Por tanto para cada x entrada de A, |f (x)| ≤ |x| · c2 · |x|c3 . El siguiente algoritmo p0 resuelve A: Leer X Y:=ϕq (X); Z:=ϕp (Y); Devuelve Z. Vamos a acotar el tiempo de p0 con una entrada x: tp0 (x) ≤ tq (x) + tp (f (x)) ≤ c2 · |x|c3 + c1 · h(|f (x)|) ≤ ≤ h(c2 · |x|c3 ) + c1 · h(c2 · |x|c3 +1 ) (ya que h(m) ≥ m para todo m). Luego Tp0 (m) ≤ (c1 + 1)h(cmk ) con c = c2 y k = c3 + 1. Por tanto A ∈ DTIME(h(cmk )).
´ CAP´ITULO 10. REDUCCIONES EN TIEMPO POLINOMICO
107
Luego si B ∈ P tenemos: Teorema 10.6 Sean A y B dos problemas decisionales tales que A ≤pm B. Entonces se cumple que: Si B ∈ P entonces A ∈ P. Dem. Si B ∈ DTIME(mk ), aplicamos el lema anterior para h(m) = mk . El teorema anterior se puede enunciar equivalentemente como: Teorema 10.7 Sean A y B dos problemas decisionales tales que A ≤pm B. Entonces se cumple que: Si A 6∈ P entonces B 6∈ P. lo que nos servir´a para tratar con los problemas NP-completos (en el pr´oximo cap´ıtulo). De manera an´aloga se demuestra el siguiente teorema: Teorema 10.8 Sean A y B dos problemas decisionales tales que A ≤pm B. Si B ∈ EXP entonces A ∈ EXP. El siguiente teorema demuestra que los problemas que est´an en P son reducibles en tiempo polin´omico a todos los problemas. Intuitivamente esto quiere decir que seg´ un el orden marcado por las reducciones ≤pm los problemas en P son los m´as f´aciles. Teorema 10.9 Sea A ∈ P. Sea B un problema decisional cualquiera no trivial, es decir, que no tiene la misma soluci´ on para todas las entradas. Entonces A ≤pm B Dem. Por ser B no trivial, tomo dos entradas fijas y1 , y2 tales que y1 tiene respuesta s´ı para B e y2 tiene respuesta no para B. Sean Σ y Γ los alfabetos que codifican las entradas de A y B respectivamente. Defino la funci´on f : Σ∗ → Γ∗ como (
f (x) =
y1 y2
si x tiene soluci´on s´ı para A si x tiene soluci´on no para A
f es calculable en tiempo polin´omico ya que la calcula el siguiente algoritmo, donde p es un programa para A con tp (x) ≤ c|x|k :
´ CAP´ITULO 10. REDUCCIONES EN TIEMPO POLINOMICO
108
Leer X Simular(p,X,EXITO, Y); Si Y=SI entonces Devuelve y1 else Devuelve y2 . (En este algoritmo y1 e y2 son constantes.) f es claramente una reducci´on de A en B. La reducci´on ≤pm es transitiva, lo que utilizaremos en el siguiente cap´ıtulo: Teorema 10.10 Si A ≤pm B y B ≤pm C entonces A ≤pm C. Dem. Sea f una reducci´on en tiempo polin´omico de A en B y g una reducci´on en tiempo polin´omico de B en C. Entonces la composici´on de f y g, g ◦ f (x) = g(f (x)) es una reducci´on de A a C, ya que es cumple: x tiene soluci´on s´ı para A ⇔ f (x) tiene soluci´on s´ı para B ⇔ g(f (x)) = g ◦ f (x) tiene soluci´on s´ı para C. Veamos que g ◦ f es calculable en tiempo polin´omico. Si g es calculable 0 en tiempo Tp (m) ≤ cmk y f es calculable en tiempo Tq (m) ≤ c0 mk , entonces el algoritmo r: Leer X Y:=f (X); Z:=g(Y); Devuelve Z. funciona en tiempo 0
0
0
tr (x) ≤ c0 |x|k + c|f (x)|k ≤ c0 |x|k + c(c0 |x|k +1 )k ≤ 0 ≤ c00 |x|(k +1)k Definimos a continuaci´on el concepto de ≤pm -dif´ıcil y ≤pm -completo para una clase: Definici´on 10.11 Dada una clase o conjunto de problemas decisionales C, un problema decisional X es ≤pm -dif´ıcil para C si para todo A ∈ C, A ≤pm X.
´ CAP´ITULO 10. REDUCCIONES EN TIEMPO POLINOMICO
109
Definici´on 10.12 Dada una clase o conjunto de problemas decisionales C, un problema decisional X es ≤pm -completo para C si X es ≤pm -dif´ıcil para C y adem´as X ∈C. Por la transitividad tenemos: Corolario 10.13 Sea X un problema decisional y sea V un problema ≤pm dif´ıcil para C. Si V ≤pm X entonces X es ≤pm -dif´ıcil para C. Dem. Sea A ∈C. Como sabemos que A ≤pm V y por hip´otesis V ≤pm X, aplicando transitividad (teorema 10.10) tenemos que A ≤pm X. EJERCICIOS 10.1. Demostrar el Teorema 10.8.
Cap´ıtulo 11
Los problemas NP-completos Referencia: Cap´ıtulo 2 de [GJ78]. En este cap´ıtulo estudiaremos una serie de problemas para los cuales no se conocen algoritmos eficientes, es decir, no se sabe si est´an en P. Estos problemas est´an fuertemente relacionados entre s´ı, de manera que si uno de ellos estuviera en P entonces lo estar´ıan todos.
11.1.
El concepto de NP-completo
Empezaremos enunciando sin demostraci´on el teorema de Cook, que dice que cualquier problema de la clase NP se puede reducir a SAT. Teorema 11.1 Para todo A ∈ NP se cumple que A ≤pm SAT. La demostraci´on se puede ver en [HMU02] y en [GJ78]. Utilizando el teorema 10.6 tenemos la siguiente propiedad: Corolario 11.2 Si SAT ∈ P entonces cualquier A ∈ NP est´ a en P, luego NP ⊆ P. Como sabemos que P ⊆ NP (propiedad 9.13): Corolario 11.3 Si SAT ∈ P entonces P = NP. De otra forma: Corolario 11.4 Si P 6= NP entonces SAT 6∈ P. 110
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
111
Como SAT∈ NP, si P = NP entonces SAT∈ P y por tanto: Corolario 11.5 Son equivalentes: a. P=NP b. SAT∈P De otra forma: Corolario 11.6 Son equivalentes: a. P6=NP b. SAT6∈P Podemos interpretar estas propiedades como “SAT tiene dificultad m´axima en NP”, es decir, si existe un algoritmo eficiente para SAT entonces existen algoritmos eficientes para todos los problemas de NP. Existen muchos otros problemas en NP que comparten estas propiedades de SAT, son los NP-completos. Definici´on 11.7 Un problema se llama NP-dif´ıcil si es ≤pm -dif´ıcil para NP. Un problema se llama NP-completo si es ≤pm -completo para NP. Todos los NP-completos cumplen las anteriores propiedades de SAT (las demostraciones son an´alogas). Propiedad 11.8 Sea A un NP-completo. Si P 6= NP entonces A 6∈ P. Corolario 11.9 Sea A un NP-completo. Son equivalentes: a. P6=NP b. A6∈P Por tanto dados A y B NP-completos, son equivalentes: a. A6∈P b. B6∈P
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
112
ya que ambas afirmaciones son equivalentes a P6=NP. Sabemos pues de los problemas NP-completos que: Si un NP-completo no est´a P entonces ninguno est´a en P. No se conocen algorimos que funcionen en tiempo polin´omico para ning´ un NP-completo. Por todo lo anterior, el que un problema A sea NP-completo se toma como una prueba de intratabilidad, en ese caso hay sospechas fundadas de que no existe un algoritmo eficiente que resuelva A. Para demostrar que un problema es NP-completo utilizaremos la siguiente propiedad, que se sigue del corolario 10.13: Propiedad 11.10 Sea A un problema NP-completo. Si B ∈NP y A ≤pm B entonces B es NP-completo. Luego como SAT es NP-completo, si demostramos que un problema B cumple: B ∈NP SAT≤pm B entonces ya sabemos que B es NP-completo. En adelante utilizaremos la u ´ltima propiedad para demostrar que nuevos problemas son NP-completos a partir de los que ya sepamos que lo son.
11.2.
Una reducci´ on complicada
En esta secci´on vamos a demostrar que 3-SAT, el problema que definimos a continuaci´on, es NP-completo. Datos: Un conjunto de variables X y una f´ormula CNF sobre X, L con exactamente 3 literales en cada cl´ausula (y que cumple que todas las variables de X aparecen al menos una vez en los literales de L, no hay cl´ausulas repetidas en L y dentro de cada cl´ausula no hay literales repetidos). Salida: ¿Existe una asignaci´on de verdad que satisface L?
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
113
3-SAT tiene como entradas un subconjunto de las entradas de SAT, la f´ormulas CNF que tienen exactamente tres literales por cl´ausula, y dada una entrada de 3-SAT, la soluci´on para SAT y para 3-SAT es la misma. Codificaremos las entradas de 3-SAT de la misma forma que codific´abamos las de SAT. Ejemplo 11.11 Una entrada de 3-SAT: X = {x1 , x2 , x3 }, L = (¬x2 ∨ x3 ∨ ¬x1 ) ∧ (x2 ∨ ¬x2 ∨ x1 ). Podr´ıa pensarse que al haber restringido las f´ormulas, 3-SAT es m´as f´acil que SAT. Veamos que no, ya que 3-SAT es tambi´en NP-completo. Para ello vemos primero que 3-SAT ∈ NP y despu´es que SAT ≤pm 3-SAT. Teorema 11.12 3-SAT ∈ NP. Dem. Si tomamos el problema EVAL definido en el cap´ıtulo 9, sabemos que EVAL ∈ P y que si X, L es una entrada a 3-SAT y X, L, α es una entrada a EVAL entonces |X, L, α| ≤ 3|X, L|. Adem´as como dada una entrada a 3-SAT X, L, su soluci´on para SAT y para 3-SAT es la misma, entonces X, L tiene soluci´on S´ı para 3-SAT ⇔ ∃α X, L, α tiene soluci´on S´ı para EVAL
Teorema 11.13 SAT ≤pm 3-SAT. Dem. Para ver que SAT ≤pm 3-SAT, tenemos que definir una reducci´on computable en tiempo polin´omico de SAT a 3-SAT, es decir, una funci´on calculable en tiempo polin´omico que transforme cada entrada de SAT X, L en f (X, L) = X 0 , L0 una entrada a 3-SAT, de forma que existe una asignaci´on que satisface L si y s´olo si existe una asignaci´on que satisface L0 . Para definir f usamos la siguiente notaci´on para los literales de una f´ormula: Si X = {x1 , . . . , xn }, L = c1 ∧ . . . ∧ ck , donde c1 , . . . ck son cl´ausulas, entonces ci tiene ri literales z1i , . . . , zri i , o sea, ci = (z1i ∨ . . . ∨ zri i ).
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
114
Ejemplo 11.14 X = {x1 , x2 , x3 , x4 , x5 }, L = (¬x1 ) ∧ (x3 ∨ ¬x1 ∨ ¬x4 ∨ ¬x5 ∨ x2 ) Luego r1 = 1, r2 = 5, z11 = ¬x1 , z12 = x3 , z22 = ¬x1 , z32 = ¬x4 , z42 = ¬x5 , z52 = x2 . Vamos a transformar X, L en X 0 , L0 con X 0 = X ∪ ( ki=1 Yi ) con Yi nuevas variables a˜ nadidas para modificar la cl´ausula ci , L0 = ∧ki=1 Di donde cada Di es una f´ormula CNF con tres literales por cl´ausula que sustituye a la cl´ausula ci de L. Definimos a continuaci´on Yi , Di para cada i desde 1 hasta k: Si ri = 1 entonces Yi = {y1i , y2i } y S
Di = (z1i ∨ y1i ∨ y2i ) ∧ (z1i ∨ y1i ∨ ¬y2i ) ∧ (z1i ∨ ¬y1i ∨ y2i ) ∧ (z1i ∨ ¬y1i ∨ ¬y2i ) Si ri = 2 entonces Yi = {y1i } y Di = (z1i ∨ z2i ∨ y1i ) ∧ (z1i ∨ z2i ∨ ¬y1i ) Si ri = 3 entonces Yi = ∅ y Di = ci . Si ri > 3 entonces Yi = {y1i , . . . , yri i −3 } y Di =
(z1i ∨ z2i ∨ y1i ) ∧ (¬y1i ∨ z3i ∨ y2i ) ∧ (¬y2i ∨ z4i ∨ y3i ) ∧ . . . i i . . . ∧ (¬ys−2 ∨ zsi ∨ ys−1 ) ∧ . . . ∧ (¬yri i −4 ∨ zri i −2 ∨ yri i −3 ) ∧ ∧(¬yri i −3 ∨ zri i −1 ∨ zri i )
es decir, i i i −2 (¬ys−2 ∨ zsi ∨ ys−1 ) Di = (z1i ∨ z2i ∨ y1i ) ∧ (¬yri i −3 ∨ zri i −1 ∨ zri i ) ∧rs=3
Ejemplo 11.15 El ejemplo anterior queda transformado en X 0 = {x1 , x2 , x3 , x4 , x5 , y11 , y21 , y12 , y22 }, L0 = (¬x1 ∨ y11 ∨ y21 ) ∧ (¬x1 ∨ y11 ∨ ¬y21 ) ∧ (¬x1 ∨ ¬y11 ∨ y21 ) ∧(¬x1 ∨ ¬y11 ∨ ¬y21 ) ∧ (x3 ∨ ¬x1 ∨ y12 ) ∧ (¬y12 ∨ ¬x4 ∨ y22 ) ∧ (¬y22 ∨ ¬x5 ∨ x2 ) Veamos que existe una asignaci´on que satisface L si y s´olo si existe una asignaci´on que satisface L0 .
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
115
⇒) Supongamos que existe una asignaci´on α : X → {T, F } que satisface L. Definimos β : X 0 → {T, F } una asignaci´on que satisface L0 como sigue: Si x ∈ X, β(x) = α(x). Si x ∈ Yi distinguimos tres casos: Si ri = 1 entonces β(y1i ) = β(y2i ) = T . Si ri = 2 entonces β(y1i ) = T . Si ri > 3 entonces como α satisface L, α satisface cada ci , luego existen uno o m´as literales de ci satisfechos por α. Sea j el primero tal que α satisface zji . • Si j ≤ 2 entonces β(ysi ) = F para todo s. • Si 2 < j < ri − 1 entonces: (
β(ysi )
=
T para 1 ≤ s ≤ j − 2 F para j − 1 ≤ s ≤ ri − 3
• Si j ≥ ri − 1 entonces β(ysi ) = T para todo s. Veamos que β satisface L0 viendo que satisface todas las Di para i desde 1 hasta k: a. Si ri = 1 entonces α satisface z1i , luego β satisface z1i y tambi´en Di Di = (z1i ∨ y1i ∨ y2i ) ∧ (z1i ∨ y1i ∨ ¬y2i ) ∧ (z1i ∨ ¬y1i ∨ y2i ) ∧ (z1i ∨ ¬y1i ∨ ¬y2i ) b. Si ri = 2 entonces α satisface (z1i ∨ z2i ), luego β tambi´en satisface Di = (z1i ∨ z2i ∨ y1i ) ∧ (z1i ∨ z2i ∨ ¬y1i ) c. Si ri > 3 entonces i i i −2 Di = (z1i ∨ z2i ∨ y1i ) ∧ (¬yri i −3 ∨ zri i −1 ∨ zri i ) ∧rs=3 (¬ys−2 ∨ zsi ∨ ys−1 )
sea j el primero tal que α satisface zji . i ∨ zji ∨ a) Si 2 < j < ri − 1 entonces β satisface la cl´ausula (¬yj−2 i yj−1 ) de Di . Son ciertas las ysi para 1 ≤ s ≤ j − 2 y falsas el i i resto, luego son ciertas las cl´ausulas (¬ys−1 ∨ zs+1 ∨ ysi ) para i i i 2 ≤ s ≤ j −2, las (¬ys ∨zs+2 ∨ys+1 ) para j −1 ≤ s ≤ ri −4, y las cl´ausulas primera y u ´ltima (z1i ∨ z2i ∨ y1i ), (¬yri i −3 ∨ zri i −1 ∨ zri i ).
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
116
b) Si j ≤ 2 β satisface la cl´ausula (z1i ∨ z2i ∨ y1i ) de Di y hemos hecho todas las ysi falsas, luego todas las cl´ausulas de la forma i i (¬ys−2 ∨ zsi ∨ ys−1 ) son ciertas y tambi´en la u ´ltima (¬yri i −3 ∨ zri i −1 ∨ zri i ). c) Si j ≥ ri − 1 β satisface la cl´ausula (¬yri i −3 ∨ zri i −1 ∨ zri i ) de Di . Todas las ysi son ciertas, luego son ciertas todas las cl´ausulas de i i ) y tambi´en la primera (z1i ∨ z2i ∨ y1i ). ∨ zsi ∨ ys−1 la forma (¬ys−2 ⇐) Supongamos que existe una asignaci´on β : X 0 → {T, F } que satisface L0 , tomamos α : X → {T, F } como α(x) = β(x) para cada x ∈ X. Veamos que α satisface L, es decir, que satisface ci para todo i desde 1 a k. Si ri = 1 entonces β satisface las cuatro cl´ausulas (z1i ∨ y1i ∨ y2i ), (z1i ∨ y1i ∨ ¬y2i ), (z1i ∨ ¬y1i ∨ y2i ) y (z1i ∨ ¬y1i ∨ ¬y2i ). Como una de las cuatro cl´ausulas (y1i ∨ y2i ), (y1i ∨ ¬y2i ), (¬y1i ∨ y2i ), (¬y1i ∨ ¬y2i ) es falsa, necesariamente β hace cierto z1i y por tanto ci . Si ri = 2 entonces β satisface las dos cl´ausulas (z1i ∨ z2i ∨ y1i ) y (z1i ∨ z2i ∨ ¬y1i ), luego tiene que satisfacer (z1i ∨ z2i ) = ci . Si ri > 3 sea j el primero tal que β(yji ) = T , si no existe tal j entonces j = ri . Sea s el u ´ltimo tal que β(ysi ) = F , si no existe tal s entonces s = 0. Si j > 1 entonces β(y1i ) = F y por ser cierta la cl´ausula (z1i ∨z2i ∨y1i ) es cierta (z1i ∨ z2i ) y por tanto ci . Si s < ri − 3 entonces β(yri i −3 ) = T y por ser cierta la cl´ausula (¬yri i −3 ∨ zri i −1 ∨ zri i ) es cierta (zri i −1 ∨ zri i ) y por tanto ci . Si j = 1 y s = ri − 3 entonces existe un l con 1 ≤ l ≤ ri − 4 tal que i i i ) es ∨ yl+1 ) = F . Por tanto la cl´ausula (¬yli ∨ zl+2 β(yli ) = T , β(yl+1 i cierta por ser cierto zl+2 , luego β satisface ci . Para terminar falta ver que f es calculable en tiempo polin´omico. Para calcular f s´olo hace falta contar cl´ausulas y varibles de X, L y recorrer las cl´ausulas ci transform´andolas en Di . Todo esto se puede hacer en tiempo tp (X, L) ≤
k X i=1
4ri
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
117
como cada ri ≤ 2n, tp (X, L) ≤ 8kn Como |X, L| ≥ k y |X, L| ≥ n, Tp (m) ≤ 8m2 .
11.3.
Algunos problemas NP-completos
Ya sabemos que SAT y 3-SAT son NP-completos. Vamos a ver aqu´ı cinco problemas m´as que tambi´en son NP-completos, lo cual nos permitir´a demostrar que un nuevo problema es NP-completo utilizando la propiedad 11.10 y uno de los NP-completos ya conocidos. Comenzaremos enunciando los problemas VC y PARTICION. 11.3.1.
El problema del Vertex Cover
Este problema trata de cubrimientos de un grafo, que pasamos a definir. Definici´on 11.16 Dado un grafo no dirigido G = (V, A), un cubrimiento por v´ertices de G es un conjunto X ⊆ V tal que, para toda arista {u, v} ∈ A, u ∈ X ´o v ∈ X. El problema VC o vertex cover trata de la existencia de cubrimientos peque˜ nos de un grafo: Datos: G = (V, A) un grafo no dirigido con n v´ertices, k ∈ IN con k ≤ n. Salida: ¿Existe un cubrimiento de G con k v´ertices? Codificamos la entrada como en el problema CLIQUE. Ejemplo 11.17 Sea G:
Este grafo tiene un cubrimiento de dos v´ertices, X = {3, 4}.
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
118
El problema VC tiene una estrecha relaci´on con CLIQUE, ya que se cumple la siguiente propiedad: Propiedad 11.18 Sea G = (V, A) un grafo no dirigido, y sea X ⊆ V . Son equivalentes: 1. X es un cubrimiento de G. 2. V − X es un clique de Gc , donde Gc = (V, Ac ) con Ac = {{u, v} | {u, v} 6∈ A} Dem. 1.⇒2. Sea X un cubrimiento de G. Veamos que V − X es un clique de Gc . Sean u, v ∈ V − X, u 6= v. Entonces {u, v} 6∈ A, ya que ni u no v est´an en X, que es un cubrimiento de G. Por tanto {u, v} ∈ Ac . Esto se cumple para todo u, v ∈ V − X, u 6= v, luego V − X es clique de Gc . 2.⇒1. Sea X tal que V − X es clique de Gc . Veamos que X es un cubrimiento de G. Sea {u, v} ∈ A, u 6= v. Como {u, v} 6∈ Ac , al menos uno de los dos u, v no est´a en V − X que es un clique de Gc , luego al menos uno de los dos u, v est´a en X. Como eso se cumple para cada {u, v} ∈ A, X es un cubrimiento de G. Notemos que (Gc )c = G, luego tenemos el siguiente corolario que relaciona los problemas CLIQUE y VC. Corolario 11.19 Sea G un grafo no dirigido de n v´ertices. 1. G, k tiene soluci´on s´ı para VC si y s´ olo si Gc , n − k tiene soluci´ on s´ı para CLIQUE. 2. G, k tiene soluci´on s´ı para CLIQUE si y s´ olo si Gc , n − k tiene soluci´on s´ı para VC. Luego tenemos el siguiente resultado Teorema 11.20 VC ≤pm CLIQUE y CLIQUE ≤pm VC. Dem. La funci´on f (G, k) = Gc , n − k es reducci´on en los dos casos por la propiedad anterior. Para calcular f , s´olo es necesario intercambiar ceros y unos en la matriz de adyacencia, lo cual se puede hacer en tiempo n2 , luego Tp (m) ≤ m (|G, k| ≥ n2 ) y f es calculable en tiempo polin´omico.
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
119
Tambi´en demostramos que VC ∈ NP. Teorema 11.21 VC ∈ NP. Dem. Sea compVC el siguiente problema: Datos: G = (V, A) grafo no dirigido, k ∈ IN, U subconjunto de V de k elementos. Salida: ¿Es U un cubrimiento de G ? Con las entradas codificadas como en compCLIQUE. Por tanto |G, k, U | ≥ n2 y |G, k, U | ≤ 5 · |G, k|. Un algoritmo para compVC es un u ´nico bucle que para una entrada G, k, U comprueba si todas las parejas u, v con u, v ∈ V , u 6= v cumplen que si {u, v} ∈ A entonces u ∈ U ´o v ∈ U . Si q es el algoritmo anterior, tq (G, k, U ) ≤ 2n2 Como |G, k, U | ≥ n2 , Tq (m) ≤ 2m, compVC ∈ DTIME(m) ⊆ P. Adem´as por definici´on de compVC G, k tiene soluci´on S´ı para VC ⇔ ∃U G, k, U tiene soluci´on S´ı para compVC Luego VC ∈ NP. 11.3.2.
El problema PARTICION
El problema PARTICION se define como: Datos: n ∈ IN el n´ umero de objetos, p1 , . . . , pn ∈ IN los pesos de los objetos. Salida: ¿Existe un conjunto de objetos A ⊆ {1, . . . , n} que cumpla: X i∈A
pi =
X
pi ?
i6∈A
Esto es equivalente a decir, ¿existe un A tal que
P
i∈A
pi =
p1 +...+pn ? 2
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
120
Codificamos la entrada con el alfabeto Σ = {0, 1, ,}, cada natural en binario y separados por comas: n, p1 , . . . , pn Dejamos como ejercicio la demostraci´on del siguiente teorema: Teorema 11.22 PARTICION ∈ NP. 11.3.3.
Siete NP-completos
Ya sabemos que SAT y 3-SAT son NP-completos. Vamos a ver que CLIQUE, VC, HAM, TSP y PARTICION tambi´en lo son partiendo del siguiente resultado, que no demostraremos. Teorema 11.23
3-SAT ≤pm PARTICION.
3-SAT ≤pm VC. VC ≤pm HAM. Corolario 11.24 PARTICION, VC y HAM son NP-completos. Dem. Sabemos que PARTICION, VC y HAM est´an en NP. A partir de que 3-SAT es NP-completo y de las dos primeras partes del teorema anterior tenemos que PARTICION y VC son NP-completos. Utilizando esto y la tercera parte del teorema anterior, HAM es NPcompleto. Utilizando dos reducciones ya conocidas Teorema 11.25 CLIQUE y TSP son NP-completos. Dem. Sabemos que CLIQUE y TSP est´an en NP (cap´ıtulo 9), y que HAM ≤pm TSP (cap´ıtulo 10) y VC ≤pm CLIQUE. Luego por el corolario anterior, CLIQUE y TSP son NP-completos. Nota: Tambi´en son NP-completos los problemas dCLIQUE, dVC y dHAM cuyos enunciados son exactamente iguales a los de CLIQUE, VC y HAM excepto que el grafo de entrada es DIRIGIDO. El lector puede comprobar que estos tres nuevos problemas pertenecen a la clase NP. La demostraci´on de que son NP-dif´ıciles no se tratar´a. EJERCICIOS
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
121
11.1. Demostrar que los siguientes problemas son NP-completos, sabiendo que lo son SAT, 3-SAT, VC, CLIQUE, HAM, TSP y PARTICION. 1. MOCHILA: Datos: n, p1 , . . . , pn , k, d ∈ IN Salida: ¿Existe A ⊆ {1, . . . , n} con k − d ≤ Σi∈A pi ≤ k ? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los n+3 n´ umeros naturales que componen una entrada se escriben en binario y se separan por comas. Pista: Reducir PARTICION. 2. Hitting-Set: Datos: n ∈ IN, A1 , . . . , Al subconjuntos de {1, . . . , n}, k ∈ IN Salida: ¿Existe A ⊆ {1, . . . , n} con #A ≤ k y para todo i ≤ l, Ai ∩ A 6= ∅? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, n y k se escriben en binario, cada subconjunto de {1, . . . , n} se escribe con n bits (utilizando la secuencia caracter´ıstica) y los l + 2 datos se separan por comas. Pista: Reducir VC. 3. Multiprocessor Scheduling Datos: n ∈ IN el numero de tareas, l1 , . . . , ln el tiempo de cada tarea, M ∈ IN el n´ umero de procesadores C ∈ IN el tiempo m´aximo permitido Salida: ¿Podemos repartir la n tareas entre los M procesadores de manera que cada procesador tarde un tiempo menor o igual a C?, es decir, ¿Existen A1 , . . . , AM subconjuntos de {1, . . . , n} tales que A1 ∪ A2 . . . ∪ AM = {1, . . . , n} y para cada i ≤ M Σj∈Ai lj ≤ C ?
CAP´ITULO 11. LOS PROBLEMAS NP-COMPLETOS
122
Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los n+3 n´ umeros naturales que componen una entrada se escriben en binario y se separan por comas. Pista: Reducir PARTICION. 4. Partici´on en Hamiltonianos: Datos: G = (V, A) grafo no dirigido, k ∈ IN Salida: ¿Existen V1 , . . . , Vk tales que V1 ∪. . . Vk = V y para cada i ≤ k el subgrafo de v´ertices Vi tiene un camino hamiltoniano? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si x ∈ {0, 1}∗ es el n´ umero de v´ertices de G escrito en binario, y ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas y z es k en binario, entonces la codificaci´on de la entrada G, k es la palabra x, y, z. Pista: Reducir HAM. 5. Subgrafo: Datos: G = (V, A), H = (V 0 , A0 ) dos grafos no dirigidos. Salida: ¿Es H un subgrafo de G?, es decir, ¿existe V1 ⊆ V y f : V1 → V 0 biyectiva tal que para cada u, v ∈ V1 , {u, v} ∈ A si y s´olo si {f (u), f (v)} ∈ A0 ? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si x ∈ {0, 1}∗ es el n´ umero de v´ertices de G escrito en binario, y ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas y z, t corresponden al n´ umero de v´ertices y matriz de adyacencia de H, entonces la codificaci´on de la entrada G, H es la palabra x, y, z, t. Pista: Reducir CLIQUE. G tiene un clique de k v´ertices si y s´olo si el grafo completo de k v´ertices es subgrafo de G.
Cap´ıtulo 12
Ejercicios de examen 12.1.
Teor´ıa
1. Contestad Verdadero o Falso a cada una de las siguientes preguntas. ´ Las respuestas err´oneas tienen puntuaci´on negativa. ATENCION: Si A es un lenguaje decidible entonces A es semidecidible. Si A es un lenguaje semidecidible y B es un lenguaje indecidible entonces A ≤m B. Todo problema NP-completo est´a en NP. Si A ∈ P y B es un lenguaje decidible entonces A ≤m B. Si A ≤m B entonces B ≤m A La intersecci´on de dos lenguajes semidecidibles es un lenguaje semidecidible. ¯ entonces A es decidible. Si A ≤m K y A ≤m K Si A es el dominio de una funci´on calculable entonces A es semidecidible. Si K ≤m A entonces A es semidecidible. La intersecci´on de dos lenguajes decidibles es un lenguaje decidible. Si A es el conjunto imagen de una funci´on calculable entonces A es semidecidible. 123
CAP´ITULO 12. EJERCICIOS DE EXAMEN
124
La uni´on de dos lenguajes decidibles es un lenguaje decidible. NP ⊆ EXP. Si A ∈ P y B ∈ NP entonces A ≤pm B. Si A es un lenguaje semidecidible entonces A es el conjunto imagen de una funci´on calculable. Si A es un lenguaje NO decidible y B es un lenguaje semidecidible entonces A ≤m B. La intersecci´on de un lenguaje decidible y un lenguaje semidecidible es un lenguaje decidible. Si A ≤m K entonces A es semidecidible. Si A ∈ NP y B no es NP-dif´ıcil entonces A ≤pm B. Si A es NP-completo y B no es NP-dif´ıcil entonces A ≤pm B. Si A es el dominio de una funci´on calculable entonces A es decidible. La uni´on de un lenguaje decidible y un lenguaje semidecidible es un lenguaje decidible. Si A es un lenguaje semidecidible entonces A es decidible. Si A ∈NP y B es NP-dif´ıcil entonces A ≤pm B. Si A es un lenguaje decidible entonces A es el dominio de una funci´on calculable. Si L1 ∪L2 es decidible entonces L1 es decidible ´o L2 es decidible. P ⊆ NP. Si A es un lenguaje decidible y B ∈ P entonces A ≤m B. La uni´on de dos lenguajes semidecidibles es un lenguaje semidecidible. SAT ∈ P y existe B ∈ NP − P. SAT est´a en EXP. 2. Sean A y B dos lenguajes o problemas decisionales. Demostrar la veracidad o falsedad de cada una de las siguientes afirmaciones. Si alguna de ellas es falsa, decir si es falsa en todos los casos o bien existen A y B para los cuales es cierta.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
125
a. Si A es un lenguaje indecidible y B es un lenguaje semidecidible entonces A ≤m B. b. Si A es un lenguaje semidecidible y B es un lenguaje indecidible entonces A ≤m B. c. Si A es un lenguaje decidible y B ∈ P entonces A ≤m B. d. Si A ∈ P y B es un lenguaje decidible entonces A ≤m B. e. Si A ∈ P y B ∈ NP entonces A ≤pm B. f. Si A ∈ NP y B no es NP-dif´ıcil entonces A ≤pm B. g. Si A es NP-completo y B no es NP-dif´ıcil entonces A ≤pm B. 3. Demostrar la veracidad o falsedad de cada una de las siguientes afirmaciones: a. Si A es un lenguaje decidible entonces A es el dominio de una funci´on calculable. b. Si A es el dominio de una funci´on calculable entonces A es decidible. c. Si A es un lenguaje semidecidible entonces A es el conjunto imagen de una funci´on calculable. d. Si A es el conjunto imagen de una funci´on calculable entonces A es semidecidible. 4.
Demostrar que P ⊆ NP. Demostrar que las siguientes afirmaciones son equivalentes para un lenguaje A: a. A es semidecidible. b. Existe un lenguaje B decidible tal que para cualquier x x ∈ A ⇐⇒ ∃ t x, t ∈ B
5. Para los siguientes conjuntos de problemas decisionales: NP, P, SEMIDEC, EXP, NP-completos, DEC (SEMIDEC son los problemas semidecidibles, DEC los decidibles)
CAP´ITULO 12. EJERCICIOS DE EXAMEN
126
a. ¿Qu´e contenidos sabes que se cumplen entre los conjuntos anteriores? Para cada uno de ellos, explicar porqu´e. b. ¿Qu´e contenidos sabes que NO se cumplen entre los conjuntos anteriores? Para cada uno de ellos, explicar porqu´e. 6. ¿Es correcta la siguiente demostraci´on de que HAM 6∈ P? Razonar la respuesta. Consideramos el siguiente algoritmo para SAT: “Con entrada X, F , probar todas las posibles asignaciones de las variables de X. Si alguna hace cierta F devuelve S´ı, en caso contrario devuelve No.” Este algoritmo requiere claramente tiempo exponencial. Por tanto SAT no est´a en P. Como SAT ≤pm HAM, debe cumplirse que HAM 6∈ P. 7. Definir los siguientes conceptos: a. M´aquina de Turing b. Funci´on calculada por una m´aquina de Turing. 8. ¿Qu´e funci´on calcula la m´aquina de Turing M = (Q, Σ, Γ, δ, q0 , qF ) con Q = {q0 , qC , qA , qB , qF }, Σ = {0, 1}, Γ = {0, 1, ., b} y δ definida como: δ(q0 , 0) δ(q0 , 1) δ(q0 , b) δ(qC , 0) δ(qC , 1) δ(qC , .) δ(qA , 0) δ(qB , 0) δ(qB , b)
= = = = = = = = =
(q0 , 0, d) (q0 , 1, d) (qC , b, i) (qF , 1, n) (qC , 0, i) (qA , ., d) (qB , 1, d) (qB , 0, d) (qF , 0, n) ?
9. Para cada una de las siguientes afirmaciones, decir si es cierta o falsa, razon´andolo en cualquiera de los dos casos. Se puede utilizar cualquier propiedad vista en clase, enunci´andola adecuadamente.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
127
(DEC es el conjunto de los lenguajes decidibles, SEMIDEC es el conjunto de los lenguajes semidecidibles.) a. b. c. d.
SEMIDEC ⊆ DEC NP ⊆ P Si A ∈ P y B ∈ NP entonces A ∪ B ∈ NP Si K ≤m A entonces A es semidecidible
10. En la asignatura de Metodolog´ıa de la Programaci´on los alumnos deben realizar una pr´actica 0 que consiste en escribir un programa en ada que calcule la suma de dos n´ umeros enteros. a. ¿Puede el profesor corregir autom´aticamente las pr´acticas, es decir, hacer un programa que toma como entrada un fuente ada cualquiera y dice si calcula la suma correctamente o no? b. Si se impone la condici´on adicional de que el fuente debe tener menos de 100 caracteres, ¿cu´al es la respuesta de a)? En los dos apartados hay que demostrar la respuesta, tanto si esta es afirmativa como si es negativa. 11. Encontrar el fallo en la siguiente demostraci´on err´onea de P6=NP: Consideramos el siguiente algoritmo para SAT: “Con entrada X, F , probar todas las posibles asignaciones de las variables de X. Si alguna hace cierta F devuelve S´ı, en caso contrario devuelve No.” Este algoritmo requiere claramente tiempo exponencial. Por tanto SAT no est´a en P. Como SAT est´a en NP, debe cumplirse que P no es igual a NP. 12. Acabas de empezar a trabajar como analista jefe para la compa˜ n´ıa Comunicaciones Universales S.A., que tiene un total de 500.000 centrales telef´onicas en esta galaxia. En cada momento algunas conexiones entre centrales pueden fallar, as´ı que tu primer encargo consiste en dise˜ nar un algoritmo que dado un mapa de las conexiones que funcionan en un momento dado, d´e el camino m´as corto que pase por todas las centrales, sin pasar dos veces por ninguna. Despu´es de varios d´ıas de trabajo entusiasta, empiezas a desanimarte al ver que el mejor algoritmo que se te ocurre puede llegar a tardar 10100000 a˜ nos en resolver el problema.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
128
Al d´ıa siguiente vas al despacho del jefe con un libro de complejidad en la mano y con la intenci´on de convencerle de que redefina el problema (por ejemplo, ¿no le bastar´ıa un camino cualquiera? o ¿los mapas de conexiones son de alg´ un tipo especial?). Explica de manera formal esta conversaci´on con el jefe (es importante que le convenzas de que t´ u no eres un mal programador). 13.
a. Definir la clase NP. b. Demostrar que NP ⊆ EXP.
14. Desarrollar las siguientes cuestiones (con demostraciones): a. Definir los conceptos de: a) funci´on calculable, b) lenguaje decidible, c) lenguaje semidecidible. b. Relaci´on entre los conceptos de lenguaje decidible y lenguaje semidecidible. c. Comportamiento de los lenguajes decidibles y semidecidibles con las operaciones de uni´on e intersecci´on. 15. Sea 6-SAT el siguiente problema: Datos: Un conjunto de variables X y una f´ormula CNF sobre X, L con exactamente 6 literales por cl´ausula (y cumpliendo que todas las variables de X aparecen al menos una vez en los literales de L, no hay cl´ausulas repetidas en L y dentro de cada cl´ausula no hay literales repetidos). Salida: ¿Existe una asignaci´on de verdad que satisface L? Codificaci´on de las entradas: La misma que la de las entradas de SAT. Demostrar que 6-SAT ≤pm 3-SAT, utilizando una versi´on simplificada de la reducci´on de SAT a 3-SAT. 16. Sean H y K las dos versiones del problema de parada. Demostrar las siguientes afirmaciones: a. H no es decidible, y tampoco lo es K. b. H y K son ambos semidecidibles
CAP´ITULO 12. EJERCICIOS DE EXAMEN
129
¯ ni K ¯ son semidecidibles. c. Ni H En la realizaci´on de este ejercicio no debe utilizarse NINGUN resultado que no se demuestre. 17. Contestar a cada una de las siguientes cuestiones, razonando la respuesta. En dicha respuesta se puede utilizar cualquier propiedad vista en clase, enunci´andola adecuadamente. a. ¿Todo problema NP-completo est´a en P? b. ¿SAT est´a en EXP? c. ¿La uni´on de un lenguaje decidible y un lenguaje semidecidible es un lenguaje decidible? d. ¿Si A ≤m B entonces B ≤m A? ¯ entonces A es decidible? e. ¿Si A ≤m K y A ≤m K 18. Enunciar el teorema de Rice. Explicar su significado y utilidad. Demostrar dicho teorema. 19. Para cada una de las siguientes afirmaciones, decir si es cierta o falsa, razon´andolo en cualquiera de los dos casos. (DEC es el conjunto de los lenguajes decidibles, SEMIDEC es el conjunto de los lenguajes semidecidibles. L1 y L2 son dos lenguajes cualesquiera.) a. DEC ⊆ SEMIDEC b. SEMIDEC ⊆ DEC c. SAT ∈ P y existe B ∈ NP − P. d. Si L1 ∪L2 es decidible entonces L1 es decidible ´o L2 es decidible. e. Sea A ∈ EXP un problema con entradas codificadas sobre Σ = {0, 1}, definimos el siguiente lenguaje sobre Σ: LA = {w | w codifica una entrada con salida SI para A} Entonces LA es un lenguaje decidible. Nota.- Se puede utilizar sin necesidad de demostrarlo el teorema de Cook (referente al problema SAT), y la clausura de P por ≤pm .
CAP´ITULO 12. EJERCICIOS DE EXAMEN
20.
130
a. Describir un modelo abstracto de c´alculo (que no sea la m´aquina de registros ´o RAM). b. Enunciar la tesis de Turing-Church y explicar su significado. c. Enunciar la tesis extendida de Turing-Church y explicar su significado.
21. La profesora de Ciencias del Conocimiento ha decidido dar como proyecto el dise˜ no de un algoritmo que, dados un programa p y una entrada x, determine (contestando SI ´o NO) si p con entrada x se parar´a en un tiempo que sea m´ ultiplo de 6 (en 6 pasos, ´o en 12, 18, 24, etc.). El estudiante Manolito (que tiene sobresaliente en MAC) le dice que es imposible encontrar tal algoritmo. Despu´es de consultarlo con los esp´ıritus, la profesora decide cambiar el problema por el de dise˜ nar un algoritmo que, dados un programa p y una entrada x, determine (contestando SI ´o NO) si p con entrada x se parar´a en un tiempo menor o igual que 3000 y que sea m´ ultiplo de 6. Con esto Manolito ya est´a satisfecho. Explicar detalladamente (con las demostraciones formales necesarias) el razonamiento de Manolito y por qu´e la profesora hace este cambio que convence a Manolito. Pista: Dado un programa, es f´acil construir otro que haga lo mismo en tiempo m´ ultiplo de 6. Si utilizas esto en alg´ un momento de tu demostraci´on, pru´ebalo.
12.2.
Problemas de computabilidad
22. Sea A = {x, y |Dom(ϕx ) = {2z | z ∈ Im(ϕy )} } ¿Es A decidible? ¿Es A semidecidible? ¿Es A¯ semidecidible? 23. Sea A = {x, y |
∀n(Si y(n)↓ entonces x(n)↓ en ϕy (n) pasos o menos)}
CAP´ITULO 12. EJERCICIOS DE EXAMEN
131
¿Es A decidible? ¿Es A semidecidible? ¿Es A¯ semidecidible? 24.
a. ¿Existe un algoritmo que resuelva el siguiente problema? Datos: p, y, k, donde p es un programa, y es una cadena y k un n´ umero natural. Salida: ¿Existen al menos k entradas distintas de p que dan salida y? b. Sea A = {x | ∃n > 5 (x(n)↑ ∨ (x(n)↓ en m´as de n pasos))} ¿Es A decidible? ¿Es A semidecidible? ¿Es A¯ semidecidible? c. ¿Existe un algoritmo que resuelva el siguiente problema? Datos: p, donde p es un programa. Salida: ¿Existe un programa sin llamadas a procedimientos de menos de 100 caracteres que calcula exactamente lo mismo que p?
25. Sea A el siguiente lenguaje: A = {x, y | ∃n ( x(n)↓ ∧ y(n)↑ )} a. ¿Es A decidible? ¿Es A semidecidible? b. ¿Es A¯ semidecidible? 26. Sea A el siguiente lenguaje: A = {x | ∀n ( x(n) ↓ ∧ (ϕx (n) < ϕx (n + 1)) )} a. ¿Es A decidible? ¿Es A semidecidible? b. ¿Es A¯ semidecidible? 27. Sean L1 , L2 los siguientes lenguajes: L1 = {x, y | Dom(ϕx ) 6= Dom(ϕy )}, L2 = {z | ∀x z(x) ↓ y ϕϕz (x) es total}. ¯ 1 semidecidible? a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¿Es L ¯ 2 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? ¿Es L
CAP´ITULO 12. EJERCICIOS DE EXAMEN
132
28. Sean L1 , L2 los siguientes lenguajes: L1 = {m, n | m(n) ↓ y tarda tiempo m´ ultiplo de n}, L2 = {z | ∀x z(x) ejecuta la antepen´ ultima instrucci´on de z}. ¯ 1 semidecidible? a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¿Es L ¯ 2 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? ¿Es L 29. Demostrar que el siguiente problema no es resoluble con nig´ un programa: Datos: Sean p y q dos programas con su codificaci´on habitual. Salida: ¿p y q hacen exactamente lo mismo, es decir, para cada entrada se cumple que o bien no da salida ninguno de los dos programas o bien ambos dan la misma salida? 30. Sea L el siguiente lenguaje: L = {x | Im(ϕx ) es infinito}. a. ¿Es L semidecidible? ¯ semidecidible? b. ¿Es L 31. Sean L1 , L2 los siguientes lenguajes: L1 = {z | ∃x, y z(x, y) 6= x + y}, L2 = {x, y | ϕx (y) = ϕy (y) + 1}. a. ¿Es L1 decidible? ¿Es ¯ 1 decidible? ¿Es b. ¿Es L c. ¿Es L2 decidible? ¿Es
L1 semidecidible? ¯ 1 semidecidible? L L2 semidecidible?
32. Sean A y B los siguientes lenguajes: A = {x | ∀n ϕx (n) = n + 1} B = {x | Dom(ϕx ) contiene alg´ un n´ umero primo}. a. ¿Es A decidible? ¿Es A semidecidible? ¿Es A¯ semidecidible? ¯ semidecidible? b. ¿Es B decidible? ¿Es B semidecidible? ¿Es B
CAP´ITULO 12. EJERCICIOS DE EXAMEN
133
33. Sean A y B los siguientes lenguajes: A = {x | ∃y y ∈ Dom(ϕx ) ∧ Dom(ϕy ) 6= ∅} B = {x | ∃y y ∈ Dom(ϕx ) ∧ x ∈ Dom(ϕy )}. a. ¿Es A decidible? ¿Es A semidecidible? b. ¿Es B decidible? ¿Es B semidecidible? c. ¿Es A¯ semidecidible? 34. Sea A el siguiente lenguaje: A = {x | ∀n x(2n)↓ si y s´olo si x(2n + 1)↓}. a. ¿Es A decidible? b. ¿Es A semidecidible? c. ¿Es A¯ semidecidible? 35. Sean L1 , L2 los siguientes lenguajes: L1 = {x | Dom(ϕx ) contiene todos los n´ umeros pares}, L2 = {x, y | ∃z ϕz (x) = y}. ¯ 1 semidecidible? a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¿Es L b. ¿Es L2 decidible? ¿Es L2 semidecidible? 36. Sean L1 , L2 los siguientes lenguajes: L1 = {z | ∀x ϕz (x) es un n´ umero par}, L2 = {z, y | ∃x > y ϕz (x) es un n´ umero par}. a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¯ 1 decidible? ¿Es L ¯ 1 semidecidible? b. ¿Es L c. ¿Es L2 decidible? ¿Es L2 semidecidible? 37. Sean L1 y L2 los siguientes lenguajes: L1 = {z | ∃x ϕz (x) es un n´ umero primo}, L2 = {x | x(x)↓ en tiempo menor o igual que x2 }.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
134
¯ 1 semidecidible? a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¿Es L ¯ 2 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? ¿Es L 38. Sean L1 y L2 los siguientes lenguajes: L1 = {x | Im(ϕx ) no contiene ning´ un n´ umero par}, L2 = {z, x | ∃y ϕz (y) > x}. ¯ 1 semidecidible? a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¿Es L ¯ 2 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? ¿Es L 39. Sean L1 y L2 los siguientes lenguajes: L1 = {x | x calcula la funci´on identidad}, L2 = {x, y | ϕx ≡ ϕy }. ¯ 1 semidecidible? a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¿Es L ¯ 2 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? ¿Es L 40. Sean L1 y L2 los siguientes lenguajes: L1 = {z | ∃x ϕz (x) es m´ ultiplo de 7 }, L2 = { x, y |
al ejecutar x con entrada y, en alg´ un IF-THEN-ELSE se toma la opci´on else }.
a. ¿Es L1 decidible? ¿Es L1 semidecidible? ¯ 2 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? ¿Es L 41. Sean L1 y L2 los siguientes lenguajes: L1 = {x | K ⊆ Dom(ϕx )}, L2 = {u, v, w | u(v) ↓ ∧ v(w) ↓ ∧ ϕu (v) = (ϕv (w))2 }. a. ¿Es L1 decidible? ¿Es L1 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? 42. Sean L1 y L2 los siguientes lenguajes: L1 = {x | Dom(ϕx ) es finito }, L2 = {z, y | ∃x < y z(x) ↓}.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
135
a. ¿Es L1 decidible? ¿Es L1 semidecidible? b. ¿Es L2 decidible? ¿Es L2 semidecidible? 43. Sea f una funci´on TOTAL que cumple: f (x) = ϕx (x)
si x ∈ K
¿Es f calculable? Pista: Estudiar el lenguaje A = {x | ϕx (x) = n´ umero de pasos en la ejecuci´on de x con entrada x}. 44. Sea calc el conjunto de todas las funciones calculables. Sean g, h funciones calculables tales que Dom(g) = ∅. Sea H =calc−{h}. a. Sea L un lenguaje tal que INDg ⊆ L ⊆ INDH ¿Es L decidible? ¿Es L semidecidible? b. Sea A el lenguaje: A = { x | x(5x + 1) ↑ }. ¿Es A decidible? ¿Es A semidecidible? 45. Dado Π el problema que se enuncia a continuaci´on, ¿existe un programa que resuelve Π? Datos: p, x, k Salida: ¿En la ejecuci´on del programa codificado por p con la entrada codificada por x, se repite la pen´ ultima instrucci´on del fuente al menos k veces? Codificaci´ on de las entradas: sobre el alfabeto {0, 1}, con la codificaci´on usual de programas, entradas y n´ umeros naturales. 46. Sean L1 y L2 los siguientes lenguajes: L1 = {x | ∃ y tal que ϕx ≡ ϕy y x 6= y}, L2 = {z, n | ∃ x tal que ϕz (x) = 1 y |x| = n}.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
136
a. ¿Es L1 decidible? ¿Es L2 decidible? b. ¿Es L2 semidecidible? c. Sea f la funci´on definida como: f (x) = x + 5 si x 6∈ L2 ¿Es f calculable? 47. Sean L1 y L2 los siguientes lenguajes: L1 = {x | ϕx (5) 6= 30}, L2 = {z, x, t | z codifica un programa que, con entrada x, para en tiempo menor o igual que t}. a. ¿Es L1 decidible? ¿Es L2 decidible? b. ¿Es L1 semidecidible? c. Sea f la funci´on definida como: f (x) = x + 5 si x 6∈ L1 ¿Existe una m´aquina de Turing que calcule f ? 48. Sean L1 y L2 los siguientes lenguajes: L1 = { x | Im(ϕx ) = Dom(ϕx ) }, L2 = { x, y | Im(ϕx ) = Dom(ϕy ) }. a. ¿Es L1 decidible? b. ¿Es L2 semidecidible? c. Sea χL1 la funci´on caracter´ıstica de L1 . ¿Existe una m´aquina de Turing que calcule χL1 ? ¿Existe una m´aquina de Turing que calcule χL2 ?
CAP´ITULO 12. EJERCICIOS DE EXAMEN
12.3.
137
Problemas de complejidad
49. Sea X el siguiente problema. Demostrar que es NP-completo. Datos: G = (V, A) un grafo NO DIRIGIDO de n v´ertices, k ∈ IN con k ≤ n. Salida: ¿Existe un conjunto de k v´ertices U ⊆ V tal que para todo u, v ∈ U se cumple que {u, v} 6∈ A? Codificaci´ on de las entradas: Sobre el alfabeto Σ = {0, 1, ,}, si r ∈ {0, 1}∗ es el n´ umero de v´ertices escrito en binario, s ∈ ∗ {0, 1} es la matriz de adyacencia de G escrita por filas, y x es k en binario, entonces la codificaci´on de la entrada G, k es la palabra r, s, x. 50. Sea X el siguiente problema. Demostrar que es NP-completo. Datos: n, m, p1 , . . . , pn , v1 , . . . , vn , B, K ∈ IN, U1 , . . . , Um subconjuntos disjuntos de {1, . . . , n} tales que U1 ∪ . . . ∪ Um = {1, . . . , n}. Salida: ¿Existe un conjunto A ⊆ {1, . . . , n} que contenga como mucho un elemento de cada conjunto Ui (kA ∩ Ui k ≤ 1 ∀i) y que cumpla las siguientes condiciones: X
pj ≤ B
j∈A
X
vj ≥ K
j∈A
Codificaci´ on de las entradas: Sobre el alfabeto Σ = {0, 1, ,}, los 2n+4 n´ umeros naturales se escriben en binario y se separan por comas, seguidos de los m subconjuntos codificados cada uno con n bits y separados por comas. 51.
a. Sea X el siguiente problema. Demostrar que es NP-completo. Datos: G, donde G es un grafo dirigido de n v´ertices. Salida: ¿Existe un camino de G con longitud n que pase por todos los v´ertices de G (es decir, un camino que pase por uno de los v´ertices 2 veces y por todos los dem´as una vez)?
CAP´ITULO 12. EJERCICIOS DE EXAMEN
138
Codificaci´ on de las entradas: Utilizando la matriz de adyacencia del grafo. b. Sea Y el siguiente problema. Demostrar que es NP-completo. Datos: G, k, donde G es un grafo dirigido de n v´ertices y k es un n´ umero natural con k ≤ n. Salida: ¿Existe un camino de G que pase por uno de los v´ertices exactamente k veces y por todos los dem´as una sola vez? Codificaci´ on de las entradas: Utilizando la matriz de adyacencia del grafo. 52. Sea NUMSAT el siguiente problema. Demostrar que es NP-completo. Datos: X, F, k, donde X es un conjunto de n variables, F una f´ormula booleana sobre X en forma normal conjuntiva (es decir, escrita como conjunci´on de cl´ausulas) y k es un n´ umero natural k ≤ n. Salida: ¿Existen al menos k asignaciones distintas de X que hacen cierta F ? Codificaci´ on de las entradas: La misma que la de las entradas de SAT. 53. Sea 2dHAM el siguiente problema. Demostrar que es NP-completo. Datos: G = (V, A) un grafo DIRIGIDO. Salida: ¿¿G tiene m´as de un camino hamiltoniano? Codificaci´on de las entradas: Utilizando listas de adyacencia. 54. Sea CUBRECICLOS el siguiente problema. Demostrar que es NPcompleto. Datos: G = (V, A) un grafo dirigido, k ∈ IN con k ≤ n (donde n es el n´ umero de v´ertices de G). Salida: ¿Existe un conjunto de k v´ertices U ⊆ V que cubre todos los circuitos de G? (U cubre todos los circuitos de G si para todo c1 , . . . , ca circuito de G existe alg´ un i entre 1 y a con ci ∈ U ).
CAP´ITULO 12. EJERCICIOS DE EXAMEN
139
Codificaci´ on de las entradas: Utilizando la matriz de adyacencia del grafo. Pista: utilizar dVERTEX COVER. 55. Sea INECUACIONES el siguiente problema. Demostrar que es NPcompleto. Datos: n ∈ IN el n´ umero de inecuaciones, m ∈ IN el n´ umero de inc´ognitas, ai,j ∈ Q para cada 1 ≤ i ≤ n, 0 ≤ j ≤ m los coeficientes racionales, σi ∈ {≤, ≥} para cada 1 ≤ i ≤ n, las desigualdades de las inecuaciones. (Por ejemplo para −7/3 + 3x1 ≥ 0, es ≥) Salida: ¿Existe una soluci´on al sistema de inecuaciones formada s´olo por ceros y unos? Es decir, v1 , . . . , vm ∈ {0, 1} que cumplan a1,0 + a1,1 v1 + a1,2 v2 + . . . + a1,m vm σ1 0 a2,0 + a2,1 v1 + a2,2 v2 + . . . + a2,m vm σ2 0 ... an,0 + an,1 v1 + an,2 v2 + . . . + an,m vm σn 0 Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,, (, ), ≤, ≥ }, se escriben los n´ umeros racionales como (a, b, s), a y b numerador y denominador en binario y s un bit extra para el signo, los naturales en binario, las desigualdades con el s´ımbolo correspondiente y todos ellos separados por comas. Pista: utilizar MOCHILA o PARTICION. 56. Sea GTSP (problema del viajante generalizado) el siguiente problema: Datos: n ∈ IN el n´ umero de ciudades, d(i, j) ∈ IN para cada 1 ≤ i, j ≤ n las distancias entre cada dos ciudades (tales que d(i, j) = d(j, i) y d(i, i) = 0 para todo i, j),
CAP´ITULO 12. EJERCICIOS DE EXAMEN
140
k ∈ IN. Salida: ¿Existe un camino cualquiera (se iten repeticiones) que pasa por todas las ciudades y que tiene una longitud total menor o igual que k? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, se escriben los n´ umeros naturales en binario y separados por comas. Demostrar que GTSP es NP-dif´ıcil (es decir, que A ≤pm GTSP para alg´ un NP-completo A). Pista: TSP no es una buena elecci´on para esta reducci´on. 57. Sea IPL (programaci´on lineal entera) el siguiente problema. Datos: n ∈ IN el n´ umero de ecuaciones, m ∈ IN el n´ umero de inc´ognitas, ai,j ∈ Z para cada 1 ≤ i ≤ n, 0 ≤ j ≤ m los coeficientes enteros, c ∈ IN. Salida: ¿Existe una soluci´on entera v1 , . . . , vm ∈ Z al sistema de inecuaciones: a1,0 + a1,1 x1 + a1,2 x2 + . . . + a1,m xm ≥ 0 a2,0 + a2,1 x1 + a2,2 x2 + . . . + a2,m xm ≥ 0 ... an,0 + an,1 x1 + an,2 x2 + . . . + an,m xm ≥ 0 que cumpla valor absoluto(vj ) ≤ c para 1 ≤ j ≤ m? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, se escriben los n´ umeros en binario (con un bit extra para el signo) y separados por comas. Demostrar que IPL ∈ NP. 58. Sea CAMINO GUIADO el siguiente problema. Demostrar que es NP-completo. CAMINO GUIADO Datos: G un grafo NO DIRIGIDO de n v´ertices k ∈ IN con 2 ≤ k ≤ n.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
141
v1 , . . . , vk , k v´ertices distintos de G. Salida: ¿Existe C = (c1 , . . . , cn ) un camino hamiltoniano de G y existen 1 = i1 < i2 < . . . < ik = n de forma que v1 = ci1 , v2 = ci2 , . . . , vk = cik (es decir, C empieza en v1 , pasa siempre por vj antes que por vj+1 y acaba en vk )? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, se escribe el n´ umero de v´ertices en binario, seguido de coma, seguido de la matriz de adyacencia de G escrita por filas, seguido de coma y por u ´ltimo k, v1 , . . . , vk en binario y separados por comas. 59. Sean SATGRAL y SATSIMPL los siguientes problemas. Demostrar que ambos son NP-completos. SATGRAL Datos: X, F , donde X = {x1 , . . . , xn } es un conjunto de variables y F una f´ormula booleana cualquiera escrita con las variables de X, conectivas ∧, ∨, ¬ y los par´entesis necesarios. Salida: ¿Existe una asignaci´on de X que hace cierta F ? Codificaci´on de las entradas: Sobre el alfabeto {∧, ∨, ¬, (, ), 0, 1} codificando cada variable por su n´ umero en binario y las conectivas y par´entesis con los s´ımbolos correspondientes. Por ejemplo (x5 ∨ (x1 ∧ (¬x6 ∨ x4 ))) se codifica como (101 ∨ (1 ∧ (¬110 ∨ 100))) SATSIMPL Datos: X, F , donde X es un conjunto de variables, y F una f´ormula booleana en forma normal conjuntiva (es decir, escrita como conjunci´on de cl´ausulas), y tal que en ninguna cl´ausula aparece la misma variable m´as de una vez. Salida: ¿Existe una asignaci´on de X que hace cierta F ? Codificaci´on de las entradas: La misma que la de las entradas de SAT. 60. Sea 3HAM el siguiente problema. Demostrar que es NP-completo. 3HAM
CAP´ITULO 12. EJERCICIOS DE EXAMEN
142
Datos: G un grafo NO DIRIGIDO de n v´ertices a, b, c, tres v´ertices de G. Salida: ¿Existe un camino hamiltoniano de G (es decir, un camino simple que pasa por todos los v´ertices) que empiece en el v´ertice a, acabe en el v´ertice c, y tenga el v´ertice b en la posici´on central (es decir, en el lugar bn/2c)? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es el n´ umero de v´ertices escrito en binario, v ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, y x, y, z ∈ {0, 1}∗ son a, b y c en binario, entonces la codificaci´on de la entrada G, a, b, c es la palabra u, v, x, y, z. 61. Sean MPATH y SPATH los siguientes problemas: MPATH Datos: G un grafo NO DIRIGIDO, r, s, dos v´ertices de G, k ∈ IN con k ≤ n. Salida: ¿Existe un camino simple de G (es decir, sin v´ertices repetidos) de longitud ≥ k que empiece en el v´ertice r y acabe en el v´ertice s? SPATH Datos: G un grafo NO DIRIGIDO, r, s, dos v´ertices de G, k ∈ IN con k ≤ n. Salida: ¿Existe un camino simple de G (es decir, sin v´ertices repetidos) de longitud ≤ k que empiece en el v´ertice r y acabe en el v´ertice s? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es el n´ umero de v´ertices escrito en binario, v ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, y x, y, z ∈ {0, 1}∗ son r y s y k en binario, entonces la codificaci´on de la entrada G, r, s, k es la palabra u, v, x, y, z.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
143
a. Demostrar que MPATH es NP-completo. Pista para a): comparar con HAM. b. Demostrar que SPATH ∈ P. Pista para b): la existencia de un camino cualquiera de longitud ≤ k de r a s implica la existencia de un camino SIMPLE de longitud ≤ k de r a s. 62. Sea MULTI-MOCHILA el siguiente problema. Demostrar que es NP-completo. Datos: n, M ∈ IN; U1,1 , . . . , U1,M , U2,1 , . . . , Un,M un total de n·M n´ umeros naturales; C1 , . . . , CM ∈ IN. Salida: ¿Existe un conjunto de objetos A ⊆ {1, . . . , n} que cumpla para todo j desde 1 hasta M Si j es impar: Si j es par:
Ui,j ≤ Cj i∈A Ui,j ≥ Cj ?
P
i∈A
P
Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los n · M + M + 2 n´ umeros naturales que componen una entrada se escriben en binario y se separan por comas. 63. Sea 7-PARTICION el siguiente problema. Demostrar que es NPcompleto. Datos: n ∈ IN el n´ umero de objetos; p1 , p2 , . . . , pn ∈ IN, los pesos de los objetos. Salida: ¿Existen siete conjuntos disjuntos de objetos A1 , . . . , A7 que cumplan para todo k desde 1 hasta 7: X i∈Ak
P
pi =
1≤i≤n
7
pi
?
Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, todos los n´ umeros naturales escritos en binario y separados por comas.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
144
64. Sea BOTTLENECK TRAVELING SALESMAN el siguiente problema. Demostrar que es NP-completo. Datos: n, d(1, 1), d(1, 2), . . . , d(n, n), B n´ umeros naturales. Representan n ciudades y d(i, j) es la distancia de la ciudad i a la ciudad j (tales que d(i, j) = d(j, i) y d(i, i) = 0 para todo i, j). Salida: ¿Existe un camino simple C = (c1 , . . . , cn ) (es decir, que pase por todas las ciudades una sola vez) y que cumpla que para todos los i desde 1 hasta n − 1 d(ci , ci+1 ) ≤ B ? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, todos los n´ umeros naturales escritos en binario y separados por comas. Pista: Relacionarlo con el problema HAM (caminos hamiltonianos sobre grafos no dirigidos). S´olo algunas de las conexiones entre ciudades son “´ utiles”. 65. Sea HAMILTONIAN PATH BETWEEN TWO VERTICES el siguiente problema. Demostrar que es NP-completo. Datos: G un grafo NO DIRIGIDO de v´ertices V = {1, . . . , n} y aristas A = {a1 , . . . , ak }; r, s ∈ V , dos v´ertices de G. Salida: ¿Existe un camino hamiltoniano de G (es decir, sin v´ertices repetidos y que pase por todos los v´ertices) que empiece en el v´ertice r y acabe en el v´ertice s? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es n escrito en binario, v ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, y x, y ∈ {0, 1}∗ son r y s en binario, entonces la codificaci´on de la entrada G, r, s es la palabra u, v, x, y. Pista: Relacionarlo con el problema HAM (caminos hamiltonianos sobre grafos no dirigidos). La reducci´on utilizada a˜ nade 2 v´ertices nuevos a cada grafo que son principio y final de cualquier camino hamiltoniano.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
145
66. Sea X el problema que se enuncia a continuaci´on. Demostrar que X es NP-completo. Datos: n, p1 , p2 , . . . , pn , P, k ∈ IN Salida: ¿Existen A1 , . . . , Ak subconjuntos que cumplan: A1 ∪ . . . ∪ Ak = {1, . . . , n} k X
3
X
s=1
pr ≤ P ?
r∈As
Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, cada n´ umero natural escrito en binario y separados por comas. Pista: Relacionarlo con el problema PARTICION. 67. Sea MAYOR-SUBGRAFO el siguiente problema. Demostrar que es NP-completo. Datos: G grafo NO DIRIGIDO de v´ertices V = {1, . . . , n} y aristas A, G2 grafo no dirigido de v´ertices V2 = {1, . . . , r} (r ≤ n) y aristas A2 , k ∈ IN (k ≤ n2 ). Salida: ¿Existe un subconjunto X de k aristas de G2 (es decir, X ⊆ A2 , con #X = k) tal que H = (V2 , X) es un subgrafo de G? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, v ∈ {0, 1}∗ es la matriz de adyacencia de G2 escrita por filas, y w ∈ {0, 1}∗ es k en binario entonces la codificaci´on de la entrada G, G2 , k es la palabra u, v, w. Pista: Relacionarlo con el problema CLIQUE. Nota: H = (V2 , X) es un subgrafo de G = (V, A) si existe V 0 ⊆ V y f : V2 → V 0 biyectiva tal que para cada u, v ∈ V2 , {u, v} ∈ X si y s´olo si {f (u), f (v)} ∈ A.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
146
68. Sea LONGEST-PATH el siguiente problema. Demostrar que es NPcompleto. Datos: G un grafo DIRIGIDO de v´ertices V = {1, . . . , n} y aristas A⊆V ×V k ∈ IN, tal que k ≤ n. Salida: ¿Existe un camino simple (es decir, sin v´ertices repetidos) de G que empiece en el v´ertice 1 y tenga longitud k? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, , , ; }. Si v ∈ {0, 1, , , ; }∗ es la codificaci´on mediante LISTAS DE ADYACENCIA de G, y w ∈ {0, 1}∗ es k en binario entonces la codificaci´on de la entrada G, k es la palabra v, w 69.
a. Sea FSAT el mismo problema que SAT pero restringido a f´ormulas en las que cada variable aparece como m´aximo 2 veces. Demostrar que FSAT est´a en P. Pista: Podemos transformas las entradas en f´ormulas equivalentes en que cada variable aparezca exactamente dos veces, una afirmada y otra negada, y en cl´ausulas distintas, y adem´as todas las cl´ausulas tengan al menos dos literales (hay que justificarlo). Una vez hecho eso, hay un m´etodo para ir asignando valores a las variables (¿cu´al?). b. Sea 3-PARTICION el siguiente problema. Demostrar que es NP-dif´ıcil. Datos: n ∈ IN el n´ umero de objetos; p1 , p2 , . . . , pn ∈ IN, los pesos de los objetos. Salida: ¿Existe un conjunto de objetos A ⊆ {1, . . . , n} que cumpla X X i∈A
pi =
1≤i≤n
3
pi ?
Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los n+1 numeros naturales que componen una entrada n, p1 , . . . , pn se escriben en binario y se separan por comas.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
147
70. Sea X el problema que se enuncia a continuaci´on. Demostrar que X es NP-completo. Datos: n, p1 , p2 , . . . , pn , P, k ∈ IN Salida: ¿Existen A1 , . . . , Ak subconjuntos de {1, . . . , n} que cumplan: A1 ∪ . . . ∪ Ak = {1, . . . , n} k X
2
X
s=1
pr ≤ P ?
r∈As
Codificaci´on de las entradas: sobre el alfabeto {0, 1, ,}, cada n´ umero natural escrito en binario y separados por comas. Ayuda Relacionarlo con el problema PARTICION. 71. Sea 2-SAT el problema que se enuncia a continuaci´on. Demostrar que 2-SAT est´a en P. Datos: X, F , donde X es un conjunto de variables, y F una f´ormula booleana en forma normal conjuntiva (es decir, escrita como conjunci´on de cl´ausulas), y cada cl´ausula tiene exactamente 2 literales. Salida: ¿Existe una asignaci´on de X que hace cierta F ? Codificaci´on de las entradas: como las entradas de SAT. Ayuda Para hacer cierta una f´ormula F : a. Si una variable s´olo aparece afirmada (o s´olo negada) en F es conveniente asignarle un valor (¿cu´al?). b. Si una cl´ausula es de la forma y ∨ ¬y es siempre cierta. Si una cl´ausula es de la forma y ∨ y (´o de la forma ¬y ∨ ¬y), hay que asignar a y un valor (¿cu´al?). c. Si tenemos varias cl´ausuals de la forma: (l1 ∨ ¬l2 ), (l2 ∨ ¬l3 ), . . . , (lm−1 ∨ ¬lm ), (lm ∨ ¬l1 )
CAP´ITULO 12. EJERCICIOS DE EXAMEN
148
con l1 , . . . , lm literales distintos (y con variables distintas), entonces para hacerlas todas ciertas hay que dar el mismo valor a todos los l1 , . . . , lm , luego podemos sustituir l2 , . . . , lm por l1 en toda F . d. Si tenemos varias cl´ausuals de la forma: (l1 ∨ ¬l2 ), (l2 ∨ ¬l3 ), . . . , (lm−1 ∨ ¬lm ), (lm ∨ l1 ) con l1 , . . . , lm literales distintos (y con variables distintas), entonces para hacerlas todas ciertas hay que dar un valor a l1 (¿cu´al?). 72. Para cada uno de los problemas que se enuncian a continuaci´on, responder a las siguientes preguntas: ¿Est´a en P? ¿Est´a en NP? ¿Est´a en EXP? Las respuestas posibles son tres: S´ı, No y No se sabe, porque es NP-completo. Se puede utilizar que el problema cl´asico dCLIQUE es NP-completo (as´ı como cualquiera de los otros problemas NP-completos vistos en clase). a. Datos: G un grafo dirigido de v´ertices V = {1, . . . , n} y aristas A ⊆ V × V ; k ∈ IN, tal que k ≤ n; r ∈ IN, tal que r ≤ n. Salida: ¿Existen V1 , . . . , Vr subconjuntos de V que cumplan 1), 2) y 3)? 1) para todo i 6= j (1 ≤ i, j ≤ r), Vi ∩ Vj = ∅, 2) V1 ∪ . . . ∪ Vr = V , 3) para todo i desde 1 hasta r, el subgrafo de G formado por los v´ertices Vi tiene un subgrafo completo de al menos k v´ertices. Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es n escrito en binario, v ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, w ∈ {0, 1}∗ es k en binario, y z ∈ {0, 1}∗ es r en binario entonces la codificaci´on de la entrada G, k, r es la palabra u, v, w, z.
CAP´ITULO 12. EJERCICIOS DE EXAMEN
149
b. Datos: G un grafo dirigido de v´ertices V = {1, . . . , n} y aristas A ⊆ V × V ; a, b ∈ V ; k ∈ IN, tal que k ≤ n. Salida: ¿Existe un camino del v´ertice a al v´ertice b de longitud menor o igual que k? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es n escrito en binario, v ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, y x, y, w ∈ {0, 1}∗ son a, b y k en binario, entonces la codificaci´on de la entrada G, a, b, k es la palabra u, v, x, y, w. 73. Para el problema que se enuncia a continuaci´on, responder a las siguientes preguntas: ¿Est´a en P? ¿Est´a en NP? ¿Est´a en EXP? Las respuestas posibles son tres: S´ı, No y No se sabe, porque es NP-completo. Datos: G un grafo dirigido de v´ertices V = {1, . . . , n} y aristas A⊆V ×V; k ∈ IN, tal que k ≤ n. Salida: ¿Existe un camino de longitud mayor o igual que k que no pase dos veces por un mismo v´ertice? Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es n escrito en binario, v ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, y w ∈ {0, 1}∗ es k en binario, entonces la codificaci´on de la entrada G, k es la palabra u, v, w. Pista para 3.: comparar con el problema cl´asico de existencia de un circuito hamiltoniano (dHAM). 74. Para cada uno de los siguientes problemas, responder a las tres preguntas siguientes: ¿Est´a en P? ¿Est´a en NP? ¿Est´a en EXP? Las respuestas posibles son tres: S´ı, No y No se sabe, porque es NP-completo. a. (Este problema es una variaci´on del cl´asico PARTICION.) Datos: n ∈ IN el n´ umero de objetos;
CAP´ITULO 12. EJERCICIOS DE EXAMEN
150
p1 , p2 , . . . , pn ∈ IN, los pesos de los objetos. Salida: ¿Existen dos conjuntos de objetos A1 , A2 que cumplan las tres condiciones siguientes?: 1) A1 ∪ A2 = {1, . . . , n}. 2) Para todo i, j entre 1 y n, si i ∈ A1 y j ∈ A2 , entonces i< j. X X 3) pi = pi . i∈A1
i∈A2
Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, los n+1 numeros naturales que componen una entrada n, p1 , . . . , pn se escriben en binario y se separan por comas. b. Datos: G = (V, A) un grafo dirigido con V = {1, . . . , n} y aristas A ⊆ V × V ; k ∈ IN, tal que k ≤ n; r ∈ IN, tal que r ≤ n. Salida: ¿Existen V1 , . . . , Vr subconjuntos de V que cumplan 1) y 2)? 1) V1 ∪ . . . ∪ Vr = V , 2) para todo i desde 1 hasta r, el subgrafo de G formado por los v´ertices Vi tiene un cubrimiento de k v´ertices como m´aximo. Codificaci´on de las entradas: sobre el alfabeto Σ = {0, 1, ,}, si u ∈ {0, 1}∗ es n escrito en binario, v ∈ {0, 1}∗ es la matriz de adyacencia de G escrita por filas, w ∈ {0, 1}∗ es k en binario, y z ∈ {0, 1}∗ es r en binario entonces la codificaci´on de la entrada G, k, r es la palabra u, v, w, z. Pista para 3. b): comparar con el problema Vertex Cover.
´Indice general 0. Presentaci´ on
1
1. Preliminares. Numerabilidad y ... 1.1. Preliminares . . . . . . . . . . . . . . 1.1.1. Notaci´on l´ogica: proposiciones 1.1.2. Notaci´on l´ogica: predicados . 1.1.3. Demostraciones . . . . . . . . 1.1.4. Notaci´on de conjuntos . . . . 1.1.5. Lenguajes . . . . . . . . . . . 1.1.6. Funciones . . . . . . . . . . . 1.2. Numerabilidad . . . . . . . . . . . . 1.3. Diagonalizaci´on . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
4 4 4 5 7 7 8 9 11 16
2. Problemas y datos. Un modelo ... 2.1. Problemas, lenguajes y funciones . . . . . . . . . . 2.1.1. Problemas decisionales y funcionales . . . . 2.1.2. Representaci´on de datos, tama˜ no . . . . . . 2.1.3. Lenguajes y funciones . . . . . . . . . . . . 2.2. La m´aquina de registros ´o Random Access Machine 2.2.1. Codificaci´on de programas . . . . . . . . . . 2.2.2. Notaci´on para programas . . . . . . . . . . . 2.2.3. M´as sobre programas . . . . . . . . . . . . . 2.3. Definici´on de funci´on calculable . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
21 21 21 22 24 25 27 27 28 30
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
3. Problemas decidibles y semidecidibles 32 3.1. Definici´on y primeros ejemplos de conjunto decidible . . 32 3.2. El problema de parada . . . . . . . . . . . . . . . . . . . 34 151
´INDICE GENERAL
152
3.3. Definici´on y primeros ejemplos de conjunto semidecidible 3.4. Caracterizaciones . . . . . . . . . . . . . . . . . . . . . . 3.5. Propiedades elementales de los conjuntos decidibles y semidecidibles . . . . . . . . . . . . . . . . . . . . . . . . .
35 37 41
4. Reducciones. El teorema de Rice 49 4.1. Reducciones . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2. Propiedades elementales de las reducciones . . . . . . . . 51 4.3. Conjuntos de ´ındices, teorema de Rice . . . . . . . . . . 56 5. Otros problemas indecidibles
62
6. Otros modelos de c´ alculo: la tesis de ... 6.1. Las funciones recursivas de G¨odel y Kleene 6.2. Las m´aquinas de Turing . . . . . . . . . . 6.3. El λ-c´alculo de Church . . . . . . . . . . . 6.4. La tesis de Turing-Church . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
63 64 68 70 73
7. Complejidad y codificaci´ on 7.1. El problema del viajante . . . . . . 7.2. Complejidad en tiempo . . . . . . . 7.3. C´omo codificamos las entradas . . . 7.4. Transformaci´on de cotas de tiempo
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
75 75 77 77 80
. . . .
. . . .
. . . .
. . . .
8. Tiempo polin´ omico versus tiempo ... 82 8.1. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . 82 8.2. Problemas resolubles en la pr´actica . . . . . . . . . . . . 84 8.3. Tesis extendida de Turing-Church . . . . . . . . . . . . . 86 9. Estudio de algunos problemas ... 9.1. SAT . . . . . . . . . . . . . . . 9.2. MOCHILA . . . . . . . . . . . 9.3. CLIQUE . . . . . . . . . . . . . 9.4. La clase NP . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
90 90 94 96 98
10.Reducciones en tiempo polin´ omico 103 10.1. Definici´on . . . . . . . . . . . . . . . . . . . . . . . . . . 103 10.2. Primer ejemplo . . . . . . . . . . . . . . . . . . . . . . . 104
´INDICE GENERAL
153
10.3. Propiedades elementales . . . . . . . . . . . . . . . . . . 106 11.Los problemas NP-completos 11.1. El concepto de NP-completo . . . . . 11.2. Una reducci´on complicada . . . . . . 11.3. Algunos problemas NP-completos . . 11.3.1. El problema del Vertex Cover 11.3.2. El problema PARTICION . . 11.3.3. Siete NP-completos . . . . . .
. . . . . .
110 110 112 117 117 119 120
12.Ejercicios de examen 12.1. Teor´ıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Problemas de computabilidad . . . . . . . . . . . . . . . 12.3. Problemas de complejidad . . . . . . . . . . . . . . . . .
123 123 130 137
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .