I Y FUNCIOf'I:S CALCUlABLES - decsai.ugr.esdecsai.ugr.es/~castro/MCII/Apuntes/Capitulo1.pdf ·...
-
Upload
nguyentuyen -
Category
Documents
-
view
221 -
download
0
Transcript of I Y FUNCIOf'I:S CALCUlABLES - decsai.ugr.esdecsai.ugr.es/~castro/MCII/Apuntes/Capitulo1.pdf ·...
-
-. ~ ---.- --~~~",~,~,.~~"", ,-, ,. "'\,","-'-....
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