Capítulo 7 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) (eq. 2) (eq. 2) (eq. 1) 53=52+1 =5•52 (x=5 y y=2), 52=51+1 =5•51 (x=5 y y=1), 51=50+1 =5•50 (x=5 y y=0), 50=1 Entonces: 53 = 5•52 = 5•5•51 = 5•5•5•50 = 5•5•5•1 1 Capítulo 7 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 Exp Reduce Producto Suma Recursión: Re-Escribir una expresión Expresiones más simples. 2 Capítulo 7 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 función sucesor ‘0’ ‘S’ (1 argumento) s: 0 1 2 0 1 2 3 n n+1 • • • • • • tomando en cuenta ‘+’ y ‘s’ : x+0=x x + s(y) = s(x+y) Recordar: ‘+’ función de dos argumentos ‘s’ función de un argumento 3 Capítulo 7 RELACION ENTRE FUNCIONES “+” y “S” y• x• s• + x+y • • • • s(y) + •s x+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=3 y=4 x+s(y) @ @ @ @ @ s(y) = 5 @ @ @ x + s(y) = 8 x+s(y) @ @ @ @ @ @ @ @ s(x + y) @ @ @ @ @ x + s(y) = 8 @ = @ @ @ @ @ @ @ s(x + y) = 8 4 Capítulo 7 Ejemplo Evaluar 2 + 3 : s(s(0))) + s(s(s(0))) (eq. 1) (eq. 2) x = y = s(y) = (eq. 2) x+0=x x + s(y) = s(x + y) s(s(0)) s(s(s(0))) s(s(s(s(0)))) ss0 + sss0 = ss0 = sss0 = ssss0 = 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 5 Capítulo 7 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 eliminando sssss0 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. 6 Capítulo 7 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 id 11 (x) = x id 12 (x,y) = x, id 22 (x,y) = y id 13 (x,y,z) = x, id 23 (x,y,z) = y, id 33 (x,y,z) = z Proyecciones: y •(x,y) id 12 (x,y) = proyx (x,y) = x id 22 (x,y) = proyy (x,y) = y • x Para un espacio de orden n: id ni ( x1, ..., xi, ... xn ) = xi Las funciones identidad varias pueden ser ordenadas id, id 12 , id 22 , id 13 , id 23 , id 33 ... 7 Capítulo 7 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. ¿Hay alguna relación entre a(n), a(g) y a(f)? 8 Capítulo 7 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 g2 0 1 2 . . . n P2 g3 P3 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: h = Cn[f, g1, ..., gm] Cn = composición 9 Capítulo 7 Ejemplos de Composición 1) f = s g = id 33 h(x1, x2, x3) = s(id 33 (x1, x2, x3)) = x3 + 1 h = Cn[s, id 33 ] 2) Calcula h(x) = x + 2 f =s g=s h(x) = s(s(x)) = h = Cn[s, s] Cn[s, s] (x) nombre de funció n argumento 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]] 10 Capítulo 7 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Ÿ yŸ •h(x, y) h • • s(y)Ÿ g • Ciclo de Recursión h = Pr [f, g] 11 Capítulo 7 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)) (x,0) h h(x,0)=f(x) x • f 12 Capítulo 7 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 = id 11 ê f(x) = x; “condición inicial” 2) sum(x,s(y)) = s(id 33 ( -, -, sum(x,y))) g = Cn[s, id 33 ] sum = Pr [id 11 ,Cn[s, id 33 ]] 13 Capítulo 7 “SUM” 2 o• •x sum 1 h sum(x, o) = id(x) = x • x• id f = id x + s(y) = s(x + y) sum • xŸ •x + y sum • yŸ • x + s(y) s(y)=y+1Ÿ 1 [ 2 C n s ,id nú mero de argumento 3 3 ]• 3 g = Cn[s,id 33 ] = s(id 33 ( _, _, sum(x,y))) x, y son argumentos vacuos de g (es este caso) ∴ sum = Pr [id, Cn[s,id 33 ]] 14 Capítulo 7 prod 1) prod (x, 0) = 0 prod • 2 0• •0 1 x• z • función cero z(0) =0, z(1) =0, ... f=z 2) prod (x,s(y)) = x + prod(x,y) prod • • x•y xŸ prod • yŸ • x•(y + 1) s(y) = y+1Ÿ 1 sum(x,x•y) 2 • 3 g = Cn[sum, id 13 , id 33 ] prod = Pr [z, Cn [sum, id 13 , id 33 ]] 15 Capítulo 7 Exp: Xy 1) x0 = 1 2) xy+1 = x• xy 1) Exp (x,0) = 1 0• •1 Exp • x• • f(x) =1 f = Cn[s,z] ⇒ f(x) = s(z(x)) 2) exp • xŸ yŸ • xy exp • • xy+1 s(y) = y+1Ÿ prod(x,xy) • g = Cn[prod, id 13 , id 33 ] Exp = Pr[Cn[s, z], Cn[prod, id 13 , id 33 ]] 16 Capítulo 7 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• x• sup • •1 f(x) = 1 • f f = Cn[s,z] f(x) = s(z(x)) 17 Capítulo 7 2) Sup(x, y +1) = xsup(x,y) sup • xŸ yŸ • sup(x,y) sup • • sup(x,s(y) s(y) Ÿ • Exp(x,sup(x,y)) g = Cn[Exp, id 13 , id 33 ] Sup = Pr[Cn[s, z], Cn[Exp, id 13 , id 33 ]] 18 Capítulo 7 Fact 1) 0! = 1 fact(0) = 1 2) s(y)! = s(y)•y! fact(s(y)) = s(y)•fact(y) fact • 0• • f = s(0) •1 el único argumento de f es cero fact • yŸ fact • • y! •s(y)! s(y) Ÿ • prod(s(id 12 ), id 22 ) g = Cn[prod, Cn[s, id 12 ], id 22 ] fact = Pr [s(0), Cn[prod, Cn[s, id 12 ], id 22 ]] Formato (eliminando argumento “x”) h = fact h(0) = f(0) dónde f = s h(s(y)) = g(y, h(g)) dónde g = prod (s(y), h(y)) 19 Capítulo 7 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• • • f 0• a(h) = n+1 a(f) = n 2) n 0 h • x1• • h(x1,...,xn,y) . . xn• y• • h(x1,...,xn,s(y)) • s(y) • g h • 20 Capítulo 7 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 R 21 Capítulo 7 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) id 11 , id 12 , id 22 , ... 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. 22 Capítulo 7 PROGRAMAS ABACUS DE FUNCIONES BÁSICAS Formato de argumentos y valor de la función R1 R2 . . . Rn n argumentos Rn+1 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ón 1) 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] = x [2] = 0 23 Capítulo 7 PROGRAMAS ABACUS DE FUNCIONES BÁSICAS 2) s(x) = s+1 Inicialmente [1] = x [2] = 0 [2] = s(x) al final: [1] + [2] 2 2+ copia el contenido de R1 a R2 incrementa en 1 el cont. de R2 3) id nm Inicialmente [1] = x1, . . . , [n] = xn y [n + 1] = 0 Finalmente [n + 1] = xm, [m] + [n + 1] n+1 1≤m≤n copia el cont. de Rm a Rn + 1 24 Capítulo 7 COMPOSICION DE FUNCIONES 1) Composición: h = Cn[f, g1, . . . gm] n = a(h) = a(gi) dados m + 1 f(ŠŠ1‹‹, ..., Š m‹‹) m+1 1≤i≤m programas 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 25 Capítulo 7 Composición n = 3, m = 4 (1) g1 ([1]], [2]], [3]]) [1]] P1 [2]] [3]] g2 ([1]], [2]], [3]]) P2 [1]] [2]] [3]] es posible paralelizar • g1 • g2 P1 P2 2) Vacia n registros posible paralelizar [1]] [2]] [3]] q1 q2 q3 -m e +n s[n]] = 0 [m]] + [n]] [m]] = 0 n 3) Calcula f([P1] , [P2] ) [P1] + [1]] [P2] + [2]] [1]] 1 2 Es posible paralelizar [2]] • f [3] 4) Finaliza: (1) [3]] (2) [q1] 4 1, [q2] 2, [q3] (Es posible 3 paralelizar) f (g1([1], [2], [3]), g2([1], [2], [3])) 4 26 Capítulo 7 Programa abacus para recursión primitiva h • • x• 0• • f h x• • • h(x, y) h y• • s(y) • • •h(x,s(y)) g h = Pr[f, g] Dados: f([x]) Obtener: Inicialmente: g([1], [2], [3]) 2 h ([1], [2]) 4 3 [1] = x, [2] = y [3] = [4] = ... = 0 usamos Rp, no usado en f y g, como contador. 27 Capítulo 7 ¿Cómo Funciona la Recursión? h • x• 0• • • f h x• • • h(x, y) h y• • s(y) • • •h(x,s(y)) g 28 Capítulo 7 Computo de h: x, y p=y, y=0 f(x) = h(x,0) si p=0 no h(x, 0) = f(x) g(x, 0, h(x, 0)) = h(x, 1) y = y+1 g(x,1,h(x,1)) = h(x, 2) etc p=p-1 p veces h(x, y ) si no p=0 29 Capítulo 7 Inicialmente Programa 6.2 Programa 6.2 Programa 6.2 [1] = x, [2] = y, [3] = 0 vaciar [2] en P f([1]) 2 p = y, y = 0 f(x) = h(x,0) vacia [2] en 3 h(x, 0) Registro 2 R3 e p- termina g([1],[2],[3]) 2+ 4 g(x,y,h(x,y)) = h(x,s(y)) R4 y = y + 1 (para 2o. Argumento) 3- vacia R3 e vacia R4 en R3 termina [1]= x h(x,s(y))anterior h(x,y)actual [2] = y [3] = h(x,y) 30 Capítulo 7 MINIMIZACION Abacus ≥ PR funciones recursivas miniminización Funciones recursivas primitivas -básicas - Composición - Recursivas Primitivas Hay mas programas Abacus que funciones recursivas primitivas Minimización h • x1• . . . xn• y• •y • f •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 h = Mn[f] 31 Capítulo 7 Considere Mn[sum] Sum Pr[id 11 , Cn[s, id 33 ]] Número de argumentos de sum = 2 h = Mn[f] si f = sum f(x,y) = sum(x,y) = 0 si y sólo si x=y=0 h = Mn[sum](0) = 0 dado sum(0, 0) = 0 Mn[sum] 0• 1• 2• 3• . . . etc. Mn •0 Puede producir funciones parciales 32 Capítulo 7 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• 1• 2• 3• . . . •0 33 Capítulo 7 En general Mn[f](x1,...,xn) = y Si 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 (El único t < y es t = 0, pero f(0) = φ) 34 Capítulo 7 Abacus para Mn y Mn[f] (x1, ..., xn) si f(x1,...,xn, y) = 0 cuando exista f(x1,...,xn,t) & ∀t, t<y Si 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], [2]) = ? Mn[f] R3 Inicialmente: [1] = x [2] = 0 f([1],[2]) 3- 2+ e e Secuencia: f(x,0) 3 f(x,1) 3 ≠ 0 f(x,2) 3 3 3- [3] = 0 f(x,y) = 0 [2] = y Mn[f](x) = [2] 35