i y funciof'i:s calculables - decsai.ugr.esdecsai.ugr.es/~castro/mcii/apuntes/capitulo1.pdf ·...

Download I Y FUNCIOf'I:S CALCUlABLES - decsai.ugr.esdecsai.ugr.es/~castro/MCII/Apuntes/Capitulo1.pdf · sirven para realizar una ramificación incondicional (GOTO L). Esta ... Ejercicios l

If you can't read please download the document

Upload: nguyentuyen

Post on 06-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • -. ~ ---.- --~~~",~,~,.~~"", ,-, ,. "'\,","-'-....

    CAPITUlO I - PROGRAMASY FUNCIOf'I:SCALCUlABLES

    v

    1. Un Lenguaje de ProgramacinNuestro desarrollo de la Teoria de la Computabilidad se

    basarA en un lenguaje de programacin especifico Y. Vamos aempezar describindolo informalmente para dar despus una

    descripcin mAs formal del mismo. Usaremos en este lenguaje

    ci~]:tas letras como variables, cuyos valores son nmeros-. En

    particular, serAn nmeros naturales (el cero y los nmeros

    ,positivos).

    Las letras X, X, X ... serAn llamadas variables de1 2 3

    entrada. La letra Y serA ~lamada variable ,de salida, y las letras

    Z, Z , Z, ... serAn llamadas variables locales.1 2 3-El subindice 1 se omitirA a veces.

    No existe, limite superior al nmero de variables de Y. !fes

    una entidad puramente terica. No existe compilador de Y.

    Un programa serA un conjunto de instrucciones.

    im:itrucciones perroitidas serAn en principio 3.

    Las

    ~iil

    V ~ V + 1

    V(;-V-l

    lE'V * O GOTO L

    Jr1,

    L es una etiqueta. Las etiquetas pueden aparecer al principio

    de cada instruccin entre corchetes. Estas pueden ser

    1~. B , e , D, E , A , B , e , D , E , A, ....1 1. 1 1 1 2 2 .2 2 2 3

    Tambin se suele suprimir el subindice.

    instruccin con etiqueta puede ser,

    Un ejemplo de una

    [B] z (;- Z - 1

    Toda variable en un programa tendrA un valor determinado en cada

    momento. Se supone que inicialmente las variables Z e Y tienen el

    (valor O. El valor de un variable se especificarA a veces con

    letras minsculas.' Por ejemplo, x representarA el valor de - la2

    l'

    !

    variableX .2

    CAPITULO 1 - PRoc,RAKASy FUNCIONESCALCULABLES1

  • "--'-'--"--'-'

    2. Ejemplos de

    (a) [A]

    Programas

    X ~ X - 1Y ~ Y + 1IF X ~ O GOTO A

    Este programa calcula la funcin,

    f(x) = {:si x = O

    j~

    en otro caso

    Un programa para cuando llega al final o cuando se le manda

    ir a una etiqueta que no aparece en ninguna instruccin.

    Normalmente se utiliza la etiqueta E (End) para parar programas deesta forma.

    (b) Programa que copia el valor de X en Y.

    [A] IF X ~ O GOTO BZ ~ Z + 1IF Z ~ O GOTO EX ~ X - 1Y ~ Y + 1Z ~ Z + 1IF Z ~ O GOTO A

    [B]

    Las instrucciones

    Z ~ Z + 1IF Z ~ O GOTO L

    sirven para realizar una ramificacin incondicional (GOTO L). Esta

    instruccin no est en el programa original, pero como ser usada

    muy a menudo, nuestro programa permitir el uso de esta

    instruccin, pero solo como un resumen o' forma abreviada de

    escribir el segmento que representa. Este tipo de abreviaciones se

    usarn muy a menudo y se llamarn macros. El trozo de programa que

    representan se llamar expansin de la macro.

    Cuando se desarrolla una macro a las variables locales que

    alli aparecen hay que darle un nombre distinto del resto de las

    variables que aparecen en el programa.

    CAPITULO 1 - PROGRAMAS Y FUNCIONES CALCULABLES 2

  • w_~ ~

    (c) Este programa asigna el valor de X en Y, sin destruir el.valor

    de X

    [A]

    [B]

    [C]

    [D]

    IF X '$ O GOTO BGOTO CX t- X - 1

    Y t- Y + 1Z t- Z + 1GOTO AIF Z '$O GOTO D

    GOTO EZ t- Z - 1X t- X + 1GOTO C

    El valor final de Z es cero.

    Este programa se puede usar corno base para una macro que

    llamaremos asignacin y escribiremos

    V t-V'

    que sirve para asignar a V el valor de V' sin alterar el valor de

    la ltima variable.

    Se hace sustituyendo V por Y y V' por.X. El nico problema

    que existe es que en el anterior programa habiamos supuesto que el

    valor inicial de Y es cero.y ahora el de V puede ser distinto de

    cero. Esto se resuelve aadiendo al principio la macro

    V t-O

    cuya expansin es

    Vt-V-lIF V '$ O GOTO L

    La expansin de la macro es entonces

    [L]

    [A][B]

    [C]

    [D]

    V t- OIF V' '$ O GOTO BV' t- V' - 1V t- V + 1Z t- Z + 1GOTO AIF Z "* O GOTO D

    GOTO EZ t- Z - 1V' t- V' + 1GOTO C

    GOTO C

    Notas:

    1. Es incesario poner Z t-O

    2. En tqda expansin de esta macro, ni las variables locales ni

    las etiquetas (excepto la E) deben aparecer en el programa en

    CAPITULO 1 - PROGRAKAS y FUNCIONES CALCULABLES 3

  • u...u ~_._"'~~ -----

    que se expande.

    La etiqueta E se debe de sustituir por una etiqueta que

    aparezca en la siguiente instruccin que siga a la macro en el

    programa principal.

    3.

    (d) Programa que calcula la funcin

    f (x , x ) = X +x .1 2 1 2

    [B)

    [A]

    y ~ X1

    Z ~ X2

    IF Z ~ O GOTO AGOTO EZ ~ Z - 1

    Y ~ Y + 1GOTO B

    Nota. Z se usa para preservar el valor de X.2

    (e) Programa que calcula la funcin producto,

    f (x ,x ) = -x . X1 2 1 2

    Se hace como una adicin repetida.

    [B]

    [A)

    Z ~ X2 2

    IFZ ~ O GOTOA2

    GOTO EZ ~. Z - 12 2

    zt ~ X + Y1 1

    Y ~ Z1GOTO B

    Notas.- La instruccin Z ~ X + Y, se entiende como una macro1 1definida por el programa anterior. Se podra pensar que esta

    instruccin y la siguiente se podan sustituirpo~ la instruccin

    simple,Y~X +Y

    1

    reemplazar el valor de Y, por

    que la expansin de esta macroY ~ X

    1Z'~ YIF Z ~ O GOTO A

    GOTO EZ ~ Z - 1Y ~ Y + 1GOTO B

    Es decir,

    Fijmonos

    [B]

    [A]

    la suma de su valor y x .1sera

    CAPITULO 1 - PROGRAMAS Y FUNCIONES CALCULABLES4

  • cr', c~"-"-,~~"~-"""""",.~.""" """"""",,",,,,,,,,,,,,,.,~~_.-

    Este programa calcula 2x, en vez de x y.1 1El programa de multiplicacin con las macros extendidas es

    1. La variable local Z del programa de adicin se ha sustituido1

    por Z ya que aparece en el programa principal.32. Las etiquetas tampoco se han repetido.

    3. E es la etiqueta por la~que se continua a la terminacin de la2macro.

    (f) El siguiente programa

    Esta funcin no est definida si x < x. El programa no para en1 2este caso.

    CAPITULO 1 - PROGRAMASY FUNCIONESCALCULABLES5

    Z t- X2 2

    [B] IF Z O GOTO A2,GOTO E

    [A] Z t- Z - 12 2Z t- X1 '1

    Z t- y3

    [B] 1F Z O GOTO A2 3 2GOTO E2

    [A] Z t- Z - 12 3 3Z t- Z + 11 1

    GOTO B2

    [E] Y t- Z2 1GOTO B

    Notas:

    y t-X1

    Z t-X2[C] IF Z O GOTO A

    GOTO E[A] IF Y O GOTO B

    GOTO A[B] Y f- Y -' 1

    Z f- Z - 1GOTO C

    Este programa calcula la funcin parcial

    r - xsi x ?; x

    g(x ,x ) = 1 2 1 21 2si x < xl' 1 2

  • -- _o. - ------

    Ejercicios

    l. Escribir un programa en Y que calcule la funcin f(x) = 3x, cony sin macros.

    2. Escribir un programa en Y, que calcula la funcin: f(x) = 1 sies impar,'y f(x) = O si que es par.3. Escribir un programa que calcula f (x) = 1 si es par y estA. 'indefinida si es impar.

    3. SintaxisVamos a describir formalmente el lenguaje Y.

    En este lenguaje existen los smbolosx X X.....

    1 ;2 3

    llamados variables de entrada.

    Los smbolos Z Z Z . . . ., llamados1 ;2 3

    smbolo Y llamado variable de salida.

    Los smbolos

    A B e D E A B1 1 1 1 1 ;2 2

    se llaman etiquetas de Y.

    variables locales, y el

    Una sentencia es una de las siguientesV ~ V - 1

    v ~ V + 1V~V

    IF V ~ O GOTa L

    donde V es cualquier variable y L cualquier etiqueta.

    La sentencia V ~ V no hace nada. Es como.el CONTINUE del FORTRAN.

    Una instruccin es una sentencia o bien una etiqueta entre

    corchetes seguida de una sentencia.

    Un programa es una sucesin finita de inst~ucciones.La longitud

    de la sucesin se llama longitud del programa. Suponemos que

    existe el programa vaco de longitud cero.

    Si ~ es un programa, se llama estado

    de ecuaciones de la forma V = m, donde Vdel programa a una lista

    es una variable y m un

    CAPITULO 1 - PROGRAMAS Y FUNCIONES CALCULABLES 6...

    ..

  • nmero natural. Debe de haber una ecuacin y solo una por cada

    variable que aparezca en el programa. No importa que este estado

    se pueda alcanzar en una ejecucindel programa.

    Si ~ es un programa, u un estado de ~ y V una variable del

    programa, se llama valor de V en u al nico nrn~ro q tal que la

    ecuacin V = q forma parte de u.

    Una descripcin instantnea de un programa de longitud n, es

    un par de la forma (i,u) donde 1 ~ i ~ n+1, y u es un estado de ~.

    i indica la instruccn que se est ejecutando.

    Cuando i = n+1 se dice que la descripcin instantnea es terminal.

    Corresponde a la idea de que el programa ha terminado.

    Si (i,u) es una descripcin instantnea no terminal de un programa

    ~I se llama sucesor de la misma a la descripcin (j,L) definida

    cornosigue (y esto es lo que define realmente las instrucciones):

    Caso 1. Si la i-sima instruccin de ~ es V ~ V + 1 y u contiene

    lauecuacin V = m, entonce j = i+l y 1: se obtiene reemplazando enu la ecuacin V = m, por la ecuacinV = rn+l.

    - Caso 2. Si la i-sima ecuacin es V ~ V - 1 Y CT contiene la

    ecuacin V = m. Entonces j = i+1 y L se obtiene reemplazando V =m, por V = m-1 si m ~ O, Y L = u si m = O.Caso 3. La instruccin i es V ~ V, entonces j = i+1 y L = u.Caso 4. Si la instruccin es IF V ~ O GOTO L. Entonces L = U Yexisten dos posibilidades:

    a) u contiene V = O. Entonces J = i+1b) CT contiene V = m, m ~ O. Entonces, si

    instruccin de P, con etiqueta L, j es el minimo

    las etiquetas con este nmero. Si no existe, j =

    existe una

    nmero de

    n+1.

    Observemos corno est permitido que existan dos instrucciones con

    la misma etiqueta', pero slo

    ejecucin.

    Un clculo en un programa ~ es una sucesin de descripciones

    instantneas s I s, ... I S I tal que s es el sucesor de s1 2 k 1+1 1

    la primera ser vlida en dicha

    CAPITULO 1 - PROGRAMAS Y fUNCIONES CALCULABLES7

  • ~ ~. ~-_.._- - ~-,~.

    para i=l,2,..,k-l Y s es terminal.k

    4. Funciones Calculables

    Vamos a definir ahora precisamente el concepto de funcin

    calculada por un programa ~. Un mismo programa servir paracalcular funciones de cualquier nmero de variables.

    La definicin es como sigue. Sea ~ un programa y r , r ,. . , r12mm nmeros naturales. Construimos un estado u de ~ que contenga las

    siguientes ecuaciones

    X =r, X =r, ,X =r1 1 2 2 111 IDY el resto de las ecuaciones son V = O. Con la salvedad de que sihay mas nmeros que variables de entrada, solo se inicializan las

    variables que hayan y el resto de los nmeros se ignoran. A este

    estado le llamaremos estado inicial y a la configuracin (l,u) le

    llamaremos configuracin inicial. Entonces se pueden dar doscasos.

    Caso s , s ,.., s comenzando en1 2 kf

    ' ' "' 1 Et ' b ' 01,(111) ( )con loguraclo n lonloCl.a. n onces escrlo lomos 'f' en r, r , . . , r por.r 1 2 111el valor de la variable Y en la configuracin terminal s .kCaso 2, No existe tal clculo. Es. decir existe una sucesin

    infinita de configuraciones s,s fS f.'" en la que s1 2 3 1configuracin inicial y cada una es sucesor de la anterior. En

    este caso decimos que 1jJ(:)(r,r, ,.,r ) no est definido..r 1 2 111

    l. Existe un clculo la

    es la

    Por ejemplo en

    (b) 1jJ(~)(X) = x

    (C) 1jJ(~)(r,r) = r.r 1 2 1( 1 )

    (d.) ljJen (r ) = r + O = r.r 1 1 1(3 )

    ljJ ::r: (r ,r ,r ) = r + r ..r' 1 2 3 1 2

    Si'P es un programa y m un entero positivo, se dice que la funcin

    1jJ(:)(r,r" .,r) es calculada por ~..r 12m

    ~a funcin SJ d~ ~ una o mas variq.bles se d!f...e._J?c~c!a!.1!1.e~!:~

    calcu!-~le si es calculada por alqn proqrsl!l!.t.~__~-, g es

    parcialmente calculable, si existe 'P tal que(m)

    g(r ,r ".,r ) = ljJen (r ,r ,. .,r )12m .r 1 2 111

    CAPITULO 1 - PROGRAMAS Y FUNCIONES CALCULABLES 8

    .

  • --, ""'" """""'--"'""c"I"""""'.""",'~_"""M""~'

    entendindose esta igualdad corno que son iguales cuando ambos

    estn definidos, y que ambos estan definidos para los mismos

    valores.

    Y~>"J,~"~,~~!},,g".de~~..~~;ria~!_~s,se q~ce t9ta.~L si g(r1 '~2.'. . ,r.)

    est definida para todos los valores posibles de r ,..,r.~ ,.,~"~_..,.,.,.",,, ,.. -,.-" ,,_oo,-, "..,00' ,.",..' ,.' .,...' , '" ,1~" 11.

    Las funciones parcialmente calculables se llaman tambin-~._,---~~,---~~" ~-,.~,"~ ",""~-~-"'"~"~""""~~ ""'""~="C>'",-"","',."-~-,.",".~...'...~.k-."-' , es el programaIF X ~ O GOTO AX ~ X-lIF X ~ O GOTO A

    [A] , Y ~ Y + 1

    Cual es la funcin I/J(~)(X)?3. Encontrar la misma funcin para el programa

    [B] IF X ~ O GOTO AZ~Z+l

    IF Z ~ O GOTO B

    [A]

    [A] X ~ X

    4. Encontrar la misma funcin para el programa vacio.

    5. Macros

    Vamos a considerar ahora un procedimiento general para construir

    macros. Sea f(x ,..,x ) una funcin parcialmente calculable y 1> un1 n

    CAPITULO 1 - PROGRAMAS Y FUNCIONES CALCULABLES 9

  • programa que la calcula. Supongamos que las variables de ~ estan

    todas en la lista Y, X, .., X, Z, .., Z y que las etiquetas1 n 1 leestn en la lista E, A, .., A. Supongamos tambin que la nica1 1etiqueta de salida es la E '. Es claro que si ~ no cumple estas

    condiciones lo podrlamos modificar para que lo hiciese, sin

    alterar los cAlculos que realiza.

    El programa ~ lo notaremos tambin de la forma

    ~ = ~(Y,X ,..,X ,Z ,..,Z E,A ,..,A).1 n 1 le 1 1Cambiando dentro del parntesis una variable o etiqueta

    expresaremos el programa que se obtiene sustituyendo dicha

    variable o etiqueta en el programa principal por la nueva.

    En particular escribiremos

    :t. = ~(Z ,Z ,..,Z ,Z ,..,Z E ,A ,..,A )m m m+l m+n m+n+l m+n+k m m+l m+lpara cualquier valor de m.

    Con est.as idea.s podemos escribi,r ahora una macro para la

    expresin W ~ f{~".,Vn), Esta m~cro tendrA la siguienteexpansin,

    Z ~ OmZ ~ Vm+l 1Z ~ Vm+2 2

    ..,...

    Z ~ Vm+n n

    Z ~ Om+n+l

    Z ~ Om+n+2

    ......

    z ~ Om+n+k

    :t.'m

    W ~ Z'm[E]m

    El nmero In se elige lo suficientemente grande para que ninguna

    variable local aparezca en el programa principal.

    Las variables locales del programa hay que inicializarlas a cero

    en la expansi.n porque el programa puede entrar varias veces en

    esta expansin.

    Si f (V , ..,V ) no estA definido y la macro1 n

    W~f{V,."v)1 n

    CAPITULO1 - PROGRAMAS Y FUNCIONES CALCULABLES 10

  • }-

    aparece en el programa principal, entonces la expansi6n nuncaterminarA, y por tanto, tampoco terminarA el programa principal.

    Por ejemplo, el programaZ~X -x1 2Y ~ Z + X3

    calcula la funci6n

    f(X"X2,X3) = { :Xl - X2) + X3si x ~ x

    1 2

    si x < x1 2

    Vamos a aadir ahora otra interesante familia de macros.-". Antes

    necesitamos el concepto de predicado. Un", pregj.S=~~_2~" !J!.!l,91}J

    booleana en un conjunto S es una aplicacin de dicho conjunto en-~ r~' - _0- - - .---- -_c,,"w,-,-.el co~unto ~TRUE,FALS~l. Es decir una funcin que asigna a .c~~valor de dicho conjunto un valor de verdadero o falso. Por ejemplo

    , ~

    x

  • calculable. El siguiente programa calcula esta funcin:

    IF X ~ O GOTO E

    y t- Y + 1

    Ejercicios

    l. Sean f(x), g(x)" funciones calculables. Demostrar que la

    h(x) = f(g(x es calculable tambin.2. Demostrar que"el Predicado x :5 x es calculable.

    . 1 2 "

    funcin