Beruflich Dokumente
Kultur Dokumente
Luis Astorga
Universidad Simón Bolívar
Septiembre-Diciembre 2007
1 Asignación de arreglos
Para todo par de naturales n; m tales que n m, se de…ne la secuencia [n::m)
como el conjunto fn; n + 1; : : : ; m 1g. Nótese que [n::m) = ? si n = m, y
[n::m) = fng si m = n + 1.
Una función de arreglo de tipo T es una función
a: [n::m) ! T
i 7 ! a[i]
de modo que el arreglo a(k;E) [n::m) es similar a a[n::m) con la única diferencia
que a(k;E) [k] = E.
De manera general se de…ne la función modi…cación de a en fk1 ; : : : ; kj g
1
donde j m ny
fk1 ; : : : ; kj g fn; n + 1; : : : ; m 1g
a[k1 ]; : : : ; a[kj ] := E1 ; : : : ; Ej
siempre que no se pierda de vista que la asignación de arreglo que esta expresión
denota es una sustitución de funciones de arreglo.
La función de precondición más débil para la asignación de arreglo dada una
postcondición Q es entonces
aux : = a [k1 ] ;
a[k1 ] : = a[k2 ];
a[k2 ] : = aux
2
2.2 Especi…cación
j[
const N : Int;
const a : Array [0; N ) de Int;
var sumax : Int;
{P : N 0}
Programa P
{Q : sumax = (Max p; q : 0 p q N :( k:p k < q : a[k]))}
]j
2.3 Comentarios
1. Recuérdese que el operador max se de…ne por
(x max y = c) (x = c _ y = c) ^ (x c^y c)
y el elemento neutro es 1 puesto que, para todo entero x se tiene que
( 1) max x = x max ( 1) = x
(Max p : ? : p) = 1
(Max p : 0 p < n + 1 : p) = (Max p : 0 p < n : p) max n
(Max p : ? : f (p)) = 1
(Max p : 0 p < n + 1 : f (p)) = (Max p : 0 p < n : f (p)) max f (n)
(y max z) + x = (y + x) max (z + x)
y en el cuanti…cador
3
2. Recuérdese también que para el operador asociativo con elemento neutro
+ se de…ne el cuanti…cador
P
( k : ? : f (k)) = 0
P P
( k : 0 k < n + 1 : f (k)) = ( k : 0 k < n : f (k)) + f (n)
2.4 Invariante
Aplicando la técnica de sustitución de constante por variable en la postcondición
Q se obtiene un primer posible invariante P
{I : (0 n N )^sumax = (Max p; q : 0 p q n : ( k : p k < q : a[k]))}
Primero se veri…ca las condiciones de inicio: cuando n = 0
P
sumax = (Max p; q : 0 p q 0 : ( k : p k < q : a[k]))
P
= (Max p; q : p = q = 0 : ( k : ? : a[k]))
= (Max p; q : p = q = 0 : 0)
= 0
n; sumax := 0; 0
[I ^ (n = N ) =) Q]
4
2.5 Derivación del programa
Veamos que sucede en el incremento de la variable
n := n + 1
P
I : (0 n N ) ^ sumax = (Max p; q : 0 p q n:( k:p k < q : a[k]))
^ aux = (Max p : 0 p q : f (p; n))
5
en el invariante:
(Max p : 0 p n + 1 : f (p; n + 1))
= por de…nición inductiva de Max (...split)
(Max p : 0 p n : f (p; n + 1)) max f (n + 1; n + 1)
= porque f (k; k) = 0
(Max p : 0 p n : f (p; n + 1)) max 0
= porque f (p; n + 1) = f (p; n) + a[n] (...split de )
(Max p : 0 p n : f (p; n) + a[n]) max 0
= porque + distribuye con max
((Max p : 0 p n : f (p; n)) + a[n]) max 0
= por de…nición del nuevo predicado en I
(aux + a[n]) max 0
Por lo tanto, para calcular aux en n + 1 se debe sumar aux en n con a[n] y
compararlo con 0.
En conclusión, recuérdese la situación: para calcular sumax en n + 1 el
programa debe calcular primero aux en n + 1 y luego compararlo con sumax
en n, y así derivamos las instrucciones
]j
6
I (n; sumax; aux := 0; 0)
por sustitución
(0 0 N ) ^ (0 = f (0; 0)) ^ (0 = f (0; 0))
porque f (0; 0) = 0
(0 0) ^ (0 N ) ^ (0 = 0) ^ (0 = 0)
por trivialidad
true ^ (0 N ) ^ true ^ true
porque [p ^ true p]
(0 N )
2.7.2 Prueba 1
[I ^ (n = N ) =) Q] por construcción.
2.7.3 Prueba 2
fI ^ (n 6= N )g
aux := (aux + a[n]) max 0; sumax := sumax max aux; n := n + 1
fIg se cumple :
Se aplica la técnica de prueba de la secuenciación
fI ^ (n 6= N )g
aux := (aux + a[n]) max 0
fR1g
sumax := sumax max aux
fR2g
n := n + 1
fIg
Primer paso
I (n := n + 1)
por sustitución
(0 n + 1 N ) ^ sumax = (Max p; q : 0 p q n + 1 : f (p; q))
^ aux = (Max p : 0 p q : f (p; n + 1))
por split de Max en sumax y en aux
(0 n + 1) ^ (n + 1 N )
^ sumax = (Max p; q : 0 p q n : f (p; q)) max (Max p : 0 p n + 1 : f (p; n + 1))
^ aux = ((Max p : 0 p q : f (p; n1)) + a[n]) max 0
Se de…ne
8 9
< (0 n + 1) ^ (n + 1 N ) =
R2 : ^ sumax = (Max p; q : 0 p q n : f (p; q)) max (Max p : 0 p n + 1 : f (p; n + 1))
: ;
^ aux = ((Max p : 0 p q : f (p; n1)) + a[n]) max 0
7
Segundo paso
Se de…ne
8 9
< (0 n + 1) ^ (n + 1 N ) =
R1 : ^sumax = (Max p; q : 0 p q n : f (p; q))
: ;
^ aux = ((Max p : 0 p q : f (p; n1)) + a[n]) max 0
Tercer paso
2.7.4 Prueba 3
Ejercicio