Sunteți pe pagina 1din 8

El estudio de las propiedades tericas de los sistemas computacionales requiere utilizar un modelo formal que defina lo que entendemos

por computador. Existe un gran nmero de trabajos que han abordado esta tarea, y se han utilizado para ello modelos muy diferentes entre s. A qu se debe que el mismo concepto de computador abstracto pueda ser representado por formalismos tan variopintos? La razn es que un ordenador ideal necesita slo un pequeo conjunto de operaciones muy elementales para tener plena funcionalidad3. En nuestro caso utilizaremos el modelo de los programas-while, que define dicho computador en trminos del lenguaje de programacin que es capaz de entender. Pero debe quedar claro desde el principio que si hubiramos partido de otro mecanismo de programacin o de otros modelos alternativos de cmputo habramos llegado igualmente a un sistema de programacin universal y aceptable, que aunque diferente, nos habra permitido establecer los mismos resultados aqu expuestos. Revisamos a continuacin algunos de los resultados bsicos de Teora de la Computabilidad a los que, insistimos, se llega de manera independiente con cualquier modelo abstracto de cmputo, pero para ello establecemos previamente algunos conceptos relacionados con el sistema computacional elegido en nuestro caso. Nos detendremos ms en aquellos detalles que necesitaremos utilizar para establecer los resultados necesarios relacionados con la tcnica de reduccin.

2.1. Procesamiento de la informacin simblica


ALFABETO Y PALABRA: La nocin de procesamiento de la informacin va ligada a la idea de transformacin controlada de objetos que resultan de la combinacin de smbolos. Por ello llamaremos alfabeto a cualquier conjunto finito de smbolos. Dado un alfabeto , definimos * como el conjunto de las palabras o cadenas sobre el mismo. Utilizaremos
Esta plena funcionalidad se resume en algo tan prosaico, como "la capacidad de programar todas las funciones computables". En esencia las funciones computables se definen en relacin a un sistema de programacin de referencia, papel que histricamente corresponde a las Mquinas de Turing. Alan Turing fue el primero en demostrar que las funciones computables podan enumerarse de manera efectiva en forma de lista.
3

ww

w.

at

em

at

ic a1 .c

om

las nociones clsicas de palabra vaca (), concatenacin e inversin de palabras. Estas y otras funciones de manipulacin de smbolos vienen listadas en el apndice. Las palabras son los elementos que nos permiten representar objetos del dominio, y por tanto son la base de la informacin. As, la misin de los programas consistir en manipular unas palabras (datos) para producir otras (resultados). FUNCIONES: Para describir el comportamiento de los programas en trminos de entrada/salida utilizaremos funciones parciales entre palabras. Estas pueden estar indefinidas para algunas de sus posibles entradas. Si la funcin : * * aplicada sobre una palabra x de entrada converge (tiene imagen) lo indicamos mediante (x). Si, por el contrario, la funcin est indefinida en ese punto escribimos (x) y decimos que diverge. Tambin utilizaremos funciones con ms de un argumento (aunque siempre con un nico resultado), de la forma : *k *. En este caso indicaremos que (x1, ..., xk) o que (x1, ..., xk). PROGRAMAS: Un programa es la especificacin no ambigua de un proceso de manipulacin de smbolos que permite transformar una o varias cadenas de entrada (datos) para obtener otra cadena como salida (resultado). Un programa debe estar construido de acuerdo a unas normas sintcticas que definen el lenguaje de programacin. En nuestro caso el lenguaje utilizado es el de los programas-while, cuya sintaxis precisa se describe en el apndice, aunque tambin puede consultarse una descripcin ms detallada en [IIS 96]. Dadas la equivalencia entre los distintos sistemas de programacin y el hecho de que en este texto utilizaremos los programas-while en exclusiva, nos referiremos a estos ltimos como programas de forma genrica. El comportamiento de un programa P estar descrito por una funcin parcial que denotaremos P : * *, y que describe la relacin que existe entre la cadena de entrada que recibe P y la que produce como resultado. Como para devolver dicho resultado el programa debe terminar su ejecucin, cuando el comportamiento de P ante una entrada x consista en ciclar indefinidamente consideraremos que el resultado del programa es indefinido y lo notaremos de manera consistente como P(x). Si P es total (est definida para todos los posibles argumentos) entonces el programa P es capaz de terminar su ejecucin sean cuales fueren las circunstancias del inicio de la misma. En el ), que est siempre otro extremo est el caso en el que P es la funcin vaca ( indefinida e indica por tanto que P cicla ante cualquier entrada.
ww w.

at

em

at

ic a1

.c om

El concepto se extiende de forma natural cuando el programa P recibe k datos de entrada en lugar de uno solo. Entonces la funcin que describe su comportamiento la notaremos como k : *k *. P COMPUTABILIDAD: Una funcin : *k * es computable si existe un programa k P que la computa ( P ), es decir, que obtiene sistemticamente los resultados de la funcin para cualesquiera valores de sus argumentos. En el mismo sentido que lo sealado anteriormente para los programas, hablamos de computabilidad en general sin ligarla a ningn sistema de programacin concreto dando por supuestas la equivalencia de todos ellos y la aceptacin de la tesis de Church-Turing (vanse por ejemplo [Mor 98], [Har 87], [SW 88] [ISI 03]). PREDICADOS: Hay una clase especial de funciones que tienen una importancia especial en Teora de la Computabilidad: los predicados o funciones booleanas totales. De la misma manera que podemos clasificar las funciones en computables o incomputables de acuerdo con la posibilidad de que un programa calcule sus valores, tambin podemos clasificar los predicados de acuerdo con la posibilidad de que un programa distinga sus casos ciertos de los falsos. Decimos que un predicado S : * B (donde B es el conjunto de los valores booleanos {true,false}) es decidible si existe un programa P que produce un resultado r1 para todos los valores que cumplen S(x) y otro resultado distinto r2 para todos los que se verifica S(x). Como su propio nombre indica, un predicado es decidible si es posible decidir su veracidad mediante un programa. Esta nocin se extiende de manera natural a los predicados k-arios de la forma S: * B.
k

2.2. Extensin a informacin no simblica


La computacin digital est basada en el reconocimiento y manipulacin de smbolos discretos distinguibles, y sta es la razn de que los sistemas de programacin estn en general definidos para operar sobre cadenas de caracteres (palabras)4. Sin embargo las palabras no son sino instrumentos para representar otras cosas, por lo que si deseamos procesar informacin en trminos de otro conjunto de datos bastar con definir alguna regla de representacin que establezca una correspondencia entre los significantes
Existen modelos de computacin generalizados ms abstractos que utilizan conjuntos de datos arbitrariamente complejos. En ellos se asume como axioma la computabilidad de las operaciones algebraicas bsicas definidas para los datos en cuestin. Lgicamente, en estos modelos no se cuestiona la plausibilidad fsica de tal axioma.
4

ww

w.

at

em

at

ic a1

.c om

(palabras sobre un alfabeto escogido) y los posibles significados (elementos de dicho conjunto de datos), de forma que cada cadena represente de manera adecuada un elemento del nuevo conjunto y que la computacin sobre palabras sea congruente con la representacin de los elementos del nuevo tipo. Si esto se hace de manera cuidadosa ello nos permitir trabajar con funciones computables en dominios distintos de *, as como utilizar los elementos y las operaciones de dichos tipos en nuestros programas como si fueran primitivas del lenguaje de programacin. As conseguimos la implementacin de algunos tipos de datos sencillos y tiles, como son los booleanos B o los nmeros naturales N. De manera anloga se implementan tipos estructurados como las pilas P y los vectores dinmicos V. Finalmente se demuestra que se pueden implementar los propios programas-while W como tipo de datos. Este ltimo hecho es esencial para la Teora de la Computabilidad, ya que los problemas ms interesantes por su dificultad intrnseca se localizan precisamente en el dominio de los programas y su comportamiento, por lo que el estudio de la computabilidad en el tipo de datos W proporcionar los resultados ms relevantes. En el apndice se listan los predicados y las funciones definidas sobre estos tipos de datos cuya computabilidad fue demostrada en [IIS 96] y que podrn ser utilizadas en los programas que construyamos de aqu en adelante. Obtenemos como ventaja un enriquecimiento del lenguaje de programacin con objetos propios (constantes, funciones y predicados) de tipos de datos muy tiles para nuestros propsitos. Salvo en el caso de los tipos finitos, como los booleanos, las implementaciones pueden definirse siempre biyectivas. Esto quiere decir que, por ejemplo, existe una correspondencia biunvoca entre los nmeros naturales y las palabras de * que sirven para representarlos, y este hecho se manifiesta independientemente del alfabeto elegido. Por ello, podemos enumerar el conjunto * de palabras sobre un alfabeto cualquiera de la forma * = {w0, w1, w2, w3, ...}, donde wi es la palabra que sirve para representar el nmero natural i. Establecido un orden podemos programar la funcin que obtiene la palabra siguiente a la recibida como dato de entrada (funcin sig) o la anterior (funcin ant). La enumeracin de las palabras puede hacerse transitiva a todo tipo de datos implementado, siendo muy destacable el caso de los programas-while, que pueden enumerarse de la forma W = {P0, P1, P2, P3, ...}, donde Pi es el programa representado por la palabra wi. Se dice entonces de wi (y, por extensin, tambin de i) que es el cdigo del programa Pi.
ww w.

at

em

at

ic a1

.c om

Dado que en esta enumeracin estn todos los programas posibles, tambin podemos enumerar en una lista la clase de todas las funciones computables de la forma {0, 1, 2, 3, }, donde i es la funcin calculada por el programa Pi, representado a su vez por la palabra wi. Diremos que wi (y, por extensin, tambin el nmero asociado i) es un ndice de la funcin i. Por todo ello, y como afirmar que una funcin es computable equivale a demostrar que existe un programa P que la computa, tambin equivale a aseverar que existe un ndice para ella, es decir un valor e tal que e. Pero debemos aadir que, en contraste con los programas, que tienen un cdigo nico, toda funcin computable tiene infinitos ndices porque podemos encontrar infinitos programas equivalentes. Esto se debe a que existen infinitas posibilidades para modificar el texto de un programa sin alterar su semntica. Al conjunto de todos los ndices de una funcin lo denotamos por Ind(). Por ltimo destacaremos un convenio notacional ms: nos referiremos al dominio de la funcin computable i como Wi y a su rango como Ri 5. Estos conjuntos tienen cierta relevancia a la hora de describir el comportamiento de los programas, ya que Wi representa el conjunto de datos que Pi acepta como vlidos, mientras que Ri se refiere a los resultados concebibles para el mismo programa.

Pueden definirse infinidad de funciones que utilizan los programas como datos corrientes, siendo el sintctico el nivel de manipulacin ms sencillo que podemos definir: podemos estudiar el texto de un programa, examinar sus instrucciones o su estructura, y resolver cuestiones en cuanto a la misma. A este nivel nos encontraremos tpicamente con funciones totales que toman como argumento un programa y devuelven un resultado simple (numrico o booleano). Por ejemplo, podemos definir funciones que nos indiquen el nmero de variables o de instrucciones que tiene un programa, el nmero mximo de bucles anidados que contiene, si aparece alguna estructura con especiales caractersticas (por ejemplo, un bucle sospechoso en cuyo interior no se modifique la variable de control
En rigor, un mismo programa Pi puede ser utilizado de varias maneras dependiendo del nmero de datos que se le suministren. La enumeracin que hemos descrito ms arriba contiene solamente las funciones computables unarias. Si tenemos inters en funciones con un nmero arbitrario de argumentos, podemos
5

definir para cada k>0 la lista { 0 ,

k , k , k }, donde k es la funcin computada por el programa Pi 1 3 i 2


k
k

cuando se le suministran k datos de entrada. Lo dicho para un argumento se extiende de manera natural para k argumentos, y en particular la notacin Wi y R i para el dominio y el rango de

ww

w.

2.3. Computacin prctica en el tipo W

at

em

at

ic a1

.c om

k respectivamente. i

del while), etc. No es difcil ir demostrando la computabilidad de este tipo de funciones que nicamente trabajan sobre propiedades estticas de los programas, es decir, aquellas que pueden ser determinadas en tiempo de compilacin. Algunas de ellas vienen listadas en el apndice. Otro tipo de funciones cuya computabilidad es ms difcil de demostrar son las relacionadas con las propiedades dinmicas de los programas, aquellas que dependen de la ejecucin de los mismos. Por ejemplo, podemos definir funciones que nos indiquen cuntos pasos conlleva la ejecucin de un programa (si es que termina), si la ejecucin entra en un bucle determinado o no, o si todos los resultados del programa son nmeros menores que 1000. Entre ellas se encuentra una de importancia capital para la Teora de la Computacin: la funcin universal, que dado cualquier par programa-dato indica el resultado de la ejecucin del primero sobre el segundo. La descripcin formal de esta funcin puede encontrarse en el apndice. Su computabilidad fue probada por Turing, y puede consultarse en [ISI 03] una demostracin de la misma basada en el formalismo de los programas-while.

La Teora de la Computabilidad tiene la complicacin intrnseca de tratar de describir precisamente las propiedades de los problemas que son lo suficientemente complejos como para no permitir una aproximacin de tipo algortmico. Pero al menos podemos reducir la complicacin en el mtodo de aproximacin a dichos problemas si procuramos utilizar la formulacin ms sencilla posible de los mismos. Es la aplicacin de esta idea lo que se encuentra en las sucesivas decisiones de ceirnos, primero a problemas sobre cadenas de caracteres (frente al posible tratamiento de otras formas de informacin) luego a aquellos que pueden formularse en trminos de un slo resultado (expresables mediante funciones), y a menudo a los que se basan en un nico dato de entrada (funciones unarias). Estas sucesivas restricciones se han hecho porque no suponen ninguna prdida de generalidad: la computabilidad en dominios diferentes a los de las cadenas de smbolos puede reformularse va implementaciones, los problemas con resultados mltiples pueden descomponerse en mltiples subproblemas con resultado nico, y una funcin con varias entradas puede ser fcilmente traducida a su versin unaria equivalente mediante la oportuna codificacin. An es posible una simplificacin adicional dada la evidencia de que la mayor parte de los problemas con propiedades de incomputabilidad interesantes tienen asociada
ww w.

at

em

at

2.4. Decidibilidad y semidecidibilidad

ic a1

.c om

una formulacin con propiedades similares en forma de problema de decisin, es decir, que puede expresarse en forma de predicado o funcin total de resultado booleano. Dado que los predicados son ms fciles de manejar y estudiar que las funciones generalizadas, es habitual concentrarse en los mismos una vez sentadas las bases de la teora. Una de las decisiones que ms ayudan al trabajar con predicados es tener en cuenta que todo predicado tiene asociado un conjunto y obrar en consecuencia. Dado un predicado S: * B se define de manera natural el conjunto { x: S(x) } de las palabras que verifican el mismo. De la misma manera, dado un conjunto cualquiera A * se define su funcin caracterstica CA de la siguiente manera: true x A CA(x) = false c.c. Naturalmente, esta funcin es el predicado que elucida la pertenencia de una palabra cualquiera al conjunto A. Dada esta correspondencia es habitual tratar ms con conjuntos que con funciones y estudiarlos de acuerdo a la computabilidad de su funcin caracterstica. Aquellos conjuntos o predicados cuya funcin caracterstica es computable constituyen la clase de los conjuntos decidibles, que se denota como 0. Esta primera clasificacin entre conjuntos decidibles o indecidibles6 puede refinarse. Siendo indecidible todo conjunto para el que no se puede construir un algoritmo que diferencie claramente entre sus elementos y los de su complementario, a veces es posible encontrar una solucin parcial: un programa que al menos sea capaz de dar respuesta positiva ante las entradas que pertenecen al conjunto, aunque cicle ante las que no lo son. Para formalizar esto definimos la funcin semicaracterstica de un conjunto A de la siguiente manera:
ww w.

at

em

A(x) =

true

at

Si A es computable diremos que A es semidecidible, y denominaremos 1 a la clase de todos los conjuntos semidecidibles. Aunque la nocin de semidecidible se introduce para hacer distinciones adicionales entre los conjuntos indecidibles, claramente todo conjunto decidible es semidecidible, es decir 01. Sin embargo la inclusin inversa no es cierta, ya que es posible encontrar muchos conjuntos que, siendo semidecidibles, no son decidibles.
En buena parte de la literatura clsica sobre Teora de la Computabilidad encontramos que a los conjuntos decidibles se les denomina recursivos y a los semidecidibles recursivamente enumerables.
6

ic a1

x A c.c.

.c om

Algunos de esos conjuntos son muy conocidos y tiles en Teora de la Computabilidad y por ello reciben nombres especficos. Por ejemplo el conjunto K = { xW: x(x) }, que tiene gran importancia tcnica porque resulta muy manejable para recurrir a l como arquetipo de conjunto indecidible pero semidecidible (es decir, de los no computables pero "casi"). Por ello el conjunto K se utiliza en muchas demostraciones que prueban por reduccin al absurdo la indecidibilidad de otros conjuntos menos accesibles. Otro ejemplo de conjunto semidecidible pero no decidible es VAC = { xW: y x(y) }, el conjunto de los programas que son capaces de devolver resultado al menos en un caso. Otros conjuntos son an ms inasequibles desde el punto de vista de la Teora de la Computabilidad, puesto que ni siquiera son semidecidibles. Un ejemplo de los ms interesantes es el conjunto TOT= { xW: y x(y) } de los ndices de funciones totales, es decir, de los programas lo suficientemente bien construidos como para no ciclar en ningn caso. Si TOT fuera decidible existira alguna forma de distinguir (y en su caso apartar) los programas que pudieran tener cmputos infinitos, pero lamentablemente no es posible siquiera disponer de un mecanismo de deteccin de los programas que cumplen unos requisitos mnimos de usabilidad. Las demostraciones de indecidibilidad y no semidecidibilidad citadas se pueden consultar en [IIS 00] y en [ISI 03]. En estas fuentes se utiliza la tcnica de diagonalizacin, tal y como se esboza en el siguiente captulo, pero en todos los casos sera ms sencillo el uso de mecanismos reduccin, objeto del presente informe, y que sern explicados y utilizados a partir del Captulo 4.
ww w.

at

em

at

ic a1

.c om

S-ar putea să vă placă și