1 Definiciones básicas - LDC

Anuncio
Universidad Simón Bolívar
Dpto. de Computación y Tecnología de la Información
CI3721 - Traductores e Interpretadores
Abril-Julio 2008
Profesor Luis astorga
Apuntes sobre problemas de decisión y reducción de
problemas
1
De…niciones básicas
Es necesario tener presentes estas de…niciones básicas para entender el contexto:
Procedimiento: conjunto …nito de instrucciones que son ejecutadas en una
cierta cantidad de tiempo (número de pasos).
Un procedimiento termina con una entrada especí…ca de datos (input) si se
detiene después de un número …nito de instrucciones elementales.
Algoritmo: procedimiento que termina en todos los inputs de su espacio
de estados, es decir, en todos aquellos que se corresponden con la de…nición del
dominio del procedimiento.
Funciones recursivas: un procedimiento se de…ne matemáticamente como
una función entre el espacio de estados posibles (su dominio), y el conjunto
(codominio) de soluciones o salidas (output).
Las funciones que de…nen un procedimiento son funciones recursivas parciales .
Las funciones que de…nen un algoritmo son funciones recursivas totales (están de…nidas en todo su dominio).
Lenguajes recursivamente numerables: son los lenguajes formales determinados por un procedimiento cuando se codi…can sus posibles inputs.
Lenguajes recursivos: son los lenguajes formales determinados por un
algoritmo cuando se codi…can sus posibles inputs.
Tesis de Church-Turing: existen distintos formalismos, equivalentes entre
sí, que describen los procedimientos:
- Máquinas de Turing
- Gramáticas sin restricciones (tipo 0 en la jerarquía de Chomsky)
- Cálculo Lambda
- Sistemas de Post
Cualquier proceso de computo que pueda llamarse procedimiento se puede
simular con una máquina de Turing.
Por lo tanto, la mayor clase de lenguajes que se pueden manipular de manera
práctica está incluida en la clase de los lenguajes recursivamente numerables.
Problema: desde la perspectiva lógica, se entiende un problema como un
predicado que puede ser cierto o falso dependiendo de sus argumentos, siempre
y cuando estos correspondan con el tipo designado en el predicado. Una instancia del problema es una elección especí…ca de valores para los argumentos del
problema.
1
Solución: es una función lógica del espacio de instancias posibles de un
problema en el conjunto fsi; nog (o también, según el gusto, ftrue; f alseg; fblanco; negrog; f1; 0g,etc.).
Problemas decidibles: si una función solución de…ne un algoritmo (es
decir, si es una función recursiva total en el dominio de instancias), el problema
en cuestion se dice decidible (porque es posible decidir sobre cualquier instancia)
o soluble (porque poder decidir, decir si o no en cualquier instancia, supone dar
una respuesta de solución al problema).
Cuando se tiene un problema de…nido matemáticamente por una función recursiva total, es decir, cuando se tiene un algoritmo, el lenguaje que se construye
con la codi…cación de sus valores posible (sus inputs) es un lenguaje recursivo.
Problemas indecidibles: si se puede probar lógicamente que no existe una
solución al problema planteado (es decir, que no existe un algoritmo de…nible),
el problema se dice indecidible o insoluble. Para probar que un problema es indecidible, es necesario demostrar que el lenguaje que se obtiene de la codi…cación
de sus instancias posibles es recursivamente numerable y no recursivo.
Nota: curiosamente en español el término soluble tiene dos acepciones: aquello que se puede disolver o desleír y aquello que se puede resolver.
2
Ejemplo de la técnica de diagonalización
En general, los problemas típicos de indecibilidad provienen de predicados lógicos que reclaman la técnica de diagonalización. A continuación mostramos un
ejemplo de como se emplea esta técnica de demostración.
Dado el albabeto = f0; 1g, sabemos que el universo lingüístico
que el
de…ne, es decir, el conjunto de todas las palabras que se pueden construir en
orden lexicográ…co a partir de , es numerable: esto quiere decir que se puede
establecer una correspondencia biyectiva entre el conjunto
= f ; 0; 1; 00; 01; 10; 11; 000; 001; 010; 011; 100; 101; 110; 111; :::g
y el conjunto de los numeros natutales
N = f0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; :::g
Ahora bien, queremos saber si el conjunto de todos los subconjuntos posibles
de
: el conjunto P( ) de las partes de
, que no es otro que el conjunto
de todos los lenguajes que se pueden dar con el alfabeto , es numerable. Del
álgebra sabemos que el conjunto de subconjuntos de un conjunto numerable no
es numerable. Si podemos comparar
con N, tendríamos que comparar P( )
con R, es decir, con los numeros reales. Esto se demuestra así:
Supóngase, por el absurdo, que P( ) es numerable, entonces todos los
lenguajes pueden ser enumerado de la forma L0 ; L1 ; L2 ; : : : Y dado que
es numerable, sus elementos (las palabras) puede numerarse de la forma w0 ; w1 ; w2 ; : : :
Construimos la siguiente tabla in…nita hipotética (esto es sólo un ejemplo de
2
como se vería dicha tabla)
P(
)n
L0
L1
L2
..
.
w0
0
1
0
w1
1
1
1
w2
0
0
0
:::
que expresa en sus entradas con 0 si la palabra wi no forma parte o con 1
si la palabra wi si forma parte del lenguaje Li para todo i. La sucesión de 0’s
y 1’de cada …la codi…ca su respectivo lenguaje en una serie única in…nita (si el
lenguaje es …nito la serie termina con una cola in…nita de ceros).
Se quiere construir un lenguaje posible dentro de P( ) que no esté en la
lista L0 ; L1 ; L2 ; : : : con lo cual la supocisión de que P( ) es numerable es falsa.
Si tomamos la diagonal del cuadro hipotético y hacemos de cada 0 un 1 y de
cada 1 un 0 estaremos construyendo un lenguaje en P( ) que se de…ne formado
por aquellas palabras que no pertenecen al lenguaje que tiene el mismo índice
en la tabla. La expresión formal de ese lenguaje es
L = fwi j wi 2
= Li g
que pertenece a P( ) porque es un lenguaje posible desde el punto de vista de
su construcción lógica.
Luego, porque L está en P( ), le debe corresponder algún número k de la
numeración, es decir L debe ser algún Lk . Pero esto presenta un problema serio
porque, por la manera en que se construyó, L es distinto a todos los lenguajes
que están numerados: la razón es que di…ere siempre del número binario de la
diagonal para cualquier Li .
El razonamiento absurdo es el siguiente:
Tal y como hemos asumido, L = Lk para algún k 2 N, entonces, en particular, si la palabra wk 2 L se tiene que, por de…nición de L
wk 2
= Lk
con lo cual, contradicción, wk 2
= L.
Si, por el contrario, wk 2
= L, entonces, por la de…nición de L,
wk 2 Lk
pero L = Lk , lo cual es también una contradicción.
En conclusión, P( ) no es numerable.
Dado que wk 2
debe estar o no estar en L; la suposición original es falsa.
Para cada alfabeto
hay un universo innumerable de lenguajes a especi…car, pero el resultado anterior demuestra que no existe ningún método de
especi…cación de lenguajes que sea capaz de de…nir todos los lenguajes sobre
ese alfabeto. Es decir, dado un método de representación de lenguajes existen
siempre lenguajes que no son representables.
3
3
Ejemplo de problema insoluble
Se plantea el siguiente problema:
¿Es un procedimiento dado P , un algoritmo?
Es decir, ¿podemos demostrar que existe una función recursiva total que tome
como argumento todo procedimiento P codi…cado de alguna manera y responda
en cada caso si o no ?. Si la respuesta fuese a…rmativa, la teoría de la computación se enseñaría en bachillerato. Veamos.
Partimos de la premisa que todo procedimiento es codi…cable en alguna
forma (recordar como se codi…can las máquinas de Turing): los inputs de un
procedimiento se codi…can y forman un lenguaje, y los procedimientos también
se pueden codi…car.
Supongamos que existe un procedimiento P que es un algoritmo y toma como
argumento una codi…cación de cualquier otro procedimiento Q devolviendo la
respuesta si cuando Q sea un algoritmo.
Construimos entonces el siguiente algoritmo R :
Entrada: cualquier procedimiento Q
Salida:
no : si Q no es un algoritmo, o si Q es un algoritmo y Q
evaluado en Q responde si.
si : si Q es un algoritmo y Q evaluado en Q responde no.
Nótese que se está aplicando la codi…cación de Q como argumento del algoritmo Q.
Algoritmo:
if (P (Q) si) !skip
[] (P (Q) no) ! no ; abort.
…;
if (Q(Q) si) ! no
[] (Q(Q) no) ! si
…
Ahora bien, en la suposición de que P sea un algoritmo, R es también un
algoritmo porque en cualquier caso dirá si o no:
La pregunta es, ¿qué sucede si codi…camos R y lo introducimos como entrada
del mismo R ?, es decir, ¿qué sucede cuándo Q = R ?,
Como R es un algoritmo, entonces P (R) si. Luego, se evaulará R(R): si
la respuesta global de R como algoritmo es si con la entrada R codi…cado quiere
decir que durante la ejecución de R se determino que R(R) no. Y viceversa.
En conclusión, no existe algoritmo que diga cuando un procedimiento es un
algoritmo.
4
Ejemplo de reducción de problemas de decisión
Considérese el siguiente problema P : Dada la máquina de Turing T , ¿el lenguaje
que acepta T es vacío?
4
El lenguaje de la codi…cación de las instancias a…rmativas de P es
SP =
w 2 f0; 1g j
: (9M T T : w = cod (T )) _
(9M T T : w = cod (T ) ^ L (T ) = ?)
y el lenguaje de la codi…cación de las instancias negativas de P es
NP = w 2 f0; 1g j 9M T T : w = cod (T ) ^ L (T ) 6= ?
de tal manera que SP [ NP = f0; 1g puesto que en SP están tanto los números
binarios que no representan máquinas de Turing como los números binarios que
representan máquinas de Turing que no aceptan cadena alguna.
Veamos primero que NP es un lenguaje recursivamente numerable y no es
recursivo. Para ello basta construir una máquina de turing TN que acepte a
NP . TN consta de cuatro cintas:
1. La primera cinta recibe un número binario w y la máquina chequea
que sea la codi…cación binaria de una máquina de Turing. Si no lo es, TN se
detiene. Si lo es, entonces existe una máquina de Turing T tal que w = cod(T )
y TN continúa su trabajo.
2. Las cintas dos, tres y cuatro simulan la máquina de enumeración
para T .
Cuando aparezca la primera cadena que pertenece al lenguaje L (T ) en la
cinta dos TN entra en el estado …nal y se detiene, es decir, acepta. Si L (T ) = ?
entonces la simulación de la máquina de enumeración para T nunca producirá
resultado alguno y TN no se detendrá jamás. Por ello NP es recursivamente
numerable y no es recursivo.
Veamos ahora que SP no es recursivo. Para ello suponemos que si lo es y buscamos una contradicción construyendo un algoritmo para el lenguaje universal
LU que sabemos no es recursivo, es decir, reducimos LU a SP .
Recuérdese que, dados dos lenguajes L y M , si M es recursivo y si L M ,
es decir, si L se reduce a M , entonces L también es recursivo.
Sea TS tal que L(TS ) = SP la hipotética máquina de Turing representada
en el esquema
si
!
w
! TS
no
!
TS responde si cuando w no es el código de una máquina de Turing, o cuando w
es el código de una máquina de Turing T y L(T ) = ?. TS responde no cuando
w es el código de una máquina de Turing T y L(T ) 6= ?.
Sea también la función
f:
f (w) =
f0; 1g ! f0; 1g
cod(T 0 ) si w = cod (T ) 111cod(x) para alguna M T T y algún x 2 f0; 1g
de otro modo
5
donde para w = cod (T ) 111cod(x) se tiene que T 0 es la máquina de Turing
si
y
!
x
!
T
!
si
!
por lo tanto, si x 2 L (T ) entonces y 2 L (T 0 ) para toda y 2 f0; 1g , es decir,
L (T 0 ) = f0; 1g . Por el contrario, si x 2
= L (T ) entonces T no acepta a x y
T 0 no aceptará ninguna cadena y con lo cual L (T 0 ) = ?. Se tiene la siguiente
situación
L (T ) , L (T 0 ) = f0; 1g 6= ?
L (T ) , L (T 0 ) = ?
x 2
x 2
=
De esta manera f transforma una entrada w = cod (T ) 111cod(x) para la máquina
universal Tu en una entrada cod (T 0 ) para la máquina TS . Pero f es una función de…nida sobre todo el conjunto f0; 1g , esto es, es una función total y por
ello de…ne un algoritmo formalizado en una máquina de Turing de computo
lingüístico Tf representada en el esquema
w
!
Tf
f (w)
!
Ahora bien, se puede construir la máquina de Turing
w
!
w
!
Tf
f (w)
!
TS
si
no
no
si
!
!
!
!
tal que:
Primer caso: si w = cod (T ) 111cod(x) para alguna máquina de Turing T y
una cadena x, entonces f (w) = cod(T 0 ) de modo que, si x 2 L (T ) la máquina
TS responde no puesto que f (w) es el código de una máquina T 0 cuyo lenguaje
es distinto de vacío (L (T 0 ) = f0; 1g ). En este caso la máquina que hemos
construido responde si.
Segundo caso: si w = cod (T ) 111cod(x) para alguna máquina de Turing T y
una cadena x, y si x 2
= L (T ) la máquina TS responde si puesto que f (w) es el
código de una máquina T 0 cuyo lenguaje es vacío (L (T 0 ) = ?). En este caso la
máquina que hemos construido responde no.
Tercer caso: cuando w no es el código de ninguna máquina de Turing seguida
de una cadena entonces f (w) = y TS responde si, con lo cual la nueva máquina
responde no.
6
La máquina así construida es precisamente la máquina universal de Turing Tu
que se detiene en todas las cadenas de entrada. Pero sabemos que esta máquina
no existe porque el lenguaje universal Lu = L(Tu ) es recursivamente numerable
pero no es recursivo. La contradicción viene de suponer que el lenguaje SP era
recursivo, por lo tanto, SP no es recursivo.
Para probar que SP tampoco es recursivamente numerable basta aplicar el
siguiente resultado: Si un lenguaje L y su complemento L son ambos recursivamente numerables entonces L (y por lo tanto también L) es recursivo. Como
NP es recursivamente numerable, SP no puede serlo porque, si lo fuera, ambos
serían recursivos y acabamos de probar que SP no lo es.
7
Descargar