1. 1
Chapitre 2. Notion de système formel…
3.1. Exemple de la logique propositionnelle
3.2. Exemple d'un système de preuve de programme
séquentiel: la logique de Hoare
2. 2
Un système formel est un cadre mathématique permettant de
construire et représenter des preuves
Un système formel =
– un langage de formules
– un sous-ensemble de ces formules appelées axiomes, vraies par définition
– des règles de déduction (règles d'inférence) formalisant les étapes
élémentaires licites de raisonnement
Exemple : la logique propositionnelle
la logique des prédicats
la géométrie euclidienne…
…
la logique de Hoare…
2. Notion de système formel…
3. 3
La logique propositionnelle
Langage de formules =
• soit Vp = {p, q, r, …} un ensemble de variables propositionnelles
• soit les symboles ¬ et →
• les formules de la logique propositionnelle sont définies par les règles
– base : les éléments de Vp sont des formules
– induction : si A et B sont des formules, alors ¬A et A→B sont des
formules
– clôture : tout terme obtenu en appliquant les règles ci-dessus un nombre
fini de fois est une formule
axiomes
(A1) : |- A → (B → A)
(A2) : |- (A → (B → C)) → ((A→ B) → (A→ C))
(A3) : |- (¬B → ¬A) → (A → B)
règle d'inférence unique : modus ponens
2.1. La logique propositionnelle…
|- f, |- f → g
|- g
(prémisses)
(conclusion)
Rappel :
a→b ≡ (¬a)∨b
=>
- a∨b = (¬a)→b
- a∧b = ¬((¬a)∨(¬b))
Rappel :
a→b ≡ (¬a)∨b
=>
- a∨b = (¬a)→b
- a∧b = ¬((¬a)∨(¬b))
4. 4
Exemple : preuve de |- A→A :
2.1. La logique propositionnelle…
|- (A → ((B → A) → A)) → ((A → (B → A)) →(A → A))
|- (A → ((B → A) → A))
MP
|- (A → (B → A)) →(A → A) |- (A → (B → A))
MP
|- A → A
5. 5
Application à l'ingénierie des systèmes
Soit un O un objet d'étude (une spécification ou un programme)
Soit H un ensemble d'hypothèses
Soit P la propriété devant être vérifiée sur O
Démontrer P sur O sous l'hypothèse H nécessite :
– le choix d'un système formel S
– la traduction de O en FO1,… FOn formules de S
– la traduction de H en FH1,… FHm formules de S
– la traduction de P en FP formule de S
– la construction d'un arbre de preuve
• dont les feuilles sont les FOi, FHj ou les axiomes de S
• dont la racine est FP
• et dont les nœuds sont des applications des règles d'inférence de S
2.1. La logique propositionnelle…
6. 6
Application à l'ingénierie des systèmes
Soit E une spécification globale
Soit S un système formel
Notons {FE1,…, FEn} les formules traduisant E dans le langage de S
On dit que E est inconsistant (contradictoire) ssi
|- (FE1∧… ∧ FEn) → false (où false = a∧¬a)
que l'on note :
{FE1,…, FEn} |- false
Exemple :
E = { les chiens sont interdits,
les aveugles sont accompagnés par un chien,
il y a un aveugle}
E permet de dériver ¬chien et chien
=> contradiction
2.1. La logique propositionnelle…
7. 7
La Logique de Hoare :
– technique pour raisonner sur les algorithmes
– première tentative formelle pour la vérification de programmes
– repose sur la notion d'assertions
• pré condition :
formule logique exprimant une hypothèse sur les données d'un programme avant son
exécution
• post condition
formule logique exprimant une hypothèse sur les données d'un programme après son
exécution
Idée
Construire de façon incrémentale la formule logique caractérisant l'état d'un
programme après son exécution
=> un calcul (formules et règles d'inférence)
=> raisonnement sur la structure du programme
2.2. La Logique de Hoare
8. 8
Idée : triplet de Hoare
associer à une action quelconque S (instruction, sous-programme, programme…)
une pré condition P et une post condition Q, écrit comme
{P}S{Q}
pour exprimer que si P est vrai avant l'exécution de S, alors S termine et Q est
vrai après l'exécution de S
=> les formules du calcul : {P}S{Q}
=> signification de ces formules :
{P}S{Q} est vrai
si et seulement si
sous l'hypothèse que P est vrai avant S, alors S termine et Q est vrai après S
2.2. La Logique de Hoare
9. 9
Un langage de programme
soit un langage de programme défini par les instructions et opérations :
skip
S ; S'
Si C alors S sinon S' fin
Tant que C faire S fin
x := E
=> une (ou plusieurs) règles d'inférence (définissant les triplets de Hoare) pour
chaque instruction et opération de ce langage
2.2. La Logique de Hoare
10. 10
Compositionalité des triplets de Hoare
La vérité de {P}S{Q} ne dépend que de P, de Q et de la structure interne de S
=> il est possible de composer les formules pour obtenir la formule
caractéristique d'un programme global
Soit deux sous programmes S1 et S2
Supposons que S1 et S2 sont caractérisés par
{P1}S1{Q1} et {P2}S2{Q2}
Soit S' = S1 op S2 (composition séquentielle, parallèle…)
alors il doit être possible de trouver P' fonction P1, P2 et Q' fonction de Q1 et Q2
tel que
{P'}S'{Q'}
=> un ensemble de règles d'inférence, pour composer les triplets de Hoare, défini
pour un langage de programmes donné
=> construction incrémentale du triplet de Hoare d'un programme global
2.2. La Logique de Hoare
11. 11
Règles d'inférence des triplets de Hoare
règle de skip
{P}skip{P}
(l'instruction skip ne fait rien)
règle de l'affectation
{P[x/E]}x:=E{P}
(toute propriété de x après l'affectation doit être une propriété de E avant l'affectation.
P[x/E] est égal à P dans laquelle toutes les occurrence libres de x sont remplacées par E)
règle de la séquence
{P1}S1{P2} {P2}S2{P3}
{P1}(S1 ; S2){P3}
2.2. La Logique de Hoare
12. 12
Règles d'inférence des triplets de Hoare
règle du conditionnel
{P ∧ C}S{Q} {P ∧ ¬C}S'{Q'}
{P}Si C alors S sinon S' fin{Q ∨ Q'}
(toute propriété garantie par les deux branches est garantie par le bloc conditionnel)
règle de la boucle
I ∧ C => v ∈ N {I ∧ C ∧ v>V}S{I ∧ v=V}
{I} Tant que C faire S fin{I ∧ ¬C}
(I = invariant de la boucle, et v = variant à valeur entière et nécessairement décroissant,
permet de démontrer qu'une boucle termine)
2.2. La Logique de Hoare
13. 13
Règles d'inférence des triplets de Hoare
règle du renforcement de la pré condition
P' => P {P}S{Q}
{P'}S{Q}
règle de l'affaiblissement de la post condition
{P}S{Q} Q => Q'
{P}S{Q'}
=> permet d'établir des raisonnements incrémentaux sur les
programmes
Exercices…
2.2. La Logique de Hoare
Notas do Editor
En fait, 2 cours et un projet : le cours CVS où l'on parlera de méthode et techniques formelles ou informelles pour aider au développement de gros systèmes le cours LLS où M. Polina présentera au moins 2 langages de modélisation de système un projet : ingénierie des protocoles => articulation cohérente de ces cours => préambule 0 = présentation générale pour que vous compreniez la cohérence globale de ces cours.
En fait, 2 cours et un projet : le cours CVS où l'on parlera de méthode et techniques formelles ou informelles pour aider au développement de gros systèmes le cours LLS où M. Polina présentera au moins 2 langages de modélisation de système un projet : ingénierie des protocoles => articulation cohérente de ces cours => préambule 0 = présentation générale pour que vous compreniez la cohérence globale de ces cours.