LOG4500 Travail Dirigé 5 Méthodes déductives de vérification Prof. John Mullins, Ph.D. Département de Génie Informatique École Polytechnique de Montréal Décembre 2004 1. Dans l’étude de cas de la section 5.3 des notes de cours, il est démontré que: S1. {1} Somme M in {∀i,j (1 ≤ i ≤ j ≤ n → s ≤ Si,j )} Montrez que: S2. {1} Somme M in {∃i,j (1 ≤ i ≤ j ≤ n ∧ s = Si,j )} 2. L’algorithme Somme Min présenté à la section 5.3 des notes de cours calcule la somme d’une section de somme minimale mais ne fournit aucune information sur la location de cette section dans le tableau. Adaptez l’algorithme vu en classe pour remedier à cela (votre algorithme ne devrait faire encore qu’une seule passe du tableau). 3. L’algorithme suivant calcule l’exponentielle ab de deux entiers a et b. Trouvez l’invariant de la boucle et prouvez la correction du programme. {1} x := a; y := b; z := 1; while ¬(y = 0) do if impair(y) then z := z ∗ x; y := y − 1; else x := x ∗ x; y := ydiv2 end od {z = ab } 4. Le progamme suivant calcule le PGCD de deux entiers x et y. Montrez: 1 {1} a := x; b := y; z := 0; while ¬(a = b) do if a > b then a := a − b else b := b − a end od {PGCD(x , y) = a} Suggestion: Utilisez les relations suivantes: (a) Si u > v alors P GCD(u, v) = P GCD(u − v, v) (b) P GCD(u, v) = P GCD(v, u) (c) P GCD(u, u) = u 5. Le binôme de Newton bin(n, k) se définit comme suit: 1 si k = n bin(n, k) = bin(n, k + 1) ∗ (k + 1) div (n − k) sinon alors soit l’algorithme suivant: {n ≥ k ≥ 0 } x := n; y := 1; b := 1; while x 6= k do b := b ∗ x div y; x := x − 1; y := y + 1 od {b = bin(n, k )} Montrer la correction de l’algorithme. 6. Montrez la correction totale de l’algorithme d’Euclide: {y > 0 } q := 0; r := x; while (r ≥ y) do r := r − y; q := q + 1 od {q ∗ y + r = x ∧ 0 ≤ r < y} 2