6.1 y 6.2

8
6. Funciones computables Las funciones computables son aquellas funciones para las cuales hay reglas explicitas bien definidas que al ser seguidas permitirían en principio calcular el valor de una función. También se definen a las funciones computables como funciones aritméticas para las cuales existen algoritmos que finalizan. Por ejemplo: x + y, xy y x y , son funciones computables. El termino computable para decir que una función puede calcularse mediante algún algoritmo, más que por un algoritmo que pueda implementarse en algún sistema específico. Equivalentemente, una función es calculable mediante un algoritmo si se puede diseñar un programa de ordenador que la calcule. Una función computable f tiene como dominio el conjunto de todas las palabras sobre el alfabeto B y como valores palabras (W1, W2,…) formadas con los elementos de B. La función f es computable si y sólo si existe un procedimiento general (un algoritmo) con ayuda del cual, para toda palabra W de B puede obtenerse efectivamente el valor de f(W). Sea f una función computable cuyo dominio es el conjunto de los números naturales. Un conjunto M de palabras de un alfabeto A es numerable (o bien f enumera M) si, y sólo si, M es el conjunto de los valores f(0), f(1), f(2), etc. (M = {f(0), f(1), f(2),…}.) De otra forma: M es numerable, si hay una función computable que asigna a todo número natural un elemento de M de manera que ningún elemento de M queda sin enumerar. 6.1 Funciones recursivas Las funciones recursivas resultan ser exactamente las funciones calculables mediante un algoritmo.

description

cdfccccccccccccccc

Transcript of 6.1 y 6.2

6. Funciones computablesLas funciones computables son aquellas funciones para las cuales hay reglas explicitas bien definidas que al ser seguidas permitiran en principio calcular el valor de una funcin.Tambin se definen a las funciones computables como funciones aritmticas para las cuales existen algoritmos que finalizan. Por ejemplo: , y , son funciones computables.El termino computable para decir que una funcin puede calcularse mediante algn algoritmo, ms que por un algoritmo que pueda implementarse en algn sistema especfico.Equivalentemente, una funcin es calculable mediante un algoritmo si se puede disear un programa de ordenador que la calcule.Una funcin computable f tiene como dominio el conjunto de todas las palabras sobre el alfabeto B y como valores palabras (W1, W2,) formadas con los elementos de B. La funcin f es computable si y slo si existe un procedimiento general (un algoritmo) con ayuda del cual, para toda palabra W de B puede obtenerse efectivamente el valor de f(W).Sea f una funcin computable cuyo dominio es el conjunto de los nmeros naturales. Un conjunto M de palabras de un alfabeto A es numerable (o bien f enumera M) si, y slo si, M es el conjunto de los valores f(0), f(1), f(2), etc. (M = {f(0), f(1), f(2),}.) De otra forma: M es numerable, si hay una funcin computable que asigna a todo nmero natural un elemento de M de manera que ningn elemento de M queda sin enumerar.6.1 Funciones recursivasLas funciones recursivas resultan ser exactamente las funciones calculables mediante un algoritmo.Centrndonos en determinar qu funciones pueden ser calculadas, y no en la forma de calcularlas. Utilizaremos el mtodo que han seguido los matemticos para el estudio de las funciones recursivas. Por tanto, comenzaremos con un conjunto de funciones, llamadas funciones iniciales, cuya sencillez es tal que no hay dudas sobre su computabilidad.Para luego mostrar que estas funciones se pueden combinar formando otras cuya computabilidad se deduce de las funciones originales. De esta manera, obtendremos una coleccin de funciones que contiene todas las funciones computables.6.1.1 Funciones parciales Las funciones pueden abarcar una diversidad muy amplia de dominios y codominios. Para enfrentarnos a esta diversidad, es necesario observar que cualquier dato se puede codificar mediante una cadena de ceros y unos y, en el contexto de un sistema de codificacin adecuado, es posible considerar entonces cualquier funcin computable como una funcin cuyas entradas sean tuplas de enteros no negativos. No obstante, esto no quiere decir que toda funcin computable tenga la forma:

donde m y n son enteros de N. De hecho la funcin divisin definida por:divisin(x,y) = la parte entera de x/y, donde x, y N y y.Cuyo dominio contiene pares de enteros, deber estar en nuestra coleccin de funciones computables. Sin embargo, divisin no es una funcin de la forma

ya que no est definida para los pares donde la segunda componente es cero.Para tener en cuenta las funciones cuyos dominios no incluye en todo para un m dado, presentaremos el concepto de funcin parcial. Una funcin parcial de un conjunto X es aquella cuyo dominio constituye un subconjunto de X. Para indicar que el subconjunto es propio, es decir, que una funcin parcial de X efectivamente se encuentra indefinida por lo menos para un elemento de X, nos referiremos a ella como estrictamente parcial. Por otra parte, se llamar funcin total de X a una funcin parcial de X cuyo dominio es todo el conjunto X. De esta forma, tanto la funcin divisin definida anteriormente, como la funcin suma definida por:suma(x; y) = x + yson funciones parciales de en N. Para mayor precisin, suma es una funcin total en , mientras que divisin es una funcin parcial en .Por tanto, aplicando los sistemas de codificacin adecuados, es posible identificar cualquier funcin computable como una funcin parcial de la forma , para m y n en N. As pues, nuestra bsqueda de todas las funciones computables se puede restringir a las funciones parciales de en , donde m y n estn en N.Por ltimo, dado que con frecuencia haremos referencia a n-tuplas arbitrarias de enteros, es conveniente adoptar la sencilla notacin x testada para representar una tupla de la forma (x1, x2,, xn) en aquellos casos donde no se requieren los detalles de la forma expandida de dicha tupla.6.1.2 Funciones inicialesLa base de la jerarqua de las funciones computables est constituida por el siguiente conjunto de funciones, que llamaremos funciones iniciales: Una de estas funciones es la funcin cero, representada por . Esta funcin establece una correspondencia entre la tupla cero o tupla vaca y el entero cero, y se escribe ( )= 0.As pues, corresponde al proceso de escribir un cero en un trozo de papel en blanco o en una celda de memoria de un ordenador. Ambas tareas estn de acuerdo con nuestro concepto intuitivo de proceso computacional, por lo que resulta sencillo aceptar que es una funcin que debe clasificarse como computable. Otra de las funciones iniciales es la funcin sucesor, representada por . Esta funcin establece una correspondencia entre tuplas de una sola componente, de tal manera que (x) = x + 1, para cada entero no negativo x.Dado que existe un proceso computacional para la suma de enteros, tambin debemos considerar a como una funcin computable. La clase de funciones iniciales se completa con una coleccin de funciones conocidas como funciones de proyeccin. Cada una de estas funciones extrae como salida una componente especifica de su tupla de entrada. Para representar una funcin de proyeccin, utilizamos el smbolo junto con un superndice que indica el tamao de la tupla de entrada y un subndice que indica la componente extrada. Por ejemplo:. Como caso especial, consideraremos , que establece una correspondencia entre tuplas de tamao n y la tupla vaca, por lo que, por ejemplo, Cualquier funcin podra calcularse aplicando el procedimiento de recorrer la n-tupla de entrada hasta localizar el elemento m-simo y despus extraer el valor entero all encontrado. As pues, al igual que con el resto de las funciones iniciales, es sencillo asumir que las proyecciones deben estar tambin en la clase de las funciones computables.Las funciones iniciales forman la base de la jerarqua que existe en la teora de funciones recursivas. Por supuesto, se trata de funciones que por s solas no pueden lograr mucho. Por lo tanto, el siguiente objetivo ser estudiar cmo pueden emplearse estas funciones para construir otras ms complejas.6.1.3 Funciones recursivas primitivasExisten varias formas de construir funciones ms complejas a partir de las iniciales, de las cuales consideraremos las siguientes: La primera tcnica es la denominada combinacin. La combinacin de dos funciones y g : es la funcin f g : , la cual viene definida por f g(), donde es una k-tupla. Es decir, la funcin f g toma como entrada tuplas de tamao k y produce como salida tuplas de tamao m +n donde las primeras m componentes se obtienen a partir de la salida de f y las n restantes a partir de la salida de g. Por ejemplo, (4,6,8) = (4,8).Suponiendo que existe una forma de calcular las funciones f y g, podemos calcular f g calculando primero por separado f y g, y despus combinando sus salidas. Llegamos entonces a la conclusin de que la combinacin de funciones computables tambin es computable. La composicin representa otro mtodo para formar funciones ms complejas. La composicin de dos funciones y g : es la funcin gf: definida por gf=()=g(f()), donde es una k-tupla. Por ejemplo, ( ) = (( )) = (0)=1.Calculando primero f y utilizando su salida como entrada para g, si f y g son computables, se deduce que la composicin de ambas es tambin computable. La ltima tcnica de construccin que veremos en esta etapa se denomina recursividad primitiva. Supongamos que queremos definir una funcin tal que f (x; y) sea el nmero de nodos en un rbol completo y equilibrado en el cual cada nodo que no es una hoja tiene exactamente x hijos, y cada camino desde la raz a un nodo hoja contiene y arcos (se dice entonces que este rbol tiene profundidad y). El primer paso es observar que cada nivel del rbol tiene exactamente nodos, donde n es el nmero de nivel. De esta forma, con un valor fijo de x, para determinar el nmero de nodos de un rbol con profundidad y+1, basta con sumar = al nmero de nodos del rbol de profundidad y. Esto, unido al hecho de que un rbol con un solo nodo raz contiene nodos, permite definir f recursivamente con el siguiente par de frmulas:f(x,0) = f(x, y + 1) = f (x; y) + En un contexto ms general, lo que hemos hecho es definir f en trminos de otras dos funciones. Una de ellas es g : tal que g(x)=1, x N. Y la otra es h : tal que h(x,y,z) = z + . Al emplear estas dos funciones, f est definida recursivamente por las frmulas:

En este caso diremos entonces que f est construida a partir de g y de h por medio de recursividad primitiva. De manera an ms general, la recursividad primitiva es una tcnica que permite construir una funcin f que establece la correspondencia entre a partir de otras dos funciones que relacionan con y con , respectivamente, tal y como se muestra en las siguientes ecuaciones:

donde representa una k-tupla.Empleando la recursividad primitiva junto con las funciones y operaciones que hemos presentado anteriormente, tenemos por ejemplo que la funcin suma se puede definir como:

es decir:

donde .

Una funcin construida mediante recursividad primitiva a partir de funciones computables es necesariamente computable. Ms concretamente, si f est definida a partir de g y h, el papel de estas dos ltimas funciones es el de permitir que se calcule en funcin de hasta llegar a Por tanto, si g y h son computables, f tambin lo ser.

Las funciones recursivas primitivas. Esta clase est formada por las funciones que pueden construirse a partir de las funciones iniciales aplicando un nmero finito de combinaciones, composiciones y recursividades primitivas. Esta clase es muy extensa e incluye, si no todas, la mayora de las funciones totales que se requieren en las aplicaciones de ordenador tradicionales.

6.2 Predicados recursivos primitivosUn nmero natural es primo s y solo si tiene exactamente dos divisores distintos, 1 y el mismo. Lo mismo, un nmero natural es primo s y solo si es mayor que 1 y solamente es divisible por s mismo. 1 no tiene dos divisores distintos, por lo tanto no es primo. Veamos que el predicado x es primo, Prime(x), es RP. Tenemos varias maneras de decirlo. Sea p : No lo divide ningn nmero n, 1 < n < p. Entre 1