Cours Sémantique et analyse de Programmes

Transcription

Cours Sémantique et analyse de Programmes
Introduction
Pour raisonner sur les programmes il faut :
Cours Sémantique et analyse
de Programmes
pouvoir parler des résultats attendus
exprimer des conditions sur des résultats intermédiaires
et faire des preuves.
Filière Ingénièrie des systèmes d’Information - Ensimag 2A
Donc :
Marie-Laure Potet
disposer d’un langage de spécification ou d’annotations
modéliser et axiomatiser les structures de données
VERIMAG, Grenoble, France
propager les conditions dans le programme
résoudre les obligations de preuve
cours Sémantique et analyse de programmes - ISI 2A – p. 1
Rappel : binary Search
int binary_search(int* t, int n, int v) {
n ≥ 0 ∧ ∀i, j . 0 ≤ i ≤ j ≤ n − 1 ⇒ t[i] ≤ t[j]
int k = 0, u = n-1;
while (k <= u ) {
int m = k + (u-k) / 2;
{m ∈ 0..n − 1}
if (t[m] < v) { k = m+1 ; }
else if (t[m] > v) { u = m-1 ; }
else { return m; }
}
return -1 ;
}
((0 ≤ res < n ∧ t[res] = v) ∨ (res = −1 ∧ ∀i . 0 ≤ i < n ⇒
t[i] 6= v)) ∧ t′ = t ∧ n′ = n ∧ v ′ = v
cours Sémantique et analyse de programmes - ISI 2A – p. 3
cours Sémantique et analyse de programmes - ISI 2A – p.
Différentes approches
Approche par annotations :
on reste au niveau du programme en ajoutant des
formules logiques (JML, Spec#, . . . )
Approche par raffinement :
on dispose d’un langage de spécification permettant
de décrire les résultats attendus de manière plus
abstraite.
Une relation de raffinement permet de montrer la
correction d’un programme vis-à-vis d’une
spécification (raffinement de comportements et
raffinement de données)
cours Sémantique et analyse de programmes - ISI 2A – p.
Le cadre général
Nous : méthode B
langage de
langage de
programmation
spécification/annotation
variable
structure de données
modèle mathématique
propriété
type
formule logique
vérification
algo de typage
preuve
comportement
instruction
relation avant-après
spécification abstraite
Exemples :
x ∈ N ∧ y ∈ N ∧ x + y < M axInt
(z ′ = x ∨ z ′ = y) ∧ z ′ ≥ x ∧ z ′ ≥ y
valeur après : old(name) (JML), name’ (B, Z, TLA), name@pre (OCL) . . .
Une logique du premier ordre ensembliste
suffisamment expressive
possibilité d’automatisation des preuves
Un langage d’instructions permettant aussi bien la
spécification que la programmation
précondition, non-déterminisme . . .
Calcul de plus faible précondition (propagation des
annotations dans les programmes)
cours Sémantique et analyse de programmes - ISI 2A – p.
cours Sémantique et analyse de programmes - ISI 2A – p. 5
Logique du premier Ordre
Logique du premier ordre :
P ∧Q
P ⇒Q
¬P
∀x · P
quantification
P red
prédicat
Expressions et Ensembles
Les ensembles (typés) :
S1 × S2
produit
P(S)
ensemble des parties
{ x | P red}
ensemble en compréhension
BIG
un ensemble infini
Les expressions :
x
variable
(E1 , E2 )
paire d’expressions
choice(S)
fonction de choix
S
ensemble
Prédicats de base :
x∈S
appartenance
E1 = E2
égalité
Les autres constructeurs sont dérivés :
P ∨ Q, ∃x · P , x 6∈ S , etc.
cours Sémantique et analyse de programmes - ISI 2A – p. 7
cours Sémantique et analyse de programmes - ISI 2A – p.
Axiomes de base
Substitution - variable libre/liée
Une variable x est dite libre dans la formule F ssi F contient
une occurrence de x dans F qui n’est pas sous la portée
d’un quantificateur.
Ex : P (y, x) ∧ ∀x . Q(x, y)
x a une occurrence libre et une occurrence liée.
Axiome
SET1 (E, F ) ∈ s × t ⇔ E ∈ s ∧ F ∈ t
SET2 s ∈ P(t) ⇔ ∀x · (x ∈ s ⇒ x ∈ t)
SET3 E ∈ {x | x ∈ s ∧ P } ⇔ (E ∈ s ∧ [x := E] P )
SET4 ∀x · (x ∈ s ⇔ x ∈ t) ⇒ s = t
SET5 (∃x · x ∈ s) ⇒ choice(s) ∈ s
SET6 infinite(BIG)
[x := E] P décrit le remplacement des occurrences libres de
x par E dans P . Exemple :
[x, y := e, f ](P (y, x) ∧ ∀x . Q(x, y)) = P (f, e) ∧ ∀x . Q(x, f )
Exercice. Calcul des variables libres :
F → F ∧ F | F ⇒ F | ∀ . F | ¬F | P red(T )
T → idf | cst
cours Sémantique et analyse de programmes - ISI 2A – p. 1
cours Sémantique et analyse de programmes - ISI 2A – p. 9
Expressivité
Exercices
Logique du premier ordre + théorie des ensembles = un
formalisme puissant.
les opérations ensemblistes classiques : ∩, ∪, −...
s ∩ t=
ˆ {a |a ∈ s ∧ a ∈ t} si s ⊆ u ∧ t ⊆ u
Exercice : preuve de s ∩ t = t ∩ s.
les relations r ⊆ P(s × t) et les fonctions (f ∈ s →
p t).
dom(r)
=
ˆ
{x | x ∈ s ∧ ∃ y · (y ∈ t ∧ (x, y) ∈ r)}
ran(r)
=
ˆ
{y | y ∈ t ∧ ∃ x · (x ∈ s ∧ (x, y) ∈ r)}
s→
p t
=
ˆ
{r | r ⊆ P(s × t) ∧ ∀ x, y, z·
Définir :
r−1 : la relation inverse
r[u] : l’image de l’ensemble u par la relation r
Id(E) : la fonction identité sur l’ensemble E
r1 ; r2 : la composition séquentielle
Définir le type tableau et le type SEQ(ELEM )
((x, y) ∈ r ∧ (x, z) ∈ r ⇒ y = z)}
cours Sémantique et analyse de programmes - ISI 2A – p. 11
cours Sémantique et analyse de programmes - ISI 2A – p. 1
Les séquences
Les tableaux
les tableaux de taille n. Représentation :
Représentation :
(s, b1 , b2 ) ∈ (b1 ..b2 → ELEM ) × N AT × N AT
tab ∈ 0..n − 1 → ELEM
Codage:
<>=(∅,
ˆ 1, 0) et ajout(a, (s, b1 , b2 )) = (s ∪ {b1 − 1, a}, b1 − 1, b2 )
Exemple précondition :
∀ind1 , ind2 (ind1 ∈ 0..n − 1 ∧ ind2 ∈ 0..n − 1 ∧ ind1 < ind2
⇒ tab(ind1 ) < tab(ind2 ))
Exemple postcondition :
(tab−1 [{v}] = ∅ ∧ res = −1) ∨ (res ∈ tab−1 [{v}])
Définition de premier et reste :
s 6= ∅ ⇒ premier((s, b1 , b2 )) = s(b1 )
s 6= ∅ ⇒ reste((s, b1 , b2 )) = (s − {b1 , s(b1 )}, b1 + 1, b2 )
Preuve : s 6= ∅ ⇒ premier(ajout(a, (s, b1 , b2 ))) = a ?
premier((s ∪ {b1 − 1, a}, b1 − 1, b2 ))
= (s ∪ {b1 − 1, a})(b1 − 1) = a
cours Sémantique et analyse de programmes - ISI 2A – p. 13
cours Sémantique et analyse de programmes - ISI 2A – p. 1
Construction de N
Définition par induction
Schéma d’induction caractérisant un sous-ensemble E de s :
un élément de base
une règle
a∈E
x ∈ E ⇒ f (x) ∈ E
une clause de fermeture : E est le plus petit sous-ensemble de s
finiment engendré par la règle à partir de la base.
Axiomatisation de E:
a ∈ E ∧ ∀x . (x ∈ E ⇒ f (x) ∈ E) ∧
∀F . (F ⊆ s ∧ a ∈ F ∧ ∀x . (x ∈ F ⇒ f (x) ∈ F ) ⇒ E ⊆ F )
Exemple : fermeture transitive d’une relation r (notation r+ ) :
r ⊆ r+ ∧ ∀g . (g ⊆ r+ ⇒ r ; g ⊆ r+ ) ∧
∀h . (r ⊆ h ∧ ∀g . (g ⊆ h ⇒ r ; g ⊆ h) ⇒ r+ ⊆ h)
cours Sémantique et analyse de programmes - ISI 2A – p. 15
On doit avoir (axiomes de Peano):
12345-
0∈N
n ∈ N ⇒ succ(n) ∈ N
0 6= succ(n)
succ(n) = succ(m) ⇒ n = m
[n := 0]P ∧ ∀n · (n ∈ N ∧ P ⇒ [n := succ(n)]P )
⇒ ∀n · (n ∈ N ⇒ P )
Codage des opérateurs :
0 =
b ∅
succ =
b λn · (n ∈ F(BIG) | n ∪ {choice(BIG − n)})
On construit alors les relatifs, les entiers bornés, les
ensembles énumérés . . .
cours Sémantique et analyse de programmes - ISI 2A – p. 1
Exercice : les arbres
Représentation :
(noeud, pere, rac) ∈ P(Etiquette) × (noeud →
p noeud) × noeud
avec :
dom(pere) = noeud − {rac}
pere+ ∩ Id(noeud) = ∅
Logique du premier ordre
Déduction naturelle adaptée à la preuve automatique et
interactive.
On manipule des jugements de la forme Γ ⊢ A avec Γ une
liste de formules (les hypothèses) et A la formule à prouver.
Ex : A ⇒ B, A ⇒ C, A ⊢ B ∧ C .
Axiome :
A⊢A
Règle de l’affaiblissement :
Γ⊢A
Γ, Γ′ ⊢ A
cours Sémantique et analyse de programmes - ISI 2A – p. 1
cours Sémantique et analyse de programmes - ISI 2A – p. 17
Déduction naturelle
Pour chaque connecteur op :
Connecteur ⇒
Règle d’introduction :
des règles d’introduction : comment prouver A op B ?
des règles d’élimination : comment "découper" A op B ?
Calcul propositionnel : A | ¬F | F ∧ F | F ⇒ F
Calcul des prédicats du premier ordre :
P red | ¬F | F ∧ F | F ⇒ F | ∀x F
avec P red défini à partir d’un ensemble de symboles de
prédicats, d’un ensemble de symboles de fonction et de
variables. Ex: x > 3.
cours Sémantique et analyse de programmes - ISI 2A – p. 19
Γ, A ⊢ B
Γ⊢A⇒B
⇒ Intro
Règle d’élimination :
Γ⊢A⇒B
Γ, Γ′ ⊢ B
Γ′ ⊢ A
⇒ Elim
Exercice : A ⇒ B, B ⇒ C ⊢ A ⇒ C
cours Sémantique et analyse de programmes - ISI 2A – p. 2
Connecteur ∧
Connecteur ¬
Règle d’introduction :
Règle d’introduction :
Γ⊢A
Γ′ ⊢ B
∧ Intro
Γ, Γ′ ⊢ A ∧ B
¬Intro
Γ, Γ′ ⊢ ¬A
Règle d’élimination :
Règle d’élimination :
Γ⊢A∧B
∧ Elim1
Γ⊢A
Γ′ , A ⊢ ¬B
Γ, A ⊢ B
Γ⊢A∧B
∧ Elim2
Γ⊢B
Γ′ ⊢ ¬A
Γ⊢A
Γ, Γ′ ⊢ B
¬Elim
En logique classique on ajoute une des règles suivantes :
Exercice : A ∧ B ⊢ B ∧ A
⊢ A ∨ ¬A
Γ ⊢ ¬¬A
TE
Γ⊢A
DN
Γ′ , ¬A ⊢ ¬B
Γ, ¬A ⊢ B
Γ, Γ′ ⊢ A
cours Sémantique et analyse de programmes - ISI 2A – p. 21
Connecteur ∨
Ab
cours Sémantique et analyse de programmes - ISI 2A – p. 2
Premier ordre
Défini par A ∨ B = ¬A ⇒ B = ¬(notA ∧ ¬B)
Axiome et règles associés aux prédicats et termes.
Règle d’introduction :
Règle d’introduction :
Γ⊢A
∨ Intro1
Γ⊢A∨B
Γ⊢B
∨ Intro2
Γ⊢A∨B
Γ⊢P
x 6∈ libre(Γ)
∀Intro
Γ⊢∀x.P
Règle d’élimination :
Règle d’élimination :
Γ⊢A∨B
Γ′ , A ⊢ C
Γ, Γ′ , Γ′′ ⊢ C
Γ′′ , B ⊢ C
∨ Intro
cours Sémantique et analyse de programmes - ISI 2A – p. 23
Γ⊢∀x.P
Γ ⊢ [x := t]P
∀Elim
cours Sémantique et analyse de programmes - ISI 2A – p. 2
Quantificateur existentiel
Egalité
Règle d’introduction :
t=t
Γ ⊢ [x := t]P
∃Intro
Γ⊢∃x.P
Γ ⊢ t = t′
Γ′ ⊢ P (t)
cong
Γ, Γ′ ⊢ P (t′ )
Règle d’élimination :
Γ⊢∃x.P
Γ′ , P ⊢ C
x 6∈ libre(C)
′
Γ, Γ ⊢ C
ref l
x 6∈ libre(Γ′ )
∃Elim
cours Sémantique et analyse de programmes - ISI 2A – p. 25
cours Sémantique et analyse de programmes - ISI 2A – p. 2