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)