tema 5: programas universales · 2006. 11. 29. · tema 5: programas universales dpto. ciencias de...

35
Tema 5: Programas Universales Dpto. Ciencias de la Computaci´ on e Inteligencia Artificial Universidad de Sevilla ogica y Computabilidad Curso 2006–07 LC, 2006–07 Programas universales 5.1

Upload: others

Post on 30-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

  • Tema 5:Programas Universales

    Dpto. Ciencias de la Computación e Inteligencia ArtificialUniversidad de Sevilla

    Lógica y ComputabilidadCurso 2006–07

    LC, 2006–07 Programas universales 5.1

  • Procedimientos de definición

    I Estudiaremos procedimientos para definir funciones, que nospermitan obtener nuevas funciones computables a partir deotras funciones computables ya conocidas.

    I Es deseable que estos procedimientos de definición permitanobtener todas las funciones GOTO–computables a partir dealgunas funciones básicas cuya computabilidad seaindiscutible.

    I Esto nos proporcionará, más adelante, una caracterización delas funciones GOTO-computables independiente de todomodelo de computación particular.

    I Consideramos tres procedimientos básicos:I Composición.I Recursión primitiva.I µ–recursión (o minimización).

    LC, 2006–07 Programas universales 5.2

  • Composición

    Composición:Dadas g : Nn− −→ N, h1, .., hn : Nm− −→ N, decimos quef : Nm− −→ N es la composición de g y h1, . . . , hn, si

    Para todo ~x ∈ Nm, f (~x) = g(h1(~x), . . . , hn(~x))

    Usamos como notación f = C(g ; h1, . . . , hn).Lema. GCOMP es cerrado bajo composición:

    I En efecto, sean g : Nn− −→ N, h1, ..., hn : Nm− −→ NG-computables.El siguiente programa calcula f = C(g ; h1, ..., hn):

    Z1 ←− h1(X1, ...,Xm)...

    Zn ←− hn(X1, ...,Xm)Y ←− g(Z1, ...,Zn)

    LC, 2006–07 Programas universales 5.3

  • Recursión primitiva (I)

    Recursión Primitiva:

    Dadas g : Nm− −→ N, h : Nm+2− −→ N, decimos quef : Nm+1− −→ N se define por recursión primitiva a partir de g yh (y escribimos f = R(g , h)), si

    Para todo ~x ∈ Nm, y ∈ N{

    f (~x , 0) = g(~x)f (~x , y + 1) = h(~x , y , f (~x , y))

    I Esta definición se extiende al caso m = 0:{f (0) = kf (x + 1) = h(x , f (x))

    donde k ∈ N. En este caso escribimos: f = R(k, h), ydiremos que f se obtiene por recursión primitiva a partir de laconstante k y de h.

    LC, 2006–07 Programas universales 5.4

  • Recursión primitiva (II)

    Lema. GCOMP es cerrado bajo recursión primitiva:

    I En efecto, sean g : Nm− −→ N, h : Nm+2− −→ NG-computables.El siguiente programa calcula f = R(g ; h):

    Y ←− g(X1, ...,Xm)[A] IF Xm+1 = 0 GOTO E

    Y ←− h(X1, ...,Xm,Z ,Y )Z ←− Z + 1Xm+1 ←− Xm+1 − 1GOTO A

    LC, 2006–07 Programas universales 5.5

  • µ–recursión (I)

    µ-recursión.

    Sea f : Nn+1− −→ N, (n ≥ 1). La función definida porµ–recursión a partir de f es la función fµ : Nn− −→ N dada por

    fµ(~x) =

    {min{y : f (~x , y) = 0 ∧ ∀z < y (f (~x , z) ↓)} si existe↑ e.o.c .

    I Nota. Usualmente escribiremos: µy(f (~x , y) = 0).

    Lema. GCOMP es cerrada bajo µ–recursión.

    I En efecto, sea f : Nn+1− −→ N, (n ≥ 1), GOTO–computable.El siguiente programa calcula fµ:

    [A] Z ←− f (X1, ...,Xn,Y )IF Z = 0 GOTO EY ←− Y + 1GOTO A

    LC, 2006–07 Programas universales 5.6

  • µ–recursión (II)

    I Si θ es un predicado n + 1-ario, definimos:

    θµ(~x) ≡ µy(θ(~x , y)) ={

    min{y : θ(~x , y)} si existe el minimo↑ e.c .o.c .

    Lema. θ ∈ GCOMP =⇒ µy(θ(~x , y)) ∈ GCOMPObservaciones:

    I La µ–recursión permite obtener funciones que no son totalesaunque las de partida śı lo sean.

    I Ejemplo. Sea f : N2 → N la función GOTO-computable

    f (x , y) =

    {1 si x = 00 e.o.c.

    Entonces, fµ(x) = (µy)(f (x , y) = 0) =

    {0 si x 6= 0↑ si x = 0

    LC, 2006–07 Programas universales 5.7

  • Funciones básicas

    Llamaremos funciones básicas a las siguientes funciones:

    I Siguiente: S : N −→ N; S(x) = x + 1I Idénticamente nula: O : N −→ N; O(x) = 0I Proyecciones: Para cada i , n ∈ N (1 ≤ i ≤ n),∏n

    i : N −→ N;∏n

    i (x1, . . . , xn) = xi

    Lema. Las funciones básicas son G-computables:

    I Siguiente, S :{

    X ←− X + 1Y ←− X

    I Nula, O : Programa vaćıo, p∅I Proyecciones,

    ∏(n)j : Y ←− Xj

    LC, 2006–07 Programas universales 5.8

  • Ejemplos (I)

    Las siguientes funciones son GOTO–computables:

    I La función identidad IN : N −→ NI Las funciones constantes: Cna : Nn −→ N, Cna (~x) = aI La función predecesor: pr : N −→ N

    pr(x) =

    {0 si x = 0

    x − 1 si x > 0

    I La función diferencia reducida:•− : N2 −→ N

    x•− y =

    {0 si x ≤ y

    x − y e.c .o.c .

    I La función signo: sg : N −→ N

    sg(x) =

    {0 si x = 01 e.c .o.c .

    LC, 2006–07 Programas universales 5.9

  • Ejemplos (II)

    Las siguientes funciones son GOTO–computables:

    I La función signo inverso:−sg : N −→ N

    −sg (x) = 1

    •− sg(x)

    I La función suma: + : N2 −→ N+(x , y) = x + y

    I La función producto: · : N2 −→ N·(x , y) = x ·y

    I La función ḿınimo: min : N2 −→ N

    min(x , y) =

    {x si x ≤ yy e.c .o.c .

    I La función máximo: max : N2 −→ N

    max(x , y) =

    {x si x ≥ yy e.c .o.c .

    LC, 2006–07 Programas universales 5.10

  • Ejemplos (III)

    I La función distancia: || : N2 −→ N

    |x − y | ={

    x − y si x ≥ yy − x e.c .o.c .

    I La función exponencial: exp : N2 −→ N

    exp(x , y) =

    {1 si x = 0 ∧ y = 0xy e.c .o.c .

    I La función factorial: fact : N −→ N

    fact(x) =

    1 si x = 0∏1≤j≤x

    j e.c .o.c .

    LC, 2006–07 Programas universales 5.11

  • Predicados GOTO–computables

    I Un predicado sobre N GOTO–computable si la función quelo define es GOTO–computable.

    I Un conjunto A ⊆ Nn es GOTO–computable si su funcióncaracteŕıstica, CA, es GOTO–computable.

    Ejemplos:

    I Los conjuntos ∅ y Nn son GOTO–computables.I Los predicados: θ1(x , y) ≡ x = y ; θ2(x , y) ≡ x ≤ y ;

    θ3(x , y) ≡ x < y son GOTO–computables.I Dada f : Nn −→ N; f ∈ GCOMP, los predicados (n + 1)-arios

    siguientes son GOTO–computables:

    θ(~x , y) ≡ f (~x) = y ; θ′(~x , y) ≡ f (~x) ≤ y ; θ′′(~x , y) ≡ f (~x) < y .

    LC, 2006–07 Programas universales 5.12

  • Operaciones con conjuntos y predicados

    Proposición. Sean θ, θ′ predicados sobre N, n–arios yGOTO–computables entonces ¬θ, θ ∧ θ′, θ ∨ θ′, θ ⇒ θ′ y θ ⇔ θ′son predicados GOTO–computables.

    I ¬θ(~x) = sg(θ(~x)).I (θ ∧ θ′)(~x) = θ(~x)·θ′(~x)I (θ ∨ θ′)(~x) = sg(θ(~x) + θ′(~x))I θ ⇒ θ′ ≡ ¬θ ∨ θ′.I θ ⇔ θ′ ≡ θ ⇒ θ′ ∧ θ′ ⇒ θ

    Corolario. Si A,B ⊆ Nn son conjuntos GOTO–computables,entonces: Nn − A; A ∩ B; A ∪ B son GOTO–computables.

    I CNn−A = ¬CA;I CA∩B = CA ∧ CB ;I CA∪B = CA ∨ CB

    LC, 2006–07 Programas universales 5.13

  • Definiciones por casos

    Proposición. Sean k ≥ 2 y f1, . . . , fk : Nn −→ N funcionesGOTO–computables totales. Sea {A1, . . . ,Ak} una partición deNn en conjuntos GOTO–computables, es decir,

    Nn =⋃k

    i=1 Ai y ∀i , j = 1, . . . , k, i 6= j ⇒ Ai ∩ Aj = ∅Entonces, la función g : Nn −→ N definida por

    g(~x) =

    f1(~x) si ~x ∈ A1

    ......

    ...fk(~x) si ~x ∈ Ak

    es GOTO–computable (y total).

    I Basta observar que g = f1·CA1 + . . .+ fk ·CAk está en GCOMP.I La proposición anterior puede expresarse con predicados

    GOTO–computables θ1, . . . , θk , que sean exhaustivos yexcluyentes, es decir, tales que, para todo ~x ∈ Nn:

    θ1(~x) + . . . + θk(~x) = 1LC, 2006–07 Programas universales 5.14

  • Suma y producto acotados

    Sea f : Nn+1 −→ N total. Definimos:I Suma acotada:

    ∑f (~x , y) =

    ∑z≤y

    f (~x , z)

    I Producto acotado:∏

    f (~x , y) =∏z≤y

    f (~x , z)

    Proposición. Si f ∈ GCOMP(n+1) entonces∑f ,

    ∏f ∈ GCOMP(n+1).

    Observaciones:

    1. En vez de la última variable, podŕıa utilizarse cualquier otracomo cota de la suma o del producto.

    2. Para n = 0:∑

    f (y) =∑

    z≤y f (z) y∏

    f (y) =∏

    z≤y f (z).

    Corolario. Si f : Nn+1 −→ N; g : Nn+k −→ N están en GCOMP,entonces F1,F2 ∈ GCOMP, siendo F1,F2 : Nn+k −→ N,

    F1(~x , ~y) =∑

    z≤g(~x ,~y)

    f (~x , z); F2(~x , ~y) =∏

    z≤g(~x ,~y)

    f (~x , z)

    LC, 2006–07 Programas universales 5.15

  • Cuantificación acotada

    Proposición. Sea θ ∈ GCOMP un predicado n+1-ario. Lossiguientes predicados son GOTO–computables:

    θ1(~x , y) ≡ ∀z ≤ y θ(~x , z); θ2(~x , y) ≡ ∃z ≤ y θ(~x , z)

    I En efecto:

    θ1(~x , y) =∏z≤y

    θ(~x , z); θ2(~x , y) = sg(∑z≤y

    θ(~x , z))

    Ejemplos. Los siguientes predicados son GOTO–computables:I Predicado de divisibilidad, x |y :

    θ(x , y) ≡ ∃z ≤ y(y = z · x)

    I Predicado de primalidad:

    primo(x) ≡ (x > 1) ∧ ∀t ≤ x((t|x)→ (t = 1 ∨ t = x))

    LC, 2006–07 Programas universales 5.16

  • Minimización acotada (I)

    Definición. Sea θ(~x , y) un predicado (n + 1)–ario. Definimos lafunción θ∗µ : Nn+1 → N, aśı:

    θ∗µ(~x , y) =

    {min{z ≤ y : θ(~x , z)} si existe tal ḿınimoy + 1 e.c.o.c.

    I Usualmente escribiremos: (µz)≤y (θ(~x , z))y diremos que θ∗µ se obtiene de θ por minimización acotada.

    Definición. Sea f (~x , y) una función (n + 1)–aria. Definimos lafunción de aridad n + 1, f ∗µ , aśı:

    f ∗µ (~x , y) = (µz)≤y (f (~x , z) = 0)

    I Decimos que f ∗µ se obtiene de f por minimización acotada.

    Proposición.I Si θ ∈ GCOMP(n+1) entonces θ∗µ ∈ GCOMP(n+1).I Si f ∈ GCOMP(n+1) entonces f ∗µ ∈ GCOMP(n+1).

    LC, 2006–07 Programas universales 5.17

  • Minimización acotada (II)

    Ejemplos.I Las funciones cociente y resto:

    qt(x , y) =

    {(µt)≤x (x < (t + 1) · y) si y 6= 00 en otro caso

    rm(x , y) =

    {x•− (y · qt(x , y)) si y 6= 0

    0 si y = 0

    I La sucesión de números primos.Sea p : N→ N la función tal que p(0) = 0 y para todo n ≥ 1,p(n) = pn es el n–ésimo primo.

    I Lema. ∀n (pn+1 ≤ 1 + pn!).Por tanto, 1 + p(x)! es una cota para p(x + 1) y tenemos:{

    p(0) = 0p(x + 1) = (µy)≤(1+p(x)!) (y > p(x) ∧ primo(y))

    Luego p ∈ GCOMP.LC, 2006–07 Programas universales 5.18

  • Codificación de sucesiones finitas

    Definición. Una codificación de Nn a partir de N, es una funcióntotal f : Nn −→ N que verifica:

    1. f es PR e inyectiva.2. Para cada i , 1 ≤ i ≤ n, la función total, gi : N −→ N:

    gi (x) =

    {ai si x ∈ rang(f ) ∧ x = f (a1, ..., an)0 e.c .o.c .

    es GCOMP.

    Sea, ahora, N′ = {ε} ∪ N∗ = {ε} ∪ N ∪ N2 ∪ ... ∪ Nk ...,donde ε es la sucesión vaćıa (de longitud 0).Definición. Una función f : N′ −→ N, codifica N′ a partir de N,si:

    I f es total.

    I ∀n ≥ 1, f � Nn es una codificación de Nn, a partir de N.

    LC, 2006–07 Programas universales 5.19

  • La función par

    La función par es la función total 〈· , ·〉 : N2 −→ N definida por

    〈x , y〉 = 2x · (2y + 1)•− 1

    I La función par es GCOMP y biyectiva.I Para todo x y para todo y se verifica:

    x ≤ 〈x , y〉, y ≤ 〈x , y〉I Existen l , r : N −→ N tales que si z = 〈x , y〉 ,

    l(z) = x ; r(z) = y z = 〈l(z), r(z)〉

    l y r son funciones decodificadoras de 〈 ·, ·〉.I Las funciones l , r son GCOMP(1)

    Nota. Usando la función par podemos codificar N3 a partir de N:

    (x , y , z) −→ 〈x , 〈y , z〉〉

    Y, en general, Nk a partir de N.LC, 2006–07 Programas universales 5.20

  • Números de Gödel

    Sea {pn : n ≥ 1} la sucesión de números primos y [ · · · ] : N′ −→ Nla función definida aśı:{

    [ε] = 1[a1, ..., an] = p

    a11 ...p

    ann

    Diremos que [a1, ..., an] es el número de Gödel de la sucesiónfinita a1, ..., an.

    Propiedades:

    I La función [ · · · ] codifica N′ a partir de N.I La función [ · · · ] no es inyectiva.I rang( [ · · · ])= N− {0}.I Cada número natural codifica infinitas sucesiones.

    I Para todo i , 1 ≤ i ≤ n se verifica: ai ≤ [a1, ..., an].

    LC, 2006–07 Programas universales 5.21

  • Las funciones componente y longitud

    Lema. Si x ∈ N−{0, 1} existen unos únicos a1, ..., an ∈ N, an 6= 0,tales que x = [a1, ..., an].

    I Si i ∈ {1, ..., n} el número ai es la componente i–ésima de x .Escribiremos (x)i = ai .

    I Si i /∈ {1, ..., n} entonces será: (x)i = 0.Definición. Denominaremos función componente a la función:( · )· : N2 −→ N , definida aśı:

    (x)i =

    (µt)≤x (¬(pt+1i |x)) si x 6= 0

    0 si x = 0

    Definición. Definimos la función longitud, Long : N −→ N, aśı:

    Long(x) =

    (µi)≤x ((x)i 6= 0 ∧ ∀j ≤ x (j > i → (x)j = 0)) si x 6= 0, 1

    0 si x = 0, 1

    I Las funciones componente y longitud son GCOMP.LC, 2006–07 Programas universales 5.22

  • Codificación

    I Nuestro siguiente objetivo es probar la existencia deprogramas universales, es decir, programas GOTO capaces desimular al ejecución de cualquier otro programa GOTO.

    I Para ello será necesario manejar programas de maneraefectiva, es decir, manejar los programas mediante programas.

    I Esto requiere la codificación de programas mediantenúmeros.

    I Codificaremos las instrucciones GOTO utilizando la funciónpar 〈 〉.

    I Codificaremos los programas GOTO mediante la función deGödel [ · ], usando la codificación de instrucciones previa.

    LC, 2006–07 Programas universales 5.23

  • Codificación de las Instrucciones (I)

    Una instrucción consta básicamente de tres elementos:

    I Etiqueta,

    I Variable, y

    I Formato (o tipo) de la instrucción.

    Codificación de las etiquetas:Ordenamos las etiquetas: A1,B1,C1,D1,E1,A2, ...,E2,A3, ...E3, . . .Asignamos un número a cada etiqueta como sigue:

    (k ≥ 1) :

    #(Ak) = 5(k − 1) + 1#(Bk) = 5(k − 1) + 2#(Ck) = 5(k − 1) + 3#(Dk) = 5(k − 1) + 4#(Ek) = 5k

    LC, 2006–07 Programas universales 5.24

  • Codificación de las Instrucciones (II)

    Codificación de las variables:Ordenamos las variables: Y ,X1,Z1,X2,Z2, · · · y asignamos unnúmero a cada variable según este orden:

    #(Y ) = 1#(Xk) = 2k (k ≥ 1)#(Zk) = 2k + 1 (k ≥ 1)

    Codificación del Formato:0 si el formato es V ←− V1 si el formato es V ←− V + 12 si el formato es V ←− V − 1#(L) + 2 si el formato es IF V 6= 0 GOTO L

    LC, 2006–07 Programas universales 5.25

  • Codificación de las Instrucciones (III)

    Definición. Sea I una instrucción GOTO. Definimos su código#(I ) como:

    #(I ) = 〈a, 〈b, c〉〉en donde:

    a =

    {0 si I no tiene etiqueta#(L) si I tiene etiqueta L

    b = Código del formato de I0 si formato V ←− V1 si formato V ←− V + 12 si formato V ←− V − 1#(L) + 2 si formato IF V 6= 0 GOTO L

    c = #(V )− 1 si V es la variable de I .I Todo n ∈ N codifica una única instrucción.

    LC, 2006–07 Programas universales 5.26

  • Codificación de los Programas

    Sea P = (I1, I2, . . . , In). Definimos:

    #(P) = [#(I1),#(I2), . . . ,#(In)]− 1

    Si P∅ es el programa vaćıo, #(P∅) = [ε]− 1 = 0

    Observaciones:

    I Puesto que #(Y ←− Y ) = 〈0, 〈0, 0〉〉 = 0 y[a1, ..., an] = [a1, ..., an, 0, ..0], se tiene:

    [#(I1), ...,#(In)] = [#(I1), ...,#(In),#(Y ←− Y ), ...,#(Y ←− Y )]

    y, por tanto, la codificación no seŕıa inyectiva si los programasGOTO pudiesen terminar con la instrucción Y ←− Y . Poreso no se permite que dicha instrucción sea la última.

    I Lema. Todo n ∈ N codifica un único programa GOTO.

    LC, 2006–07 Programas universales 5.27

  • Codificación de las d.i.

    Para describir la computación de P sobre ~x codificaremosnuméricamente las descripciones instantáneas.

    Codificación de descripciones instantáneas.

    I Estados: Dado el estado σ = {V1 = r1,V2 = r2, ...,Vn = rn},con #(Vi ) = i , definimos el código de σ aśı:

    #(σ) = [r1, ..., rn]

    I Descripciones instantáneas: Sea (i , σ) una d.i. Definimossu código como:

    #(i , σ) = 〈i ,#(σ)〉

    LC, 2006–07 Programas universales 5.28

  • Programas universales

    Sean P ∈ GOTO y ~x ∈ Nn. ¿Es computable la función:

    (~x ,#(P))→ [[P]](n)(~x)?

    Un programa que calcule esta función se denomina programauniversal. Si fijamos la aridad y designamos por Un a dichoprograma, tendremos:

    [[Un]](n+1)(~x ,#(P)) = [[P]](n)(~x)

    Esencialmente, un programa universal es un intérprete de GOTO,que simula la ejecución del programa P sobre la tupla ~x que recibecomo entrada.

    Notación: Un = [[Un]](n+1).Teorema. Para cada n ≥ 1, existe un programa Un tal que paratodo ~x ∈ Nn y todo programa GOTO, P, se tiene

    [[Un]](n+1)(~x ,#(P)) = [[P]](n)(~x)

    LC, 2006–07 Programas universales 5.29

  • El programa universal Un

    Z ←− Xn+1 + 1S ←−

    ∏ni=1(p2i )

    Xi

    K ←− 1

    (1)[C ] IF K = Long(Z ) + 1 GOTO F

    }(2)

    U ←− r((Z )k)P ←− pr(U)+1IF l(U) = 0 GOTO NIF l(U) = 1 GOTO AIF P - S GOTO NIF l(U) = 2 GOTO MK ←− µi ≤ Long(Z )[l((Z )i ) + 2 = l(U)]GOTO C

    (3)

    [M] S ←− qt(S ,P)GOTO N

    [A] S ←− S ·P[N] K ←− K + 1

    GOTO C

    (4)[F ] Y ←− (S)1

    LC, 2006–07 Programas universales 5.30

  • Descripción de Un

    I BLOQUE 1: Iniciación del programa UnI En Z guardamos la información acerca del programa P.I En S el estado actualI En K la siguiente instrucción que debe ejecutarse.

    (Si K = k y S = s, el par (k, s) almacena una d.i.)

    I BLOQUE 2: Test de salida.Un para cuando lleguemos a una d.i. de P terminal. Como lalongitud de P es |P| = Long(Z ), la instrucción de salida será:

    IF K = Long(Z ) + 1 GOTO F

    I BLOQUE 3: Obtención del tipo de instrucción que debeejecutarse.

    I BLOQUE 4: Obtención de la nueva d.i.

    LC, 2006–07 Programas universales 5.31

  • Ejecución en tiempo limitado (I)

    Proposición. Para cada n ≥ 1 el predicado:

    STEP(n)(x1, ..., xn, y , t) ≡“El programa y para sobre (x1, ..., xn) en, a lo sumo, t pasos”.

    es GOTO–computable.

    I Podemos probar este resultado sin más que modificar elprograma universal Un adecuadamente.

    LC, 2006–07 Programas universales 5.32

  • STEP (n) es GOTO–computable

    Z ←− Xn+1 + 1S ←−

    ∏ni=1(p2i )

    Xi

    K ←− 1

    (1)[C ] IF K = Long(Z) + 1 GOTO F

    IF Xn+2 = 0 GOTO EXn+2 ←− Xn+2 − 1

    (2)U ←− r((Z)k )P ←− pr(U)+1IF l(U) = 0 GOTO NIF l(U) = 1 GOTO AIF P - S GOTO NIF l(U) = 2 GOTO MK ←− µi ≤ Long(Z)[l((Z)i ) + 2 = l(U)]GOTO C

    (3)

    [M] S ←− qt(S , P)GOTO N

    [A] S ←− S ·P[N] K ←− K + 1

    GOTO C

    (4)[F ] Y ←− Y + 1

    LC, 2006–07 Programas universales 5.33

  • La función di (n) es GOTO–computable

    La función di (n) : Nn+2 → N, se define mediante:di (n)(~x , e, t) = la t + 1–ésima d. i. de la computación de e sobre ~x

    Z ←− Xn+1 + 1S ←−

    ∏ni=1(p2i )

    Xi

    K ←− 1

    (1)[C ] IF K = Long(Z) + 1 ∨ Xn+2 = 0 GOTO F

    Xn+2 ←− Xn+2 − 1

    }(2)

    U ←− r((Z)k )P ←− pr(U)+1IF l(U) = 0 GOTO NIF l(U) = 1 GOTO AIF P - S GOTO NIF l(U) = 2 GOTO MK ←− µi ≤ Long(Z)[l((Z)i ) + 2 = l(U)]GOTO C

    (3)

    [M] S ←− qt(S , P)GOTO N

    [A] S ←− S ·P[N] K ←− K + 1

    GOTO C

    (4)[F ] Y ←− 〈K , S〉

    LC, 2006–07 Programas universales 5.34

  • Forma normal

    Teorema de la forma normal. Para cada n ≥ 1, existenI Un predicado (n + 2)-ario, GOTO–computable, Tn, yI Una función H ∈ GCOMP

    tales que, para cada función, f , n-aria y G -computable existe une ∈ N verificando:

    1. f (~x) ↓⇔ ∃zTn(~x , e, z)2. f (~x) = H((µz)Tn(~x , e, z))

    Demostración: Dada f ∈ GCOMP(n), existe P ∈ GOTOP ,[[P]](n) = f . Sea e = #(P). Entonces

    f (~x) ↓⇔ [[P]](n)(~x) ↓ ⇔ ∃t STEP(n)(~x , e, t)Definamos el predicado (n+2)-ario, Tn(~x , e, z) como:

    STEP(n)(~x , e, r(z)) ∧ (r(di (n)(~x , e, r(z))))1 = l(z)donde z = 〈y , t〉 es la codificación del valor almacenado en Y(y = l(z)) y el número de pasos (t = r(z)) de la computación deP para la entrada ~x .

    LC, 2006–07 Programas universales 5.35