• 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 xavier.leroy@college-de-france.fr

(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

– ´ Ecrire une fonction qui prend en argument une liste chaˆın´ ee et retourne le nombre d’´ el´ ements diff´ erents qu’elle contient.. – Donner la complexi´ e des

Ecrire une fonction ´ Liste CreerFusion (Liste Un,Liste Deux,Liste *Fusion) r´ ealisant cette op´ eration avec cr´ eation de nouvelles cellules. La liste *Fusion contient les

Une file d’attente est un type de donn´ ee permettant l’ajout d’un ´ el´ ement et la suppression de l’´ el´ ement pr´ esent depuis le plus longtemps dans la file (premier

Nous concluerons par un exercice visant ` a stocker des entiers de fa¸con efficace dans des tableaux de listes chaˆın´ ees.. x

Donner un automate d´eterministe complet sur l’alphabet {a, b} qui reconnaˆıt les mots dont la deuxi`eme lettre est un a.. x

Trouvez un automate d´ eterministe et complet A 6 reconnaissant les nombres dont l’´ ecriture binaire est multiple de 6 par les deux m´ ethodes suivantes :2. Directement en

Montrer qu’il existe un chemin r´eussi qui contient un circuit unique- ment ´etiquet´e par des a.. En d´eduire que le langage L n’est reconnaissable par

iii) Dessiner un automate mod´elisant le jeu. Chaque ´etat repr´esente une situation diff´erente. Tout ´etat est initial sauf l’´etat dans lequel tous les jetons ont la