FUNCIONES RECURSIVAS exp(x,y) = x . Dónde: x = 1, x = x, x = x•x

Anuncio
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
Descargar