Skip to content

Cours : Logique propositionnelle et Hoare

Logique propositionnelle et Logique de Hoare

Section titled “Logique propositionnelle et Logique de Hoare”

Fiche de cours - CPGE MP2I (Première année) Professeur Agrégé de Mathématiques et d’Informatique


Ce chapitre jette les bases formelles de la rigueur en informatique. La logique propositionnelle permet de formaliser le raisonnement mathématique et la structure des conditions dans les programmes. La logique de Hoare, introduite par Sir Tony Hoare, fournit quant à elle le cadre formel indispensable pour prouver la correction des programmes impératifs.


Une proposition (ou formule) est une assertion qui est soit vraie (⊤\top ou 11), soit fausse (⊥\bot ou 00).

  • Connecteurs fondamentaux : ¬\neg (négation), ∧\land (conjonction / et), ∨\lor (disjonction / ou),   ⟹  \implies (implication),   ⟺  \iff (équivalence).
  • Définition (Implication) : P  ⟹  QP \implies Q est logiquement équivalent à ¬P∨Q\neg P \lor Q.
  • Tautologie : Une formule est une tautologie si elle est vraie pour toutes les valuations possibles de ses variables (noté ⊨P\models P).

Soient P,Q,RP, Q, R des propositions.

  • Lois de De Morgan : ¬(P∧Q)≡¬P∨¬Q\neg(P \land Q) \equiv \neg P \lor \neg Q ¬(P∨Q)≡¬P∧¬Q\neg(P \lor Q) \equiv \neg P \land \neg Q
  • Contraposition : (P  ⟹  Q)≡(¬Q  ⟹  ¬P)(P \implies Q) \equiv (\neg Q \implies \neg P)
  • Distributivité : P∨(Q∧R)≡(P∨Q)∧(P∨R)P \lor (Q \land R) \equiv (P \lor Q) \land (P \lor R)
  • CNF (Forme Normale Conjonctive) : Conjonction (∧\land) de clauses, une clause étant une disjonction (∨\lor) de littéraux (variables ou leurs négations).
  • DNF (Forme Normale Disjonctive) : Disjonction de conjonctions de littéraux.
  • Propriété fondamentale : Toute formule propositionnelle est logiquement équivalente à une CNF et à une DNF.

La logique de Hoare permet de raisonner sur la correction des programmes impératifs.

Un triplet de Hoare est un énoncé de la forme : {P} C {Q}\{P\} \, C \, \{Q\}

  • PP : Précondition (assertion vraie avant l’exécution du commande CC).
  • CC : Commande (instruction ou bloc d’instructions).
  • QQ : Postcondition (assertion garantie vraie après l’exécution de CC, si CC se termine).
  • Correction partielle : Si {P} C {Q}\{P\} \, C \, \{Q\} est valide, alors si l’exécution de CC partant d’un état satisfaisant PP se termine, l’état final satisfait QQ.
  • Correction totale : Correction partielle + garantie de terminaison de CC.

2. Règles d’inférence de Hoare (Correction partielle)

Section titled “2. Règles d’inférence de Hoare (Correction partielle)”

Pour une variable xx et une expression ee : {P[x←e]}    x:=e    {P}\{P[x \leftarrow e]\} \;\; x := e \;\; \{P\} (Où P[x←e]P[x \leftarrow e] désigne la substitution dans PP de toutes les occurrences libres de xx par ee).

Pour deux commandes C1C_1 et C2C_2 : {P} C1 {R}{R} C2 {Q}{P} C1;C2 {Q}\frac{\{P\} \, C_1 \, \{R\} \quad\quad \{R\} \, C_2 \, \{Q\}}{\{P\} \, C_1 ; C_2 \, \{Q\}}

{P∧B} C1 {Q}{P∧¬B} C2 {Q}{P}    if B then C1 else C2    {Q}\frac{\{P \land B\} \, C_1 \, \{Q\} \quad\quad \{P \land \neg B\} \, C_2 \, \{Q\}}{\{P\} \;\; \mathbf{if}\ B\ \mathbf{then}\ C_1\ \mathbf{else}\ C_2 \;\; \{Q\}}

Permet de renforcer la précondition ou d’affaiblir la postcondition : P  ⟹  P′{P′} C {Q′}Q′  ⟹  Q{P} C {Q}\frac{P \implies P' \quad\quad \{P'\} \, C \, \{Q'\} \quad\quad Q' \implies Q}{\{P\} \, C \, \{Q\}}


Prouver une boucle nécessite de trouver un invariant de boucle II.

  1. Invariant (II) : Propriété vraie avant et après chaque itération.
  2. Variant (vv) : Expression entière strictement décroissante garantissant la terminaison (pour la correction totale).

{I∧B} C {I}{I}    while B do C    {I∧¬B}\frac{\{I \land B\} \, C \, \{I\}}{\{I\} \;\; \mathbf{while}\ B\ \mathbf{do}\ C \;\; \{I \land \neg B\}}

Méthodologie de preuve d’une boucle :

  1. Initialisation : Prouver que l’invariant est établi avant la boucle (P  ⟹  IP \implies I).
  2. Conservation : Prouver que l’invariant est préservé par le corps de la boucle ({I∧B} C {I}\{I \land B\} \, C \, \{I\}).
  3. Terminaison : Prouver que le variant décroit strictement et est minoré (pour la correction totale).
  4. Finalisation : Montrer qu’à la sortie, l’invariant couplé à la négation de la garde implique la postcondition (I∧¬B  ⟹  QI \land \neg B \implies Q).

III. Exemple type : Preuve d’un programme

Section titled “III. Exemple type : Preuve d’un programme”

Soit le programme calculant la somme des entiers de 00 à n−1n-1 (n∈Nn \in \mathbb{N}):

s := 0;
i := 0;
while i < n do
s := s + i;
i := i + 1;
done

Triplet à prouver : {n≥0}Programme{s=∑k=0n−1k}\{n \ge 0\} \quad \text{Programme} \quad \{s = \sum_{k=0}^{n-1} k\}

  • Invariant choisi : I≡(0≤i≤n)∧(s=∑k=0i−1k)I \equiv (0 \le i \le n) \land (s = \sum_{k=0}^{i-1} k).
  • Variant choisi : v=n−iv = n - i.

La vérification formelle de ce type de programme par application rigoureuse des règles de Hoare constitue un attendu majeur des épreuves en MP2I.