Exercice 2 : Preuves formelles et déduction
Problème : Preuves formelles, sémantique et limites des systèmes déductifs
Section titled “Problème : Preuves formelles, sémantique et limites des systèmes déductifs”Ce problème s’articule autour de l’étude formelle des systèmes de déduction en logique propositionnelle. On s’intéresse à la construction d’un prouveur automatique minimaliste, à la sémantique des connecteurs et à une analyse critique de l’expressivité des systèmes formels.
Énoncé
Section titled “Énoncé”On considère un ensemble dénombrable de variables propositionnelles noté . L’ensemble des formules de la logique propositionnelle, noté , est défini inductivement par la grammaire suivante :
Les autres connecteurs usuels () sont introduits comme des abréviations syntaxiques :
- est défini par
- est défini par
- est défini par
Une évaluation (ou interprétation) est une application . Elle s’étend naturellement à par les tables de vérité usuelles. Une formule est dite tautologie (notée ) si pour toute évaluation , .
On s’intéresse à un système de déduction naturelle intuitionniste réduit à l’implication et à l’absurde, muni des schémas d’axiomes de Hilbert suivants :
- (K)
- (S)
- (Peirce / Classique)
On note le fait qu’une formule est déductible à partir de l’ensemble vide d’hypothèses en utilisant le Modus Ponens comme unique règle d’inférence.
Questions
Section titled “Questions”Partie I : Manipulations syntaxiques et sémantiques
Section titled “Partie I : Manipulations syntaxiques et sémantiques”- Écrire une fonction en OCaml définissant le type algébrique
formulereprésentant . - Écrire une fonction
variables : formule -> VSet.tpermettant de récupérer l’ensemble des variables propositionnelles présentes dans une formule. - Définir une fonction
evalue : (string -> bool) -> formule -> boolqui calcule la valeur de vérité d’une formule étant donnée une évaluation des variables.
Partie II : Théorie de la démonstration
Section titled “Partie II : Théorie de la démonstration”- Démontrer formellement (en arbre de déduction ou par suite d’axiomes) le théorème de la déduction faible pour l’implication seule : si , alors .
- Prouver que pour toute formule , on a .
- On souhaite implémenter un vérificateur de preuves. Écrire un type
preuveet une fonctionverifier_preuve : preuve -> formule -> boolqui certifie qu’un arbre de déduction correspond bien à la formule prétendue.
Partie III : Analyse critique et limites du modèle
Section titled “Partie III : Analyse critique et limites du modèle”- Analyse critique : Le système formel présenté ici ambitionne de capturer la totalité du raisonnement mathématique valide en logique propositionnelle. Discutez de manière rigoureuse les limites inhérentes à ce modèle syntaxique face à l’intuition mathématique humaine et à la sémantique computationnelle. On pourra aborder la question de la décidabilité, de l’explosion combinatoire des preuves, et de l’adéquation entre vérité sémantique et dérivabilité syntaxique (théorèmes de Gödel/Complétude, bien que hors-programme strict, leurs intuitions philosophiques et informatiques sont attendues).
Pistes et Indications
Section titled “Pistes et Indications”- Partie I : Utiliser les types récursifs en OCaml. Pour les ensembles de variables, le module
Set.Makede la bibliothèque standard est conseillé. - Partie II : Pour , utiliser les axiomes (K) et (S) astucieusement en posant . Observez que .
- Partie III : Réfléchissez au fossé entre la vérification d’une preuve (qui est efficace, en temps polynomial) et la recherche ou la génération automatique de preuves (problème NP-complet ou pire, indécidable dans d’autres logiques). Pensez aussi à la notion de sensemaking humain vs manipulation aveugle de symboles par une machine de Turing.
Corrigé partiel et guidé
Section titled “Corrigé partiel et guidé”Partie I_1. Représentation en OCaml :
Section titled “Partie I_1. Représentation en OCaml :”type formule = | Var of string | Bot | Imp of formule * formule- Extraction des variables :
module VSet = Set.Make(String)
let rec variables = function | Var x -> VSet.singleton x | Bot -> VSet.empty | Imp (f1, f2) -> VSet.union (variables f1) (variables f2)- Évaluation sémantique :
let rec evalue sigma = function | Var x -> sigma x | Bot -> false | Imp (f1, f2) -> not (evalue sigma f1) || evalue sigma f2Partie II
Section titled “Partie II”-
Preuve de : On instancie le schéma (S) avec , et , combiné avec (K). Plus directement, voici la séquence classique :
-
(Axiome S)
-
(Axiome K)
-
(Par Modus Ponens entre 1 et 2)
-
(Axiome K)
-
(Par Modus Ponens entre 3 et 4).
-
Vérificateur de preuve :
type preuve = | AxiomeK of formule * formule | AxiomeS of formule * formule * formule | AxiomePeirce of formule | ModusPonens of preuve * preuve
let rec verifier = function | AxiomeK (a, b) -> Imp (a, Imp (b, a)) | AxiomeS (a, b, c) -> Imp (Imp (a, Imp (b, c)), Imp (Imp (a, b), Imp (a, c))) | AxiomePeirce a -> Imp (Imp (Imp (a, Bot), a), a) | ModusPonens (p1, p2) -> match (verifier p1, verifier p2) with | Imp (f_antecedent, f_consequent), f_arg when f_antecedent = f_arg -> f_consequent | _ -> failwith "Erreur de preuve : Modus Ponens invalide"Partie III : Analyse critique des limites du modèle
Section titled “Partie III : Analyse critique des limites du modèle”Le modèle formel présenté ici illustre la vision formaliste de Hilbert : les mathématiques réduites à un jeu d’écriture et de manipulation de symboles syntaxiques dénués de sens intrinsèque, régis par des règles strictes.
-
La césure entre syntaxe () et sémantique () : Le système formel est syntaxique (il manipule des arbres selon des règles de réécriture). La sémantique fait appel à des tables de vérité (modèles). Le théorème de complétude de Gödel (pour la logique du premier ordre) et les résultats analogues en logique propositionnelle garantissent que . Cependant, la machine ne comprend pas le sens de ce qu’elle prouve. Elle applique aveuglement des substitutions.
-
La complexité et l’explosion combinatoire : Si la vérification d’une preuve formelle est linéaire en la taille de l’arbre de preuve, la recherche d’une preuve est un problème difficile. En logique propositionnelle classique, le problème de la satisfiabilité (SAT) est NP-complet. Dans des systèmes formels plus riches (comme ceux incluant des quantificateurs ou de l’arithmétique), le théorème d’incomplétude de Gödel nous rappelle qu’aucun système formel récursif cohérent ne peut être à la fois complet et capable de prouver sa propre consistance : il existera toujours des vérités mathématiques inaccessibles par la preuve formelle mécanique.
-
Limites de l’expressivité et de l’intuition humaine : Réduire l’implication ou la négation à des manipulations de (négation intuitionniste/classique) pose des problèmes philosophiques et cognitifs. Le système formel exige une explicitation absolue de chaque micro-étape (que l’humain saute par intuition ou par “saut st਼ilistique”). L’effort de formalisation croît de manière exponentielle, rendant la preuve formelle pure impraticable pour les mathématiques de haut niveau sans l’aide d’assistants de preuve interactifs sophistiqués (Coq, Lean, Isabelle) qui comblent l’écart grâce à la tactique et à l’automatisation partielle (champs de force, procédures de décision).