Sei sulla pagina 1di 8

FUNCIONES PARCIALES RECURSIVAS

• Definidas por Herbrand y Gödel (1932-1933)


• Formalización del concepto de algoritmo
• Construcción de funciones a partir de:
– Funciones básicas
– Operaciones:
• Composición
• Recursión
• Minimización
• Coinciden con las funciones while-computables
• Coinciden con las funciones Turing-computables
• Subconjunto importante: funciones primitivas
recursivas

FUNCIONES PARCIALES RECURSIVAS


• Definición de la suma:
– suma(0,x)=x
– suma(n+1, x)=succ(suma(n,x))
• Definición de la multiplicación:
– mult(0,x)=0
– mult(n+1,x)=suma(mult(n,x),x)
• Definición de la potencia
– pot(x,0)=1
– pot(x,n+1)=mult(pot(x,n),x)
• Usamos funciones simples (cero,proyección y succ)
• Utilizamos composición y recursión
• ¿Qué va después de la potencia? La tetración
(tetration): 3 3=333=327≠(33)3=333333 =39

1
FUNCIONES PRIMITIVAS RECURSIVAS
• Subconjunto de las funciones recursivas
• Siempre son totales
• Incluyen las funciones aritméticas más comunes:
– Suma
– Resta
– Multiplicación
– División
– Potencia
– Factorial
– ...
• Hay funciones totales recursivas que no son
primitivas recursivas
– Argumento diagonal
– Función de Ackermann

FUNCIONES PRIMITIVAS RECURSIVAS


• Son funciones parciales recursivas:

– Las funciones básicas:


• Cero
Z(x)=0

• Proyecciones

Ui,n (x1, x2, ..., xn)=xi

• Sucesor

S(x)=x+1

2
FUNCIONES PRIMITIVAS RECURSIVAS
• Son funciones primitivas recursivas:

– Las funciones obtenidas de PR por:


• Composición:
h(x1, x2, ..., xn)
g1(x1, x2, ..., xm), g2(x1, x2, ..., xm),..., gn(x1, x2, ..., xm)

f(x1, x2, ..., xm)=h(g1(x1, x2, ..., xm),..., gn(x1, x2, ..., xm))
• Ejemplo:
f(x)=x+2
h=S
g=S

f(x)=h(g(x))=S(S(x))=x+2

FUNCIONES PRIMITIVAS RECURSIVAS


• Son funciones primitivas recursivas:
– Las funciones obtenidas de las anteriores por:
• Recursión:
g(x1, x2, ..., xn)
h(x1, x2, ..., xn+2)

f(0,x1, x2, ..., xn)=g(x1, x2, ..., xn)


f(k+1,x1, x2, ..., xn)=h(f(k,x1, x2, ..., xn),k, x1, x2, ..., xn)
• Ejemplo (suma):
g(x)=U 1,1(x)=x
h(a,b,c)=S(U1,3(a,b,c))=a+1

f(0,x)=x
f(k+1,x)=h(f(k,x),k,x)=f(k,x)+1

3
FUNCIONES PRIMITIVAS RECURSIVAS
• Ejemplo (factorial):
g=S(0)
h(a,b)=mult(U2,1(a,b),S(U2,2(a,b)))=mult(a,b+1)

f(0)=1
f(k+1)=h(f(k),k)=f(k)*(k+1)

• Ejemplo (predecesor):
g=0
h(a,b)=U2,2(a,b)=b

f(0)=0
f(k+1)=h(f(k),k)=k

FUNCIONES PRIMITIVAS RECURSIVAS


• Ejemplo (resta):
– Nótese que x-(k+1)=(x-k)-1
– Calcularemos primero r(k,x)=x-k
g(x)=x
h(a,b,c)=pred(U1,3(a,b,c))

r(0,x)=g(x)=x
r(k+1,x)=h(r(k,x),k,x)=pred(r(k,x))

– Ahora definimos f(a,b)=a-b por composición

f(a,b)=r(U2,2(a,b), U1,2(a,b))=r(b,a)=a-b

4
FUNCIONES PRIMITIVAS RECURSIVAS
• Todas las funciones PR son totales
• Hay funciones computables totales que no son PR
– Argumento diagonal
• Enumerar de forma computable las PR: fn(x)
• Considerar g(x)= fx(x)+1
• Es una función total y computable pero distinta de cada fn
• El argumento funciona con cualquier familia computable de
funciones totales y computables

– Función de Ackermann
A(0,n)=n+1
A(m,0)=A(m-1,1) si m>0
A(m,n)=A(m-1,A(m,n-1)) si m>0 y n>0

• Es claramente una función computable

LA FUNCIÓN DE ACKERMANN
• Crece más rápido que cualquier función PR
• Algunos valores

A(m,n) n=0 n=1 n=2 n=3

m=0 1 2 3 4

m=1 2 3 4 5

m=2 3 5 7 9

m=3 5 13 29 61

m=4 13 65533 265536-3 2265536-3

m=5 65533 A(4,65533) A(4,A(4,65533)) A(4,A(5,2))

m=6 A(4,65533) A(5,A(4,65533)) A(5,A(6,1)) A(5,A(6,2))

5
LA FUNCIÓN DE ACKERMANN
• Una definición alternativa
A(0, n) = n + 1
A(1, n) = 2 + (n + 3) – 3 = n+2
A(2, n) = 2 (n + 3) - 3 = 2n -3
A(3, n) = 2n + 3 - 3
...2
A(4, n) = 22 -3 (n + 3 potencias)

• A partir de aquí se necesitan nuevas notaciones:
– Flechas de Knuth
– Cadenas de Conway
– Polígonos de Steinhaus y de Moser

NÚMEROS ENORMES
• ¿Quién puede nombrar el mayor número? (googol)
• El número de granos de arena: Arquímedes (1063)
• Partículas en el universo (menor que 1087)
• Hay números mucho más grandes
• Los números grandes tienen aplicaciones:
79
– El (primer) número de Skewes: eee
• Aproximadante 10 101034

• Aparece estudiando la distribución de números primos


– El número de Graham
• No puede representarse con notación “normal”
• Aparece en el libro Guinness de los Records
• Relacionado con la teoría de grafos (teoría de Ramsey)
• Números aún más grandes: los del Busy Beaver
– Crecen más rápido que cualquier función computable

6
NÚMEROS ENORMES
• Nombres y números:
– Uno, dos, muchos
– El mayor número natural que puede ser nombrado con menos
de 100 palabras (lo mismo, pero más uno)
– Paradoja de Berry
– Teoría algorítmica de la información
• Debida a Chaitin
• Extiende los trabajos de Gödel y Turing
• Más información:
– The book of numbers, John Conway y Richard Guy
– Who can name the biggest number?
http://www.scottaaronson.com/writings/bignumbers.html
– Large numbers
http://home.earthlink.net/~mrob/pub/math/largenum.html

FUNCIONES PARCIALES RECURSIVAS


• Pueden ser no totales (parciales)
• Incluyen a todas las primitivas recursivas
• Equivalen a las while-computables
• Se forman a partir de las funciones básicas por
– Composición
– Recursión
– Minimización
• Operador de minimización:
– Dada p(y, x1, x2, ..., xn) definimos

f(x1, x2, ..., xn)=µy[p(y, x1, x2, ..., xn)=1]

que será el menor y que cumpla la condición (si existe)

7
FUNCIONES PARCIALES RECURSIVAS
• Ejemplo: la división
• También es primitiva recursiva
• Necesitaremos funciones auxiliares
– positivo(x)=1 si x>0, 0 si no
– Definición como primitiva recursiva

positivo(0)=0
positivo(x+1)=S(Z(U2,1(positivo(x),x)))=1

– mayor(x,y)=1 si x>y, 0 si no
– Definición como primitiva recursiva

mayor(x,y)=positivo(resta(U2,1(x,y),U2,2(x,y)))

FUNCIONES PARCIALES RECURSIVAS


• La división se define como:

Dividendo=cociente * divisor + resto


siendo 0<=resto<divisor

• Entonces:
Dividendo – cociente * divisor = resto
Dividendo – (cociente+1) * divisor = resto –divisor <0
Dividendo < (cociente+1)*divisor

• Por tanto

division(x,y)=µz[mayor((z+1)*y,x)=1]

Potrebbero piacerti anche