• Aucun résultat trouvé

Variables et boucles : la logique de Hoare

N/A
N/A
Protected

Academic year: 2022

Partager "Variables et boucles : la logique de Hoare"

Copied!
79
0
0

Texte intégral

(1)

Logiques de programmes, deuxi`eme cours

Variables et boucles : la logique de Hoare

Xavier Leroy 2021-03-11

Coll`ege de France, chaire de sciences du logiciel [email protected]

(2)

Les bases de la logique de Hoare

(3)

Les triplets de Hoare

Les tripletsfaibles:

{ P } c { Q }

% ↑ -

pr´econdition commande postcondition

Signification intuitive :

Si la commandec, d´emarr´ee dans un ´etat initial satisfaisantP, termine, alors l’´etat final satisfaitQ.

On verra aussi les tripletsforts[P]c[Q]qui garantissent la terminaison :la commandec, d´emarr´ee dans un ´etat initial satisfaisantP, termine toujours, et l’´etat final satisfaitQ.

2

(4)

IMP : un petit langage imp ´eratif `a contrˆ ole structur ´e

Expressions arithm´etiques :

a::=x variable du programme

|0|1|. . . constantes

|a1+a2|a1×a2|. . . op´erations Expressions bool´eennes :

b::=a1a2|. . . comparaisons

|b1andb2|notb|. . . connecteurs Commandes :

c ::=skip commande vide

|x:=a affectation

|c1;c2 s´equence

|ifbthenc1elsec2 conditionnelle

|whilebdoc boucle

(5)

Les r `egles de la logique de Hoare

faible

pour IMP

Une r`egle par construction du langage de commandes.

{P}skip{P} {Q[xa]}x :=a{Q} {P}c1{Q} {Q}c2{R}

{P}c1;c2{R}

{Pb}c1{Q} {P∧ ¬b}c2{Q} {P}ifbthenc1elsec2{Q}

{Pb}c{P} {P}whilebdoc{P∧ ¬b}

4

(6)

Les r `egles g ´en ´eriques

La r`egle de cons´equence :

PP0 {P0}c{Q0} Q0Q {P}c{Q}

Peut aussi s’´ecrire avec deux r`egles : une qui renforce la pr´econdition, l’autre qui affaiblit la postcondition.

PP0 {P0}c{Q} {P}c{Q}

{P}c{Q0} Q0Q {P}c{Q}

Note : la r`egle du haut est d´erivable des deux r`egles du bas, et r´eciproquement.

(7)

Un exemple de d ´erivation

> ⇒0=01=1

{0=01=1}x:=0{x=01=1} {x=0∧1=1}y:=1{x=0∧y=1} {0=01=1}x:=0;y:=1{x=0∧y=1} { > }x:=0;y:=1{x=0∧y=1}

6

(8)

Un exemple de d ´erivation

Une notation plus compacte, sous forme de programme IMP annot´e par des assertions :

{ > }⇒

{0=01=1} x:=0;

{x=01=1} y:=1

{x=0∧y=1}

(9)

V ´erification d’un

vrai

programme : la division euclidienne

{0≤a}⇒{a=b·0+a ∧ 0≤a} r:=a;

{a=b·0+r ∧ 0≤r} q:=0;

{a=b·q+r ∧ 0≤r} while r≥b do

{a=b·q+r ∧ 0≤r ∧ r≥b}⇒ {a=b·(q+1) + (r−b) ∧ 0≤r−b} r:=r−b;

{a=b·(q+1) +r ∧ 0≤r} q:=q+1

{a=b·q+r ∧ 0≤r} done

{a=b·q+r ∧ 0≤r ∧ r<b}⇒ {q=a/b ∧ r=amodb}

8

(10)

Travaux dirig ´es : le calcul du maximum

(Mike Gordon)

1. ´Ecrire un programme IMP qui met dansxle maximum des valeurs dexet dey.

if x<y then x:=y else skip

2. Sp´ecifier ce programme en logique de Hoare.

{ > }if x<y then x:=y else skip{x= max(x,y)}

3. V´erifier le programme vis-`a-vis de cette sp´ecification.

{x<y∧ > } ⇒ {y= max(y,y)}x:=y{x= max(x,y)} {x≥y∧ > } ⇒ {x= max(x,y)}skip{x= max(x,y)} On conclut par la r`egle pour les conditionnelles.

(11)

Travaux dirig ´es : le calcul du maximum

(Mike Gordon)

1. ´Ecrire un programme IMP qui met dansxle maximum des valeurs dexet dey.

if x<y then x:=y else skip

2. Sp´ecifier ce programme en logique de Hoare.

{ > }if x<y then x:=y else skip{x= max(x,y)}

3. V´erifier le programme vis-`a-vis de cette sp´ecification.

{x<y∧ > } ⇒ {y= max(y,y)}x:=y{x= max(x,y)} {x≥y∧ > } ⇒ {x= max(x,y)}skip{x= max(x,y)} On conclut par la r`egle pour les conditionnelles.

9

(12)

Travaux dirig ´es : le calcul du maximum

(Mike Gordon)

1. ´Ecrire un programme IMP qui met dansxle maximum des valeurs dexet dey.

if x<y then x:=y else skip

2. Sp´ecifier ce programme en logique de Hoare.

{ > }if x<y then x:=y else skip{x= max(x,y)} 3. V´erifier le programme vis-`a-vis de cette sp´ecification.

{x<y∧ > } ⇒ {y= max(y,y)}x:=y{x= max(x,y)} {x≥y∧ > } ⇒ {x= max(x,y)}skip{x= max(x,y)} On conclut par la r`egle pour les conditionnelles.

(13)

Travaux dirig ´es : le calcul du maximum

(Mike Gordon)

1. ´Ecrire un programme IMP qui met dansxle maximum des valeurs dexet dey.

if x<y then x:=y else skip

2. Sp´ecifier ce programme en logique de Hoare.

{ > }if x<y then x:=y else skip{x= max(x,y)} 3. V´erifier le programme vis-`a-vis de cette sp´ecification.

{x<y∧ > } ⇒ {y= max(y,y)}x:=y{x= max(x,y)} {x≥y∧ > } ⇒ {x= max(x,y)}skip{x= max(x,y)} On conclut par la r`egle pour les conditionnelles.

9

(14)

Est-ce la bonne sp ´ecification ?

Elle est satisfaite par de nombreux programmes ! { > } x:=y {x= max(x,y)} { > } y:=x {x= max(x,y)} { > } x:=1;y:=0 {x= max(x,y)}

La r´eponse est non ! On voulait dire

La valeur dex`a la fin du programmeest le maximum des valeurs dexet deyau d ´ebut du programme.

(15)

Est-ce la bonne sp ´ecification ?

Elle est satisfaite par de nombreux programmes ! { > } x:=y {x= max(x,y)} { > } y:=x {x= max(x,y)} { > } x:=1;y:=0 {x= max(x,y)}

La r´eponse est non ! On voulait dire

La valeur dex`a la fin du programmeest le maximum des valeurs dexet deyau d ´ebut du programme.

10

(16)

Variables auxiliaires

Une solution est de sp´ecifier en utilisant des variables

math´ematiquesα, β, . . ., distinctes des variables du programme x,y, . . .:

{x=α∧y=β}c{x=max(α, β)} Cesvariables auxiliairessont implicitement quantifi´ees universellement en tˆete du triplet :

∀α, β, {x=α∧y=β}c{x= max(α, β)}

(17)

Variables fantˆ omes

Autre possibilit´e : sp´ecifier en utilisant des variables du langage de programmation qui n’apparaissent pas dans le programme `a sp´ecifier :

{x=z}c{x= max(z,y)} avecznon libre dansc Cesvariables fantˆomeszgardent leur valeur pendant l’ex´ecution decet permettent donc de parler de l’´etatavantdans la postcondition.

12

(18)

La logique

forte

(correction totale)

Les tripletsforts:

[ P ] c [ Q ]

% ↑ -

pr´econdition commande postcondition

Signification intuitive :

La commandec, d´emarr´ee dans un ´etat initial satisfaisantP, termine dans un ´etat final satisfaisantQ.

(19)

Les r `egles de la logique de Hoare

forte

pour IMP

Seules les boucles peuvent causer la non-terminaison

⇒pour les autres constructions d’IMP, les r`eglesfortes sont semblables aux r`eglesfaibles.

[P]skip[P] [Q[xa] ]x:=a[Q] [P]c1[Q] [Q]c2[R]

[P]c1;c2[R]

[Pb]c1[Q] [P∧ ¬b]c2[Q] [P]ifbthenc1elsec2[Q] PP0 [P0]c[Q0] Q0Q

[P]c[Q]

14

(20)

V ´erifier la terminaison d’une boucle

La technique duvariant: une expressiona, `a valeurs positives, qui d´ecroˆıt strictement `a chaque tour de boucle.

∀α, [Pba=α]c[P0a< α] [P]whilebdoc[P∧ ¬b]

La boucle termine forc´ement, au bout d’au plusNit´erations, o `uN est la valeur initiale du varianta.

Note : en cas de boucles imbriqu´ees, on v´erifie la terminaison de chaque boucle ind´ependamment des autres.

(Contrairement `a Turing 1949 et Floyd 1967.)

(21)

V ´erifier la terminaison de la division euclidienne

Le variant est la variabler.

{0≤a ∧ 0<b} ⇒ {a=b·0+a ∧ 0≤a ∧ 0<b} r:=a;

{a=b·0+r ∧ 0≤r ∧ 0<b} q:=0;

{a=b·q+r ∧ 0≤r ∧ 0<b} while r≥b do

{a=b·q+r ∧ 0≤r ∧ 0<b ∧ r≥b ∧ r=α} ⇒ {a=b·(q+1) + (r−b) ∧ 0≤r−b ∧ 0<b

r:=r−b; ∧0≤r−b< α}

{a=b·(q+1) +r ∧ 0≤r ∧ 0<b ∧ 0≤r< α} q:=q+1

{a=b·q+r ∧ 0≤r ∧ 0<b ∧ 0≤r< α} done

{a=b·q+r ∧ 0≤r ∧ r<b} ⇒ {q=a/b ∧ r=amodb}

16

(22)

G ´en ´eralisation `a plusieurs variants

On peut avoir besoin de plusieurs variantsa1, . . . ,anet d’un ordre bien fond´e≺entre lesn-uplets d’entiers.

(Par exemple, un ordre lexicographique.)

∀α1, . . . , αn, [Pb∧(a1, . . . ,an) = (α1, . . . αn)] c

[P∧(a1, . . . ,an)≺(α1, . . . αn)] [P]whilebdoc[P∧ ¬b]

(23)

Ajouter des r `egles `a la logique

(24)

Une r `egle d ´eriv ´ee : la conditionnelle sans

else

Notation : ifbthencdef= ifbthencelse skip {Pb}c{Q} P∧ ¬bQ

{P}ifbthenc{Q} D ´emonstration.

Par la d´erivation suivante :

{Pb}c{Q}

P∧ ¬b⇒Q {Q}skip{Q} {P∧ ¬b}skip{Q} {P}ifbthencelse skip{Q}

(25)

Une r `egle d ´eriv ´ee : la boucle

do. . .while

Notation : docwhilebdef= c;whilebdoc {P}c{Q} QbP {P}docwhileb{Q∧ ¬b} D ´emonstration.

{P}c{Q}

QbP {P}c{Q} {Qb}c{Q}

{Q}whilebdoc{Q∧ ¬b} {P}c;whilebdoc{Q∧ ¬b}

19

(26)

Une r `egle d ´eriv ´ee : la boucle compt ´ee

for

Notation : sih,isont deux variables distinctes,

fori=`tohdoc def= i:=`;whileihdo(c;i:=i+1) On peut d´eriver un triplet fort qui garantit la terminaison de la boucle, pourvu que le corpscde la boucle ne contienne pas d’affectations ni `aini `ah.

[Pih]c[P[ii+1] ] i,hnon affect´ees dansc [P[i←`] ]fori=`tohdoc[Pi>h]

Le variant est l’expressionhi+1, qui d´ecroˆıt de 1 `a chaque tour.

(27)

Une r `egle d ´eriv ´ee : l’affectation `a la mani `ere de Floyd

{P}x:=a{ ∃x0,x=a[x←x0]∧P[x←x0]}

D ´emonstration.

NotonsQdef=∃x0,x=a[xx0]∧P[xx0].

PQ[xa] {Q[xa]}x:=a{Q} {P}x:=a{Q}

En effet, Q[xa] = ∃x0,a=a[xx0]∧P[xx0][x←a]

= ∃x0,a=a[xx0]∧P[xx0] et il suffit de prendrex0=x.

21

(28)

Quelques r `egles admissibles

Conjonction, disjonction, quantification :

{P1}c{Q1} {P2}c{Q2} {P1P2}c{Q1Q2}

{P1}c{Q1} {P2}c{Q2} {P1P2}c{Q1Q2}

xX, {P(x)}c{Q(x)} X6=∅ { ∀xX.P(x)}c{ ∀xX.Q(x)}

xX, {P(x)}c{Q(x)} { ∃xX.P(x)}c{ ∃xX.Q(x)} D ´emonstration.

R´ecurrence surcet inversion sur les d´erivations de{P1}c{Q1}, {P2}c{Q2}, etc.

(29)

Extensions du langage de

programmation

(30)

Le contrˆ ole non structur ´e

Goto considered harmful . . . or not ? Commandes : c::=. . .|goto`|`:c

Associer un invariantL(`) `a chaque ´etiquette`. Les triplets deviennentL`{P}c{Q}.

L` {L(`)}goto`{ ⊥ }

L` {L(`)}c{Q} L` {L(`)}`:c{Q}

(31)

Le non-d ´eterminisme

Permettre aux programmes d’avoir plusieurs comportements diff´erents.

c::=. . .

|c18c2 ex´ecutec1ouc2

|x:=choose(N) met un nombre entre 0 etN1 dansx

|havocx met un nombre quelconque dansx

Les autres constructions se d´eduisent dehavoc: x:=choose(N) ≈ havocx; x:=xmodN

c18c2x:=choose(2);ifx=0thenc1elsec2 x:=choose(N) ≈ x:=08x=18· · ·8x:=N1

24

(32)

Les r `egles pour le non-d ´eterminisme

La r`egle pour le choix :

{P}c1{Q} {P}c2{Q} {P}c18c2{Q} L’axiome pourchoose:

{Q[x←0]∧ · · · ∧Q[x←N1]}x:=choose(N){Q} ou { ∀α, 0≤α <NQ[x←α]}x:=choose(N){Q} L’axiome pourhavoc:

{ ∀α,Q[x←α]}havoc x{Q}

ou {Q[x←y]}havoc x{Q} siyn’apparait pas dansQ

(33)

Les assertions dynamiques

Introduisent dans le langage la possibilit´e d’´echouer pendant l’ex´ecution.

c::=. . .

|assertb (best une expression bool´eenne ; adapt´e `a la v´erification dynamique)

|assertA (Aest une assertion logique ; adapt´e `a la v´erification statique)

La v´erification doit garantir l’absence d’erreurs `a l’ex´ecution.

D’o `u la r`egle :

{PA}assertA{PA}

26

(34)

Erreurs dans les calculs arithm ´etiques

L’´evaluation d’une expression arithm´etiqueaou bool´eenneb peut aussi provoquer une erreur `a l’ex´ecution : division enti`ere par z´ero, d´ebordement arithm´etique, etc.

On peut caract´eriser l’absence d’erreurs par un pr´edicatDef: Def(cst) =Def(x) =>

Def(a1+a2) =Def(a1)∧Def(a2)∧MIN≤a1+a2≤MAX

Def(a1/a2) =Def(a1)∧Def(a2)∧a26=0∧MIN≤a1/a2≤MAX Def(a1a2) =Def(a1)∧Def(a2)

(etc.)

(35)

Erreurs dans les calculs arithm ´etiques

Dans les r`egles de la logique, on ajoute des pr´econditions pour garantir que toutes les expressions s’´evaluent sans erreurs.

{Q[xa]∧Def(a)}x:=a{Q} {Pb}c1{Q} {P∧ ¬b}c2{Q} {P∧Def(b)}ifbthenc1elsec2{Q}

{Pb}c{P∧Def(b)} {P∧Def(b)}whilebdoc{P∧ ¬b}

28

(36)

Liens avec la s ´emantique :

correction de la logique

(37)

Quelle logique pour ´enoncer et traiter les assertions ?

La vision de Hoare :

• Une logiquesur mesure,

• quiparledirectement des variables du programme (x, . . . ) et des op´erateurs du langage de programmation (+,and, . . . )

• Une assertion = une proposition de cette logique.

Une vision plus pratique :

• Une logiquestandard,

p.ex. logique du 1erordre + arithm´etique.

Parledes variables du programme et des op´erateurs du langage via unetraduction.

• Une assertion = unpr´edicatsurl’´etat m´emoire.

29

(38)

La signification des assertions

Un ´etat m´emoiresassocie une valeur `a chaque variable du programme.

´Etat m´emoire (store) s::=variable→valeur

Une assertionP(portant sur les variablesx,y, du programme) est interpr´et´ee comme unpr´edicat sur l’´etat m´emoires:

[[P]]s=P[x←s(x),y←s(y), . . .]

Exemple

L’assertion 0≤x<yest le pr´edicatλs.0≤s(x)<s(y).

(39)

S ´emantique des expressions

On se donne une s´emantique d´enotationnelle des expressions du langage : chaque expressionaest interpr´et´ee comme une

fonction[[a]] : ´etat m´emoire→valeur. Typiquement : [[x]]s=s(x) [[a1+a2]] = [[a1]]⊕[[a2]]

[[cst]]s=cst [[a1a2]] = [[a1]]⊗[[a2]]

Les op´erateurs⊕,⊗d´enotent l’addition et la multiplication du langage. Par exemple pour une arithm´etique modulo 232:

n1n2=norm(n1+n2) n1n2=norm(n1×n2)

norm(n) =nmod232 (arithm´etique non sign´ee) norm(n) = (n+231) mod232231 (arithm´etique sign´ee)

31

(40)

Substitution dans les assertions

{Q[xa]}x :=a{Q}

Dans la r`egle pour l’affectation, que signifieQ[xa]? C’est le pr´edicat[[Q]]so `us(x)est remplac´e par[[a]]s.

Par exemple :

[[ (x <10) [xx+1] ]]s= (s(x)<10) [s(x)←[[x+1]]s]

= [[x+1]]s<10= (s(x)⊕1)<10 On a, par construction

[[Q[xa] ]]s= [[Q]] (s[x←[[a]]s])

Ceci valide s´emantiquement la r`egle de Hoare pour l’affectation.

(41)

Erreurs dans les expressions arithm ´etiques

Pour mod´eliser les erreurs dans les expressions arithm´etiques (p.ex. division par z´ero), on peut ajouter une d´enotationerr:

[[a]]s∈Z+{err}

L’assertion substitu´eeQ[xa]exige que[[a]]s6=err: [[Q[xa]]]s= [[a]]s6=err∧[[Q]] (s[x ←[[a]]s]) L’assertionDef(a)doit garantir que[[a]]s6=err.

Ceci valide s´emantiquement la r`egle

{Q[xa]∧Def(a)}x:=a{Q}

33

(42)

S ´emantique des commandes

La s´emantique des commandes doit pouvoir traiter

• la divergence (non-terminaison) (bouclewhile, . . . )

• les erreurs `a l’ex´ecution (1/0, assertions dynamiques)

• le non-d´eterminisme (choose,havoc,c18c2)

On choisit une s´emantique op´erationnelle `a r´eductions :

c / sc

0

/ s

0

c / s → err

c: commande une ´etape c0: commande r´esiduelle s: ´etat m´emoireavant de calcul s0: ´etat m´emoireapr`es

err: erreur `a l’ex´ecution

(43)

R `egles de r ´eduction pour IMP

(cf. cours du 2019-11-28)

(x:=a)/s→skip/s[x←[[a]]s] (skip;c2)/sc2/s

(c1;c2)/s→(c01;c2)/s0 sic1/sc01/s0 (c1;c2)/s→err sic1/s→err (ifbthenc1elsec2)/sc1/s si[[b]]sest vrai (ifbthenc1elsec2)/sc2/s si[[b]]sest faux

(whilebdoc)/s→skip/s si[[b]]sest faux (whilebdoc)/s→(c;whilebdoc)/s si[[s]]best vrai

(havocx)/s→skip/s[xn] pour toutn (assertA)/s→skip/s si[[A]]sest vrai (assertA)/s→err si[[A]]sest faux

35

(44)

Suites de r ´eductions

Les comportements possibles d’une commandeccorrespondent

`a des suites de r´eductions pourc/s.

• Terminaison dans l’´etat finals0:r´eductions versskip/s0 c/sc1/s1→ · · · →skip/s0

• Terminaison en erreur :r´eductions verserr c/sc1/s1→ · · · →err

• Divergence :suite infinie de r´eductions c/s→ · · · →cn/sn→ · · ·

• Blocage : (ne se produit pas si la relationest compl`ete)

c/sc1/s1→ · · · →c0/s0 6→ avecc0 6=skip

(45)

Correction de la logique vis- `a-vis de la s ´emantique op ´erationnelle

L’interpr´etation intuitive des triplets :

{P}c{Q} la commandec, d´emarr´ee dans un

´etat initialssatisfaisantP, ne fait pas d’erreurs, et si elle termine, l’´etat final satisfaitQ

[P]c[Q] la commandec, d´emarr´ee dans un

´etat initialssatisfaisantP, termine toujours sans erreurs, et l’´etat final satisfaitQ

Est-ce vrai de toutes les ex´ecutions dec/spossibles d’apr`es la s´emantique op´erationnelle ?

37

(46)

Correction s ´emantique de la logique faible

Th ´eor `eme (Correction s ´emantique de la logique faible) Supposons{P}c{Q}. Soit s un ´etat m ´emoire tel que[[P]]s.

1. Sˆuret ´e : il est impossible que c/s err

2. Correction partielle : si c/s skip/s0, alors[[Q]]s0.

Nous allons esquisser plusieurs d´emonstrations. La premi`ere approche est inspir´ee par les d´emonstrations de sˆuret´e de syst`emes de types.

(47)

Correction s ´emantique de la logique faible

Lemme (Sˆuret ´e et pr ´eservation) Supposons{P}c{Q}et[[P]]s.

1. Sˆuret ´e imm ´ediate : c/s6→err

2. Pr ´eservation : si c/sc0/s0, alors il existe une pr ´econdition P0telle que{P0}c0{Q}et[[P0]]s0.

D ´emonstration.

Par cas sur les r`egles de r´eductionc/s→. . .et par inversion sur la d´erivation de{P}c{Q}.

39

(48)

Correction s ´emantique de la logique faible

Le th´eor`eme de correction s´emantique s’ensuit facilement : 1. Sˆuret´e : supposonsc/s c0/s0 →err.

Par pr´eservation, il existeP0tel que{P0}c0 {Q}et[[P0]]s0. Par sˆuret´e imm´ediate,c0/s0 6→err. Contradiction.

2. Correction partielle : supposonsc/s skip/s0.

Par pr´eservation, il existeP0tel que{P0}skip{Q}et[[P0]]s0. Par inversion sur{P0}skip{Q}, on aP0Q.

Donc,[[Q]]s0comme attendu.

(49)

L’arbre des r ´eductions

c/s c1/s1

...

err skip/s0

Une ex´ecution du programme = une branche de l’arbre.

Le programme termine toujours

= toutes les branches sont finies

= l’arbre peut ˆetre d´ecrit par unpr´edicat inductif.

41

(50)

La terminaison comme pr ´edicat inductif

Termc s Q:la commandecd´emarr´ee dans l’´etatstermine toujours, et l’´etat final satisfaitQ.

[[Q]]s Term skips Q

c6=skip c/s6→err (∀c0,s0, c/sc0/s0 ⇒Termc0s0Q) Termc s Q

Ce pr´edicat ´etant inductif, il est faux si une s´equence infinie de r´eductions existe.

(51)

Correction s ´emantique de la logique forte

Le triplet s´emantique :si l’´etat initial satisfaitP, la commandec termine dans un ´etat satisfaisantQ

[[P]]c[[Q]] def= ∀s, [[P]]s⇒Termc s Q

On montre que cette d´efinition satisfait les axiomes et les r`egles d’inf´erences de la logique de Hoare :

• [[P]]skip[[P]]

• Si[[P]]c1[[Q]]et[[Q]]c2[[R]]alors[[P]]c1;c2[[R]]

• etc.

Th ´eor `eme (Correction s ´emantique de la logique forte) Si[P]c[Q]est d ´erivable, alors[[P]]c[[Q]]est vrai.

43

(52)

Des triplets s ´emantiques au lieu de triplets axiomatiques

De plus en plus d’auteurs font l’´economie d’axiomatiser les triplets[P]c[Q]et prennent directement la d´efinition s´emantique :

[P]c[Q] def= [[P]]c[[Q]] def= ∀s, [[P]]s⇒Termc s Q Ils montrent alors les axiomes et les r`egles d’inf´erences de la logique de Hoare comme autant de lemmes sur cette d´efinition.

Cela permet alors de raisonner sur les programmes comme en logique de Hoare, mais de mani`ere s´emantiquement correcte par construction.

Ce n’est plus dans l’espritaxiomatiquede Hoare (1969), mais simplifie le formalisme et l’ajout de r`eglesa posteriori.

(53)

Des triplets s ´emantiques pour la logique faible

Peut-on suivre la mˆeme approche pour la logique faible ? Oui, en remplac¸ant le pr´edicatTermc s Qpar un pr´edicat Safec s Qqui dit que les ex´ecutions dec/sne terminent pas en erreur, et que si elles terminent alors l’´etat final satisfaitQ.

{{P}}c{{Q}} def= ∀s, [[P]]s⇒Safec s Q

45

(54)

Une d ´efinition coinductive de

Safe

De mˆeme que le pr´edicatTermest naturellement inductif, le pr´edicatSafeest naturellementcoinductif:

[[Q]]s Safe skips Q

c6=skip c/s6→err (∀c0,s0, c/sc0/s0 ⇒Safec0s0Q) Safec s Q

Avec un pr´edicat coinductif, on peut avoir des d´erivations infinies en profondeur. DoncSafec s Qest vrai sic/sdiverge sans erreurs. (par application infinie de la 2er`egle)

(55)

Une d ´efinition

step-indexed

de

Safe

Au lieu de coinduction, on peut utiliser la technique du

comptage de pas(step indexing) :

Safec s Q def= ∀n,Safenc s Q

Le pr´edicat inductifSafenc s Qsignifie que les ex´ecutions dec/s ne font pas d’erreurdans lesnpremi`eres ´etapes d’ex´ecution, et satisfontQsi elles terminenten au plusn ´etapes.

Safe0 c s Q

[[Q]]s Safen+1skips Q

c6=skip c/s6→err (∀c0,s0, c/sc0/s0 ⇒Safenc0 s0Q) Safen+1c s Q

47

(56)

Triplets s ´emantiques pour la logique faible

Tant avec la d´efinition coinductive deSafequ’avec la d´efinition step-indexed, le triplet faible s´emantique

{{P}}c{{Q}} def= ∀s, [[P]]s⇒Safec s Q

satisfait les axiomes et les r`egles de la logique de Hoare faible :

• {{P}}skip{{P}}

• Si{{P}}c1{{Q}}et{{Q}}c2{{R}}alors{{P}}c1;c2{{R}}

• Si{{Pb}}c{{P}}alors{{P}}whilebdo c{{P∧ ¬b}}

• etc.

(57)

Correction s ´emantique de la logique faible

Il en d´ecoule une autre d´emonstration de la correction s´emantique de la logique faible :

Th ´eor `eme (Correction s ´emantique de la logique faible) Si{P}c{Q}est d ´erivable, alors{{P}}c{{Q}}est vrai.

D ´emonstration.

Par r´ecurrence sur la d´erivation de{P}c{Q}.

49

(58)

Liens avec la s ´emantique :

compl ´etude de la logique

(59)

La compl ´etude d’une logique de Hoare

La r´eciproque de la correction s´emantique :

Toute propri´et´e vraie des ex´ecutions d’un programme c peut-elle ˆetre exprim´ee comme un triplet{P}c{Q}et d´eriv´ee en logique de Hoare ?

`A l’aide des triplets s´emantiques, on peut poser la question plus pr´ecis´ement :

Si{{P}}c{{Q}}, peut-on d´eriver{P}c{Q}? Si[[P]]c[[Q]], peut-on d´eriver[P]c[Q]?

50

(60)

Logique de Hoare et calculabilit ´e

La question de la compl´etude a ´et´e beaucoup ´etudi´ee dans les ann´ees 1970 en raison du lien suivant entre logique de Hoare et calculabilit´e :

Corollaire (de la correction s ´emantique)

Si{ > }c{ ⊥ }est d ´erivable, alors c ne termine pas.

Si la logique de Hoare ´etait compl`ete, on aurait une ´equivalence : { > }c{ ⊥ }est d´erivablesi et seulement sicne termine pas.

(61)

Incompl ´etude de la logique pour un langage Turing-complet

Rappel : l’ensemble des ´enonc´es d´erivables dans un syst`eme d’axiomes et de r`egles estr´ecursivement ´enum´erable (r.e.).

L’ensemble des triplets{P}c{Q}d´erivables est donc r.e.

L’ensemble des triplets{ > }c{ ⊥ }d´erivables est donc r.e.

(enfiltrantl’´enum´eration de tous les triplets).

Si la logique est compl`ete, l’ensemble des programmescqui ne terminent pas est donc r.e.

Par cons´equent, si la logique est compl`ete, le probl`eme de l’arrˆet est d´ecidable !

52

(62)

Une analyse du probl `eme

PP0 {P0}c{Q0} Q0Q {P}c{Q}

Que signifient les pr´emissesPP0etQ0Q?

Implications d´erivables dans une logique formelle.

L’ensemble de ces implications est r.e., donc{P}c{Q}est r.e., et la logique est incompl`ete.

Implications vraies (dans tous les mod`eles).

Alors{P}c{Q}n’est pas r.e. et la logique est compl`ete (transparents suivants).

(63)

Compl ´etude relative

(Stephen A. Cook,Soundness and completeness of an axiom system for program verification, SIAM J. Comput., 1978)

On peut montrer que la logique de Hoare est compl`ete si la mˆeme logiqueambianteest utilis´ee

• pour interpr´eter les implicationsPP0,Q0Qdans la r`egle de cons´equence ;

• pour d´efinir le triplet s´emantique

{{P}}c{{Q}}def= ∀s, [[P]]s⇒Safec s Q.

54

(64)

Plus faible pr ´econdition s ´emantique

On d´efinit la plus faible pr´econdition s´emantique (weakest (liberal) precondition) de la commandecavec postconditionQ:

wpsemc Q def= λs.Safec s Q Par d´efinition du triplet s´emantique, on a

{{P}}c{{Q}} si et seulement si P⇒wpsemc Q Lemme (la plus faible pr ´econdition s ´emantique est d ´erivable) {wpsemc Q}c{Q}est d ´erivable en logique de Hoare.

D ´emonstration.

R´ecurrence surcetinversionssur le pr´edicatSafe, p.ex.

Safe(c1;c2)s QimpliqueSafec1s(wpsemc2Q).

(65)

Compl ´etude relative

Th ´eor `eme (compl ´etude relative)

Si{{P}}c{{Q}}est d ´emontrable dans une logique L,

alors{P}c{Q}est d ´erivable dans la logique de Hoare utilisant la logique L pour les implications de la r `egle de cons ´equence.

D ´emonstration.

Par hypoth`ese{{P}}c{{Q}}, on aP⇒wpsemc Q.

Par le lemme, on peut d´eriver{wpsemc Q}c{Q}. On conclut{P}c{Q}par la r`egle de cons´equence.

56

(66)

Vers l’automatisation :

un calcul des plus faibles

pr ´econditions

(67)

La v ´erification d ´eductive (rappel)

Programme Assertions

logique

de programmes Conditions de

v´erification

d´emonstration manuelle, automatique, ou interactive OK / alarme

Comment engendrer les conditions de v´erification ? Comment minimiser la quantit´e d’assertions `a fournir ?

57

(68)

Programmes compl `etement annot ´es

{0a} ⇒ {a=b·0+a 0a} r:=a;

{a=b·0+r 0r} q:=0;

{a=b·q+r 0r} while rb do

{a=b·q+r 0r rb} ⇒ {a=b·(q+1) + (rb) 0rb} r:=rb;

{a=b·(q+1) +r 0r} q:=q+1

{a=b·q+r 0r} done

{a=b·q+r 0r r<b} ⇒ {q=a/b r=amodb}

Conditions de v´erification : les ´etapeso `u on applique la r`egle de cons´equence.

(69)

R ´eduire la quantit ´e d’annotations `a fournir

Pour v´erifier un sous-programmec, il suffit de fournir

• la pr´econditionP

• la postconditionQ

• un invariant de boucleInvpour chaque boucle dansc. Les autres assertions logiques et les conditions de v´erification s’obtiennent alors par calcul deplus faibles pr´econditionsou de plus fortes postconditions.

59

(70)

Plus faible pr ´econdition

La plus faible pr´econdition (weakest precondition) d’une commandecavec postconditionQest une assertionwpc Q telle que

• c’est une pr´econdition :[wpc Q]c[Q];

• c’est la plus faible : si[P]c[Q]alorsP⇒wpc Q. Par cons´equent :

[P]c[Q] si et seulement si P⇒wpc Q

Intuition : les hypoth`eses n´ecessaires pour que le codeccalcule bien le r´esultat d´ecrit par la postconditionQ.

Intuition originale (Dijkstra, 1975) : synth´etiser le codecpar raffinement `a partir de sa postconditionQ.

(71)

Autres

transformateurs de pr ´edicats

Plus faible pr´econdition lib´erale wlpc Q

(weakest liberal precondition) Commewpmais ne garantit pas la terminaison :

{P}c{Q} si et seulement si P⇒wlpc Q Plus forte postcondition (lib´erale) spP c slpP c

(strongest (liberal) postcondition) [P]c[Q] si et seulement si spP cQ

{P}c{Q} si et seulement si slpP cQ Intuition : ex´ecution symbolique dec `a partir d’un ´etat satisfaisantP.

61

(72)

Calculer la plus faible pr ´econdition

Une caract´erisation non effective :wlpc Q=W

{P| {P}c{Q}}

Pour les programmes sans boucles, une d´efinition r´ecursive surc: wlp skipQ=Q

wlp(x:=a)Q=Q[xa]

wlp(c1;c2)Q=wlpc1(wlpc2Q)

wlp(ifbthenc1elsec2)Q= (b∧wlpc1Q)∨(¬b∧wlpc2Q) wlp(havocx)Q=∀n, Q[xn]

wlp(assertA)Q=AQ (Les mˆemes ´equations sont valides pourwp.)

(73)

Plus faible pr ´econdition lib ´erale pour une boucle

Non calculable en g´en´eral :wlp(whilebdoc)Q=W

iPi avecP0bQetPi+1=b∧wlpc Pi.

On demande au programmeur d’annoter chaque boucle par son invariantInv. Alors :

wlp(whileInv bdoc)Q=Inv

`a condition que

bInv⇒wlpc Inv et ¬bInvQ

Pour calculerwp, il faut aussi annoter la boucle par le variant qui en garantit la terminaison.

63

(74)

Un semi-algorithme de v ´erification d ´eductive

Pour v´erifier{P}c{Q}, supposant annot´ees les boucles dec: 1. Calculerwlpc Qet les conditions de v´erificationvcc Q:

vc(whileInv bdoc)Q= (bInv⇒wlpc Inv)

∧(¬bInvQ)

∧vcc Inv vc skipQ=>

vc(c1;c2)Q=vcc1(wlpc2Q)∧vcc2Q et de mˆeme pour les autres constructions du langage.

2. D´emontrer(P⇒wlpc Q)∧vcc Q, qui est une formule de logique usuelle, `a l’aide d’un d´emonstrateur automatique.

(75)

Calculer et v ´erifier la plus forte postcondition lib ´erale

Pour m´emoire, les ´equations pourslp: slpPskip=P

slpP(x:=a) =∃x0,x=a[xx0]∧P[xx0] slpP(c1;c2) =slp(slpP c1)c2

slpP(ifbthenc1elsec2) =slp(b∧P)c1∨slp(¬b∧P)c2 slpP(whileInv bdoc) =¬b∧Inv

slpP(havoc x) =∃x0,P[xx0] slpP(assertA) =AP

et les conditions de v´erification non triviales :

vcP(whileInv bdoc) = (PInv)∧(sp(b∧Inv)cInv)

∧vc(b∧Inv)c vcP(assertA) =PA

65

(76)

Point d’ ´etape

(77)

Point d’ ´etape sur la logique de Hoare

Un formalisme tr`es riche.

Deux visions compl´ementaires :

• La vision axiomatique : les r`egles d´efinissent le langage.

• La vision op´erationnelle : les r`egles sont des th´eor`emes qui facilitent le raisonnement sur les ex´ecutions des

programmes.

S’´etend assez facilement `a de nombreusesstructures de contrˆole (goto,break,return, exceptions, proc´edures, . . . ).

Quid desstructures de donn´ees? (→prochain cours)

66

(78)

Bibliographie

(79)

Bibliographie

Deux pr´esentations de la logique de Hoare :

• H. R. Nielson et F. Nielson,Semantics with Applications : an appetizer, Springer, 2007, ch. 9 et 10.

(Suit l’approche op´erationnelle.)

• G. Winskel,The Formal Semantics of Programming Languages, MIT Press, 1993, ch. 6 et 7.

(Suit l’approche axiomatique classique. Discussion tr`es compl`ete de la question de la compl´etude.)

M´ecanisations de la logique de Hoare :

• Le d´eveloppement Coq correspondant `a ce cours :

https://github.com/xavierleroy/cdf-program-logics

• T. Nipkow et G. Klein,Concrete Semantics, chap. 12.

67

Références

Documents relatifs

Comme le calcul des ACG dispose d’une λ-abstraction linéaire, une proposition relative peut toujours être représenté au niveau abstrait comme une fonction retournant un terme de

Calcul du Pourcentage (A) Réponses Calculez le pourcentage ou la valeur

Calcul du Pourcentage (A) Réponses Calculez le pourcentage ou la valeur

Examen du Lundi 4 juin 2007 de 15h ` a 18h Les notes de cours et de travaux dirig´ es peuvent ˆ etre consult´ ees.

Bernard Dhuicq Dictionnaire de l'anglais juridique, Langues pour tous, 2004 Frédéric-Jérôme Pansier, Legal English, la maison du Dictionnaire, 2008 TYPE D’ENSEIGNEMENT :.

La Gendarmerie royale du Canada travaillera en collaboration avec le Secrétariat du Conseil du Trésor et Travaux publics et Services gouvernementaux Canada afin d’élaborer, d’ici

Le système le plus simple (et le système le plus faible dit “normal”) de logique modale propositionnelle est le système K... ” ne contient pas

Dans de nombreux problèmes courants d'ordonnancement, notamment dans le calcul d'un réseau PERT, on recherche le maximum de plusieurs valeurs, maximum de la durée de plusieurs