CSI 3525, S - PowerPoint PPT Presentation

About This Presentation
Title:

CSI 3525, S

Description:

La d monstration que le r sultat finale est la cons quence logique des conditions initiales, apr s tre pass ... Appliquons la r gle d'inf rence pour la composition. ... – PowerPoint PPT presentation

Number of Views:22
Avg rating:3.0/5.0
Slides: 58
Provided by: alanwi8
Category:
Tags: csi | appliquons

less

Transcript and Presenter's Notes

Title: CSI 3525, S


1
Sémantique axiomatique
  • Assignations
  • Composition dinstructions
  • Linstruction "if-else"
  • Linstruction "while"
  • Rétrécissement et élargissement
  • Arrêt
  • Linstruction "if"

2
Vérification dun programme
  • La vérification des programmes est faite en deux
    étapes
  • Lassociation dune formule à chaque étape du
    programme.
  • La démonstration que le résultat finale est la
    conséquence logique des conditions initiales,
    après être passé par les étapes du programme.

3
Quest-ce que la sémantique axiomatique?
  • La sémantique axiomatique des assignations,
    instructions composés, instructions
    conditionnelles et instructions itératives fut
    développée par le professeur C. A. R. Hoare.
  • Les éléments de base sont les formules pour
    lassignation et la condition.
  • Leffet des autres instructions est décrit par la
    règle dinférence qui combine les formules
    dassignations et de conditions (tout comme les
    instructions sont elle même des combinaisons
    dassignations et de conditions).

4
Lassignation
  • Soit ? une formule contenant la variable v.
  • ? v ? e est alors définie comme la formule
    obtenue à partir de ? quand toutes les
    occurrences de la variable v sont remplacées par
    lexpression e.

5
Remplacement, un exemple
  • Avant le remplacement
  • ? ? h gt 0 h lt n n gt 0
  • h ? 0 ? 0 gt 0 0 lt n n gt 0
  • Après le replacement

6
Autre exemple
  • ? ? m min(ai pour 1 lt i lt k1)
  • k1 lt N
  • ?k ? k1 ? m min(ai pour 1 lt i lt (k1) 1)
  • (k1)1 lt N
  • ? m min(ai pour 1 lt i lt k) k lt N

7
Laxiome pour lassignation
  • ?v ? e v e ?
  • Exemple
  • 0 gt 0 0 lt n n gt 0
  • x 0
  • x gt 0 x lt n n gt 0

8
Deux exercices
??? z z 1 z lt N a gt b
a a b ???
9
Composition dinstructions
  • Supposons que
  • ? S ?
  • et
  • ? S ?
  • Alors, on conclu que
  • ? S S ?
  • En autre mots
  • ? S ? S ?

10
Un exemple
  • x 0 f 1
  • while (x ! n)
  • x x 1
  • f f x
  • Nous voulons prouver
  • f x! x x 1f f x
  • f x!

11
Le factoriel
  • Appliquons la règle dinférence pour la
    composition.
  • ? est f x!
  • ? est f x!
  • S est x x 1
  • S est f f x

12
Le factoriel (2)
  • Nous cherchons le ? pour lequel
  • f x! x x 1
  • ?
  • f f x f x!
  • Observons que f x! ? f ((x 1) 1)!
  • Et donc f (x 1)! x ? x 1 ? f x!
  • f x! x x 1 f (x 1)!

?
?
S
13
Le factoriel (3)
  • Maintenant, observons que
  • f (x 1)! ? f x (x 1)! x x!
  • Donc, nous avons
  • f x! f ? f x ? f (x 1)!
  • Et ainsi
  • f (x 1)! f f x f x!
  • QED

?
?
S
14
Linstruction "if-else"
  • Supposons que
  • ? ? S ?
  • et
  • ? ? ? S ?
  • Alors, on conclu que
  • ? if ( ? ) S else S ?
  • Peu importe le cas choisi par linstruction
    if-else, le résultat est la même formule ?.
    Donc linstruction if-else en entier résulte en
    la formule ?.

15
"if-else", un exemple
  • Linstruction
  • if ( a lt 0 ) b -a else b a
  • Rend la formule b abs(a) vrai.
  • Plus spécifiquement
  • trueif ( a lt 0 ) b -a else b a b
    abs(a)
  • ? est true
  • ? est b abs(a)
  • ? est a lt 0
  • S est b -a
  • S est b a

16
"if-else", un exemple (2)
  • Considerons chaque cas. Premièrement, si ? est
    vrai
  • true a lt 0 ? a lt 0 ? a abs(a)
  • Alors, daprès laxiome de lassignation
  • a abs(a) b -a b abs(a)
  • De la même façon, si ? ? est vrai
  • true ? a lt 0 ? a ? 0 ? a abs(a)
  • Alors
  • a abs(a) b a b abs(a)

17
"if-else", un exemple (3)
  • Donc S et S résultent en
  • b abs(a)
  • Nous avons donc prouvé
  • trueif ( a lt 0 ) b -a else b a b
    abs(a)
  • En autre mots, cette expression conditionnelle
    trouve abs(a). Elle fait avec aucune
    précondition "true" signifie quil ny a aucune
    restriction sur les valeurs initiales de a et b.

18
Linstruction "while"
  • Un invariant de boucle est une condition qui est
    satisfaite immédiatement avant le début dune
    boucle, demeure vrai lors de son exécution, et
    est toujours satisfaite à la sortie de la boucle.
  • Supposons que
  • ? ? S ?
  • Cest à dire, S préserve ? (linvariant de
    boucle)
  • Alors, on conclu que
  • ? while ( ? ) S ? ? ?
  • En autant que la boucle se termine (quelle nest
    pas infini).

19
Le factoriel (encore)
  • x 0 f 1
  • while ( x ! n )
  • x x 1
  • f f x
  • On sait que n 0. Après les instructions
  • x 0 f 1
  • ce qui implique que f x! (1 0!)
  • Nous avons déjà démontré que
  • f x! x x 1 f f x f x!

20
Le factoriel (encore) (2)
  • Maintenant, ? est f x! ? est x ! n ?
    ? est x n
  • En utilisant la règle dinférence pour les
    boucles "while"
  • f x!
  • while ( x ! n )
  • x x 1
  • f f x
  • f x! x n

21
Le factoriel (encore) (3)
  • Alors après la boucle, on a
  • f x! x n ? f n!
  • Ainsi
  • true x 0 f 1 f x!
  • et
  • f x! while ( x ! n )
  • x x 1
  • f f x
  • f n!

22
Le factoriel (encore) (4)
  • Donc, nous avons montré que la boucle détermine f
    n!, avec aucune précondition sur les valeurs
    initiales de f et n, tant que n 0.
  • Ainsi, avec laxiome de la composition
  • true x 0 f 1
  • while ( x ! n )
  • x x 1
  • f f x
  • f n!
  • Donc, le programme calcule le factoriel de n.

23
Le factoriel (encore) (5)
  • Le résonnement est le suivant pour la boucle une
    variable est ajustée rendant linvariant
    temporairement faux, mais un autre ajustement est
    fait qui rétablie linvariant. Donc linvariant
    est vérifié à la fin de la boucle.
  • f x! x x 1 f (x 1)!
  • Linvariant est maintenant temporairement faux
  • f (x 1)! f f x f x!
  • Linvariant est maintenant rétablie
  • Ce raisonnement nest pas valide pour les boucles
    infiniela condition ? ? ? nest pas atteinte,
    et la situation est indéterminée suivant la
    boucle.

24
Rétrécissement et élargissement
  • Supposons que
  • ? ? ?
  • et
  • ? S ?
  • Alors, on conclu que
  • ? S ?
  • Supposons que
  • ? S ?
  • et
  • ? ? ?
  • Alors, on conclu que
  • ? S ?

Ces règles peuvent permettre de rétrécir une
précondition, ou délargir une postcondition.
25
Rétrécissement et élargissement, un exemple
  • Nous avons vu que n! est calculé pour tout ngt0,
    avec true comme précondition (le calcul réussit
    toujours)
  • Donc, selon laxiome du rétrécissement, le calcul
    de n! réussira également pour n 5.

26
Autre exemple
  • N gt 1 ?
  • N gt 1 1 1 a1 a1 i 1 s
    a1
  • N gt 1 i 1 s a1 ?
  • N gt 1 s a1 ai ? INVARIANT
  • while ( i ! N )
  • N gt 1 s a1 ai i ! N
  • i i 1
  • N gt 1 s a1 ai1 i 1 ! N
  • s s ai
  • N gt 1 s a1 ai
  • N gt 1 s a1 ai i N ?
  • N gt 1 s a1 aN

27
Autre exemple (2)
  • Nous avons montré que ce programme calcul la
    somme de a1, ..., aN.
  • La précondition N gt 1 est seulement nécessaire
    pour démontrer la terminaison.

28
Arrêt
  • Les preuves précédentes sont seulement
    partiellement correcte.
  • Il reste a démontrer que les boucles se
    terminent.
  • Une preuve correcte doit également montrer que
    toutes les boucles auront toujours un nombre fini
    ditérations.
  • On peut montrer quune boucle se terminera en
    montrant que chaque itération nous rapproche de
    la condition darrêt.

29
Encore le factoriel
  • Initialement, x 0.
  • Chaque itération incrémente x de 1, donc, on
    passe par les nombres 0, 1, 2, ...
  • n gt 0 sera nécessairement un de ces nombres
  • Ce raisonnement ne fonctionnerait pas pour n lt 0,
    et la condition darrêt ne serait pas atteinte
    pour ces valeurs.

30
Une fonction décroissante
  • Une boucle termine quand une fonction des
    variables du programme atteint 0 lors de
    lexécution de la boucle.
  • Pour le factoriel, la fonction pourrait être
    n x. La valeur de la fonction est initialement
    n et diminue de 1 à chaque itération.
  • Pour la somme, on peut choisir N i.

31
Multiplication par des additions successives
  • B gt 0 B B 0 0 ? POUR LARRÊT
  • b B p 0
  • b B p 0 ? p A (B b) ?
    INVARIANT
  • while ( b ! 0 )
  • p p A
  • p A (B (b 1))
  • b b - 1
  • p A (B b)
  • p A (B b) b 0 ?
  • p A B
  • La boucle termine, puisque la valeur de b atteint
    0.

32
Exemple
  • Montrons que
  • p a a b b p
  • échange les valeurs de a et b
  • a A b B
  • p a a b b p
  • b A a B
  • Les étapes de la preuve
  • a A b B p a
  • p A b B a b
  • p A a B b p
  • b A a B

33
Exemple
Quel est leffet de la suite dinstruction
suivante sur les variables entières x, y
  • x x y
  • y x - y
  • x x - y

34
Exemple (suite)
  • x X y Y ?
  • x y X Y y Y x x y
  • x X Y y Y ?
  • x X Y x - y X y x - y
  • x X Y y X ?
  • x - y Y y X x x - y
  • x Y y X

35
Le plus grand commun diviseur
  • X gt 0 Y gt 0
  • a X b Y
  • ? ? que devrait-être linvariant?
  • while ( a ! b ) ? a ! b
  • if ( a gt b ) ? a ! b a gt b
  • a a - b
  • else ? a ! b ? (a gt b)
  • b b - a
  • ? ? (a ! b)
  • PGCD( X, Y ) a

36
PGCD (2)
  • On aura besoin de ces propriétés des pgcd
  • PGCD( n m, m ) PGCD( n, m )
  • PGCD( n, m n ) PGCD( n, m )
  • La première étape (de façon très formelle)
  • X gt 0 Y gt 0 ?
  • X gt 0 Y gt 0 X X Y Y
  • a X b Y
  • a gt 0 b gt 0 a X b Y

37
PGCD (3)
  • Quand la boucle termine, on a a b PGCD(
    a, b ) aOn voudra probablement donc cette
    condition dans linvariant
  • a b PGCD( X, Y ) PGCD( a, b )
  • Au début de la boucle
  • a gt 0 b gt 0 a X b Y ?
  • a gt 0 b gt 0 PGCD( X, Y ) PGCD( a, b )
  • Donc linvariant sera
  • a gt 0 b gt 0 PGCD( X, Y ) PGCD( a, b )

38
PGCD (4)
  • On veut prouver que
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b)
    a ! b
  • while ......
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b)
  • La condition finale sera donc
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b) a
    b
  • Ce qui implique
  • PGCD( X, Y ) a

39
PGCD (5)
  • La boucle consiste en une instruction
    conditionnelle.
  • La preuve sera faite si on démontre
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b)
    a ! b
  • if ( a gt b )
  • a a - b
  • else
  • b b - a
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b)

40
PGCD (6)
  • Considérons le cas a gt b
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b) a
    ! b a gt b ?
  • a b gt 0 b gt 0 PGCD(X, Y) PGCD(a
    b, b)
  • a a - b
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b)

41
PGCD (7)
  • Maintenant, le cas ? a gt b.
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b)
    a ! b ? (a gt b) ?
  • a gt 0 b a gt 0 PGCD(X, Y) PGCD(a, b
    a)
  • b b - a
  • a gt 0 b gt 0 PGCD(X, Y) PGCD(a, b)

42
PGCD (8)
  • Les deux cas du if-else emmènent la même
    condition finale. Il reste seulement à montrer
    que la boucle termine.
  • On montre que max( a, b ) diminue à chaque
    itération de la boucle.
  • Soit a A, b B au début dune itération.
  • Supposons dabord que a gt b
  • max( a, b ) A,
  • donc a b lt A, b lt A,
  • donc max( a b, b ) lt A.

43
PGCD (9)
  • Et si a lt b
  • max( a, b ) B,
  • b a lt B, a lt B,
  • donc max( a, b a ) lt B.
  • Puisque a gt 0 et b gt 0, max( a, b ) gt 0.
  • Donc la diminution de a et b ne peut pas se
    poursuivre indéfiniment.
  • QED

44
Linstruction "if"
  • Supposons que
  • ? ? S ?
  • et
  • ? ? ? ? ?
  • Alors, on conclu que
  • ? if ( ? ) S ?

45
Un exemple de "if"
  • Démontrons que
  • N gt 0
  • k 1 m a1
  • while ( k ! N )
  • k k 1
  • if ( ak lt m ) m ak
  • m min( 1 lt i i lt N ai )

46
Minimum (1)
  • Le fait que la boucle se termine est évidant
  • N k vers zéro.
  • Linvariant de la boucle à la kième itération,
    après avoir inspecté a1, ..., ak, on sait que m
    min( 1 lt i i lt k ai ).
  • Initialement, on a
  • N gt 0 k 1 m a1
  • k 1 m a1 ?
  • k 1 m min( 1 lt i i lt k ai )

47
Minimum (2)
  • Nous devons donc démontrer
  • m min( 1 lt i i lt k ai ) k ! N
  • k k 1
  • if ( ak lt m ) m ak
  • m min( 1 lt i i lt k ai )

48
Minimum (3)
  • m min( 1 lt i i lt k ai ) k ! N
    ?
  • m min( 1 lt i i lt (k 1) 1 ai )
    (k 1) 1 ! N
  • k k 1
  • m min( 1 lt i i lt k 1 ai ) k 1
    ! N
  • Notons que k 1 ! N assure lexistence de ak.

49
Minimum (4)
  • Il reste à démontrer
  • m min( 1 lt i i lt k 1 ai ) k 1
    ! N
  • if ( ak lt m ) m ak
  • m min( 1 lt i i lt k ai )
  • On utilisera le fait que
  • min( 1 lt i i lt k ai ) min2( min( 1 lt i
    i lt k 1 ai ), ak )

50
Minimum (5)
  • Considérons les deux cas de lexpression
    conditionnelle.
  • Premièrement, ?(ak lt m).
  • m min(1 lt i i lt k 1 ai ) k 1 ! N
    ?(ak lt m) ?
  • m min2(min( 1 lt i i lt k 1 ai ), ak )
    ?
  • m min(1 lt i i lt k ai )

51
Minimum (6)
  • Deuxièmement, ak lt m.
  • m min(1 lt i i lt k 1 ai ) k 1 !
    N ak lt m ?
  • ak min2( min( 1 lt i i lt k 1 ai ), ak
    ) ?
  • ak min(1 lt i i lt k ai )
  • m ak
  • m min(1 lt i i lt k ai )
  • Donc la boucle préserve la condition
  • m min( 1 lt i i lt k ai )

52
Minimum (7)
  • La boucle en entier fonctionne donc ainsi
  • m min( 1 lt i i lt k ai )
  • while ( k ! N )
  • k k 1 if ( ak lt m ) ak m
  • m min( 1 lt i i lt k ai ) k N ?
  • m min( 1 lt i i lt N ai )
  • Nous avons montré que le programme trouve le
    minimum parmi N nombres, si N gt 0.
  • QED

53
Encore une boucle "while"
Exemples
  • B gt 0 ? POUR LA TERMINAISON
  • b 1 p A
  • while ( b ! B )
  • b b 1
  • p p A
  • ???

54
Exemples
Encore une boucle "while (2)
  • B gt 0 1 1 A A ? POUR LA
    TERMINAISON
  • b 1 p A
  • b 1 p A ? p A b ?
    INVARIANT
  • while ( b ! B )
  • b b 1
  • p A (b - 1)
  • p p A
  • p A b
  • p A b b B ?
  • p A B
  • La boucle se termine la valeur B - b devient 0.

55
Un autre example avec "if"
Exemples
  • N gt 0 ? POUR LA TERMINAISON
  • k 1
  • while ( k ! N )
  • if ( Ak gt Ak1 )
  • p Ak Ak Ak1 Ak1 p
  • k k 1
  • ???

56
Un autre example avec "if (2)
Exemples
  • N gt 0 ? FOR TERMINATION
  • k 1
  • Ak max( 1 lt i i lt k Ai ) ?
    INVARIANT
  • while ( k ! N )
  • Ak max( 1 lt i i lt k Ai ) k
    ! N
  • if ( Ak gt Ak1 )
  • p Ak Ak Ak1 Ak1 p
  • Ak1 max( 1 lt i i lt k1 Ai )
  • k k 1
  • Ak max( 1 lt i i lt k Ai )
  • Ak max( 1 lt i i lt k Ai ) k N ?
  • AN max( 1 lt i i lt N Ai )

57
Examples
Un autre example avec "if (3)
  • Ak max( 1 lt i i lt k Ai ) k ! N
  • Cas 1 Ak gt Ak1
  • Ak max( 1 lt i i lt k Ai ) k ! N
    Ak gt Ak1
  • p Ak p gt Ak1
  • Ak Ak1 p gt Ak
  • Ak1 p Ak1 gt Ak
  • Ak1 max( 1 lt i i lt k1 Ai )
  • Cas 2 Ak lt Ak1
  • Ak max( 1 lt i i lt k Ai ) k ! N
    Ak lt Ak1 ?
  • Ak1 max( 1 lt i i lt k1 Ai )
Write a Comment
User Comments (0)
About PowerShow.com