FUNCIONES RECURSIVAS exp(x,y) = xy. Dónde: x0 = 1, x1 = x, x2 = x•x, • • • xy = x•x•...•x, y veces xy+1 = x•x• ... •x•x = x•xy y+1 veces
Primera y última ecuaciones: 1) x0 = 1,
2) xy+1 = x•xy,
son suficientes para evaluar toda la función. (eq. 2) 53=52+1 =5•52 (x=5 y y=2),
(eq. 2) 52=51+1 =5•51 (x=5 y y=1), (eq. 2) 51=50+1 =5•50 (x=5 y y=0), (eq. 1) 50=1
Recusión = Descomponer una función en sus componentes básicos.
Recursión = Reducir una función a sus funciones constitutivas.
Recursión = Eliminar una función a favor de sus funciones constitutivas.
Ejemplo:
53 = 5•5•5•1 = 1 + 1 + . . . + 1 125 “1”s
Reduce Reduce
Exp Producto Suma
Recursión: Re-Escribir una expresión Expresiones más simples.
FUNCIÓN SUCESOR
Recordemos que la “SUMA” no es una operación fundamental: Puede descomponerse en “Quitar y Poner”.
Definamos como básico:
número cero ‘0’
función sucesor ‘S’ (1 argumento) s: 0 0 1 1 2 2 3 • • • • • • n n+1 tomando en cuenta ‘+’ y ‘s’ : x + 0 = x x + s(y) = s(x+y) Recordar:
RELACION ENTRE FUNCIONES “+” y “S” + x+y y• • • s • x• x+s(y) •s • • • s(y) + x + s(y) = s(x + y)
La ley de la conservación de las CANICAS:
x canicas y canicas s(y)canicas x+s(y)
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ x = 3 y = 4 s(y) = 5 x + s(y) = 8 x+s(y) s(x + y) @ @ @ @ @ @ @ @ = @ @ @ @ @ @ @ @
Ejemplo Evaluar 2 + 3 : s(s(0))) + s(s(s(0))) (eq. 1) x + 0 = x (eq. 2) x + s(y) = s(x + y) x = s(s(0)) = ss0 y = s(s(s(0))) = sss0 s(y) = s(s(s(s(0)))) = ssss0 (eq. 2) ss0 + sss0 = s(ss0 + ss0) más simple que (eq.2) ss0 + ss0 = s (ss0 + so) (eq. 2) ss0 + s0 = s (ss0 + 0) (eq. 1) ss0 + 0 = ss0 Reescribimos Top-Down: ss0 + sss0 = s(ss0 + ss0) Recordar ss0 + ss0 = s(ss0 + s0) ⇒ s(s(ss0 + s0)) ⇒ s(s(s(ss0 + 0))) ⇒ s(s(s(ss0 ))) ⇒ sssss0 ss0 + sss0 = sssss0
Hemos establecido claramente que toda expresión puede ser reducida eliminando los símbolos de las
funciones compuestas en favor de las funciones simples, tan solo conociendo la 1a. y la última ecuación de la reducción.
Ejemplo: En ss0 + sss0 sssss0
eliminando reescribiendo 1a. x + 0 = 0
última x + s(y) = s(x + y)
Generalizando: ¿Podemos evaluar todas las funciones de esta forma?
CLASE DE FUNCIONES RECURSIVAS PRIMITIVAS
1) Funciones Básicas (Unidades Atómicas) 2) Operaciones de Construcción:
• Composición
• Recursión Primitiva
3) Nada pertenece a la clase si no es una función primitiva o construída por medio de composición o recursión.
Conjunto Básico de Funciones Recursivas Primitivas 1) Función Cero “z” : z(x) = 0
2) Función Sucesor “s” : s(0) = 1, s(1) = 2 ... 3) Funciones Identidad Varias: n
id1 1(x) = x id1 2(x,y) = x, id 2 2(x,y) = y id1 3 (x,y,z) = x, id2 3 (x,y,z) = y, id3 3 (x,y,z) = z Proyecciones: y •(x,y) id1 2
(x,y) = proyx (x,y) = x
id2
2(x,y) = proy
y (x,y) = y •
x
Para un espacio de orden n: idi
n
( x1, ..., xi, ... xn ) = xi
Las funciones identidad varias pueden ser ordenadas id, id1 2, id 2 2, id 1 3, id 2 3, id 3 3 ...
Construcción de Funciones Composición: (Cn) g f • • x• •g(x) •f(g(x)) • h f (g(x)) = h(x)
Sea F es el conjunto de todas las funciones, definamos la función aridad de una función “a”
a: F N
dónde si f ∈ F , a(f) = r dónde r es el número de elementos (componentes) de los argumentos de f.
Composición: Considere: A: N x N, B: N x N y C:N Considere Funciones: h:N x N N g1, g2, g3:N x N N y f: N x N x N N P1 f g1 0 1 g2 P2 2 . g3 . . P3 n h
h(x,y) = f(g1(x,y), g2(x,y), g3(x,y))
y
a(h) = a(gi) a(f) = número de g´s
Generalizando:
h(x1, ..., xn) = f(g1(x1, ... xn), ..., gn (x1, ..., xn))
Abreviando:
Ejemplos de Composición 1) f = s g = id3 3 h(x1, x2, x3) = s(id3 3(x 1, x2, x3)) = x3 + 1 h = Cn
[
s, id3 3]
2) Calcula h(x) = x + 2 f = s g = s h(x) = s(s(x)) = Cn[
s, s]
(x) h = Cn[
s, s]
nombre argumento de función 3) Calcula h(x) = x + 3 f = s g = Cn[
s, s]
h(x) = s(Cn[
s, s]
(x))
h = Cn[
s, Cn
[
s, s]]
Construcción de funciones Recursión Primitiva: (Pr) Ecuación Inicial: h(x, o) = f(x) h x Ÿ Ÿ o Ÿ Ÿ f
Última Ecuación: h(x, s(y)) = g (x, y, h(x, y)) h • x Ÿ •h(x, y) h y Ÿ • s(y)Ÿ • g • Ciclo de Recursión h = Pr
[
f, g]
Otra forma de ver la recursividad: •h h(x,s(y))=g(x,y,h(x,y)) g • (x,s(y)) h(x,y) h (x,y) h • h(x,s(0))=g(x,y,h(x,0)) g • (x,s(0)) h h(x,0)=f(x) (x,0) x • f
Ejemplos de recursión primitiva Suma: Sum(x,0) = x Sum(x,s(y)) = s(sum(x,y)) (Pr ) h (x,0) = f(x) h(x,s(y)) = g(x,y,h(x,y)
n = sum: El problema es construir “sum” para lo cual hay que encontrar las funciones “f” y “g” 1) f = id1 1 ê f(x) = x; “condición inicial” 2) sum(x,s(y)) = s(id3 3 ( -, -, sum(x,y))) g = Cn
[
s, id3 3]
sum = Pr[
id1 1,
Cn[s, id3 3]]
“SUM”
o• 2 sum •x sum(x, o) = id(x) = x
1 h x• • id f = id x + s(y) = s(x + y) sum • x Ÿ •x + y sum y Ÿ • s(y)=y+1Ÿ • x + s(y) 1 2 C n s , i d
[
33]
• número de argumento 3 g = Cn[s,id3 3]
= s(id3 3 ( _, _, sum(x,y)))prod 1) prod (x, 0) = 0 prod 0• 2 • •0 1 x• z • f = z función cero z(0) =0, z(1) =0, ... 2) prod (x,s(y)) = x + prod(x,y)
prod • x Ÿ • x •• y prod y Ÿ • s(y) = y+1Ÿ • x••(y + 1) 1 sum(x,x••y) 2 • 3 g = Cn[sum, id1 3, id 3 3
]
prod = Pr [z, Cn [sum, id1 3, id 3 3]]
Exp: Xy 1) x0 = 1 2) xy+1 = x•xy 1) Exp (x,0) = 1 0• Exp •1 • x• • f(x) =1 f = Cn[s,z
]
⇒ f(x) = s(z(x)) 2) exp • x Ÿ • xy exp y Ÿ •s(y) = y+1Ÿ • xy+1
prod(x,xy) • g = Cn[prod, id1 3, id 3 3
]
Exp = Pr[Cn[s, z]
, Cn[prod, id1 3, id 3 3]]
Super Exponenciación x x y veces x Sup (x,y) = x Sup (x,0) = 1 Sup (x, y + 1) = xsup (x, y) 1) Sup (x, 0) = 1 0• sup •1 f(x) = 1 • x• • f f = Cn[s,z
]
f(x) = s(z(x))2) Sup(x, y +1) = xsup(x,y) sup • x Ÿ • sup(x,y) sup y Ÿ • s(y) Ÿ • sup(x,s(y) • Exp(x,sup(x,y)) g = Cn[Exp, id1 3, id 3 3
]
Sup = Pr[Cn[s, z]
, Cn[Exp, id1 3, id 3 3]]
Fact
1) 0! = 1 fact(0) = 1
2) s(y)! = s(y)•y! fact(s(y)) = s(y)•fact(y) fact
•
0• •1 •
f = s(0) el único argumento de f es cero fact • y Ÿ fact • y! • s(y) Ÿ •s(y)! • prod(s(id1 2), id 2 2) g = Cn[prod, Cn[s, id1 2
]
, id 2 2]
fact = Pr [s(0), Cn[prod, Cn[s, id1 2]
, id 2 2]]
Formato (eliminando argumento “x”) h = fact h(0) = f(0) dónde f = s
Formato General de Pr h(x1, ..., xn,0) = f(x1, ..., xn) h(x1, ..., xn,s(y)) = g(x1, ... xn, y, h(x1, ... xn, y)) 1) h • x1• • . . xn• • 0 • f a(h) = n+1 n 0 a(f) = n 2) h • x1• • h(x1,...,xn,y) . . xn• y• • h(x1,...,xn,s(y)) • h s(y) •
g
•Funciones Recursivas son Abacus A R Si x ∈ R entonces x ∈ A x ⊆ A ∀x R(x) A(x)
La Historia Hasta Ahora
u h T
A
Método para comprobar que R ⊆ A
a) Establecer programas Abacus para las funciones recursivas básicas 1) z(x) = 0 2) s(x) = x + 1 3) id1 1 , id 1 2, id 2 2, ...
b) Establecer programa Abacus que implementa: 1) Composición
2) Recursión Método:
Dada una función recursiva primitiva sustituir cada término constituyente por su programa abacus respectivo.
PROGRAMAS ABACUS DE FUNCIONES BÁSICAS
Formato de argumentos y valor de la función R1 R2 . . . Rn Rn+1
n argumentos valor de la función 1) Los registros R1 ... Rn no se modifican.
2) Al inicio [Rm
]
= 0 para todo m > n.3) Al final [Rn+1
]
= valor función1) Función z z(1) = 0, z(2) = 0 ... z(n) = 0
El programa que no hace nada para evaluar z(x) = 0.
Al inicio y al final
[1
]
= xPROGRAMAS ABACUS DE FUNCIONES BÁSICAS 2) s(x) = s+1 Inicialmente [1
]
= x [2]
= 0 al final: [2]
= s(x) [1]
+ [2]
2 copia el contenido de R1 a R2 2+ incrementa en 1 el cont. de R2 3) idm n Inicialmente [1]
= x1, . . . , [n]
= xn y [n + 1]
= 0 Finalmente [n + 1]
= xm, 1 ≤ m ≤ n [m]
+[n + 1]
n + 1 copia el cont. de Rm a Rn + 1COMPOSICION DE FUNCIONES 1) Composición: h = Cn[f, g1, . . . gm
]
n = a(h) = a(gi) 1 ≤ i ≤ m
dados m + 1 programas
f(ŠŠ1‹‹, ..., ŠŠm‹‹) m + 1 g1(ŠŠ1‹‹, ..., ŠŠn‹‹) n + 1 . . . gm (ŠŠ1‹‹, ..., ŠŠn‹‹) n + 1
Queremos construir un solo programa:
f(g1 (ŠŠ1‹‹, ..., ŠŠn‹‹), ..., gm (ŠŠ1‹‹, ..., ŠŠn‹‹)) n + 1
1) Considere que el programa buscado tiene n argumentos.
2) Considere que un valor intermedio será necesario para almacenar el valor de cada g
3) Considere que los argumentos se encuentran inicial y finalmente en el formato estándard
4) La composición requiere de n + m registros no usados por ninguno de los m + 1 programas
Composición n = 3, m = 4 (1) g1 ([1]], [2]], [3]]) P1 g2 ([1]], [2]], [3]]) P2 [1]] [2]] [3]] [1]] [2]] [3]] es posible paralelizar •• •• g1 g2 P1 P2 2) Vacia n registros posible [1]] q1 -m e paralelizar [2]] q2 [3]] q3 +n s[n]] = 0 [m]] + [n]] n [m]] = 0 3) Calcula f([P1]], [P2]]) [P1]] + [1]] 1 [1]] [2]] Es posible [P2]] + [2]] 2 paralelizar • f [3
]
4) Finaliza: (1) [3]] 4 (Es posible (2) [q1]] 1, [q2]] 2, [q3]] 3 paralelizar)Programa abacus para recursión primitiva h • x• 0• • •• f h x• • • h(x, y) h y • • •h(x,s(y)) s(y) • • g h = Pr[f, g
]
Dados: f([x]
)
2 g([1]
, [2]
, [3]
) 4 Obtener: h ([1]
, [2]
) 3 Inicialmente: [1]
= x, [2]
= y [3]
= [4]
= ... = 0¿Cómo Funciona la Recursión? h • x• 0• • •• f h x• • • h(x, y) h y • • •h(x,s(y)) s(y) • • g
Computo de h: x, y p=y, y=0 f(x) = h(x,0) si p = 0 h(x, 0) = f(x) no g(x, 0, h(x, 0)) = h(x, 1) g(x,1,h(x,1)) = h(x, 2) y = y + 1 etc p = p - 1 p veces si no h(x, y ) p = 0
Inicialmente [1
]
= x, [2]
= y, [3]
= 0 Programa 6.2 vaciar [2]
en P p = y, y = 0 Programa 6.2 f([1]
) 2 f(x) = h(x,0) Registro 2 Programa 6.2 vacia [2]
en 3 h(x, 0) R3 e p- termina g([1]
,[2]
,[3]
) 4 g(x,y,h(x,y)) = h(x,s(y)) R42+ y = y + 1 (para 2o. Argumento)
3- vacia R3
e
vacia R4 en R3 h(x,s(y))anterior h(x,y)actual
MINIMIZACION Abacus ≥≥ PR funciones recursivas miniminización Funciones -básicas recursivas - Composición primitivas - Recursivas Primitivas
Hay mas programas Abacus que funciones recursivas primitivas Minimización h • x1• •y . . . • xn• f y• •0
la y más pequeña para la cual f(x1,...,xn,y) = 0
h(x1, ..., xn) =
indefinido si no existe y tal que f(x1,...,xn,y) = 0
Considere Mn[sum
]
Sum Pr[id11
, Cn[s, id3 3
]]
Número de argumentos de sum = 2
h = Mn[f
]
si f = sumf(x,y) = sum(x,y) = 0 si y sólo si x = y = 0 h = Mn[sum
]
(0) = 0 dado sum(0, 0) = 0Mn[sum
]
0• •0 1• 2• 3• . . . etc.Mn[Prod
]
prod(x, y) = x • y prod(x, y) = 0 si x = 0 & y = 0 o x ≠ 0 & y = 0 o x = 0 & y ≠ 0 Mn[prod]
(x) = 0 (x•0 = 0) h = Mn[prod]
0• •0 1• 2• 3• . . .En general
Mn[f
]
(x1,...,xn) = ySi f(x1,...,xn,y) = 0
& f(x1,...,xn, t) es definida y positiva
para t < y Ejemplo f(0) = N f(1) = 0 y = 1 pero no existe t f(t) 0• •0 t • 1• Mn[f
]
no está definida
Abacus para Mn
y si f(x1,...,xn, y) = 0 cuando
Mn[f
]
(x1, ..., xn) exista f(x1,...,xn,t) & ∀∀t, t<ySi no existe y Mn[f
]
(x1,...,xn) =φ
* Minimización de funciones totales y pariciales Abacus de Mn, para n = 1, (a(f) =2)
f([1