1 / 42

Teoría de la Computación Funciones Recursivas

Teoría de la Computación Funciones Recursivas. El concepto de función recursiva fue introducido por Kleene el año 1936 Son una clase de funciones numérico-teóricas (f:  m   ) que pueden ser evaluadas mediante un algoritmo

glen
Download Presentation

Teoría de la Computación Funciones Recursivas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Teoría de la ComputaciónFunciones Recursivas

  2. El concepto de función recursiva fue introducido por Kleene el año 1936 • Son una clase de funciones numérico-teóricas (f:m) que pueden ser evaluadas mediante un algoritmo • Al igual que Turing, Kleene pretendía formalizar la noción intuitiva de procedimiento efectivo aplicada a cantidades numéricas • Más tarde se descubrió que las funciones de Kleene y las máquinas de Turing eran formulaciones equivalentes • un algoritmo puede ser realizado por una máquina de Turing ssi puede ser expresado como una función recursiva

  3. Funciones recursivas • Una máquina de Turing especifica los límites del poder de los procesos computacionales • Tesis de Church-Turing • El poder de las máquinas de Turing como aceptadores de lenguajes es equivalente al poder generativo de las gramáticas • El poder computacional de las máquinas de Turing es equivalente al poder computacional de otros sistemas computacionales • Funciones recursivas • Sistemas de Post • Lambda Calculus

  4. Funciones recursivas • Existen varios problemas que el programador puede resolver utilizando un lenguaje de programación determinado • Tal vez este lenguaje ponga limitaciones a los problemas que el programador pueda resolver • ¿Es posible superar esta limitaciones desarrollando lenguajes de programación más poderosos? • ¿Existe algún punto en el cual la adición de características a un LP, o el cambio a otro LP, no incremente el poder de solución de problemas al programador?

  5. Funciones recursivas • Para responder las preguntas anteriores, identificaremos una clase de funciones que contiene la totalidad de las funciones computables • aquellas que pueden calcularse mediante un algoritmo • esta clase de funciones puede calcularse • por medio de una máquina de Turing • por medio de algoritmos sencillos escritos en algún LP determinado • Conclusión • los límites detectados por la máquina de Turing y la mayor parte de los LPs, son el reflejo de las limitaciones de los procesos computacionales, y no del diseño de la máquina o del LP que se use

  6. Funciones recursivas • Función computable • MT: enfoque operativo • forma de calcularla • Funciones recursivas: enfoque funcional, • qué funciones, qué característica tienen • Elementos básicos de una definición recursiva • 1) una base (axiomas o condiciones límite) de funciones simples, que no cabe duda que son computables • 2) una regla de construcción recursiva que nos dice como determinar otros valores de la función a partir de valores conocidos • 3) una afirmación de que la función sólo toma aquellos valores que resultan por la aplicación de un número finito de veces de las reglas de construcción recursiva

  7. Funciones recursivas • Es decir, una definición recursiva especifica un procedimiento efectivo para evaluar una función, siempre que la función esté definida • Si un sistema computacional, como un LP, o un computador, abarca todas estas funciones, entonces tiene todo el poder posible, sino es innecesariamente restrictivo • Se puede considerar cualquier función computable como una función cuyas entradas sean tuplas de enteros no negativos

  8. Funciones recursivas • Supongamos una función f (n+1)-aria • el dominio de f puede ser dividido en pedazos tal que para x1,x2,...,xn tomemos valores fijos y x0 varíe sobre  • fijando valores particulares n1,n2,...,nn para x1,x2,...,xn obtenemos una función f(x0,n1,n2,...,nn) • En vez de trabajar sobre • f(x0,x1,x2,...,xn) que es ((n+1)-aria, • podemos trabajar sobre muchas funciones unarias • f(x0,n1,n2,...,nn) por cada n-tupla • Cuando hacemos esto estamos tomando a x1,x2,...,xn como parámetros

  9. Funciones recursivas • Ejemplo • f(x0,x1,x2)= x0+ (x1·x2) donde x1, x2 serán parámetros • Entonces • f(0,x1,x2)= 0+ (x1·x2) • f(1,x1,x2)= 1+ (x1·x2) = f(0,x1,x2) + 1 • ... • f(n+1,x1,x2) = n+1+(x1·x2) = ((x1·x2) +n) +1 = f(n,x1,x2) +1

  10. Funciones recursivas • Recordemos la composición de funciones • Si f(x) y g(x) son funciones de una variable, podemos definir h(x) = f º g(x) donde f º g(x) = g(f(x)) • Ejemplo • f(x) = x - 5 y g(x) = x2, entonces • h(x) = f º g(x) = g(f(x)) = g(x - 5) = (x - 5)2

  11. Funciones recursivas • Podemos extender la composición a varias variables • supongamos que tenemos f0, f1, ..., fm funciones sobre n+1 variables • y g es una función sobre m+1 variables • entonces podemos definir • h(x0,x1,...,xn) = g(f0(x0,x1,...,xn), f1(x0,x1,...,xn), ..., fm(x0,x1,...,xn)) • Si f0, f1, ..., fm y g son computables, entonces h también es computable

  12. Definición de funciones recursivas primitivas • Tomaremos como conjunto base 3 funciones que por definición son recursivas primitivas iniciales: • 1) función nula (o función cero) • N(x) = 0 , x   • 2) función sucesor • S(x) = x + 1 • 3) función proyección (o identidad generalizada) • Ii(x1,x2,...,xn) = Ii(X) = xi, 1  i  n • ejemplos: I3(2, 3, 1, 4, 2) = 1, I1(6) = 6, I2(7, 9) = 9 • la función I1 es llamada función identidad n n 5 1 2 1

  13. Definición de funciones recursivas primitivas n • Un caso especial es I0(x1,x2,...,xn) = () • Estas funciones son totales, ya que X, N(X), S(X) e I(X) están perfectamente definidas, así como lo está su valor asociado • Además estas 3 funciones son computables • Veremos a continuación las reglas para obtener las restantes funciones primitivas recursivas

  14. Reglas inductivas • Composición de funciones • supongamos que las funciones g1, g2, ..., gmtal que el dominio de gi es n , para 1  i  m y la función h con dominio m son recursivas primitivas • tenemos m funciones recursivas primitivas de n argumentos y una función recursiva primitiva de m argumentos • se define la función f de n argumentos como • (1) f(x1,x2,...,xn) = h(g1(x1,x2,...,xn), ..., gm (x1,x2,...,xn)) • La función f(X) así obtenida es una función recursiva primitiva • ya que las funciones g1, g2, ..., gmy h son funciones totales, f es una función total con dominio n

  15. Reglas inductivas • También se dice que f es la composición de los gi ,con 1  i  m, mediante h • A veces la composición se denomina substitución y a la expresión (1), esquema de substitución • ejemplo • g1(x, y) = x + y • g2(x, y) = x - y • g3(x, y) = x · y • h(g1, g2, g3) = 2 · g1 + g2 + g3 • entonces • f(x, y) = 2(x+ y) + (x - y) + (x · y)

  16. Reglas inductivas • Recursión • supongamos que g y h son funciones recursivas primitivas • (1) f(0, x) = g(x) x=(x1,x2,...,xn) • (2) f(y’, x) = h(x, y, f(x, y)) • y’ sucesor de y • define una función recursiva primitiva • La ecuación (1) es la condición límite de la definición y la ecuación (2) es la ecuación de recursión • dado que g y h son totales, f también lo es

  17. Reglas inductivas • Ya que f(0, x) = g(x) está definida, una vez que hemos calculado f(y,x), el valor de f(y’,x) se obtiene evaluando la función total h • La variable y recibe el nombre de variable de recursión • las variables x1,x2,...,xnse denominan parámetros • al par de ecuaciones (1) y (2) se denomina esquema de recursión

  18. Reglas inductivas • Caso particular: operación recursiva sin parámetros • resulta de hacer n = 0 • las ecuaciones se convierten en • f(0) = K • f(y´) = h(y, f(y)) • siendo K una constante natural

  19. Reglas inductivas • Ejemplo • g(x1,x2) = x1·x2 • h(x1,x2, y, z)=y+z+x1+x2 z=f(y,x1,x2) • por recursión primitiva • f(0,x1,x2)= g(x1,x2) = x1·x2 • f(y’,x1,x2)= h(x1,x2, y, f(y,x1,x2)) =y+f(y,x1,x2) +x1+x2 • Por ejemplo calcular f(3,5,2) • f(3,5,2)=2+f(2,5,2)+5+2 = 9+ f(2,5,2) • f(2,5,2)=1+f(1,5,2)+5+2 = 8+ f(1,5,2) • f(0,5,2)=0+f(2,5,2)+5+2 = 7+ f(0,5,2) • f(0,5,2)=5 ·2 =10 •  f(3,5,2) = 34

  20. Definición inductiva de funciones recursivas primitivas • a) Las funciones bases N(x), S(x) e Ii(x1,x2,...,xn) son funciones recursivas primitivas • b) Las funciones obtenidas a partir de funciones recursivas primitivas mediante las reglas de composición y recursión son funciones recursivas primitivas • c) Sólo son funciones recursivas primitivas las obtenidas mediante a) y b). n

  21. Algunas funciones recursivas primitivas importantes • 1) La función constante • Ck(x) = k x es recursiva primitiva para cualquier k • Ck= k = S...S(N(x)) = Sk(N(x)) • donde Sk denota la k-ésima composición de sí misma k veces

  22. Algunas funciones recursivas primitivas importantes • 2) La función predecesor • P(y’) = y • P(0) = 0 • Aplicando la regla de recursión sin parámetros tenemos: • P(0) = 0 • P(y’) = h(y, P(y)) = I1(y, P(y)) 2

  23. Algunas funciones recursivas primitivas importantes • 3) La función suma • Sea f(x,y) = x+y, la adición normal en los naturales • Informalmente • f(0,x) = x  0 + x = x • f(y’,x) =f(y,x)’  y’ + x = (y +x)’ • Formalmente, aplicando recursión con el parámetro x, tenemos • f(0,x) = I1(x) • f(y’,x) = h(x,y,f(y,x)) = S(I3(x,y,f(y,x))) 1 3

  24. Algunas funciones recursivas primitivas importantes • Otra forma de verlo • h(0,x) = I1(x) • h(y+1,x) = S(I3(y,x, h(y,x)) = S(h(y,x)) • Ejemplo • h(2,3) = S(h(1,3)) = S(S(h(0,3))) = S(S(3)) = 5 • 4) La función producto ¿...? 1 3

  25. Def.: La clase C de funciones recursivas primitivas es la clase más pequeña de funciones sobre los naturales tales que: • 1.- Las funciones base están en C • 2.- C es cerrada bajo las operaciones de composición y recursión • Esta definición proporciona la base para probar que una función f particular es f.r.p. • Construimos una secuencia de funciones f1, f2, ..., fn tal que fn= f y cada fi • o bien es una función base, • o se obtiene a partir de algún subconjunto de las funciones f1, f2, ..., fn por composición o recursión

  26. Es fácil probar que f es computable • aceptando el supuesto que las funciones base son efectivamente computables • suponemos, por inducción, que se han construido algoritmos par evaluar f1, f2, ..., fi-1 • aplicando las reglas de composición y recursión construimos un algoritmo para evaluar fi, utilizando los algoritmos para evaluar las f1, f2, ..., fi-1 como subrutinas • La recursividad primitiva es una condición suficiente pero no necesaria para que una función total sea computable

  27. Esto es, existen funciones totales computables que no son recursivas primitivas • Ejemplo: función de Ackermann A: 2   • A(0, y) = y +1 A(x+1, 0) = A(x, 1) A(x+1, y+1) = A(x, A(x+1, y)) • La clase de funciones totales computables se conocen como funciones -recursivas Funciones computables Funciones -recursivas Funciones recursivas primitivas Funciones base

  28. Funciones totales, regulares y parciales • Definición: • Una función (n+1)-aria f, que está definida para todo (x0, ..., xn)  (n+1) se llama función total • Si existe una n-tupla (x0, ..., xn)  (n+1) para el cual f no está definida, entonces f es una función parcial • ejemplo: div(x,y) = la parte entera de x/y, con x,y , y  0. Es una función parcial de 2 • Si f es una función parcial en el dominio k , sea D el dominio de f, entonces D  k • Observe que D no necesita ser subconjunto propio de k

  29. Funciones totales, regulares y parciales • Definición: • Si f es una función (n+1)-aria tal que para cada n-tupla (x1, ..., xn)  n existe al menos un n  tal que f(n, x1, ..., xn) = 0, se dice que f es una función regular

  30. Minimalización • Ahora nos ampliaremos para incluir funciones parciales computables • introduciremos el operador  llamado operador de minimalización • Permite construir una función f: n  a partir de otra funcióng: (n+1)  • Esto se hace encontrando el menor y  tal que g(X,y)=0 y g(X,z) esté definida para todos los enteros no negativos z menores a y

  31. Minimalización • Sea g: (n+1)  una función total, no necesariamente recursiva primitiva • Definimos la función f: n  como f(X) = y[g(X, y) = 0] • Se lee • f(X) es igual al menor y para el cual g(X, y) es cero y g(X, z) está definida para todos los enteros no negativos z menores que y • Esto significa que la función f(X) = y con X = (x1, ..., xn) e y el menor entero y  0 para el cual g (x1, ..., xn, y) = 0 • Entonces decimos que f se ha obtenido de g por minimalización

  32. Minimalización • La minimalización puede producir funciones que no están definidas para ciertas entradas (funciones parciales) • Ejemplos • f(x)=y[+(x,y)=0] • está definida para f(0) con 0, pero y tal que x+y=0 • div(x,y)= t[((x+1)(mult(t,y)+y))=0] 

  33. Minimalización • Si la función parcial g es computable, entonces se puede calcular f(X)=y[g(X,y)=0] • calculando los valores de g(X,0), g(X,1), g(X,2), etc. • hasta encontrar un y para el cual g(X,y)=0, en cuyo caso f(X)=y o • hasta llegar a un z para el cual g(X,z)= no definido, en este caso f(X) no está definida para X • Luego el proceso de minimalización aplicado a una función parcial computable (g) produce una función parcial computable (f) • Las funciones parciales computables se llaman funciones recursivas parciales 

  34. Minimalización • Una función f es definida como recursiva parcial si: • es una función base (función cero, sucesor o proyección) • es definida por composición de funciones recursivas parciales • es definida por el esquema de recursión a partir de funciones recursivas parciales • es definida utilizando la operación de minimalización sobre una función recursiva parcial • Así como la Tesis de Turing propone que las MTs tienen el poder computacional de cualquier sistema computacional, la tesis de Church plantea que la clase de funciones recursivas parciales contiene todas las funciones parciales computables 

  35. Equivalencia entre MTs y funciones recursivas parciales • Si una función parcial puede calcularse con una máquina de Turing, decimos que es computable por una MT • Para mostrar esta equivalencia es necesario demostrar que • i) todas las funciones recursivas parciales son computables por una máquina de Turing • Teorema: Toda función recursiva parcial es computable por una máquina de Turing 

  36. Equivalencia entre MTs y funciones recursivas parciales • ii) el poder computacional de una MT está restringido al cálculo de funciones recursivas parciales • Teorema: Todo proceso computacional realizado por una máquina de Turing es en realidad el cálculo de una función recursiva parcial 

  37. Funciones recursivas • Existen varios problemas que el programador puede resolver utilizando un lenguaje de programación determinado • Tal vez este lenguaje ponga limitaciones a los problemas que el programador pueda resolver • ¿Es posible superar esta limitaciones desarrollando lenguajes de programación más poderosos? • ¿Existe algún punto en el cual la adición de características a un LP, o el cambio a otro LP, no incremente el poder de solución de problemas al programador?

  38. Poder de los Lenguajes de Programación • Nos interesa saber qué poder computacional tiene un LP • Lo esencial que un LP debe tener para calcular cualquier función recursiva parcial, de acuerdo con la tesis de Church-Turing, es • proporcionar la representación del tipo entero no negativo • operación para incrementar un valor • operación para decrementar un valor • ejecutar un ciclo while • Todo lo demás es ayuda al programador 

  39. Conjuntos Recursivamente Enumerables • Un conjunto S (de números naturales) es recursivo si existe una función recursiva f tal que • f(n) = 1 si n  S • f(n) = 0 si n  S • Un conjunto de números naturales es recursivo ssi es Turing-decidible • Ejemplos • cualquier conjunto de un elemento, • cualquier conjunto finito, el conjunto vacío • , { kn  n   } para un k fijo • el conjunto de los primos

  40. Conjuntos Recursivamente Enumerables • Un conjunto S de números naturales que es la imagen de una función unaria parcial recursiva es un conjunto recursivamente enumerable • Es decir, S es r.e. si existe una f.r.p. f tal que f( )=S • f recibe el nombre de • función que genera a S o • función que enumera a S • Ejemplos • el conjunto de los enteros positivos, • el conjunto {2}, • cualquier conjunto finito

  41. Conjuntos Recursivamente Enumerables • Generalmente se consideran conjuntos de números que representan, por medio de la numeración de Gödel, conjuntos de objetos tales como máquinas de Turing, funciones recursivas parciales, fórmulas, etc. • Una vez que se ha mostrado que el conjunto de objetos a ser considerado puede ser sometido al proceso de numeración de Gödel, y que el conjunto de números es recursivamente enumerable, se puede decir que el conjunto de objetos es recursivamente enumerable

  42. Conjuntos Recursivamente Enumerables • Teorema : Un conjunto S es recursivo ssi S y su complemento -S son recursivamente enumerables • Teorema : Si S es un conjunto recursivamente enumerable, entonces existe una función recursiva que lo genera • Teorema : Un conjunto S es recursivamente enumerable ssi es el dominio de una función recursiva parcial • Teorema : Un conjunto S   es recursivamente enumerable ssi es Turing aceptable

More Related