D´emontrer des th´eor`emes math´ematiques
en ´ecrivant des programmes
Charles Bouillaguet
19 janvier 2016
La semaine derni`ere, on a vu que dans les ann´ees 1970, l’apparition d’une des premi`eres «preuves g´en´er´ees
par ordinateur »a pos´e le probl`eme de sa validit´e : est-ce qu’une preuve que personne ne peut v´erifier
est valide ?
`
A la mˆeme p´eriode, Le d´eveloppement de l’informatique et des langages de programmation a apport´e
un autre ´eclairage sur la notion de «preuve math´ematique ». S’il fallait la r´esumer par un slogan, on
pourrait dire «preuve = programme ».
Echauffement. Consid´erons les fonctions ML 1suivantes :
1. let ix=x
2. let kxy=x
3. let sxyz=xz(yz)
4. let afx=fx
5. let cfgx=f(gx)
6. let tfxy=fyx
Question 1: Laquelle de ces fonctions impl´emente en fait la composition fg?
Question 2: eterminer leurs types.
Dans les types obtenus, αβγse lit en fait α(βγ). En effet, une fonction de deux arguments
de types αet βest en fait une fonction qui prend un argument de type αet qui renvoie... une fonction
qui prend un argument de type βqui renvoie elle-mˆeme un r´esultat de type γ.
Maintenant, on va transformer les types de ces expressions ML en formules logiques : les variables de type
(α, β, . . . ) vont devenir des variables bool´eennes, et la «fl`eche de fonction »() va devenir l’op´erateur
d’implication ().
Question 3: En supposant que les variables de type sont des variables bool´eennes, dresser la table de
v´erit´es des formules logiques d´eriv´ees des types ci-dessus. Qu’observe-t-on ?
Isomorphisme de Curry-Howard Dans ce poly, une justification raisonnable de ce ph´enom`ene est
fournie. De plus, on va voir qu’il est possible de le «renverser »: pour d´emontrer une formule logique, il
suffit d’´ecrire un programme ML qui a le bon type !
On a donc la correspondance :
Syst`eme de types Th´eorie logique
Type Formule logique
Programme Preuve
Calcul Simplification des preuves
Programmer Prouver des th´eor`emes !
1. Haskell et CAML sont des langages de la famille ML
1
Cette correspondance a pris le nom d’isomorphisme de Curry-Howard. En effet, cette id´ee g´en´erale
(«programme = preuve ») s’est ´elabor´ee au fil de l’observations d’abord par Curry 2(en 1934 et 1958)
puis par Howard (en 1969) de la correspondance entre des syst`emes de preuves et des m´ecanismes de
calcul.
L’id´ee g´en´erale est qu’une fonction de type STest une fonction qui prend une preuve de Set produit
une preuve de T. Tous les autres constructeurs logiques s’expriment de la mˆeme fa¸con.
Assistants de preuve La poursuite de cette analogie «programme = preuve »a aboutit `a la mise
de points de langages de programmations sp´ecifiques, d´edi´es non pas `a la construction de programmes,
mais `a la construction de preuves math´ematiques (coq, d´evelopp´e `a l’INRIA, est l’un d’entre eux). L’id´ee
g´en´erale est que pour prouver un th´eor`eme ϕ, il suffit d’´ecrire dans ces langages un programme dont le
type correspond `a ϕ.
Ensuite, un type-checker v´erifie que votre programme a bien le type annonc´e. Si c’est oui, f´elicitation :
vous avez d´emontr´e ϕ. Si c’est non : votre «preuve »est fausse, et vous devez la r´eparer.
Ces programmes de v´erification des types sont des assistants de preuve. Leur nom est tr`es mal choisis
parce que la plupart du temps ils vous empˆechent de faire votre preuve en vous faisant remarquer tel ou
tel d´efaut. Mais ils vous aident `a faire des preuves correctes.
Du coup, on pourrait se demander laquelle des deux `a le plus de chances d’ˆetre «correcte »: une preuve
´ecrite en fran¸cais 3et approuv´ee par un petit comit´e d’experts de la bonne branche des math´ematiques ?
Ou bien une preuve ´ecrite dans un langage de programmation et v´erifi´ee par un algorithme sans ´etat
d’ˆame ?
En 2016, les assistants de preuve restent des outils difficiles `a utiliser. Formaliser dedans des math´ema-
tiques mˆeme peu sophistiqu´ees, par exemple le programme de Licence, pose des probl`emes et n´ecessite
un gros effort. D´emontrer n’importe quoi dedans n´ecessite une formation de plusieurs mois. En plus, la
quantit´e de travail humain n´ecessaire pour faire accepter une preuve `a un assistant de preuve est consi-
d´erablement plus ´elev´ee que celle qui est n´ecessaire pour faire accepter une preuve du mˆeme th´eor`eme `a
un comit´e de math´ematiciens.
Malgr´e tout, en 2005, une ´equipe de recherche a r´eussi un exploit : ils ont r´ealis´e une preuve compl`ete
du th´eor`eme des 4 couleurs dans un assistant de preuve. Ceci laisse finalement peu de doutes quand `a la
validit´e du th´eor`eme.
Quelle est la diff´erence avec la preuve de d´epart ? La preuve de d´epart consistait `a ex´ecuter un programme
ad hoc, et `a accepter l’id´ee que si ce programme renvoie «OK », alors le th´eor`eme est vrai. Le programme
est assez compliqu´e (´ecrit `a la main, en assembleur, manipule des graphes, des centaines de cas, etc.). Le
probl`eme c’´etait qu’il ´etait difficile de v´erifier si le programme est correct.
Dans un assistant de preuve moderne, la partie critique est le type-checker, mais c’est un programme plus
simple, et plus court. De m´emoire, celui de coq fait 3000 lignes de OCaml. En plus, il n’est pas sp´ecialis´e
pour chaque th´eor`eme : on peut le v´erifier une fois pour toute, et apr`es s’en servir pour d´emontrer tout
et n’importe quoi. En plus, le fait qu’il soit g´en´erique et qu’il serve beaucoup augmente la probabilit´e
qu’on trouve les bugs qu’il pourrait contenir.
On peut donc dire que le d´eveloppement de l’informatique a bouscul´e la notion de «v´erit´e math´ematique »
de deux fa¸cons. D’une part en posant le probl`eme des preuves g´en´er´ees par ordinateur, et non-v´erifiables
`a la main. D’autre part, avec les syst`emes de v´erification de preuves, on peut se demander si une «vraie »
preuve, ce n’est pas plutˆot celle qui est v´erifi´ee par ordinateur.
Mais avant de rentrer dans les d´etails, il faut «r´eviser »les bases.
1 Logique propositionnelle
Vous ˆetes familier avec la logique propositionnelle, c’est-`a-dire o`u les variables sont bool´eennes (les seules
valeurs possibles sont “vrai” ou “faux”). Le fameux probl`eme SAT que vous avez sˆurement ´etudi´e consiste
`a d´eterminer, ´etant donn´e un formule de la logique propositionnelle, une valuation qui la satisfait. Les
SAT-solver sont des programmes efficaces, optimis´es depuis des d´ecennies pour r´esoudre ce probl`eme.
2. Haskell Curry. Oui, oui.
3. Avec les formules habituelles : «les autres cas se traitent de la mˆeme fa¸con »,«il est ´evident que ... »,«Le soin de
erifier ces d´etails est laiss´e au lecteur », etc.
2
efinition (Valuation)
Si ϕest une formule de la logique propositionnelle, une «valuation »de ϕest simplement une
affectation d’une valeur aux variables qui apparaissent dans ϕ.
Quand on s’ineresse aux preuves math´ematiques, on a plutˆot besoin d’un moyen de tester si une formule
est un th´eor`eme, c’est-`a-dire si elle est vraie quelles que soient les valeurs des variables (on dit qu’elle est
valide, et parle aussi de «tautologie »).
Il y a un moyen facile de tester si une formule ϕ(x1, . . . , xn) est un th´eor`eme : il suffit d’essayer les 2n
combinaisons des variables, et de v´erifier si on obtient «Vrai »`a chaque fois. Ceci demande clairement
un temps exponentiel, et l’inconenient c’est qu’on ne voit pas trop ce qui peut faire office de certificat.
En fait, il est facile de montrer le que probl`eme Non-Theorem, qui consiste `a montrer qu’une formule de
la logique propositionnelle n’est pas un th´eor`eme, est NP-complet (puisqu’il suffit d’exhiber une valuation
qui la rend fausse).
Question 4: Si on a un SAT-solver efficace sous la main, comment peut-on s’en servir pour tester si des
formules de la logique propositionnelle sont des th´eor`emes ?
Les math´ematiciens, eux, sont capables de produire des certificats que des formules logiques sont des
th´eor`emes : ces certificats sont les preuves math´ematiques. Ils sont d’ailleurs capables de le faire pour
des formules qui appartiennent `a une logique tr`es riche : les variables peuvent ˆetre des ensembles, des
entiers, des objets g´eom´etriques, des nombres r´eels, etc.
A contrario, la logique propositionnelle a un faible pouvoir expressif. En effet, on ne peut pas s’en servir
pour exprimer de grandes v´erit´es math´ematiques telles que «il existe une infinit´e de nombres premiers ».
Pour cela, il faudrait au moins qu’on puisse avoir sous la main des variables enti`eres, et pas seulement
des variables bool´eennes. Les langages d´edi´es comme coq ont un syst`eme de types tr`es riche, qui permet
d’exprimer les math´ematiques usuelles.
Cependant, ce probl`eme n’est pas fondamental pour comprendre la correspondance «Preuve Pro-
gramme ». On va voir un syst`eme de preuve qui permet de «emontrer »des formules de la logique
propositionnelle.
2 Calcul des s´equents
Les math´ematiciens ne s’emetent g´en´eralement pas `a formaliser le syst`eme dans lequel ils essayent
de d´emonter des th´eor`emes. Il y a des «r`egles de raisonnement »qui sont connues de tous, et dont
l’application (correcte) donne des raisonnements valables.
Ce flou artistique est adapt´e aux ˆetres humains, mais pas vraiment aux machines. Plusieurs syst`emes de
preuves formels ont ´et´e con¸cus au d´ebut du XX`eme si`ecle. Dans ces syst`emes, les r`egles de raisonnement
sont explicites, on doit les appliquer `a la lettre, et on ne doit rien faire d’autre. Du coup ces syst`emes
sont bien adapt´e `a un traitement automatis´e (c’est d’ailleurs pour cela qu’ils avaient ´et´e con¸cu). Le calcul
des s´equents, con¸cu par Gentzen 4est le plus pratique (pour des machines).
efinition (S´equent)
Un «s´
equent »est une expression de la forme :
H1, . . . , Hm`C1, . . . , Cn.
Le s´equent est compos´e de deux s´equences (finies) de formules logiques, les hypoth`
eses (`a gauche)
et les conclusions (`a droite).
Notation : on note g´en´eralement les formules par des lettres majuscules (A, B, C, . . . ), et les s´e-
quences de formules par des lettres grecques majuscules (,Λ,Π, . . . ).
La “signification” intuitive du s´equent est
(H1 · · · Hm) =(C1 · · · Cn),
c’est-`a-dire que sous les hypoth`eses H1, . . . , Hmau moins une des conclusions C1, . . . , Cnest vraie.
Le calcul des s´equents est un ensemble de r`egles permettant de construire des preuves.
4. 1909–1945. Devenu nazi pendant les ann´ees 1930, il est mort dans un camp sovi´etique.
3
efinition (R`egle)
De mani`ere tr`es (trop) g´en´erale, une r`
egle du calcul des s´equents s’´ecrit :
H1H2. . . Hm(R)
C
Dans cette r`egle (qui s’appelle R, comme indiqu´e `a droite), H1,...,Hmet Csont des s´equents. Les
Hisont les pr´
emisses de la r`egle, tandis que Cen est la conclusion.
Si les pr´emisses sont valides, alors l’application de la r`egle garantit que la conclusion est valide.
Les preuves dans le calcul des s´equents sont des arbres dont les noeuds correspondent `a l’application de
r`egles. Les feuilles de cet arbre sont des r`egles sans pr´emisses, c’est-`a-dire des r`egles de la forme :
(R)
C
Il n’est pas tr`es difficile de d´emontrer que si une formule de la logique proposistionnelle se retrouve `a la
racine d’une arbre de preuve bien form´e dans le calcul des s´equents, alors cette formule est un th´eor`eme
(la r´eciproque est plus d´elicate, mais vraie aussi).
2.1 Calcul des s´equents propositionnel
Le calcul des s´equents peut servir `a «prouver »des formules dans la logique du premier ordre, qui est
plus puissante que la logique propositionnelle, mais ¸ca en nous concerne pas aujourd’hui.
Le calcul des s´equents propositionnel, lui, permet de prouver des formules de la logique propositionnelle.
Il est form´e des r`egles suivantes, qui se r´epartissent traditionnellement en trois groupes.
Groupe identit´e. Ces r`egles font apparaˆıtre (Ax) ou disparaˆıtre (Cut) une formule A
(Ax)
A`AΓ`, A Γ, A `( Cut)
Γ`
Groupe logique. Donne les r`egles correspondant aux connecteurs logiques. Le ET et le OU jouent
des rˆoles symm´etriques :
Γ, A, B `(∧ ` )
Γ, A B`
Γ`A, Γ `B, (` ∧ )
Γ`AB,
Γ, A `∆ Γ, B `(∨ ` )
Γ, A B`
Γ`A, B, (` ∨)
Γ`AB,
La n´egation permet de faire passer des formules d’un cˆot´e ou de l’autre du s´equent :
Γ`A, (¬ `)
Γ,¬A`
Γ, A `(` ¬)
Γ` ¬A,
On pourrait d´efinir ABpar ¬AB, mais on peut aussi introduire directement des r`egles :
Γ`A, ∆ Γ, B `(⇒` )
Γ, A B`
Γ, A `B, (`⇒)
Γ`AB,
Question 5: Les r`egles de la n´egation sont probablement les plus ´etranges. Justifiez-les.
Groupe structurel. Il s’agit de r`egle qui n’ont pas de contenu logique `a proprement parler, mais qui
sont l`a parce qu’on suppose que les diff´erentes formules qui composent un s´equent sont ordonn´es.
L’affaiblissement (Weakening) consiste `a retirer des hypoth`eses, o`u ajouter des conclusions («qui peut le
plus peut le moins »), tandis que la contraction et la permutation dupliquent ou r´earrangent des formules :
4
Γ`(W`)
Γ, A `
Γ`(`W)
Γ`B,
Γ, A, A `(C`)
Γ, A `
Γ`B, B(`C)
Γ`B,
Γ, A, Π, B `(P`)
Γ, B, Π, A `
Γ`A, , B, Σ(`P)
Γ`B, , A, Σ
Ces r`egles permettent de d´emontrer les formules valides de la logique propositionnelle (o`u les variables
valent «vrai »ou «faux »), et o`u il n’y a pas de quantificateurs.
2.2 exemples
De petits dessins valant mieux que de longs discours, voici deux «preuves »:
(Ax)
A`A(` ¬ )
` ¬A, A (`P )
`A, ¬A(` ∨ )
`A∨ ¬A
(Ax)
A`A(`W)
A`B, A (`⇒)
`(AB), A (Ax)
A`A(⇒` )
(AB)A`A, A (`C )
(AB)A`A(`⇒ )
`((AB)A)A
En fait, les arbres de preuves sont tr`es redondants : dans presque tous les cas, si on connaˆıt le dessous
de la r`egle, alors on connaˆıt aussi le dessus. On pourrait donc retirer presque tout le contenu de l’arbre,
sauf la conclusion, et on serait encore capable de reconstituer ce qui est parti :
`(((ab)a)a)
`⇒
⇒`
Ax
`⇒
`W
Ax
Il y a cependant deux petites exceptions :
Dans (Cut), on ne connaˆıt pas A, qui est une formule arbitraire.
Dans (P`) et (`P) on ne connaˆıt pas la position de B.
Donc, si on veut retirer tout ce qui ne sert `a rien des arbres de preuve, il faut quand mˆeme y faire
figurer les informations ci-dessus. Pour Cut il faut donner la formule A, et pour les permutations, il suffit
d’ajouter un entier qui indique la position de B.
Il faut noter qu’une mˆeme formule peut admettre des preuves diff´erentes. Par exemple, la formule
ha(bc)i=h(b⇒ ¬a)∧ ¬c⇒ ¬ai
admet (au moins) deux preuves diff´erentes :
5
1 / 9 100%