Computabilidad de Los Programas
Computabilidad de Los Programas
Computabilidad, complejidad
computacional y verificacin
de programas
Ricardo Rosenfeld
Jernimo Irazbal
FACULTAD DE
INFORMTICA
2013
Rosenfeld, Ricardo
Computabilidad, complejidad computacional y verificacin de programas / Ricardo
Rosenfeld y Jernimo Irazbal ; con prlogo de Ricardo Rosenfeld. - 1a ed. La Plata : Universidad Nacional de La Plata, 2013.
E-Book.
ISBN 978-950-34-0970-1
1. Informtica. 2. Computacin. I. Irazbal, Jernimo II. Rosenfeld, Ricardo ,
prolog. III. Ttulo
CDD 005.3
Los autores
Ricardo Rosenfeld
Fac. de Informtica, UNLP
[email protected]
Jernimo Irazbal
Fac. de Informtica, UNLP
[email protected]
ndice general
Prlogo
Parte 1. Computabilidad
27
Clase 3. Indecidibilidad
41
54
79
96
101
104
117
132
154
178
197
204
207
227
238
253
265
297
Eplogo
304
ndice de definiciones
305
ndice de teoremas
305
ndice de ejemplos
306
ndice de ejercicios
308
Prlogo
Computabilidad, Complejidad Computacional y Verificacin de Programas contiene las
quince clases que conforman la asignatura Teora de la Computacin y Verificacin de
Programas, una introduccin a la teora de la computabilidad y complejidad
computacional de problemas y la teora de correctitud de programas, que dicto en la
Licenciatura en Informtica de la Facultad de Informtica de la Universidad Nacional de
La Plata desde hace varios aos. El libro es una suerte de segunda edicin reducida de
Teora de la Computacin y Verificacin de Programas, de los mismos autores, editado
en 2010 por la EDULP conjuntamente con McGraw-Hill, el cual incluye adems de las
clases de la asignatura bsica, las de Teora de la Computacin y Verificacin de
Programas Avanzada, asignatura que tambin dicto en la misma carrera desde hace
tiempo. El nuevo trabajo excluye principalmente la complejidad espacial, la verificacin
de los programas no determinsticos y concurrentes, el empleo de la lgica temporal
para verificar los programas reactivos, y la semntica denotacional de los lenguajes de
programacin, tpicos tratados en la obra anterior. De todos modos, en la presente
publicacin hay secciones, breves, dedicadas a la jerarqua espacial, la terminacin con
hiptesis de fairnes de los programas no determinsticos, y la verificacin de los
programas concurrentes con memoria compartida, desarrolladas de la manera en que
dichos temas son referenciados en la asignatura bsica.
A slo tres aos de la publicacin anterior, este libro se justifica por varias razones:
Por lo dems, las caractersticas de este trabajo son muy similares a las del trabajo
anterior. Se asume que los lectores ya han adquirido cierta madurez matemtica, y
slidos conocimientos en algortmica, estructuras de datos, y lenguajes y paradigmas de
programacin. Las quince clases estn dirigidas principalmente a los estudiantes de los
ltimos aos de las carreras de computacin, a los graduados que desean introducirse en
la teora de la computacin y la teora de correctitud de programas, y naturalmente a los
docentes que dictan o quieran dictar contenidos afines. En particular, a estos ltimos les
recomiendo no obviar ningn tema cuando desarrollen esta asignatura; si el material
completo resulta excesivo, podran prescindir de algunos ejemplos, priorizando las
necesidades de los estudiantes.
El libro se puede tomar como un viaje imaginario a lo largo del universo de problemas.
Se arranca en los confines de dicho universo y se viaja hacia su interior (algo as como
se muestra en la figura de la pgina siguiente). En un primer tramo se atraviesan las
fronteras de la computabilidad y la decidibilidad (primera parte del libro). En el tramo
siguiente, ya en medio de los problemas computables decidibles, se lleva a cabo una
exploracin sobre los mismos con dos objetivos, el anlisis de la complejidad temporal
(segunda parte del libro) y la verificacin de la correctitud de los algoritmos (o
programas) construidos para resolverlos (tercera parte del libro).
En el desarrollo de los temas se trata de combinar rigor matemtico con informalidad,
apuntando a introducir los conceptos bsicos de una manera precisa pero al mismo
tiempo didctica. El objetivo no es exponer un compendio de resultados y ejemplos,
sino plantear fundamentos de las reas estudiadas (cabe la comparacin con la
enseanza de las matemticas, parafraseando a un reconocido investigador: en lugar de
Computabilidad, Complejidad Computacional y Verificacin de Programas
proveer recetas para derivar e integrar funciones, este libro estara ms cerca de explicar
nociones bsicas del tipo continuidad y lmite de una funcin). En todos los casos se
pretende emplear los componentes ms intuitivos y difundidos en la literatura para
presentar los temas. As, por ejemplo, se utilizan las mquinas de Turing como modelo
de ejecucin de los algoritmos, el tiempo como recurso computacional para medir la
Ricardo Rosenfeld
La Plata, diciembre de 2012
Parte 1. Computabilidad
Las cinco clases de la primera parte del libro estn dedicadas a la computabilidad de los
problemas. Se define un modelo de ejecucin especfico, y se establece en trminos del
mismo la frontera de lo computable dentro del universo de los problemas. Se
consideran particularmente los problemas computables decidibles, que se resuelven
algortmicamente a partir de todo dato de entrada (no es el caso general).
En la Clase 1 se define el modelo de ejecucin, el ms difundido en la literatura: las
mquinas de Turing. Se presentan las tres visiones conocidas de las mquinas de
Turing, como calculadoras de funciones, reconocedoras de lenguajes y generadoras de
lenguajes. Como se tratan mayoritariamente los problemas de decisin (tienen por
solucin simplemente la respuesta s o la respuesta no), las mquinas de Turing que
reconocen lenguajes son las ms utilizadas, dado que se puede establecer fcilmente una
correspondencia entre las instancias positivas (negativas) de un problema de decisin y
las cadenas pertenecientes (no pertenecientes) a un lenguaje. Luego de la introduccin
de un modelo inicial de las mquinas de Turing se describen otros modelos
equivalentes, entre los que se destaca el de las mquinas de Turing con varias cintas y
slo dos estados finales (de aceptacin y rechazo), seleccionado como modelo estndar
para las definiciones, teoremas y ejemplos.
En la Clase 2 se describe la jerarqua de la computabilidad, es decir el mapa de las
distintas clases de lenguajes (o problemas de decisin) en el que se distribuye,
considerando la computabilidad, el universo de los lenguajes, generados a partir de un
alfabeto universal . Se presentan los lenguajes recursivamente numerables (clase RE),
asociados a los problemas computables (por mquinas de Turing), y los lenguajes
recursivos (clase R), asociados a los problemas decidibles dentro de los computables.
Como consecuencia, quedan establecidos formalmente los lmites de la computabilidad
y la decidibilidad. Se describen propiedades de los lenguajes recursivamente
numerables y recursivos, destacndose un teorema que caracteriza a la clase R como la
interseccin entre las clases RE y CO-RE, siendo esta ltima la que nuclea a los
lenguajes cuyos complementos con respecto a * estn en RE.
El tema central de la Clase 3 es la indecidibilidad. Se describe la mquina de Turing
universal, que en su forma habitual tiene al comienzo en su cinta de entrada el cdigo de
una mquina de Turing y un dato. De este modo se trabaja con un modelo de ejecucin
Ricardo Rosenfeld y Jernimo Irazbal
reconocedoras.
Vamos a trabajar con las tres visiones de mquina de Turing, calculadora, reconocedora
y generadora. Ya dijimos que en la gran mayora de los casos consideraremos la
mquina reconocedora. Ms an, salvo mencin en contrario, los problemas debern
Una cinta infinita en los dos extremos, dividida en celdas. Cada celda puede
almacenar un smbolo.
Q es el conjunto de estados de M.
q0 es el estado inicial de M.
Fin de Definicin
Los siguientes son dos ejemplos de MT, uno con la visin de mquina reconocedora y el
otro con la visin de mquina calculadora. Ms adelante consideraremos las MT
generadoras. Luego de los ejemplos trabajaremos en general solamente con la visin de
MT reconocedora.
Idea general.
Por cada smbolo a que lee, la MT M lo reemplaza por el smbolo y va a la derecha
hasta encontrar el primer smbolo b. Cuando lo detecta, lo reemplaza por el smbolo y
vuelve a la izquierda para repetir el proceso a partir del smbolo a que est
inmediatamente a la derecha de la a anterior. Si al final del proceso no quedan smbolos
por reemplazar, la MT M se detiene en un estado de F, porque significa que la entrada
tiene la forma anbn, con n 1. En caso contrario, M se detiene en un estado de (Q F).
Construccin de la MT M.
La MT M = (Q, , , , q0, F) es tal que:
Q = {qa, qb, qL, qH, qF}. El estado qa es el estado en que M busca una a. El estado
qb es el estado en que M busca una b. El estado qL es el estado en que M vuelve
a la izquierda para procesar la siguiente a. El estado qH es el estado en que M
detecta que no hay ms smbolos a. El estado qF es el estado final.
= {a, b}
= {a, b, , , B}
q0 = qa
F = {qF}
2. (qb, a) = (qb, a, R)
3. (qb, b) = (qL, , L)
4. (qb, ) = (qb, , R)
5. (qL, ) = (qL, , L)
6. (qL, a) = (qL, a, L)
7. (qL, ) = (qa, , R)
8. (qa, ) = (qH, , R)
9. (qH, ) = (qH, , R)
10
Prueba de L(M) = L.
a. Si w L, entonces w tiene la forma anbn, con n 1. Por cmo est definida la
funcin de transicin , claramente a partir de w la MT M acepta w, es decir que
w L(M).
b. Si w L, entonces M rechaza w, es decir que w L(M). Por ejemplo, si w = ,
M rechaza porque no est definido en el par (qa, B). Si w tiene un smbolo
distinto de a o de b, M rechaza porque dicho smbolo no est considerado en .
Si w empieza con b, M rechaza porque no est definido en el par (qa, b). Queda
como ejercicio completar la prueba.
Fin de Ejemplo
Ejemplo 1.2. Mquina de Turing calculadora
Se va a construir una MT M que calcula la resta m n, tal que m y n son dos nmeros
naturales representados en notacin unaria. Cuando m n, M devuelve la cadena vaca
. En la entrada, m y n aparecen separados por el dgito 0.
Idea general.
Dado w = 1m01n, con m 0 y n 0, la MT M itera de la siguiente manera. En cada paso
elimina el primer 1 del minuendo, y correspondientemente reemplaza el primer 1 del
sustraendo por un 0. Al final elimina todos los 0 (caso m > n), o bien elimina todos los
dgitos (caso m n).
Construccin de la MT M.
La MT M = (Q, , , , q0, F) es tal que:
Q = {q0, q1, q2, q3, q4, q5, q6}. El estado q0 es el estado de inicio de una iteracin.
El estado q1 es el estado en que M busca el primer 0 yendo a la derecha. El
estado q2 es el estado en que M encuentra el primer 0 yendo a la derecha. El
estado q3 es el estado en que M encuentra un 1 despus de un 0 yendo a la
derecha. El estado q4 es el estado en que M yendo a la derecha buscando un 1
despus de un 0 encuentra en cambio un blanco. El estado q5 es el estado en que
M, iniciando una iteracin, no encuentra como primer dgito un 1. El estado q6
es el estado final.
11
= {1, 0}
= {1, 0, B}
F = {q6}
2. (q1, 1) = (q1, 1, R)
3. (q1, 0) = (q2, 0, R)
4. (q2, 1) = (q3, 0, L)
5. (q2, 0) = (q2, 0, R)
6. (q3, 0) = (q3, 0, L)
7. (q3, 1) = (q3, 1, L)
8. (q3, B) = (q0, B, R)
9. (q2, B) = (q4, B, L)
Fin de Ejemplo
Existen distintos modelos de MT equivalentes al modelo descripto previamente. Dos
modelos de MT son equivalentes cuando para toda MT M1 de un modelo existe una MT
M2 equivalente del otro, es decir que L(M1) = L(M2). Es til valerse de distintos
modelos de MT, como se ir apreciando en el desarrollo de los temas. Presentamos a
continuacin algunos ejemplos, y probamos su equivalencia con el modelo inicial. Los
ejemplos sirven para la ejercitacin en la construccin de MT.
El primer modelo de MT que vamos a presentar se adoptar posteriormente como
estndar.
12
a
qa
qb, , R
qb
qb, a, R
qL
qL, a, L
qH, , R
qL, , L
qb, , R
qa, , R
qH
qL, , L
qH, , R
qA, B, S
13
Veamos ahora que para toda MT M1 del modelo con estados qA y qR existe una MT M2
equivalente del modelo inicial.
Idea general.
La funcin de transicin de M2 es la misma que la de M1. Lo nico que cambia es que al
conjunto de estados de M2 se le agregan qA y qR, siendo qA el nico estado final de F.
Construccin de la MT M2.
Sea M1 = (Q1, , , , q0, qA, qR). Se hace M2 = (Q2, , , , q0, F), tal que Q2 = Q1
{qA, qR} y F = {qA}.
Prueba de L(M1) = L(M2).
a. Sea w L(M1). Entonces M1 a partir de w se detiene en su estado qA. Entonces
M2 a partir de w se detiene en su estado qA, perteneciente a F. Entonces w
L(M2).
b. Sea w L(M1). Entonces M1 a partir de w se detiene en su estado qR o no se
detiene. Entonces M2 a partir de w se detiene en su estado qR, que no pertenece a
F, o no se detiene, respectivamente. Entonces w L(M2).
Fin de Ejemplo
El siguiente ejemplo se utilizar en la Clase 5, cuando se presenten las mquinas RAM,
las cuales constituyen un modelo de ejecucin mucho ms cercano a las computadoras
reales.
14
Idea general.
Supongamos que M1 y M2 son MT del modelo inicial, con un conjunto de estados
finales. Sean M1 = (Q1, 1, 1, 1, q1, F1) y M2 = (Q2, 2, 2, 2, q2, F2). Primeramente se
debe introducir la nocin de track (pista). En el caso ms general, se puede asumir que
toda celda de una MT est dividida en T tracks, con T 1 (hasta el momento slo se ha
trabajado con celdas de un track). De este modo, el contenido de una celda puede
representarse como una T-tupla (x1, , xT), y las 5-tuplas de la funcin de transicin
tienen la forma (qi, (x1, , xT), qi, (x1, , xT), d), con d {L, R, S}. La MT M2 tiene
2 tracks. En el track superior simula los movimientos de M1 a la derecha de la celda
inicial, incluyndola, y en el track inferior los movimientos de M1 a la izquierda de la
misma. La entrada de M2 est al comienzo del track superior. Al empezar, M2 marca su
primera sub-celda inferior con el smbolo especial #. Los smbolos de 2 tienen la forma
(x, y). Todo smbolo x est en 1, y todo smbolo y est en 1 o es #. El estado corriente
de M2 indica si se est considerando el track superior o inferior. Mientras M1 est a la
derecha de su posicin inicial, incluyndola, M2 trabaja sobre el track superior,
movindose en el sentido de M1. Y mientras M1 est a la izquierda de su posicin
inicial, M2 trabaja sobre el track inferior, movindose en el sentido opuesto al de M1.
Los estados de Q2 son q2 (estado inicial) ms los distintos estados qU y qD tales que los
estados q estn en Q1 (con U por up o arriba y D por down o abajo se indica si se est
procesando el track superior o inferior, respectivamente). En particular, los estados de
F2 son los estados qU y qD tales que los estados q estn en F1.
Construccin de la MT M2.
Ya se han descripto los estados y smbolos de M2. La funcin de transicin 2 se define
de la siguiente manera. Para el inicio de M2, en que hay que escribir la marca inicial #, y
establecer si se procesa el track superior o inferior, se define:
1. Si 1(q1, x) = (q, y, R), entonces 2(q2, (x, B)) = (qU, (y, #), R).
Si 1(q1, x) = (q, y, S), entonces 2(q2, (x, B)) = (qU, (y, #), S).
Ricardo Rosenfeld y Jernimo Irazbal
15
Si 1(q1, x) = (q, y, L), entonces 2(q2, (x, B)) = (qD, (y, #), R).
Para el procesamiento de M2 cuando el smbolo corriente no tiene la marca #, se define:
2. Para todo (x, y) de 2, siendo el smbolo y distinto de #:
Si 1(q, x) = (p, z, R), entonces 2(qU, (x, y)) = (pU, (z, y), R).
Si 1(q, x) = (p, z, L), entonces 2(qU, (x, y)) = (pU, (z, y), L).
Si 1(q, x) = (p, z, S), entonces 2(qU, (x, y)) = (pU, (z, y), S).
Si 1(q, y) = (p, z, R), entonces 2(qD, (x, y)) = (pD, (x, z), L).
Si 1(q, y) = (p, z, L), entonces 2(qD, (x, y)) = (pD, (x, z), R).
Si 1(q, y) = (p, z, S), entonces 2(qD, (x, y)) = (pD, (x, z), S).
Finalmente, para el procesamiento de M2 cuando el smbolo corriente tiene la marca #,
se define:
3. Si 1(q, x) = (p, y, R), entonces 2(qU, (x, #)) = 2(qD, (x, #)) = (pU, (y, #), R).
Si 1(q, x) = (p, y, S), entonces 2(qU, (x, #)) = 2(qD, (x, #)) = (pU, (y, #), S).
Si 1(q, x) = (p, y, L), entonces 2(qU, (x, #)) = 2(qD, (x, #)) = (pD, (y, #), R).
Queda como ejercicio probar que L(M1) = L(M2).
Fin de Ejemplo
En el siguiente ejemplo se demuestra que las MT no ganan poder computacional cuando
utilizan ms de una cinta. Utilizaremos generalmente este modelo, con estados finales
qA y qR, porque facilita la presentacin de los ejemplos y las demostraciones de los
teoremas.
16
Idea general.
La MT M copia la entrada desde la cinta 1 a la cinta 2. Apunta al primer smbolo de la
cadena de la cinta 1 y al ltimo smbolo de la cadena de la cinta 2. E itera de la siguiente
17
manera: compara los smbolos apuntados; si son distintos rechaza; si son blancos
acepta; y en otro caso se mueve a la derecha en la cinta 1, a la izquierda en la cinta 2, y
vuelve a la comparacin de smbolos.
Construccin de la MT M.
Se define M = (Q, , , , q0, qA, qR), con:
= {a, b}
= {a, b, B}
q0 = q0
La funcin de transicin es
a, a
a, b
q0
q1
q2
a, B
b, a
b, b
b, B
B, a
B, b
B, B
q0,
q0,
q1,
a, R,
b, R,
B, L,
a, R
b, R
B, L
q1,
q1,
q 1,
q1,
q2,
q2,
q2,
a, L,
a, L,
b, L,
b, L,
B, R,
B, R,
B, S,
a, S
b, S
a, S
b, S
a, S
b, S
B, S
q2,
qR,
q R,
q2,
qA,
a, R,
a, S,
b, S,
b, R,
B, S,
a, L
b, S
a, S
b, L
B, S
18
Idea general.
La cinta de M2 tiene 2K tracks. Los primeros dos tracks representan la cinta 1 de M1,
los siguientes dos tracks representan la cinta 2, y as sucesivamente. Dado un par de
tracks que representan una cinta de M1, el primer track almacena en sus distintas subceldas el contenido de las celdas correspondientes de M1, mientras que en el segundo
track hay blancos en todas las sub-celdas salvo en una que lleva la marca C, para indicar
que la celda representada est apuntada por un cabezal. La tabla siguiente ejemplifica la
representacin descripta, para el caso de 3 cintas y por lo tanto 6 tracks:
i+1
i+2
i+3
i+4
i+5
x1
x4
x7
x10
x2
x3
x5
x6
x8
x9
C
x11
x12
19
Queda como ejercicio construir M2 y probar que L(M1) = L(M2). Notar que como luego
de h pasos de la MT M1 sus cabezales pueden distanciarse a lo sumo 2h celdas, entonces
a la MT M2 le va a llevar simular h pasos de M1 a lo sumo unos (4 + 8 + 12 + + 4h) =
4(1 + 2 + 3 + + h) = O(h2) pasos. Esto significa que si bien la cantidad de cintas no
influye en el poder computacional de una MT, s impacta en su tiempo de trabajo. El
tiempo de retardo cuando se reduce de K cintas a una cinta, independientemente del
valor de K, es del orden cuadrtico en el peor caso. Esta relacin la utilizaremos cuando
tratemos la complejidad computacional temporal, en la segunda parte del libro.
Fin de Ejemplo
En el ejemplo anterior se muestra cmo un estado puede almacenar informacin. A
continuacin se ejemplifica cmo una MT puede simular los estados de otra mquina
por medio de los smbolos de su alfabeto.
Idea general.
Supongamos que M1 tiene una cinta y adems de qA y qR, los estados q0, , qm. Con
una MT M2 con dos cintas y un solo estado q, adems de qA y qR, se puede simular M1.
M2 simula M1 en la cinta 1, y en la cinta 2 representa con smbolos nuevos x0, , xm,
Computabilidad, Complejidad Computacional y Verificacin de Programas
20
Construccin de la MT M2.
Sea M1 = (Q1, , 1, 1, q0, qA, qR) con una cinta y estados q0, , qm. Se hace M2 =
({q}, , 1 {x0, , xm}, 2, q, qA, qR) con dos cintas. La funcin de transicin 2 se
define de la siguiente manera:
1. x : 2(q, (x, B)) = (q, (x, S), (x0, S)).
2. Si 1(qi , x) = (qk, x, d), entonces 2(q, (x, xi)) = (q, (x, d), (xk, S)), con d {L,
R, S}, qk distinto de qA y qR .
3. Si 1(qi, x) = (qA, x, d), entonces 2(q, (x, xi)) = (qA, (x, d), (xi , S)), con d {L,
R, S}.
4. Lo mismo que 3 pero considerando qR en lugar de qA.
Queda como ejercicio probar que L(M1) = L(M2).
Fin de Ejemplo
El siguiente es un ltimo ejemplo de modelo equivalente de MT, que se utilizar
fundamentalmente en la segunda parte del libro. En l se demuestra que las MT
tampoco ganan poder computacional cuando son no determinsticas, es decir cuando a
partir de un par (q, x) pueden tener varias transiciones. En la clase que viene se muestra
un ejemplo de uso de este modelo.
21
22
Se puede construir una MTD M2 equivalente a M1 con tres cintas. La primera cinta tiene
la entrada. En la segunda cinta M2 genera sistemticamente los discriminantes, de
menor a mayor longitud y en orden numrico creciente considerando la misma longitud.
Por ejemplo, los primeros discriminantes son: (1), , (K), (1, 1), , (1, K), , (K, 1),
, (K, K), (1, 1, 1), , (1, 1, K), Este orden se denomina orden lexical cannico, o
simplemente orden cannico, y ser utilizado frecuentemente. Por ltimo, en la tercera
cinta M2 lleva a cabo la simulacin de M1.
Por cada discriminante generado en la cinta 2, M2 copia la entrada en la cinta 3 y simula
M1 teniendo en cuenta el discriminante, seleccionando paso a paso las opciones
representadas de la relacin de M1. Si existe una alternativa no vlida en el
discriminante, M2 genera el siguiente segn el orden cannico. Si M1 acepta, entonces
M2 acepta (M2 solamente acepta o no se detiene).
La simulacin efectuada por la MTD M2 consiste en recorrer a lo ancho, empleando la
tcnica de breadth first search, el rbol de computaciones asociado a la MTN M1, en el
sentido de que primero simula un paso de todas las computaciones de M 1, despus dos,
despus tres, etc. Naturalmente no sirve recorrer el rbol de computaciones a lo largo, es
decir rama por rama, empleando la tcnica de depth first search, porque al simular una
rama infinita de M1 antes que una de aceptacin, M2 nunca podr ejecutar esta ltima.
Construccin de la MTD M2.
La parte ms compleja de la construccin consiste en transformar la relacin de
transicin en una funcin de transicin . Bsicamente, si por ejemplo (q, x) = {(q1,
x1, d1), (q2, x2, d2)}, entonces tendra transiciones del tipo (q, (y, 1, x)) = (q1, (y, S),
(1, R), (x1, d1)) y (q, (y, 2, x)) = (q2, (y, S), (2, R), (x2, d2)). La construccin de M2
queda como ejercicio.
23
Fin de Ejemplo
Ejercicios de la Clase 1
1. Completar la prueba del Ejemplo 1.1.
2. Completar la prueba del Ejemplo 1.2.
3. Construir una MT distinta a la del Ejemplo 1.2 para restar dos nmeros naturales,
que consista en eliminar primero el primer uno del minuendo y el ltimo uno del
sustraendo, luego el segundo uno del minuendo y el anteltimo uno del sustraendo,
y as sucesivamente.
4. Construir una MT que reconozca L = {an bn cn | n 0} de la manera ms eficiente
posible con respecto al nmero de pasos.
5. Construir una MT que reconozca el lenguaje de las cadenas de unos y ceros con
igual cantidad de ambos smbolos.
6. Construir una MT M que reconozca:
i.
L = {x#y#z | z = x + y}.
ii.
L = {x#y | y = 2x}.
iii.
L = {x#y | y = x!}.
24
13. Probar que dada una MTN, existe otra MTN equivalente cuya relacin de transicin
tiene grado dos.
14. Sea USAT el lenguaje de las frmulas booleanas con exactamente una asignacin de
valores de verdad que las satisface. La sintaxis precisa de las frmulas booleanas se
define en la segunda parte del libro; por lo pronto, asumir que poseen variables y
operadores lgicos como , y . Por ejemplo, (x1 x4) x2 es una frmula
booleana, y la asignacin con las tres variables verdaderas satisface la frmula. Se
pide determinar si la siguiente MTN reconoce USAT:
1. Si la entrada no es una frmula booleana correcta sintcticamente, rechaza.
2. Genera no determinsticamente una asignacin de valores de verdad A, y si A no
satisface la frmula, rechaza.
3. Genera no determinsticamente una asignacin de valores de verdad A A. Si
A no satisface la frmula, acepta, y si A la satisface, rechaza.
15. Probar que todo modelo de MT presentado a continuacin es equivalente a alguno
de los que hemos descripto en la Clase 1:
i.
No tienen el movimiento S.
ii.
iii.
iv.
v.
vi.
vii.
viii.
25
26
27
Fin de Definicin
Se cumple por definicin que R RE . Probaremos entre esta clase y la que viene
que R RE , es decir que no todos los problemas computables son decidibles, y que
no todos los problemas son computables (las fronteras de R y RE determinan los lmites
de la decidibilidad y la computabilidad, respectivamente). Esto se ilustra en la siguiente
figura, que presenta una primera versin de la jerarqua de la computabilidad:
28
Idea general.
Dado un lenguaje recursivo L, sea M una MT que lo acepta y se detiene siempre, es
decir a partir de cualquier entrada. Se va a construir una MT MC que acepta LC y se
detiene siempre, de la siguiente manera: dada una entrada w, si M se detiene en q A,
entonces MC se detiene en qR, y viceversa. La figura siguiente ilustra esta idea:
Construccin de la MT MC.
Si M = (Q, , , , q0, qA, qR), entonces MC = (Q, , , , q0, qA, qR), con y
idnticas salvo en la aceptacin y rechazo. Para todo estado q de Q, todo par de
smbolos xi y xk de , y todo movimiento d del conjunto {L, R, S}, se define:
1. Si (q, xi) = (qA, xk, d), entonces (q, xi) = (qR, xk, d)
2. Si (q, xi) = (qR, xk, d), entonces (q, xi) = (qA, xk, d)
Prueba de que MC se detiene siempre.
a. w LC w L con entrada w, M se detiene en qR con entrada w, MC se
detiene en qA.
b. w LC w L con entrada w, M se detiene en qA con entrada w, MC se
detiene en qR.
Prueba de L(MC) = LC.
w L(MC) con entrada w, MC se detiene en qA con entrada w, M se detiene en qR
w L w LC.
29
Idea general.
Sean M1 una MT que acepta L1 y se detiene siempre, y M2 una MT que acepta L2 y se
detiene siempre. Se va a construir una MT M que acepta L1 L2 y se detiene siempre,
con las siguientes caractersticas. M simula primero M1 y luego M2. Dada una entrada
w, si M1 se detiene en su estado qR, entonces directamente M se detiene en su estado qR.
En cambio, si M1 se detiene en su estado qA, entonces con la misma entrada w, la MT M
simula M2, y se detiene en su estado qA (respectivamente qR) si M2 se detiene en su
estado qA (respectivamente qR). La figura siguiente ilustra esta idea:
Construccin de la MT M.
M tiene dos cintas. Dada una entrada w en la cinta 1, M hace:
1.
Copia w en la cinta 2.
30
Idea general.
Sean M1 una MT que acepta L1 y se detiene siempre, y M2 una MT que acepta L2 y se
detiene siempre. Se va a construir una MT M que acepta L1 L2 y se detiene siempre,
con las siguientes caractersticas. Dada una entrada w, con |w| = n, M simula M 1 a partir
de los primeros 0 smbolos de w, y M2 a partir de los ltimos n smbolos de w, y si en
ambos casos hay aceptacin, entonces M acepta w. En caso contrario, M hace lo mismo
pero ahora con el primer smbolo de w y los ltimos n 1 smbolos de w. Mientras no
se detenga por aceptacin, M repite el proceso con 2 y n 2 smbolos de w, 3 y n 3
smbolos, y as siguiendo hasta llegar a los n y 0 smbolos, en cuyo caso M rechaza w.
Construccin de la MT M.
M tiene cinco cintas. A partir de una entrada w en su cinta 1, tal que |w| = n, hace:
Queda como ejercicio probar que M se detiene siempre y que L(M) = L1 L2.
Fin de Teorema
31
Idea general.
Sean M1 una MT que acepta L1 y M2 una MT que acepta L2 (ahora slo se puede
asegurar que estas MT se detienen en los casos de aceptacin). Se va a construir una
MT M que acepta L1 L2. No sirve que la MT M simule primero M1 y luego M2,
porque de esta manera M no acepta las cadenas de M2 a partir de las que M1 no se
detiene. El mismo problema ocurre simulando primero M2 y despus M1. La solucin es
otra: se simulan en paralelo las MT M1 y M2, y se acepta si alguna de las dos MT
acepta. La figura siguiente ilustra esta idea:
Construccin de la MT M.
Sea la siguiente MT M con cuatro cintas. Dada una entrada w en la cinta 1, M hace:
32
Idea general.
Tal como se hizo con los lenguajes recursivos, se va a construir una MT M que
reconozca L1 L2 simulando M1 y M2 (las MT que reconocen L1 y L2, respectivamente),
Ricardo Rosenfeld y Jernimo Irazbal
33
Fin de Teorema
En lo que sigue de esta clase hasta el final, empezamos a justificar formalmente la
estructura de la jerarqua de la computabilidad presentada. En la clase que viene
34
LC RE}.
Idea general.
Sean M y MC dos MT que aceptan los lenguajes L y LC, respectivamente.
Se va a construir una MT M1 que se detiene siempre y acepta L, de la siguiente manera.
M1 simula en paralelo las MT M y MC.
Si M se detiene en qA, entonces M1 se detiene en su estado qA.
Y si MC se detiene en qA, entonces M1 se detiene en su estado qR.
La figura siguiente ilustra esta idea:
35
Se cumple que M1 se detiene siempre porque para toda entrada w, vale que w L o w
LC, y por lo tanto M o MC aceptan w. Queda como ejercicio la construccin de M1 y
la prueba de que L(M1) = L.
Fin de Teorema
En la ltima figura que ilustra la jerarqua de la computabilidad, se distinguen cuatro
categoras de lenguajes. Enumeradas de acuerdo a su dificultad creciente, son:
1. R
2. RE R
3. CO-RE R
4.
(RE CO-RE)
(RE CO-RE).
Por el Teorema 2.1, si L est en R tambin lo est LC. Hemos visto en la clase anterior
dos ejemplos de lenguajes recursivos, los lenguajes {anbn | n 1} y {w | w {a, b}* y
w es un palndrome} (ver, respectivamente, el Ejemplo 1.1 y el Ejemplo 1.5).
En la prxima clase vamos a encontrar un primer ejemplo de lenguaje L en RE R, con
lo que probaremos que R RE, o en otras palabras, que hay problemas computables
que no son decidibles. En este caso LC pertenece a CO-RE R, de acuerdo tambin al
Teorema 2.1. Notar que con la existencia de LC se prueba adems que RE
Computabilidad, Complejidad Computacional y Verificacin de Programas
, de
36
acuerdo al Teorema 2.3, o en otras palabras, que hay problemas que no son
computables. Adelantndonos, el primer lenguaje de RE R que presentaremos
corresponde al problema de la detencin de las MT, o directamente el problema de la
detencin (tambin conocido como halting problem). Este problema computable no
decidible aparece en la ya referida publicacin de A. Turing en la que presenta las
mquinas que llevan su nombre. A modo de ilustracin, otros ejemplos clsicos de
problemas computables no decidibles, esta vez no relacionados con MT, son (sobre
algunos de ellos volveremos ms adelante):
(RE CO-RE), lo
37
(RE CO-RE)
Se cumple que L01 RE. Supongamos que L01 RE. Entonces existe una MT
M01 que reconoce L01. A partir de M01 se va a construir una MT M que reconoce
LC (absurdo porque LC RE), por lo que M01 no puede existir:
Dada una entrada w, M genera la cadena 1w, luego simula M01 a partir de 1w, y
responde como M01. De esta manera, LC = L(M): w LC 1w L01 M01
acepta 1w M acepta w.
Se cumple tambin que L01 CO-RE. Supongamos que L01 CO-RE, o lo que
es lo mismo, que L01C RE. Entonces existe una MT M01C que reconoce L01C.
Se va a construir una MT M que reconoce LC (absurdo porque LC RE), por lo
que M01C no puede existir:
Dada una entrada w, M genera la cadena 0w, luego simula M01C a partir de 0w,
y responde como M01C. De esta manera LC = L(M): w LC 0w L01C
M01C acepta 0w M acepta w.
Fin de Ejemplo
Las diferencias en el grado de dificultad de los lenguajes de las cuatro categoras
sealadas se perciben a veces mejor cuando se trata con MT restringidas, es decir con
MT con restricciones en sus movimientos, sus cintas, etc. Esto se analizar con cierto
detalle en la Clase 5. Por ejemplo, dado un conjunto de problemas indecidibles en el
marco de las MT generales, cuando se consideran con MT restringidas determinados
problemas se mantienen indecidibles mientras que otros pasan a ser decidibles. En el
caso de estos ltimos problemas, adems, se pueden destacar entre ellos diferencias en
el costo de resolucin (tiempo de ejecucin de las MT).
Ejercicios de la Clase 2
1. Completar las pruebas del Teorema 2.1.
2. Probar que la clase R es cerrada con respecto a la unin.
3. Probar que todo lenguaje finito es recursivo.
4. Completar las pruebas del Teorema 2.2.
Computabilidad, Complejidad Computacional y Verificacin de Programas
38
5. Construir una MT distinta a la del Teorema 2.2 para probar que la clase RE es
cerrada con respecto a la unin, tal que se detenga y rechace cuando las dos
simulaciones en paralelo rechazan.
6. Probar que RE es cerrada con respecto a la interseccin.
7. Completar la prueba del Teorema 2.3.
8. Dados dos lenguajes L1 y L2, determinar:
i.
ii.
iii.
iv.
Si L1 y L2 RE, L1 L2 RE?
v.
Si L1 y L2 CO-RE, L1 L2 CO-RE?
vi.
Si L2 RE y L1 L2, L1 RE?
vii.
Si L1 L2 RE, L1 o L2 RE?
viii.
Si L1 L2 RE, L1 o L2 RE?
9. Probar que si L1, L2, , Lk, son recursivamente numerables, disjuntos dos a dos, y
su unin es *, entonces son recursivos.
10. Sean L1 y L2 dos lenguajes recursivamente numerables de nmeros naturales
representados en notacin unaria. Probar que tambin es recursivamente numerable
el lenguaje L = {x | x es un nmero natural representado en notacin unaria, y
existen y, z, tales que x = y + z, con y L1 y z L2}.
11. Dada una MT M1, construir una MT M2 que establezca si L(M1) . Se puede
construir adems una MT M3 para establecer si |L(M1)| 1? Justificar la respuesta.
12. Construir una MT que genere todos los textos que pueden escribirse con un alfabeto
recursivamente numerable.
13. Probar que L RE y L , si y slo si existe una MTD M tal que L = {y | x, con
M(x) = y}, es decir, L es el codominio de la funcin computada por M.
14. Se define que un lenguaje infinito es recursivamente numerable sin repeticiones, si
es el codominio de una funcin computable inyectiva. Probar que L es
recursivamente numerable sin repeticiones, si y slo si L es infinito y
recursivamente numerable.
15. Se define que un lenguaje es recursivamente numerable en orden creciente, si es el
codominio de una funcin total computable creciente (una funcin f es creciente, si
Ricardo Rosenfeld y Jernimo Irazbal
39
dada la relacin <, para todo par x, y, si x y entonces f(x) f(y)). Probar que L es
recursivamente numerable en orden creciente, si y slo si L es infinito y recursivo.
40
Clase 3. Indecidibilidad
El contenido de esta clase, y tambin el de la siguiente, se centra en los problemas
indecidibles, es decir en los problemas de decisin asociados a los lenguajes no
recursivos, los lenguajes de
Sus entradas son pares de la forma (<M>, w), siendo <M> la codificacin de una
MT M, y w una entrada, tambin codificada, de M.
La MT universal U es como toda MT una tupla (Q, , , , q0, qA, qR), con sus propios
estados y smbolos, y una funcin de transicin que establece cmo simular la MT
cuyo cdigo forma parte de su entrada. Una posible manera de codificar una MT es la
41
Los estados del conjunto Q = {q1, , qk} se representan por los nmeros 1, ,
k, en notacin binaria. Adems, qA y qR se representan en binario por los
nmeros k + 1 y k + 2, respectivamente.
Los smbolos del alfabeto = {xi1, , xin} se representan por los nmeros i1,
, in, en notacin binaria.
Finalmente, la funcin de transicin se representa por una secuencia de 5tuplas. Las tuplas se separan por el smbolo numeral, es decir #, y sus
componentes por medio de una coma.
<M> = 1#1,100,10,1,11#1,101,11,1,10
1. Hace n := 0.
2. Crea la siguiente cadena w segn el orden cannico.
3. Verifica si w es un cdigo vlido de MT. Si no, vuelve al paso 2.
4. Si i = n, escribe w en la cinta de salida y se detiene en qA.
Computabilidad, Complejidad Computacional y Verificacin de Programas
42
5. Hace n := n + 1.
6. Vuelve al paso 2.
En el paso 2 se generan cadenas en orden cannico con los smbolos que pueden formar
parte del cdigo de una MT, a partir de un ordenamiento establecido entre los smbolos.
En el paso 3 se verifica que las cadenas generadas tengan la forma |Q|#<>, que los
componentes |Q| y <> respeten la codificacin establecida, que ningn cdigo de
estado en <> supere el valor |Q| + 2, etc.
Cuando en el paso 4 se cumple la igualdad i = n, significa que se obtuvo el cdigo
<Mi>.
Notar que en la enumeracin cannica obtenida de las MT M0, M1, M2, , puede darse,
para ndices distintos i, k, que L(Mi) = L(Mk).
Con estos elementos preparatorios ya estamos en condiciones de probar la existencia de
un primer lenguaje de RE R.
43
w0
w1
w2
w3
wm
wh
wh+1
M0
M1
M2
M3
Mm
Mh
Mh+1
Sea el lenguaje D = {wi | Mi se detiene a partir de wi}. Es decir, los elementos de D son
las cadenas wi tales que T[Mi, wi] = 1. Vamos a probar que si HP R entonces D R, y
que D R, por lo que se cumplir que HP R.
Prueba de que HP R D R.
Si el lenguaje HP fuera recursivo, tambin lo sera el lenguaje D, dado que D es un caso
particular de HP, que en lugar de considerar todos los pares (<Mi>, wk) slo considera
Computabilidad, Complejidad Computacional y Verificacin de Programas
44
los pares (<Mi>, wi). Ms precisamente, si HP R, entonces existe una MT MHP que se
detiene siempre y reconoce HP. Para probar que D R, se va a construir una MT MD
que se detiene siempre y reconoce D. A partir de una entrada w, MD trabaja de la
siguiente manera:
45
w1
w2
w3
wm
wh
wh+1
M0
M1
M2
M3
Mm = MC
Mh
Mh+1
...
...
46
Fin de Teorema
La tcnica empleada en el teorema anterior se denomina diagonalizacin. Es muy til
para probar que dos conjuntos difieren en al menos un elemento, al que se lo suele
denominar separador. En el caso anterior, el separador que encontramos entre las clases
RE y R es el lenguaje HP (en realidad tambin el lenguaje D). La idea de la
diagonalizacin es muy sencilla. En una de sus variantes, se toma como base una tabla
de unos y ceros y se utiliza el hecho de que el complemento a dos de su diagonal
difiere de todas las filas: difiere de la primera fila en el primer elemento, de la segunda
fila en el segundo elemento, y as sucesivamente.
Por ejemplo, con las dos diagonalizaciones que se presentan a continuacin, probamos
que los nmeros reales y el conjunto de partes de los nmeros naturales no son
numerables (en la Clase 5 identificamos formalmente a los lenguajes recursivamente
numerables con los que se pueden enumerar).
47
7 0,8705007419
8 0,0431173780
9 0,4091673889
.
Fin de Ejemplo
Ejemplo 3.2. El conjunto de partes de los nmeros naturales no es
numerable
Sea X un conjunto numerable de conjuntos de nmeros naturales. Se prueba por
diagonalizacin que X P(N), siendo N el conjunto de los nmeros naturales y P(N) el
conjunto de partes de N. Por lo tanto esto demuestra que P(N) no es numerable.
Llamando Xn a los conjuntos de X, con n 0, sea C = {n N | n Xn}. Se cumple:
C N, por definicin.
48
C Xn para todo n:
C X0 porque difieren en el nmero 0: 0 C 0 X0
C X1 porque difieren en el nmero 1: 1 C 1 X1
C X2 porque difieren en el nmero 2: 2 C 2 X2
y as sucesivamente.
Fin de Ejemplo
Retomando los ejemplos con MT, en la ltima diagonalizacin de esta clase que
presentamos a continuacin, se prueba de una manera alternativa a la presentada
previamente que RE .
w1
w2
w3
wm
wh
wh+1
M0
M1
M2
M3
...
...
...
Mm
...
...
...
Mh
Mh+1
...
49
De esta manera, L(Mi) = {wk | S[Mi, wk] = 1} = {wk | Mi acepta wk}. Si Li = L(Mi), y E =
{wi | S[Mi, wi] = 1} = {wi | Mi acepta wi}, se cumple que EC RE:
EC L0 porque w0 EC w0 L0
EC L1 porque w1 EC w1 L1
EC L2 porque w2 EC w2 L2
y as sucesivamente.
Es decir, EC no es ninguno de los lenguajes Li , y como los lenguajes Li son todos los
lenguajes recursivamente numerables dado que en la tabla S estn todas las MT,
entonces se cumple que EC RE. En trminos de la tabla S, el complemento a dos de
su diagonal, que representa el lenguaje EC, difiere de todas las filas de S, que
representan todos los lenguajes recursivamente numerables.
Fin de Ejemplo
Notar que con lo que hemos desarrollado hasta este momento contamos con distintos
caminos para formalizar los lmites de la computabilidad, es decir para probar la
inclusin estricta RE
es |P(*)|; y como
50
lenguaje E sera recursivo (la prueba queda como ejercicio). LU representa el problema
de la pertenencia de una cadena a un lenguaje, o directamente el problema de la
pertenencia. Se lo conoce como lenguaje universal. En la clase siguiente lo utilizaremos
muy a menudo para aplicar la tcnica de reduccin de problemas.
Concluimos esta clase con una apreciacin sobre el significado de la indecidibilidad del
problema de la detencin, generalizndola a todos los problemas indecidibles. Hemos
demostrado la insolubilidad algortmica del problema general de la detencin, es decir,
hemos probado que no existe ninguna MT que lo resuelve sistemticamente,
considerando las infinitas instancias (<Mi>, wk). De todos modos ciertamente existe un
algoritmo que resuelve el problema cuando se considera una instancia particular (<Mi>,
wk): uno que acepta o uno que rechaza. Para la eleccin del algoritmo adecuado en cada
caso habr que apelar al ingenio, sin una tcnica estndar en principio. En otras
palabras, un problema con una sola instancia siempre es decidible (obviamente nuestro
inters radica en los problemas con infinitas instancias).
Otro ejemplo que ilustra esta dualidad de lo general y lo particular es el problema, ya
mencionado, relacionado con las ecuaciones diofnticas: dada una ecuacin algebraica
con distintas variables y coeficientes enteros, existe una solucin con nmeros enteros?
Por ejemplo, dada la ecuacin xy2 + 5x3 + 8xz = 0, existen valores enteros de x, y, z,
que la resuelven? Se prueba que este problema es indecidible. Por otro lado, ecuaciones
diofnticas particulares son las que consider P. de Fermat cuando plante su famoso
teorema, conocido como Ultimo Teorema de Fermat, en el siglo XVII: dado n > 2, la
ecuacin xn + yn = zn, siendo x e y mayores que 0, no tiene solucin entera (Fermat no
mostr la prueba del teorema justificndose por lo pequeo del margen del libro en que
lo public; el teorema se demostr recin en 1995). El problema de Fermat tiene una
sola instancia, y como tal es decidible.
Un ltimo ejemplo de este tipo es el de la Conjetura de Goldbach, que establece que
todo nmero natural par mayor que 2 puede expresarse como la suma de dos nmeros
primos. Por tener una sola instancia, este problema es decidible (al da de hoy sigue sin
demostrarse). Naturalmente, y al igual que el problema de Fermat, la conjetura de
Goldbach se probara fcilmente si el problema de la detencin fuese decidible.
Ejercicios de la Clase 3
1. Proponer cmo codificar una MT con varias cintas.
2. Sea f: * {0, 1}, tal que:
Ricardo Rosenfeld y Jernimo Irazbal
51
ii.
iii.
ii.
8. Asumiendo que el problema de la detencin (de las MT) es decidible, construir una
MT que resuelva los siguientes problemas:
i.
ii.
La Conjetura de Goldbach.
52
53
Utilizaremos la notacin L1 L2 para expresar que existe una reduccin del lenguaje (o
problema) L1 al lenguaje (o problema) L2.
Fin de Definicin
Computabilidad, Complejidad Computacional y Verificacin de Programas
54
Fin de Ejemplo
Tal como lo refleja el ejemplo anterior, para probar que L1 L2 hay que probar que
existe una MT Mf que computa una funcin total f, y que w L1 f(w) L2 para toda
cadena de *. Notar la utilidad de la reduccin anterior. Si se tiene una MT M que
reconoce el lenguaje L100, entonces tambin se tiene una MT que reconoce el lenguaje
L200, componiendo Mf con M: si M acepta o rechaza (x2, y2, z2) significa que (x, y, z)
pertenece o no pertenece, respectivamente, a L200. Esto se formaliza en el siguiente
teorema.
55
Idea general.
Componiendo la MT Mf que computa la funcin de reduccin f del lenguaje L1 al
lenguaje L2, con la MT M2 que reconoce el lenguaje L2 y se detiene siempre, se obtiene
una MT M1 que reconoce el lenguaje L1 y se detiene siempre (ver la figura siguiente):
Construccin de la MT M1.
Sea Mf una MT que computa la funcin de reduccin f, con w L1 f(w) L2, y sea
M2 una MT que reconoce L2 y se detiene siempre. La MT M1 trabaja de la siguiente
manera:
Fin de Teorema
Como corolario del teorema anterior se establece que si L1 no es recursivo y existe una
reduccin de L1 a L2, entonces L2 tampoco es recursivo (de lo contrario L1 sera
recursivo). Lo mismo se puede decir para el caso de los lenguajes recursivamente
numerables.
56
Por lo tanto, las reducciones se pueden emplear tambin para probar que un lenguaje no
es recursivo o no es recursivamente numerable (en realidad, se pueden aplicar sobre una
gama mucho mayor de clases de lenguajes, como se ver en la segunda parte del libro).
Ms an, en lo que sigue nos enfocaremos en esta segunda visin, para desarrollar
pruebas negativas, es decir pruebas de no pertenencia (se aplicarn con el mismo
objetivo que las diagonalizaciones). Para las pruebas positivas, las de pertenencia, el
camino seguir siendo la construccin de MT.
Se presentan a continuacin varios ejemplos de reducciones de problemas. Adems de
la ejercitacin en el uso de la tcnica, se irn poblando las distintas clases de lenguajes
de la jerarqua de la computabilidad. Se tratan en su gran mayora problemas
relacionados con MT.
57
Fin de Ejemplo
De esta manera, para probar que LU no es recursivo, se construy una reduccin desde
un lenguaje no recursivo, HP, a LU. LU no puede ser recursivo, porque si lo fuera
tambin lo sera HP (absurdo): combinando Mf con una supuesta MT que acepta LU y se
detiene siempre, se obtendra una MT que acepta HP y se detiene siempre. Plantendolo
de una forma ms general: probando que existe una reduccin de L1 a L2, se demuestra
que el lenguaje L2 es tan o ms difcil que el lenguaje L1, desde el punto de vista de la
computabilidad.
No haba muchas opciones de lenguajes de los cuales reducir a LU. Con un conjunto
ms rico de alternativas, que se irn presentando en los ejemplos siguientes, la eleccin
del lenguaje conocido suele basarse en determinadas caractersticas del mismo y del
lenguaje nuevo, que facilitan la construccin de la MT Mf.
Notar que si no se hubiera tenido indicios acerca de la no recursividad del lenguaje LU,
una primera aproximacin para determinar la ubicacin de LU en la jerarqua de la
computabilidad podra haber sido la siguiente:
58
Obviamente esta prueba no es correcta, pero de todos modos un primer intento de esta
naturaleza puede servir para orientar la demostracin hacia una prueba positiva de un
determinado lenguaje L (la construccin de una MT que pruebe que L R), o
negativa (una reduccin que pruebe que L R). Esta aproximacin se presenta en
algunos ejemplos ms adelante. En el ejemplo siguiente se prueba que tambin existe
una reduccin de LU a HP.
Fin de Ejemplo
Se pueden plantear numerosas reducciones tiles considerando HP y LU. En la clase
anterior, en la prueba de que el lenguaje HP no es recursivo (Teorema 3.1), se utiliz un
lenguaje similar D = {wi | Mi se detiene a partir de wi}. Se demostr primero que HP
R D R. Notar que esta prueba no es sino una reduccin de D a HP. Lo mismo
sucedi con LU en relacin al lenguaje similar E. Otras reducciones tiles que se pueden
plantear incluyen la visin de MT calculadora. Por ejemplo, se puede reducir HP al
59
lenguaje de las ternas (<M>, w, v), tales que M(w) = v (es decir que M a partir de w
genera v). Tambin se puede reducir LU al lenguaje de los pares (<M>, w) tales que
para cada uno existe una cadena v que cumple M(w) = v. Queda como ejercicio
construir dichas reducciones. Tambin los lenguajes HPC y LUC son muy tiles para
probar mediante reducciones de problemas la no pertenencia a las clases R y RE de
numerosos lenguajes.
HP y LU estn entre los lenguajes ms difciles de la clase RE, en el sentido de la
computabilidad. Ms precisamente, se prueba que todos los lenguajes recursivamente
numerables se reducen a ellos (y as, si HP o LU fueran recursivos, se cumplira R =
RE). Utilizando una terminologa ms propia de la complejidad computacional, HP y LU
son lenguajes RE-completos. Vemoslo para el caso de LU (la prueba es similar para el
caso de HP y queda como ejercicio). Si L RE y M es una MT que reconoce L,
entonces la funcin f definida de la siguiente manera:
f(w) = (<M>, w)
60
61
Fin de Ejemplo
En el ejemplo siguiente se demuestra que el lenguaje L* no es ni siquiera
recursivamente numerable, como se sugiri recin. Se va a construir una primera
reduccin de problemas para probar la no pertenencia a la clase RE, lo que suele ser
ms difcil que las pruebas de no pertenencia a la clase R utilizando reducciones.
62
Si M acepta w, digamos en k pasos, entonces L(Mw) = {v | |v| < k} (es decir que
L(Mw) *, que es lo que se necesita)
Fin de Ejemplo
De la reduccin LU L* se deduce, como vimos, la reduccin LUC L*C. Como
adems se cumple LUC L* y LUC RE, entonces tanto L* como L*C habitan la clase
ms difcil de la jerarqua de la computabilidad, es decir el conjunto
(RE CO-
RE).
63
Fin de Ejemplo
Ejemplo 4.7. Reducciones de LUC a LREC y LRECC
Probaremos que es indecidible determinar si el lenguaje aceptado por una MT es
recursivo. El lenguaje que representa el problema es LREC = {<M> | L(M) R}.
Demostraremos directamente que LREC no es recursivamente numerable. Se har LUC
LREC. Como LUC RE, entonces LREC RE.
64
65
Fin de Ejemplo
Las reducciones de problemas presentadas se han basado en distintos modelos o
recetas, como por ejemplo:
La generacin de un cdigo <Mw> a partir de una entrada (<M>, w), tal que la
MT Mw ignora sus entradas y simula directamente M a partir de w.
Una variante del modelo anterior, tal que la MT Mw simula primero M a partir
de w, y despus filtra sus entradas simulando otra MT M. La eleccin de M
se relaciona con el lenguaje al que se pretende reducir.
La eleccin de uno u otro modelo depende de los lenguajes que intervienen en las
reducciones. En la segunda parte del libro se vern ms casos.
El siguiente ejemplo de reduccin de problemas se relaciona con un problema clsico de
la lgica, ya referido, y parte de un problema sobre cadenas de smbolos, tambin
mencionado previamente, que es el problema de correspondencia de Post (tambin
conocido como PCP): dada una secuencia de pares de cadenas de unos y ceros no vacas
(s1, t1), , (sk, tk), existe una secuencia de ndices i1, , in, con n 1, tal que las
cadenas si1sin y ti1tin sean iguales? Por ejemplo, para los pares (1, 111), (10111,
10), (10, 0), se cumple que (2, 1, 1, 3) es solucin: en ambos casos se obtiene la cadena
101111110. En cambio, para los pares (10, 101), (011, 11), (101, 011), se puede
comprobar que no existe solucin. Las soluciones pueden repetir ndices; esto significa
que el espacio de bsqueda con el que se trata es infinito, lo que es un indicio de la
indecidibilidad del problema. Efectivamente, se prueba que existe una reduccin de LU
a PCP, por lo que PCP es indecidible. No vamos a construir esta reduccin, sino que
utilizaremos PCP en otra reduccin para probar, a continuacin, que el problema de la
validez en la lgica de primer orden (tambin conocido como VAL) es indecidible.
Computabilidad, Complejidad Computacional y Verificacin de Programas
66
67
68
Fin de ejemplo
Como una frmula es insatisfactible si y slo si su negacin es vlida, del ejemplo
anterior se desprende que el lenguaje de las frmulas satisfactibles de la lgica de
primer orden tambin es indecidible (la prueba queda como ejercicio). Lo mismo sucede
con el lenguaje de los teoremas, porque por la sensatez y completitud de la lgica de
primer orden dicho lenguaje coincide con el de las frmulas vlidas. Por otra parte, el
lenguaje de los teoremas (y de las frmulas vlidas) es recursivamente numerable: a
partir de axiomas y reglas de inferencia se puede construir fcilmente una MT que lo
reconoce (la prueba queda como ejercicio).
La indecidibilidad en la lgica de primer orden contrasta con la decidibilidad en la
lgica proposicional, en la que la satisfactibilidad y validez de las frmulas se
determinan mediante las tablas de verdad.
Por su parte, mientras el lenguaje de los teoremas de la teora de nmeros es
recursivamente numerable, el de las frmulas verdaderas no lo es: por el Teorema de
Incompletitud de Gdel, toda teora recursiva y consistente que contenga suficiente
aritmtica es incompleta. En particular, la indecidibilidad en la teora de nmeros se
puede probar mediante una reduccin a partir del problema de pertenencia de la cadena
vaca en un lenguaje recursivamente numerable, que se demuestra es indecidible. La
idea de la reduccin es la siguiente. El lenguaje de la teora de nmeros, si cuenta con
las operaciones de suma y multiplicacin (suficiente aritmtica o expresividad), como
es el caso de la aritmtica de Peano, permite expresar las configuraciones y
computaciones de las MT mediante nmeros. Si una MT M acepta , lo hace con una
computacin en la que ninguna configuracin mide, naturalmente, ms que un nmero
determinado k. La reduccin asigna entonces a cada cdigo <M> una frmula
ik(k(i)), que es verdadera si y slo si i representa una computacin de M que acepta
con configuraciones que no miden ms que k.
69
RE, entonces el
de RE. Intuitivamente, es razonable que L no sea recursivo: probar que los lenguajes
L(M) cumplen una determinada propiedad requiere chequear, en cada caso, el
comportamiento de M sobre las infinitas cadenas de *. El teorema no dice nada con
respecto a si L est o no en RE (el comentario anterior ahora no aplica, porque en el
caso de los lenguajes recursivamente numerables las MT que los reconocen pueden no
detenerse). Existe de todos modos una variante del teorema que tambin considera el
caso RE, pero no la describiremos. El teorema tampoco dice nada cuando los cdigos
<M> no se definen en trminos de los lenguajes que las MT M reconocen, sino que se
relacionan directamente con caractersticas de las MT (por ejemplo, MT con un
determinado nmero de estados, que no recorren ms de un cierto nmero de celdas,
que slo se mueven a la derecha, que escriben alguna vez un smbolo dado, etc).
Supongamos primero que
. Sea L1 un lenguaje de
, y M1 una MT que
70
<Mw> L .
. Como
. Sea
= RE
, con
RE,
Fin de Teorema
Los siguientes ejemplos tienen el objetivo principal de clarificar cundo y cmo se
puede aplicar el Teorema de Rice para probar la no recursividad de un lenguaje.
71
Fin de Ejemplo
Ejemplo 4.10. L R (aplicacin del Teorema de Rice)
Sea L = {<M> | L(M) = }. Se prueba que L R por aplicacin del Teorema de
Rice:
= {}, es decir, es la
porque .
Fin de Ejemplo
El problema de determinar si una MT reconoce el lenguaje vaco es otro problema
clsico de la computabilidad. Para completar su ubicacin en la jerarqua vamos a
probar que L no es ni siquiera recursivamente numerable. No lo haremos por medio de
una reduccin de problemas (queda como ejercicio), sino que demostraremos que LC
RE, y as probaremos que L RE (de lo contrario L sera recursivo). Dado el
lenguaje LC = {<M> | L(M) }, construimos a continuacin una MT MC que lo
reconoce. A partir de una entrada w, la MT MC trabaja de la siguiente manera:
72
73
En el paso 2 la cota C se calcula a partir de los valores |Q| y || que se obtienen de <M>.
En el paso 6 el valor de i se incrementa en 1, se decrementa en 1 o se mantiene, si M se
mueve a derecha, izquierda o no se mueve, respectivamente. M20 se detiene siempre
porque alguna de las tres posibilidades de detencin indicadas en el algoritmo debe
cumplirse, cualquiera sea <M>. Se cumple adems que L20 = L(M20): <M> L20 M
a partir de no sale de las celdas 1 a 20 M20 se detiene a partir de <M> en su estado
qA <M> L(M20).
Fin de Ejemplo
De esta manera, limitando el espacio de trabajo de una MT se puede acotar tambin su
nmero de pasos, es decir su tiempo de ejecucin, teniendo en cuenta la cantidad de
configuraciones distintas que puede recorrer. La relacin entre el espacio y el tiempo
consumidos por una MT se trata con cierto detalle en la Clase 9.
74
Un segundo fragmento tiene las mismas tuplas que M, salvo que en lugar del
smbolo 0 utiliza el smbolo x, y en lugar de los estados finales q A y qR utiliza,
respectivamente, nuevos estados no finales qA y qR.
La idea es que Mw replique los pasos de M sin escribir nunca el smbolo 0, y slo en el
caso de que M se detenga, Mw haga un paso ms escribiendo el 0.
La funcin f es total computable.
La funcin de reduccin es claramente total computable (si la entrada no es una cadena
vlida (<M>, w), la MT Mf genera la cadena 1).
Se cumple (<M> , w) HP <Mw> Limp0.
(<M>, w) HP M se detiene a partir de w Mw a partir de toda entrada escribe el
smbolo 0 <Mw> Limp0.
Fin de Ejemplo
Ejercicios de la Clase 4
1. Probar que las reducciones de problemas son reflexivas y transitivas.
2. Probar que si L2 RE y L1 L2, entonces L1 RE.
3. Probar que todo lenguaje de la clase RE se puede reducir a HP.
4. Construir una reduccin:
i.
ii.
De LU al lenguaje de los pares (<M>, w), de modo tal que para todo par
(<M>, w) existe una cadena v que cumple M(w) = v.
(RE CO-RE)),
75
i.
ii.
iii.
iv.
ii.
iii.
iv.
v.
vi.
vii.
viii.
L = {<M> | L(M)}.
ix.
x.
xi.
ii.
iii.
76
ii.
iii.
77
12. Se demuestra que las frmulas insatisfactibles de la lgica de primer orden y los
teoremas de la aritmtica son recursivamente inseparables (ver definicin en el
Ejercicio 9 de la Clase 3). Teniendo en cuenta este enunciado probar nuevamente los
incisos del ejercicio anterior.
78
Las mquinas RAM (por random access machines o mquinas de acceso aleatorio)
constituyen otro conocido modelo de computacin, ms cercano a las computadoras
reales, y por eso resulta interesante probar que son equivalentes a las MT, es decir que
tienen el mismo poder computacional. Las RAM tienen un nmero infinito de palabras
de memoria, numeradas 0, 1, 2, , cada una de las cuales puede almacenar un nmero
entero, y un nmero finito de registros aritmticos R1, R2, R3, , que tambin pueden
almacenar enteros. En las palabras de memoria hay instrucciones y datos. Las
instrucciones son LOAD, STORE, ADD, etc., con la semntica conocida.
Vamos a probar primero que dada una MT M con una cinta semi-infinita, existe una
RAM R equivalente (ya se demostr en el Ejemplo 1.4 la equivalencia entre los
modelos de las MT con cintas infinitas y cintas semi-infinitas). Slo presentamos la idea
general. Las caractersticas de la RAM R son:
79
Supongamos que los primeros dgitos binarios del cdigo de una instruccin representan
el tipo de instruccin (puede ser LOAD, STORE, ADD, etc.), y que los dgitos restantes
representan la direccin del operando referenciado por la instruccin. En lo que sigue,
se presenta un ejemplo concreto para describir la simulacin de la RAM R por medio de
la MT M. Si en un momento dado la cinta de la MT M correspondiente al LC tiene el
valor i, M trabaja de la siguiente manera:
80
Este ciclo se repite para la siguiente instruccin, con el nuevo valor de la cinta del LC, y
as sucesivamente, hasta que la MT M eventualmente se detiene por la detencin de la
RAM R.
Las MT que generan lenguajes tienen una cinta de salida de slo escritura, en la que el
cabezal se mueve nicamente hacia la derecha, y las cadenas se separan por el smbolo
#. Se asume que la entrada es la cadena vaca .
El lenguaje generado por una MT es el conjunto de cadenas que escribe en su cinta de
salida. Las cadenas se pueden repetir, y no aparecen en ningn orden determinado.
La expresin G(M) denota el lenguaje generado por la MT M. De esta manera,
utilizando las expresiones G(M) y L(M) puede identificarse qu visin de MT se est
considerando, si generadora o reconocedora, respectivamente.
Vamos a probar a continuacin que las dos visiones son equivalentes, y por lo tanto, que
otra condicin suficiente y necesaria para que un lenguaje sea recursivamente
numerable es que exista una MT que lo genere, lo que explica la denominacin de esta
clase de lenguajes.
81
82
antes, M2 genera una a una todas las cadenas w de * en el orden cannico, y a partir de
cada w simula M1. Cuando M1 acepta w, entonces M2 la escribe en su cinta de salida.
Ahora las simulaciones se pueden efectuar completamente, una despus de la otra,
porque M1 se detiene siempre. Queda como ejercicio probar que M2 genera L en el
orden cannico y sin repeticiones.
Demostramos ahora el sentido contrario, es decir que si existe una MT que genera un
lenguaje L en el orden cannico y sin repeticiones, entonces L es recursivo. Sea M1 una
MT con dichas caractersticas. La idea es construir una MT M2 del siguiente modo.
Como antes, M2 tiene una cinta ms que M1, en la que est su entrada v, y trabaja como
M1, salvo que toda vez que M1 escribe una cadena w en su cinta de salida, M2 hace:
1. Si w = v, acepta.
2. Si w > v segn el orden cannico, rechaza (porque ya no hay posibilidad de que
M1 imprima v en su cinta de salida).
3. Si w < v segn el orden cannico, espera por la prxima escritura de M1 en su
cinta de salida (porque es posible que la cadena v aparezca despus).
Por otro lado, si M1 se detiene en algn momento, entonces M2 rechaza. Notar que esta
ltima construccin sirve slo cuando L es infinito. En efecto, si L es finito y la MT M1
que lo genera no se detiene, puede suceder que M2 tampoco se detenga: es el caso en
que la entrada v de M2 es mayor que la mayor cadena de L segn el orden cannico,
digamos u, porque M2 esperar infructuosamente despus que M1 haya escrito la cadena
u. Pero si L es finito se prueba que es recursivo (ver Ejercicio 3 de la Clase 2), sin
necesidad de recurrir a la construccin anterior. Queda como ejercicio probar que L(M2)
= L y que M2 se detiene siempre cuando L es infinito.
Fin de Teorema
Otra conocida representacin de los lenguajes con la visin generadora la constituyen
las gramticas.
83
Fin de Definicin
La generacin de un lenguaje a partir de una gramtica G se establece en base a una
relacin identificada con G. Si por ejemplo es una produccin de G, y las
cadenas y estn en V*, entonces se cumple que G . La expresin 1 *G m
indica que se cumple 1 G 2, , m-1 G m. Se dice en este caso que existe una
derivacin de 1 a m, o que m deriva de 1. El lenguaje generado por una gramtica G
se denota con la expresin L(G), y se define as: L(G) = {w | w VT* y S *G w}. Es
decir que L(G) es el conjunto de todas las cadenas de VT* que derivan del smbolo
inicial S de la gramtica G.
Fin de Ejemplo
Por la forma de las producciones, las gramticas se clasifican en cuatro tipos, de
acuerdo a una jerarqua conocida como jerarqua de Chomsky:
84
Los lenguajes se clasifican de la misma manera que las gramticas que los generan:
lenguajes de tipo 0, de tipo 1 o sensibles al contexto, de tipo 2 o libres de contexto, y de
tipo 3 o regulares. Se cumple por definicin que una gramtica (respectivamente un
lenguaje) de tipo i, es un caso particular de gramtica (respectivamente lenguaje) de tipo
k, con i k. Para que la cadena vaca pueda ser parte de un lenguaje de tipo 1, se
permite el uso de la produccin especial S , siempre que S no aparezca en la parte
derecha de ninguna produccin.
Se prueba que un lenguaje es de tipo 0 si y slo si es recursivamente numerable: a partir
de una gramtica G semi-Thue se puede construir una MT que reconoce L(G) y
viceversa. Tambin se prueba que los lenguajes sensibles al contexto son recursivos, y
por lo tanto tambin lo son los lenguajes libres de contexto y los lenguajes regulares. La
demostracin se basa en que la parte derecha de toda produccin de una gramtica
sensible al contexto no tiene menos smbolos que la parte izquierda, por lo que siempre
se puede determinar si existe una derivacin del smbolo inicial a una cadena de
smbolos terminales. Formalmente, dada una gramtica sensible al contexto G = (VN,
VT, P, S) y una cadena w de longitud n, se puede determinar si w L(G) de la siguiente
manera. Se construye un grafo orientado cuyos vrtices son todas las cadenas de V* de
longitud a lo sumo n, y cuyos arcos son todos los pares (, ) tales que se cumple G
. De esta manera, los caminos del grafo se corresponden con las derivaciones de la
gramtica G, y por lo tanto una cadena w estar en L(G) si y slo si existe un camino en
el grafo desde el vrtice de S hasta el vrtice de w (existen distintos algoritmos para
determinar si existe un camino entre dos vrtices de un grafo).
Por otra parte, se puede probar por diagonalizacin que los lenguajes sensibles al
contexto no son todos los lenguajes recursivos. Al igual que las MT, las gramticas
pueden codificarse y ordenarse, en particular las gramticas sensibles al contexto (queda
como ejercicio proponer una codificacin). Sea el lenguaje L = {wi | wi L(Gi)}, tal
que Gi es la gramtica sensible al contexto i-sima segn el orden cannico:
85
Se cumple que L es recursivo: dada una cadena wi, se determina i segn el orden
cannico, se genera el cdigo de la gramtica Gi, se chequea si wi est o no en
L(Gi), y se rechaza o acepta, respectivamente.
86
= {0, 1}
q0 = q0
F = {q0}
2. (q1, 1) = q0
3. (q1, 0) = q3
4. (q3, 0) = q1
5. (q3, 1) = q2
6. (q2, 1) = q3
7. (q2, 0) = q0
8. (q0, 0) = q2
Se cumple que L(M) es el conjunto de todas las cadenas de {0, 1}* que tienen un
nmero par de unos y un nmero par de ceros. La prueba queda como ejercicio.
Fin de Ejemplo
Los autmatas finitos se pueden representar grficamente mediante diagramas de
transicin de estados, como el siguiente, que corresponde al ejemplo anterior:
Los nodos representan los estados del autmata. Existe un arco orientado con nombre x
del nodo q al nodo p, si est definido (q, x) = p. El nodo que representa el estado inicial
se seala por una flecha, y los estados finales se representan con nodos con contorno
doble. Otra representacin muy conocida de los lenguajes regulares la constituyen las
expresiones regulares, que se utilizan a menudo para el reconocimiento de patrones en
textos. Las expresiones regulares sobre un alfabeto se definen inductivamente de la
siguiente manera:
87
Por ejemplo, la expresin (0 + 1)* denota el lenguaje de las cadenas de ceros y unos,
con cero o ms dgitos. Y la expresin (0 + 1)*00(0 + 1)* denota el lenguaje de las
cadenas de ceros y unos con al menos dos ceros consecutivos. Queda como ejercicio
definir la expresin regular que representa el lenguaje reconocido por el autmata finito
del ejemplo anterior.
Se prueba que la clase de los lenguajes regulares es cerrada con respecto a las
operaciones de unin, interseccin, complemento, concatenacin y clausura. Se cumple
adems que la clase de los lenguajes regulares es la ms pequea que contiene a todos
los conjuntos finitos y es cerrada con respecto a la unin, la concatenacin y la clausura.
Al igual que en el caso de las MT generales, el modelo de los AF determinsticos es
equivalente al de los AF no determinsticos. Como contrapartida, a diferencia de las MT
generales, ahora con AF problemas como L(M) = ?, L(M) = *? y L(M) = L(M)?
son decidibles.
El segundo tipo de MT restringida que vamos a describir es el autmata con pila
(abreviado con AP). Un AP es una MT no determinstica con las siguientes
restricciones:
Tiene una cinta de entrada de slo lectura y una cinta de trabajo que se comporta
como una pila. De este modo, los AP tienen memoria, pero limitada en
comparacin con las MT generales.
Hay dos tipos de pasos en un AP. En el primer caso se lee el estado corriente, el
smbolo corriente de la entrada, y el smbolo tope de la pila, y como
consecuencia el estado puede cambiar, el cabezal de la cinta de entrada se mueve
un lugar a la derecha, y en la pila se puede reemplazar el smbolo tope por una
88
cadena, que puede ser vaca. El otro tipo de paso es como el anterior, salvo que
en este caso no se lee la entrada ni se avanza sobre ella (por eso se lo conoce
como -movimiento).
Q = {qa, qb}
= {a, b}
= {Z, A, B}
q0 = qa
Z=Z
89
Se cumple que L(M) es el conjunto de las cadenas anbn, con n 1. La prueba queda
como ejercicio.
Fin de Ejemplo
Se demuestra que la clase de los lenguajes libres de contexto es cerrada con respecto a
las operaciones de unin, concatenacin y clausura, mientras que no lo es con respecto a
la interseccin ni al complemento. A diferencia de las MT generales, en este caso el
modelo de los AP no determinsticos no es equivalente al modelo de los AP
determinsticos (es de destacar que la gran mayora de los lenguajes de programacin de
uso general en la industria son libres de contexto y determinsticos). Otra diferencia con
las MT generales es que con AP, problemas como w L(M)? y L(M) = ? son
decidibles.
Por ltimo, las MT restringidas con poder computacional para reconocer todos los
lenguajes sensibles al contexto y slo ellos se denominan autmatas acotados
linealmente (el trmino se abrevia con AAL). Son MT no determinsticas con una sola
cinta, sobre la que el cabezal nunca se mueve ms all de los extremos de la entrada.
Por ejemplo, la MT del Ejemplo 1.1 que reconoce el lenguaje L = {anbn | n 1} (como
el autmata con pila visto recin) es un AAL determinstico.
La clase de los lenguajes sensibles al contexto es cerrada con respecto a las operaciones
de unin, interseccin, concatenacin y clausura. Como sucede con las MT generales,
tambin con AAL problemas como L(M) = ?, L(M) = *? y L(M) = L(M)? son
indecidibles.
Incluye dos cintas especiales, una cinta de pregunta y una cinta de respuesta.
90
Trabaja de la forma habitual, pero toda vez que su estado es q?, si el contenido
de su cinta de pregunta es una cadena v, la mquina escribe en un solo paso en
su cinta de respuesta un 1 si v A (respuesta positiva del orculo), o un 0 si v
A (respuesta negativa del orculo).
Existe una definicin equivalente que reemplaza la cinta de respuesta por dos estados
especiales, uno para las respuestas positivas del orculo y otro para las respuestas
negativas. La MT MA puede interpretarse como una MT M que invoca cero o ms veces
a una subrutina que reconoce el lenguaje A, teniendo en cuenta que no se establece a
priori ninguna restriccin sobre el lenguaje (en particular, podra no ser recursivamente
numerable). Un lenguaje es recursivamente numerable con respecto al orculo A si es
reconocido por una MT MA, y se denota como de costumbre con L(MA). En particular,
si MA se detiene a partir de todas las entradas, L(MA) es recursivo con respecto al
orculo A. Dos orculos son recursivamente equivalentes si cada uno es recursivo con
respecto al otro.
Fin de Ejemplo
Como se observa en el ejemplo, si no se restringe el tipo de orculo utilizado se pueden
contradecir enunciados de la jerarqua de la computabilidad. Notar que con el mismo
orculo anterior se puede reconocer HPC, que no es recursivamente numerable.
Naturalmente siguen habiendo ms lenguajes que lenguajes reconocidos por MT, con o
sin orculos.
Como anticipamos en la introduccin, las MT con orculo son tiles para establecer
relaciones entre lenguajes (en esta clase nos enfocaremos en la jerarqua de la
Ricardo Rosenfeld y Jernimo Irazbal
91
92
Fin de Ejemplo
Si L1 es recursivo con respecto a L2, tambin se dice que existe una Turing-reduccin de
L1 a L2, y se denota con la expresin L1 T L2. De esta manera, podemos considerar a
las Turing-reducciones como reducciones ms generales que las que vimos hasta ahora
(denominadas m-reducciones o reducciones many-one (muchos a uno) porque en
general no son inyectivas). Claramente, si existe una m-reduccin de L1 a L2, tambin
existe una Turing-reduccin entre ambos lenguajes, mientras que la recproca no tiene
por qu cumplirse (la prueba queda como ejercicio).
Dados dos lenguajes L1 y L2, se puede demostrar L2 R probando L1 T L2 y L1 R, tal
como se hace con las m-reducciones. En efecto, si L2 fuera recursivo, entonces la MT
ML2 que reconoce L1 y se detiene siempre podra simularse por otra MT M equivalente
sin orculo que se detiene siempre, por lo que L1 sera recursivo (absurdo). Por lo tanto,
las Turing-reducciones constituyen otra herramienta para probar no recursividad, muy
til cuando no existen o cuesta encontrar m-reducciones para el mismo objetivo. Como
contrapartida, a diferencia de las m-reducciones, las Turing-reducciones no sirven para
probar L2 RE demostrando L1 T L2 y L1 RE: claramente se cumple para todo
lenguaje L que L T LC (por ejemplo HPC T HP, con HPC RE y HP RE). Dicho
contraste es un ejemplo de que cuanto ms restrictivas son las reducciones utilizadas,
Ricardo Rosenfeld y Jernimo Irazbal
93
Ejercicios de la Clase 5
1. Completar la prueba del Teorema 5.1.
2. Construir una MT distinta a la del Teorema 5.1 para generar un lenguaje
recursivamente numerable, de modo tal que no repita cadenas.
3. Proponer una codificacin para las gramticas, y construir una MT que determine,
dado el cdigo de una gramtica G, si G es de tipo 1 (o sensible al contexto).
4. Establecer las diferencias entre las MT restringidas descriptas en la Clase 5 y las MT
generales, y argumentar en cada caso la razn por la que las MT generales poseen
mayor poder computacional. Hacer tambin un anlisis comparativo considerando
las MT restringidas entre s.
5. Completar la prueba del Ejemplo 5.2. Definir adems una expresin regular que
represente el lenguaje reconocido por el autmata finito del ejemplo.
6. Describir los lenguajes representados por los siguientes diagramas de transicin de
estados:
El lenguaje de las palabras clave if, then, else, fi, while, do, od.
ii.
El lenguaje de las cadenas de {0, 1}* tales que a todo cero le sigue un uno.
iii.
El lenguaje de las cadenas de {0, 1}* con igual cantidad de unos y ceros.
94
ii.
iii.
10. Probar la equivalencia entre el modelo de las MT con orculo que utilizan una cinta
de respuesta, y el modelo de las MT con orculo que utilizan en cambio dos estados
de respuesta, uno para las respuestas positivas y otro para las respuestas negativas.
11. Completar la prueba del Ejemplo 5.5.
12. Probar que si existe una m-reduccin de L1 a L2, entonces tambin existe una
Turing-reduccin entre ambos lenguajes, mientras que la recproca no tiene por qu
cumplirse.
13. Probar que si existe una m-reduccin de L1 a L2, y L2 es recursivo (recursivamente
numerable) con respecto a L3, entonces L1 es recursivo (recursivamente numerable)
con respecto a L3.
14. Dado A1 = {<M> | L(M) = }, probar que LUC T A1, mientras que no se cumple
LUC A1.
15. Dado A2 = {<M> | L(MA1) = }, siendo A1 el orculo definido en el ejercicio
anterior, probar:
i.
ii.
95
96
manera
independiente
con
distintos
mtodos,
la
indecibilidad
del
97
fuerte), el autor recorre en los captulos 2, 3 y 4 temas tales como la Tesis de ChurchTuring, el -clculo, el Teorema de Incompletitud de Gdel, ejemplos de problemas
indecidibles y la teora de la complejidad. Por su parte, (Herken, 1994) recopila
numerosos artculos de importantes referentes de la teora de la computacin,
elaborados cuando se cumplieron cincuenta aos de la publicacin de Turing que
introdujo las mquinas que llevan su nombre; los cinco trabajos de la primera parte de
esta recopilacin tratan el aporte de Turing, y su relacin con otras contribuciones
(Church, Gdel, Hilbert, Kleene y Post) y con el desarrollo de la computacin.
A lo largo de todo el libro hacemos distintas referencias a la lgica, en lo que hace a su
relacin con la computabilidad, la complejidad computacional y la verificacin de
programas. Entre otras obras introductorias a la lgica, recomendamos (Enderton,
1972), (Mendelson, 1979) y (Schoenfield, 1967). Tambin sugerimos la lectura de los
siguientes trabajos. (Huth & Ryan, 2004) est orientado a las carreras de informtica,
relacionando ntimamente la lgica con las herramientas existentes para la
especificacin y verificacin del hardware y el software; adems de la lgica
proposicional y de primer orden, trata la lgica temporal, tanto lineal como ramificada,
y tcnicas formales de verificacin teniendo en cuenta las distintas lgicas estudiadas.
En los captulos 4 a 6 de (Papadimitriou, 1994) se analizan, respectivamente, la lgica
proposicional, la lgica de primer orden y la teora de nmeros, a partir del
convencimiento del autor de que el poder expresivo de la lgica la convierte en un
instrumento extremadamente valioso para el estudio de la complejidad computacional.
Finalmente, (Martnez & Pieiro, 2009) describe de una manera autocontenida el
Teorema de Incompletitud de Gdel; en particular, en los ltimos captulos los autores
se enfocan en la causa de la incompletitud a partir del poder expresivo del lenguaje de la
aritmtica cuando incluye la suma y la multiplicacin.
Se detallan a continuacin las referencias bibliogrficas mencionadas previamente:
98
Markov, A. (1954). The theory of algorithms. Trudy Mat., Inst. Steklov, Acad.
Sci. USSR, 42, 3-375.
99
Rabin, M. & Scott, D. (1959). Finite automata and their decision problems.
IBM Journal of Research and Development, 3, 114-125.
100
101
102
algoritmos eficientes para resolver las optimizaciones sin limitar el tiempo de ejecucin.
Otra seccin retoma el modelo de las mquinas de Turing con orculo, en este caso
acotadas a un tiempo de ejecucin polinomial, con las que se puede profundizar en el
anlisis de la conjetura P NP (se relativizan relaciones entre P y NP, NP y CO-NP,
etc., asumiendo que las mquinas de Turing tienen un orculo determinado). Por medio
de estas mquinas se presenta adems otra jerarqua de complejidad, conocida como la
jerarqua polinomial o PH, que comprende problemas que van desde P hasta PSPACE
(esta ltima clase incluye a los problemas que se resuelven en espacio determinstico
polinomial). Los problemas de PH se identifican con los que se pueden especificar
mediante la lgica de segundo orden, ahora sin restricciones sintcticas. En una
siguiente seccin se describen las mquinas de Turing probabilsticas, cuyo criterio de
aceptacin es distinto al de las mquinas de Turing comunes. Se presenta una jerarqua
de complejidad definida en trminos de estas mquinas, y se la relaciona con la
jerarqua temporal. La ltima seccin est dedicada a la clase NC, la clase de los
problemas de P que se consideran eficientemente paralelizables. Como novedad, para su
estudio se introduce un modelo de ejecucin que no se basa en las mquinas de Turing,
los circuitos booleanos, muy tenidos en cuenta a la hora de encontrar cotas mnimas de
tiempo.
103
104
Fin de Definicin
De esta manera, si un problema pertenece a la clase DTIME(T(n)) (respectivamente
NTIME(T(n))), cualquiera sea la instancia w considerada la respuesta de la MTD
(respectivamente MTN) que lo resuelve no tarda ms de O(T(|w|)) pasos. Esto significa
que el criterio de medicin es por el peor caso. Otro criterio es por el caso promedio,
pero para ello se necesita conocer cmo se distribuyen las entradas. Por otro lado, que
un problema pertenezca a una clase temporal no implica que no tenga un tiempo de
resolucin menor. El ideal por supuesto es determinar la cota temporal mnima,
105
106
Esta MT hace unos 3n pasos. Por lo tanto, trabaja en tiempo T(n) = O(n), es decir que L
DTIME(n), lo que es ms preciso que decir que L DTIME(n2).
Fin de Ejemplo
En el conjunto R de los lenguajes recursivos o problemas de decisin decidibles se
distinguen dos clases temporales, P y NP, que se definen de la siguiente manera:
P = i 0 DTIME(ni)
NP = i 0 NTIME(ni)
Notar que O(ni) rene a todas las funciones polinomiales T(n) = a0 + a1 n + + ai ni.
Por lo tanto, la clase P agrupa a los problemas que se resuelven en tiempo
determinstico polinomial, y NP es la clase de los problemas que se resuelven en tiempo
no determinstico polinomial.
Se cumple por definicin que P NP, y adems que las dos clases estn incluidas
estrictamente en R (al final de la clase se hace una referencia a cmo se puede probar
esto).
En cambio, slo podemos afirmar que se sospecha que P NP.
La conjetura P NP, luego de ms de cuarenta aos, an no pudo probarse (ni
refutarse), y no hay indicios de que la demostracin se logre en el corto plazo.
Constituye el problema abierto ms importante de la complejidad computacional (tanto
es as que en el ao 2000, el prestigioso Clay Mathematics Institute lo catalog como
uno de los siete problemas matemticos ms importantes del milenio).
En P y NP se identifican numerossimos e importantes problemas de la computacin.
Asumiendo P NP, la figura siguiente muestra una primera versin de la jerarqua
temporal:
107
108
Fin de Ejemplo
Obviamente deben evitarse inconsistencias de este tipo. Si un problema es tratable
(intratable) con una representacin, tambin debe ser tratable (intratable) con otra. Esta
es la nocin de representacin razonable. De ahora en ms tendremos en cuenta
representaciones con las siguientes caractersticas:
109
110
Fin de Ejemplo
Las clases P y NP se tratan en detalle a partir de la clase siguiente. En lo que sigue
presentamos algunas caractersticas de la jerarqua temporal. Si bien slo se considera el
tiempo determinstico, debe entenderse que todo aplica tambin al tiempo no
determinstico.
En primer lugar, destacamos que si bien T1(n) = O(T2(n)) implica que DTIME(T1(n))
DTIME(T2(n)) (la prueba queda como ejercicio), esta inclusin no es necesariamente
estricta. En efecto, por ejemplo el salto de una clase a otra que la incluya estrictamente
debe ser mayor que lo determinado por factores constantes. En este caso, la justificacin
es que las diferencias por factores constantes se deben a caractersticas de las MT
utilizadas, como el tamao de los alfabetos, que a partir de construcciones adecuadas se
pueden eliminar.
Ms precisamente, el Teorema de Aceleracin Lineal (Linear Speed Up Theorem), en
una de sus variantes, establece que si existe una MT M1 con K cintas que trabaja en
tiempo T(n), entonces existe una MT M2 con K + 1 cintas equivalente que trabaja en
tiempo c.T(n) + (n + 1), para c = 1/2, 1/4, 1/8, , es decir 1/2d, siendo d cualquier
nmero natural mayor que cero (para simplificar la notacin no utilizamos el operador
de parte entera, pero la expresin se debe entender considerndolo; esto es aplicable a
todo lo que sigue, en sta y las prximas clases). En otras palabras, como ya dijimos,
una clase DTIME(T2(n)) no incluye ms problemas que una clase DTIME (T1(n)), si es
que T2(n) difiere de T1(n) en un factor constante (tener en cuenta que el sumando n + 1
es lo mnimo que puede valer una funcin temporal T(n)).
No probaremos el teorema. La idea general de su demostracin es la siguiente:
111
112
113
Permitiendo, sin perder generalidad, que los cdigos w = <Mw> estn precedidos por
cualquier cantidad de ceros (es decir, permitiendo que |Qw| tenga cualquier cantidad de
ceros a izquierda, de acuerdo a cmo definimos la codificacin de una MT en la Clase
3), entonces por la hiptesis, toda MT Mw que trabaja en tiempo T1(n) se puede
codificar con una cadena w lo suficientemente grande que cumple
c.T1(|w|).logT1(|w|) T2(|w|)
Para este caso de w, entonces M puede simular completamente la MT Mw asociada, y
as, por la construccin descripta, se cumple que w est en L(M) si y slo si w no est
en L(Mw). De esta manera, L(M) L(Mw) para toda MT Mw que trabaja en tiempo
T1(n), es decir que L(M) DTIME(T2(n)) DTIME(T1(n)).
En particular, si T1(n) = O(T2(n)), entonces DTIME(T1(n)) DTIME(T2(n)). Por
ejemplo, se cumple DTIME(nk) DTIME(nk+1) para todo nmero natural k. En cambio,
si T1(n) O(T2(n)), para encontrar una clase que incluya estrictamente a DTIME(T1(n))
se puede definir una funcin T3(n) = max(T1(n), T2(n)) para todo n, es decir que T3 se
quede con el mximo de T1 y T2 para todo n; de esta manera se obtiene DTIME(T1(n))
DTIME(T3(n)).
El segundo resultado, que probamos a continuacin, refuerza el concepto de que la
jerarqua temporal es densa, es decir que siempre se puede definir una clase de
problemas mayor. En este caso no es necesario recurrir a las funciones tiempoconstruibles. Demostramos que si T(n) es una funcin total computable, entonces existe
un lenguaje recursivo L (o de EXP segn nuestra convencin) tal que L
DTIME(T(n)). Se trata del lenguaje L = {wi | wi no es aceptado por la MT Mi en T(|wi|)
pasos}, considerando como siempre el orden cannico:
114
Fin de Teorema
Como corolario de otro resultado en el marco de la jerarqua temporal, conocido como
el Teorema de la Unin (no lo vamos a considerar), existe una funcin total computable
T(n) tal que DTIME(T(n)) = P. De esta manera, por el segundo resultado del teorema
anterior se deduce que la clase P est incluida estrictamente en la clase EXP. De igual
modo se prueba la inclusin estricta de NP en EXP.
Ejercicios de la Clase 6
1. Sea la siguiente definicin alternativa a la utilizada en la Clase 6: [f(n) = O(g(n))]
[c > 0 y n0 N tales que n N: n n0 f(n) c.g(n)]. Probar que las dos
definiciones son equivalentes.
2. Mostrar que en el marco de la complejidad temporal, las RAM constituyen un
modelo de ejecucin razonable, y la matriz de adyacencia es una representacin
razonable de un grafo.
3. Probar que si T1(n) = O(T2(n)), entonces DTIME(T1(n)) DTIME(T2(n)).
4. Probar que las funciones tiempo-construibles son totales y computables. Comentar
por qu la recproca podra no cumplirse.
5. Sea M una MTN que si acepta una cadena w, al menos en una de sus computaciones
la acepta en a lo sumo T(|w|) pasos, siendo T una funcin tiempo-construible. Probar
que L(M) NTIME(T(n)).
6. Probar que las funciones n2, 2n y n! son tiempo construibles, y que si T1 y T2 son
tiempo-construibles tambin los son T1 + T2, T1.T2, y 2T1.
Ricardo Rosenfeld y Jernimo Irazbal
115
DTIME(2n) DTIME(n2.2n).
ii.
9. Construir una MT M que genere los cdigos de todas las MT Mi tales que a partir de
<Mi> trabajan en tiempo exactamente T(|<Mi>|), siendo T una funcin tiempoconstruible.
10. Probar (mediante una reduccin desde HP) que no es decidible el problema de
determinar si un lenguaje L pertenece a una clase DTIME(T(n)), dados cualquier
lenguaje L y cualquier funcin tiempo-construible T.
116
Naturalmente, el camino mnimo entre i y j que no pasa por ningn vrtice mayor que
h+1, pasa o no pasa por el vrtice h+1. La siguiente MTD M, basada en la igualdad
anterior, trabaja en tiempo polinomial y reconoce el lenguaje SP (por shortest path o
camino mnimo) que representa el problema, siendo SP = {(G, v1, v2, K) | G es un grafo
y tiene un camino entre sus vrtices v1 y v2 de longitud a lo sumo K}. Dada una entrada
w = (G, v1, v2, K), M obtiene Am(v1, v2), el camino mnimo en G entre v1 y v2, y acepta
si y slo si Am(v1, v2) K. Se utilizan matrices Ai de m x m para almacenar los valores
que se van calculando:
Ricardo Rosenfeld y Jernimo Irazbal
117
Fin de Ejemplo
El siguiente es un ejemplo que considera una funcin de la clase FP. Corresponde al
clculo del mximo comn divisor de dos nmeros naturales. Es uno de los algoritmos
no triviales ms antiguos, atribuido a Euclides.
mcd(a, b) = mcd(b, r)
En base a esta idea se presenta la siguiente MTD M, que trabaja en tiempo polinomial.
M calcula en la variable x el valor mcd(a, b), con a b:
Computabilidad, Complejidad Computacional y Verificacin de Programas
118
Veamos que la MT M itera a lo sumo log b veces. Sean (ak1, bk1), (ak, bk), (ak+1, bk+1),
tres pares sucesivos calculados por M:
Fin de Ejemplo
Con el tercer y ltimo ejemplo de problema en P, volvemos a la satisfactibilidad en la
lgica. Vamos a considerar distintas variantes de dicho problema a lo largo de esta parte
del libro.
119
120
Fin de Ejemplo
La clase P es cerrada con respecto a la unin, interseccin y complemento, entre otras
operaciones entre lenguajes (la prueba queda como ejercicio). Adems de poblarla
mediante la construccin de MTD que trabajan en tiempo polinomial, otra manera es
utilizando reducciones de problemas, pero ahora acotadas temporalmente, como
veremos en la prxima clase.
Para comenzar con el anlisis de la clase NP, presentamos a continuacin un par de
ejemplos, que corresponden a problemas clsicos sobre grafos. Se prueba fcilmente
que pertenecen a NP, y no se les conoce resolucin determinstica polinomial.
121
Para probar que HC est en NP, construimos una MTN M que reconoce HC en tiempo
polinomial. Dada una entrada G = (V, E), M hace:
Se cumple HC = L(M).
G HC G tiene un circuito de Hamilton M genera en el paso 2 de alguna
computacin un circuito de Hamilton M acepta G G L(M).
Fin de Ejemplo
La forma de una MTN M que trabaja en tiempo polinomial, construida para demostrar
que L(M) pertenece a la clase NP, siendo L(M) la representacin de un problema (de
decisin), es siempre la misma. Dada una entrada w, M hace:
122
Enseguida vamos a presentar una definicin equivalente de la clase NP, relacionada con
esta ltima consideracin. La figura siguiente ilustra la forma de las MTN referida
recin:
1. Si w es invlida, rechaza.
123
Queda como ejercicio probar que CLIQUE = L(M), y que M trabaja en tiempo no
determinstico polinomial.
Fin de Ejemplo
Notar en el ltimo ejemplo que si K no formara parte de las entradas de la MT M, es
decir, si fuera una constante, entonces el problema estara en P: hay m! / ((m K)!.K!)
= O(nK) subconjuntos de K vrtices en V, y el chequeo de que los mismos constituyen
cliques se puede hacer en tiempo determinstico polinomial (podra discutirse de todos
modos si para un K muy grande, por ejemplo 1000, el tiempo de la MTD construida
puede considerarse aceptable).
Por otro lado, el complemento del lenguaje CLIQUE no parece estar ni siquiera en NP.
Sea NOCLIQUE = {(G, K) | G es un grafo que no tiene un clique de tamao K}. An
con la posibilidad del no determinismo, deberan recorrerse todos los subconjuntos de K
vrtices para aceptar o rechazar adecuadamente. No se conoce algoritmo no
determinstico polinomial para reconocer NOCLIQUE. De hecho se conjetura que la
clase NP no es cerrada con respecto al complemento. Si CO-NP es la clase de los
lenguajes complemento de los de NP, slo vamos a establecer por ahora que se cumple
P NP CO-NP
La prueba de esta inclusin queda como ejercicio. La relacin entre las clases NP y CONP se trata en la Clase 9.
Los algoritmos asociados a los problemas de NP de los que no se conocen resoluciones
eficientes se basan, como en los dos ejemplos precedentes, en explorar el espacio
completo de posibles soluciones, o al menos una parte amplia del mismo (en contraste
con lo que vimos en los algoritmos desarrollados al comienzo de la clase, que resuelven
problemas de P), lo que los lleva a consumir tiempo exponencial. Esta es una constante
observada en cientos de problemas de NP, en reas tan diversas como la teora de
grafos, el lgebra, la aritmtica, la teora de autmatas, la lgica, etc. Si se probara P =
NP se estara demostrando entonces que estos algoritmos de fuerza bruta pueden
Computabilidad, Complejidad Computacional y Verificacin de Programas
124
125
Fin de Teorema
Dos ltimas caracterizaciones que presentamos a continuacin sirven para comparar P y
NP. La primera de ellas se refiere al impacto que produce especializar y generalizar
problemas de NP. La especializacin de un problema de NP puede tener el efecto de
simplificarlo. Por ejemplo, en el caso del problema k-SAT, de satisfactibilidad de
frmulas booleanas en la forma normal conjuntiva con k literales por clusula, cuando k
= 2 el problema est en P, como ya demostramos en el Ejemplo 7.3. Por otro lado, en la
Computabilidad, Complejidad Computacional y Verificacin de Programas
126
127
manera, encontrando otra lgica para P se probara P NP. Si bien no han habido
avances en este sentido, nos parece ilustrativo extendernos un poco sobre esta cuestin,
en que se relacionan ntimamente los problemas sobre grafos, la lgica, y las clases P y
NP.
Ejemplos de frmulas de primer orden para expresar propiedades de grafos finitos G
son xG(x,x), xy(G(x,y) G(y,x)), y xyG(y,x), que expresan respectivamente
que G es reflexivo, simtrico, y que tiene un vrtice al que llegan arcos desde el resto.
Las frmulas no utilizan smbolos de funcin, y adems de la igualdad cuentan slo con
el smbolo de predicado binario G. Se prueba fcilmente que las frmulas de este tipo
se pueden chequear en tiempo determinstico polinomial:
No todos los problemas sobre grafos pertenecientes a la clase P se pueden expresar con
frmulas de primer orden. Un ejemplo es el problema de la alcanzabilidad (determinar
si existe un camino en un grafo de un vrtice x a un vrtice y). En este caso se debe
recurrir a una lgica de mayor expresividad, la lgica de segundo orden, que permite
agregar variables para funciones y predicados, y cuantificadores que operan sobre
dichas variables. Particularmente, las frmulas de la lgica existencial de segundo orden
tienen la forma P, siendo una subfrmula de primer orden. Por ejemplo, con la
frmula Pxy(G(x,y) P(x,y)) se puede expresar que G es un subgrafo del grafo P.
Por su parte, la frmula
Puvw((G(u,v) P(u,v)) P(u,u) ((P(u,v) P(v,w)) P(u,w)) P(x, y))
128
es decir que todo vrtice x es rojo, amarillo o verde, y ningn vecino de x puede tener su
mismo color. En realidad, como lo enuncia el Teorema de Fagin, todos los lenguajes de
NP y slo ellos se reducen a propiedades sobre grafos expresables con frmulas
existenciales de segundo orden. Ya vimos que, en cambio, no se puede relacionar de
esta manera a P con la lgica de primer orden. Otro lenguaje candidato en este ltimo
sentido es el de las frmulas de Horn de la lgica existencial de segundo orden, en que
el fragmento de primer orden de P cumple que:
129
Ejercicios de la Clase 7
1. Completar la prueba del Ejemplo 7.1.
2. Completar la prueba del Ejemplo 7.2.
3. Completar la prueba del Ejemplo 7.3.
4. Probar que la clase P es cerrada con respecto a la unin, la interseccin y el
complemento.
5. Probar que P NP CO-NP.
6. Sean f FP y L P. Probar que f 1(L) = {x | f(x) est en L} P.
7. Determinar si los siguientes lenguajes pertenecen a P:
i.
ii.
ii.
iii.
iv.
v.
vi.
130
i.
ii.
ISO = {(G1, G2) | G1 y G2 son grafos isomorfos}. Dos grafos son isomorfos
si son iguales salvo por los nombres de sus arcos (pares de vrtices).
13. Sea FNP el conjunto de las funciones computadas en tiempo polinomial por las
MTN (se asume que todas las computaciones calculan el mismo valor). Probar que P
= NP si y slo si FP = FNP.
14. Mostrar cmo enumerar las clases P y NP.
15. Una funcin f es honesta, si para toda cadena z de su codominio existe una cadena x
de su dominio tal que f(x) = z y |x| p(|y|), siendo p un polinomio. Se define adems
que dadas dos funciones f y g, g es una funcin inversa derecha de f si toda cadena
z del codominio de f cumple f(g(z)) = z. Probar que si una funcin tiene una funcin
inversa derecha computable en tiempo polinomial, entonces es honesta.
16. Sea f una funcin honesta computable en tiempo polinomial. Probar que existe una
MTN M que trabaja en tiempo polinomial tal que L(M) coincide con el codominio
de f.
131
Fin de Definicin
Como en las reducciones generales (las que no tienen cota temporal), en que si se
cumple L1 L2 entonces L2 es tan o ms difcil que L1 desde el punto de vista de la
computabilidad, con las reducciones polinomiales se puede establecer la misma
relacin, ahora desde el punto de vista de la complejidad temporal. Esto se formaliza en
el siguiente teorema.
132
Fin de Teorema
Como corolario del teorema, dados dos lenguajes L1 y L2, si L1 no est en P (NP), y
existe una reduccin polinomial de L1 a L2, entonces L2 tampoco est en P (NP). Por lo
tanto, podemos emplear tambin las reducciones polinomiales para probar que un
problema no est en la clase P o en la clase NP. Al igual que , la relacin P es
reflexiva y transitiva (la prueba queda como ejercicio). No es simtrica. Ya hemos
probado que para todo lenguaje recursivo L se cumple L LU y no se cumple LU L.
Para el caso P podemos considerar el mismo contraejemplo: la reduccin considerada
de L a LU es lineal (a partir de una entrada w se genera una salida (<M>, w), siendo M
una MT que reconoce L). El siguiente es un ejemplo de prueba de pertenencia a P por
medio de una reduccin polinomial.
133
Sea 2-COLORACIN = {G | G es un grafo tal que sus vrtices se pueden colorear con
2 colores de manera tal que dos vrtices vecinos no tengan el mismo color} el lenguaje
que representa el primer problema. El lenguaje 2-SAT, que representa el segundo
problema, se describi en el Ejemplo 7.3, en el que tambin se prob que est en P. Se
defini as: 2-SAT = { | es una frmula booleana satisfactible, en la forma normal
conjuntiva, con dos literales por clusula}. Vamos a demostrar que tambin 2COLORACIN est en P, reducindolo polinomialmente a 2-SAT.
Fin de Ejemplo
El siguiente es otro ejemplo de reduccin polinomial, esta vez entre dos problemas de
NP de los que no se conocen resoluciones eficientes.
134
Por su parte, se define TSP = {(G, B) | G es un grafo completo, sus arcos tienen
asociado un costo, y G tiene un circuito de Hamilton tal que la suma de los costos de sus
arcos es menor o igual que B}.
El lenguaje TSP (por travelling salesman problem o problema del viajante de comercio)
representa el problema del viajante de comercio, quien debe visitar un conjunto de
ciudades una sola vez y volver al punto de partida, de manera tal de no recorrer ms que
una determinada distancia. Para representar los costos de los arcos (en este caso
longitudes), despus de la representacin de cada arco agregamos un separador # y un
nmero natural en binario.
A continuacin probamos que HC P TSP.
Definicin de la funcin de reduccin.
Para grafos vlidos G se define
f(G) = (G, m)
donde G es un grafo completo con los mismos vrtices de G. Si (i, k) es un arco de G,
entonces su costo en G es 1, y si (i, k) no es un arco de G, entonces su costo en G es 2.
El nmero m es la cantidad de vrtices de G (y de G).
La figura siguiente ilustra la reduccin planteada:
135
Escribir V, luego E con costos 1, luego los arcos que no estn en E con costos 2,
y finalmente m, tarda O(n3).
Fin de Ejemplo
Se prueba fcilmente, construyendo una MTN que trabaja en tiempo polinomial, que
TSP NP. Por lo tanto, considerando el Teorema 8.1, la ltima reduccin es una prueba
alternativa a la que vimos en el Ejemplo 7.4 de que HC NP. No se conoce resolucin
determinstica polinomial para TSP; si existiera valdra que HC P. El problema del
viajante de comercio es tan o ms difcil que el problema del circuito de Hamilton, en
cuanto a su tiempo de resolucin.
Como veremos enseguida, por medio de las reducciones polinomiales podemos definir
una jerarqua temporal dentro de NP. Para estudiar la estructura interna de P, en cambio,
hay que recurrir a otro tipo de reduccin, al que haremos referencia en la clase
siguiente, porque en P siempre se puede reducir polinomialmente un lenguaje a otro.
Esto ya lo probamos en R considerando las reducciones generales. Teniendo en cuenta
ahora las reducciones polinomiales, se formula lo siguiente. Si L1 y L2 son dos lenguajes
cualesquiera de P, siendo L2 * y L2 , se cumple que L1 P L2: existe una MT que,
a partir de una entrada w perteneciente (no perteneciente) a L1, lo que puede determinar
en tiempo polinomial, genera una salida f(w) perteneciente (no perteneciente) a L2, lo
que puede efectuar en tiempo constante, escribiendo un elemento que est (no est) en
L2.
Habiendo presentado las reducciones polinomiales, podemos ahora introducir el
concepto de NP-completitud.
136
Fin de Definicin
Con el siguiente teorema se formaliza que los problemas NP-completos son los ms
difciles de NP.
137
Como esto vale para todo lenguaje L de NP, entonces NP P, y as: P = NP.
Fin de Teorema
Por lo tanto, asumiendo P NP, probar que un problema es NP-completo equivale a
condenarlo a estar en NP P. El problema, como cualquier otro de NPC, est entre
los ms difciles de NP, lo que se entiende porque resolverlo implica resolver cualquier
problema de NP.
Adems, demostrando que un problema NP-completo se resuelve en tiempo
determinstico T(n), se estara probando que NP DTIME(T(nk)). Por ejemplo, si T(n)
= nlog n, es decir tiempo no polinomial pero subexponencial, se cumplira la inclusin de
NP en DTIME(nk.log n).
La figura siguiente ilustra una primera versin de la estructura interna de NP,
asumiendo P NP:
138
139
Por cada uno de los (p(n) + 1)2 smbolos se va a crear en la frmula una variable
booleana cix, con i variando entre 0 y (p(n) + 1)2 1, y el subndice x variando
en el alfabeto . Que cix sea verdadera (falsa) va a representar que el i-simo
smbolo es (no es) x.
140
1,
141
Fin de Teorema
En la primera parte del libro indicamos que LU est entre los lenguajes ms difciles de
RE, porque todos los lenguajes de RE se reducen a l (por eso empleamos el trmino
RE-completo). Se cumple adems que LU es NP-difcil (no es NP-completo porque ni
siquiera es recursivo): todo lenguaje de NP se reduce linealmente a LU. Con esta ltima
consideracin se puede definir fcilmente otro lenguaje NP-completo, que presentamos
en el siguiente ejemplo. El lenguaje es igual a LU, salvo que las cadenas incluyen un
tercer componente, que es una cota temporal (justamente el lenguaje representa el
problema acotado de pertenencia).
142
Queda como ejercicio probar que L(MU-k) = LU-k y que MU-k trabaja en tiempo no
determinstico polinomial. Veamos que LU-k es NP-difcil. Si L NP y M es una MTN
con una cinta que reconoce L en tiempo polinomial p(n), sea f una funcin de reduccin
de L a LU-k definida por f(w) = (<M>, w, 1p(|w|)). Claramente, f es una funcin total de
FP, y adems w L si y slo si (<M>, w, 1p(|w|)) LU-k.
Fin de Ejemplo
Reduciendo polinomialmente (por ejemplo) desde SAT, podemos encontrar ms
lenguajes NP-completos, de una manera similar a cmo fuimos poblando las distintas
clases de la jerarqua de la computabilidad. Entonces se emplearon reducciones
generales, inicialmente a partir de LU y HP, por la negativa (se fueron encontrando
lenguajes no recursivos y no recursivamente numerables). Para poblar NPC, en cambio,
utilizaremos las reducciones polinomiales y por la positiva, como lo fundamenta el
siguiente teorema.
Dado que lo anterior vale para todo lenguale L de NP, entonces L2 es NP-difcil,
y como est en NP, tambin es NP-completo.
Fin de Teorema
Por ejemplo, el lenguaje CSAT, subconjunto de SAT cuyas frmulas estn en la forma
normal conjuntiva, es NP-completo: est en NP, y existe una reduccin polinomial de
SAT a CSAT. A partir de CSAT se puede probar que tambin el lenguaje 3-SAT,
subconjunto de CSAT cuyas frmulas tienen tres literales por clusula, es NP-completo.
Ricardo Rosenfeld y Jernimo Irazbal
143
Queda como ejercicio probar que la funcin de reduccin f es total y pertenece a FP, y
que CSAT si y slo si f() 3-SAT.
Fin de Ejemplo
La figura siguiente muestra los primeros representantes de la clase NPC:
144
145
La prueba de que VC est en NP queda como ejercicio. Para probar que es NP-difcil,
definimos una reduccin polinomial de 3-SAT a VC.
Todo par de vrtices de G creados a partir de dos literales de una misma clusula
de , se unen por un arco. A este enlace lo denominamos de tipo 1, como as
tambin a los tringulos resultantes.
Por ejemplo, la figura siguiente muestra el grafo que se genera a partir de la frmula
booleana = (x1 x2 x3) (x1 x2 x3):
146
Queda como ejercicio probar que la funcin de reduccin f es total y pertenece a FP.
Se cumple 3-SAT si y slo si (G, 2C) VC.
a. Si es una frmula de 3-SAT, y A es una asignacin de valores de verdad que
la satisface, entonces al menos un literal de toda clusula es verdadero.
Considerando A, el siguiente conjunto de vrtices V es un cubrimiento de
tamao 2C del grafo G construido. Todo vrtice asociado a un literal falso se
incluye en V, y si luego de esta inclusin hay tringulos de tipo 1 que no tienen
dos vrtices en V (caso de clusulas con dos o tres literales verdaderos),
entonces se agregan a V vrtices cualesquiera de dichos tringulos hasta
lograrlo. As se cumple que |V| = 2C. Tambin se cumple que V cubre G: los
enlaces de tipo 1 estn cubiertos porque V tiene dos vrtices de cada tringulo
de tipo 1, y los enlaces de tipo 2 estn cubiertos porque si un literal es verdadero,
entonces el literal negado es falso, y as el vrtice asociado a este ltimo
pertenece a V.
b. Si (G, 2C) est en VC, y V es un cubrimiento de 2C vrtices del grafo G
construido a partir de la frmula , entonces la siguiente asignacin de valores
de verdad A satisface . A los literales asociados a los vrtices que no estn en
V, les asigna el valor verdadero, y al resto les asigna valores consistentes
cualesquiera. La asignacin A satisface porque V tiene necesariamente dos
vrtices por tringulo de tipo 1, y as al menos un literal de cada clusula es
verdadero. Por otra parte, A no puede ser inconsistente, no puede suceder que un
literal sea verdadero en una clusula y el literal negado sea verdadero en otra,
porque si no, el enlace de tipo 2 asociado a ellos no estara cubierto por V.
Fin de Ejemplo
Una tercera tcnica, ms simple que las anteriores, consiste directamente en reducir un
problema a otro similar, como por ejemplo la reduccin polinomial que presentamos
antes de HC a TSP (Ejemplo 8.2). Se muestra a continuacin otra reduccin de este tipo,
que prueba que el problema del clique (presentado en el Ejemplo 7.5) es NP-completo.
147
148
Por otro lado, supongamos que GC no incluye, por ejemplo, el arco (i , h), siendo i y h
vrtices de V V. Entonces (i, h) es un arco de G, siendo i y h vrtices que no estn en
V, por lo que V no es un cubrimiento de vrtices de G (absurdo).
Fin de Ejemplo
Una variante de la ltima tcnica es la restriccin. Dado un problema nuevo L2, la idea
es mostrar que un problema conocido L1 es un caso especial de L2. Se definen
restricciones sobre las instancias de L2 para relacionarlas con las de L1. Por ejemplo, se
puede reducir por restriccin el problema CLIQUE al problema del isomorfismo de
subgrafos, que consiste en determinar, dados dos grafos G1 y G2, si G1 es isomorfo a un
subgrafo de G2 (ya definimos en el Ejercicio 12 de la clase anterior que dos grafos son
isomorfos cuando son iguales salvo por los nombres de sus arcos, que son pares de
vrtices). Otro ejemplo es la reduccin por restriccin que se puede definir de HC al
problema del circuito de Hamilton pero ahora en grafos orientados. Queda como
ejercicio construir ambas reducciones polinomiales.
Considerando los distintos grados de dificultad de ls tcnicas mencionadas (que no son
todas), una estrategia razonable para probar que un lenguaje L de NP es NP-completo,
es encontrar una reduccin polinomial de otro problema NP-completo a L:
Al igual que en P, los lenguajes de NPC estn ntimamente relacionados mediante las
reducciones polinomiales. Por definicin, todo lenguaje NP-completo se reduce
polinomialmente a otro. Dada una funcin de reduccin f entre dos lenguajes NPcompletos L1 y L2, no necesariamente f 1 debera ser una funcin de reduccin de L2 a
L1. De todos modos, se cumple que para todo par de lenguajes NP-completos conocidos
L1 y L2, existe una funcin de reduccin h de L1 a L2, tal que h1 es una funcin de
reduccin de L2 a L1. Se dice en este caso que L1 y L2 son polinomialmente isomorfos, o
directamente p-isomorfos. Ms precisamente, dada una reduccin polinomial f entre dos
lenguajes NP-completos conocidos L1 y L2, y una reduccin polinomial g entre L2 y L1,
149
Supongamos por el contrario que P = NP. Entonces P = NPC (el caso P NPC
se cumple porque todos los lenguajes de P se reducen polinomialmente entre s).
Pero entonces, como en NPC hay lenguajes finitos e infinitos, y no puede haber
un p-isomorfismo entre un lenguaje finito y un lenguaje infinito, no todos los
lenguajes NP-completos son p-isomorfos (absurdo).
Existe tambin una contra-conjetura, establecida por Joseph y Young, que enuncia que
podran existir lenguajes NP-completos (no naturales) no p-isomorfos a SAT.
Otra caracterizacin de la clase NPC relacionada con la anterior se refiere a la densidad
de los lenguajes NP-completos: todos los lenguajes NP-completos conocidos son
exponencialmente densos (o directamente densos), lo que significa que la cantidad de
sus cadenas de longitud a lo sumo n, para cualquier n, no se puede acotar por un
polinomio p(n) (los lenguajes que en cambio cumplen esta propiedad se denominan
polinomialmente densos, o tambin dispersos). Es interesante observar que si dos
lenguajes L1 y L2 son p-isomorfos por medio de una funcin h que se computa en
tiempo determinstico polinomial p(n), entonces sus densidades, digamos dens1(n) y
dens2(n), se relacionan polinomialmente:
150
Ejercicios de la Clase 8
1. Probar que las reducciones polinomiales de problemas son reflexivas y transitivas.
2. Una reduccin polinomial no determinstica f se define como una determinstica,
con el agregado de que alguna computacin de la MTN asociada debe calcular f(w)
a partir de la entrada w. Indicar si en este caso siguen valiendo la reflexividad y la
transitividad.
3. Completar la prueba del Teorema 8.1.
4. Dados dos lenguajes A y B distintos de y *, determinar si se cumple:
i.
Si B P, entonces A B P A.
ii.
Si B P, entonces A B P A.
151
ii.
13. Probar que los siguientes lenguajes o problemas son NP-completos. En cada caso
identificar adems la naturaleza del problema que dificulta encontrar un algoritmo
determinstico polinomial:
i.
ii.
iii.
iv.
v.
vi.
vii.
viii.
ix.
x.
152
15. Probar que 3-SAT es NP-completo, mediante una reduccin polinomial directa
desde SAT.
16. Probar que CLIQUE es NP-completo, mediante una reduccin polinomial directa
desde CSAT.
17. Probar que se puede reducir por restriccin:
i.
ii.
153
A = D B no pertenece a P
A se reduce polinomialmente a B
B no se reduce polinomialmente a A
154
Sea B NPC (asumiendo P NP, cumple la hiptesis de que est en EXP P).
155
G2. Por otro lado, la falta de redundancia en sus instancias no le sera suficiente al
problema de los grafos isomorfos para estar en P. Hay otros problemas de isomorfismos
(de grupos, subgrupos, etc.) que tambin son candidatos a pertenecer a NPI.
La factorizacin es otro problema candidato para estar en NPI. El problema de decisin
asociado consiste en determinar si un nmero natural n tiene un factor menor que un
nmero natural m. A pesar de que los problemas complementarios de primalidad y
composicionalidad estn en P (se demostr una dcada atrs), la factorizacin parece ser
ms difcil, sin llegar al extremo de la NP-completitud. En este caso, una explicacin de
por qu no sera tan difcil es que la factorizacin tambin est en CO-NP. La relacin
entre la NP-completitud y la pertenencia a NP CO-NP se trata en la seccin siguiente
(por lo pronto podemos comentar que, intuitivamente, teniendo ms informacin sobre
un problema de NP al saber que adems est en CO-NP, el problema se torna menos
difcil). Otra causa de la dificultad menor de la factorizacin, considerndola como
funcin, sera que siempre tiene solucin, por el Teorema Fundamental de la Aritmtica
(a modo de ilustracin, comparmosla por ejemplo con la funcin que obtiene una
asignacin de valores de verdad que satisface una frmula booleana: esta funcin,
asociada al problema NP-completo SAT, no siempre tiene solucin).
Una interesante caracterizacin de NPI se relaciona con la densidad de sus lenguajes.
Vimos que asumiendo P NP, los lenguajes NP-completos no pueden ser dispersos. En
cambio es plausible la existencia de este tipo de lenguajes en NPI.
156
BVAL es CO-NP-difcil: NOSAT (el problema complemento de SAT) es CONP-completo, y se reduce polinomialmente a BVAL mediante la funcin de
reduccin f() = . Por la transitividad de P se cumple el enunciado.
157
Hemos tratado hasta ahora con clases de complejidad temporal definidas en trminos de
MT, determinsticas o no determinsticas, que trabajan en tiempo polinomial. Y nos
hemos enfocado en un esquema segn el cual, probando que un problema es NPcompleto, se conjetura que el mismo no tiene resolucin eficiente. En los ejemplos
siguientes, en cambio, mostramos problemas que efectivamente no tienen resolucin
eficiente.
158
siendo p(n) un polinomio, y tambin clases de orden superior como 2-PEXP (tiempo
doble exponencial), donde el exponente del 2 no es un polinomio p(n) sino 2p(n). La
jerarqua exponencial contina con 3-PEXP, 4-PEXP, etc., y lo mismo se define en
trminos de tiempo no determinstico. Los ejemplos son:
159
Definiciones bsicas
Para el estudio de la complejidad espacial se utilizan MT con una cinta de entrada de
slo lectura, sobre la que el cabezal slo se mueve a lo largo de la cadena de entrada
(ms los dos smbolos blancos que la delimitan). El uso de una cinta de entrada de slo
lectura permite trabajar con orden espacial menor que lineal.
Se define que una MT M con una cinta de entrada de slo lectura y varias cintas de
trabajo, trabaja en espacio S(n) si y slo si para toda entrada w, tal que |w| = n, M utiliza
a lo sumo S(n) celdas en toda cinta de trabajo, en su nica computacin si es
determinstica o en cada una de sus computaciones si es no determinstica. De modo
160
similar se define una MT que trabaja en espacio O(S(n)). Cuando S(n) n se puede
utilizar directamente una MT con una cinta de entrada comn.
Un problema (o lenguaje) pertenece a la clase DSPACE(S(n)), si y slo si existe una
MTD con una cinta de entrada de slo lectura y varias cintas de trabajo que lo resuelve
(o reconoce) en espacio O(S(n)). La misma definicin vale para la clase NSPACE(S(n))
considerando las MTN.
La jerarqua espacial est incluida, al igual que la temporal, en la clase R. Si bien en las
definiciones anteriores no se explicita que las MT se detienen siempre, se prueba que si
existe una MT que trabaja en espacio S(n), entonces existe una MT equivalente que
trabaja en el mismo espacio y se detiene siempre. La prueba se basa en que en espacio
acotado slo puede haber un nmero finito de configuraciones distintas de una MT a
partir de una entrada (hemos presentado una prueba de este tipo en el Ejemplo 4.11).
Simplificando como en la jerarqua temporal, asumiremos que lo no polinomial es
exponencial, y hablaremos de ahora en ms de EXPSPACE (por espacio exponencial)
en lugar de R.
Las MT estndar empleadas para el estudio de la complejidad espacial son las MTD con
varias cintas. Segn la simulacin desarrollada en la primera parte del libro (ver
Ejemplo 1.5), el espacio consumido es el mismo utilizando MT con cualquier cantidad
finita de cintas. De esta manera no se pierde generalidad considerando MT con una sola
cinta de trabajo en las definiciones y demostraciones.
Volvemos una vez ms al problema de reconocimiento de palndromes (esta vez con un
separador en la mitad), para mostrar un ejemplo de MT que trabaja en espacio menor
que lineal.
161
Fin de Ejemplo
La clase DSPACE(log n) se conoce tambin como DLOGSPACE. La tcnica utilizada
en el ejemplo es tpica de la complejidad espacial. Se utilizan contadores que
representan posiciones de los cabezales, los contadores se representan en bases
adecuadas, en las cintas de trabajo se guardan slo pequeas subcadenas de la entrada,
etc. El siguiente es otro ejemplo en el que se observan estas caractersticas. Se refiere al
problema de la alcanzabilidad en un grafo, ya mencionado antes. En este caso lo vamos
a considerar en grafos orientados.
162
probar que el lenguaje est en NSPACE(log n). La siguiente MTN M, con un contador c
en la cinta de trabajo 3 que al comienzo vale 1, trabaja de la siguiente manera a partir de
una entrada w (como siempre, se asume que la cantidad de vrtices de un grafo es m):
Fin de Ejemplo
Cabe destacar que la alcanzabilidad en grafos no orientados se puede resolver en
espacio determinstico logartmico. La clase NSPACE(log n) se conoce tambin como
NLOGSPACE. Otro par de clases de complejidad que se distinguen en la jerarqua
espacial son PSPACE y NPSPACE. PSPACE es la clase de los problemas que se
resuelven en espacio determinstico polinomial, y NPSPACE es la clase de los
problemas que se resuelven en espacio no determinstico polinomial. Es decir:
PSPACE = i 0 DSPACE(ni)
NPSPACE = i 0 NSPACE(ni)
163
Como en el caso del tiempo, se trabaja con funciones S(n) de buen comportamiento,
denominadas ahora espacio-construibles. Cumplen que para toda entrada w, con |w| = n,
existe una MT que trabaja en espacio determinstico exactamente S(n). Considerando
espacio determinstico (pero lo mismo aplica al espacio no determinstico),
caractersticas relevantes de la jerarqua espacial son:
Existe una funcin total computable S(n) tal que DSPACE(S(n)) = PSPACE, por
aplicacin del ya referido Teorema de la Unin, ahora en el marco de la
complejidad espacial. De esta manera se prueba que la clase PSPACE est
incluida estrictamente en EXPSPACE.
164
En espacio S(n), una MT no puede ejecutar ms de cS(n) pasos sin repetir alguna
configuracin, siendo c una constante que depende de la MT.
porque si una MTD M1 trabaja en espacio O(log n), entonces existe una MTD M2
equivalente que trabaja en tiempo clog n = nlog c, siendo c una constante que depende de
M1. Los problemas de DLOGSPACE se pueden caracterizar por ser problemas de P con
resoluciones que consisten, bsicamente, en validaciones de propiedades sobre
componentes de sus instancias. Probaremos despus que los problemas de
NLOGSPACE tambin son tratables, es decir que
NLOGSPACE P
Por definicin, DLOGSPACE NLOGSPACE, y se conjetura que P incluye a ambas
clases estrictamente.
A diferencia de lo que sucede con el tiempo, pasar del no determinismo al determinismo
en el espacio impacta slo en un orden cuadrtico, lo que se formula en el Teorema de
Savitch, que establece que si L NSPACE(S(n)), siendo S(n) una funcin espacioconstruible que cumple S(n) log n, entonces L DSPACE(S2(n)). La demostracin
165
del teorema se basa en una tcnica tpica de la complejidad espacial, conocida como
mtodo de alcanzabilidad (porque se refiere a la bsqueda de un camino en un grafo).
Si M es una MTN que a partir de una entrada w trabaja en espacio S(n), sus
configuraciones se representan en espacio O(S(n)) por 4-tuplas que contienen la
posicin del cabezal en la cinta de entrada, la posicin del cabezal en la cinta de trabajo,
el estado corriente, y el contenido de la cinta de trabajo. Se van generando posibles
configuraciones de aceptacin C1, C2, etc., de la MTN M, y se chequea cada vez si se
alcanzan a partir de la configuracin inicial C0 en una cantidad de pasos mxima de
cS(n), siendo c una constante que depende de M. Si se alcanza alguna Ci entonces se
acepta, y en caso contrario se rechaza. El chequeo de alcanzabilidad desde C0 a cada Ci
se efecta mediante un procedimiento recursivo que permite, reutilizando espacio, no
efectuar ms de O(S(n)) invocaciones que ocupan no ms de O(S(n)) celdas cada una,
llegando as al impacto cuadrtico referido. Se requiere que S(n) log n, por la
representacin de la posicin del cabezal en la cinta de entrada. La generacin de las
distintas configuraciones de tamao O(S(n)) es factible, por ser S(n) espacio-construible
(esta propiedad hace posible definir cadenas de exactamente S(n) celdas). Por el
Teorema de Savitch, NSPACE (nk) DSPACE(n2k) para todo k 1, y as NPSPACE
PSPACE. Por lo tanto, como por definicin vale PSPACE NPSPACE, se cumple
PSPACE = NPSPACE
En la figura siguiente se presenta una sola jerarqua con las relaciones mencionadas
entre distintas clases de complejidad temporal y espacial:
166
Se cumplen entonces las siguientes relaciones (falta probar que NLOGSPACE P):
DLOGSPACE NLOGSPACE P NP PSPACE
167
significa que no pertenece a P, a menos que P = NP. El mismo criterio se puede aplicar
a cualquier clase de complejidad, haciendo referencia a un tipo determinado de
reduccin.
A propsito, otro tipo de reduccin til para considerar en este contexto es la reduccin
logartmica (en espacio), que es una m-reduccin entre dos lenguajes (o problemas),
computable en espacio determinstico logartmico. En este caso, ni la cinta de entrada ni
la cinta de salida de la MT que computa la reduccin, intervienen en el clculo del
espacio ocupado. Utilizaremos la expresin L1 log L2 para denotar que existe una
reduccin logartmica de L1 a L2. Y para simplificar la nomenclatura, emplearemos los
trminos poly-time y log-space para referirnos a las reducciones polinomiales y
logartmicas, respectivamente.
Claramente, toda reduccin log-space es una reduccin poly-time (queda como
ejercicio). De hecho, por ejemplo la reduccin utilizada en el Teorema de Cook para
probar que SAT es NP-completo es log-space: la frmula booleana construida es lo
suficientemente simple como para que la MT Mf que la genera slo haga uso
fundamentalmente del espacio necesario para contar hasta (p(n) + 1)2, que es O(log n).
Adems, la relacin log es reflexiva y transitiva. En este ltimo caso, no sirve como
prueba la composicin de dos MT M1 y M2 que trabajan en espacio determinstico
logartmico, porque a partir de una entrada w, con |w| = n, la salida de M 1 puede medir
O(nk), con k constante. Esta dificultad tcnica se resuelve del siguiente modo: M1 no
escribe toda la salida, sino que le pasa a M2 un smbolo por vez, cuando M2 lo necesita.
Otra propiedad de log es que las clases DLOGSPACE, NLOGSPACE, P, NP y
PSPACE son cerradas con respecto a las reducciones log-space, es decir que en cada
una de estas clases C vale que si L1 log L2 y L2 C, entonces L1 C (ya demostramos
antes que P y NP son cerradas con respecto a las reducciones poly-time).
Se define que un lenguaje (o problema) L es C-difcil con respecto a las reducciones
poly-time (respectivamente log-space) si y slo si para todo lenguaje (o problema) L de
la clase C se cumple que L P L (respectivamente L log L). Si L adems est en la
clase C, entonces es C-completo.
Con estas definiciones y enunciados podemos generalizar el razonamiento que
empleamos antes para analizar en particular la relacin entre P y NP: ante la sospecha
de que dos clases C1 y C2 cumplen que C1 C2 , entonces probar que un problema es
C2-completo significa que no pertenece a C1, a menos que C1 = C2. Por ejemplo:
168
169
Fin de Ejemplo
Como la alcanzabilidad en grafos orientados (y no orientados) se resuelve en tiempo
determinstico polinomial (por ejemplo empleando la tcnica de depth first search),
ahora podemos probar lo que nos faltaba, que NLOGSPACE P. Efectivamente, todo
lenguaje L de NLOGSPACE cumple L log O-ALCANZABILIDAD, y por lo tanto
tambin L P O-ALCANZABILIDAD. Como O-ALCANZABILIDAD est en P,
entonces por ser P cerrada con respecto a las reducciones poly-time se cumple que L
est en P.
Otro ejemplo de problema NLOGSPACE-completo es 2-SAT (en el Ejemplo 7.3
probamos que est en P). Se puede demostrar mediante los siguientes pasos (que no
desarrollamos):
Computabilidad, Complejidad Computacional y Verificacin de Programas
170
Hemos comentado antes que con las reducciones poly-time no podemos identificar la
subclase de los problemas ms difciles de P, porque todos los problemas de P se
reducen polinomialmente entre s. Lo mismo sucede en DLOGSPACE con respecto a
las reducciones log-space (la prueba queda como ejercicio). En cambio, con las
reducciones log-space podemos encontrar problemas P-completos, como se aprecia en
el ejemplo presentado a continuacin. Un circuito booleano es un grafo orientado sin
ciclos, tal que:
Cada compuerta v tiene asociado un tipo t(v) del conjunto {true, false, , , ,
x1, x2, }. Si t(v) est en {true, false, x1, x2, }, el grado de entrada de v es 0.
Si t(v) est en {}, el grado de entrada de v es 1. Y si t(v) est en {, }, el
grado de entrada de v es 2.
171
computar los valores de todas las compuertas, desde la entrada hasta la salida, consume
tiempo determinstico polinomial con respecto al tamao de C. Se prueba adems que el
problema es P-difcil con respecto a las reducciones log-space, por lo que CIRCUIT
VALUE es P-completo con respecto a este tipo de reduccin. Si en cambio la entrada de
C incluye variables, se define el problema CIRCUIT SAT (satisfactibilidad de circuito),
que consiste en determinar si existe una asignacin de valores de verdad a las
compuertas de entrada de C que hace que C compute el valor verdadero. En este caso el
problema es NP-completo con respecto a las reducciones log-space (es el anlogo a
SAT). Vamos a volver a los circuitos booleanos en la clase siguiente, cuando nos
refiramos a la clase NC de los problemas de resolucin polilogartmica en tiempo
paralelo.
Otro ejemplo de problema P-completo es la programacin lineal. Se indic antes que
est en P, y se prueba que existe una reduccin log-space de CIRCUIT VALUE a dicho
problema.
El problema QBF (por quantified boolean formulas, o frmulas booleanas
cuantificadas) consiste en determinar si una frmula booleana con cuantificadores y sin
variales libres es verdadera. Se prueba que es PSPACE-completo con respecto a las
reducciones poly-time. El lenguaje que representa el problema es QBF = { | es una
frmula booleana con cuantificadores, no tiene variables libres, y es verdadera}. Notar
que una frmula booleana sin cuantificadores, y con variables x1, , xk, es
satisfactible si y slo si la frmula booleana x1x2x3xk () es verdadera, por lo
que QBF generaliza SAT (de hecho tambin se lo denomina QSAT), y as es NP-difcil
con respecto a las reducciones poly-time. A QBF no se le conoce resolucin que tarde
tiempo no determinstico polinomial. Por ejemplo, dada la frmula = xyz (x y
z), no alcanza con chequear una asignacin de valores de verdad, sino que hay que
considerar las 23 posibilidades. La prueba de que QBF PSPACE se basa en la
construccin de una funcin recursiva Eval que trabaja de la siguiente manera (para
simplificar la notacin, usamos 1 en lugar del valor verdadero y 0 en lugar del valor
falso):
1. Eval(1) = 1 y Eval(0) = 0
2. Eval(, ) = Eval( )
3. Eval(1, 2, ) = Eval(1) Eval(2) (el se define de manera similar)
4. Eval(, x) = Eval([x | 1]) Eval([x | 0])
Computabilidad, Complejidad Computacional y Verificacin de Programas
172
Dos jugadores, el blanco y el negro, alternan sus jugadas, uno tras otro,
impactando sobre un tablero de n x n (u otra estructura, como por ejemplo un
grafo). La primera jugada es del blanco.
a la
configuracin Ck 1, tal que para todas las jugadas del negro de la configuracin
Ck 1 a la configuracin Ck, la configuracin Ck es ganadora para el blanco, con
k = O(nc) para alguna constante c.
En esta gama de juegos se incluye el juego de geografa. En este caso, el blanco elige
una ciudad, luego el negro elige otra ciudad cuyo nombre empieza con la letra con la
que termina el nombre de la ciudad anterior (no se pueden repetir ciudades), luego sigue
el blanco de la misma manera, y as sucesivamente hasta que un jugador no tiene ms
ciudades para elegir y pierde. El problema se puede formular en trminos de un grafo
Ricardo Rosenfeld y Jernimo Irazbal
173
orientado, tal que sus vrtices representan ciudades y existe un arco del vrtice v1 al
vrtice v2 si la ltima letra del nombre de la ciudad de v1 coincide con la primera letra
del nombre de la ciudad de v2. Se prueba que el problema se resuelve en espacio
determinstico polinomial, y que existe una reduccin poly-time de QBF al mismo.
El mismo problema QBF puede ser visto como un juego. Asumiendo sin perder
generalidad que las frmulas de QBF tienen la forma x1x2x3Qxk (), con Q =
o segn k sea impar o par, respectivamente, se puede tomar a y como dos
jugadores. El jugador mueve primero. La jugada i consiste en asignar un valor de
verdad a la variable xi de la frmula (si k es impar la hace , y si k es par la hace ).
El jugador intenta que la frmula resulte verdadera, mientras que su contrincante
intenta que resulte falsa. Obviamente, despus de k jugadas alguno de los dos gana.
Otros ejemplos clsicos de juegos PSPACE-completos los constituyen el juego de las
damas, el go y el hexgono. Para su estudio, los juegos se generalizan a tableros de n x
n, y el nmero de jugadas se acota con un polinomio p(n) (este esquema no resulta
naturalmente aplicable al ajedrez, en el que las reglas de terminacin producen partidas
exponencialmente prolongadas, y el tamao del tablero y las distintas categoras de las
piezas constituyen una parte esencial de la definicin del juego).
La figura siguiente es una fotografa ampliada del solapamiento de las jerarquas
temporal y espacial graficado previamente, ahora incorporando algunos de los
problemas completos mencionados:
174
Ejercicios de la Clase 9
1. Sea el problema de determinar, dados dos grafos G1 y G2, si G1 tiene un circuito de
Hamilton y G2 no. Indicar si el problema pertenece a CO-NP.
2. Probar que si un problema es NP-completo, entonces su complemento es CO-NPcompleto.
3. En la Clase 9 se estableci que si L es un lenguaje NP-completo y est en CO-NP,
entonces NP = CO-NP, y se prob el caso NP CO-NP. Probar que CO-NP NP.
4. Probar que si A es un lenguaje espejo (ver definicin en el Ejercicio 6 de la Clase 4)
y est en NPC, entonces NP = CO-NP.
5. Una MT no determinstica fuerte es una MT no determinstica tal que cada una de
sus computaciones puede terminar en el estado de aceptacin, de rechazo o
indefinido (no se sabe la respuesta). Una MT M de este tipo reconoce un lenguaje L
si cumple lo siguiente: si w L, entonces todas sus computaciones terminan en el
estado de aceptacin o indefinido, y al menos una lo hace en el estado de
aceptacin; y si w L, entonces todas sus computaciones terminan en el estado de
rechazo o indefinido, y al menos una lo hace en el estado de rechazo. Dada una MT
no determinstica fuerte M que trabaja en tiempo polinomial, probar que L = L(M) si
y slo si L NP CO-NP.
6. Probar (basndose en los conceptos de certificado suscinto y descalificacin
suscinta) que la factorizacin, en su forma de problema de decisin, est en NP
CO-NP.
7. Sea f una funcin de los enteros de longitud k a los enteros de longitud k,
computable en tiempo polinomial y tal que f
no es computable en tiempo
polinomial. Probar que el lenguaje de pares {(x, y) | f 1(x) < y} pertenece a la clase
(NP CO-NP) P.
8. Justificar:
i.
Si una funcin espacial S cumple para toda cadena w que S(|w|) |w|,
entonces no hace falta recurrir al modelo de MT con una cinta de entrada de
slo lectura.
175
ii.
Las MT con una cinta de entrada de slo lectura pueden ser tambin las MT
estndar en el marco de la complejidad temporal.
ii.
iii.
12. Probar que al igual que la jerarqua temporal, la jerarqua espacial es densa: si S(n)
es una funcin total computable entonces existe un lenguaje recursivo L tal que L
DSPACE(S(n)).
13. Completar la prueba del Ejemplo 9.1.
14. Completar la prueba del Ejemplo 9.2.
15. Probar:
i.
ii.
NLOGSPACE PSPACE.
iii.
NP CO-NP PSPACE.
ii.
18. Probar:
i.
ii.
176
iii.
iv.
de
Immerman,
entonces
O-ALCANZABILIDADC
tambin
es
177
Hemos trabajado hasta ahora con el subconjunto de los problemas de decisin. Los
problemas ms generales son los de bsqueda, el tema de esta seccin, los cuales se
resuelven por MT que no slo aceptan cuando una instancia tiene solucin, sino que
adems generan una. Por ejemplo, en el caso del problema de bsqueda asociado a
SAT, la resolucin consiste en generar una asignacin de valores de verdad A que
satisface una frmula booleana , o responder que no hay solucin si no es
satisfactible.
Analizar la complejidad computacional temporal en trminos de los problemas de
decisin nos facilit la presentacin de los temas, y sin perder en esencia generalidad al
focalizarnos en la cuestin de su resolucin eficiente o ineficiente. Es que de la
imposibilidad de determinar eficientemente la existencia de una solucin se puede
inferir la imposibilidad de encontrar eficientemente alguna. Por ejemplo, asumiendo P
NP, encontrar una asignacin A que satisface una frmula no puede tardar tiempo
determinstico polinomial, porque SAT es NP-completo: si existe un algoritmo que
eficientemente encuentra A o responde que no hay solucin, entonces SAT se puede
resolver tambin eficientemente invocando a dicho algoritmo (absurdo si P NP). El
mismo razonamiento se puede aplicar sobre una tercera clase de problemas, los
problemas de enumeracin, que consisten en calcular la cantidad de soluciones de las
instancias.
Se identifica con FNP a la clase de los problemas de bsqueda tales que los problemas
de decisin asociados estn en NP. La F de FNP se debe a que a estos problemas
tambin se los conoce como problemas de funcin (function problems). Si bien una
instancia puede tener varias soluciones, se acostumbra a emplear en la literatura esta
denominacin. Anlogamente, FP ahora no slo ser la clase de las funciones
computables en tiempo determinstico polinomial, sino que tambin incluir a los
problemas de bsqueda tales que los problemas de decisin asociados estn en P.
Vamos a considerar solamente problemas de bsqueda con soluciones de tamao
polinomial con respecto al de sus instancias, porque de lo contrario no podran
resolverse eficientemente.
178
179
Fin de Ejemplo
As, SAT es Cook-reducible a FSAT y FSAT es Cook-reducible a SAT. Se dice en este
caso que los problemas son polinomialmente equivalentes (comparar con la definicin
de problemas recursivamente equivalentes que se formula en el Tema 5.4).
Efectivamente, acabamos de probar que SAT y FSAT son igualmente difciles. Tambin
se define que FSAT es auto-reducible: es Cook-reducible al problema de decisin
asociado (hay otra acepcin de auto-reducibilidad, restringida a las Cook-reducciones
de los problemas de decisin a s mismos, de modo tal que las invocaciones al orculo
deben hacerse con cadenas ms pequeas que las instancias; por ejemplo, SAT es autoreducible considerando esta definicin alternativa). La auto-reducibilidad es una
propiedad de muchos problemas de bsqueda naturales, entre ellos todos los problemas
FNP-completos, lo que confirma la relevancia del estudio de los problemas de decisin.
Un ejemplo de problema de bsqueda auto-reducible no FNP-completo sera el de los
grafos isomorfos.
El siguiente es otro ejemplo de aplicacin de las Cook-reducciones, ahora referido a un
problema de optimizacin, FTSP, la versin del problema del viajante de comercio en
que hay que encontrar el recorrido mnimo.
180
reducible a FTSP (queda como ejercicio). Probamos a continuacin que tambin existe
una Cook-reduccin de FTSP a TSP. Vamos a construir una MTD MTSP que resuelve
FTSP en tiempo polinomial. A partir de un grafo vlido G, MTSP hace:
Fin de Ejemplo
De esta manera, FTSP y TSP son polinomialmente equivalentes. En realidad, esta
equivalencia se generaliza a todos los problemas de bsqueda de un ptimo (mximo o
mnimo) con respecto a los problemas asociados de bsqueda o de decisin con una cota
o umbral (threshold), lo que no es del todo intuitivo, porque los problemas de bsqueda
de un ptimo no necesariamente estn en FNP (verificar una solucin ptima no es lo
mismo que verificar una solucin cualquiera).
Otra tcnica clsica para el estudio de la complejidad temporal de los problemas de
bsqueda la constituyen las aproximaciones polinomiales, justamente ante la
imposibilidad de encontrar ptimos eficientemente (sustentada por la NP-completitud
de los problemas de decisin asociados). La idea es construir un algoritmo eficiente que
produzca una solucin buena, cercana al ptimo segn un criterio determinado. En el
ejemplo siguiente se presenta una aproximacin polinomial para FVC, el problema de
bsqueda del cubrimiento de vrtices mnimo de un grafo.
181
Fin de Ejemplo
Dado un problema de bsqueda, si llamamos opt(w) a la solucin ptima de una
instancia w, y m(M(w)) a la medida de la solucin M(w) obtenida por una aproximacin
polinomial M para el problema, se define el error relativo de M de la siguiente
manera. Para todo w:
= |m(M(w)) opt(w)| / max(m(M(w)), opt(w))
Notar que el valor de vara entre 0 y 1. En el ejemplo anterior, entonces, se cumple
que 1/2 (se dice que el algoritmo construido es una 1/2-aproximacin polinomial).
Obviamente, el objetivo es encontrar aproximaciones polinomiales con un error relativo
lo ms pequeo posible, que se conoce como umbral de aproximacin. Si el umbral de
aproximacin est cerca del 0 significa que la solucin se puede aproximar al ptimo
arbitrariamente, y si est cerca del 1, que no hay aproximacin polinomial posible. Se
prueba que si P NP, entonces existen problemas no aproximables.
182
Los enunciados referidos a los pares de clases P y NP, NP y CO-NP, EXP y NEXP, etc.,
se pueden relativizar por medio de los orculos. Por ejemplo, si PL y NPL son las clases
de los lenguajes reconocibles por MTD y MTN, respectivamente, con orculo L, que
trabajan en tiempo polinomial, entonces PL NPL es una conjetura relativizada.
Conjeturas como sta pueden servir para probar conjeturas no relativizadas. Siguiendo
con el ejemplo, si valiese PL NPL, entonces un camino para probar P NP podra
consistir en refinar en varios pasos el orculo L hasta llegar a uno tan trivial que nos
permita formular la conjetura no relativizada. Se han probado enunciados en esta
direccin, como los siguientes:
183
La relativizacin permite adems entender qu tcnicas pueden servir para encarar las
pruebas de las conjeturas. Por ejemplo, se prueba que existen orculos A y B tales que
PA = NPA y PB NPB (Teorema de Baker, Gill y Solovay). Por lo tanto, toda tcnica a
emplear para encontrar la relacin entre P y NP debe ser no relativizable, es decir, debe
tener la propiedad de que lo que pruebe sin orculos no necesariamente deba valer con
orculos. Ms precisamente, si se probara por diagonalizacin que P NP, la misma
demostracin aplicara utilizando orculos, pero como existe un orculo A tal que PA =
NPA, entonces concluimos que la diagonalizacin no es un camino vlido para
demostrar la conjetura. Lo mismo ocurre con la tcnica de simulacin pero ahora para
probar P = NP, por existir un orculo B tal que PB NPB. En cambio, una aproximacin
no relativizable podra ser encontrar alguna propiedad algebraica en P que no se cumpla
en NP. Se presenta a continuacin un ejemplo sencillo de relativizacin (parte del
teorema recin mencionado).
NPQBF PSPACE. Sea L NPQBF y M1QBF una MTN que reconoce L en tiempo
polinomial. Dada una entrada w, M1QBF efecta en cada computacin un nmero
polinomial de invocaciones a QBF. Toda vez, el tamao de la pregunta es
polinomial con respecto al tamao de w. La siguiente MTD M2 reconoce L en
espacio polinomial: simula M1QBF computacin por computacin reutilizando
184
espacio, toda invocacin a QBF la reemplaza ejecutando una MTD que reconoce
QBF en espacio polinomial, y acepta si y slo si alguna computacin acepta.
Queda como ejercicio probar que L(M2) = L y que M2 trabaja en espacio
determinsitico polinomial.
PSPACE PQBF. Sea L PSPACE y Mf una MTD que computa una reduccin
polinomial de L a QBF (posible porque QBF es PSPACE-completo). La
siguiente MTD M3QBF reconoce L en tiempo polinomial: dada una entrada w,
ejecuta Mf para calcular f(w), invoca al orculo QBF con f(w), y acepta si y slo
s el orculo acepta. Queda como ejercicio probar que L(M3QBF) = L y que
M3QBF trabaja en tiempo determinsitico polinomial.
Fin de Ejemplo
Notar que la relativizacin anterior vale para cualquier lenguaje PSPACE-completo, y
entonces se puede formular que PL = NPL para todo orculo L que sea PSPACEcompleto.
Por medio de los orculos tambin se puede definir otra jerarqua de complejidad, til
para clasificar importantes problemas. Dicha jerarqua se solapa con la jerarqua
espacio-temporal presentada en la clase anterior, cubriendo la franja de P a PSPACE, y
se denomina jerarqua polinomial. Por cmo se formula, se la considera la jerarqua
anloga a la jerarqua aritmtica o jerarqua de Kleene de la computabilidad, en la que
en cada nivel se definen problemas indecidibles ms difciles que en el nivel anterior.
Sea PNP la clase de todos los lenguajes reconocidos en tiempo determinstico polinomial
por MT con un orculo de NP (en realidad es lo mismo si se fija un nico orculo NPcompleto, por ejemplo SAT). De la misma manera se definen NPNP y CO-NPNP. La
jerarqua polinomial es el siguiente conjunto infinito de clases de lenguajes kP, kP y
kP:
185
186
187
1. Si m es par, acepta.
2. Hace x := random(1, m 1).
3. Si x es un testigo de composicionalidad, acepta, y en caso contrario, rechaza.
La funcin random(1, m 1) selecciona aleatoriamente un nmero entre 1 y m 1. Se
prueba que se puede determinar eficientemente si x es un testigo de composicionalidad.
Notar que si m es primo, todas las computaciones de M rechazan, y as la probabilidad
de error es cero, y si m es compuesto, al menos la mitad de las computaciones de M
aceptan, por lo que la probabilidad de error en este caso es a lo sumo 1/2.
Fin de Ejemplo
Siguiendo con la mquina RP M del ejemplo, la probabilidad de error para determinar si
un nmero es compuesto se puede achicar arbitrariamente de la siguiente manera:
188
189
Los algoritmos de este tipo, en que puede haber adems de aceptacin y rechazo una
respuesta indefinida, se conocen como algoritmos de Las Vegas (para diferenciarlos de
los otros, que se denominan algoritmos de Monte Carlo). Las mquinas probabilsiticas
correspondientes se denominan ZPP (por zero probabilistic polynomial time, o tiempo
polinomial probabilstico con cero probabilidad de error), lo mismo que la clase de
problemas asociada, definida entonces como ZPP = RP CO-RP. Claramente, se
cumple que P ZPP (la prueba queda como ejercicio).
El ltimo tipo de MT probabilstica que vamos a presentar es la mquina BPP (por
bounded probabilistic polynomial time, o tiempo polinomial probabilstico acotado). Se
define de la siguiente manera:
Es decir que esta mquina es otra variante de los algoritmos de Monte Carlo. Acepta por
clara mayora o rechaza por clara mayora. Como en el caso de las mquinas RP, se
puede modificar su definicin sin alterar la clase de problemas BPP asociada (la
fraccin 3/4 se puede reemplazar por cualquier otra mayor que 1/2). Y al igual que con
las mquinas RP y ZPP, se pueden obtener probabilidades de error muy bajas iterando
una cantidad polinomial de veces. Se cumple que RP BPP PP (la prueba queda
como ejercicio).
Integrando las relaciones entre las clases probabilsticas mencionadas anteriormente,
queda:
P ZPP RP BPP PP
P ZPP RP NP PP
190
191
del peor caso (por ejemplo, no es razonable permitir que la mitad de los mensajes
encriptados sean fcilmente decodificados). De esta manera se maneja una acepcin
ms restringida de funcin one-way, en que se requiere entre otras cosas que la
ejecucin de la funcin inversa sea ineficiente para un alto porcentaje de las cadenas, y
que los algoritmos involucrados sean probabilsticos en lugar de determinsticos.
192
paralelo puede simularse por uno secuencial, entonces el costo total del primero
no puede ser menor que el mejor tiempo del segundo. De esta manera, el
paralelismo no puede resolver eficientemente ningn problema NP-completo,
asumiendo P NP: costo total exponencial con tamao polinomial implica
profundidad exponencial.
193
Ejercicios de la Clase 10
1. Probar que las Cook-reducciones son reflexivas y transitivas.
2. Completar la prueba del Ejemplo 10.2.
Computabilidad, Complejidad Computacional y Verificacin de Programas
194
A es Cook-reducible a B.
ii.
AC es Cook-reducible a B.
iii.
A es Cook-reducible a BC.
iv.
AC es Cook-reducible a BC.
ii.
13. Probar que las clases RP y BPP son cerradas con respecto a la interseccin y la
unin.
14. Probar que las clases ZPP, RP, BPP y PP son cerradas con respecto a las
reducciones polinomiales.
15. Probar:
i.
195
ii.
RP NP PP.
iii.
16. Probar que a partir de una MTD M que trabaja en tiempo T(n), se puede construir en
espacio logartmico una familia de circuitos booleanos de tamao O(T2(n)) que
reconoce L(M).
17. Considerando el ejercicio anterior, probar que CIRCUIT VALUE es P-completo con
respecto a las reducciones log-space, como se indic previamente. Probar adems
que la P-completitud de CIRCUIT VALUE sigue valiendo an con la restriccin de
que las compuertas de los circuitos booleanos sean slo de tipo o bien .
196
197
198
199
Gabarr, 1988), (Balczar, Daz & Gabarr, 1990) y (Goldreich, 2008). Otra lectura
recomendada es (Gasarch, 2012). Este artculo presenta una encuesta realizada
recientemente a ms de ciento cincuenta referentes de la teora de la complejidad,
preguntando fundamentalmente por la relacin entre las clases P y NP y con qu
tcnicas y en qu momento se resolver la conjetura (en uno u otro sentido). Adems se
compara la encuesta con una similar realizada diez aos atrs. De los resultados se
destaca que el 83% opin que P NP (en 2002 el porcentaje fue del 61%), y el 9% que
P = NP (en este caso fue el mismo guarismo que en 2002). Por otro lado, el 53% opin
que el problema se resolver antes del ao 2100 (en la encuesta anterior el porcentaje
fue del 62%, lo que marca una tendencia pesimista, en contraposicin a lo que se
perciba en los primeros aos despus de los trabajos de Cook, Karp y Levin). Con
respecto al modo de resolucin, la mayora consider que se basar en tcnicas hoy
desconocidas, y el resto de las opiniones se repartieron esencialmente entre la lgica, la
geometra computacional y la combinatoria. Todos los que consideraron que el
problema se resolver va un algoritmo indicaron que P = NP, y que la prueba se
encontrar ms temprano que tarde. Tambin es para remarcar que hubo ms opiniones
negativas que positivas en cuanto a la importancia de la computacin cuntica en esta
cuestin, y que la mayora opin que el problema del isomorfismo de grafos est en P y
el de la factorizacin fuera de P. A propsito, recin hace unos pocos aos (Agrawal,
Kayal & Saxena, 2004) se prob que el problema de primalidad est en P; en verdad, en
1976 ya se haba encontrado un algoritmo eficiente para resolver el problema, pero
asumiendo la Hiptesis de Riemann, otro de los problemas del milenio segn el Clay
Mathematics Institute.
Se detallan a continuacin las referencias bibliogrficas mencionadas previamente:
200
Edmonds, J. (1965). Paths, trees, and flowers. Canad. J. Math, 17(3), 449467.
201
Gasarch, W. (2012). The second P =? NP poll. ACM SIGACT News, 43(2), 5377.
Immerman,
N.
(1988).
Nondeterministic
space
is
closed
under
202
Solovay, R. & Strassen,V. (1977). A fast Monte-Carlo test for primality. SIAM
Journal on Computing, 6, 84-85.
203
204
205
206
207
Las constantes booleanas son true (por verdadero) y false (por falso). La semntica de
PLW es la habitual (la definicin formal la presentamos enseguida):
208
Fin de Definicin
Por ejemplo, el siguiente programa PLW obtiene en una variable y, el factorial de una
variable x > 0:
Sfac :: a := 1 ; y := 1 ;
while a < x do
a := a + 1 ; y := y . a
od
209
El otro caso base corresponde a las variables. A diferencia de las constantes, los valores
de las variables no son fijos sino que se asignan a partir de estados. Un estado es una
funcin que asigna a toda variable un valor de su tipo, en este caso un nmero entero
(puede verse como una instantnea de los contenidos de las variables de un
programa). La expresin (x) denota el contenido de la variable x segn el estado , y el
conjunto de todos los estados se denota con .
La semntica del resto de las expresiones se establece a partir de la semntica de sus
componentes. Formalmente, definimos la semntica de todas las expresiones de PLW
mediante funciones semnticas S(e) y S(B), que a partir de un estado asignan valores
del tipo correspondiente de la siguiente manera:
1. S(n)() = n, para todo n, siendo el n de la derecha el nmero entero denotado por
el numeral n de la izquierda.
2. S(true)() = verdadero. De manera similar se define para false.
3. S(x)() = (x), para toda variable x.
4. S(e1 + e2)() = S(e1)() + S(e2)(). De manera similar se define para la resta, la
multiplicacin, etc. Por su parte, S(if B then e1 else e2 fi)() = S(e1)() si S(B)()
= verdadero, o S(e2)() si S(B)() = falso.
5. S(e1 = e2)() = (S(e1)() = S(e2)()), que es verdadero o falso. De manera similar
se define para el menor, el mayor, etc.
6. S(B)() = S(B)(). De manera similar se define para la disyuncin, la
conjuncin, etc.
Fin de Definicin
Dado que trabajaremos con interpretaciones fijas, es decir que los dominios semnticos
no van a variar (recin en la Clase 14 haremos algunas generalizaciones), podemos
Computabilidad, Complejidad Computacional y Verificacin de Programas
210
abreviar S(e)() con (e), y S(B)() con (B), y as aplicar estados directamente sobre
expresiones. Para denotar que una variable x tiene un valor particular n en un estado ,
se utiliza la expresin [x | n], lo que se conoce como variante de un estado, til para
definir despus la semntica de la instruccin de asignacin. Formalmente, dadas dos
variables x e y, se define:
[x | n](x) = n
[x | n](y) = (y)
211
Fin de Definicin
De ahora en ms abreviamos [x | (e)] con [x | e]. Como se aprecia en la definicin:
212
De modo similar se pueden desarrollar las formas de las computaciones del resto de las
instrucciones (queda como ejercicio). En el ejemplo siguiente mostramos la forma de la
computacin de un programa PLW muy simple.
Fin de Ejemplo
Notar en el ejemplo que las expresiones de la forma [x | a][x | b] se reemplazaron por
[x | b]. Queda como ejercicio demostrar la igualdad de ambas expresiones.
Para simplificar la presentacin no contemplamos la posibilidad de falla de un programa
PLW, es decir que termine incorrectamente, por ejemplo por la ejecucin de una
divisin por cero (asumimos convenciones del tipo (x / 0) = 0 y (z mod 0) = (z)).
Otro ejemplo de falla es una violacin de rango si se utilizan arreglos. Si se incluyera la
posibilidad de falla se debera considerar un estado de falla f, y definir que si val((S,
)) = f, entonces val((S ; S, )) = f para todo programa S (es decir que la falla se
propaga).
Ricardo Rosenfeld y Jernimo Irazbal
213
214
Fin de Definicin
Adems de la visin sintctica de una asercin, existe una visin semntica: el conjunto
de estados que denota, o en otras palabras, todos los estados que la satisfacen. As, la
asercin true denota el conjunto de todos los estados, es decir , y la asercin false
denota el conjunto vaco de estados, es decir . Expresado de otra manera:
215
Hay que tener cuidado cuando las variables que sustituyen a otras no estn libres en las
aserciones. Por ejemplo, la sustitucin p[x | z] no puede aplicarse de la siguiente
manera:
z: z z x: (x > u)
Esta asercin es falsa. El mecanismo de sustitucin establece en este caso que antes
debe renombrarse la variable cuantificada (en el ejemplo, la variable z) con una nueva
variable. De esta manera, utilizando una variable w, la asercin p[x | z] resulta
w: z w x: (x > u)
Por su parte, e[x | e] denota la sustitucin en la expresin e de todas las ocurrencias de
la variable x por la expresin e.
Una importante propiedad de las sustituciones se formula en el Lema de Sustitucin, al
cual recurriremos ms adelante. Establece que
[x | e] |= p |= p[x | e]
216
es satisfecha por cualquier programa que duplica su entrada x. En este caso x es una
variable de programa, mientras que X se conoce como variable de especificacin
(tambin se la llama variable lgica). Las variables de especificacin sirven para
congelar contenidos de variables de programa, las cuales pueden tener distintos
contenidos al comienzo y al final. Por no ser variables de programa, las variables de
especificacin no pueden ser accedidas ni modificadas. Notar en el ejemplo que el
conjunto de estados iniciales denotado por la precondicin p = (x = X) es todo . Si por
ejemplo z es una variable de un programa que satisface , el hecho de no mencionarla
en la precondicin significa que inicialmente puede tener cualquier valor. Supongamos
ahora que se pretende especificar un programa que termine con la condicin x > y. Una
posible especificacin es
1 = (x = X y = Y, x y)
217
satisfecha por todo programa que incrementa en uno su entrada x, la variable X puede
tener cualquier valor. Si una variable de especificacin X aparece libre en la
precondicin y la postcondicin y se instancia con una expresin, sta no debe incluir
variables de programa, para asegurar que se instancie siempre el mismo valor. Por
ejemplo, es errneo instanciar la especificacin anterior de la siguiente manera:
= (x = x, x = x + 1)
La especificacin no es satisfecha por ningn programa. Sucede que los valores de x
en a la izquierda y a la derecha son distintos. El ltimo ejemplo que presentamos por
ahora muestra cmo an en casos muy sencillos, se pueden plantear especificaciones
errneas (por el empleo de aserciones demasiado dbiles, por ignorar que las variables
de entrada se pueden modificar a lo largo de la ejecucin de un programa, etc).
Fin de Ejemplo
218
219
Consideramos las dos propiedades bsicas que debe cumplir un programa secuencial
para ser correcto, correctitud parcial y terminacin, que en conjunto conforman su
correctitud total (en el caso de los programas concurrentes se tienen en cuenta ms
propiedades, como la ausencia de deadlock, la exclusin mutua y la ausencia de
inanicin).
220
|= p (val((S, )) val((S, )) |= q)
Es decir, S es totalmente correcto con respecto a (p, q), si y slo si a partir de cualquier
estado que satisface la precondicin p, S termina en un estado que satisface la
postcondicin q (ahora S es totalmente correcto con respecto a (p, q) porque M(S)
asigna a todo estado inicial propio un estado propio).
La correctitud total no se viola cuando se consideran estados que no satisfacen p,
independientemente de lo que suceda al final de las computaciones correspondientes.
La expresin |= p S q denota que S es totalmente correcto con respecto a (p, q).
La frmula de correctitud p S q se conoce tambin como terna de Hoare de
correctitud total.
Fin de Definicin
La figura siguiente ilustra qu significa que un programa S sea totalmente correcto con
respecto a una especificacin (p, q):
221
La prueba es la siguiente:
Se cumple |= true.
Fin de Ejemplo
Correspondientemente con las dos propiedades bsicas mencionadas, vamos a estudiar
dos mtodos de verificacin de programas, uno para probar la correctitud parcial y otro
para probar la terminacin. Esta divisin no es caprichosa, se debe a que las dos pruebas
se basan en tcnicas distintas. La prueba de correctitud parcial es inductiva, mientras
que la terminacin se demuestra a partir de una relacin de orden parcial bien fundada,
es decir, a partir de un orden parcial estricto sin cadenas descendentes infinitas. En este
ltimo caso utilizaremos directamente la relacin menor en el conjunto de los nmeros
naturales, es decir (N, <), si bien podramos recurrir a cualquier orden parcial bien
fundado (por ejemplo (C, <), siendo C un subconjunto de N). Ms en general,
propiedades como la correctitud parcial, la ausencia de deadlock y la exclusin mutua,
pertenecen a la familia de propiedades conocidas como de tipo safety (seguridad), que
se prueban inductivamente en base a aserciones invariantes, y propiedades como la
terminacin y la ausencia de inanicin, pertenecen a la familia de propiedades
conocidas como de tipo liveness (progreso o vivacidad), que se prueban en base a
variantes decrecientes de rdenes parciales bien fundados.
El Lema de Separacin, que se formula a continuacin, sustenta el modo en que vamos
a probar los programas:
222
| H {p} S {q}
que {p} S {q} se prueba en H. H est compuesto por axiomas y reglas correspondientes
a las instrucciones de PLW. Como en el clculo de predicados, una prueba en H tiene la
forma
1. | H f1
2. | H f2
k. | H fk
tal que fi es un axioma o es una frmula que se obtiene de f1, , fi 1 por empleo de una
o ms reglas. En particular, fk es la frmula {p} S {q}, y as, manteniendo la analoga
con la lgica, es un teorema de H.
En la Clase 13 describimos el mtodo, denominado H*, para probar la terminacin de
los programas PLW. Vamos a denotar con la expresin
| H* p S true
que p S true se prueba en H*. En realidad, veremos que H* permite probar
directamente frmulas p S q. Naturalmente, las caractersticas de las pruebas en H*
son las mismas que en H. Los axiomas y reglas tambin son los mismos, salvo la regla
asociada a la instruccin de repeticin, que es la nica que puede provocar no
terminacin.
223
D es sensato, si y slo si para todo programa S y toda especificacin (p, q), cumple
| D {p} S {q} |= {p} S {q}
D es completo, si y slo si para todo programa S y toda especificacin (p, q), cumple
|= {p} S {q} | D {p} S {q}
Fin de Definicin
Como no se definieron frmulas de correctitud negadas, no existe la posibilidad de que
H y H* sean inconsistentes, es decir que permitan probar frmulas contradictorias.
Ejercicios de la Clase 11
1. Completar la definicin semntica de las expresiones de PLW.
2. Probar que una computacin finita de un programa PLW termina en una
configuracin terminal.
3. Desarrollar las distintas formas de las computaciones de las instrucciones de PLW
(en la Clase 11 slo se mostraron las de la instruccin de secuencia).
224
4. Supngase que se agregan al lenguaje PLW las instrucciones if B then S fi, y repeat
S until B, con la semntica habitual. Definir formalmente la semntica de ambas
instrucciones.
5. Supngase ahora que se agregan otras dos nuevas instrucciones a PLW. La primera
es S1 or S2, que consiste en la ejecucin de S1 o bien S2. La segunda es S1 and S2,
que consiste en la ejecucin de S1 seguida de la ejecucin de S2, o bien la ejecucin
de S2 seguida de la ejecucin de S1. Definir formalmente la semntica de ambas
instrucciones.
6. Definir la funcin semntica M para todos los casos de S PLW, y luego probar:
i.
ii.
iii.
com(S1)().
Se pide completar la definicin de com(S, ), para los casos if B then S1 else S2 fi, y
while B do S od.
9. Probar que para todo estado se cumple [x | a][x | b] = [x | b].
10. Completar la definicin semntica de las aserciones de Assn.
11. Dar un ejemplo en que p[x | e1][y | e2] no es equivalente a p[y | e2][ x | e1].
12. Probar el Lema de Sustitucin, es decir, [x | e] |= p |= p[x | e].
13. Definir inductivamente los conjuntos de variables var(S), change(S), var(e) y
free(p).
225
14. Especificar un programa que calcule la raz cuadrada entera de un nmero natural x.
Se debe establecer que al final x tenga el mismo valor que al principio. Se puede
expresar tambin que x no se modifique a lo largo de todo el programa?
15. Determinar si las especificaciones (x = X, x = 2X) y (true, X: x = 2X) son
equivalentes.
16. Asumiendo | {p} S {q}, determinar si son correctos los incisos siguientes:
i.
ii.
iii.
ii.
iii.
iv.
20. Sea D un mtodo de verificacin sensato, y supngase que se cumple tanto | D {p}
S {q} como | D {p} S {q}. Qu se puede afirmar sobre S con respecto a p?
226
decir que con una prueba sintctica se prueba en realidad que S es parcialmente correcto
con respecto a (p, q): dado cualquier estado que satisface la precondicin p, si S
termina a partir de entonces lo hace en un estado que satisface la postcondicin q.
En cambio, nada se puede decir acerca de la terminacin de S.
El mtodo H es composicional, adhiere al siguiente principio: si S est compuesto por
subprogramas S1, , Sn, que se cumpla {p} S {q} depende solamente de que se
cumplan determinadas frmulas {p1} S1 {q1}, , {pn} Sn {qn}, sin ninguna referencia a
la estructura interna de los Si. Veremos despus que cuando se trata con programas
concurrentes, la propiedad de composicionalidad se pierde.
A continuacin presentamos los componentes de H.
{p} S1 ; S2 {q}
{ p B} S1 {q} , {p B} S2 {q}
{p B} S {p}
{p} while B do S od {p B}
p p1 , {p1} S {q1} , q1 q
{p} S {q}
Fin de Definicin
Ricardo Rosenfeld y Jernimo Irazbal
227
{true} x := e {x = e}
{true} x := x + 1 {x = x + 1}
228
{p} S1 ; S2 ; ; Sn {q}
Queda como ejercicio demostrar que esta forma se obtiene de la regla original.
La regla COND impone una manera de verificar una seleccin condicional
estableciendo un nico punto de entrada y un nico punto de salida, correspondientes a
la precondicin p y la postcondicin q, respectivamente. A partir de p, se cumpla o no la
condicin B de la instruccin, debe darse que luego de las ejecuciones respectivas de S1
y S2 se cumple q.
La regla REP se centra en una asercin invariante p, que debe cumplirse al comienzo de
un while y luego de toda iteracin del mismo. Mientras valga la condicin B del while,
la ejecucin del cuerpo S debe preservar p, y por eso al terminar la instruccin (si
termina) se cumple p B. Claramente REP no asegura la terminacin, y su forma
muestra que la correctitud parcial es una propiedad que se prueba inductivamente (la
induccin involucrada se conoce como computacional).
Finalmente, la regla CONS facilita las pruebas permitiendo reforzar las precondiciones
y debilitar las postcondiciones de las frmulas de correctitud. Por ejemplo, si r p y
{p} S {q}, entonces por CONS se prueba {r} S {q}. En particular, se pueden modificar
frmulas con aserciones equivalentes. CONS es una regla especial, no depende de PLW
sino del dominio semntico, en este caso los nmeros enteros. Es una regla semntica
ms que sintctica. Acta como interface entre las frmulas de correctitud y las
aserciones verdaderas sobre los nmeros enteros. Por el uso de CONS, algunos pasos de
una prueba en H pueden ser directamente aserciones. Llamando Tr (por true, verdadero)
al conjunto de todas las aserciones verdaderas sobre los enteros, considerando la
interpretacin estndar como establecimos en la clase anterior, una prueba en H se debe
entender entonces como
Tr | H {p} S {q}
es decir que H incluye como axiomas a todas las aserciones de Tr. El agregado del
conjunto Tr a H es necesario para la completitud del mtodo, como veremos enseguida.
229
Por la forma del programa, recurrimos al axioma ASI tres veces, una por cada
asignacin, y al final completamos la prueba utilizando la (generalizacin de la) regla
SEC:
1. {z = X x = Y} y := z {y = X x = Y}
(ASI)
2. {z = X y = Y} x := y {z = X x = Y}
(ASI)
3. {x = X y = Y} z := x {z = X y = Y}
(ASI)
4. {x = X y = Y} z := x ; x := y ; y := z {y = X x = Y}
(1, 2, 3, SEC)
Fin de Ejemplo
Notar cmo el axioma ASI impone una forma de prueba de la postcondicin a la
precondicin. Por la sensatez de H, entonces se cumple
|= {x = X y = Y} z := x ; x := y ; y := z {y = X x = Y}
Para probar esta ltima frmula tenemos que recurrir a la regla CONS, agregndole a la
prueba anterior los siguientes dos pasos:
5. (y = Y x = X) (x = X y = Y)
Computabilidad, Complejidad Computacional y Verificacin de Programas
(MAT)
230
6. {y = Y x = X } z := x ; x := y ; y := z {y = X x = Y}
(4, 5, CONS)
La asercin del paso 5 pertenece al conjunto Tr, por eso se justifica el paso con el
indicador MAT (por matemticas). Notar que si H no tuviera la regla CONS, frmulas
tan simples como la del paso 6 no podran ser probadas (H sera incompleto). Siguiendo
con la frmula del paso 6, al estar las variables de especificacin X e Y implcitamente
cuantificadas universalmente, se establece entonces que el programa Sswap se comporta
adecuadamente cualesquiera sean los valores iniciales de las variables x e y. Para
instanciar una frmula de esta naturaleza con valores especficos, por ejemplo los que
utilizamos en el Ejemplo 11.1, es decir
{y = 2 x = 1} Sswap {y = 1 x = 2}
f(X)
f(c)
tal que f es una frmula de correctitud que incluye una variable de especificacin X, y c
est en el dominio de X. La razn de utilizar INST a pesar de contar con todas las
aserciones de Tr como axiomas (e implcitamente con el clculo de predicados como
mecanismo para producir aserciones verdaderas en H), es que se deben instanciar
frmulas de correctitud, no aserciones. INST es una regla universal, se incluye en todos
los mtodos de verificacin (en la Clase 15 la utilizamos en la verificacin de
programas con procedimientos).
En el ejemplo siguiente se muestra el uso de la regla COND.
231
Probamos a continuacin {true} Sva {y 0}. Considerando las dos asignaciones del
programa, los primeros pasos de la prueba son
1. {x 0} y := x {y 0}
(ASI)
2. { x 0} y := x {y 0}
(ASI)
Para poder aplicar COND, se necesita contar con un par de frmulas tales que sus
precondiciones tengan, una la forma p B, y la otra la forma p B. Haciendo p =
true, y B = x > 0, la prueba se puede completar de la siguiente manera:
3. (true x > 0) x 0
(MAT)
(MAT)
5. {true x > 0} y := x {y 0}
(1, 3, CONS)
(2, 4, CONS)
(5, 6, COND)
Fin de Ejemplo
Obviamente, (true, y 0) no es una especificacin correcta de un programa que calcula
el valor absoluto. Por ejemplo, S :: x:= 0; y := 1 satisface (true, y > 0). Una
especificacin correcta es (x = X, y = |X|). Queda como ejercicio verificar S va con
respecto a esta especificacin.
Los ltimos dos ejemplos que presentamos a continuacin incluyen el uso de la regla
REP. Volveremos a ellos en la clase siguiente para la prueba de terminacin. Para
acortar las pruebas, agrupamos varios pasos en uno, y sin explicitar la asercin de Tr
utilizada en la aplicacin de la regla CONS.
232
(ASI)
2. {1 = 1! 1 x} a := 1 {1 = a! a x}
(ASI)
3. {x > 0} a := 1 ; y := 1 {y = a! a x}
Prueba de b.
4. {y . a = a! a x} y := y . a {y = a! a x}
(ASI)
5. {y . (a + 1) = (a + 1)! (a + 1) x} a := a + 1 {y . a = a! a x}
(ASI)
6. {y = a! a x a < x } a := a + 1 ; y := y . a {y = a! a x}
7. {y = a! a x} while a < x do a := a + 1 ; y := y . a od {y = x!}
Prueba de c.
8. {x > 0} Sfac {y = x!}
(3, 7, SEC)
El segundo ejemplo considera un programa que efecta la divisin entera entre dos
nmeros naturales x e y, por el mtodo de restas sucesivas. El programa obtiene el
cociente en una variable c y el resto de la divisin en una variable r:
Sdiv :: c := 0 ; r := x ; while r y do r := r y ; c := c + 1 od
Histricamente, este programa fue el primero que se prob utilizando el mtodo H. Se
quiere probar
233
Notar que Sdiv no termina cuando el valor de y es cero. Se propone como invariante del
while la asercin p = (x = c.y + r 0 r). Como en el ejemplo anterior, el invariante es
muy similar a la postcondicin. Cuando el programa termina se cumple r < y, y as se
alcanza la postcondicin buscada. La prueba se puede estructurar de la siguiente
manera:
a. {x 0 y 0} c := 0 ; r := x {p}. Las asignaciones iniciales conducen al
cumplimiento por primera vez del invariante p.
b. {p r y} r := r y ; c := c + 1 {p}. El invariante p se preserva al terminar toda
iteracin de la instruccin while.
c. (p (r y)) x = c.y + r 0 r < y. Cuando finaliza el while, se cumple la
postcondicin del programa (implicada por la conjuncin del invariante p y la
negacin de la condicin del while).
Fin de Ejemplo
Por la completitud del mtodo H, agregarle axiomas y reglas es redundante. De todos
modos, como en cualquier sistema deductivo, esta prctica es usual a los efectos de
facilitar las pruebas. Los siguientes son algunos ejemplos de axiomas y reglas auxiliares
bastante comunes que se le agregan a H:
{p r} S {q}
234
la disyuncin, se puede recurrir a esta regla, que permite una prueba por casos. Una
forma particular de la regla OR de uso habitual es
{p r} S {q} , {p r} S {q}
{p} S {q}
Esta regla es til cuando la prueba de {p} S {q} se facilita reforzando la precondicin
con dos aserciones complementarias.
La regla AND sirve para probar una frmula de correctitud tal que su precondicin y su
postcondicin son conjunciones de dos aserciones (se puede generalizar a ms
aserciones). Se recurre a esta regla para lograr una prueba incremental, y as evitar
propagar informacin necesaria para establecer oportunamente las conjunciones.
El axioma INV suele emplearse en combinacin con la regla AND. De hecho se suele
utilizar directamente la siguiente regla, denominada justamente regla de invariancia:
{p} S {q}
cuando free(r) change(S) =
{r p} S {r q}
Existe una presentacin alternativa de las pruebas en el mtodo H, las proof outlines
(esquemas de prueba). En una proof outline se intercalan los distintos pasos de la prueba
de un programa entre sus instrucciones. De esta manera se obtiene una prueba mucho
ms estructurada, que documenta adecuadamente el programa. Como se ver despus,
en la verificacin de los programas concurrentes las proof outlines son imprescindibles.
Dada la frmula de correctitud {p} S {q}, la idea es anotar S con aserciones antes y
despus de cada uno de sus subprogramas S, digamos pre(S) y post(S),
respectivamente, provenientes de una prueba en el mtodo H. La definicin inductiva de
una proof outline de {p} S {q} es la siguiente:
1. p pre(S), post(S) q
2. Si S :: skip, entonces pre(S) post(S)
3. Si S :: x := e, entonces pre(S) post(S)[x | e]
4. Si S :: S1 ; S2, entonces pre(S) pre(S1), post(S1) pre(S2), post(S2)
post(S)
Ricardo Rosenfeld y Jernimo Irazbal
235
Por ejemplo, la siguiente es una proof outline correspondiente al programa del factorial
que probamos en el Ejemplo 12.3 (notar que no siempre hay aserciones entre dos
instrucciones consecutivas; se dice en este caso que la proof outline es no estndar):
{x > 0}
a := 1 ; y := 1 ;
{y = a! a x}
while a < x do
{y = a! a < x}
a := a + 1 ; y := y . a
{y = a! a x}
od
{y = x!}
Ejercicios de la Clase 12
1. Considerando los axiomas y reglas de inferencia que sistematizan la aritmtica,
presentados en el Ejercicio 11 de la Clase 4, se pide probar el teorema 1 + 1 = 2.
2. Probar que de la regla SEC de H se puede derivar la siguiente generalizacin:
{p} S1 {r1} , {r1} S2 {r2} , , {rn 1} Sn {q}
{p} S1 ; S2 ; ; Sn {q}
3. Extender el mtodo H con:
i.
236
ii.
iii.
{true} x := 0 {false}
ii.
{x = 0} while z = 0 do z := 0 od {x = 1}
iii.
{p} x := e {p x = e}
ii.
iii.
iv.
ii.
{p} S {q r}
10. Probar en H la frmula {x = X y = Y 0} S {z = XY}, siendo S el programa:
S :: z := 1; while y 0 do if par(y) then y := y/2; x := x2 else y := y - 1; z := z.x fi od.
237
H*
p S true
implica |= p S true, es decir que a partir de todo estado que satisface p, S termina.
Los mtodos H y H* difieren slo en la regla de la repeticin REP, porque el while es la
nica instruccin que puede provocar no terminacin. Como convencin de notacin, a
los nombres de los axiomas y reglas de H* se les agrega al final el smbolo *, y las pre y
postcondiciones se delimitan con .
La nica novedad a presentar es, entonces, la regla REP*. REP* mantiene la idea de un
invariante p, pero ahora parametrizado con un variante n, que es una variable libre en p,
no es una variable de programa, y su dominio son los nmeros naturales. La regla
relaciona todo while con una variable de estas caractersticas que se decrementa con
cada iteracin, lo que permite asegurar que la cantidad de iteraciones sea finita.
Presentamos a continuacin los componentes de H*.
Regla REP*
Fin de Definicin
El invariante parametrizado p(n) en realidad abrevia nat(n) p(n), siendo nat un
predicado unario que caracteriza a los nmeros naturales. Al igual que las variables de
especificacin, el variante n en las premisas de REP* debe entenderse como
implcitamente cuantificado universalmente. Como en la regla REP de H, REP*
Computabilidad, Complejidad Computacional y Verificacin de Programas
238
239
Prueba de a.
1. n: n = x 1 a := 1; y := 1 n: n = x a
(ASI*, SEC*)
2. x > 0 n: n = x 1
(MAT)
3. x > 0 a := 1; y := 1 n: n = x a
(1, 2, CONS*)
Prueba de b.
(Se prueban las tres premisas de REP*)
4. n + 1 = x a a < x
5. n + 1 = x a a := a + 1 ; y := y . a n = x a
(MAT)
(ASI*, SEC*, CONS*)
6. 0 = x a (a < x)
(MAT)
(4, 5, 6, REP*)
(MAT)
(7, 8, CONS*)
Prueba de c.
10. x > 0 Sfac true
(3, 9, SEC*)
Fin de Ejemplo
Existe una forma alternativa ms flexible de la regla REP*, que no exige un decremento
estricto en uno del variante ni tampoco que al final su valor sea cero. Tambin se puede
considerar un orden parcial bien fundado distinto de (N, <). De esta manera se pueden
240
Smcd :: y1 := x1 ; y2 := x2 ;
while y1 y2 do
if y1 > y2 then y1 := y1 y2 else y2 := y2 y1 fi
od
Se cumple x1 > 0 x2 > 0 Smcd y1 = mcd(x1, x2). Para la prueba de correctitud parcial
se puede utilizar la relacin invariante mcd(x1, x2) = mcd(y1, y2), y para la prueba de
terminacin, el variante
n = y1 + y2
En este caso, n no decrece de a uno ni termina en cero. Otra posibilidad es recurrir al
orden parcial bien fundado (N x N, <), con la relacin menor habitual (n1, n2) < (m1, m2)
(n1 < m1 (n1 = m1 n2 < m2)). En este caso, un variante posible es
Regla REP**
p B S p , p B t = Z S t < Z , p t 0
p while B do S od p B
241
De esta manera, el while debe terminar (en un estado que satisface el invariante p).
A continuacin empleamos REP** para probar la terminacin del programa de la
divisin entera por el mtodo de restas sucesivas, cuya correctitud parcial demostramos
en el Ejemplo 12.3.
242
t=r
Notar que r no se decrementa en uno sino en el valor de y (que guarda el divisor) luego
de cada iteracin, y que su valor final no es necesariamente cero sino algn nmero
natural menor que y. La prueba es la siguiente (para simplificar la escritura utilizamos el
identificador p del invariante en lugar de la asercin completa):
1. x 0 y > 0 c := 0 ; r := x p
3. p r y r = Z r := r y ; c := c + 1 r < Z
4. p r 0
(MAT)
(2, 3, 4, REP**)
Fin de Ejemplo
Para probar la terminacin de Sdiv con la regla REP* se puede utilizar, por ejemplo, el
invariante parametrizado
p(n) = (x = c.y + r r 0 n.y r < (n + 1).y)
Queda como ejercicio desarrollar la prueba de esta manera. Consideremos ahora este
ltimo ejemplo:
243
Apartndonos por un momento del dominio de los nmeros enteros, supongamos que
las variables x y epsilon del programa Seps son de tipo real, inicialmente mayores que
cero. Claramente se cumple x = X Seps true, porque los distintos valores positivos de
x constituyen iteracin tras iteracin una secuencia decreciente estricta, y epsilon > 0.
Tambin en este caso podemos emplear la regla REP**, definiendo una adecuada
funcin cota en el dominio de los nmeros naturales. Una posible funcin es la
siguiente:
if x > epsilon then log2 X/epsilon log2 X/x else 0 fi
244
Snum :: do
1: b x K x := x + 1
2: b b := false
od
Los nmeros 1 y 2 se utilizan para identificar las dos direcciones de Snum, no son parte
de la sintaxis. Claramente el programa termina, y no hay necesidad de ninguna hiptesis
de fairness.
La siguiente es una regla habitual para la prueba de terminacin en este caso:
245
INI.
p n: p(n)
CONT.
p(n + 1) i=1,n Bi
DEC.
TERM.
p(0) i=1,n Bi
p do B1 S1 Bn Sn od p(0)
Snum2 :: do
1: b x := x + 1
2: b b := false
od
Pero ahora, sin ninguna hiptesis de fairness, este programa puede no terminar,
eligiendo siempre la direccin 1. Si en cambio se asegura que una direccin habilitada
permanentemente a partir de un momento dado no puede ser postergada
246
p w: p(w)
CONT.
DEC.
NOINC.
TERM.
entonces se cumple
p do B1 S1 Bn Sn od p(w0)
Por cada valor w del variante distinto del minimal w0, existe un conjunto no
vaco de direcciones tiles que acortan la distancia a la terminacin porque
247
La premisa CONT asegura que mientras no se alcanza el minimal w0, existe una
determinada guardia Bi que es verdadera, siendo i una direccin til. (Al haber
fairness, la direccin i ser elegida alguna vez, y entonces el variante se
decrementar inexorablemente.)
Las premisas INI y TERM son las mismas que las de la regla de terminacin sin
fairness, salvo que ahora hacen referencia a cualquier orden bien fundado, no
solamente (N, <). Por INI, el invariante p asegura que existe un valor inicial para
el parmetro w, que representa la distancia mxima a la terminacin, y por
TERM, cuando se alcanza el minimal la repeticin termina.
Snum3 :: do
1: b1 b2 x := x + 1
2: b1 b2 b1 := false
3: b1 b2 y := y + 1
4: b1 b2 b2 := false
od
248
Sal :: do
b x 0 x := x 1
b x 0 x := x + 1
b x := ? ; b := true
od
249
de (N, <). As, se debe recurrir a otro orden parcial bien fundado, por ejemplo (N
{}, <), siendo el primer ordinal infinito.
La aproximacin alternativa para probar la terminacin con fairness de un programa S,
utilizando asignaciones aleatorias, consiste en implementar dentro de S un planificador
que asegure que haya fairness:
Es decir, se introducen dos variables que no estn en S, z1 y z2, que representan las
prioridades asignadas a las direcciones 1 y 2, respectivamente, de manera tal que el
decremento de zi implica el aumento de la prioridad de la direccin i. Al comienzo, z1 y
z2 se inicializan con valores arbitrarios no negativos. Dada zi , el valor zi + 1 representa
el nmero mximo de iteraciones que pueden transcurrir antes que la direccin i sea
elegida, contando slo las veces en que i est habilitada. Lo mismo se cumple despus
de las reinicializaciones aleatorias que estn dentro de la repeticin. Despus de
ejecutarse Si, la prioridad de la otra direccin (direccin k) aumenta, siempre que est
habilitada a pesar de no haber sido elegida. Al mismo tiempo, la prioridad de i se
Computabilidad, Complejidad Computacional y Verificacin de Programas
250
Ejercicios de la Clase 13
1. Probar que todo subconjunto no vaco W de un conjunto bien fundado tiene al
menos un elemento minimal w0, es decir un elemento w0 tal que no existe ningn
otro elemento w W que cumple que w < w0.
2. Plantear una forma ms flexible para la regla REP* presentada en la Clase 13.
3. Probar la terminacin de los siguientes programas:
i.
ii.
El programa Smcd del mximo comn divisor mostrado en la Clase 13, con
respecto a la especificacin (x1 > 0 x2 > 0, y1 = mcd(x1, x2)). Se podra
considerar la relacin invariante mcd(x1, x2) = mcd(y1, y2), y el variante n =
y1 + y2, como se indic en la misma clase.
ii.
z 0: x = X = 2z y = 0
while par(x) do x := x / 2 ; y := y + 1 od
X = 2y
iii.
k: k > 1 y = 3k
x := 0 ; while x < y do x := x + 1 ; y := y 2 od
y = x
251
do b i := i + 1 b i := 0 b i = 1 b := false od
ii.
do b i := i + 1 b i := 0 b i = 2 b := false od
ii.
iii.
S :: do x = 0 y := y + 1 x = 0 x := 1 x 0 y 0 y := y 1 od,
a partir de la precondicin true.
iv.
S :: do xup x := x + 1
yup y := y + 1
252
253
Fin de Teorema
Computabilidad, Complejidad Computacional y Verificacin de Programas
254
De la misma manera se puede probar que los axiomas y reglas auxiliares mencionados
en la Clase 12 (axioma de invariancia, regla de la disyuncin, regla de la conjuncin)
preservan la sensatez del mtodo H (queda como ejercicio). Tambin se cumple la
sensatez de la regla de instanciacin (INST), como consecuencia directa de la definicin
de variable de especificacin: si f(X) es una frmula de correctitud verdadera con una
variable de especificacin X, entonces tambin lo es f(c) si c est en el dominio de X,
porque X est implcitamente cuantificada universalmente. Tener en cuenta de todos
modos la restriccin que establecimos anteriormente, de que si una variable de
especificacin X aparece libre en la precondicin y postcondicin de una frmula, para
que pueda ser instanciada con una expresin sta no puede incluir variables de
programa.
Obviamente, la sensatez de H tambin se puede probar considerando las proof outlines,
porque se cumple | {p} S {q} si y slo si existe una proof outline de {p} S {q}. Dada
una proof outline estndar de {p} S {q}, se demuestra por induccin sobre la
computacin y la estructura de S que cuando la computacin de S, a partir de un estado
inicial que satisface p, alcanza un estado en una posicin denotada por una
asercin r, entonces satisface r (este enunciado se conoce como Lema de
Preservacin Composicional). En este caso se habla de sensatez fuerte. No vamos a
desarrollar la prueba completa de la sensatez fuerte de H; como ejemplo demostramos a
continuacin el caso de la seleccin condicional (el resto de la prueba queda como
ejercicio). Sea la siguiente proof outline estndar de {p} S {q}:
{p}{pre(T)} if B then {pre(S1)} S1 {post(S1)}
else {pre(S2)} S2 {post(S2)} fi {post(T)}{q}
Supongamos que a partir de un estado inicial 0, la computacin (S, 0) tiene la forma
(S, 0) * (U, 1) (V, 2) *
255
Fin de Teorema
256
Tr
valga |= I {p} S {q} significa que {p} S {q} es verdadera considerando I. Como en este
caso {p} S {q} es verdadera para todas las interpretaciones, se dice que la frmula es
vlida.
En cambio, H* no es totalmente sensato. Por ejemplo, en H* se prueba claramente
true S :: while x > 0 do x := x 1 od true
257
H incluye como axiomas a todas las aserciones verdaderas sobre los nmeros
enteros considerando la interpretacin estndar.
258
es, asumiendo que la conclusin de una regla es verdadera, mostrar que las premisas
tambin lo son, y as por hiptesis inductiva, que se pueden probar en H.
259
Fin de Teorema
De esta manera, queda formalizado que axiomas como el de invariancia y reglas como
las de la disyuncin y la conjuncin, son redundantes en el mtodo H.
La demostracin de la completitud del mtodo H* es la misma que la de H, sin
considerar la regla de la repeticin.
260
En palabras, los estados de C son aqullos a partir de los cuales el programa while B do
S od termina en exactamente k iteraciones y los estados finales satisfacen q.
Claramente, p(n) satisface las premisas de REP*. Por ejemplo, para ver que |= p(n + 1)
S p(n), notar que p(n + 1) implica la existencia de una secuencia de estados 0, ,
n+1, y que luego de la ejecucin de S se cumple p(n) considerando la secuencia 1, ,
n+1. No vamos a definir la sintaxis de p(n), la idea es similar a la planteada en el
Teorema 14.3. Finalmente, por la asuncin, la hiptesis inductiva y la aplicacin de las
reglas REP* y CONS*, se obtiene | r while b do S od q.
Fin de Teorema
Considerando la regla alternativa REP**, la prueba de la completitud de H* debe incluir
la demostracin de la expresividad de Assn con respecto a la funcin cota. Dado un
programa S :: while B do S od, y un estado inicial , sea iter(S, ) una funcin parcial
que define el nmero de iteraciones de S a partir de . Claramente iter es computable, el
siguiente programa calcula la funcin:
Sx :: x := 0 ; while B do x := x + 1 ; S od
261
Para garantizar la completitud de H* en este caso, se requiere que todas las funciones
computables sean expresables.
Analizando la completitud en un marco ms general, cabe remarcar que el mtodo H
por s solo es incompleto. Por ejemplo, para toda interpretacin I se cumple Tr I |=
{true} x := e {x = e}, cuando x var(e), pero contando solamente con los axiomas y
reglas de H no puede probarse true e = e. No es solucin ampliar H con un sistema
deductivo asociado a la interpretacin considerada: es razonable que H trate
mnimamente con los nmeros enteros, y por el Teorema de Incompletitud de Gdel
sabemos que las aserciones verdaderas sobre los mismos no conforman un conjunto
recursivamente numerable, por lo que tampoco lo es el conjunto de frmulas {{true}
skip {p}}. Ni restringiendo las aserciones a true y false se soluciona el problema: por la
indecidibilidad del problema de la detencin (en el marco de los programas PLW y los
nmeros enteros) el conjunto de frmulas {{true} S {false}} tampoco es recursivamente
numerable.
As llegamos al concepto de completitud relativa de H (y de H*): se le agregan a H
todas las aserciones verdaderas con respecto a la interpretacin considerada. No es
habitual utilizar sistemas deductivos con un conjunto de axiomas de esta naturaleza,
pero hay que tener en cuenta que de lo que se trata es de probar programas, no
enunciados del dominio en que se ejecutan. De esta manera, como vimos en los
ejemplos, en las pruebas se asume la existencia de un orculo que provee las aserciones
verdaderas necesarias (manipuladas mediante la regla de consecuencia).
El requerimiento de expresividad del lenguaje de especificacin con respecto al
lenguaje de programacin y la interpretacin, refuerza el concepto de completitud
relativa (en este caso se habla tambin de completitud en el sentido de Cook). Una tpica
estructura que asegura la expresividad en lenguajes de primer orden como Assn con
programas del tipo PLW es el modelo estndar de la aritmtica de Peano, al que ya nos
hemos referido. Con dicha estructura se pueden codificar computaciones de programas
mediante nmeros naturales. As, se pueden expresar las postcondiciones ms fuertes:
simples elementos del dominio representan conjuntos de estados intermedios con
determinadas propiedades. Como contraejemplo, la aritmtica de Presburger, que no
tiene la multiplicacin, no sirve para la expresividad requerida.
Por lo tanto, tomando como base el Teorema 14.3 se puede formular ms en general que
|= I {p} S {q} Tr I | H {p} S {q}
Computabilidad, Complejidad Computacional y Verificacin de Programas
262
Ejercicios de la Clase 14
1. Completar la prueba del Teorema 14.1.
2. Probar que el axioma y la regla de invariancia (INV), la regla de la disyuncin (OR)
y la regla de la conjuncin (AND), preservan la sensatez de H.
3. Mostrar que la regla alternativa para REP* y la regla REP** son sensatas.
4. Determinar cules de las siguientes reglas son sensatas:
i.
ii.
{p} S {q r}
iii.
iv.
p B S p , p B
p while B do S od true
263
264
Extendiendo el lenguaje PLW con variables de tipo arreglo, tenemos que adecuar el
mecanismo de sustitucin para que el axioma de asignacin de la metodologa de
verificacin de programas descripta siga siendo verdadero, como mostramos en lo que
sigue.
Consideramos slo arreglos unidimensionales, por ejemplo a[1:N], con elementos a[1],
, a[N]. Los ndices pueden ser expresiones enteras.
Veamos, antes de seguir con las definiciones, un ejemplo que muestra cmo el axioma
de asignacin deja de ser verdadero si permitimos referencias anidadas, es decir si los
ndices de los arreglos pueden incluir variables suscriptas. Aplicando ASI y CONS se
obtiene
265
que contradice la frmula anterior. En este caso, el problema es que la asignacin a a[x]
tambin modifica a[y], porque son el mismo elemento (los ndices x e y son iguales).
Esto se conoce como problema de alias.
Ms en general, el problema est en cmo se aplica la sustitucin, que es el mecanismo
que captura el efecto de una asignacin. En lo que sigue presentamos una adecuacin
habitual de la sustitucin para restablecer la aplicabilidad del axioma de asignacin.
La idea bsica es utilizar una expresin condicional para definir las sustituciones, de
modo tal que stas se resuelvan ya no en tiempo de sustitucin sino en tiempo de
evaluacin (considerando un determinado estado). La expresin condicional tiene la
forma cond(B, e1, e2), donde B es una igualdad entre expresiones, y e1 y e2 son
expresiones. Se define as:
(cond(e = e, e1, e2)) = e1, si (e) = (e)
= e2, si (e) (e)
266
267
P :: T ; while B do S od
tal que cumpla r P q. De acuerdo a la metodologa de prueba, P debe satisfacer los
siguientes cinco requerimientos:
La siguiente proof outline genrica refleja los requerimientos planteados (recordar que
no se suelen incluir los requerimientos 4 y 5, sino que se documenta directamente la
funcin cota):
r T ; inv: p , fc: t while B do p B S p od p B q
268
Ssum :: T ; while B do S od
y satisfar la especificacin (r, q), siendo
r=N0
q = (x = i=0,N1 a[i])
El primer paso es encontrar un invariante p para el while. Una estrategia conocida, ya
mencionada, es generalizar la postcondicin q, reemplazando constantes por variables.
En este caso reemplazamos N por una variable k, y proponemos
p = (0 k N x = i=0,k1 a[i])
En lo que sigue definimos una expresin booleana B, un cuerpo S y una funcin cota t
apropiados para satisfacer los cinco requerimientos planteados previamente:
269
while k N do
0 k N x = i=0,k1 a[i] k N
S
(0 k N x = i=0,k1 a[i]) [k | k + 1]
k := k + 1
0 k N x = i=0,k1 a[i]
od
0 k N x = i=0,k1 a[i] k = N
x = i=0,N1 a[i]
Notar cmo se descompuso el cuerpo S del while en la secuencia S ; k := k + 1. La
asercin intermedia entre S y k := k + 1 se obtuvo aplicando el axioma ASI. El
subprograma S, entonces, debe satisfacer
{0 k N x = i=0,k1 a[i] k N} S {0 k + 1 N x = i=0,k a[i]}
Se cumple que la precondicin de S implica la asercin a1 siguiente:
0 k + 1 N x = i=0,k1 a[i]
Tambin se cumple que la postcondicin de S implica la asercin a2 siguiente:
0 k + 1 N x = i=0,k1 a[i] + a[k]
Como {a1} x : = x + a[k] {a2}, entonces elegimos S :: x := x + a[k] para que se cumpla
el requerimiento 2 que faltaba, es decir {p B} S {p}, y de esta manera concluimos la
construccin de Ssum, en simultneo con su prueba de correctitud total. La proof outline
qued de la siguiente manera:
N 0
k := 0 ; x := 0 ;
inv: 0 k N x = i=0,k1 a[i] , fc: N k
while k N do x := x + a[k] ; k := k + 1 od
270
x = i=0,N1 a[i]
Fin de Ejemplo
TEMA 15.3. VERIFICACIN DE PROGRAMAS CON PROCEDIMIENTOS
P1 :: procedure suma1: x := x + 1 ;
while y 0 do call suma1 ; y := y 1 od
La semntica formal de la invocacin se define mediante la relacin de este modo:
(call proc, ) (S, )
tal que S es el cuerpo de proc. En realidad, las configuraciones tienen ahora tres
componentes, porque a la continuacin sintctica y el estado corriente se le agrega el
entorno (environment), que contiene las declaraciones de los procedimientos. Como las
transiciones no modifican el entorno, se lo puede omitir para simplificar la notacin.
Ricardo Rosenfeld y Jernimo Irazbal
271
Regla INVOC
{p} S {q}
tal que S es el cuerpo de proc. La sensatez y completitud del mtodo H extendido con
INVOC se preservan, y se prueban fcilmente a partir de la sensatez y completitud de H
y la semntica del call (la prueba queda como ejercicio).
(ASI, CONS)
La condicin y 1 es necesaria para vincular esta frmula con el resto de la prueba (se
establece que el procedimiento se ejecuta con y 1). Para probar el cuerpo principal de
P1 empleamos la regla de instanciacin INST en combinacin con INVOC, obteniendo
una especificacin de la invocacin expresada en trminos de las variables de la
especificacin del programa:
2. {x = X + Y y y 1} call suma1 {x = X + Y y + 1 y 1}
La regla INST es muy til en las pruebas de programas con procedimientos. Notar que
la instanciacin de Z con X + Y y es posible porque y var(suma1). Utilizando como
Computabilidad, Complejidad Computacional y Verificacin de Programas
272
Fin de Ejemplo
Extendemos ahora PLW con procedimientos recursivos. Para simplificar, consideramos
slo la recursin simple. En este caso la regla INVOC obviamente no sirve, porque para
probar {p} call proc {q} requiere probar {p} S {q}, y si S invoca a proc, se produce una
circularidad que la regla no puede resolver. Una solucin habitual para tratar este tipo
de recursin consiste en desarrollar una prueba por asuncin y descarte: se asume que
se cumple la especificacin de una invocacin interna, se prueba a partir de dicha
asuncin que la misma especificacin se cumple con respecto al cuerpo del
procedimiento que incluye la invocacin, y luego se descarta la asuncin. De esta
manera se define una regla con una forma particular (es una meta-regla), con una
premisa que no es una frmula de correctitud sino un enunciado acerca de la existencia
de una prueba con una asuncin. La regla se denomina REC:
Regla REC
tal que S es el cuerpo de proc. El call proc de la premisa debe entenderse como interno
de S, y el call proc de la conclusin como invocante de S. Una vez aplicada REC se
descarta la asuncin {p} call proc {q}. El mtodo H extendido con REC sigue siendo
sensato. Dado que la premisa de REC no es una frmula de correctitud, la sensatez de la
regla no puede probarse como antes. En este caso la induccin se plantea de un modo
algo distinto: asumiendo que se obtiene una frmula verdadera mediante una prueba
determinada, se demuestra que la misma frmula es verdadera mediante una prueba ms
larga, medida ahora en invocaciones recursivas. La completitud del mtodo tambin se
conserva, y se prueba en base a la posibilidad de expresar una asercin que denota el
conjunto de todos los estados alcanzados despus de una cantidad arbitraria de
invocaciones recursivas.
273
{x = X} call pot2 {x = X} | {x = X} S {x = X}
porque no existe ninguna relacin entre las X a la izquierda y las X a la derecha del
smbolo |. Lo que verdaderamente se est pidiendo probar es que asumiendo que la
invocacin a pot2 preserva el valor de x, se prueba tambin que S preserva el valor de x,
no importa el valor de x en cada caso. Como mostramos a continuacin, otra vez
debemos recurrir a la regla INST. Los primeros pasos de la prueba son
1. {x = Z} call pot2 {x = Z}
2. {x = X} y := y . 2 {x = X}
3. {x = X 1} x := x + 1 {x = X}
4. {x = X 1} call pot2 {x = X 1}
Computabilidad, Complejidad Computacional y Verificacin de Programas
(ASUNCIN)
(ASI)
(ASI, CONS)
(1, INST)
274
Fin de Ejemplo
La recursin es otra fuente de no terminacin de los programas PLW. La prueba
habitual de terminacin de un procedimiento recursivo tambin se basa en la definicin
de un invariante parametrizado p(n). La regla correspondiente, denominada REC*, tiene
la siguiente forma:
Regla REC*
tal que S es el cuerpo de proc, n var(S) y n free(q). Como REC, REC* es una metaregla, su primera premisa no es una frmula de correctitud. La cuantificacin en la
primera premisa indica que el variante n es el mismo a izquierda y derecha del smbolo
|. Como antes, el call proc de la premisa debe entenderse como interno de S, y el call
proc de la conclusin como invocante de S.
Se define que una computacin de una invocacin a un procedimiento recursivo proc
con cuerpo S es (q, n)-profunda, si termina en un estado que satisface q y en todo
momento hay a lo sumo n invocaciones activas de proc (una invocacin est activa si la
instancia correspondiente no ha terminado). En este sentido, la asuncin p(n) call proc
q establece que a partir de cualquier estado que satisface p(n), una computacin de
call proc es (q, n)-profunda, y se utiliza para probar p(n + 1) S q, es decir que a partir
de cualquier estado que satisface p(n + 1), una computacin de call proc es (q, n + 1)profunda. Como p(0) significa que ningn estado satisface p(0), entonces el
cumplimiento de las premisas de REC* asegura la terminacin de la invocacin call
proc a partir de cualquier estado que satisfaga el invariante parametrizado p(n) para
algn n.
La sensatez y completitud de H* extendido con REC* se prueban como antes. En el
primer caso se asume no terminacin y se llega a un absurdo relacionado con el orden
parcial bien fundado (N, <), y en el caso de la completitud se demuestra que con una
interpretacin aritmtica se puede expresar p(n).
275
y supongamos que se lo invoca con call suma1(x ; x). Una postcondicin natural para
suma1 es z = y + 1 (luego establecemos restricciones sobre la forma de la postcondicin
de un procedimiento), y por lo tanto despus de la invocacin se obtiene la asercin x =
x + 1, que es falsa. Existen reglas sensatas (complejas) para el manejo de alias. En
Computabilidad, Complejidad Computacional y Verificacin de Programas
276
tal que el programa de referencia tiene la declaracin procedure proc(val y ; res z): S.
S[y | y][z | z] se obtiene de S renombrando todas las ocurrencias de y con y, y de z
con z (se utilizan y, z, en lugar de y, z, para evitar conflictos de nombres de variables
con el entorno de invocacin). La transicin captura la idea de la invocacin con
parmetros: se expande el estado corriente, se asigna el parmetro real por valor al
parmetro formal correspondiente, se ejecuta el cuerpo del procedimiento, se devuelve
el parmetro formal por resultado al parmetro real correspondiente, y finalmente el
estado corriente vuelve a su situacin original con la instruccin release, que se
especifica con la transicin
Ricardo Rosenfeld y Jernimo Irazbal
277
Regla PINVOC
{p} S {q}
tal que el programa de referencia incluye la declaracin procedure proc(val y ; res z): S,
free(p) {y, z}, y free(q) {z}. La regla establece que a partir de una frmula de
correctitud parcial sobre el cuerpo de un procedimiento, se puede inferir la misma
frmula sobre la invocacin ficticia al procedimiento, tomando como parmetros reales
los formales. Por la semntica del parmetro por valor, la postcondicion no lo incluye
(para referenciarlo se puede utilizar una variable de especificacin). La segunda regla se
basa en la siguiente idea. Dada la frmula {p} S {q}, supongamos que se quiere
probar {p} call proc(e ; x) {q}, siendo S el cuerpo de proc, expresado en trminos de y,
z. Por la asignacin inicial del parmetro por valor, debe cumplirse naturalmente p
p[y | e]. De la misma manera, por la devolucin del parmetro por resultado, la
postcondicin q debe implicar una apropiada postcondicin q. Suponiendo que el
efecto de S a partir de e es la asignacin de un determinado valor a al parmetro z,
entonces la misma asignacin se hace al parmetro x, lo que debe reflejarse en la
postcondicin q. As, se debe agregar la asercin a: (q[z | a] q[x | a]) como
precondicin de la invocacin al procedimiento. La regla completa, conocida como
ADAPT, se formula as:
Regla ADAPT
278
{u = 0}
P4 :: procedure suma1(val y ; res z): z := y + 1 ;
call suma1(u ; v)
{v2 = v}
1. {y = Y} z := y + 1 {z = Y + 1}
(ASI, CONS)
2. {y = Y} call suma1(y ; z) {z = Y + 1}
(1, PINVOC)
3. {y = 0} call suma1(y ; z) {z = 1}
4. a: (a = 1 a2 = a)
(MAT)
Fin de Ejemplo
Adaptando la regla REC para considerar procedimientos recursivos con parmetros, se
formula la regla PREC que se presenta a continuacin (seguimos asumiendo un
parmetro de cada tipo, y se tienen en cuenta las restricciones previas):
Regla PREC
Con PREC se prueba sin problemas {a = A 0} call fact(a ; b) {b = A!}, siendo fact el
siguiente procedimiento que calcula el factorial (la prueba queda como ejercicio):
279
i=1,n
tal que B es una expresin booleana y el cuerpo S tiene slo instrucciones de PLW a
excepcin del while (es decir que no se permite el anidamiento de instrucciones await, y
adems S termina siempre). Un proceso ejecuta un await para producir un retardo que le
permita avanzar cuando se cumpla un determinado criterio de consistencia asociado a
una o ms variables compartidas, o bien para obtener exclusividad sobre una seccin
crtica, es decir una seccin de programa con variables compartidas modificables. La
semntica informal del await es la siguiente. El proceso asociado accede con
exclusividad a las variables de la expresin booleana B, y si B resulta verdadera, se
ejecuta el cuerpo S completo, sin interrupciones. De esta manera el await se ejecuta
atmicamente. Si en cambio B es falsa, se libera el acceso a las variables de la
expresin, y el proceso queda bloqueado hasta una etapa posterior, cuando en la misma
situacin pueda avanzar por una evaluacin positiva de B.
Se sigue asumiendo que el skip, la asignacin y la evaluacin de una expresin
booleana son atmicos, para facilitar la metodologa de prueba. La comunicacin entre
los procesos se efecta a travs de las variables compartidas. El control de un programa
se sita en distintos lugares al mismo tiempo, uno en cada proceso. Como en el caso de
Computabilidad, Complejidad Computacional y Verificacin de Programas
280
281
Regla AWAIT
{p B} S {q}
Como se observa, la forma del AWAIT es muy similar a la de la regla COND para la
seleccin condicional. El eventual bloqueo que puede provocarse por una evaluacin
negativa de la expresin booleana B se considera en la verificacin de la correctitud
total. Se demuestra fcilmente que la regla AWAIT es sensata (la prueba queda como
ejercicio).
Con respecto a la composicin concurrente lo natural es definir, asumiendo
composicionalidad, una regla de prueba estableciendo que a partir de las frmulas de
correctitud parcial {pi} Si {qi} correspondientes a los procesos Si, se deriva la frmula
282
S1 :: x := x + 2
S2 :: x := x + 1 ; x := x + 1
son funcionalmente equivalentes, o en otras palabras, cumplen para todo par (p, q):
|= {p} x := x + 2 {q} |= {p} x := x + 1 ; x := x + 1 {q}
T :: x := 0
i=1,n
Si ] valdr
283
{x = 0} x := x + 2 {x = 2}
{x = 0} x := 0 {true}
Regla CONC
284
que las proof outlines sean libres de interferencia tornan las pruebas de los programas
concurrentes bastante ms trabajosas que las de los programas secuenciales (dados dos
procesos de tamao n1 y n2, respectivamente, en la segunda etapa hay que verificar n1.n2
frmulas de correctitud). De todas maneras, en la prctica muchas validaciones se
resuelven trivialmente. El caso ms tpico se da cuando la asercin r y la instruccin T
no comparten variables. Otro caso de simplificacin se cumple cuando la conjuncin r
pre(T) es falsa, situacin que representa un interleaving que no puede suceder. Se
demuestra fcilmente que la regla CONC es sensata (la prueba queda como ejercicio).
Antes de presentar un ejemplo de prueba en este marco, tenemos que completar la
definicin inductiva de las proof outlines desarrollada en la Clase 12, agregando el
await. Dada la instruccin S :: await B then T end, se define:
pre(S) B pre(T), y post(T) post(S)
Se cumple que las proof outlines son libres de interferencia, es decir que las siguientes
frmulas son verdaderas:
{(x = 0 x = 2) (x = 0 x = 1)} x := x + 2 {x = 0 x = 2}
{(x = 1 x = 3) (x = 0 x = 1)} x := x + 2 {x = 1 x = 3}
{(x = 0 x = 1) (x = 0 x = 2)} x := x + 1 {x = 0 x = 1}
{(x = 2 x = 3) (x = 0 x = 2)} x := x + 1 {x = 2 x = 3}
Tambin vale:
x = 0 ((x = 0 x = 2) (x = 0 x = 1))
((x = 1 x = 3) (x = 2 x = 3)) x = 3
Ricardo Rosenfeld y Jernimo Irazbal
285
Notar que no se muestran las aserciones internas de los await. En la primera etapa deben
efectivamente encontrarse, pero en la segunda no se consideran porque los await son
atmicos. A partir de estas proof outlines, se llega sin problemas a {N > 1} Pcfac {n =
N!}. Queda como ejercicio completar la prueba.
Fin de Ejemplo
El debilitamiento de las aserciones, necesario para que las proof outlines sean libres de
interferencia, atenta contra la completitud del mtodo de verificacin. Por ejemplo, se
cumple
|= {x = 0} [x := x + 1 || x := x + 1] {x = 2}
286
{x = 0 x = 1} x := x + 1 {x = 1 x = 2}
{x = 0 x = 1} x := x + 1 {x = 1 x = 2}
287
A free(q) = .
Notar que puede ser A free(p) (dichas variables se tratan como variables de
especificacin). Con estas consideraciones, presentamos la nueva regla de prueba:
Regla AUX
{p} P {q}
{p} P| A {q}
tal que P| A es el programa P sin las nuevas asignaciones con variables auxiliares. Se
demuestra fcilmente que la regla AUX es sensata (la prueba queda como ejercicio).
La sensatez fuerte y la completitud del mtodo de verificacin de correctitud parcial son
base para la prueba de las otras propiedades de un programa concurrente. En efecto, la
metodologa que estamos describiendo plantea un esquema de prueba en dos etapas para
todas las propiedades. En la primera etapa se encuentran proof outlines para cada
proceso, las cuales pueden variar de prueba en prueba. Y en la segunda etapa las
mismas se consisten, con un criterio que depende de la propiedad.
Por ejemplo, en el caso de la propiedad de terminacin, la segunda etapa consiste en
verificar que las proof outlines son libres de interferencia, pero adems que para todo
invariante parametrizado p(w) de una proof outline y toda asercin pre(T) de otra,
siendo T un await o una asignacin fuera de un await, se cumple p(w) pre(T) T v
w: p(v). Es decir, no basta con probar aisladamente que todo while termina, sino que
tambin debe verificarse que ninguna instruccin de otro proceso que puede modificar
variables compartidas perjudique la terminacin del while incrementando el variante
asociado (puede en cambio acelerar la terminacin si lo decrementa). Queda como
288
ejercicio probar la terminacin del programa Pcfac del factorial utilizando este
mecanismo. En particular, con hiptesis de fairness la prueba de terminacin contempla
la posibilidad de instrucciones while que, consideradas aisladamente, pueden no
terminar. Por ejemplo, dado el programa
P :: [while x = 1 do skip od || x := 0]
289
290
Regla WITH
{Ir p B} S {Ir q}
La asercin Ir es un invariante asociado al recurso r, que vale toda vez que el recurso
est libre. Las variables de Ir estn en r. La regla establece que si se cumple {p B} S
{q}, entonces tambin se cumple {p} with r when B do S endwith {q}, pero con la
condicin de que la ejecucin de S preserve, a partir de p B, el invariante Ir.
Correspondientemente, para la composicin concurrente se utiliza la meta-regla SCC
(por seccin crtica condicional):
Regla SCC
Ejercicios de la Clase 15
1. Una aproximacin conocida para la definicin semntica de los arreglos consiste en
diferenciar la parte izquierda de la parte derecha de una variable suscripta. Dada una
variable a[e], se define L(a[e])() = (a, R(e)()) para la parte izquierda y R(a[e])()
= (L(a[e])()) para la parte derecha (L por left, izquierda, y R por right, derecha).
Ricardo Rosenfeld y Jernimo Irazbal
291
Es decir, para determinar el valor de una variable a[e], se le asocia a a[e] un par (a,
i), siendo i el valor de e en el estado corriente (parte izquierda), y se aplica sobre
(a, i) para obtener su valor (parte derecha). Por ejemplo, una asignacin a[e1] :=
b[e2], dado un estado , se interpreta de la siguiente manera: primero se evala e1 en
y se obtiene i, y se le asocia a a[e1] el par (a, i); luego se evala e2 en y se
obtiene k, y se le asocia a b[e2] el par (b, k); luego se aplica sobre (b, k) y se
obtiene n; y finalmente se reemplaza por , que es igual a salvo que ahora
((a, i)) = n. Inductivamente, se define entre otras cosas:
1. L(x)() = x
2. L(a[e])() = (a, R(e)())
3. R(n)() = n, siendo el n de la izquierda un numeral y el n de la derecha un entero
4. R(x)() = (L(x)())
5. R(e1 + e2)() = R(e1)() + R(e2)()
Se pide:
i.
ii.
iii.
2. Sea a un arreglo de valores enteros a[0:N 1], con N > 0. Se define que una seccin
de a es un fragmento a[i:k], con 0 i k < N. La expresin si,k denota la suma de
a[i:k], es decir n=i,k a[n]. Una seccin de mnima suma, o directamente una seccin
mnima, de a[0:N 1], es una seccin a[i:k] tal que su suma es mnima
considerando todas las secciones de a. Por ejemplo, la seccin mnima de a[0:4] =
(5, 3, 2, 4, 1) es a[1:3], cuya suma es 5, y las secciones mnimas de a[0:4] = (5,
2, 5, 4, 2) son a[1:1] y a[4:4], con suma 2. Se pide construir sistemticamente un
programa Sminsum que devuelva en una variable x la suma de la seccin mnima de
una arreglo a[0:N 1], es decir que satisfaga N > 0 Sminsum x = min{si,k | 0 i k
< N}. Se establece que a change(Sminsum).
3. Probar que la sensatez y la completitud del mtodo H se preservan, cuando H se
extiende con la regla INVOC para verificar programas PLW con procedimientos.
4. Completar la prueba del Ejemplo 15.2.
5. Completar las pruebas del Ejemplo 15.3.
6. Probar, utilizando el mtodo H extendido para programas con procedimientos:
Computabilidad, Complejidad Computacional y Verificacin de Programas
292
{n = N 0 s = 0}
i.
procedure p:
if n = 0 then skip
else n := n 1; call p ; s := s + 1; call p ; n := n + 1 fi ;
call p
{n = N s = 2N 1}
x = N 0
ii.
procedure d:
if x = 0 then skip else x := x 1 ; call d ; x := x + 2 fi ;
call d
x = 2N
{a = N 0}
iii.
iv.
{true} [x := 1 ; x := 2 || x := x + 1] {x = 2 x = 3}
ii.
{true} [x := x + 1 ; x := x + 1 || x := 0] {x = 0 x = 1 x = 2}
11. Mostrar si se puede probar la frmula siguiente sin recurrir a la regla AUX:
{true} [x := 0 || x := x + 1] {x = 0 x = 1}
293
294
295
296
297
una interesante extensin del mtodo H, para deducir aserciones de correctitud parcial
de un programa a partir de aserciones de correctitud de otro. El trabajo (Constable &
ODonnel, 1978) presenta programas anotados, que se consideran precursores de las
proof outlines que hemos introducido en la Clase 12. En (Jansen, 1983) se expone una
amplia discusin interdisciplinaria sobre la propiedad de composicionalidad, abarcando
la computacin, las matemticas y la lingstica.
Nuestra descripcin del mtodo H* para la verificacin de la terminacin de programas
sigue fundamentalmente la presentacin de (Apt, 1981), inspirada en reglas de
verificacin conocidas como reglas de Harel, basadas en la lgica dinmica. Lecturas
recomendadas sobre fairness son (Francez, 1986) y (Grumberg, Francez, Makowsky &
de Roever, 1985).
El trabajo (Cook, 1978) se considera punto de partida para el estudio de la sensatez y la
completitud de los mtodos de verificacin de programas; en este caso se utiliza un
lenguaje de programacin ms sofisticado que PLW, que incluye procedimientos y
considera reglas de alcance, y adems la completitud se refiere a una clase de
interpretaciones. En (Bergstra & Tucker, 1981) se muestra que la expresividad no es
condicin necesaria para que se cumpla la completitud. La nocin de completitud
aritmtica se debe a (Harel, 1979). En (Clarke, 1985) se compendian resultados de la
completitud de la lgica de Hoare considerando el uso de procedimientos. Los trabajos
sobre completitud basados en la semntica denotacional tambin se desarrollaron desde
fines de la dcada de 1970; ver por ejemplo (de Bakker, 1980), donde se consideran
dominios ms generales, y se tratan adems las excepciones.
La insensatez del axioma de asignacin cuando se utilizan arreglos se trat en (de
Bakker, 1980), entre otras publicaciones; se describe un sistema completo de reglas de
verificacin para programas con arreglos.
El desarrollo sistemtico de los programas secuenciales, tomando como gua los
mtodos axiomticos para las pruebas a posteriori, se inici con (Dijkstra, 1976); un
programa se va construyendo y probando mediante axiomas y reglas, proceso que
termina cuando se obtiene la precondicin ms dbil del programa. Para analizar la
construccin de un programa no trivial junto con su prueba de correctitud, ver por
ejemplo (Hoare, 1971a).
El primer anlisis sobre la verificacin de programas con procedimientos apareci en
(Hoare, 1971b); se describen reglas de invocacin, recursin y adaptacin, como las que
hemos presentado en nuestro libro. En (Martin, 1983) se discute el relajamiento de las
Computabilidad, Complejidad Computacional y Verificacin de Programas
298
restricciones para permitir el uso de alias. Sobre otros resultados relacionados con el
pasaje de parmetros y el uso de variables locales, recomendamos la lectura de (Apt,
1981) y (Gries & Levin, 1980).
En (Owicki & Gries, 1976a) y (Owicki & Gries, 1976b) se plante la extensin al
mtodo de Hoare para la prueba en dos tiempos de los programas concurrentes con
variables compartidas. Los lenguajes con recursos de variables presentados en dichos
trabajos evolucionaron hacia el uso de los monitores, para encapsular datos y su
manipulacin concurrente. La verificacin de programas con monitores apareci en
(Howard, 1976), entre otras publicaciones. En la tercera parte de nuestro libro anterior
(Rosenfeld & Irazbal, 2010) se describe un mtodo de prueba en dos tiempos para los
programas distribuidos, publicado inicialmente en (Apt, Francez & de Roever, 1980). El
libro (Chandy & Misra, 1988) presenta una sistematizacin para la derivacin de
programas concurrentes a partir de especificaciones expresadas en lgica temporal; se lo
considera fundacional como lo fue el de E. Dijkstra para la programacin secuencial.
El uso de la lgica temporal en la verificacin de programas (fuera del alcance de
nuestro libro) arranc con (Pnueli, 1977), en que se consideran los sistemas reactivos.
Con la lgica temporal se pueden expresar hiptesis de fairness, y tambin propiedades
adicionales a las del comportamiento de entrada/salida de los programas. Para leer ms
sobre este tema sugerimos (Manna & Pnueli, 1991) y (Manna & Pnueli, 1995). En el
caso especial de los programas que operan slo con estados finitos, la verificacin
automtica es posible. (Queille & Sifakis, 1981) y (Emerson & Clarke, 1982) iniciaron
el desarrollo de herramientas para chequear automticamente si tales programas
satisfacen especificaciones escritas en lenguajes de aserciones basados en la lgica
temporal; en trminos lgicos, se verifica que los programas sean modelos de las
especificaciones, y por eso esta aproximacin se conoce como model checking.
Para pasar revista al estado del arte del soporte herramental a los mtodos formales (no
slo de verificacin de programas), recomendamos (Woodcock, Gorm Larsen,
Bicarregui & Fitzgerald, 2009), reciente presentacin muy completa que describe la
aplicacin de dichos mtodos en la industria. En particular, destacamos las referencias a
los lenguajes de especificacin JML y Spec#, que incluyen el manejo de pre y
postcondiciones e invariantes, con soporte herramental para verificacin esttica y
chequeo en tiempo de ejecucin.
Para profundizar en los distintos temas sobre verificacin de programas presentados en
las cinco clases de la tercera parte del libro, incluyendo referencias histricas y
Ricardo Rosenfeld y Jernimo Irazbal
299
Apt, K. (1981). Ten years of Hoares logic, a survey, part 1. ACM Trans.
Prog. Lang. Syst., 3, 431-483.
300
Clint, M. & Hoare, C. (1972). Program proving: jumps and functions. Acta
Informatica, 1, 214-244.
Gries, D. & Levin, G. (1980). Assignment and procedure call proof rules.
ACM Trans. Prog. Lang. Syst., 2(4), 564-579.
301
Jones, C. (1992). The search for tractable ways of reasoning about programs.
Tech. Rep. UMCS-92-4-4, Department of Computer Science, University of
Manchester, Manchester.
Manna, Z. & Pnueli, A. (1991). The temporal logic of reactive and concurrent
systems specification. Springer-Verlag.
302
Tucker, J. & Zucker, J. (1988). Program correctness over data types with errorstates semantics. Centrum voor Wiskunde en Informatica Monograph 6,
Amsterdam, North-Holland.
Woodcock, J., Gorm Larsen, P., Bicarregui, J. & Fitzgerald, J. (2009). Formal
methods: practice and experience. ACM Computing Surveys, 41, 4, 1-40.
303
Eplogo
Generalmente al comenzar y al terminar el dictado de la asignatura Teora de la
Computacin y Verificacin de Programas, les digo a mis alumnos que por aprender
estos contenidos no les aseguro que vayan a conseguir trabajo enseguida como
profesionales de la informtica en el rea de sistemas de un banco, por decir algo. La
idea es provocar una discusin con ellos acerca de la importancia de estudiar
fundamentos como los que aparecen en este libro (mal llamados a veces de manera
discriminatoria temas tericos). De esto se trata en ltima instancia el presente
trabajo, de presentar y aplicar nociones tales como induccin, autmata, demostracin
por el absurdo, gramtica, sistema axiomtico, semntica de un lenguaje de
programacin, reduccin de problemas, etc. A los alumnos llego a decirles que la
asignatura es una excusa para ensear en un determinado orden conceptos de esta
naturaleza. Porque tarde o temprano, an sin saberlo, emplearn estos conocimientos,
para lograr la abstraccin necesaria para resolver problemas computacionales,
combinando componentes para obtener soluciones complejas a partir de soluciones ms
simples. La discusin obviamente se simplifica con los estudiantes con vocacin para la
investigacin. De esta manera, Computabilidad, Complejidad y Verificacin de
Programas es un viaje de vuelta no slo en el sentido del recorrido a travs del universo
de los problemas hacia su interior, sino tambin en el de aprovechar la madurez de los
estudiantes con respecto a la algortmica y las matemticas para llevar a cabo un anlisis
ms abstracto y profundo. Por fortuna, la profusin de material bibliogrfico,
potenciado por los buscadores en Internet que permiten encontrar cualquier elemento
ac y ahora, facilitan sobremanera la tarea docente. Coincidentemente, en 2012 se
cumplieron cien aos del nacimiento de A. Turing, uno de los protagonistas principales
de este libro. Un evento a mitad de ao a propsito de dicho acontecimiento reuni a un
gran nmero de investigadores, todos ellos receptores del Premio Turing (especie de
Nobel de la computacin). Traigo a colacin este hecho porque un leitmotiv del
encuentro fue revisar todo lo logrado desde el famoso artculo de Turing de 1936, al
tiempo de plantear lo mucho que queda por hacer an en temas bsicos como la
produccin de software industrial confiable. Ms que suficiente (si lo dicen ellos)
para motivar a estudiantes y docentes a la lectura y dictado de los tpicos de este
trabajo.
304
ndice de definiciones
Definicin 1.1. Mquina de Turing
27
54
83
105
132
136
208
209
212
214
220
224
227
238
ndice de teoremas
Teorema 2.1. Algunas propiedades de clausura de la clase R
28
32
35
43
55
70
82
113
125
132
138
139
143
253
256
305
258
261
ndice de ejemplos
Ejemplo 1.1. Mquina de Turing reconocedora
10
11
12
15
16
20
21
(RE CO-RE)
38
47
48
49
55
57
59
61
62
63
64
67
72
72
73
74
84
86
89
91
92
106
306
109
110
117
118
119
121
123
133
134
142
144
145
147
161
162
169
179
180
181
184
188
213
218
221
230
231
232
239
242
269
307
272
273
279
285
ndice de ejercicios
Ejercicios de la Clase 1
24
Ejercicios de la Clase 2
38
Ejercicios de la Clase 3
51
Ejercicios de la Clase 4
75
Ejercicios de la Clase 5
94
Ejercicios de la Clase 6
115
Ejercicios de la Clase 7
130
Ejercicios de la Clase 8
151
Ejercicios de la Clase 9
175
Ejercicios de la Clase 10
194
Ejercicios de la Clase 11
224
Ejercicios de la Clase 12
236
Ejercicios de la Clase 13
251
Ejercicios de la Clase 14
263
Ejercicios de la Clase 15
291
308