Université Pierre & Marie Curie Maîtrise d'informatique



Spécification et certification du logiciel
Interrogation en plus
décembre 2001






On utilisera et étendra la sorte listde spécification :
Sort: list

Uses: elt, bool

Symbols:
 nil :
® list
 cons : elt, list
® list
 mem : elt, list
® bool

Axioms: " xs:list; x, y:elt

 
[A1] (mem x nil) = false

 
[A2] (mem x (cons x xs)) = true

 
[A3] (x¹y) Þ (mem y (cons x xs)) = (mem y xs)

Question 1

Spécifiez, en étendant la sorte list, un opérateur binaire nocctel que si xest un élément de sorte eltet xsune liste alors (nocc x xs)est le nombre d'occurences de xdans xs.



Réponse 1

Extends: list

Uses: int

Symbols:
 nocc: elt, list
® int

Axioms: " xs:list; x, y:elt

 
[A4] (nocc x nil) = 0

 
[A5] (nocc x (conx x xs)) = 1 + (nocc x xs)

 
[A6] (x¹y) Þ (nocc x (cons y xs)) = (nocc x xs)

Question 2

Montrer que
  1. pour tout x:elt, pour tout xs:list,si (nocc x xs) = 0alors (mem x xs) = false
  2. pour tout x:elt, pour tout xs:list,si (nocc x xs) > 0alors (mem x xs) = true

Réponse 2.1

On montre par récurence sur xsque (nocc x xs) = 0 Þ (mem x xs) = false

Réponse 2.2

On montre par récurence sur xsque (nocc x xs) > 0 Þ (mem x xs) = true

Question 3

Soit la suite (an) telle que {
a0 = 1
an+1 = 2an+1
.

Soit le programme Asuivant :
r := 1;
i := 1;
while i
£ n do
  r := (2*r)+1;
  i := i+1
done
Montrez que pour n, entier quelconque, le triplet
[rÎIN Ù iÎIN] A [r=an]
est valide en logique de Hoare-Floyd.



Réponse 3

Initialisation

(1) Il est facile de vérifier que
rÎIN Ù iÎIN Þ r = r Ù i = i
(2) On a (règle de l'affectation)
[ r = r Ù i = i ] r := 1 [ r = 1 Ù i = i ]
(3) Par (1), (2) et renforcement de la précondition, on a
[ r ÎIN Ù i ÎIN ] r := 1 [ r = 1 Ù i = i ]
(4) On a (règle de l'affectation)
[ r = 1 Ù i = i ] i := 1 [ r = 1 Ù i = 1 ]
(5) Par (3), (4) et séquence, on a
[ r ÎIN Ù i ÎIN ] r := 1; i := 1 [ r = 1 Ù i = 1 ]
(6) Il est facile de vérifier que
r = 1 Ù i = 1 Þ (r = ai-1 Ù i-1 £ n)
(7) Par affaiblissement de la postcondition sur (5) et (6), on a
[ r ÎIN Ù i ÎIN ] r := 1; i := 1 [ r = ai-1 Ù i-1 £ n ]

Boucle

L'invariant de boucle est r = ai-1 Ù i-1 £ n

(8) Par affectation, on a
[ (2*r)+1 = ai Ù i-1 £ n Ù i £ n ] r := (2*r)+1 [ r = ai Ù i-1 £ n Ù i£ n ]
(9) Il est facile de vérifier que
r = ai-1 Þ (2*r)+1 = ai
(10) Par (8), (9) et renforcement de la précondition, on a
[ r = ai-1 Ù i-1 £ n Ù i £ n ] r := (2*r)+1 [ r = ai Ù i-1 £ n Ù i £ n ]
(11) Comme i = (i+1)-1, on a, par affectation
[ r = ai Ù i £ n ] i := i+1 [ r = ai Ù i-1 £ n ]
(12) Par renforcement de la précondition (11), on a
[ r = ai Ù i-1 £ n Ù i £ n ] i := i+1 [ r = ai Ù i-1 £ n ]
(13) Par séquence sur (10) et (12), on a
[ r = ai-1 Ù i-1 £ n Ù i £ n ]
r := (2*r)+1; i := i+1
[ r = ai Ù i-1 £ n ]
(14) Par règle de la boucle sur (13), on a
[ r = ai-1 Ù i-1 £ n ]
while i
£ n do
  r := (2*r)+1; i := i+1
done
[ r = ai-1 Ù i-1 £ n Ù ¬(i £ n) ]

Conclusion

(15) Par séquence sur (7) et (14), on a
[ r ÎIN Ù i ÎIN ]
r := 1; i := 1;
while i
£ n do
  r := (2*r)+1; i := i+1
done
[ r = ai-1 Ù i-1 £ n Ù ¬(i £ n) ]
(16) On vérifie facilement que
i-1 £ n Ù ¬(i £ n) Þ i = n+1
(17) Par renforcement de la précondition (16), on obtient donc
[ r ÎIN Ù i ÎIN ]
r := 1; i := 1;
while i
£ n do
  r := (2*r)+1; i := i+1
done
[ r = an ]

Question 4

Soit la célèbre suite (bn) dite de fibonacci {
b0 = 1
b1 = 1
bn+2 = bn+ bn+1
.

Soit le programme Bsuivant :
r1 := 1;
r2 := 1;
i := 2;
while i
£ n do
  x := r2;
  r2 := r1 + r2;
  r1 := x;
  i := i+1
done
Montrez que pour n, entier quelconque, le triplet
[r1ÎIN Ù r2ÎIN Ù iÎIN Ù xÎIN] B [r2=an]
est valide en logique de Hoare-Floyd.




This document was translated from LATEX by HEVEA.