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