Previous Up Next
Eléments de logique pour l’informatique 2020–21                   http://www.lri.fr/~paulin/Logique


Chapitre 1  Maîtriser le langage logique

La logique s’intéresse à la notion de vérité et de raisonnement. Un raisonnement est un discours qui permet d’établir la vérité d’un fait. Dans ce cours, nous nous intéressons à la logique mathématique qui s’appuie sur un langage formel et un ensemble de règles fixé. Le raisonnement ne sera donc pas un discours en langue naturel mais une suite bien précise de constructions qui obéissent à des règles du jeu définies.

Dans ce chapitre nous introduisons le langage de la logique du premier ordre, appelée aussi calcul des prédicats.

1.1  Définition du langage

On utilisera un langage formel pour écrire les propositions afin d’éviter les ambiguïtés du langage naturel ou des notations imprécises. Dans le langage naturel, le même mot peut refléter des situations logiques différentes. On le voit dans les énoncés ci-dessous avec différents sens pour le connecteur ou qui a souvent dans le langage courant un sens exhaustif (l’un des deux mais pas les deux), ou encore dans la dernière phrase dans laquelle le concept d’être une étoile représente deux réalités différents (entre l’astre et la vedette).

Un langage formel présente également moins de redondance que le langage naturel dans lequel la même situation logique peut s’exprimer de plusieurs manières différentes. Les langages formels sont donc plus simples à étudier et à représenter en machine.

1.1.1  Objets

Une formule décrit une propriété (vraie ou fausse) qui en général va parler d’objets (on dit aussi des termes), par exemple des entiers, des figures géométriques, mais aussi des ensembles, des fonctions, des objets dans une base de données ….

Pour décrire les objets, on introduira un langage spécifique formé de symboles qui sont juste des suites de caractères spécifiques. Chaque symbole utilisé dans le langage des objets est défini avec une arité qui est un entier naturel représentant le nombre d’arguments qu’il faut associer au symbole pour représenter un nouvel objet.

Lorsqu’un symbole est d’arité 0, on dit que c’est une constante. Cela représente donc un objet sans nécessité d’argument supplémentaire. Ce sont les objets de base.

Par exemple on peut introduire 0, 1, ∅ comme des constantes particulières. Un symbole d’arité 1 est dit symbole unaire. On peut par exemple introduire un symbole unaire sqrt pour représenter l’opération de racine carrée ou bien P pour représenter l’ensemble des parties d’un ensemble. Un symbole d’arité 2 est dit symbole binaire, c’est le cas des symboles pour repésenter les opérations arithmétiques +, × ou bien l’union de deux ensembles.

Le langage des objets utilise également des variables d’objets qui sont aussi des symboles qui représente des objets, mais contrairement aux constantes, ils ne désignent pas un objet particulier, mais sont une manière de nommer un objet arbitraire comme par exemple dans l’expression x+1.

Définition 1 (Terme, Signature)   Etant donné un ensemble de symboles F chacun associé à une arité (on dira que F est une signature) et un ensemble X de variables, un terme t est soit une variable, soit formé d’un symbole f d’arité n et d’une suite ordonnée de n termes t1,…,tn qui sont appelés les sous-termes de t.

On note T(F,X) l’ensemble des termes sur la signature F et l’ensemble des variables X. On notera T(F) le sous-ensemble de ces termes qui ne contiennent pas de variable, appelés aussi termes clos.

La manière d’écrire le terme peut varier suivant les systèmes mais la structure du terme (variable ou symbole associé à 0, 1 ou plusieurs termes) reste la même.

1.1.2  Formules atomiques

Les formules atomiques représentent une notion qui peut être vraie ou fausse et que l’on ne peut pas décomposer sur une base logique. Il s’agit plutôt de propriétes que l’on observe plutôt que des formules logiques sur lesquelles on peut raisonner.

Parmi les formules atomiques, on distingue deux objets spéciaux : la formule notée (aussi appelé formule vraie, ou tautologie) qui est toujours vraie et la formule qui est toujours fausse, aussi appelée contradiction.

Les formules atomiques qui ne sont pas ou sont construites à partir de symboles de prédicat. Elles servent à représenter des propriétés de base des objets.

Un symbole de prédicat est juste une suite de caractères à laquelle on va pouvoir attribuer ultérieurement un sens. Comme pour les symboles d’objets, on associe à un symbole de prédicat un entier naturel que l’on appelle une arité. Cet entier correspond au nombre d’arguments représentants des objets qu’il faudra associer au symbole pour en faire une formule. On peut faire une analogie entre un symbole de prédicat et une procédure en programmation à laquelle on passe des arguments avant de pouvoir l’exécuter.

On dispose souvent (mais pas tout le temps) d’un symbole de prédicat binaire (arité 2) pour représenter l’égalité. On note de manière infixe t=u, le symbole d’égalité appliqué aux deux termes t et u.

Définition 2 (Formule atomique)   Une formule atomique est soit un des symboles ou , soit un symbole de prédicat associé à un ou plusieurs objets (le nombre d’objets attendu correspond à l’arité du prédicat).
Exemple 1 (Formules atomiques)    On se donne un lanage dans lequel on a des constantes 0, 1, 2 et 4 ainsi qu’un symble de fonction binaire + et un symbole de prédicat binaire =.

Un symbole de prédicat est juste un nom (syntaxe). La sémantique lui attribue un sens en lui associant une relation mathématique entre les objets modélisés. Il y a parfois un sens implicite (par exemple l’égalité ou l’ordre sur les entiers) mais d’un point de vue logique, de nombreuses interprétations sont possibles.

L’arité d’un symbole de prédicat peut être 0. Le symbole de prédicat représente alors à lui tout seul une formule vraie ou fausse. On parle alors de variable propositionnelle. On verra que c’est un cas important, car avec seulement des variables propositionnelles, la logique (que l’on appelle alors logique propositionnelle) devient décidable. De nombreux problèmes peuvent se modéliser en logique propositionnelle, quitte à introduire des milliers de variables propositionnelles et de formules.

Les symboles se choisissent en fonction du problème à modéliser et il y a souvent plusieurs manières de faire.

Exemple 2 (Modélisation)   Si dans un problème on cherche à modéliser la situation Paul est mon ami, alors il suffit d’introduire une variable propositionnelle (qui pourra être vraie ou fausse) et qui représente le fait que Paul est (ou non) mon ami. Si par contre on veut modéliser une phrase comme “tous mes amis habitent Paris”, alors il faut un symbole de prédicat unaire ami tel que ami(t) est vrai lorsque t est mon ami et un symbole de prédicat unaire paris tel que paris(t) est vrai lorsque t habite Paris, en introduisant en plus une constante Paul on peut facilement traduire la notion Paul est mon ami. Si maintenant la propriété à montrer est “les amis de mes amis sont mes amis” alors il faudra passer à un symbole de relation binaire tel que amis(t,u) est vrai si t et u sont amis et utiliser une constante self pour représenter la personne qui s’exprime.

Etant donnée une situation à représenter en logique, il peut être demandé de la modéliser et donc de trouver les bons symboles à introduire pour pouvoir représenter le problème. Dans d’autres situations, le langage peut être imposé (comme lorsque on doit utiliser l’interface d’une bibliothèque donnée) et il faudra se limiter aux symboles autorisés.

Notation infixe

La notation standard pour un symbole f d’arité au moins 1 (symbole de fonction ou de prédicat) est f(t1,…,tn).

Pour certains symboles binaires (d’arité 2), on utilise parfois plutôt une notation infixe, c’est-à-dire que l’on écrira tu plutôt que f(t,u). Par exemple : t + u, t × u pour des termes et t = u, tu pour des formules atomiques …

1.1.3  Formules complexes

Les formules complexes se construisent à partir des formules atomiques à l’aide de connecteurs logiques. On distingue la partie dite propositionnelle :

on ajoute les quantificateurs du premier ordre :

La quantification universelle peut se voir comme une conjonction généralisée sur tous les x possibles (il peut y en avoir une infinité, pas forcément dénombrable). La quantification existentielle peut se voir comme une disjonction généralisée, elle aussi possiblement infinie.

Exemple 3 (Formules complexes)    On se place dans un langage dans lequel on a un prédicat unaire yeux-bleus. La formule atomique yeux-bleus(x) représente le fait que l’objet x a les yeux bleus. On introduit également une variable propositionnelle A.
Notations

On pourrait ajouter dans la définition des formules complexes, l’utilisation du connecteur logique d’équivalence, mais nous utiliserons plutôt la notation AB comme un raccourci pour la formule (AB) ∧ (BA).

On peut introduire plusieurs variables dans un quantificateur, par exemple : x  y, P représente la formule x, ∀ y, P.

Différentes catégories syntaxiques

Dans le langage de la logique, on distingue deux catégories syntaxiques, les objets et les formules. En particulier, il y aura des symboles de fonctions (comme 0 ou +) qui permettent de construire des objets et des symboles de prédicat pour construire les formules. La catégorie des termes (ou objets) se construit à partir des données suivantes

et se décrit syntaxiquement par les règles :

      term ::=  V  | C | F(list-terms)
      list-terms ::= term | list-termsterm

La catégorie des formules logiques se construit à partir des symboles de prédicats

et se décrit syntaxiquement par les règles :

form ::=⊤ | ⊥ | X | P(list-terms)
  |  ¬ form  |  form ∧ form  |  form ∨ form  |  form ⇒ form 
  |  ∀ Vform        |  ∃ Vform 

1.1.4  Traduire des énoncés en formule logique

Exercice 1   On suppose que l’on se place dans un langage avec les prédicats ami(x,y) et joue(x,y) qui représentent le fait que x est l’ami de y et que x joue avec y. On introduit également une constante self qui représente l’individu qui s’exprime. Traduire en formules logiques les expressions suivantes :
  1. les amis de mes amis sont mes amis
  2. je ne joue qu’avec mes amis
  3. je n’ai pas d’ami avec qui jouer
  4. j’ai au moins deux amis (on pourra de plus utiliser la relation d’égalité)
  5. tout le monde a un ami
Exercice 2   On se place dans un langage qui contient un symble de fonction binaire + qui représente l’addition, un symbole de prédicat unaire pair tel que pair(x) exprime que l’entier x est pair.
Exercice 3   En logique du premier ordre, lorsque l’on écrit la formule x,P ou x,P on englobe tous les objets possibles (sans préciser dans quel univers se placent ces objets). En mathématiques, la quantification est restreinte à un ensemble particulier. On écrira par exemple dans le cas des entiers naturels x∈ℕ,P ou x∈ℕ,P.

En utilisant un symbole de prédicat unaire N, tel que N(x) représente le fait que x∈ℕ, donner des formules de la logique du premier ordre qui représentent les deux quantifications ensemblistes x∈ℕ,P et x∈ℕ,P.

1.2  Structure des formules

1.2.1  Représentation des formules comme des arbres

Une formule peut se voir comme un arbre dont les nœuds internes sont les connecteurs logiques (les connecteurs propositionnels sont binaires, sauf la négation qui est unaire) et les quantificateurs x, ∃ x qui sont des nœuds internes unaires. Les feuilles de l’arbre sont les formules atomiques.

On peut ainsi dessiner sous forme d’arbre la formule (PQ ⇒ ∀ x, R) ⇒ P ∧ ∃ x, QR :

Cette représentation arborescente pourra être utilisée si on veut représenter les formules en machine. C’est aussi elle qui va nous servir pour construire des fonctions sur les formules et aussi pour raisonner sur les formules.

Exercice 4   Donner la forme arborescente de la formule (∀ x, PQ) ⇒ ¬ Q ⇒ ¬ ∃ x, P.

1.2.2  Notations, règles de parenthésage

La définition des formules complexes correspond à une méthode de construction des formules à partir des formules atomiques. Néanmoins si on écrit simplement PQR il y a une ambiguïté: cette formule peut se construire de deux manières différentes suivant si on utilise d’abord la règle pour la disjonction puis la conjonction ou bien dans l’autre sens. Pour lever cette ambiguïté, on utilise des parenthèses et on pourra écrire P ∧ (QR) ou bien (PQ) ∨ R. Les parenthèses sont importantes car les deux formules ne sont pas vraies en même temps (prendre P faux et Q et R vrai).

Comme pour les formules arithmétiques, il y a des règles de précédence pour les connecteurs logiques qui évitent l’utilisation systématique des parenthèses. La précédence de ¬ est la plus forte, vient ensuite la conjonction puis la disjonction et finalement l’implication .

Dire que ¬ a une précédence plus forte que signifie que la formule ¬ PQ doit se parenthéser en P) ∧ Q et pas en ¬ (PQ). De même dire que a une précédence plus forte que signifie que PQR se parenthèse comme P ⇒ (QR) et pas (PQ) ∧ R. On commence par mettre les parenthèses autour du connecteur dont la précédence est la plus forte.

Les connecteurs , et associent à droite, ce qui signifie que la formule PQR se parenthèse en P⇒ (QR) et pas (PQ)⇒ R.

L’ordre des parenthèses ne change pas le sens des formules pour les connecteurs et , par contre dans le cas de l’implication, les formules P⇒ (QR) et (PQ)⇒ R ne disent pas du tout la même chose, il faut donc être très attentif à ne pas se tromper.

Exemple 1   PR ∧ ¬ QPQR représente donc la même formule que (P ∧ (R ∧ (¬ Q))) ⇒ (P ∨ (QR)).
Exercice 5   Pour chacune des formules suivantes, donner sa représentation sous forme d’arbre ainsi qu’une forme avec des parenthèses sans changer le sens:
  1. (PQR) ⇒ PQR
  2. (PQ) ⇒ ¬ Q ⇒ ¬ P
Précédence des quantificateurs

Les quantificateurs et ont une précédence plus faible que les autres opérateurs. Leur portée s’étend donc aussi loin que possible.

Exemple 2   x, PQ représente x, (PQ) et non pas (∀ x, P) ⇒ Q.
Exercice 6   Exprimer sous une forme logique l’adage suivant: “Tout ce qui ne nous tue pas nous rend plus fort”. On se donne comme symbole de prédicat de base Tue(x) et Fort(x). Représenter la formule sous forme d’arbre. Écrire la formule avec toutes les parenthèses puis avec le minimum de parenthèses.

1.2.3  Variables libres, liées

Dans les formules x, P et x, P, la variable x est dite liée (on dit aussi muette), en effet les occurrences de x sont reliées au quantificateur correspondant et on peut changer le nom de manière cohérente dans P et le quantificateur sans changer le sens de la formule:
x, ∃ y, x < y exprime la même propriété que t, ∃ u, t < u. Une variable x qui apparaît dans une formule P mais qui n’est pas dans une sous-expression de la forme x, Q ou x, Q est dite libre. Par exemple dans la formule y, x < y, la variable x est libre et y est liée. Cette formule représente le fait que “Il existe un nombre plus grand que x”.

En langage courant, le plus souvent, on n’introduit pas de nom explicite pour les variables liées, comme dans les exemples suivants :

Définition 1 (Variables libres, VL(P))   Soit une formule P et x une variable. On dit que x est libre dans la formule P et on écrira xVL(P) si:

Une variable peut à la fois apparaître en position libre et en position liée, ou bien apparaître liée dans plusieurs quantificateurs comme y dans la formule 0<x× y ∨ (∃ y, x < y) ∧ (∃ y, y+y < x). Cependant ces trois positions ne représentent pas la même chose car on peut toujours choisir un nom nouveau pour les variables liées. La formule pourra s’écrire: 0<x× y ∨ (∃ y1, x < y1) ∧ (∃ y2, y2+y2 < x).

Exercice 7   Donner les variables libres de la formule : b, b > 0 ⇒ ∃ q, ∃ r, a = b × q + rr < b.

Les variables libres représentent des paramètres de la formule par exemple dans la formule y, x=2× y, la variable x est libre, la formule représente la notion “x est pair”, qui dépend de x. Cette formule est vraie ou fausse en fonction de la valeur de la variable x. On peut faire une analogie avec une variable globale d’un programme qui devra avoir une valeur pour permettre une exécution.

Une variable libre peut être remplacée par un terme plus complexe, on parle de substitution, par exemple

Attention au phénomène de capture lorsqu’on substitue une variable par un terme. Supposons que l’on veuille écrire la formule “y est pair” :

Définition 2 (Substitution, P[xt])   On notera P[xt] la formule obtenue en remplaçant dans P les occurrences libres de la variable x par le terme t, après avoir si nécessaire renommer les variables liées de P afin d’éviter de capturer les variables qui apparaissent dans t.
Définition 3 (Terme clos, formule close)   

1.3  Formule vraie

Il y a deux valeurs de vérité vrai et faux. On les représente par les éléments de l’ensemble B={V,F} des booléens. L’élément V correspond à vrai et F à faux. On utilise parfois les entiers {1,0} à la place, mais il est préférable de ne pas confondre valeur de vérité et valeur entière, d’où le choix de notations spécifiques.

Pour définir quand une formule quelconque est vraie, il faut se placer dans un modèle (on parle aussi d’interprétation) qui explicite de quels objets on parle et également pour chaque symbole de prédicat (propriété atomique), nous dit pour quels objets il est vérifié.

Par exemple, dans le modèle usuel des mathématiques 2 ≤ 4 est vrai mais 0=1 est faux. L’énoncé «Anne est l’amie de Bob» peut être vrai dans certaines situations et faux dans d’autres. L’énoncé «Tout le monde a les yeux bleus» sera vrai ou faux en fonction en fonction de notre interprétation de «tout le monde», suivant si on se restreint a une famille donnée ou bien si on considère l’ensemble de la population française.

1.3.1  Le cas propositionnel

Une formule logique complexe contient des connecteurs logiques qui ont un sens précis.

La formule atomique est toujours fausse et la formule atomique est toujours vraie.

Les tables suivantes rappellent les valeurs de vérité des connecteurs propositionnels en fonction des valeurs de vérité des composants de la formule.

 P¬ P  
 VF  
 FV  
     
 PQP ∧ QP ∨ QP ⇒ Q 
 VVVVV 
 FVFVV 
 VFFVF 
 FFFFV 

Pour savoir si une formule propositionnelle est vraie, il “suffit” de la décomposer pour se ramener à la vérité des formules atomiques qui la composent.

Si une formule propositionnelle ne contient pas de variables propositionnelles ni de symboles de prédicats, alors on peut calculer sa valeur de vérité en utilisant les tables ci-dessus.

Par exemple ((⊥⇒ ⊥) ⇒ ⊥) ⇒⊥ est une formule propositionnelle qui est toujours vraie.

Les formules sans variables ne sont pas très intéressantes à étudier. On va donc se placer dans le cas d’une formule propositionnelle (pas de quantificateur) qui ne contient comme symbole de prédicat que des variables propositionnelles (symbole d’arité 0, sans argument).

Une variable propositionnelle dans une formule peut prendre soit la valeur vrai, soit la valeur faux. C’est une inconnue du problème. Une formule propositionnelle contient un nombre fini de variables propositionnelles que l’on note X1,…, Xn. Chacune peut prendre comme valeur vrai ou faux. Il y a donc en tout 2n possibilités. Chaque choix correspond à une interprétation. Si on fixe une interprétation, alors on peut calculer la valeur de vérité de la formule en utilisant les tables ci-dessus.

Définition 1 (Table de vérité)   Soit une formule P qui contient les variables propositionnelles X1,…, Xn. La table de vérité de la formule P est un tableau à n+1 colonnes étiquetées par X1,…, Xn,P.

Chaque ligne correspond à une interprétation différente de X1,…, Xn et contient dans la colonne P, la valeur de la formule P dans cette interprétation.

La table de vérité contient a priori 2n lignes (une par interprétation). Cependant la valeur de vérité d’une formule ne dépend parfois que de la valeur d’une ou deux variables propositionnelles, on s’autorisera alors à n’écrire qu’une seule ligne, en laissant les valeurs des autres variables indéterminées (et donc cette ligne représentera plusieurs interprétation qui donnent pour lesquels la valeur de P est la même).

Exemple 1   Soit la formule P définie par (ABC) ⇒ (AB)⇒ AC. Elle a trois variables propositionnelles A, B et C, et donc a priori 8 lignes. Maintenant la formule est vraie trivialement si C est vrai. On peut donc faire une première ligne
 A  B  C  P  
**VV 
Cette ligne couvre 4 interprétations différentes. Les autres interprétations à considérer sont avec C à la valeur faux. La formule P est aussi vraie lorsque A est faux car alors AAC est toujours vrai. On peut donc compléter la table de vérité.
 A  B  C  P  
**VV 
F*FV 
Cette ligne ne couvre que deux cas supplémentaires (puisque les cas avec C vrai ont déjà été comptés. Il ne reste donc que deux interprétations à considérer dans lesquelles A est vraie et C est faux. Si B est faux alors AB est faux et donc P est vrai et si B est vrai alors BC est faux donc A⇒ (BC) est faux et donc P est vrai. Ce qui donne au final la table.
 A  B  C  P  
**VV 
F*FV 
VVFV 
VFFV 

On va s’intéresser à savoir si une formule est vraie pour toutes les interprétations possibles de ces prédicats (pour tous les modèles). Si c’est le cas on dira que la formule est valide ou encore que c’est une tautologie. Si la formule est vraie pour certaines interprétations, on dit que la formule est satisfiable, si elle est fausse dans toutes les interprétations alors elle est dite insatisfiable.

Attention insatisfiable est la négation de satisfiable, mais ne pas être valide (au moins une interprétation rend fausse la formule) ne signifie pas être insatisfiable (toutes les interprétations rendent fausses la formule). Une formule valide (toutes les interprétations rendent vraie la formule) est a fortiori satisfiable (au moins une interprétation rend vraie la formule), une formule non valide (au moins une interprétation rend la formule fausse) peut être satisfiable (une autre interprétation rend vraie la formule) ou insatisfiable (la formule est tout le temps fausse).

Il y a cependant un lien direct entre validité et satisfiabilité grace à l’opération de négation sur les formules. En effet pour toute formule P (propositionnelle ou non), La formule P est valide si et seulement si la formule ¬ P est insatisfiable. Savoir répoudre un des problèmes est donc équivalent à savoir résoudre l’autre.

Exemple 2   Soit P et Q deux variables propositionnelles.
Exercice 8   Les formules suivantes sont-elles valides ?
  1. ((PQ) ⇒ P) ⇒ P
  2. PP) ⇒ P
Résoudre des problèmes avec la logique

Le calcul propositionnel permet de modéliser et de résoudre des problèmes. En plus de pouvoir décider si une formule est valide, on peut également répondre à la question pour quelles valeurs des formules atomiques la propriété sera-t-elle vérifiée ? ou bien à la question combien y-a-t-il de solutions différentes ?

Exercice 9 (Enigme du tigre et de la princesse)   Des prisonniers sont soumis à un test qui peut se résoudre en utilisant la logique. Ils doivent choisir entre deux portes derrière lesquelles il peut y avoir soit une princesse soit un tigre. S’ils ouvrent une porte derrière laquelle il y a un tigre, ils sont dévorés.

Des inscriptions sur les portes guident leur choix:

La porte 1 comporte la mention “Il y a une princesse derrière cette porte et un tigre derrière l’autre”, la porte 2 comporte la mention “Il y a une princesse derrière une des portes et un tigre derrière l’autre”, on sait de plus qu’une seule de ces inscriptions est vraie.

On introduit les variables propositionnelles P1 (resp. P2) pour représenter la présence d’une princesse derrière la porte 1 (resp. la porte 2).

1.3.2  Formule avec quantificateurs

Le sens commun de la formule x,P est que P doit être vrai pour tous les x mais cela ne peut avoir un sens que si on explique ce que représente x.

Avant de pouvoir dire quelle est la valeur de vérité de x,P, il faut donc préciser notre interprétation des symboles. S’il y a des quantificateurs, c’est qu’il y a des objets et donc il faut préciser de quels objets on parle. On se donne donc un ensemble, appelé domaine de l’interprétation (on dira aussi plus simplement domaine) qui représente l’univers auquel appartiennent nos objets. Cet ensemble doit être non vide. On fait correspondre à chaque constante, un élément de notre domaine. Deux constantes qui ont des noms différents dans la logique peuvent parfaitement correspondre à la même valeur dans le domaine. A chaque symbole de fonction de la logique, va correspondre une fonction sur le domaine. Pour faire un parallèle avec la programmation, les symboles utilisés de la logique correspondent à l’interface d’un module à partir duquel on peut construire de nouveaux programmes alors que l’interprétation va correspondre à l’implémentation du module qui va vous permettre d’exécuter vos programmes. Le comportement de ces programmes peut complètement changer en fonction de l’implémentation du module.

Une formule atomique P(t1,…,tn) représente une vérité qui dépend évidemment de la valeur des arguments t1,…,tn. On peut choisir l’interprétation de P parmi toutes les relations n-aires sur le domaine de l’interprétation.

Si on a un prédicat unaire comme yeux-bleus l’interprétation revient à choisir le sous-ensemble des individus qui ont les yeux bleus. Si on a une relation binaire comme ami ou , l’interprétation peut se représenter comme un graphe orienté dont les sommets sont les éléments du domaine et dans lequel une arête de s à t sera présente lorsque la relation est vraie entre s et t.

Même si la formule ne contient qu’un symbole de prédicat, si le domaine est infini, le nombre d’interprétations possibles est lui-même infini et donc on ne peut plus faire une table de vérité qui énumère toutes les interprétations.

Par contre si on exhibe une interprétation qui rend vraie la formule, on sait qu’elle est satisfiable et si on trouver un contre-exemple (une interprétation qui rend fausse la formule) alors on sait qu’elle n’est pas valide.

Nous verrons dans les chapitres 2 et 4 des méthodes pour simplifier la recherche.

Vérité d’une formule quantifiée sans variable libre.

La vérité d’une formule sans variable libre mais avec des quantificateurs du premier ordre dépend en général de l’exploration de la vérité d’un ensemble infini de formules (obtenues en interprétant les variables par des objets arbitraires).

Exercice 10   Les formules suivantes sont-elles vraies pour toute interprétation du prédicat P?
  1. (∀ x, P(x)) ⇒ ∃ x, P(x)
  2. ¬(∀ x, P(x)) ⇒ ∃ x, ¬ P(x)

1.4  Théories et modélisation

Une formule est un élement de syntaxe qui utilise des symboles qui peuvent avoir de nombreuses interprétations différentes.

Si au contraire on part d’un univers et qu’on s’intéresse à certaines opérations et certaines propriétés dans cet univers, on peut essayer de modéliser cet univers en introduisant un ensemble de symboles et un ensemble d’énoncés A tel que notre univers corresponde à un modèle qui rend vraies toutes les formules de A.

On pourra alors travailler au niveau de la logique à partir de cet ensemble d’axiomes et en déduire des propriétés de l’univers qui nous intéresse.

1.4.1  Définitions autour des théories

Les mathématiciens se sont intéressés depuis l’antiquité à trouver des présentations axiomatiques de théories. Par exemple Euclide a formalisé un ensemble d’axiomes pour la géométrie. La théorie des groupes est une généralisation du modèle des entiers relatifs : on se donne une constante 0, une opération binaire +, une opération unaire et un prédicat binaire d’égalité. On suppose que ces opérateurs vérifient un certain nombre de propriétés logiques

et on en déduit divers conséquences qui seront vraies pour les entiers relatifs mais aussi pour toutes les autres structures de groupe.

Définition 1 (Théorie)   Une théorie est définie par un ensemble de symboles de fonctions et de prédicats (la signature de la théorie) et un ensemble de formules closes (sans variables libres) construites sur ce langage, appelés les axiomes de la théorie.

Un modèle d’une théorie est donné par une interprétation de la signature (c’est-à-dire un ensemble domaine et des fonctions et relations sur ce domaine) telle que dans cette interprétation, tous les axiomes ont pour valeur vraie.

Une théorie peut être définie par un ensemble infini d’axiomes.

Soit une théorie définie par un ensemble A d’axiomes. Au lieu de s’intéresser à la validité d’une formule, on va se poser la question est-ce que la formule est vraie dans tous les modèle de la théorie ? ou encore est-ce qu’on peut par un raisonnement qui suppose vrais tous les axiomes de la théorie, déduire cette propriété.

La théorie A est complète si pour toute formule P on peut prouver P ou bien on peut prouver ¬ P à partir des axiomes A. Attention, on peut aussi avoir des théories incohérentes telles que on peut prouver à partir des axiomes et donc a fortiori n’importe quelle formule P. Une théorie incohérente n’aura pas de modèle. La plupart des théories ne sont pas complètes. Le théorème d’incomplétude de Gödel nous dit que toute théorie qui contient l’arithmétique est forcément incomplète et que quelque soit les axiomes que l’on ajoute la théorie restera incomplète à moins de devenir incohérente.

Une théorie est décidable, si on sait, pour toute formule P, décider si P est ou non prouvable à partir des axiomes. La théorie vide n’est pas décidable. La théorie de l’arithmétique linéaire (sans multiplication) est décidable ainsi que la théorie des réels.

1.4.2  Exemples de théories

Égalité

Une théorie importante est celle de l’égalité. Les axiomes nécessaires sont les suivants.

Définition 2 (Théorie de l’égalité)   Le théorie de l’égalité est donnée par les axiomes qui expriment que c’est une relation d’équivalence. Pour chaque symbole de fonction f n-aire on ajoute un axiome qui exprime le fait que c’est une congruence
∀ x1… xn y1… ynx1=y1∧…∧ xn=yn ⇒ f(x1,…, xn)=f(y1,…, yn)
et pour chaque symbole de prédicat P n-aire on ajoute un axiome qui exprime le fait que la propriété est stable par égalité :
∀ x1… xn y1… ynx1=y1∧…∧ xn=yn ⇒ P(x1,…, xn)⇒ P(y1,…, yn)
Définition 3 (Théorie arithmétique de Peano (PA))   Le langage est composé de la constante O du symbole de fonction unaire S et des symboles binaires + et × ainsi que du symbole de prédicat d’égalité.

Les axiomes sont données par l’ensemble P0 suivant qui constitue l’arithmétique élémentaire

  1. x, S(x)≠O
  2. x, x=O∨ ∃ y, x=S(y) (inutile en présence de récurrence)
  3. x y, S(x)=S(y)⇒ x=y
  4. x, x+O=x
  5. x y, x+S(y)=S(x+y)
  6. x, x× O=O
  7. x y, x× S(y)=(x× y)+x

La théorie formée de ces 7 axiomes est notée PA0. Cette théorie n’est pas suffisante pour prouver une propriété comme la symétrie de l’addition.

Pour obtenir l’arithmétique de Peano, on lui ajoute une infinité d’axiomes pour le schéma de preuve par récurrence. Pour chaque formule P ayant comme variables libres x1,…,xn,x, on aura comme axiome la formule

∀ x1… xn,P[x← O] ⇒ (∀ xP⇒ P[x← S(x)]) ⇒ ∀ x,P

A tout entier n∈ℕ, on associe un terme de l’arithmétique de Peano Sn(0) que l’on notera ñ.

Exercice 11   On définit la propriété tu  =def  ∃ n, n+t=u. Montrer que les propriétés de base de l’ordre sur les entiers sont vraies dans cette théorie. Pour la transitivité, on pourra utiliser sans la démontrer la propriété d’associativité de l’addition.

Modélisation en logique propositionnelle

Si on se place dans le fragment propositionnel (pas de quantificateurs) alors on peut savoir si une formule est satisfiable, valide ou non. Les SAT-solvers sont des outils qui permettent de traiter des problèmes propositionnels. L’idée est d’avoir des variables pour des propositions atomiques qui peuvent valoir vrai ou faux, puis de décrire un problème sous la forme de contraintes sur ces variables exprimées comme des formules propositionnelles. L’outil détermine s’il existe une manière d’affecter une valeur vrai ou faux à chaque variable propositionnelle qui rende le problème vrai.

Exemple 1   On peut modéliser un problème de Sudoku sous une forme propositionnelle. Pour cela on introduit 93 variables Xijk pour i,j,k∈ [1,9]. L’interprétation est que Xijk est vrai si le chiffre k est sur la i-ème ligne et la j-ème colonne. On peut ensuite exprimer les contraintes :
  1. Un seul chiffre k par case (i,j): Xijk ⇒ ∧lk ¬ Xijl
  2. Chaque chiffre k apparaît sur chaque ligne i au moins dans une colonne j: j=1..9 Xijk
  3. Chaque chiffre k apparaît au plus une fois sur chaque ligne i (s’il est dans la colonne j, il n’est pas dans une autre colonne) : Xijk ⇒ ∧lj ¬ Xilk
  4. Même chose pour les colonnes et les carrés.
  5. Lorsque la case (i,j) est pré-remplie avec le chiffre k, on introduit la contrainte : Xijk.

Les SAT-solvers utilisent des algorithmes sophistiqués pour pouvoir traiter des formules avec un très grand nombre de variables propositionnelles. Ils sont utilisés pour vérifier des programmes, ou bien pour résoudre des problèmes de planification qui seront modélisés de manière logique.

Sur le problème du Sudoku, on voit qu’utiliser des formules du premier ordre avec des variables pour représenter les positions et les chiffres permet de factoriser la description. Au lieu des variables propositionnelles, on introduira un symbole de prédicat pos(i,j,k) qui sera vrai lorsque le chiffre k est à la position (i,j).

Exercice 12  

1.5  Définition récursive sur les formules

On a vu que les formules pouvaient se représenter comme des arbres. On introduit dans cette section une méthode générale de définition récursive sur la structure des formules qui nous permet de définir des opérations ou propriétes mathématiques sur les formules ou bien de les manipuler par ordinateur.

Les formules atomiques pouvant faire référence à des termes, nous donnons également les éléments pour définir des fonctions de manière récursive sur les termes et raisonner par récurrence structurelle.

1.5.1  Définir une fonction

On peut définir une fonction G de l’ensemble des formules logiques dans un ensemble D quelconque en se donnant un ensemble d’équations que doit satisfaire cette fonction. Les équations sont de la forme G(t)=u avec u un élément de l’ensemble D. Il faut une équation pour chacune des constructions possibles de formule: formules atomiques (en particulier , ), formules composées d’un connecteur propositionnel ¬ A, AB, AB, AB ou d’un quantificateur x, A, x, A.

Dans le cas des connecteurs propositionnels et des quantificateurs, le membre droit u peut utiliser la valeur de G sur des sous-formules de t (comme G(A) et G(B)). On parle de définition récursive.

On peut par exemple définir une fonction nbsymbp qui compte le nombre de connecteurs propositionnels dans une formule :

nbsymbp(p)=0     si p atomique 
nbsymbp(¬ A)=1+ nbsymbp(A
nbsymbp(∀ xA)nbsymbp(A
nbsymbp(∃ xA)nbsymbp(A
       
   
nbsymbp(A∧ B)=1+ nbsymbp(A)+nbsymbp(B
nbsymbp(A∨ B)=1+ nbsymbp(A)+nbsymbp(B
nbsymbp(A⇒ B)=1+ nbsymbp(A)+nbsymbp(B)

Dans les définitions ci-dessus p, A ou B ne sont pas des symboles logiques mais des variables mathématiques qui nous servent à définir la fonction (comme la variable x dans une définition f(x)=x+1), elles représentent n’importe quelle formule complexe.

Ce qui est important dans cette définition est qu’elle est complète car elle couvre tous les cas de formules, que pour chaque formule il n’y a qu’une seule équation qui s’applique et donc que la définition est non-ambigüe et finalement on dit qu’elle est bien fondée car les références à la fonction f dans les membres droits des équations se font sur des formules strictement plus petites que le membre gauche.

Ces équations définissent également un moyen de calcul de la valeur de G pour une formule donnée. Par exemple dans le cas de la formule A =def  (∀ x, PQ) ⇒ ¬ Q ⇒ ¬ ∃ x, P on aura nbsymbp(A)=5.

Exercice 13   Modifier la définition précédente pour définir une fonction nbsymb qui compte le nombre de symboles logiques dans la formule, à savoir les connecteurs propositionnels comme dans nbsymbp mais aussi les quantificateurs et .
Exercice 14   Donner les équations qui définissent la profondeur prof(A) d’une formule A, c’est-à-dire qui donne le nombre maximal de connecteurs et quantificateurs imbriqués. Dans le cas de la formule de l’exercice 4 on aura prof(A)=4.

Restriction au calcul propositionnel

Le calcul propositionnel est le sous-ensemble du calcul des prédicats qui ne contient que des symboles de prédicat d’arité 0, qui sont appelés des variables propositionnelles et pas de quantificateur ni de termes. On peut de la même manière faire une définition récursive sur la structure d’une formule propositionnelle en décomposant le cas des formules atomiques en trois cas , et les variables propositionnelles et en éliminant les deux cas des quantificateurs.

Calcul de la valeur de vérité d’une formule propositionnelle

Une fois que l’on se donne une interprétation I qui à chaque variable propositionelle associe sa valeur de vérité, on peut définir une fonction val(I,P)∈B qui calcule la valeur de vérité d’une formule propositionnelle quelconque P par les équations suivantes

val(I,⊥)F 
val(I,⊤)V 
val(I,p)I(p)si  p  est une variable propositionnelle 
val(I,¬ P)si val(I,P)=T alors F sinon V 
val(IP∧ Q)si val(I,P)=V alors val(I,Qsinon F 
val(IP∨ Q)si val(I,P)=V alors V sinon val(I,Q) 
val(IP⇒ Q)si val(I,P)=V alors val(I,Qsinon V 

1.5.2  Raisonner sur les formules

Pour établir un résultat pour toutes les formules, on peut utiliser un raisonnement par récurrence sur la structure de la formule. Soit une propriété φ(P) qui dépend d’une formule P.

Ce principe de preuve est très utile lorsque l’on veut montrer des propriétés qui parlent de fonctions sur les formules qui sont elles-mêmes définies récursivement.

Exemple 1   On peut définir de manière récursive le nombre d’occurrences de sous-formules atomiques dans une formule logique :
nbatom(p)=1     si p atomique 
nbatom(¬ A)=nbatom(A
nbatom(∀ xA)=nbatom(A
nbatom(∃ xA)=nbatom(A)
   
nbatom(A∧ B)=nbatom(A)+nbatom(B
nbatom(A∨ B)=nbatom(A)+nbatom(B
nbatom(A⇒ B)=nbatom(A)+nbatom(B)
On peut ensuite montrer que pour toute formule P, on a nbatom(P)≤ 1+nbsymbp(P).

Pour faire cette preuve, on commence par expliciter la propriété φ(P) que l’on cherche à montrer par récurrence structurelle sur P. Dans notre cas, il s’agit de nbatom(P)≤ 1+nbsymbp(P). On doit examiner chacun des cas possibles pour la formule P:

  1. Cas où P est une formule atomique p. Par définition de nbatom et nbsymbp, on a nbatom(p)=1 et nbsymbp(p)=0 donc on vérifie aisément que nbatom(p)≤ 1+nbsymbp(p) et donc φ(p) est vérifié.
  2. Cas où P est une négation de la forme ¬ A avec A une formule quelconque. On suppose (hypothèse de récurrence) que φ(A) est vérifié et donc que nbatom(A)≤ 1+nbsymbp(A). Il faut montrer que φ(¬ A) est également vérifié. Par définition de nbatom et nbsymbp, on a nbatomA)=nbatom(A) et nbsymbpA)=1+nbsymbp(A). En utilisant l’hypothèse de récurrence on a donc
    nbatom(¬ A)=nbatom(A)≤ 1+nbsymbp(A)=nbsymbp(¬ A)≤ 1+nbsymbp(¬ A)
    et donc on a bien montré que φ(¬ A) était vérifiée.
  3. Cas où P est une conjonction, disjonction ou implication de deux formules quelconques A et B, on note P=AB avec l’un des trois connecteurs. En effet, dans cet exemple, ils jouent tous les trois le même rôle, il n’est donc pas nécessaire de distinguer les trois cas.

    On suppose (hypothèses de récurrence) que φ(A) et φ(B) sont vérifiés et donc que nbatom(A)≤ 1+nbsymbp(A) et nbatom(B)≤ 1+nbsymbp(B).

    Il faut montrer que φ(AB) est également vérifié. Par définition de nbatom et nbsymbp, on a nbatom(AB)=nbatom(A)+nbatom(B) et nbsymbp(AB)=1+nbsymbp(A)+nbsymbp(B).

    En utilisant les hypothèses de récurrence on a donc

    nbatom(A∘ B)=nbatom(A)+nbatom(B
     ≤ 1+nbsymbp(A) + 1+nbsymbp(B
     = 1+nbsymbp(A∘ B)

    et donc on a bien montré que φ(AB) était vérifiée.

  4. Cas où P est une formule quantifiée de la forme x, A ou x, A avec A quelconque.

    On suppose (hypothèse de récurrence) que φ(A) est vérifié et donc que nbatom(A)≤ 1+nbsymbp(A).

    Il faut montrer que φ(∀ x, A) et φ(∃ x, A) sont également vérifiés. On traite seulement le cas x, A car celui de x, A est identique.

    Par définition de nbatom et nbsymbp, on a nbatom(∀ x, A)=nbatom(A) et nbsymbp(∀ x, A)=nbsymbp(A). En utilisant l’hypothèse de récurrence on a donc

    nbatom(∀ xA)=nbatom(A)≤ 1+nbsymbp(A)=1+nbsymbp(∀ xA)

    et donc on a bien montré que φ(∀ x, A) était vérifiée.

    La même preuve nous donne que φ(∃ x, A) est vérifié.

On a bien examiné tous les cas possibles et prouvé par récurrence sur la structure de la formule P, que pour toute formule logique P, on a nbatom(P)≤ 1+nbsymbp(P).

1.5.3  Définition récursive sur les termes

En logique du premier ordre, les formules font référence à des objets qui sont représentés syntaxiquement par des termes qui apparaissent en argument des symboles de prédicat au niveau des formules atomiques.

Soit F une signature, c’est-à-dire un ensemble de symboles de fonctions définis avec leur arité et X un ensemble de variables. On note Fn l’ensemble des symboles de F d’arité n et T(F,X) l’ensemble des termes bien formés construits à partir de cette signature et de ces variables.

De la même manière que l’on fait une définition récursive sur les formules, on peut construire une fonction G de manière récursive sur les termes, en se donnant un ensemble d’équations. Il y aura une équation dans le cas où le terme est une variable x et une équation pour chaque symbole d’objet. Si on a un symbole f d’arité n alors il y aura une équation G(f(t1,…,tn))=u avec la possibilité pour u de faire référence aux résultats de la fonction G sur les sous termes et donc de mentionner non seulement les termes t1,…,tn mais aussi les valeurs G(t1),…,G(tn).

Exemple 2   On se donne un langage avec une constante c, une fonction unaire f et une fonction binaire g.

On définit une fonction clos qui étant donné un terme t teste s’il est clos, c’est-à-dire s’il ne contient aucune variable, en utilisant les équations suivantes :

clos(x)=faux     si x est une variable 
clos(c)=vrai 
       
            clos(f(t))=clos(t
           clos(g(t,u))=clos(t et   clos(u
Définition 1   Soit F une signature, X un ensemble de variables et D un ensemble quelconque.

On suppose que l’on veut définir une application G qui prend en argument un terme et renvoie un élément de D, on a donc GT(F,X) → D. Pour cela on va se donner les objets suivants :

  1. Une application V dans XD;
  2. Pour chaque constante cF0, un élément gcD
  3. Pour chaque symbole de fonction fFn, une application Gf dans
     
     
    T(F,X)×… ×  T(F,X)


    n fois
    ×
     
     
    D×… × D


    n fois
     → A
    .

Il existe une unique application G dans T(F,X) → D qui vérifie :

G(x)=V(x)(xX)
G(c)=gc(cF0)
G(f(t1,…,tn))=Gf(t1,…,tn,G(t1),…,G(tn))(fFn)

Le fait que l’on puisse définir une telle application est une conséquence de notre choix de l’égalité syntaxique sur les termes. On rappelle que dans l’égalité syntaxique, deux termes qui débutent par des symboles différents sont différents.

En effet ce schéma permet de définir une application G telle que G(c)=1 pour les constantes et G(t)=2 pour tous les termes qui commencent par un symbole de fonction. Si on avait plus(0,0)=0 alors on en déduirait G(plus(0,0))=G(0) et donc 2=1.

Exemple 3 (Taille d’un terme)   Le schéma de définition récursive précédent permet de définir l’application size qui compte le nombre de symboles dans un terme. Dans le cas d’une signature sur les entiers qui contient la constante 0, le symbole unaire S et le symbole binaire plus, soit t le terme plus(0,S(0)), il vérifie size(t)=4.
Exemple 4 (Hauteur d’un terme)   Un autre exemple de définition récursive est l’application ht qui compte le nombre maximal de symboles imbriqués dans un terme. Pour le terme t précédent on a ht(t)=3.
Exercice 15   Ecrire une fonction vars qui prend en argument un terme et renvoie l’ensemble des variables qui apparaissent dans ce terme.

Substitution

Nous avons déjà introduit la notion de remplacement d’une variable par un terme. Ici on généralise cette opération par le remplacement en parallèle de plusieurs variables par des termes. Pour cela, on se donne une application σ∈XT(F,X), appelée substitution qui associe un terme à chaque variable. On notera {x1u1;…;xnun} la substitution σ telle que σ(x)=ui si x=xi et σ(x)=x sinon.

On définit pour chaque terme t, le résultat de la substitution dans t de toute variable x par σ(x) que l’on note t[σ].

Si σ est de la forme {x1u1;…;xnun}, alors le terme t[σ] sera noté t[x1u1;…;xnun].

La définition de t[σ] se fait de manière récursive sur t:

Exemple 5   t=plus(mult(x,y),S(x)) et σ={xmult(y,0);y0}.
On a
t[σ]=plus(mult( mult(y,0),0),S( mult(y,0)))

On peut montrer que le résultat de t[σ] ne dépend que de la valeur de la substitution σ sur les variables de t. De manière plus précise cela revient à montrer que si on a deux substitutions σ1 et σ2 ainsi qu’un terme t, si pour toute variable xvars(t) on a σ1(x)=σ2(x) alors t1]=t2]. La preuve se fait aisément par récurrence structurelle sur le terme t suivant le schéma ci-dessous.

Récurrence sur les termes

On a également un schéma de preuve par récurrence sur les termes de T(F,X) qui s’exprime de la manière suivante. Soit φ(t) une propriété mathématique qui dépend d’un terme tT(F,X). On suppose :

  1. pour toute variable xX : φ(x);
  2. pour chaque constante cF0: φ(c);
  3. pour chaque symbole fFn : pour tous termes t1tnT(F,X) si les propriétés φ(t1)⋯ φ(tn) sont vérifiées (hypothèses de récurrence), alors il en est de même de φ(f(t1,…,tn));

alors our tout terme tT(F,X) la propriété φ(t) est vérifiée.

Exemple 6   On peut par exemple montrer la propriété suivante pour tout terme tT(F,X), ht(t) ≤ size(t)

Preuve: La preuve se fait par récurrence sur la structure du terme t.

variable
soit xX, ht(x) ≤ size(x) vrai car ht(x)=0 et size(x)=0
constante
ht(c) ≤ size(c) vrai car ht(c)=1=size(c).
symbole
si fFn et t1,…,tnT(F) sont des termes quelconques qui vérifient l’hypothèse de récurrence ht(ti) ≤ size(ti). On doit montrer ht(f(t1,…,tn)) ≤ size(f(t1,…,tn)).
ht(f(t1,…,tn))= 1+max(ht(t1),…,ht(tn))(déf de ht)
 ≤ 1+ ht(t1)+⋯ + ht(tn)(car ht(ti)≥ 0) 
 ≤ 1+ size(t1)+⋯ + size(tn)(hyp. de récurrence)
 =size(f(t1,…,tn))(déf de size)

On en déduit que ht(t) ≤ size(t) est vérifié pour tout les termes du langage.

Exercice 16   Sur la signature des arbres binaires qui comporte une constante є pour représenter une feuille et un symbole N binaire pour représenter un nœud interne. Définir une fonction feuilles qui compte le nombre de feuilles et une fonction noeuds qui compte le nombre de nœuds internes. Montrer que pour tout arbre t qui ne contient pas de variable, on a feuilles(t)=noeuds(t)+1.

Substitution sur les formules

On a défini formellement la fonction de substitution d’une variable par un terme dans un autre terme. On peut faire de même avec la définition de la substitution d’une variable par un terme dans une formule quelconque. On construit la fonction à l’aide d’équations récursives sur le structure de la formule.

La définition de la substitution d’une variable x par un terme t dans une formule P doit prendre en compte le problème de la capture possible d’une des variables libres du terme t par un des quantificateurs interne de P.

Définition 2 (Substitution P[xt] d’une variable par un terme dans une formule)   Soit x une variable et t un terme.

Cette définition est donc partielle dans le cas des formules avec quantificateurs si une variable liée dans la formule est aussi libre dans le terme que l’on veut substituer. Cependant en procédant à un renommage des variables liées dans les quantificateurs, on peut toujours se ramener à une situation dans laquelle la substitution sera possible.

Exercice 17   La definition 2 nous donne les axiomes de la théorie de l’égalité pour un langage quelconque. Soient t et u deux termes du langage et P une formule quelconque. On rappelle que P[xt] représente la formule P dans laquelle on remplace la varible libre x par le terme t.

Montrer par récurrence sur la structure de la formule, que la règle de substitution dans un contexte arbitraire est valide :

t=u ⇒ P[x← t] ⇒ P[x← u]

.


1
Cette affirmation peut sembler paradoxale, c’est pourtant une propriété vraie. En effet soit tout le monde a les yeux bleus et l’affirmation est vraie, soit il existe une personne qui n’a pas les yeux bleus, que l’on nomme a. La propriété yeux-bleus(a)⇒ ∀ y, yeux-bleus(y) est vraie car de la forme AB avec A est faux. On en déduit le résultat.
2
Noter la différence de parenthésage avec la phrase précédente. Cette nouvelle affirmation, contrairement à la précédente n’est pas toujours vérifée.

Previous Up Next