INF 321
S´ emantique des boucles et de la r´ ecursion
Eric Goubault
Cours 7
24 juin 2013
Dans le dernier ´ episode...
On a vu:
Logique des pr´edicats du premier ordre JML
On va voir:
Retour sur la s´emantique des boucles et de la r´ecursivit´e En vue de d´eterminer un syst`eme de preuves pour les programmes (cours 8)
S´ emantique ´ el´ ementaire (rappel cours 1)
On avait ´et´e assez peu pr´ecis aux cours 1 et 2, pour simplifier...Reprenons...
Langage
Sorte de fragment imp´eratif de Java, sans les tableaux ni les r´ef´erences:
Var les variables, Val les valeurs, les environnements ρ∈Env⊥
sontρ : Var→Val⊥, codent les fonctions partielles de Var vers Val; par abus de notation, on d´efinit l’environnement ⊥ tel que⊥(x) =⊥pour toutx ∈Var
Expressions arithm´etiques AExpr, tests BExpr, affectation, test, boucle while
Rappel: s´ emantique ´ el´ ementaire, hors boucles
Expressions arithm´etiques
Poura∈AExpr, on d´efinit par r´ecurrence structurelle [[a]] : Env⊥ →Val⊥ par:
[[n]]ρ = n
[[v]]ρ = ρ(v)
[[a0+a1]]ρ = [[a0]]ρ+ [[a1]]ρ [[a0−a1]]ρ = [[a0]]ρ−[[a1]]ρ [[a0∗a1]]ρ = ([[a0]]ρ) ([[a1]]ρ) . . .
(l’addition etc. ici sont en fait les extensionsstrictes des additions sur Val, c-.`a-.d. que⊥+x =x+⊥=⊥etc.)
Exemple (rappel, cours 1)
Dans l’environnementρ o`u ρ(y) = 3:
[[3∗y+ 5]]ρ = [[3∗y]]ρ+ [[5]]ρ
= [[3∗y]]ρ+ 5
= ([[3]]ρ) ([[y]]ρ) + 5
= 3∗3 + 5
= 14 Ouf!
Rappel: s´ emantique ´ el´ ementaire, hors boucles
Expressions bool´eennes
Pourb ∈BExpr on d´efinit par r´ecurrence structurelle [[b]] : Env⊥→ {true,false}⊥ par:
[[true]]ρ = true [[false]]ρ = false [[a0 ==a1]]ρ =
true si [[a0]]ρ= [[a1]]ρ6=⊥
⊥ si [[a0]]ρ=⊥ ou [[a1]]ρ=⊥ false sinon
[[a0 <a1]]ρ =
true si [[a0]]ρ <[[a1]]ρ
⊥ si [[a0]]ρ=⊥ ou [[a1]]ρ=⊥ false sinon
. . .
Rappel: s´ emantique ´ el´ ementaire, hors boucles
Affectation
Pourv ∈Var; e ∈AExpr, et ρ∈Env⊥: [[v =e]]ρ=ρ[[[e]]ρ/v]
O`u, pouru,v ∈Var et n∈Val:
ρ[n/v](u) =
ρ(u) si u6=v n si u=v Conditionnelle
[[ifb p1 else p2]]ρ=
[[p1]]ρ si [[b]]ρ=true [[p2]]ρ si [[b]]ρ=false
⊥ si [[b]]ρ=⊥
Exemple (rappel, cours 1)
Interpr´etation d’une affectation simple
Consid´eronsx = 3∗y+ 5 dans l’environnement ρtel queρ(y) = 3 etρ(x) = 1, on obtient l’environnementσ avec
σ(u) =
ρ(u) = 3 si u =y
[[3∗y+ 5]]ρ= 14 si u =x
S´ emantique ´ el´ ementaire des boucles (rappel)
Valeur ind´efinie
Toutes les boucles ne terminent pas!
w h i l e (t r u e) { . . .
}
[[P]]ρ ne peut donc toujours renvoyer unσ ∈Env; seulement fonction partielle ou fonction totale `a valeur dans Env∪ {⊥}!
[[P]]ρ=⊥si P ne termine pas!
S´emantique par approximations finies des boucles Principe...: limite d’une suite [[Pn]] des it´er´ees ni`eme de la boucle...
S´ emantique des boucles
On devrait avoir...
Pour w = while b { c }, on doit avoir w ∼ifb thenc;w else skip
(skipest une instruction qui ne fait rien, [[skip]]ρ=ρ) Donc on doit avoir:
[[w]]ρ =
[[c;w]]ρ si [[b]]ρ=true [[skip]]ρ si [[b]]ρ=false
=
[[w]] ([[c]]ρ) si [[b]]ρ=true ρ si [[b]]ρ=false D´efinition circulaire!
Equation aux points fixes
Soit φune fonction partiellede Env vers Env - ou de fa¸con
´
equivalente une fonction totale de Env∪ {⊥}vers Env∪ {⊥}
(que l’on ´ecrit Env⊥), et stricte (φ(⊥) =⊥)
Soit F la fonctionnellestricte envoyant φ: Env⊥→Env⊥ vers un autre tel F(φ) : Env⊥→Env⊥:
F(φ)(ρ) =
φ([[c]]ρ) si [[b]]ρ=true ρ si [[b]]ρ=false
⊥ si [[b]]ρ=⊥
On veut φtel queφ=F(φ) point fixe! (en fait le plus petit en un certain sens...)
Sens de ce point fixe?
On n’a pas:
...de continuit´e et de support compact, de fonctions k-Lipschiptziennes et autres...
Mais on a:
...une structure partiellement ordonn´ee de fonctions partielles, et des th´eor`emes de points fixes pour ces structures!
Cadre g´ en´ eral
Ordres partiels
Couple (P,≤) d’un ensembleP et d’une relation binaire
≤⊆P×P telle que:
≤est r´eflexive: ∀p ∈P,p ≤p
≤est transitive: ∀p,q,r ∈P,p≤q & q ≤r =⇒ p ≤r
≤est anti-sym´etrique: ∀p,q∈P,p≤q & q ≤p =⇒ p=q Exemples
(R,≤) ; en plus on a x ≤y ouy ≤x pour toutx,y ∈R: ordretotal
(℘(S),⊆) : sous-ensembles d’un ensemble S, et inclusion
Dans les cas qui nous int´ eressent
Ordre sur Env⊥
Pourρ∈Env⊥, (cf. exos) ρ0 ∈Env⊥,
ρ≤ρ0 si
ρ0(x) =ρ(x) ∀x t.q. ρ(x)6=⊥
(ρrestrictiondeρ0 `a un sous-domaine de Var; ouρ0 extensiondeρ)
x1 x2 x3 . . . xn Var ρ/ρ0
⊥ ⊥ ⊥
Majorants, minorants
Soit (P,≤) un ordre partiel PourX ⊆P:
p est un majorant deX si∀q∈X,q ≤p p est le plus petit majorant (sup) si:
pest un majorant deX
pour tous les majorantsqdeX,p≤q Le plus petit majorant, s’il existe, est not´e: S
X
De mˆeme (en renversant l’ordre), on d´efinit les minorants, et le plus grand des minorants (inf) s’il existe, que l’on noteT
X Un treillis est un ordre partiel ayant un sup et uninf pour tout X `a deux ´el´ements (et par r´ecurrence, pour tout ensemble fini non videX)
Sommes et produits?
inf de deux ´el´ements x
x∩y
y
z
si si
alors
Forme de produit! (et lesupest une forme de somme)
Exemples
Treillis
(R,≤) est un treillis (lesup de deux ´el´ements est leurmax, l’infest leur min)
(℘(S),⊆), lesup de deux ´el´ements (ensembles) est leur union ensembliste, l’infde deux ´el´ements (ensembles) est leur intersection ensembliste...d’o`u la notation...
Pas un treillis
(Env⊥,≤) n’est pas un treillis! Par exemple: ρ et σ
uniquement d´efinis sur x∈Var,ρ(x) = 1,σ(x) = 2,ρ∪σ?, ρ∩σ?
1 2 3 4 . . .
Chaˆıne, compl´ etude
CPO
Une chaˆıne deP est p0 ≤p1 ≤. . .≤pn
Une ω-chaˆıne de P est p0 ≤p1≤. . .≤pn≤. . . (suite infinie d’´el´ements de P)
Un ordre partiel (P,≤) est un CPO (Complete Partial Order) si pour touteω-chaˆıne (pi)i∈NdeP, (pi)i∈Nadmet unsup pour≤
et si (P,≤) admet un plus petit ´el´ement encore not´e⊥, c-.`a-.d. ∀p∈P,⊥ ≤p
Un treillis est completsi tous ses sous-ensemblesX admettent un supet uninf (condition redondante...); en particulier, il admet toujours un plus petit ´el´ement: ⊥=S∅, et un plus grand ´el´ement: >=S
P
Exemples
(R,≤) n’est pas un treillis complet, ni un CPO, mais R∪ {−∞,∞}est un treillis complet (donc un CPO) (℘(S),⊆) est un treillis complet, avec ⊥=∅,>=S (Env⊥,≤) est un CPO avec: pour toute ω-chaˆıne ρ0≤ρ1 ≤. . .≤ρn≤. . .on a
[
i∈N
ρi
! (x) =
ρj(x) si ∃j ∈N,ρj(x)6=⊥
⊥ sinon
“union de tous les supports” (la d´efinition est commune sur un support commun!)
CPO de fonctions
Lemme
Supposons queC est un CPO,Aest un ensemble. Alors CA (not´e aussiA→ C) l’ensemble des fonctions deAversC, muni de l’ordre: f ≤g si ∀a∈A,f(a)≤C g(a) est un CPO
Preuve
Soitf0 ≤f1 ≤. . .≤ uneω-chaˆıne dans CA, on note f∞:A→ C la fonction d´efinie par: pour touta∈A,f∞(a) =S
i∈Nfi(a) (raisonnable, car pour touta∈A,f0(a)≤f1(a)≤. . . est une ω-chaˆıne dans le CPO C). Alorsf∞≥fi pour touti et si on suppose que l’on ag :A→ C ≥fi pour touti, on en d´eduit:
pour touta∈A,g(a)≥fi(a), donc g(a)≥ [
i∈N
fi(a) =f∞(a)
Fonctionnelles
Croissance et continuit´e
Une fonctionF :D→E d’un CPO (D,v) vers un CPO (E,⊆) est croissante si ∀d,d0 ∈D, d vd0 ⇒F(d)⊆F(d0) F croissante est dite continue si pour toutes lesω-chaˆınes d0vd1 v. . .vdnv. . .deD, on a:
[
n∈N
F(dn) =F G
n∈N
dn
!
“Continuit´ e”?
Viens de l’analogie avec la topologie: l’ensemble des ouverts O(X) d’un espace topologique X forme pour le moins un CPO...
Une fonction continue f :X →Y induit une fonction
˜f :O(Y)→ O(X) par ˜f(OY) =f−1(OY)∈ O(X)
˜f est ainsi croissante, et continue, au sens des structures ordonn´ees!
Il existe des correspondances exactes entre structures
ordonn´ees et topologies (souvent non Hausdorff!) - au coeur de la dualit´e de Stoneet de lath´eorie des domaines
(fondement de la s´emantique d´enotationnelle de langages fonctionnels)
Dans le cas de Env
⊥→ Env
⊥Qu’est-ce qu’une fonction f :Env⊥→Env⊥ croissante dans ce cas?
Siρ0 est une extension deρ,f(ρ0) est une extension def(ρ) Qu’est-ce qu’une fonction f :Env⊥→Env⊥ continue dans ce cas?
f est croissante et pour touteω-chaˆıneρ0 ≤ρ1≤. . .≤ρn≤. . . on a, pour toutx∈Var:
S
i∈Nf(ρi)
(x) =
f(ρj)(x) ∃j ∈N,f(ρj)(x)6=⊥
⊥ sinon
= f S
i∈Nρi
(x) = f
y →
ρj(y) ∃j ∈N,ρj(y)6=⊥
⊥ sinon
(x)
Domaine d’int´ erˆ et pour la s´ emantique
Ordre sur D=Env⊥→Env⊥ fonctions continues Pourφ∈ D,ψ∈ D,φ≤ψ
si pour toutρ∈Env⊥,φ(ρ)≤ψ(ρ)
c’est-`a-dire si pour toutρ∈Env⊥,φ(ρ) est une restriction de ψ(ρ) `a un sous-domaine de Var
C’est un CPO (en partie par le lemme pr´ec´edent)
(deφ`a ψonaugmente l’information que l’on a - [[w]] va ˆetre dans D: s´emantique par approximations finies pour la boucle!)
Points fixes de fonctionnelles
Points fixes, pr´e-points fixes, post-points fixes
Soit f :D →D croissante pour un ordre partielD. Un point fixe def est un ´el´ementd deD tel que
f(d) =d
Un post-point fixe de f est un ´el´ement d deD tel que f(d)vd
Un pr´e-point fixe de f est un ´el´ementd deD tel que d vf(d)
Th´ eor` emes de point fixe
Tarski
Soitf :D →D une fonction croissante sur un treillis completD.
Alorsf admet au moins un point fixe. De plus, l’ensemble des points fixes def est un treillis complet, ainsi il existe toujours un unique plus petit point fixe, not´elfp(f) (“least fixed-point”) et un plus grand point fixe, not´e gfp(f) (“greatest fixed-point”)
Kleene
Soitf :D →D une fonction continue sur un CPOD (avec un plus petit ´el´ement⊥). Alors,
fix(f) = G
n∈N
fn(⊥)
est le plus petit point fixe def (qui existe ainsi!)
Tarski: preuve
On consid`erem=T
{x ∈D |f(x)≤D x}et M =S{x∈D|x ≤D f(x)}
On montre que mest le plus petit point fixe de f et queM est le plus grand point fixe de f.
Soit X ={x∈D|f(x)≤D x}. Soitx ∈X: on am≤D x, donc f(m)≤D f(x).
Mais f(x)≤D x parce-quex∈X. Donc f(m)≤D x pour tout x ∈X. Doncf(m)≤D m.
Ainsi f(f(m))≤D f(m), ce qui implique que f(m)∈X, et donc m≤D f(m).
Enfin, on conclut: f(m) =m.
Dernier argument: m est d´efini comme ´etant l’inf d’un ensemble contenant en particulier tous les points fixes def,m est non
Kleene: preuve
Par continuit´e de f:
f(fix(f)) = f F
n∈Nfn(⊥)
= F
n∈Nfn+1(⊥)
= F
n∈Nfn(⊥)
= fix(f)
Supposons qued est un point fixe def. On a⊥ ≤D d, donc f(⊥)≤D f(d) =d par croissance de f, et, par r´ecurrence, fn(⊥)≤D d. Ainsi fix(f)≤D d.
Revenons ` a l’interpr´ etation des boucles while
Interpr´etation des boucles - rappel Pourφ: Env⊥→Env⊥ on avait d´efini:
F(φ)(ρ) =
φ([[c]]ρ) si [[b]]ρ=true ρ si [[b]]ρ=false
⊥ si [[b]]ρ=⊥
Continuit´ e de F !
Pour pouvoir appliquer Kleene...
Il faut prouver queF :D → D est continue, pour l’ordre surD Croissance d´ej`a...
Pourφ≤D ψ, on v´erifie queF(φ)≤DF(ψ); pour tout ρ∈Env⊥, par exemple dans le cas [[b]]ρ=true:
F(φ)(ρ) = φ([[c]]ρ)
≤ ψ([[c]]ρ)
= F(ψ)(ρ)
Continuit´ e de F !
C’est-`a-dire...
Pour toute suiteφ0 ≤D. . ., et tout ρ∈Env⊥: [
i
F(φi)(ρ) =F([
i
φi)(ρ)
Mais:
F(S
iφi)(ρ) =
S
iφi([[c]]ρ) si [[b]]ρ=true ρ si [[b]]ρ=false
⊥ si [[b]]ρ=⊥
Le seul cas o`u il y ait `a prouver quelque chose est le premier ([[b]]ρ=true): trivial, car (S
iφi)σ=S
i(φiσ) par d´efinition de l’ordre (point `a point).
Interpr´ etation de Kleene pour la s´ emantique de while
Exactement la s´emantique par approximations finies!
Exemple, [[while (x<10) x=x+1]]. On identifie ρ∈Env⊥ avec ρ(x)∈Val⊥ car une seule variable! La fonctionnelleF est, pour Φ : Env⊥→Env⊥:
F(Φ)(ρ) =
Φ(ρ+ 1) si ρ <10
ρ si ρ≥10
⊥ si ρ=⊥ 1`ere it´eration
F1(ρ) =F(⊥)(ρ) =
⊥ si ρ <10 ρ si ρ≥10
⊥ si ρ=⊥
C’est ce que l’on obtient si on ne passe pas par le corps de boucle (on sort en 0 it´eration)
Exemple d’it´ eration
1`ere it´eration
F1(ρ) =F(⊥)(ρ) =
⊥ si ρ <10 ρ si ρ≥10
⊥ si ρ=⊥
10 20 F(ρ)
⊥
Exemple d’it´ eration
2i`eme it´eration
F2(ρ) =F(F1)(ρ) =
F1(ρ+ 1) si ρ <10
ρ si ρ≥10
⊥ si ρ=⊥
=
⊥ si ρ <9 10 si ρ= 9 ρ si ρ≥10
⊥ si ρ=⊥
C’est ce que l’on obtient si on passe z´ero ou une fois par le corps de boucle (on sort en 0 ou 1 it´eration)
Exemple d’it´ eration
2i`eme it´eration
F2(ρ) =F(F1)(ρ) =
⊥ si ρ <9 10 si ρ= 9 ρ si ρ≥10
⊥ si ρ=⊥
10 20 F(ρ)
Exemple d’it´ eration
(n+ 1)i`eme it´eration
Fn+1(ρ) =F(Fn)(ρ) =
⊥ siρ <10−n 10 siρ= 10−n, . . . ,9 ρ siρ≥10
⊥ siρ=⊥
C’est ce que l’on obtient si on passe de z´ero `an fois dans le corps de boucle... La limiteS
n∈NFn(⊥) contient tous les comportements possibles!
Exemple d’it´ eration
(n+ 1)i`eme it´eration
Fn+1(ρ) =F(Fn)(ρ) =
⊥ siρ <10−n 10 siρ= 10−n, . . . ,9 ρ siρ≥10
⊥ siρ=⊥
10 20 F(ρ)
Beaucoup de bruit pour rien?
Formalisation lourde?
pour la s´emantique (concr`ete) de while, un peu... mais propre...
th´eorie des points fixe dans les structures ordonn´ees d’application tr`es g´en´erale (cf. la suite)
et permet de donner une s´emantique des appels r´ecursifs de fa¸con ´el´ementaire et ´el´egante!
D´efinition de fonctions mutuellement r´ecursives On suppose que l’on autorise dans notre langage les d´efinitions r´ecursives de ce type par exemple:
f1 = c11;fi11;c21;fi21;. . .;fij11 f2 = c12;fi12;c22;fi22;. . .;fij22 . . .
fk = c1k;fi1k;c2k;fi2k;. . .;fijkk
o`u lescji sont des suites d’instructions, les fi sont des fonctions d´efinies mutuellement, qui agissent sur le mˆeme environnement
38
S´ emantique de fonctions mutuellement r´ ecursives
Exemple
Une partie du calcul de la fonction d’Ackerman: l’entr´ee est la variablep, le calcul de ackermann(n,p) se fait parackn(p), le r´esultat dans l’environnement est dans la variable q:
ack0 = (q =p+ 1)
ack1 = if (p==0) {p= 1;ack0}
else{p =p−1;ack1;p =q;ack0} ack2 = if (p==0) {p= 1;ack1}
else{p =p−1;ack2;p =q;ack1} . . .
S´ emantique de fonctions mutuellement r´ ecursives
S´emantique
En g´en´eral, on consid`ere k programmes “`a trous”
P1(f1, . . . ,fk), . . . ,Pk(f1, . . . ,fk) ´ecrit dans notre langage et on cherche [[f1]], . . . ,[[fk]] : Env⊥→Env⊥ tels que (comme la s´emantique est compositionnelle):
[[f1]] = [[P1(f1, . . . ,fk)]] = [[P1]]([[f1]], . . . ,[[fk]]) . . .
[[fk]] = [[Pk(f1, . . . ,fk)]] = [[Pk]]([[f1]], . . . ,[[fk]]) Ce qui produit une fonctionnelle (continue!)
F :Dk → Dk
pour laquelle on applique le th´eor`eme de Kleene...
Remarques
Cas particulier...
La boucle while!
whileb {c } ∼ {f = if b then c; f else skip}
Continuit´e et calculabilit´e
Le fait de pouvoir interpr´eter des sch´emas r´ecursifs partiels g´en´eraux permet d’imaginer le paradigme:
Notre s´emantique ne donne que des fonctions/fonctionnelles continues
De fa¸con plus g´en´erale, credo: les fonctions calculables sont les fonctions continues... (calculables=limites
d’approximations finies!)
Rappel
Qu’est-ce qu’une fonction f :Env⊥→Env⊥ croissante dans ce cas?
Siρ0 est une extension deρ,f(ρ0) est une extension def(ρ).
Qu’est-ce qu’une fonction f :Env⊥→Env⊥ continue dans ce cas?
f est croissante et pour touteω-chaˆıneρ0 ≤ρ1≤. . .≤ρn≤. . . on a, pour toutx∈Var:
S
i∈Nf(ρi)
(x) =
f(ρj)(x) ∃j ∈N,f(ρj)(x)6=⊥
⊥ sinon
= f S
i∈Nρi
(x) = f
y →
ρj(y) ∃j ∈N,ρj(y)6=⊥
⊥ sinon
(x) Continuit´e=on peut calculer par limite d’approximations finies; li´es aux sch´emas de d´efinition r´ecursifs!
Revenons ` a la s´ emantique des instructions...
Croissance de l’interpr´etation des expressions
S’agissant des expressions arithm´etiques a∈AExpr ou bool´eennes b∈BExpr:
[[a]] : Env⊥→Val⊥
[[b]] : Env⊥→ {true,false}⊥
sont croissantes, par r´ecurrence structurelle sur les expressions...: si σ est une extension deρ, [[a]]ρ est d´efinie (6=⊥) implique [[a]]σ d´efinie; de mˆeme pour [[b]].
En fait...
[[a]] et [[b]] sont continues! (un peu laborieux, par r´ecurrence structurelle...)
Revenons ` a la s´ emantique des instructions...
Croissance de l’interpr´etation de l’affectation Soitρ≤σ ∈Env⊥, alors [[v =e]]ρ=ρ[[[e]]ρ/v] Et
[[v =e]]σ =σ[[[e]]σ/v] o`u, pouru,v ∈Var et n∈Val:
ρ[n/v](u) =
ρ(u) siu 6=v
n siu =v σ[n/v](u) =
σ(u) siu 6=v n siu =v croissance r´esultat de: ρ[n/v] restriction deσ[n/v] siρ restriction deσ, et [[e]]σ = [[e]]ρ quand [[e]]ρ6=⊥
En fait...
[[v =e]] est continue, trivialement. C’est en effet `a v´erifier pour chaque variableu: enu =v cons´equence de la continuit´e de [[e]] et enu6=v de par la continuit´e de l’identit´e
Revenons ` a la s´ emantique des instructions
Croissance de l’interpr´etation des tests
Par r´ecurrence sur les termes. Supposons que [[p1]], [[p2]] sont croissantes; on consid`ere le terme i ∼if b p1 else p2:
[[ifb p1 else p2]]ρ=
[[p1]]ρ si [[b]]ρ=true [[p2]]ρ si [[b]]ρ=false
⊥ si [[b]]ρ=⊥ Alors siρ≤ρ0:
[[b]]ρ d´efinie ´egale `atrue implique [[b]]ρ0 d´efinie ´egale `atrue dans ce cas [[i]]ρ0 = [[p1]]ρ0 et comme par r´ecurrence [[p1]] est croissante, [[p1]]ρ0 est une extension de [[p1]]ρ= [[i]]ρ
de mˆeme quand [[b]]ρ est d´efinie ´egale `afalse...
De mˆeme, continue... (´evident, s´eparer le cas [[b]]ρ=true de
C’est tout pour aujourd’hui...
La prochaine fois
Validation, preuve `a la Hoare Bon TD!
C’est tout pour aujourd’hui...
La prochaine fois
Validation, preuve `a la Hoare Bon TD!