SlideShare una empresa de Scribd logo
1 de 34
Funciones recursivas
Roberto Moriyón
Ejemplo: Función de Ackerman
• F(i,x) = (i=0) ? x+1 : ((x=0) ? F(i-1,1) :
F(i-1,F(i,x-1)))
• Ejemplos:
F(0,x) = x+1
F(1,1) = F(0,F(1,0)) = F(0,F(0,0)) = F(0,1) = 2
F(1,2) = F(0,F(1,1)) = F(0,2) = 3
F(1,x) = F(0,F(1,x-1)) = … = F(0,x) = x+1
F(2,1) = F(1,F(2,0)) = F(1,F(1,1)) = F(1,2) = 3
F(2,x) = F(1,F(2,x-1)) = … = F(1,2x-1) = 2x+1
…
Definiciones recursivas primitivas
• Ejemplo con un argumento:
F(x+1) = 2*F(x) F(x+1) = g(F(x))
F(0) = 1 F(0) = h
• Definición general:
F(x1+1, x2, …, xn) = g(F(x1, x2, …, xn), x1, x2, …, xn)
F(0, x2, …, xn) = h(x2, …, xn)
• Ejemplos: La definición de Ackerman no lo es
F(x+1,y) = F(x, y)+2
F(0,y) = y+2
Funciones recursivas primitivas:
Funciones básicas
• Las funciones recursivas básicas numéricas
son:
– Sucesor: s(x) = x+1
– Anulación: n(x) = (x=0) ? 1 : 0
– Proyecciones: ui
n
(x1, …, xn) = xi
Funciones recursivas primitivas
• Se pueden definir a partir de las básicas
mediante recursión primitiva y
composición
• Ejemplos:
– F(x) = s(s(x))
– G(x+1, y) = F(G(x, y))
G(0,y) = F(y)
Composición
• En general, si f(x1,…,xn), g1(y1,…,ym),…, gn(y1,
…,ym) son funciones, diremos que la
función
h(y1,…,ym) = f(g1(y1,…,ym),…,gn(y1,…,ym))
se obtiene a partir de ellas mediante
composición.
• En realidad corresponde a la composición
de G con f, donde G es la función vectorial
con coordenadas g1, …, gn.
Totalidad y computabilidad de las
funciones recursivas primitivas
• Si f es RP, es total
• La función prev: N - { 0 } → N definida mediante
prev(x+1) = x
no es total (y tampoco RP)
• Las funciones RP son computables, pues tanto
f(x)=y como f(x)≠y se pueden determinar
algorítmicamente en tiempo finito.
EJERCICIOS: Demostrar que las
siguientes funciones son RP
• [RPN1] fk(x) = k
• [RPN2] suma(x, y)
• [RPN3] restap(x, y) // Da 0 si y > x
• [RPN4] producto(x, y)
• [RPN5] restaabs(x, y) // |x-y|
• [RPN6] positivo(x) // x > 0 ? 1 : 0
• [RPN7] max(x, y)
• [RPN8] min(x, y)
• [RPN9] factorial(x)
• [RPN10] potencia(x, y) // xy
• [RPN11] par(x) // x = 2*(x/2) ? 1 : 0
EJERCICIOS: Demostrar que las
siguientes funciones son RP
• [RPN12] cocientedefecto(x, 2)
• [RPN13] cocientedefectop(x, y) // (x, 0)  0
• [RPN14] iguales(x, y)
• [RPN15] menoroigual(x, y)
• [RPN16] menor(x, y)
• [RPN17] divisor(x, y)
• [RPN18] primo(x)
• [RPN19] restodivision(x, y)
• [RPN20] primomayor(x) // Primero mayor
• [RPN21] mcd(x, y)
• [RPN22] mcm(x, y)
Funciones recursivas primitivas
sobre cadenas de caracteres
• Las funciones recursivas básicas sobre cadenas
de caracteres son:
– Anteposición: sσ(x). Ejemplo: sa(“abc”)=“aabc”
– Vacuidad: vσ(x) = (x=λ) ? σ : λ
– Proyecciones ui
n
(x1, …, xn) = xi
• Ejemplos:
• fσδ(x) = sσ(sδ(x))
• g(λ,y) = fab(y)
g(sa(x),y) = fab(g(x,y))
g(sb(x),y) = fba(g(x,y))
Funciones recursivas primitivas sobre
cadenas de caracteres, II
• Una recursión primitiva sobre cadenas está
formada por |Σ|+1 reglas:
f(sσ(w1),x2,…,wn) = gσ(f(w1,w2,…,wn),w1,w2,…, wn)
f(0, w2, …, wn) = h(w2, …, wn)
donde cada gσ y h son funciones recursivas
primitivas.
• Las funciones recursivas primitivas sobre
cadenas también son totales y
computables
Funciones recursivas primitivas
sobre cadenas de caracteres, III
• La función resto: Σ+
→ Σ*
que elimina el
primer carácter no es total ni, por lo tanto,
recursiva primitiva
EJERCICIOS: Demostrar que las
siguientes funciones son RP
• [RPC1] fv(w) = v
• [RPC2] start(v) // start(“ab”)=“a”, start(0) =
0
• [RPC3] fin(v) // end(“ab”)=“b”, end(0)=0
• [RPC4] cuentaσ(v) // cuentaa(“abbaba”)=“aaa”
• [RPC5] concatena(v, w)
• [RPC6] invierte(v)
• [RPC7] esPalíndrome(v)
• [RPC8] esVacía(v)
EJERCICIOS: Demostrar que las
siguientes funciones son RP
• [RPC9] iguales(v, w)
• [RPC10] contiene(v, w)
// contiene(“abcba”, “bcb”) = “a”
// contiene(“abcba”, “bab”) = 0
• [RPC11] sustituye(u, v, w)
• [RPC12] longitud(v)
// longitud(“abc”) = “aaa”
Funciones recursivas primitivas: Suma
recursiva
• Suponemos que f(n) es recursiva primitiva
• g(m) = f(0) + f(1) + … + f(m)
– g(0) = 0
– g(m+1) = suma(g(m), f(s(m)) = h(g(m),m)
donde
h(x,y) = suma(x,f(s(y))
es primitiva recursiva, luego g también lo es.
Ejercicios
• Suponemos que f(m) es recursiva primitiva.
Demostrar que las siguientes funciones
también lo son: [RPA1], [RPA2], [RPA3],
[RPA4]
– g(m,x) = min(f(0), f(1), …, f(m))
– g(m,x) = f(f(…f(f(x))…)) // m concatenaciones de f
– g(x) = 1 si ∃m≤x, f(m)=0, y g(x) = 0 en caso
contrario
– g(x) = 1 si ∀m≤x, f(m)=0, y g(x) = 0 en caso
contrario
Totalidad y computabilidad de la
función de Ackerman
• F(i,x) = (i=0) ? x+1 : ((x=0) ? F(i-1,1) :
F(i-1,F(i,x-1)))
• Es total
• Es computable
• Sin embargo, no es recursiva primitiva:
– Fj(x) = F(j, x) = Fj-1(Fj-1(…(Fj-1(0)…))
– Fx(x) crece más rápido que cualquier función
de la sucesión f0(x)=x+1, fj+1(x)=fj(fj(…(fj(0)…))
– Las funciones R.P. crecen como alguna de las
funciones anteriores
Formas de definición de las
funciones recursivas
• Definición usual: Aplicar la definición
repetidamente, utilizando una pila de
cálculos parciales, hasta que se llegue al
resultado
• Ejemplo: Para la función de Ackerman,
F(1,1) = F(0,F(1,0)) = F(0,F(0,0)) = F(0,1)
= 2
Formas de definición de las
funciones recursivas, II
• Forma rigurosa (aunque teórica):
• Definir F sobre un primer dominio, D0,
donde se puede calcular directamente
– Ejemplo: Para la función de Ackerman,
D0={(i,x)|i=0}, en cuyo caso f0(i,x)=x+1
• Definir F sobre un dominio Dj+1 si su
cálculo se puede reducir al de F sobre Dj
– Ejemplo: D1=D0 {(i,x) | x=0}; f∪ 1(i,x) = …
– D2=D1 {(1,1)}; f∪ 2(i,x) = …, etc
Formas de definición de las
funciones recursivas, III
• Interpretación de la forma anterior: punto
fijo de un operador
– P(f)(x) = (i=0) ? x+1 : ((x=0) ? f(i-1,1) :
f(i-1,f(i,x-1)))
– P(f0) = f1
– P(f1) = f2
– …
– F es un punto fijo de P: P(F) = F
EJERCICIOS
• [REC 1] Calcular el dominio y los valores de
las imágenes de las funciones f y g definidas
mediante
– f(x,y) = 2.f(y, 2.x)
– g(x) = (x < 5) ? f(x, x) : ((x = 5) ? 1 : x*g(x-1))
• [REC 2] Calcular el dominio y los valores de
las imágenes de la función h definida
mediante
h(x, y) = (x = 0) ? 1 : h(x – 1, h(|x – y|, y))
Funciones recursivas:
Minimización
• Si f(x,y) es una función recursiva, entonces
g(x) = min { y | f(x,y) ≠ 0 }
define otra función recursiva
– Demostración: Definimos
gaux(x, z) = min { y | f(x, z+y) ≠ 0 }
entonces
– gaux(x, z) = (f(x, z) ≠ 0) ? 0 : 1 + gaux(x, z+1)
– g(x) = gaux(x,0)
EJERCICIOS
• Suponiendo que la función f(x,y) sea
recursiva, demostrar que también lo es la
función g(x) cuyo valor es la suma f(x,0) +
f(x,1) + … + f(x,n) donde n se elije de
manera que los sumandos sean
diferentes de 0 y f(x,n+1)=0.
Ejemplo de funciones recursivas:
Máquinas de Turing
• Dada una máquina de Turing determinista
M, la función transita(x, y), donde x e y son
estados instantáneos de ejecución de M,
que vale “a” si la máquina M lleva la cinta
del estado x al y y ↑ en caso contrario, es
recursiva (pero no recursiva primitiva)
Ejemplo de funciones recursivas:
Máquinas de Turing, II
• Demostración:
transita(x, y) = esEstado(x) & esEstado(y) &
& ((x=y) ? “a” : transita(aplicaRegla(x), y))
• La función aplicaRegla(x) devuelve el resultado de
aplicar una regla de transición de M a partir del
estado de ejecución x; si no se puede, devuelve x.
• EJERCICIO: [MT REC] Demostrar que las
funciones esEstado(x) y aplicaRegla(x) son
recursivas primitivas.
Ejemplo de funciones recursivas:
Máquinas de Turing, III
• Dada una máquina de Turing determinista
M, la función ejecuta(x, y), donde x, y∈Σ*
,
que devuelve el estado instantáneo de
ejecución de M a partir de y después de |
x| transiciones, es recursiva primitiva.
• Demostración:
ejecuta(λ, y) = Sq
º
(y)
ejecuta(Sσ(x), y) =
aplicaRegla(ejecuta(x, y))
Ejemplo de funciones recursivas:
Máquinas de Turing, IV
• Dada una máquina de Turing determinista M, la
función produce(x), que a cada cadena x le hace
corresponder el contenido de la cinta cuando M
se para a partir de x es recursiva (pero puede
no ser recursiva primitiva)
• Demostración:
produce(x) =
quitaEstado(ejecuta(x,miny(para(ejecuta(x, y)))))
• Observación: miny se puede definir en este caso
de forma análoga a como se hace con números.
Forma normal de funciones
recursivas
• Todas las funciones recursivas se pueden
escribir en la forma
f(x) = p(miny(q(x, y)))
donde p y q son funciones recursivas
primitivas.
• Las funciones p y q se pueden elegir de
manera que p simplemente elimine el
contenido de la cinta previo a un
separador.
Forma normal: programas
• La construcción anterior también se
puede hacer con programas en lugar de
máquinas de Turing: a partir de cualquier
programa podemos construir otro
equivalente que incorpora un contador y
emula al primero paso a paso y cuando el
inicial se para sigue ejecutándose sin
hacer nada y guardando en una variable
booleana fin la información de que el
programa emulado ha terminado.
Forma normal: programas, II
• El cálculo del programa inicial se puede
realizar buscando el valor mínimo del
contador del programa emulador para el
cual la variable fin es cierto, y devolviendo
la variable que contiene el valor del
programa emulado.
Ejemplo de funciones recursivas:
Máquinas de Turing, V
• Si una máquina de Turing tiene una definición
mediante submáquinas que es recursiva, la
función que define sobre cadenas de caracteres
es recursiva.
• Como consecuencia de lo anterior, las
máquinas de Turing definidas recursivamente
mediante submáquinas no proporcionan un
mecanismo de computación más potente que
las máquinas de Turing simples.
Ejemplo de funciones recursivas:
Máquinas de Turing, VI
• La demostración de la afirmación anterior se
basa en la función FM(q, u, x, v), que da el estado
final de ejecución (q’, u’, x’, v’) calculado por la
máquina a partir del estado q con la palabra uxv
sobre la cinta, apuntando a la x. Su definición es
FM(q, u, x, v) = FM(q’, Π234(FN(q, u, x, v)))
donde N es la submáquina correspondiente a la
transición. Esto da lugar a una definición
recursiva de las funciones FM.
• Si la submáquina es indeterminista, se
demuestra de manera análoga utilizando
conjuntos de estados en lugar de estados.
Qué funciones son recursivas?
• Todas las calculables
• Es consecuencia de lo anterior
• También es consecuencia de la
construcción de una máquina universal
que emula máquinas de Turing con
submáquinas recursivas
Qué funciones son recursivas?,
II
• Las que se obtienen a partir de las
recursivas primitivas básicas mediante
composición, recursión primitiva y
minimización
• Es consecuencia de lo anterior

Más contenido relacionado

La actualidad más candente

Funciones reales en una variable
Funciones reales en una variableFunciones reales en una variable
Funciones reales en una variableasegura-b
 
Tema8 funciones
Tema8 funcionesTema8 funciones
Tema8 funcionesrafapalomo
 
Curso cero-mat-sept-2010-tema-3
Curso cero-mat-sept-2010-tema-3Curso cero-mat-sept-2010-tema-3
Curso cero-mat-sept-2010-tema-3rafaelangelrom
 
FUNCIONES REALES Y GRAFICAS
FUNCIONES  REALES  Y GRAFICASFUNCIONES  REALES  Y GRAFICAS
FUNCIONES REALES Y GRAFICASDiaz Fabian
 
Funciones de varias variables Matemáticas III
Funciones de varias variables Matemáticas IIIFunciones de varias variables Matemáticas III
Funciones de varias variables Matemáticas IIIAngel Granados
 
Capitulo I analisis vectorial, funciones de varias variables.
Capitulo I analisis vectorial, funciones de varias variables.Capitulo I analisis vectorial, funciones de varias variables.
Capitulo I analisis vectorial, funciones de varias variables.Frida Villalobos
 
Analisis grafico intro
Analisis  grafico introAnalisis  grafico intro
Analisis grafico introJACARPIN
 
La derivada es fácil
La derivada es fácilLa derivada es fácil
La derivada es fácilvkymwwbu
 
Clase 11.2 mbe funcion lineal y cuadratica
Clase 11.2 mbe funcion lineal y cuadraticaClase 11.2 mbe funcion lineal y cuadratica
Clase 11.2 mbe funcion lineal y cuadraticaluis jimenez
 
Funciones De Dos Variables
Funciones De Dos VariablesFunciones De Dos Variables
Funciones De Dos VariablesHector Funes
 
Cálculo varias variables campos escalares
Cálculo varias variables campos escalaresCálculo varias variables campos escalares
Cálculo varias variables campos escalaresYerikson Huz
 
Funciones reales especiales 2012
Funciones reales especiales 2012Funciones reales especiales 2012
Funciones reales especiales 2012cena03
 

La actualidad más candente (20)

Funciones reales en una variable
Funciones reales en una variableFunciones reales en una variable
Funciones reales en una variable
 
Derivadas
DerivadasDerivadas
Derivadas
 
Tema8 funciones
Tema8 funcionesTema8 funciones
Tema8 funciones
 
Curso cero-mat-sept-2010-tema-3
Curso cero-mat-sept-2010-tema-3Curso cero-mat-sept-2010-tema-3
Curso cero-mat-sept-2010-tema-3
 
Funciones varias variables completo
Funciones varias variables completoFunciones varias variables completo
Funciones varias variables completo
 
Diapositivas integral definida
Diapositivas integral definidaDiapositivas integral definida
Diapositivas integral definida
 
FUNCIONES REALES Y GRAFICAS
FUNCIONES  REALES  Y GRAFICASFUNCIONES  REALES  Y GRAFICAS
FUNCIONES REALES Y GRAFICAS
 
Operaciones con funciones
Operaciones con funcionesOperaciones con funciones
Operaciones con funciones
 
Taller 10-14-ii
Taller 10-14-iiTaller 10-14-ii
Taller 10-14-ii
 
Funciones de varias variables Matemáticas III
Funciones de varias variables Matemáticas IIIFunciones de varias variables Matemáticas III
Funciones de varias variables Matemáticas III
 
Paralela1
Paralela1Paralela1
Paralela1
 
Capitulo I analisis vectorial, funciones de varias variables.
Capitulo I analisis vectorial, funciones de varias variables.Capitulo I analisis vectorial, funciones de varias variables.
Capitulo I analisis vectorial, funciones de varias variables.
 
Analisis grafico intro
Analisis  grafico introAnalisis  grafico intro
Analisis grafico intro
 
La derivada es fácil
La derivada es fácilLa derivada es fácil
La derivada es fácil
 
Funciones inicio
Funciones inicioFunciones inicio
Funciones inicio
 
Clase 11.2 mbe funcion lineal y cuadratica
Clase 11.2 mbe funcion lineal y cuadraticaClase 11.2 mbe funcion lineal y cuadratica
Clase 11.2 mbe funcion lineal y cuadratica
 
Funciones De Dos Variables
Funciones De Dos VariablesFunciones De Dos Variables
Funciones De Dos Variables
 
Cálculo varias variables campos escalares
Cálculo varias variables campos escalaresCálculo varias variables campos escalares
Cálculo varias variables campos escalares
 
Funciones
FuncionesFunciones
Funciones
 
Funciones reales especiales 2012
Funciones reales especiales 2012Funciones reales especiales 2012
Funciones reales especiales 2012
 

Similar a Recursividad (20)

10 - T (1).pdf
10 - T (1).pdf10 - T (1).pdf
10 - T (1).pdf
 
ALGEBRA SUPERIOR MÓDULO I - Funciones y Limites
ALGEBRA SUPERIOR MÓDULO I - Funciones y LimitesALGEBRA SUPERIOR MÓDULO I - Funciones y Limites
ALGEBRA SUPERIOR MÓDULO I - Funciones y Limites
 
Funciones
FuncionesFunciones
Funciones
 
Gráfica de funciones
Gráfica de funcionesGráfica de funciones
Gráfica de funciones
 
Funcionesygraficas
FuncionesygraficasFuncionesygraficas
Funcionesygraficas
 
Funcion recursiva
Funcion recursivaFuncion recursiva
Funcion recursiva
 
Suma de funciones
Suma de funcionesSuma de funciones
Suma de funciones
 
La derivada
La derivadaLa derivada
La derivada
 
Función lineal
Función linealFunción lineal
Función lineal
 
Funciones elementales
Funciones elementalesFunciones elementales
Funciones elementales
 
Funciones
FuncionesFunciones
Funciones
 
Funciones 04
Funciones 04Funciones 04
Funciones 04
 
Clase integracion matlab
Clase integracion matlabClase integracion matlab
Clase integracion matlab
 
Tema_1.5_FUCIONES_ALGEBRAICAS.pdf
Tema_1.5_FUCIONES_ALGEBRAICAS.pdfTema_1.5_FUCIONES_ALGEBRAICAS.pdf
Tema_1.5_FUCIONES_ALGEBRAICAS.pdf
 
Funcionesenlenguaje c
Funcionesenlenguaje cFuncionesenlenguaje c
Funcionesenlenguaje c
 
Funciòn potencia, exponencial y logaritmica
Funciòn potencia, exponencial y logaritmicaFunciòn potencia, exponencial y logaritmica
Funciòn potencia, exponencial y logaritmica
 
Mat lab03
Mat lab03Mat lab03
Mat lab03
 
Funciones 10
Funciones 10Funciones 10
Funciones 10
 
S04_ s1- MATERIAL CAF2_solucionario.pptx
S04_ s1- MATERIAL CAF2_solucionario.pptxS04_ s1- MATERIAL CAF2_solucionario.pptx
S04_ s1- MATERIAL CAF2_solucionario.pptx
 
Paralela6
Paralela6Paralela6
Paralela6
 

Recursividad

  • 2. Ejemplo: Función de Ackerman • F(i,x) = (i=0) ? x+1 : ((x=0) ? F(i-1,1) : F(i-1,F(i,x-1))) • Ejemplos: F(0,x) = x+1 F(1,1) = F(0,F(1,0)) = F(0,F(0,0)) = F(0,1) = 2 F(1,2) = F(0,F(1,1)) = F(0,2) = 3 F(1,x) = F(0,F(1,x-1)) = … = F(0,x) = x+1 F(2,1) = F(1,F(2,0)) = F(1,F(1,1)) = F(1,2) = 3 F(2,x) = F(1,F(2,x-1)) = … = F(1,2x-1) = 2x+1 …
  • 3. Definiciones recursivas primitivas • Ejemplo con un argumento: F(x+1) = 2*F(x) F(x+1) = g(F(x)) F(0) = 1 F(0) = h • Definición general: F(x1+1, x2, …, xn) = g(F(x1, x2, …, xn), x1, x2, …, xn) F(0, x2, …, xn) = h(x2, …, xn) • Ejemplos: La definición de Ackerman no lo es F(x+1,y) = F(x, y)+2 F(0,y) = y+2
  • 4. Funciones recursivas primitivas: Funciones básicas • Las funciones recursivas básicas numéricas son: – Sucesor: s(x) = x+1 – Anulación: n(x) = (x=0) ? 1 : 0 – Proyecciones: ui n (x1, …, xn) = xi
  • 5. Funciones recursivas primitivas • Se pueden definir a partir de las básicas mediante recursión primitiva y composición • Ejemplos: – F(x) = s(s(x)) – G(x+1, y) = F(G(x, y)) G(0,y) = F(y)
  • 6. Composición • En general, si f(x1,…,xn), g1(y1,…,ym),…, gn(y1, …,ym) son funciones, diremos que la función h(y1,…,ym) = f(g1(y1,…,ym),…,gn(y1,…,ym)) se obtiene a partir de ellas mediante composición. • En realidad corresponde a la composición de G con f, donde G es la función vectorial con coordenadas g1, …, gn.
  • 7. Totalidad y computabilidad de las funciones recursivas primitivas • Si f es RP, es total • La función prev: N - { 0 } → N definida mediante prev(x+1) = x no es total (y tampoco RP) • Las funciones RP son computables, pues tanto f(x)=y como f(x)≠y se pueden determinar algorítmicamente en tiempo finito.
  • 8. EJERCICIOS: Demostrar que las siguientes funciones son RP • [RPN1] fk(x) = k • [RPN2] suma(x, y) • [RPN3] restap(x, y) // Da 0 si y > x • [RPN4] producto(x, y) • [RPN5] restaabs(x, y) // |x-y| • [RPN6] positivo(x) // x > 0 ? 1 : 0 • [RPN7] max(x, y) • [RPN8] min(x, y) • [RPN9] factorial(x) • [RPN10] potencia(x, y) // xy • [RPN11] par(x) // x = 2*(x/2) ? 1 : 0
  • 9. EJERCICIOS: Demostrar que las siguientes funciones son RP • [RPN12] cocientedefecto(x, 2) • [RPN13] cocientedefectop(x, y) // (x, 0)  0 • [RPN14] iguales(x, y) • [RPN15] menoroigual(x, y) • [RPN16] menor(x, y) • [RPN17] divisor(x, y) • [RPN18] primo(x) • [RPN19] restodivision(x, y) • [RPN20] primomayor(x) // Primero mayor • [RPN21] mcd(x, y) • [RPN22] mcm(x, y)
  • 10. Funciones recursivas primitivas sobre cadenas de caracteres • Las funciones recursivas básicas sobre cadenas de caracteres son: – Anteposición: sσ(x). Ejemplo: sa(“abc”)=“aabc” – Vacuidad: vσ(x) = (x=λ) ? σ : λ – Proyecciones ui n (x1, …, xn) = xi • Ejemplos: • fσδ(x) = sσ(sδ(x)) • g(λ,y) = fab(y) g(sa(x),y) = fab(g(x,y)) g(sb(x),y) = fba(g(x,y))
  • 11. Funciones recursivas primitivas sobre cadenas de caracteres, II • Una recursión primitiva sobre cadenas está formada por |Σ|+1 reglas: f(sσ(w1),x2,…,wn) = gσ(f(w1,w2,…,wn),w1,w2,…, wn) f(0, w2, …, wn) = h(w2, …, wn) donde cada gσ y h son funciones recursivas primitivas. • Las funciones recursivas primitivas sobre cadenas también son totales y computables
  • 12. Funciones recursivas primitivas sobre cadenas de caracteres, III • La función resto: Σ+ → Σ* que elimina el primer carácter no es total ni, por lo tanto, recursiva primitiva
  • 13. EJERCICIOS: Demostrar que las siguientes funciones son RP • [RPC1] fv(w) = v • [RPC2] start(v) // start(“ab”)=“a”, start(0) = 0 • [RPC3] fin(v) // end(“ab”)=“b”, end(0)=0 • [RPC4] cuentaσ(v) // cuentaa(“abbaba”)=“aaa” • [RPC5] concatena(v, w) • [RPC6] invierte(v) • [RPC7] esPalíndrome(v) • [RPC8] esVacía(v)
  • 14. EJERCICIOS: Demostrar que las siguientes funciones son RP • [RPC9] iguales(v, w) • [RPC10] contiene(v, w) // contiene(“abcba”, “bcb”) = “a” // contiene(“abcba”, “bab”) = 0 • [RPC11] sustituye(u, v, w) • [RPC12] longitud(v) // longitud(“abc”) = “aaa”
  • 15. Funciones recursivas primitivas: Suma recursiva • Suponemos que f(n) es recursiva primitiva • g(m) = f(0) + f(1) + … + f(m) – g(0) = 0 – g(m+1) = suma(g(m), f(s(m)) = h(g(m),m) donde h(x,y) = suma(x,f(s(y)) es primitiva recursiva, luego g también lo es.
  • 16. Ejercicios • Suponemos que f(m) es recursiva primitiva. Demostrar que las siguientes funciones también lo son: [RPA1], [RPA2], [RPA3], [RPA4] – g(m,x) = min(f(0), f(1), …, f(m)) – g(m,x) = f(f(…f(f(x))…)) // m concatenaciones de f – g(x) = 1 si ∃m≤x, f(m)=0, y g(x) = 0 en caso contrario – g(x) = 1 si ∀m≤x, f(m)=0, y g(x) = 0 en caso contrario
  • 17. Totalidad y computabilidad de la función de Ackerman • F(i,x) = (i=0) ? x+1 : ((x=0) ? F(i-1,1) : F(i-1,F(i,x-1))) • Es total • Es computable • Sin embargo, no es recursiva primitiva: – Fj(x) = F(j, x) = Fj-1(Fj-1(…(Fj-1(0)…)) – Fx(x) crece más rápido que cualquier función de la sucesión f0(x)=x+1, fj+1(x)=fj(fj(…(fj(0)…)) – Las funciones R.P. crecen como alguna de las funciones anteriores
  • 18. Formas de definición de las funciones recursivas • Definición usual: Aplicar la definición repetidamente, utilizando una pila de cálculos parciales, hasta que se llegue al resultado • Ejemplo: Para la función de Ackerman, F(1,1) = F(0,F(1,0)) = F(0,F(0,0)) = F(0,1) = 2
  • 19. Formas de definición de las funciones recursivas, II • Forma rigurosa (aunque teórica): • Definir F sobre un primer dominio, D0, donde se puede calcular directamente – Ejemplo: Para la función de Ackerman, D0={(i,x)|i=0}, en cuyo caso f0(i,x)=x+1 • Definir F sobre un dominio Dj+1 si su cálculo se puede reducir al de F sobre Dj – Ejemplo: D1=D0 {(i,x) | x=0}; f∪ 1(i,x) = … – D2=D1 {(1,1)}; f∪ 2(i,x) = …, etc
  • 20. Formas de definición de las funciones recursivas, III • Interpretación de la forma anterior: punto fijo de un operador – P(f)(x) = (i=0) ? x+1 : ((x=0) ? f(i-1,1) : f(i-1,f(i,x-1))) – P(f0) = f1 – P(f1) = f2 – … – F es un punto fijo de P: P(F) = F
  • 21. EJERCICIOS • [REC 1] Calcular el dominio y los valores de las imágenes de las funciones f y g definidas mediante – f(x,y) = 2.f(y, 2.x) – g(x) = (x < 5) ? f(x, x) : ((x = 5) ? 1 : x*g(x-1)) • [REC 2] Calcular el dominio y los valores de las imágenes de la función h definida mediante h(x, y) = (x = 0) ? 1 : h(x – 1, h(|x – y|, y))
  • 22. Funciones recursivas: Minimización • Si f(x,y) es una función recursiva, entonces g(x) = min { y | f(x,y) ≠ 0 } define otra función recursiva – Demostración: Definimos gaux(x, z) = min { y | f(x, z+y) ≠ 0 } entonces – gaux(x, z) = (f(x, z) ≠ 0) ? 0 : 1 + gaux(x, z+1) – g(x) = gaux(x,0)
  • 23. EJERCICIOS • Suponiendo que la función f(x,y) sea recursiva, demostrar que también lo es la función g(x) cuyo valor es la suma f(x,0) + f(x,1) + … + f(x,n) donde n se elije de manera que los sumandos sean diferentes de 0 y f(x,n+1)=0.
  • 24. Ejemplo de funciones recursivas: Máquinas de Turing • Dada una máquina de Turing determinista M, la función transita(x, y), donde x e y son estados instantáneos de ejecución de M, que vale “a” si la máquina M lleva la cinta del estado x al y y ↑ en caso contrario, es recursiva (pero no recursiva primitiva)
  • 25. Ejemplo de funciones recursivas: Máquinas de Turing, II • Demostración: transita(x, y) = esEstado(x) & esEstado(y) & & ((x=y) ? “a” : transita(aplicaRegla(x), y)) • La función aplicaRegla(x) devuelve el resultado de aplicar una regla de transición de M a partir del estado de ejecución x; si no se puede, devuelve x. • EJERCICIO: [MT REC] Demostrar que las funciones esEstado(x) y aplicaRegla(x) son recursivas primitivas.
  • 26. Ejemplo de funciones recursivas: Máquinas de Turing, III • Dada una máquina de Turing determinista M, la función ejecuta(x, y), donde x, y∈Σ* , que devuelve el estado instantáneo de ejecución de M a partir de y después de | x| transiciones, es recursiva primitiva. • Demostración: ejecuta(λ, y) = Sq º (y) ejecuta(Sσ(x), y) = aplicaRegla(ejecuta(x, y))
  • 27. Ejemplo de funciones recursivas: Máquinas de Turing, IV • Dada una máquina de Turing determinista M, la función produce(x), que a cada cadena x le hace corresponder el contenido de la cinta cuando M se para a partir de x es recursiva (pero puede no ser recursiva primitiva) • Demostración: produce(x) = quitaEstado(ejecuta(x,miny(para(ejecuta(x, y))))) • Observación: miny se puede definir en este caso de forma análoga a como se hace con números.
  • 28. Forma normal de funciones recursivas • Todas las funciones recursivas se pueden escribir en la forma f(x) = p(miny(q(x, y))) donde p y q son funciones recursivas primitivas. • Las funciones p y q se pueden elegir de manera que p simplemente elimine el contenido de la cinta previo a un separador.
  • 29. Forma normal: programas • La construcción anterior también se puede hacer con programas en lugar de máquinas de Turing: a partir de cualquier programa podemos construir otro equivalente que incorpora un contador y emula al primero paso a paso y cuando el inicial se para sigue ejecutándose sin hacer nada y guardando en una variable booleana fin la información de que el programa emulado ha terminado.
  • 30. Forma normal: programas, II • El cálculo del programa inicial se puede realizar buscando el valor mínimo del contador del programa emulador para el cual la variable fin es cierto, y devolviendo la variable que contiene el valor del programa emulado.
  • 31. Ejemplo de funciones recursivas: Máquinas de Turing, V • Si una máquina de Turing tiene una definición mediante submáquinas que es recursiva, la función que define sobre cadenas de caracteres es recursiva. • Como consecuencia de lo anterior, las máquinas de Turing definidas recursivamente mediante submáquinas no proporcionan un mecanismo de computación más potente que las máquinas de Turing simples.
  • 32. Ejemplo de funciones recursivas: Máquinas de Turing, VI • La demostración de la afirmación anterior se basa en la función FM(q, u, x, v), que da el estado final de ejecución (q’, u’, x’, v’) calculado por la máquina a partir del estado q con la palabra uxv sobre la cinta, apuntando a la x. Su definición es FM(q, u, x, v) = FM(q’, Π234(FN(q, u, x, v))) donde N es la submáquina correspondiente a la transición. Esto da lugar a una definición recursiva de las funciones FM. • Si la submáquina es indeterminista, se demuestra de manera análoga utilizando conjuntos de estados en lugar de estados.
  • 33. Qué funciones son recursivas? • Todas las calculables • Es consecuencia de lo anterior • También es consecuencia de la construcción de una máquina universal que emula máquinas de Turing con submáquinas recursivas
  • 34. Qué funciones son recursivas?, II • Las que se obtienen a partir de las recursivas primitivas básicas mediante composición, recursión primitiva y minimización • Es consecuencia de lo anterior