los lenguajes while y loop - lcc.uma.esfjv/uma/lcc/web/teaching/talf/segundo_cuatrimestre/... ·...

43
los lenguajes WHILE y LOOP X2 := X1; while X2 0 do X1 := X1 + 1; X2 := X2 – 1 od

Upload: others

Post on 19-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

los lenguajes WHILE y LOOP

X2 := X1;while X2 ≠ 0 do

X1 := X1 + 1;X2 := X2 – 1

od

Page 2: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

índice de materias

• introducción histórica• modelos de cálculo•• lenguajes lenguajes WHILEWHILE y y LOOPLOOP• funciones µ-recursivas• teorema de equivalencia• indexaciones y universalidad• problemas no resolubles

sintaxis, semsintaxis, semáántica yntica ycapacidad expresivacapacidad expresiva

Page 3: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

veremos:

- sintaxis- semántica informal- semántica formal

WHILE y LOOP están basados en el bucle indefinido y el bucle definido

?

WHILE LOOP

15

Page 4: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

sintaxis del lenguaje WHILE

identificadoresX1 , X2 , X3 , ... , Xi , ...

instrucciones de asignación códigoXi := Xj secuencia finita no vacía de Xi := Xi + 1 instrucciones separadasXi := Xi − 1 ( 0 − 1 = 0 ) por ";"Xi := 0

instrucción de control programa bucle indefinido: (n, p, código)

while Xi ≠ 0 do (cabecera) p ≥ ncódigo (cuerpo) ambos naturales

od (cola)Nota: el índice de anidamiento siempre es finito

Page 5: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de programa WHILE

• Ejemplo 1:

Sea el programa WHILE (1, 2, código) con código:

X2 := X1 ;while X2 ≠ 0 do

X1 := X1 + 1 ;X2 := X2 – 1

od

Page 6: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de programa WHILE

• Ejemplo 2:

Sea el programa WHILE (1, 1, código) con código:

X1 := X1 + 1 ;while X1 ≠ 0 do

X1 := X1

od

Page 7: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

• trabaja sólo con naturales• no hay instrucciones de entrada ni de salida• para un programa (n, p, código)

– n variables de entrada: X1 , X2 , ... , Xn

– 1 variable de salida: X1

– p variables de uso: X1 , X2 , ... , Xp con p ≥ n• las variables que no son de entrada se inicializan

implícitamente a cero• una única función (que puede ser parcial) de NNn en NN se puede

asociar a cada programa

semántica informal dellenguaje WHILE

Page 8: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de programa WHILE

• Semántica del programa del ejemplo 1:

Sea el programa WHILE (1, 2, código) con código:

X2 := X1 ;while X2 ≠ 0 do

X1 := X1 + 1 ;X2 := X2 – 1

od

Este programa tiene una variable de entrada (X1), usa dos variables (X1 , X2), y X2 se inicializa implícitamente a cero.

Calcula: f(n)= 2n ∀n∈NN

Page 9: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de programa WHILE

• Semántica del programa del ejemplo 2:

Sea el programa WHILE (1, 1, código) con código:

X1 := X1 + 1 ;while X1 ≠ 0 do

X1 := X1

od

Este programa tiene una variable de entrada (X1), que es la única que usa.

Calcula: f(n)= ↑ ∀n∈NN(función que siempre diverge)

Page 10: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

versión etiquetada de un programa WHILE

Dado un programa WHILE (n, p, código) lo escribimos de manera que cada línea contenga una de las siguientes cosas:

• una instrucción de asignación• una cabecera de (bucle) while: while Xi ≠ 0 do• una cola de (bucle) while: od

Además:• numeramos las líneas consecutivamente empezando por el 1• tras una cabecera de while ponemos el número que le ha

correspondido a su cola• tras una cola de while ponemos el número que le ha

correspondido a su cabecera

semántica formal del lenguaje WHILE

Page 11: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de programa WHILE

• Versión etiquetada del programa WHILE del ejemplo 1

Sea el programa WHILE Q = (1, 2, código) con código

1: X2 := X1 ;2: while X2 ≠ 0 do :53: X1 := X1 + 1 ;4: X2 := X2 – 15: od :2

Page 12: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

concepto de configuraciónde un programa WHILE

• sea Q = (n, p, código) un programa WHILE, con líneas

numeradas de 1 a f , una configuración de Q es una

(p+1)-tupla (s, x) con s∈{1, 2, 3,…, f, f +1} y x∈NNp

• una configuración es inicial si s=1 y xn+1 = … = xp = 0

• una configuración es final si s = f +1

• CQ denota al conjunto de las configuraciones de Q

Page 13: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplos de configuraciones

Sea el programa WHILE Q = (1, 2, código) con código

1: X2 := X1 ;2: while X2 ≠ 0 do :53: X1 := X1 + 1 ;4: X2 := X2 – 15: od :2

(1,3,5) es configuración, no inicial y no final

(1,5,0) es configuración, inicial y no final(6,8,3) es configuración final, y no inicial(2,2,2) es configuración, no inicial y no final(0,3,5) no es configuración

Page 14: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

concepto de cálculo en un paso

Sea Q = (n, p, código) un programa WHILE, con líneas numeradas de 1 a f .

Diremos que la configuración c1=(s, x) se transforma en la configuración c2=(t, y) en un paso de cálculo (representado por c1�Q c2 ) sii

Page 15: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

concepto de cálculo en un paso(para la asignación)

< (s, x) �Q (t, y) >

• Si s: “asignación” aparece en la versión etiquetada de Q , entonces

– t = s + 1

– yr = xr para todo r tal que 1 ≤ r ≤ p y r ≠ i

��

��

−=+=

==

−+

=

1: es "asignación" si1: es "asignación" si

: es "asignación" si0: es "asignación" si

11

0

ii

ii

ji

i

i

i

j

i

XX

XX

XX

X

x

x

xy

Page 16: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

concepto de cálculo en un paso(para el bucle)

< (s, x) �Q (t, y) >

• Si s: while Xi ≠≠≠≠ 0 do :s’ aparece en la versión etiquetada de Q , entonces

– y = x– si xi ≠ 0 entonces t = s + 1– si xi = 0 entonces t = s’ + 1

• Si s: od :s’ aparece en la versión etiquetada de Q , entonces– y = x– si xi ≠ 0 entonces t = s’ + 1 ( xi está en la cabecera s’ )

– si xi = 0 entonces t = s + 1

Page 17: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplos de cálculo en un paso

Sea el programa WHILE Q = (1, 2, código) con código

1: X2 := X1 ;2: while X2 ≠ 0 do :53: X1 := X1 + 1 ;4: X2 := X2 – 15: od :2

¿ (1, 2, 0) �Q (1, 2, 2) ? ¿ (1, 2, 0) �Q (2, 2, 2) ?

¿ (3, 4, 6) �Q (4, 5, 6) ? ¿ (2, 6, 0) �Q (6, 6, 0) ?

(1, 6, 0) �Q ? (2, 3, 7) �Q ? (5, 4, 2) �Q ? (5, 8, 0) �Q ?

Page 18: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

extendemos el “cálculo en un paso” función siguiente configuración

• sea Q = (n, p, codigo) un programa WHILE y CQ

el conjunto de todas las configuraciones de Q

• la función siguiente SIGQ: Np+1→Np+1 es

���

�¬∃∨∉�

='/' si

' si')(

cccCcc

ccccSIG

QQ

QQ

Page 19: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

siguiente para el programa Q ya visto

��������������

��������������

>=∧=≠∧=

=−=+

=∧=≠∧=

==

=

5 si )(05 si )6(05 si )3(

4 si )15(3 si )14(

02 si )6(02 si )3(

1 si )2(0 si )(

)(

aa,b,c

ca,b,c

ca,b,c

a,b,c

a,c,b

ca,b,c

ca,b,c

a,b,b

aa,b,c

a, b, cSIGQ

Page 20: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

función cálculo de un programa(configuración alcanzada tras i pasos)

• sea Q = (n, p, c) un programa WHILE, con líneas numeradas de 1 a f , la función cálculo del programa Q es la función CALQ: Np+1→Np+1

• CALQ(a, i) = (t, b) , siendo a∈Np y (1, a) �Q c1 � Q c2 � Q … � Q ci = (t, b) el cálculo de Q en ipasos, que comienza con valores a de las variables que usa el programa (las de no entrada inicializadas)

• se define recursivamente en función de SIGQ

���

>−=

=0 si))1,((0 si),1(

),(iiaCALSIG

iaiaCAL

QQQ

Page 21: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de función cálculo

• dado el programa Q ya visto, encontrar el valor de CALQ(6, 0, 4)

solución:

(1, 6, 0) �Q (2, 6, 6) �Q (3, 6, 6) �Q

(4, 7, 6) �Q (5, 7, 5)

CALQ(6, 0, 4) = (5, 7, 5)

Page 22: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

función complejidad temporal(nº de pasos de un programa, según la entrada)

• sea Q = (n, p, código) un programa WHILE, con líneas numeradas de 1 a f , la función complejidad temporal de Q es la función TQ: Nn→N

siendo x∈Nn , 0 un vector de p−n ceros y π1p+1 la

función proyección de la primera componente de un vector de p+1 componentes ( µj ≡ el menor j tal que)

]1)),0,(([)( 11 +== + fjxCALjxT Qp

Q πµ

Page 23: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de funcióncomplejidad temporal

• dado el programa Q ya visto, determinar la complejidad temporal

solución:

(1, a, 0) �Q (2, a, a) �Q (3, a, a)

�Q (4, a+1, a) �Q (5, a+1, a−1) �Q (3, a+1, a−1)

�Q (4, a+2, a−1) �Q (5, a+2, a−2) �Q (3, a+2, a−2)

· · · �Q (3, 2a−1, 1)

�Q (4, 2a, 1) �Q (5, 2a, 0) �Q (6, 2a, 0)

TQ(a) = 3a+2

Page 24: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

concepto de función calculadapor un programa WHILE

• sea Q = (n, p, código) un programa WHILE, la función calculada fQ: NNn→NN se define por

siendo x∈Nn y 0 un vector de p−n cerosexpresado informalmente: dados unos valores para las variables

de entrada (x), se inicializan a cero las demás variables, se realizan pasos de cálculo hasta alcanzar una configuración final, y se toma como resultado la segunda componente (variable X1); si no es posible alcanzar tal configuración final, entonces el programa no acaba para esos valores de entrada, y la función está indefinida (diverge)

)))(,0,(()( 12 xTxCALxf QQp

Q+= π

Page 25: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

la clase de funcionesWHILE-calculables

• Fn(WHILE) es el conjunto de todas las funciones f:Nn→N tales que existe un programa WHILE, con n variables de entrada, que calcula f

• F(WHILE) es la unión de todas las Fn(WHILE) , para n≥0

• si f∈F(WHILE) diremos que f es una función WHILE-calculable

Page 26: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejercicios de WHILE-calculabilidad

Demostrar (dando programa y funciones SIG , CAL , T y f ) que cada una de las siguientes funciones es WHILE-calculable:

- suma- resta ( x − y = 0 si x < y )- valor absoluto de la resta ( x − y si x ≥ y , y − x si x < y )- signo ( 0 si x = 0 , 1 si x > 0 )- complementario del signo ( 0 si x > 0 , 1 si x = 0 )- producto- función que siempre diverge- la función identidad de NN en NN- función constante Ck

j : NNk→NN , Ckj(x) = j ∀x∈NNk

Page 27: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

lenguaje WHILE ampliado

• utilización de denominaciones libres para las variables de entrada y para la variable de salida (hay que especificar cuáles son de entrada y cuál es de salida)

• permitiremos en el lenguaje ampliado incluir instrucciones de asignación cuyo miembro de la derecha implica la activación de otras funciones while-calculables (macroinstrucción)

• inclusión de líneas de comentarios

una función en WHILE ampliado es WHILE-calculable

Page 28: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de WHILE ampliado

Ejemplo de “denominaciones libres” y de “comentario”:

Entradas: dato

Salida: doble (* = 2 × dato *)Código:

doble := dato ;while dato ≠ 0 do

doble := doble + 1 ;dato := dato – 1

od

Page 29: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de WHILE ampliadoEjemplo de “activación de funciones while-calculables”.Sea el programa doble = (1, 2, código) con código

X2 := X1 ;while X2 ≠ 0 do

X1 := X1 + 1 ;X2 := X2 – 1

od

Sea el programa (macroprograma) exp = (1, 2, código) con código

X2 := X2 + 1 ;while X1 ≠ 0 do

X2 :=:=:=:= doble( X2 ) ; ←←←← macroinstrucciónX1 := X1 – 1

od ;

X1 := X2 ( exp calcula f(n)=2n )

Page 30: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

conversión a WHILE:variables y comentarios

• un programa con denominaciones libres para las variables se convierte en un programa WHILEhaciendo las siguientes transformaciones:

– reemplazar la primera variable de entrada por X1 , la segunda por X2 , …, la n-ésima por Xn

– reemplazar la variable de salida por Xn+1

– reemplazar las variables de uso interno, según su orden de aparición por Xn+2 , …

– añadir al final del código resultante la instrucción

X1 := Xn+1

• los comentarios se eliminan sin efecto para el código

Page 31: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de conversión a WHILE

Entradas: datoSalida: doble (* 2×dato *)Código:

doble := dato ;while dato ≠ 0 do

doble := doble + 1 ;dato := dato − 1

od

(1, 2, código-doble)código-doble:

X2 := X1 ;while X1 ≠ 0 do

X2 := X2 + 1 ;X1 := X1 − 1

od ;X1 := X2

Page 32: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

conversión a WHILE:macroinstrucciones

• las macroinstrucciones se eliminan como sigue– sea la macroinstrucción Xi := f ( Xj1 , …, Xjn ) , donde f es

calculada por el programa (n, p, código)

– sea Q un macroprograma que usa q variables en el cual aparece la macroinstrucción anterior, la expansión PQ de la macroinstrucción en Q da lugar a:Xq+1 := Xj1 ; Xq+2 := Xj2 ; … Xq+n := Xjn ;Xq+n+1 := 0 ; Xq+n+2 := 0 ; … Xq+p := 0 ;“el código de P sustituyendo Xi por Xq+i , con 1 ≤ i ≤ p ”Xi := Xq+1

• cada macroinstrucción se expande independientemente

Page 33: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplo de conversión a WHILE

exp = (1, 2, cod)cod: X2 := X2 + 1 ;

while X1 ≠ 0 doX2 :=:=:=:= doble( X2 ) ;X1 := X1 − 1

od ;X1 := X2

doble = (1, 2, cod)cod: X2 := X1 ;

while X2 ≠ 0 doX1 := X1 + 1 ;X2 := X2 − 1

od

exp = (1, 4, cod)cod: X2 := X2 + 1 ;

while X1 ≠ 0 doX3 :=:=:=:= X2 ;X4 :=:=:=:= 0 ;X4 :=:=:=:= X3 ;while X4 ≠≠≠≠ 0 do

X3 :=:=:=:= X3 + 1 ;X4 :=:=:=:= X4 −−−− 1

od ;X2 :=:=:=:= X3 ;X1 := X1 − 1

od ;X1 := X2

Page 34: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

lenguaje WHILE ampliado

• Podemos combinar variables libres y macroinstruccionesEjemplo:

Entradas: x, y

Salida: prod (* = x × y *)Código:

while y ≠ 0 doprod := suma(prod, x) ;y := y – 1

od

Page 35: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

lenguaje WHILE ampliado

• Para las macroinstrucciones relativas a funciones conocidas y con representación infija, estándar en matemáticas, usaremos dicha representación

Así, las macros se escribirán

z := suma(x,y) z := x + y

z := resta(x,y) z := x − y

z := producto(x,y) z := x × y

z := exp(x) z := 2x

• Permitiremos más de una función while-calculable en una macroinstrucción

p.e.: z := x + ( x × (z - y))

Page 36: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

ejemplos con WHILE ampliadoDemostrar que las siguientes funciones son while-calculables:

— máximo ( max(x,y) )— diferencia en valor absoluto ( | x - y | )— igualdad ( igualdad(x,y) , o bien x=y ) (calcula 1 si son iguales, 0 si son distintos)

— potencia ( x y )

soluciones: — potencia:

— max(x,y) := ( x – y ) + y Entradas: x, y

— | x - y | := ( x – y ) + ( y - x ) Salida: z

— igualdad(x,y) := csg( | x - y | ) Código:

( csg ≡ complemento del signo) z := z + 1 ;

while y ≠ 0 do

z := z × x ;

y := y – 1

od

Page 37: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

composición de funciones

sean f y g dos funciones de NN en NN , ambas while-calculables; la composición de ellas g°ftambién es una función while-calculablesea (1, pf, Q) el programa while que calcula f : NN → NNy (1, pg, R) el programa que calcula g: NN → NN, el siguiente macroprograma calcula g°f

Entrada: xSalida: yCódigo:

x := f(x) ;y := g(x)

Page 38: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

capacidad expresiva de WHILE:estructuras de control

do x timesS

od

z := x;while z ≠ 0 do

Sz := z − 1

od(* z es una nueva

variable *)

if x ≠ 0 then S fi

y := sg (x);do y times

Sod

(* y es una nueva variable *)

if x ≠ 0 then S else T fi

y := sg (x);z := csg(x);do y times

Soddo z times

Tod

Page 39: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

capacidad expresiva de WHILE:expresiones booleanas

C EC

X = Y 1 − [(Y − X) + (X − Y)]X > Y (X − Y) − [(X − Y) − 1]X < Y (Y − X) − [(Y − X) − 1]C1 ∨ C2 sg(EC1 + EC2)C1 ∧ C2 (EC1 + EC2) − 1¬C 1 − EC

while C doS

od

z := EC ;while z ≠ 0 do

Sz := EC ;

od

para cualquier condición booleana C existe una expresión EC

tal que si la condición es verdadera toma el valor 1 y si es falsa toma el valor 0

Page 40: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

capacidad expresiva de WHILE:expresiones con funciones

do f(x) times S od w := f(x); do w times S od

while f(x) ≠ 0 do S od w := f(x); while w ≠ 0 do S; w := f(x) od

if f(x) ≠ g(x) then S1 w := |f(x)–g(x)|; if w ≠ 0 then S1 else S2 fielse S2 fi

if f(x) ≠ 0 then S fi w := f(x); if w ≠ 0 then S fi

siendo f y g funciones de NN en NN while-calculables y S , S1

y S2 códigos, permitiremos escribir instrucciones de la forma:instrucción expansión

Page 41: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

sintaxis del lenguaje LOOP

identificadoresX1 , X2 , X3 , ... , Xi , ...

instrucciones de asignación códigoXi := Xj secuencia finita no vacía de Xi := Xi + 1 instrucciones separadasXi := Xi − 1 ( 0 − 1 = 0 ) por ";"Xi := 0

instrucción de control programa bucle definido: (n, p, código)

do Xi times (cabecera) p ≥ ncódigo (cuerpo) ambos naturales

od (cola)Nota: el índice de anidamiento siempre es finito

Page 42: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

clase de funciones LOOP-calculables

• Fn(LOOP) es el conjunto de las funciones f: Nn → Ntales que existe un programa LOOP, con n variables de entrada, que calcula f

• F(LOOP) es la unión de todas las Fn(LOOP) , para todo n ≥ 0

• si f∈F(LOOP) decimos que f es una función LOOP-calculable

Page 43: los lenguajes WHILE y LOOP - lcc.uma.esfjv/UMA/LCC/web/Teaching/TALF/segundo_cuatrimestre/... · • lenguajes WHILE y LOOP • funciones µ-recursivas • teorema de equivalencia

lenguajes LOOPi

• para cada i ≥ 0 , se define el lenguaje LOOPi como el sublenguaje de LOOP formado por los programas que tiene nivel de anidamiento de bucles a lo sumo i

• F(LOOPi) es la clase de funciones calculadas por programas LOOPi

• si una función pertenece a una clase, entonces pertenece a todas las que están por encima de ella

F(LOOP0) ⊂ F(LOOP1) ⊂ F(LOOP2) ⊂ … ⊂ F(LOOP)

¿cómo son los programas escritos en LOOP0 y las funciones de F(LOOP0) ?