3.4 Algunos constructores que preservan computabilidad efectiva

Hay muchos procesos constructivos que nos sirven para definir o construir una funcion en terminos de otras funciones dadas. Un ejemplo de esto es la composicion de funciones, la cual dadas dos funciones f,g nos permite construir su composicion, a saber fg. Otro ejemplo es el contructor de predicados que dados dos predicados Σ-mixtos P:Sωn×Σm{0,1} y Q:Sωn×Σm{0,1}, con el mismo dominio, nos define el predicado (PQ):Sω(x,α){1si P(x,α)=1 o Q(x,α)=10caso contrario Otro constructor muy importante que utilizaremos mucho es aquel que a partir de funciones fi:DfiO, i=1,...,k, tales que DfiDfj= para ij, nos define la nueva funcion f1...fk, la cual cumple Df1...DfkOe{f1(e)si eDf1fk(e)si eDfk Veremos a continuacion que estos constructores preservan la computabilidad efectiva en el sentido que si las funciones iniciales son Σ-efectivamente computables, entonces la construida tambien lo es.

3.9. Si P:Sωn×Σmω y Q:Sωn×Σmω son predicados Σ-efectivamente computables, entonces (PQ), (PQ) y ¬P lo son tambien.

3.4.1 Composicion

Dadas funciones Σ-mixtas f,f1,...,fr, con r1, diremos que la funcion f[f1,...,fr] es obtenida por composicion a partir de las funciones f,f1,...,fr. Para probar que la composicion preserva la computabilidad efectiva necesitaremos el siguiente lema.

3.10. Supongamos que f,f1,...,fr son funciones Σ-mixtas, con r1. Supongamos ademas que f[f1,...,fr]. Entonces hay n,m,k,lω y s{#,} tales que

  1. - r=n+m

  2. - f es de tipo (n,m,s)

  3. - fi es de tipo (k,l,#), para cada i=1,...,n

  4. - fi es de tipo (k,l,), para cada i=n+1,...,n+m

Mas aun, en tal caso la funcion f[f1,...,fn+m] es de tipo (k,l,s) y: Df[f1,...,fn+m]={(x,α)i=1n+mDfi:(f1(x,α),...,fn+m(x,α))Df}f[f1,...,fn+m](x,α)=f(f1(x,α),...,fn+m(x,α)).

Proof. Notese que f y [f1,...,fr] (por que?). Ya que f tenemos que hay unicos n,mω y s{#,} tales que f es de tipo (n,m,s). Ya que f[f1,...,fr] y I[f1,...,fr]If1×...×Ifr, tenemos que

  1. - r=n+m

  2. - Ifiω, para cada i=1,...,n

  3. - IfiΣ, para cada i=n+1,...,n+m

Ya que [f1,...,fr] tenemos que D[f1,...,fr]=i=1rDfi, por lo cual los conjuntos Df1,...,Dfn+m deberan ser todos de un mismo tipo, digamos de tipo (k,l). Es decir que fi es de tipo (k,l,#), para cada i=1,...,n y fi es de tipo (k,l,), para cada i=n+1,...,n+m.

Las ultimas observaciones del lema son directas de las definiciones de [f1,...,fn+m] y de composicion de funciones  


Ahora si podemos probar facilmente que se preserva la computabilidad efectiva cuando componemos

3.11. Si f,f1,...,fr, con r1, son Σ-efectivamente computables, entonces f[f1,...,fr] lo es.

Proof. Si f[f1,...,fr]=, entonces claramente es Σ-efectivamente computable. Supongamos entonces que f[f1,...,fr]. Por el lema anterior hay n,m,k,lω y s{#,} tales que

  1. - r=n+m

  2. - f es de tipo (n,m,s)

  3. - fi es de tipo (k,l,#), para cada i=1,...,n

  4. - fi es de tipo (k,l,), para cada i=n+1,...,n+m

Sean P,P1,...,Pn+m procedimientos efectivos los cuales computen las funciones f,f1,...,fn+m, respectivamente. Usando estos procedimientos es facil definir un procedimiento efectivo el cual compute a f[f1,...,fn+m].  


3.4.2 Lema de division por casos para funciones Σ-efectivamente computables

Recordemos que si fi:DfiO, i=1,...,k, son funciones tales que DfiDfj= para ij, entonces f1...fk es la funcion Df1...DfkOe{f1(e)si eDf1fk(e)si eDfk

3.12. Sean n,mω y O{ω,Σ}. Supongamos fi:Dfiωn×ΣmO, i=1,...,k, son funciones Σ-efectivamente computables tales que DfiDfj= para ij. Entonces f1...fk es Σ-efectivamente computable.

Proof. Haremos el caso O=Σ y k=2. Sean P1 y P2 procedimientos efectivos que computen a f1 y f2, respectivamente. Sea P el procedimiento efectivo siguiente:

- Conjunto de datos de entrada de P igual a ωn×Σm

- Conjunto de datos de salida de P contenido en Σ

- Funcionamiento:

Etapa 1

Hacer T=1

Etapa 2

Correr el procedimiento P1 una cantidad T de pasos. En caso de que termine guardar la salida en la variable X e ir a Etapa 5. Si no termina ir a Etapa 3.

Etapa 3

Correr el procedimiento P2 una cantidad T de pasos. En caso de que termine guardar la salida en la variable X e ir a Etapa 6. Si no termina ir a Etapa 4.

Etapa 4

Hacer T=T+1 e ir a Etapa 2

Etapa 5

Dar como salida el contenido de X y terminar.

Dejamos al lector corroborar que el procedimiento P computa a la funcion f1f2.