Cours1 3
Cours1 3
L3 Informatique 2013/2014
1 Introduction 5
1.1 Pourquoi la logique ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 La formalisation du langage . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 La formalisation du raisonnement . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Logique et informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Contenu du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Calcul propositionnel 7
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Syntaxe du calcul propositionnel : les formules . . . . . . . . . . . . . . . . . . . . 7
2.3 Sémantique du calcul propositionnel . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Modèles d’une formule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 La conséquence logique (d’un ensemble de formules) . . . . . . . . . . . . . 12
2.3.3 Décidabilité du calcul propositionnel . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Equivalence entre formules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.1 La substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.2 Equivalences classiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.3 Formes normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5 Le problème SAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.1 Définition du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.2 Un problème NP-complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.3 Modélisation - Réduction à SAT . . . . . . . . . . . . . . . . . . . . . . . . 23
2.5.4 Algorithmes de résolution de SAT . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.5 Sous-classes de SAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5.6 Les SAT-solvers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.7 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.8 Sur la modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.6 Systèmes de preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.6.1 Définition d’un système formel . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.6.2 La résolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.6.3 Correction, complétude et décidabilité . . . . . . . . . . . . . . . . . . . . . 38
2.6.4 Systèmes de preuve à la Hilbert . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.7 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3
4 TABLE DES MATIÈRES
3.3.5 Interprétation 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3.6 Interprétation 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.7 Comparaison des interprétations . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4 Expressions et formules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4.1 Les termes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4.2 Le langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4.3 Les formules du calcul des prédicats . . . . . . . . . . . . . . . . . . . . . . 50
3.4.4 Occurrences libres et liées d’une variable . . . . . . . . . . . . . . . . . . . . 51
3.5 Sémantique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.5.1 Structures et valuations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.5.2 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.5.3 Un exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.5.4 Vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.6 Manipulation de formules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.6.1 Substitution de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.6.2 Equivalences classiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.6.3 Formes Normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.7 Unification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.7.1 Substitions et MGUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.7.2 Algorithme d’unification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.7.3 Correction et completude . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.8 Résolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.8.1 Substitution, sur les formules propostionnelles . . . . . . . . . . . . . . . . . 63
3.8.2 Les règles du calcul de la résolution . . . . . . . . . . . . . . . . . . . . . . 64
3.8.3 Utilisation d’un démonstrateur automatique . . . . . . . . . . . . . . . . . . 67
4 Calculabilité 73
4.1 Machines de Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2 Problèmes de décision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.3 Un problème indécidable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.4 Thèse de Chruch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.5 Indecidabilité de la logique du premier ordre . . . . . . . . . . . . . . . . . . . . . . 75
Chapitre 1
Introduction
5
6 Chapitre 1. Introduction
système formel de preuve. Il n’existe donc pas d’algorithme qui permette de savoir si un énoncé
mathématique est vrai.
Calcul propositionnel
2.1 Introduction
Les formules (ou phrases, ou énoncés) du calcul propositionnel sont de deux types : ou bien
une formule est une proposition atomique, ou bien elle est composée à partir d’autres formules
à l’aide des connecteurs logiques ^, ¬, _, ) (et, non, ou, implique, que l’on appelle connecteurs
propositionnels).
Considérons, par exemple, l’énoncé arithmétique « 2+2 = 4 ou 3+3 = 5 ». Cet énoncé peut se
considérer comme construit des propositions atomiques « 2+2 = 4 » et « 3+3 = 5 », via le connecteur
propositionnel ou. Une analyse similaire peut se faire pour les énoncés du langage naturel. On
considère l’énoncé « s’il pleut, alors le soleil se cache », que l’on reconnaîtra être équivalent à « il
pleut implique que le soleil se cache », comme obtenu des deux propositions atomiques « s’il pleut »
et « le soleil se cache » via le connecteur propositionnel implique.
Une proposition atomique est un énoncé simple, ne pouvant prendre que les valeurs "vrai" ou
"faux ", et ce de façon non ambiguë ; elle donne donc une information sur un état de chose. De
plus une proposition atomique est indécomposable : « le ciel est bleu et l’herbe est verte » n’est
pas une proposition atomique mais la composition de deux propositions atomiques. Dans l’analyse
du langage naturel, on ne peut pas considérer comme des propositions : les souhaits, les phrases
impératives ou les interrogations.
Nous avons déjà vu des exemples de formules composées. Considérons maintenant l’énoncé
« s’il neige, alors le soleil se cache et il fait froid ». C’est une formule composée, via le connecteur
implique, depuis la formule atomique « il neige » et la formule composée « le soleil se cache et il fait
froid ». On peut donc composer des formules à partir d’autres formules composées. La valeur de
vérité d’une formule composée se calcule comme une fonction des formules dont elle est composée.
Le calcul des propositions est la première étape dans la définition de la logique et du rai-
sonnement. Il définit les règles de déduction qui relient les phrases entre elles, sans en examiner
le contenu ; il est ainsi une première étape dans la construction du calcul des prédicats, qui lui
s’intéresse au contenu des propositions.
Nous partirons donc en général de faits : "p est vrai, q est faux" et essaierons de déterminer si
une affirmation particulière est vraie.
Remarque 2.1. Dans la littérature logique on utilise plusieurs synonymes pour symbole proposi-
tionnel ; ainsi variable propositionnelle, proposition atomique, formule atomique, ou encore atome
sont tous des synonymes de symbole propositionnel.
7
8 Chapitre 2. Calcul propositionnel
L’ensemble Fcp des formules du calcul propositionnel est le plus petit ensemble tel que :
— tout symbole propositionnel est une formule ;
— si ' est une formule alors ¬' est une formule ;
— si ', sont des formules alors ' _ , ' ^ et ' ) sont des formules.
Les symboles auxiliaires ne sont utilisés que pour lever les ambiguïtés possibles : par exemple,
la formule p _ q ^ r est ambiguë, car elle peut se lire de deux façons différentes, ((p _ q) ^ r) ou bien
(p _ (q ^ r)).
Exemple 2.2. p, p ) (q _ r) et p _ q sont des formules propositionnelles ; ¬(_q) et f (x) ) g(x)
n’en sont pas.
A cause de la structure inductive de la définition, une formule peut-être vue comme un arbre
dont les feuilles sont étiquetés par des symboles propositionnels et les noeuds par des connecteurs.
Par exemple, la formule p ) (¬q ^ r) correspond à l’arbre représenté Figure 2.2.
p ^
¬ r
Notation 2.3. On utilise souvent en plus le connecteur binaire , comme abréviation : ' , est
l’abréviation de (' ) ) ^ ( ) '). De la même façon, on ajoute le symbole ? qui correspond à
Faux et le symbole > qui correspond à Vrai. Ces deux symboles sont aussi des abréviations, ils ne
sont pas indispensables au langage. (Par exemple ? peut être utilisé à la place de p ^ ¬p et > à la
place de p _ ¬p.)
Définition 2.4 (Sous-formule). L’ensemble SF (') des sous-formules d’une formules ' est défini
par induction de la façon suivante.
— SF (p) = {p} ;
— SF (¬') = {¬'} [ SF (') ;
— SF (' ) = {' } [ SF (') [ SF ( ) (où désigne un des symboles ^, _, )).
Par exemple, SF (p ) (¬q ^ r)) = {p, q, r, ¬q, ¬q ^ r, p ) (¬q ^ r)}. Quand on voit une formule
comme un arbre, une sous-formule est simplement un sous-arbre (voir Figure 2.2).
Définition 2.5 (Sous-formule stricte). est une sous-formule stricte de ' si est une sous-formule
de ' qui n’est pas '.
p ^
¬ r
Une valuation sera souvent donnée sous forme d’un tableau. Par exemple, si Prop = {p, q}
p q
alors la valuation v : p 7! 1, q 7! 0 s’écrit plus simplement v :
1 0
Une fois la valuation v choisie, la valeur de la formule se détermine de façon naturelle, par
extension de la valuation v aux formules de la façon suivante :
La définition précédente peut apparaître trompeuse car circualire : afin d’expliquer la logique,
nous somme en train de l’utiliser (ssi, ou, et . . . ). Par ailleurs, on peut se servir de la définition
suivante qui est en effet équivalente à la Définition 2.7 :
Cette dernière définition est purement combinatoire car elle repose sur la structure de l’ensemble
ordonné fini { 0 < 1 } ; nous supposons en fait que cette structure est évidente et claire par soi-même
qu’il n’y a pas besoin de la justifier par d’autres moyens.
Exercice 2.9. Proposez un algorithme qui, étant donné une formule ' du calcul propositionnel et
une valuation v, calcule v('). Quel type de structure de données utiliser pour coder les formules ?
Quel type de structure de données utiliser pour coder les valuations ?
Notez que la définition 2.8 correspond aux tables de vérité des connecteurs logiques (dont vous
avez sûrement entendu parler) :
lors que ' est évaluée à faux. Ceci est peu naturel, car dans le langage courant, on ne s’intéresse à
la vérité d’un tel énoncé que lorsque la condition est vraie : "s’il fait beau je vais à la pêche" n’a
d’intérêt pratique que s’il fait beau. . . Attribuer la valeur vrai dans le cas ou la prémisse est fausse
correspond a peu près à l’usage du si .. alors dans la phrase suivante : "Si Pierre obtient sa Licence,
alors je suis Einstein" : c’est à dire que partant d’une hypothèse fausse, alors je peux démontrer
des choses fausses (ou vraies). Par contre, il n’est pas possible de démontrer quelque chose de faux
partant d’une hypothèse vraie.
D’autres exemples où il est difficile de coder le langage naturel via le langage formel :
— comment coderiez vous, en langage formel, l’énoncé français « Soit il est frais, soit il est
chaud » ?
— et comment coderiez vous l’énoncé anglais « Either I cannot understand French, or my
professor doesn’t know how to speak it » ?
p q p,q
0 0 1
0 1 0
1 0 0
1 1 1
Exercice 2.11. Définissons l’ensemble Prop('), des variables propositionnelles contenues dans
' 2 Fcp , par induction comme suit :
Prop(p) = { p } ,
Prop(¬') = Prop(') ,
Prop(' ) = Prop(') [ Prop( ) , 2 { ^, _, ) } .
Montrez que :
— Prop(') = Prop \ SF ('), pour tout ' 2 Fcp ;
— si v(p) = v 0 (p) pour tout p 2 Prop('), alors v(') = v 0 (').
Par exemple, si Prop = {p, q, r}, alors Val est représenté par la Table 2.3.1, dans lequel chaque
ligne est une valuation de Prop :
p q r
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Définition 2.13 (Modèle d’une formule). Un modèle de ' est une valuation v telle que v(') = 1.
On note mod(') l’ensemble des modèles de '.
2.3 Sémantique du calcul propositionnel 11
Exemple 2.14. Si Prop = {p, q, r} et ' = (p _ q) ^ (p _ ¬r) alors l’ensemble des modèles de ' est
p q r
0 1 0
1 0 0
mod(') =
1 1 1
1 1 0
1 1 1
Définition 2.15 (Satisfaisabilité). Une formule ' est satisfaisable (ou consistante, ou encore
cohérente) si elle admet un modèle (i.e., s’il existe une valuation v telle que v(') = 1, i.e. si
mod(') 6= ?).
Définition 2.16 (Insatisfaisabilité). Une formule ' est insatisfaisable (ou inconsistante, ou
incohérente) si elle n’admet aucun modèle (i.e., si pour toute valuation v, v(') = 0, i.e., si
mod(') = ?)
Définition 2.17 (Tautologie). Une formule ' est une tautologie (ou valide) si v(') = 1 pour
toute valuation v (i.e., si mod(') = Val). On note |= ' pour dire que ' est une tautologie.
Un exemple de tautologie est ' _ ¬', c’est à dire le tiers exclus.
Exercice 2.18. Montrez que les formules suivantes sont des tautologies :
p ) p, p ) (q ) p) , (p ) (q ) r)) ) ((p ) q) ) (p ) r)) , ((p ) q) ) p) ) p .
Définition 2.19 (Equivalence). On dit que ' est équivalente à si les deux formules ont les
mêmes modèles (i.e. si mod(') = mod( )). On note alors ' ⌘ .
Exemple 2.20. Les opérateurs ^, _ sont associatifs-commutatifs. Deux formules identiques à
associativité-commutativité près sont équivalentes. Remplacer une sous-formule d’une formule
' par une formule équivalente 0 donne une formule notée '[ 0
]. Cette substitution préserve
les modèles, i.e., mod(') = mod('[ 0
]).
Exercice 2.21. Prouvez les équivalences suivantes :
'_?⌘' '^?⌘? (' ^ ) ^ ✓ ⌘ ' ^ ( ^ ✓)
'_>⌘> '^>⌘' (' ^ ) _ ✓ ⌘ (' ^ ✓) _ ( ^ ✓)
'_ ⌘ _' '^ ⌘ ^' (' _ ) ^ ✓ ⌘ (' ^ ✓) _ (' ^ ✓)
'_'⌘' ¬(' _ ) ⌘ (¬') ^ (¬ ) (' _ ) _ ✓ ⌘ ' _ ( _ ✓)
¬¬' ⌘ ' '^'⌘' ¬(' ^ ) ⌘ (¬') _ (¬ ) .
Proposition 2.22. Soient ' et deux formules, on a :
1. mod(¬') = Val mod(') ;
2. mod(' _ ) = mod( ) [ mod( ) ;
3. mod(' ^ ) = mod( ) \ mod( ) ;
4. |= ' ) ssi mod(') ✓ mod( ).
Démonstration. 1. pour toute valuation v 2 Val,
v 2 mod(¬') ssi v(¬') = 1
ssi v(') = 0
ssi / mod(')
v2
ssi Val mod(')
4.
Définition 2.23 (Conséquence logique). Une formule est conséquence logique d’une formule
' si tout modèle de ' est un modèle de (i.e., si mod(') ✓ mod( )). On note alors ' |= .
Définition 2.26 (Modèle). Un modèle d’un ensemble de formules est une valuation v telle que
v(') = 1 pour tout ' 2 . On note mod( ) l’ensemble des modèles de .
Cet ensemble de modèles est donc l’ensemble des valuations qu’on peut attribuer aux variables
si on veut respecter toutes les contraintes de .
Un ensemble contradictoire ne peut être satisfait : par exemple l’ensemble = {p, ¬p} est
insatisfaisable.
2.3 Sémantique du calcul propositionnel 13
Définition 2.28 (Conséquence logique). Une formule ' est conséquence logique de si et seule-
ment si toute valuation qui donne 1 à toutes les formules de donne 1 à ' (i.e., si mod( ) ✓ mod(')),
on note alors |= '. On note cons( ) l’ensemble des conséquences logiques de .
Remarque 2.29. Attention aux deux notations :
— |= ' où est une formule ;
— |= ' où est un ensemble de formule.
Remarquez, par ailleurs que ' |= si, et seulement si, { ' } |= ; les deux dernières notations sont
donc cohérentes entre elles.
Voici des relations élémentaires entre les relations que nous venons de présenter.
Proposition 2.30. |= ' ssi [ {¬'} est contradictoire.
Démonstration. |= ' ssi
pour toute valuation v
— soit v est un modèle de et v(') = 1
— soit v n’est pas un modèle de
ssi pour toute valuation v
— soit v est un modèle de et v(¬') = 0
— soit v n’est pas un modèle de
ssi pour toute valuation v, v n’est pas un modèle de [ {¬'}
ssi [ {¬'} est contradictoire.
Proposition 2.31. Pour tous ensembles de formules ⌃, ,
mod(⌃ [ ) = mod(⌃) \ mod( ).
Soit 1 = {'1 , '2 , '3 }, cet ensemble forme l’ensemble des prémisses à partir desquelles nous
allons essayer de déduire les valeurs que les variables propositionnelles peuvent prendre.
On se pose les questions suivantes :
1. Peut-on simplifier l’ensemble 1 de façon à ne pas changer l’ensemble de ses modèles, et donc
de ses conséquences ?
(a) On remarque que la contrainte '3 est une conséquence logique de la contrainte '1 .
En effet, pour toute valuation v,
— v satisfait '1 ssi v(pC ) = 0 et v(pB ) = 1,
— v satisfait '3 ssi v(pC ) = 0 et (v(pA ) = 1 ou v(pB ) = 1).
D’où, mod('1 ) ✓ mod('3 ).
(b) Soit 2 = {'1 , '2 }, on a mod( 2 ) = mod( 1 ). En effet, par définition,
mod( 1 ) = mod('1 ) \ mod('2 ) \ mod('3 ) = mod('1 ) \ mod('2 ) = mod( 2 ).
Donc les conséquences de 1 et 2 sont les mêmes et on peut alors simplifier 1 par 2.
2. Quel est l’ensemble des modèles de 2?
2.3.2.1 Compacité
Le théorème de compacité sert à caractériser la conséquence logique dans les cas où l’ensemble
des formules est infini en ne considérant que des sous-ensembles finis. Par ailleurs, ce théorème
jouera un rôle cruciale plus tard, dans le cadre de la preuve de complètude pour la calcul de la
résolution (Théorème 3.66).
Le théorème de compacité Pour commencer, nous avons besoin du lemme suivant appelé
Lemme de König.
Lemme 2.37 (König). Tout arbre infini à branchement fini possède une branche infinie.
Démonstration. Supposons que T , qui est à branchement fini, soit infini. On définit une branche
infinie dans T , ce qui mènera à la conclusion. Pour construire cette branche, on montre, par
induction sur les entiers, que la propriété suivante :
P (n) ::= il existe une branche e0 , . . . , en telle que le sous arbre issu de en est infini
Lemme 2.38. Tout arbre a branchement fini et dont toutes les branches sont finies, est fini.
p0
0 1
p1
0 1 0 1
p 0 ) p1 p2
Nous appelons un noeud e de l’árbre noeud d’échec (par rapport à ) s’il existe une formule 'e 2
telle que Prop('e ) ✓ { p0 , . . . pn 1 } et ve ('e ) = 0, où n est la profondeur du noeud e.
Remarque 2.42. On peut donner une preuve plus simple du théorème de compacité en utilisant
les propriétés des systèmes de preuves. Nous la donnerons par la suite, lorsque nous aurons les
outils nécessaires.
Corollaire 2.43. Une formule ' est conséquence d’un ensemble de formules si et seulement s’il
existe un sous-ensemble fini f ini de tel que f ini |= '.
2.3 Sémantique du calcul propositionnel 17
Démonstration.
Nous verrons par la suite qu’il y a de meilleurs algorithmes, mais qu’il ont tous un coût ex-
ponentiel. La plupart de ces algorithmes débutent par une première phase de normalisation de la
formule, c’est à dire qu’on modifie la syntaxe de la formule de manière à la mettre sous une forme
normalisée, tout en conservant la sémantique de la formule, c’est-à-dire l’ensemble de ses modèles.
18 Chapitre 2. Calcul propositionnel
2.4.1 La substitution
La substitution d’une formule par une formule 0 dans une troisième formule ' (notée '[ 0])
p) _ q) ^ ((q ) p) _ ¬r).
Plus formellement, la substitution est définie de la façon suivante :
Définition 2.45 (Substitution). Soient ', , et 0 trois formules du calcul propositionnel,
— si n’est pas une sous-formule de ', alors '[ 0] = '
— sinon
— si ' = ¬'0 alors '[ 0 ] = ¬('
0
[ 0])
Démonstration. Voir TD 3.
Attention, dans le cas général, la substitution ne conserve pas la sémantique de la formule. Par
exemple, p et q ^ ¬q ne sont pas équivalentes ; ainsi, les formules p et p[p q ^ ¬q] ne sont pas
équivalentes.
Notations. Remarquons que, à cause des lois d’associativité et commutativité, toutes les pos-
sibles formules construites à partir des formules '1 , . . . , 'n via l’application du connecteur logique
^, sont équivalentes. Par exemple
(('1 ^ '2 ) ^ '3 ) ^ '4 , '1 ^ (('2 ^ '3 ) ^ '4 ) , '1 ^ ('2 ^ ('3 ^ '4 )) , ('2 ^ '4 ) ^ ('3 ^ '1 ) ,
sont des formules équivalentes. Une remarque analogue vaut pour le connecteur logique _.
Ainsi, si '1 , . . . , 'n sont des formules, nous pourrons utiliser les notations :
n
^ n
_
'i = ' 1 ^ . . . ^ 'n et 'i = '1 _ . . . _ ' n
i=1 i=1
pour dénoter un parenthésage arbitraire de '1 ^ . . . ^ 'n (resp. '1 _ . . . _ 'n ). Les choix de l’ordre
et du parenthésage ne sont donc pas significatifs, au moins du point de vue sémantique.
Nous pouvons même étendre nous considérations plus loin : si possède plus que deux occur-
rence dans la liste '1 , . . . , n , nous pouvons effacer les doublons de cette liste pour obtenir des
formules équivalentes. Par exemple, les formules
Définition 2.47 (Littéral). Un littéral est une formule atomique ou la négation d’une formule
atomique. Autrement dit, c’est une formule ` de la forme p ou ¬p, où p est un symbole proposi-
tionnel.
Wn
Définition 2.48 (Clause). Une clause disjonctive est une disjonction de littérauxV: i=1 `i où
n
les `i sont des littéraux. Une clause conjonctive est une conjonction de littéraux : i=1 `i où les
`i sont des littéraux.
Définition 2.49 (Forme normale conjonctive). Une formule conjonctive (ou formule sous forme
normale Vmconjonctive (FNC), ou sous forme clausale) est une V conjonction de clauses disjonc-
m W nj
tives : j=1 Cj où les Cj sont des clauses disjonctives, ou encore j=1 i=1 `ji où les `ji sont des
littéraux.
Exemple 2.50. La formule suivante est sous forme clausale :
(¬p _ q _ r) ^ (¬q _ p) ^ s
Définition 2.51 (Forme normale disjonctive). Une formule disjonctive (ouWmformule sous forme
normale disjonctive (FND)) est une disjonction de clauses conjonctives : j=1 Cj où les Cj sont
W m V nj j
des clauses, ou encore j=1 i=1 `i , où les `ji sont des littéraux.
Exemple 2.52. La formule suivante est sous forme normale disjonctive :
(¬p ^ q ^ r) _ (¬q ^ p) _ s
20 Chapitre 2. Calcul propositionnel
La forme normale conjonctive est en général la plus adaptée lorsqu’on cherche un modèle d’une
formule car il faut chercher une valuation satisfaisant chacune des clauses de la formule. Dans
l’exemple 2.50, on voit que si v est un modèle, alors forcément v(s) = 1 ; pour satisfaire la deuxième
clause, il faut que v(p) = 1 ou v(q) = 0, mais alors la seule façon de satisfaire la première clause
est r = 1. Il y a donc deux modèles.
') ¬' _ .
Etape 2 (pousser la négation vers les symboles propositionnels). Appliquer, tant que pos-
sible, les substitutions suivantes (en remplaçant le membre gauche par le membre droit) :
Etape 3 (pousser la disjonction vers les littéraux). Appliquer, tant que possible, les substi-
tutions suivantes (en remplaçant le membre gauche par le membre droit) :
Proposition 2.54. Le calcul précédent termine et donne une formule en forme clausale équivalente
à la formule initiale.
Proposition 2.56. Soit ', 2 Fcp and soit p 62 Prop( ) ; supposons que ' ne contient pas de
négations. On a alors que
Démonstration. Soit v d’abord une valuation telle que v('[p ]) = 1. On peut étendre cette
valuation à p, en définissant v(p) = v( ), et on aura alors v(' ^ (p ) )) = 1.
Par contre, considérons un modèle v de ' ^ p ) est un modèle de ' tel que v(p) v( ). Par
induction sur ', en considérant que la négation n’apparaît pas dans ', on trouve que 1 = v(')
v('[p ]).
Exercice 2.57. Montrez que l’hypothèse que la négation n’apparaît pas dans ' est nécessaire.
Exercice 2.58. Montrez que les deux formules '[p ] et ' ^ (p ) ) ne sont pas équivalentes.
2.5 Le problème SAT 21
Dans cet exemple le nombre de clauses produites a taille exponentielle par rapport au nombre de
clauses originaires.
La Proposition 2.56 montre que la formule (2.1) est equisatisfaisable avec la formule
n
^
(q1 _ . . . _ qn ) ^ (¬qi _ pi,0 ) ^ (¬qi _ pi,1 ) ,
i=1
une formule en FNC, avec un nombre de clauses de taille linéaire par rapport au nombre de clauses
originaires.
La Proposition 2.56 suggère donc une méthode de mise en forme clausale, préservant la sa-
tisfaisabilité, qui accélère le calcul de la forme clausale. La méthode s’applique si nous sommes
intéressés seulement à l’existence d’un modèle, et non pas à énumérer tous les modèles. Parmi les
défauts de la méthode, le fait qu’il introduit des nouveaux symboles propositionnels, ce qui alourdi
évidemment les calculs de recherche d’un modèle.
— d’un autre côté, si ' est satisfiable, il suffit d’une vérification à faire, à savoir tester précisé-
ment la configuration qui satisfait '. Cette vérification demande un simple calcul booléen,
qui se fait en temps polynomial (essentiellement linéaire en fait). Le temps de calcul cesse
donc d’être exponentiel, à condition de savoir quelle configuration tester. Celle-ci pourrait
par exemple être donnée par un être omniscient auquel on ne ferait pas totalement confiance.
Une telle démarche est dite non déterministe.
La question de la satisfiabilité de ', ainsi que tous les problèmes qui se résolvent suivant
la méthode que nous venons d’esquisser, sont dits NP (pour polynomial non déterministe). Par
exemple, tester si la formule ' est une tautologie équivaut, par des calculs très simples en temps
polynomial, à tester que sa négation n’est pas satisfaisable (par la Proposition 2.22).
Le problème SAT joue un rôle fondamental en théorie de la complexité, puisqu’on peut montrer
que la découverte d’un algorithme déterministe en temps polynomial pour ce problème permettrait
d’en déduire des algorithmes déterministes en temps polynomial pour tous les problèmes de type
NP (théorème de Cook). On dit que SAT (et donc également le problème de la non-démontrabilité
d’une proposition) est un problème NP-complet.
2.5 Le problème SAT 23
et posons :
— trois : le triangle a trois côtés égaux
— equi : le triangle est équilatéral
L’enoncé se traduit par trois , equi. En effet, décomposons l’énoncé :
— « Le triangle est équilatéral si il a trois coté égaux » se traduit par trois ) equi.
— « Le triangle est équilatéral seulement si il a trois coté égaux » signifie que si le triangle est
équilatéral, alors il a forcément trois cotés égaux et se traduit donc par equi ) trois.
On a donc trois ) equi ^ equi ) trois, ce qui est équivalent à equi , trois.
Pourtant il faut entendre un "si et seulement si". Il s’agit d’une convention à laquelle vous devez
vous habituer.
Condition nécessaire et suffisante : Cette expression est une autre version du "si et seulement
si". Posons :
— note : avoir une bonne note
— travail : travailler
et considérons l’énoncé :
ou de façon équivalente :
Décomposons l’énoncé :
— P1 = « Pour avoir une bonne note il faut travailler » signifie qu’il faut nécessairement
travailler pour avoir une bonne note. On a donc la table suivante :
note travail P1
1 1 1
1 0 0
0 0 1
0 1 1
Donc P1 ⌘ note ) travail.
— P2 = « Pour avoir une bonne note, il suffit de travailler » signifie que si on travaille, on a
une bonne note :
note travail P1
1 1 1
1 0 1
0 0 1
0 1 0
Donc P2 ⌘ travail ) note.
Pour être un Sudoku, la grille doit accepter une et une seule solution.
Formalisation. Pour représenter le problème sous forme de problème SAT, nous avons besoin
de beaucoup de variables propositionnelles. En effet il faut n3 variables Vxyz avec x, y et z in [1, n].
La variable Vxyz sera vraie si et seulement si la case (x, y) contient la valeur z. Par exemple, si V135
est vraie, alors la case (1, 3) contient 5. Si on prend n = 4, il faudra 64 variables, pour n = 9 il en
faut 729. Voici la formulation des règles de remplissage d’un Sudoku.
« Chaque case contient un et un seul chiffre » : pour tout i 2 [1, n], pour tout j 2 [1, n], il
existe k 2 [1, n] tel que la case (i, j) contient k et pour tout k 0 6= k dans [1, k] : la case (i, j)
ne contient pas k 0 .
^ ^ _ ^
A= ( Vijk ^ ¬Vi,j,k0 )
i2[1,n] j2[1,n] k2[1,n] 0
k 2 [1, k]
k0 6= k
2.5 Le problème SAT 25
« On ne doit pas avoir deux chiffres identiques sur une même colonne » : pour toute colonne
i 2 [1, n], pour toutes lignes j 6= j 0 dans [1, n], pour toute valeur k 2 [1, n] : si la case (i, j)
contient k, alors la case (i, j 0 ) ne contient pas k.
^ ^ ^ ^
B= (Vi,j,k ) ¬Vi,j 0 ,k )
i2[1,n] j2[1,n] j 0 2 [1, n] k2[1,n]
j 0 6= j
« On ne doit pas avoir deux chiffres identiques sur une même ligne » : pour toute ligne
j 2 [1, n], pour toutes colonnes i 6= i0 dans [1, n], pour toute valeur k 2 [1, n] : si la case (i, j)
contient k, alors la case (i0 , j) ne contient pas k.
^ ^ ^ ^
C= (Vi,j,k ) ¬Vi0 ,j,k )
j2[1,n] i2[1,n] i0 2 [1, n] k2[1,n]
i0 6= i
« On ne doit pas y avoir deux chiffres identiques dans l’une des sous-grilles de taille ` ⇤ ` » :
pour tous x, x0 2 [1, `],
^ ^ ^ ^
D= (Vi,j,k ) ¬Vi0 ,j 0 ,k )
x,y2[0,` 1] i, i0 2 [1 + `x, ` + `x] j, j 0 2 [1 + `y, ` + `y] k2[1,n]
i 6= i0 j 6= j 0
Pour assurer qu’une grille donnée est un Sudoku, il faut indiquer les chiffres déjà inscrits et
vérifier qu’il y a une et une seule solution au problème. Par exemple, pour la grille donnée en
exemple, on crée la formule :
E = V1,9,5 ^ V2,9,3 ^ V5,9,7 ^ . . .
On cherche alors les modèles de la formule A ^ B ^ C ^ D ^ E. Si il n’y a qu’un seul modèle, alors
la grille est un Sudoku dont la solution est donnée par ce modèle.
Remarque 2.66. Nous pouvons identifier une formule en forme normale conjonctive ' avec l’en-
semble C des ses clauses. Par exemple, si
(donc ' est en FNC), alors son ensemble de clauses associé est
Algorithme de Quine
entrée : un ensemble de clauses C
sortie : vrai si C est satisfaisable ou f aux sinon
simplifier l’ensemble de clauses (cf. Remarque 2.64) ;
si C = ? retourner vrai
si C contient la clause ? retourner f aux
choisir le prochain p 2 Prop apparaissant dans une clause
si Quine(C[p ?]) = vrai alors retourner vrai
sinon retourner Quine(C[p >])
Exemple 2.67. Considerons { p1 _ p2 , ¬p1 _ p2 , p3 }. L’algorithme explore l’arbre de Herbrand
selon un parcours en profondeur gauche comme suit :
p1 _ p 2
¬p1 _ p2
p3
p2
p3
?
p3 p3
f aux
?
f aux vrai
Observons dans l’exemple précédent que nous sommes contraintes par l’algorithme de Quine à
essayer d’abord p1 , ensuite p2 , et puis p3 ; de façon similaire, l’algorithme demande d’évaluer un
symbole propositionnel d’abord à faux, et puis à vrai. Cette stratégie nous amène le plus souvent à
des calculs inutiles : par exemple, dans l’exemple précédent, nous construisons des noeuds suite aux
évaluations de p2 et p3 à faux, quand il est tout à fait évident que ces évaluations nous amènerons
à un échec.
2.5 Le problème SAT 27
En général, nous ne sommes pas contraint à suivre un ordre fixé au debut. Nous allons donc
chrecher d’améliorer l’algorithme de Quine pour trouver à la volée un ordre d’exploration des
symboles propositionnels, qui soit optimisé pour l’ensemble des clauses passé en entrée.
L’algorithme DPLL est considéré à ce jour comme l’une des méthodes les plus efficaces parmi
celles permettant de résoudre le problème SAT. Il peut être vu comme un raffinement de la méthode
de Quine ; l’amélioration principale qu’elle apporte est l’utilisation d’heuristiques pour accélérer le
parcours des solutions.
Algorithme DP LL
entrée : un ensemble de clauses C
sortie : vrai si C est satisfaisable ou f aux sinon
simplifier l’ensemble de clauses (cf. Remarque 2.64) ;
si C = ? retourner vrai
si C contient la clause ? retourner f aux
si C contient la clause p retourner DP LL(C[p >])
si C contient la clause ¬p retourner DP LL(C[p ?])
choisir p depuis une clause et b 2 { >, ? },
avec la bonne heuristique !
si DP LL(C[p b]) = vrai alors retourner vrai
sinon retourner DP LL(C[p ¬b])
Heuristiques. Les heuristiques sont très importantes car elles permettent de réduire rapidement
la taille de l’arbre de recherche. Parmi les heuristiques possibles :
Littéraux purs. Choisir les littéraux qui n’apparaissent que positivement (resp. négativement),
et parmi ceux-ci ceux qui sont présents le plus souvent.
Fréquence des variables. Choisir les variables qui apparaissent le plus dans les clauses les plus
courtes.
Littéraux “courts”. Choisir les littéraux apparaissant dans les clauses les plus courtes.
Les heuristiques précédentes peuvent se formaliser en définissant des fonctions qui donnent une
pondération à chaque variable et ensuite à chaque littéral. Par exemple, si on pose
X 1 X 1
rank+ (p, C) = , rank (p, C) = ,
cardC cardC
p2C,C2C ¬p2C,C2C
+
rank(p, C) = rank (p, C) + rank (p, C) ,
nous pouvons choisir une variable qui maximise la fonction rank pour donner un sens à l’heuristique
exprimé en langue française : choisir une variable apparaissant le plus, dans les clauses les plus
courtes. Ensuite nous essayerons le littéral p si rank+ (p) < rank (p), et ¬p sinon.
28 Chapitre 2. Calcul propositionnel
¬x1 _ x2
¬x2 _ x3
¬x3 _ x4
¬x1 _ ¬x4
x1 = 0 x1 = 1
¬x2 _ x3 x2
¬x3 _ x4 ¬x2 _ x3
heuristique : ¬x3 _ x4
x3 apparait le plus ¬x4
x3 = 0 x3 = 1
¬x2 x4 x2 = 1
x2 = 0 x4 = 1 x3
¬x3 _ x4
¬x4
VRAI VRAI
x3 = 1
x4
FAUX
¬x4
x1 x2 x3 x4
0 0 0 0
0 0 0 1
0 0 1 1
0 1 1 1
On remarque dans cet exemple que
— la propagation des clauses unitaires permet dans la branche de droite de ne suivre qu’un
seul chemin
— l’heuristique qui fait choisir x3 plutôt que x2 ou x4 réduit l’exploration
L’exécution est meilleure que si on avait fait une simple exploration de toutes les solutions (Algo-
rithme de Quine).
Par exemple, prenons l’ensemble de clauses
{{p, q, ¬r}, {q, s}, {¬p, q}, {¬r, s}, {p, ¬r}}.
Sans heuristique, on choisit les littéraux par ordre alphabétique.
— Choisir p : T ⇤p = {{q}, {¬r, s}}
— Choisir q : T ⇤p,q = {{¬r, s}}
— Choisir r : T ⇤p,q,r = {{s}}
— Choisir s : T ⇤p,q,r,s = ?
On a donc trouvé un modèle de l’ensemble initial, pour trouver tous les modèles, il faut continuer
le processus.
Si par contre on applique les heuristiques. Choisir q : T ⇤q = {{¬r, s}, {p, ¬r}} Choisir ¬r : T
q,¬r = ? On a donc trouver un modèle de l’ensemble initial, bien entendu si l’on cherche tous les
⇤
2.5.4.4 Conclusion
Il existe donc de nombreux algorithmes, certains sont des améliorations de ceux présentés ci-
dessus, souvent par des heuristiques par exemple sur l’ordre d’utilisation des règles. Les meilleurs
complexités atteintes pour ces algorithmes oscillent entre O(1.5n ) et O(1.3n )
Problème 2-SAT
entrée : un ensemble de clauses C d’ordre 2
sortie : vrai si C est satisfaisable ou f aux sinon
Contrairement à SAT, ce problème est résolvable en temps polynomial.
Algorithme 2-SAT :
Une clause d’ordre deux `1 _ `2 est équivalente à (¬`1 ) `2 ) ^ (¬`2 ) `1 ). Pour résoudre SAT pour
une formule ' d’ordre 2, on construit le graphe orienté G(') = (S, A) dual (appelé graphe 2-SAT)
selon les deux règles suivantes :
— l’ensemble des sommets est S = {¬p | p 2 Prop(')} [ Prop(') (où Prop(') est l’ensemble
des variables propositionnelles de la formule ' ). C’est l’ensemble des littéraux sur Prop(')
— l’ensemble des arcs est A = {(`1 , `2 ) | ' contient une clause équivalente à `1 ) `2 }.
Chaque clause `1 _ `2 est donc associée à deux arcs (¬`1 , `2 ) et (¬`2 , `1 ).
Alors, la formule ' est insatisfaisable ssi il existe une variable p telle qu’il existe dans G(') un
chemin allant de p à ¬p et un chemin allant de ¬p à p. En effet, cela signifie alors que ' |= (p )
¬p) ^ (¬p ) p) ce qui est équivalent à ?.
Une autre formulation est la suivante : la formule ' est satisfaisable si et seulement si pour
chaque variable propositionnelle p, les sommets p et ¬p du graphe 2-SAT sont dans deux compo-
santes fortement connexes distinctes. (une composante fortement connexe d’un graphe orienté G
est un sous-graphe maximal de G tel que pour toute paire de sommets u et v dans ce sous-graphe,
il existe un chemin de u à v et un chemin de v à u.)
L’algorithme de Tarjan permet de calculer les composantes fortement connexes d’un graphe
orienté en O(|S| + |A|) , donc 2-SAT est bien polynomial.
30 Chapitre 2. Calcul propositionnel
p1 ¬p1
p2 ¬p2
p3 ¬p3
On remarque qu’il existe un cycle passant par p1 et ¬p1 , donc la formule est insatisfaisable.
Si on considère maintenant la formule '0 = (¬p1 _ p3 ) ^ (¬p2 _ p1 ) ^ (¬p2 _ p3 ) ^ (¬p1 _ ¬p3 ).
Le graphe est alors le suivant :
p1 ¬p1
p2 ¬p2
p3 ¬p3
On voit sur le graphe que '0 |= p1 ) ¬p1 , '0 |= p2 ) ¬p2 et '0 |= p3 ) ¬p3 . Il n’y a donc
qu’un seul modèle : v(p1 ) = v(p2 ) = v(p3 ) = 0.
2.5.5.2 3-SAT
Le problème 3-SAT est lui aussi NP-complet (c’est à dire qu’il est aussi difficile que le problème
SAT). Pour le démontrer, il suffit de prouver que le problème SAT est polynomialement réductible
à 3-SAT : cela signifie que répondre à la question SAT revient à répondre à 3-SAT et que le temps
nécessaire à transformer SAT en 3-SAT est polynomial.
Preuve : On remarque que toute clause 'n = `1 _ `2 _ . . . _ `n avec n 3 peut se mettre sous
la forme :
n = (`1 _ `2 _ q1 ) ^ (`3 _ ¬q1 _ q2 ) ^ . . . ^ (`n 2 _ ¬qn 4 _ qn 3 ) ^ (`n 1 _ `n _ ¬qn 3 ) où les
qi sont de nouveaux symboles propositionnels.
Donc le problème SAT est polynomialement réductible à 3-SAT. On conclut que 3-SAT est
NP-complet.
Tous les problèmes n-SAT avec n supérieur ou égal à 3 sont également des problèmes NP-
complets.
2.5 Le problème SAT 31
2.5.5.3 Horn-SAT
Une clause de Horn est une clause comportant au plus un littéral positif. C’est donc une
disjonction de la forme ¬p1 _ . . . _ ¬pn _ p, où les pi et p sont des variables propositionnelles. Selon
qu’elles comportent ou non un littéral positif (resp. négatif), les clauses de horn sont de l’une des
trois formes suivantes :
(a) ¬p1 _ . . . _ ¬pn _ p avec n > 0 ;
(b) ¬p1 _ . . . _ ¬pn avec n > 0 ;
(c) p ;
(d) ? ;
Le problème Horn-SAT s’énonce de la façon suivante :
Horn-SAT
Entrée : un ensemble C de clauses de Horn
Question : C est-il satisfiable ?
Ce problème est résolvable en temps polynomial.
Algorithme :
Données : Un ensemble C0 de clauses de Horn
Sortie : C0 est-il satisfaisable ?
C = C0
tant que faits(C) 6= ?
Choisir p 2 faits(C)
C = C/p ;
si ? 2 C alors Retourner "inconsistant"
sinon Retourner "satisfaisable" ;
En effet, tout ensemble de clauses ne contenant pas de faits ni la clause ? est satisfaisable : il
suffit de mettre à 0 toutes les variables apparaissant dans les clauses.
2.5.7 Applications
2.5.7.1 Vérification d’un circuit logique
On encode le circuit et les entrées/sorties désirées et on teste SAT
Emploi du temps Pour choisir un créneau horaire pour le cours de Logique, on doit respecter
les contraintes suivantes :
— Pas en même temps que les TP de RO du M1 informatique
— Pas avant 10h30 le matin
— Pas en même temps que les autres enseignements de L3 info
— Pas en même temps que les autres enseignements obligatoires de L3 math
— Pas en même temps que tout autre cours en amphi.
2.5.7.3 Diagnostic
Le diagnostic est une discipline de l’intelligence artificielle qui vise le développement d’algo-
rithmes permettant de déterminer si le comportement d’un système est conforme au comportement
espéré. Si il ne l’est pas, il faut être capable de trouver le dysfonctionnement.
Le diagnoser doit déterminer si un système a un comportement défectueux étant donnée l’ob-
servation des entrées et sorties du système et d’observation d’états internes. Le modèle du système
peut être traduit en un ensemble de contraintes (disjonctions) : pour chaque composant S du
système, une variable propositionnelle Ab(S) est créée qui est évaluée à vraie si le composant a
un comportement anormal (Abnormal). Les observations peuvent être également traduites par un
ensemble de disjonctions. L’assignation trouvée par l’algorithme de satisfaisabilité est un diagnostic.
On peut simplifier la modélisation par des formules comme les suivantes :
¬Ab(S) ) Int1 ^ Obs1
Ab(S) ) Int2 ^ Obs2
Les formules se lisent de la manière suivante : si le système n’a pas un comportement anormal,
alors il produira le comportement interne Int1 et le comportement observable Obs1. Dans le cas
d’un comportement anormal, il produira le comportement interne Int2 et les observations Obs2.
Étant données les observations Obs, il faut déterminer si le comportement du système est normal
ou non (¬Ab(S) ou Ab(S) )
2.5.7.4 Planification
La planification est une discipline de l’intelligence artificielle qui vise le développement d’algo-
rithmes pour produire des plans (en d’autre termes, une planification), typiquement pour l’exécu-
tion par un robot ou tout autre agent.
Un planificateur typique manipule trois entrées (toutes codées dans un langage formel qui utilise
des prédicats logiques) :
— une description de l’état initial d’un monde,
— une description d’un but à atteindre et
— un ensemble d’actions possibles (parfois appelés opérateurs)
Chaque action spécifie généralement des préconditions qui doivent être présentes dans l’état
actuel pour qu’elle puisse être appliquée, et des postconditions (effets sur l’état actuel). Le problème
de planification classique consiste à trouver une séquence d’actions menant d’un état du système à
un ensemble d’états. Par exemple, voici un problème de planification simple. On dispose de boites
sur une tables, dans une configuration initiale, et on souhaite obtenir une nouvelle configuration
2.5 Le problème SAT 33
(par exemple passer de conf 1 de la figure à a conf 2). La seule action possible est de déplacer une
boite non recouverte par une autre sur la table ou sur une autre boite.
A B
C B C
table table
configuration 1 configuration 2
cette machine est le modèle M, sur lequel on veut vérifier des propriétés ' (exprimées par des
formules de logique) telles que "on obtient un café seulement si on paie 2 euros".
Un exemple de model checker : POEM est un model checker développé au LIF par Peter Niebert
qui utilise un SAT-solver pour finaliser ses calculs.
2.5.7.6 Cryptographie
La complexité du problème SAT est une composante essentielle de la sécurité de tout système
de cryptographie.
Par exemple une fonction de hachage sécurisée constitue une boîte noire pouvant être formulée
en un temps et un espace fini sous la forme d’une conjonction de clauses normales, dont les variables
booléennes correspondent directement aux valeurs possibles des données d’entrée de la fonction de
hachage, et chacun des bits de résultat devra répondre à un test booléen d’égalité avec les bits de
données d’un bloc de données d’entrées quelconque. Les fonctions de hachages sécurisées servent
notamment dans des systèmes d’authentification (connaissance de données secrètes d’entrée ayant
servi à produire la valeur de hachage) et de signature (contre toute altération ou falsification "facile"
des données d’entrée, qui sont connues en même temps que la fonction de hachage elle-même et de
son résultat).
34 Chapitre 2. Calcul propositionnel
2.5.7.7 Bio-informatique
Certains problèmes de traitement du génome se modélisent par des formules propositionnellse
et sont résolus à l’aide de SAT-solvers.