42
1 Teoría de la Computación Funciones Recursivas

Teoría de la Computación Funciones Recursivas

  • Upload
    glen

  • View
    121

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Teoría de la Computación Funciones Recursivas

1

Teoría de la Computación

Funciones Recursivas

Page 2: Teoría de la Computación Funciones 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

Page 3: Teoría de la Computación Funciones Recursivas

3

Funciones recursivasUna 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

Page 4: Teoría de la Computación Funciones Recursivas

4

Funciones recursivasExisten 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?

Page 5: Teoría de la Computación Funciones Recursivas

5

Funciones recursivasPara 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

Page 6: Teoría de la Computación Funciones Recursivas

6

Funciones recursivasFunción computable

MT: enfoque operativoforma 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

Page 7: Teoría de la Computación Funciones Recursivas

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

Page 8: Teoría de la Computación Funciones Recursivas

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

Page 9: Teoría de la Computación Funciones Recursivas

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

Page 10: Teoría de la Computación Funciones Recursivas

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

Page 11: Teoría de la Computación Funciones Recursivas

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

Page 12: Teoría de la Computación Funciones Recursivas

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

Page 13: Teoría de la Computación Funciones Recursivas

13

Definición de funciones recursivas primitivas

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

n

Page 14: Teoría de la Computación Funciones Recursivas

14

Reglas inductivasComposición de funciones

supongamos que las funciones g1, g2, ..., gm tal 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, ..., gm y h son

funciones totales, f es una función total con dominio n

Page 15: Teoría de la Computación Funciones Recursivas

15

Reglas inductivasTambién se dice que f es la composición

de los gi ,con 1 i m, mediante hA 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)

Page 16: Teoría de la Computación Funciones Recursivas

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

Page 17: Teoría de la Computación Funciones Recursivas

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,...,xn se denominan parámetros

al par de ecuaciones (1) y (2) se denomina esquema de recursión

Page 18: Teoría de la Computación Funciones Recursivas

18

Reglas inductivas

Caso particular: operación recursiva sin parámetros resulta de hacer n = 0 las ecuaciones se convierten en

f(0) = Kf(y´) = h(y, f(y))

siendo K una constante natural

Page 19: Teoría de la Computación Funciones Recursivas

19

Reglas inductivasEjemplo

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

Page 20: Teoría de la Computación Funciones Recursivas

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

Page 21: Teoría de la Computación Funciones Recursivas

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

Page 22: Teoría de la Computación Funciones Recursivas

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) = 0P(y’) = h(y, P(y)) = I1(y, P(y))

2

Page 23: Teoría de la Computación Funciones Recursivas

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

Page 24: Teoría de la Computación Funciones Recursivas

24

Algunas funciones recursivas primitivas importantes

Otra forma de verlo h(0,x) = I(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

Page 25: Teoría de la Computación Funciones Recursivas

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

Page 26: Teoría de la Computación Funciones Recursivas

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

Page 27: Teoría de la Computación Funciones Recursivas

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 base

Funciones recursivas primitivas

Funciones -recursivas

Funciones computables

Page 28: Teoría de la Computación Funciones Recursivas

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

Page 29: Teoría de la Computación Funciones Recursivas

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

Page 30: Teoría de la Computación Funciones Recursivas

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ón g: (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

Page 31: Teoría de la Computación Funciones Recursivas

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

Page 32: Teoría de la Computación Funciones Recursivas

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]

Page 33: Teoría de la Computación Funciones Recursivas

33

MinimalizaciónSi 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

Page 34: Teoría de la Computación Funciones Recursivas

34

MinimalizaciónUna 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

Page 35: Teoría de la Computación Funciones Recursivas

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

Page 36: Teoría de la Computación Funciones Recursivas

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

Page 37: Teoría de la Computación Funciones Recursivas

37

Funciones recursivasExisten 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?

Page 38: Teoría de la Computación Funciones Recursivas

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

Page 39: Teoría de la Computación Funciones Recursivas

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

Page 40: Teoría de la Computación Funciones Recursivas

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

Page 41: Teoría de la Computación Funciones Recursivas

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

Page 42: Teoría de la Computación Funciones Recursivas

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