next up previous contents
Siguiente: Construcción de virus Un nivel arriba: Virus en programas-while Anterior: Matrices infinitas

Teoremas de recursión

Una función $g:I\!\!N\rightarrow I\!\!N$ se dice ser extensional si $\forall i,j:\ \ [f_i=f_j\ \Rightarrow\ f_{g(i)}=f_{g(j)}].$

Ejemplos 1. Cualquier función constante es extensional. 2. Sea g la función construída como sigue: Dado i, calculamos el i-ésimo programa

\begin{displaymath}P_i=P_i(X_0, X_1, X_2, X_3,X_4, X_5,X_6, X_7, \ldots).\end{displaymath}

g(i) será el código del programa obtenido al ``instanciar'' las primeras tres variables por los valores consecutivos 1,2,3 y renombrar las demás variables:

\begin{displaymath}g(i)=\lceil P_i(X_0\leftarrow 1, X_1\leftarrow 2, X_2\leftarrow 3, X_0\leftarrow X_3,X_1\leftarrow X_4, \ldots)\rceil.\end{displaymath}

Es evidente que g es extensional. 3. La función sucesor no es extensional: Si Pi y Pj son dos programas que calculan una misma función, no necesariamente Pi+1 y Pj+1 han de calcular una misma función.


Observación 6.1   Toda función extensional g define un operador entre funciones recursivas:

\begin{eqnarray*}\Gamma_g:\{\mbox{\rm recursivas}\} &\rightarrow& \{\mbox{\rm recursivas}\} \\
f_i&\mapsto& \Gamma_g(f_i)=f_{g(i)}
\end{eqnarray*}


Teorema 6.1 (Débil de Recursión)   Si g es extensional entonces $\Gamma_g$ posee un punto fijo.

Demostración: Sea M la siguiente matriz consistente de funciones recursivas, $\forall i,j:\ \ m_{ij}=f_{f_i(j)}.$ Si $f_i(j)=\perp$ entonces la función ffi(j) coincidirá con la función divergente en todo punto: $\perp:x\mapsto \perp$. M es efectivamente computable. De hecho, dados i,j procedamos como sigue:
1.
con Rep calculamos Pi,
2.
con eval calculamos k=Pi(j),
3.
tras calcular k, con Rep calculamos Pk.
Sea PM el programa-while que implementa el procedimiento anterior. Entonces PM(i,j)=mij. M es diagonalmente completa: Sea Q tal que Q(j)=PM(j,j). Q es evidentemente ``realizable'' como un programa-while y consecuentemente $\exists i_d:P_{i_d}=Q$. Así pues

midj=Pid(j)=Q(j)=PM(j,j)=mjj.

M es cerrado por renglones bajo $\Gamma_g$: Dado i sea PM,i;g el programa tal que $\forall j: P^{M,i;g}(j)=P^M(g(i),j)$. Existe entonces $h(i)\in I\!\!N$ tal que Ph(i)=PM,i;g. Entonces para cualquier j se tiene

\begin{displaymath}m_{h(i)j}=P_{h(i)}(j)=P^{M,i;g}(j)=P^M(g(i),j)=m_{g(i),j}=\Gamma_g(m_{ij}).\end{displaymath}

Del Lema Diagonal de Punto Fijo se sigue que $\Gamma_g$ posee un punto fijo.


Teorema 6.2 (De Recursión)   Si g es cualquier función recursiva entonces $\Gamma_g$ posee un punto fijo, es decir $\exists k:\ f_k=f_{g(k)}.$

Demostración: Dados i1,i2 diremos que fi1 se relaciona con fi2 según g, $f_{i_1}\stackrel{g}{\leadsto}f_{i_2}$, si existe k tal que

\begin{displaymath}\begin{array}{ccc} f_k=f_{i_1} &\& & f_{g(k)}=f_{i_2}. \end{array}\end{displaymath}

Se tiene que $\forall i_1\exists i_2:f_{i_1}\stackrel{g}{\leadsto}f_{i_2}$. Como M es además diagonalmente completa tenemos que algún elemento en su diagonal mii se relaciona consigo mismo. Así pues existe k tal que fk=mii=fg(k).
next up previous contents
Siguiente: Construcción de virus Un nivel arriba: Virus en programas-while Anterior: Matrices infinitas
Guillermo Morales-Luna
2000-07-10