Desarrollo Formal de Programas Ejemplos

Anuncio
Working Hypothesis
Desarrollo Formal de Programas
Ejemplos
Camilo Rueda 1
1 Universidad
Javeriana-Cali
PUJ 2007
Working Hypothesis
Oz
Los pueblos más aislados
Hay n pueblos en una región
La distancia entre el pueblo i y el pueblo j es f (i, j)
Se supone que las distancias están acotadas
0 < f (i, j) ≤ m
Se supone también que f (i, i) = m
Se trata de calcular la distancia del pueblo más aislado a
su pueblo más cercano
Working Hypothesis
Oz
Especificación inicial
Constants
f
la función de distancias
m
la distancia máxima
n
el número de pueblos
Axioms
n ∈ N1
m ∈ N1
f ∈ 1..n × 1..n → 1..m
∀i. i ∈ 1..n ⇒ f (i, i) = m
∀i, j. i ∈ 1..n ∧ j ∈ 1..n ⇒ f (i, j) = f (j, i)
Working Hypothesis
Oz
Sistema Abstracto
Variables r
Invariant r ∈ 1..m
initialisation =
begin
r := m
end
final =
begin
r := max({k| i ∈ 1..n ∧ k = min({f (i, j)| j ∈ 1..n})})
end
Working Hypothesis
Oz
Refinamiento
q
n
p
n
Para la submatriz 1..p − 1 × 1..n ya se tiene el máximo
para la fila p, se ha calculado el mı́nimo para 1..q
Working Hypothesis
Oz
Refinamiento
Variables
r
la respuesta
s el máximo actual
t el mı́nimo actual para la fila p
p la fila en que vamos
q la columna en que vamos
Invariant
s ∈ 1..m
t ∈ 1..m
p ∈ 1..n
q ∈ 1..n
s = max({k| i ∈ 1..p − 1 ∧ k = min({f (i, j)| j ∈ 1..n})})
t = min({f (p, j)| j ∈ 1..q})
Working Hypothesis
Oz
Eventos
initialisation =
begin
p, q, r , s, t := 1, 1, m, m, m
end
final =
when p = n ∧ q = n
then r := max(s, t)
end
avance1 =
when q 6= n
then
t, q := min(t, f (p, q + 1)), q + 1
end
avance2 =
when p 6= n ∧ q = n
then
p, q, s, t := p + 1, 1, max(s, t), f (p + 1, 1)
end
Working Hypothesis
Oz
El programa
p, q, r , s, t := 1, 1, m, m, m;
while p 6= n ∨ q 6= n
do
if q 6= n then q, t := q + 1, min(t, f (p, q + 1))
else p, q, s, t := p + 1, 1, max(s, t), f (p + 1, 1)
end
invariant
s ∈ 1..m ∧ t ∈ 1..m ∧ p ∈ 1..n ∧ q ∈ 1..n
s = max({k| i ∈ 1..p − 1 ∧ k = min({f (i, j)| j ∈ 1..n})})
t = min({f (p, j)| j ∈ 1..q})
variant
m × n − ((p − 1) × n + q)
end ;
r := max(s, t)
Descargar