intensionnel, comme il se doit. Mais maintenant nous pouvons envisager un pendant intensionnel de ce principe, et celui-ci est valide dans LO : si, dans une phrase, on remplace une expression par une autre ayant *la même intension*, alors l'intension (et donc les extensions) de la phrase ne change pas. C'est un théorème du système.

### Théorème 4.2

Si $\alpha$ est une expression de LO, $\beta$ une sous-expression de $\alpha$ et $\gamma$ sémantiquement équivalente à $\beta$, et si $\alpha'$ est l'expression $\alpha$ dans laquelle on a remplacé $\beta$ par $\gamma$, alors $\alpha$ est sémantiquement équivalente à $\alpha'$.

Nous pourrions d'ailleurs appeler cela le principe de synonymie. C'est en effet ce qui qualifie théoriquement les synonymes : deux expressions interchangeables dans tout environnement sans altérer le sens du tout. Évidemment nous savons bien que dans la langue, au niveau lexical, les substitutions ne sont vraiment possibles que dans certains contextes, mais rarement dans tous (à cause de la polysémie des mots) : la synonymie lexicale exacte n'existe quasiment pas. Mais au niveau d'expressions « supra-lexicales », i.e. d'expressions complexes (des syntagmes ou des phrases), le principe peut s'appliquer raisonnablement et profitablement. L'équivalence sémantique n'est pas un mirage.

### 4.5.3 Postulats de signification

Revenons à ce qui distingue la validité 3 et la validité 4. En théorie, on peut concevoir une formule qui serait valide-3 (i.e. toujours vraie dans un modèle donné) mais pas valide-4 (i.e. telle qu'il existe au moins un modèle et un monde de ce modèle qui la rendent fausse). La validité 4 sous-entend donc une pluralité de modèles intensionnels différents. Or par hypothèse de travail, pour rendre notre système suffisamment performant, nous avons décidé que l'ensemble $W$ d'un modèle intensionnel devait contenir tous les mondes possibles imaginables (mais logiquement et linguistiquement cohérents); il n'y a donc qu'un seul ensemble $W$, et par conséquent tous les modèles intensionnels que nous voudrions envisager partagent le même $W$. Et donc s'il existe des modèles intensionnels différents, ils se distinguent essentiellement par leur fonction d'interprétation $F^{74}$. La fonction $F$ incorpore (et ainsi détermine) le sens des prédicats de LO, et par conséquent le sens des mots de la langue que nous étudions (par exemple le français). $F$ est donc constitutive de l'identité du système LO qui lui-même se doit d'être le reflet de la langue étudiée. Si nous considérons que cette langue, en tant que système, possède sa sémantique, alors nous devrons en conclure qu'il n'y a qu'une seule véritable fonction $F$. Ou pour être plus précis, parmi toutes les fonctions d'interprétation théoriquement possibles, il n'y en a qu'une seule valable et digne d'intérêt aux yeux du sémanticien :

<footnote n="74">⁷⁴ Ils peuvent, certes, aussi se distinguer par leur ensemble $R$, mais $R$ dépend aussi en partie du contexte et nous laisserons cela de côté dans la présente discussion, pour ne pas encore la compliquer.</footnote>
celle qui reflète correctement le sens des mots de la langue<sup>75</sup>. Ainsi s'il n'y a qu'un seul *W* et une seule F à prendre compte, il n'y a finalement qu'un seul modèle intensionnel à envisager en sémantique, et nous devrions donc nous arrêter à la validité 3 (avec ce modèle). Nous pouvons ainsi éclaircir un peu le paradoxe apparent signalé plus haut, en reformulant les choses de la manière suivante : la validité 4 correspond aux nécessités aléthiques strictement logiques, et la nécessité 3 à ce que nous pourrions appeler les nécessités aléthiques sémantiques, ou pour faire plus simple et moins ambigu, les nécessités sémantiques.

Mais comment sommes-nous sûrs que nous manipulons *le* modèle adéquat, c'est-à-dire *la* fonction d'interprétation adéquate ? En réalité, nous ne nous en soucions pas vraiment, nous nous contentons de présupposer que tel est le cas, sans tellement examiner de près la fonction *F*. Cependant, n'est-il pas de la responsabilité du sémanticien de spécifier les informations que contient *F* pour faire en sorte qu'il ne s'agit pas de n'importe quelle fonction d'interprétation, mais bien de celle qui est le plus possible conforme à la réalité sémantique de la langue ? On peut assurément penser que oui. Et il se trouve que notre système intensionnel nous permet de contraindre *F* et ainsi de la renseigner (au moins un peu) avec des faits de sémantique lexicale.

Pour nous sensibiliser à cela, considérons la phrase (74a) et sa traduction (74b) :

(74) a. Bob a tué Sam, et Sam n'est pas mort.

b. **tuer(b, s) ∧ ¬mort(s)**

(74a) semble bien contradictoire. Mais d'un point de vue strictement logique, il n'y a aucun principe (aucune règle) qui permette de démontrer que (74b) l'est aussi. Parce que **tuer(b, s)** et **¬mort(s)** sont deux formules atomiques formellement distinctes, et leur conjonction est donc forcément contingente (il suffit de dresser la table de vérité de (74b)). Autrement dit, la négation de (74b) n'est pas valide-4. La validité 4 ne s'occupe pas du sens des mots. Mais nous sommes en sémantique et nous voudrions pouvoir dire que les négations de (74a) et (74b) sont valides. Pour cela, nous avons la validité 3, du moment que le modèle que nous prenons en compte vérifie un principe qui dit que lorsque qu'un se fait tuer, alors il est mort. Ce principe peut d'ailleurs se formuler très facilement dans LO, c'est :

<footnote n="75"><sup>75</sup> Attention, qu'on ne se méprenne pas. Je ne suis pas en train de dire que tout mot de la langue possède un unique sens simple encodé par la « bonne » fonction *F*. Nous savons bien que la plupart des mots sont plus ou moins hautement polysémiques ; mais *F* interprète univoquement les prédicats de LO, pas directement les mots. La polysémie lexicale est une problématique sémantique très importante et extrêmement complexe, qu'il n'est pas question de minimiser ; mais elle dépasse très largement la portée du présent ouvrage, et comme signalé plusieurs fois dans des pages précédentes, nous nous en tenons à la simplification qui consiste à traduire un mot polysémique par différents prédicats selon ses acceptations.</footnote>

<footnote>De même, je ne prétends pas que la langue française (par exemple) n'évolue pas et qu'elle ne possède pas de variété. Il semble raisonnable de considérer que, lorsqu'elle devient très minutieuse et affinée, une étude sémantique ne devrait pas aborder « *le* français » (abstrait et variable) mais se consacrer à un dialecte particulier et suffisamment bien délimité. Mais là encore nous n'entrerons pas dans ce degré de finesse ici.</footnote>
4 Sémantique intensionnelle

$$
(75) \quad \Box \forall x \forall y [\mathbf{tuer}(x, y) \rightarrow \mathbf{mort}(y)]^{76}
$$

Une formule comme (75) est ce que l'on appelle, en sémantique formelle, un **POSTULAT DE SIGNIFICATION**. Un postulat de signification a pour rôle de contraindre la fonction d'interprétation du modèle au moyen d'informations sémantiques qui relèvent du lexique. Cela se présente typiquement sous la forme d'une règle « forte » : une nécessité aléthique (☐) avec quantification universelle et implication ou équivalence matérielle. Ces postulats ne sont pas des formules ordinaires que LO serait simplement amené à étudier ; ils ont un statut un peu similaire à des axiomes en ce qu'ils sont posés et impossés comme valides dans le système (d'où le nom de *postulat*). Ce statut leur est octroyé par le sémanticien, qui sait (ou décide, ou découvre, ou conjecture) que ces formules expriment une vérité sémantique. Techniquement, pour nous ici, ils peuvent s'appliquer à deux niveaux. Par rapport à la validité 3, étant valides-3, ils garantissent (grâce à ☐) que le modèle est tel que tous ses mondes vérifient ce qui est encodé par les postulats. Mais ils permettent également de récupérer la validité 4 si nous restreignons sa définition seulement aux modèles intensionnels qui satisfont tous les postulats de signification. Cela permet d'adoucir notre position : nous n'avons plus à prétendre détenir le modèle intensionnel conforme à la langue, nous pouvons travailler sur n'importe lequel, du moment qu'il vérifie l'ensemble de nos postulats. Et ainsi la validité 3 et la validité 4 finissent factuellement par se confondre.

L'expressivité de LO étant ce qu'elle est présentement, nous ne pouvons pas formuler
des postulats de signification qui expriment des propriétés génériques<sup>77</sup> (i.e. qui tolèrent
des exceptions, comme les oiseaux volent). Nous devons nous en tenir à des vérités solides
et « indéfectibles » qui correspondent à des nécessités aléthiques. Mais cela permet, par
exemple, d'introduire dans le système des relations lexicales comme l'hyperonymie (76a),
l'antonymie complémentaire (76b) ou l'antonymie non complémentaire (appelée aussi
antonymie scalaire, cf. le chapitre 11, vol. 2) (76c,d).

(76) a. $\Box \forall x [\mathbf{oiseau}(x) \rightarrow \mathbf{animal}(x)]$
b. $\Box \forall x \forall y [\mathbf{présent}(x, y) \leftrightarrow \neg \mathbf{absent}(x, y)]$
c. $\Box \forall x [\mathbf{solide}(x) \rightarrow \neg \mathbf{fragile}(x)]^{78}$
d. $\Box \forall x [\mathbf{fragile}(x) \rightarrow \neg \mathbf{solide}(x)]$

Pris ensembles, les postulats (76c) et (76d) ne sont pas équivalents à $\Box \forall x [\mathbf{solide}(x) \leftrightarrow \neg \mathbf{fragile}(x)]$, car ils laissent la possibilité qu'il y ait des objets du modèle qui ne soient ni solides ni fragiles. Nous pouvons, en revanche, les réunir dans le postulat $\Box \forall x \neg [\mathbf{solide}(x) \wedge \mathbf{fragile}(x)]$.

<footnote n="76">76 Pour le coup, l'abandon de la temporalité est un peu préjudiciable pour cet exemple, il serait plus rigoureux de préciser ce principe en : $\Box \forall x \forall y [\mathbf{tuer}(x, y) \rightarrow \mathbf{Fmort}(y)]$, pour indiquer que la mort suit (immédiate-ment) l'acte de tuer. Et si nous retenons des mondes où des gens peuvent ressusciter, la formule reste correcte, car pour ressusciter, il faut d'abord être mort (pour que la formule soit vraie à un instant i il faut qu'il y ait au moins un instant ultérieur où y est mort ; rien n'empêche d'avoir un autre instant encore plus tardif où y est à nouveau vivant).</footnote>

<footnote n="77">⁷⁷ Et d'ailleurs ça ne serait probablement pas souhaitable ; cf. la discussion *infra*.</footnote>

<footnote n="78">78 NB : ici, bien sûr, le prédicat **solide** représente le sens qui se rapproche de **résistant**, il ne désigne pas l'état de la matière qui s'oppose à **liquide** et **gazeux**.</footnote>
En (76b), présent(x, y) et absent(x, y) signifient que x est, respectivement, physique-
ment présent et absent à l'endroit y. Mais notons que s'il s'agit de présence/absence
physiques, il serait probablement prudent de restreindre la quantification de (76b) aux
seuls individus pertinents – si l'on veut par exemple accepter que des entités immaté-
rielles puissent être ni présentes ni absentes de y. Cela donnera : □∀x∀y[[physique(x) ∧
physique(y)] → [présent(x, y) ↔ ¬absent(x, y)]]. On pourrait même vouloir aller plus
loin en précisant que dans ce postulat y doit être un lieu (en mettant donc lieu(y) dans sa
restriction). Mais qu'est-ce qu'un lieu ? Tout objet physique ne peut-il pas être envisagé
comme un possible espace d'accueil pour une localisation ?

Tout cela montre que les postulats de signification permettent de s'interroger profi-
tablement sur le sens des prédicats et des mots, mais aussi qu'ils sont à établir avec
vigilance. Car il y a une tentation à laquelle il faut résister : il ne faudrait surtout pas
s'aventurer à y encoder des connaissances encyclopédiques. Les postulats de significa-
tion ne concernent que les faits linguistiques (i.e. sémantiques). Les lois de la nature que
nous connaissons, de la physique, la chimie, la biologie, etc. n'en font pas partie. Ces
lois sont certes valides dans notre monde et dans les mondes qui y ressemblent suffisam-
ment, mais pas dans tous les mondes possibles. Ce ne sont pas des nécessités aléthiques
ou sémantiques ; elles relèvent plutôt des modalités dynamiques (ou, si l'on est scrupu-
leux, des modalités épistémiques). Et si l'on souhaite les insérer dans notre système, ce
ne sera pas au moyen de □ mais d'un autre opérateur de nécessité (un [n] habilement
choisi).

Malheureusement, dès que l'on tente d'approfondir la question, force est de constater
que la frontière entre faits strictement sémantiques et faits encyclopédiques est souvent
très ténue et insaisissable. Un exemple typique est celui des adjectifs *mort* et *vivant*. Ils
semblent être d'honnêtes antonymes complémentaires, et on peut alors proposer le pos-
tulat □∀x[vivant(x) ↔ ¬mort(x)] (ou □∀x[[végétal(x) ∨ animal(x)] → [vivant(x) ↔
¬mort(x)]] pour être plus précis). Mais que faire alors des mort-vivants ? Sont-ils morts
ou vivants ? Ou (pire) les deux à la fois ? Cela peut paraître une question anecdotique,
voire futile, mais elle a des implications non négligeables sur le système formel. Évi-
demment les mort-vivants n'existent pas dans notre monde, et il est donc impossible de
répondre sérieusement (i.e. scientifiquement) à la question. Cependant il ne s'agit pas ici
de la trancher biologiquement, mais sémantiquement. Car les mondes possibles (imagi-
naires) dans lesquels les mort-vivants existent sont linguistiquement cohérents (il n'y a
pas de raison qu'ils ne le soient pas). Nous sommes donc face au dilemme suivant. Soit
les mort-vivants sont, dans « leurs » mondes, à la fois morts et vivants. Dans ce cas, nous
devons abandonner le postulat d'antonymie ci-dessus et surtout trouver un moyen de dé-
finir les sens de *mort* et de *vivant* indépendamment l'un de l'autre *et* indépendamment de
considérations biologiques connues (ce qui n'est peut-être pas impossible, mais ce n'est
pas simple). Soit les mort-vivants sont vraiment morts mais pas vivants ou, inversement,
vraiment vivants mais pas morts. Dans ce cas, nous devrons considérer que l'alliance
des deux adjectifs correspond soit à un abus de langage soit (plus innocemment) à un
## 4 Sémantique intensionnelle

emploi figuré de *mort* ou de *vivant*<fnref n="79" />. Bref, cet exemple, au delà de son exotisme, montre que parfois il est assez difficile de définir le sens des mots en faisant complètement abstraction d'informations locales à notre monde, comme celles provenant des sciences de la nature. Et cela complique la tâche de la sémantique lexicale.

Pour autant, nous n'allons pas rejeter catégoriquement les postulats de signification de notre système, au contraire. Ceux-ci fondent ce que nous avons appelés les nécessités sémantiques (qui pour nous deviennent de facto un cas particulier des nécessités aléthiques). Or les nécessités sémantiques existent et elles sont utiles, car elles permettent par exemple de tirer des inférences et de faire des raisonnements à l'aide de la conséquence logique de la définition 4.16⁸⁰. Illustrons cela avec un exemple qui s'inspire, de manière extrêmement simplifiée (dans la formalisation et dans l'esprit), de l'usage que faisait Montague (1973) des postulats de signification.

Il y a des prédicats (généralement verbaux) qui impliquent l'existence de leurs argu- ments. C'est le cas, par exemple, de ceux qui traduisent des verbes comme *mordre*, *boire*, *nettoyer*, *plier*, *dormir*, etc. Il s'agit ici de l'existence au sens du prédicat *exister* que nous avons introduit en §4.3.3.1; rappelons que *exister(x)* est vraie dans le monde w ssi la dé- notation de x existe de façon immanente voire tangible dans w. Ces implications d'exis- tence peuvent être formalisées par des postulats comme :

$$ (77) \quad \Box \forall x \forall y [\mathbf{mordre}(x, y) \rightarrow [\mathbf{exister}(x) \wedge \mathbf{exister}(y)]] $$

(77) dit que si x mord y dans w, c'est que forcément x et y existent dans w. Les postulats fonctionnent comme des prémisses toujours disponibles pour un raisonnement. Ainsi à partir de (78a) nous pouvons déduire la conséquence logique (78b). C'est-à-dire que s'il est vrai qu'un vampire a mordu Alice dans w, alors il ne s'agit pas d'un vampire fictif mais d'un vampire bien réel (dans w).

(78) a. $\exists x [\mathbf{vampire}(x) \wedge \mathbf{mordre}(x, a)]$

b. $\exists x [\mathbf{vampire}(x) \wedge \mathbf{exister}(x) \wedge \mathbf{mordre}(x, a)]$

Nous voyons donc que, si jamais **exister** a une utilité fondamentale dans l'interpré- tation de certaines phrases, ce prédicat n'apparaîtra pas mystérieusement dans une for- mule : il arrive « automatiquement » avec le prédicat verbal de la phrase. Et grâce à (77), la formule (78a) suffit à représenter le sens qui est détaillé dans (78b).

<footnote n="79">⁷⁹ Sans trop épiloguer sur le sujet, voici néanmoins quelques pistes possibles d'éclairissement. On peut considérer que les morts-vivants sont vraiment morts mais pas vraiment vivants, qu'ils n'en ont que l'apparence (parce qu'ils ressemblent à des vivants, en déambulant, dévorant des cervelles, etc.). Alternativement, on peut considérer que les mort-vivants sont vraiment vivants, précisément parce qu'ils ne sont plus morts. L'anglais, à cet égard, possède un terme : *undead*, littéralement « dé-mort », c'est-à-dire qu'ils sont revenus de la mort. Ils sont donc alors à nouveau vivants ; c'est juste qu'ils ont ressuscité, mais... mal.</footnote>

<footnote>Ajoutons aussi que ce qui est en jeu ici n'est pas du tout de savoir par quelle règle morpho-lexicale le sens de *mort-vivant* s'obtient à partir de ceux de *mort* et *vivant* : exactement le même raisonnement peut être tenu sur le nom simple *zombie*, par exemple.</footnote>

<footnote n="80">⁸⁰ Elles permettent aussi d'expliquer pourquoi, par exemple, il est impossible que je dessine l'autoportrait de quelqu'un d'autre.</footnote>
Des postulats comme (77) peuvent paraître à première vue un peu banals, mais en fait ils sont loin de l'être, dès que nous constatons qu'il y a des prédicats qui eux ne provoquent pas ce type d'implications. Par exemple, ceux qui traduisent les verbes *aimer*, *rêver de*, *chercher*, *ressembler à*, etc. n'impliquent pas nécessairement l'existence de leur deuxième argument. Il est même probable que certains (comme *ressembler*) n'impliquent pas non plus l'existence de leur premier argument. Ainsi (79b) n'est pas une conséquence de (79a).

(79) a. $\exists x[\text{licorne}(x) \land \text{chercher}(a_1, x)]$

b. $\exists x[\text{licorne}(x) \land \text{exister}(x) \land \text{chercher}(a_1, x)]$

Notons cependant que (79a) ne suffit pas à rendre compte d'une lecture *de dicto*. Quant à (79b), elle en dit plus que ce qu'est une lecture *de re* (cf. note 68, p. 244). À cet égard, la stratégie de Montague (1973), bien plus sophistiquée, est plus appropriée.

4.5.4 Sens, propositions et conditions de vérité

Concluons cette (longue) conclusion en faisant d'abord un petit point notionnel. Dans ce chapitre, nous avons formellement défini le sens (i.e. l'intension) d'une phrase (déclarative) comme étant une *proposition*, c'est-à-dire une fonction de $W$ dans $\{0; 1\}$ (ou un ensemble de mondes possibles). Auparavant nous manipulions le sens d'une phrase comme étant ses *conditions de vérité*. Est-ce à dire que nous avons changé de définition de ce qu'est le sens d'une phrase ? Non, bien sûr. Une proposition est une fonction qui pour tout monde $w$ sait dire si la phrase dont elle est le sens est vraie ou fausse dans ce monde. Comment le sait-elle ? Précisément parce qu'elle « connaît » les conditions de vérité de la phrase, et cela lui suffit pour qu'elle fasse son travail (i.e. retourner 1 ou 0 quand il le faut). Autrement dit, une proposition n'est autre qu'un objet qui représente et formalise des conditions de vérité. En bref, une proposition *est* un ensemble de conditions de vérité, et réciproquement.

Cependant, la notion de proposition fait apparaître un problème qui généralement est moins visible lorsque l'on travaille sur des conditions de vérité (parce que celles-ci sont un peu moins formelles). Pour nous y sensibiliser, considérons les phrases de (80). Quelles sont leurs intensions ?

(80) a. Tous les éléphants sont des éléphants.

b. Alice a le même âge qu'elle-même.

c. Melbourne est la capitale de l'Australie, ou pas.

Nous sommes à présent suffisamment habitués pour reconnaître que ces trois phrases sont des tautologies (au sens le plus fort du terme, elles sont valides 4), elles sont toujours vraies. Donc, par définition, l'intension de chacune d'elle est la fonction constante qui renvoie toujours 1, jamais 0. Et en termes ensemblistes, c'est l'ensemble $W$ complet. Par conséquent, ces trois phrases ont exactement la même intension, elles ont exactement le même sens... C'est évidemment là que le paradoxe surgit : ces phrases ont beau être logiquement (et donc sémantiquement) équivalentes, elles ne nous frappent pas comme
étant synonymes ou des paraphrases les unes des autres. Ne serait-ce que parce qu'elles ne racontent pas du tout les mêmes choses. Mais notre système ne nous laisse pas le choix ; c'est un de ses théorèmes : toutes les tautologies du langage sont sémantiquement équivalentes entre elles, ce qui implique nécessairement qu'elles ont le même sens, de même que toutes les contradictions ont le même sens (parce que leur intension est l'ensemble vide).

Ce problème a été depuis longtemps repéré par les philosophes et a donné lieu à l'ap-
pellation d'HYPERINTENSIONNALITÉ. Cette notion renvoie à l'idée qu'il y a quelque chose
qui, dans notre compréhension de phrases, nous permet de les distinguer et qui se si-
tue au delà de leur intension. Et cela devrait nous amener à la conclusion que notre
définition formelle du sens, par intension, est insuffisante voire erronée. Cependant, il
convient d'être particulièrement rigoureux et méthodique si l'on souhaite se lancer sur
la piste de cette critique.

Il peut être, au moins a priori, parfaitement légitime de considérer que l'hyperinten-
sionnalité n'est pas un problème fondamental pour un système tel que notre LO inten-
sionnel. En effet notre système fait la prédiction que les trois phrases de (80) ont le même
sens ; ce résultat nous dérange, mais tant qu'il ne produit pas une incohérence interne
au système (c'est-à-dire que ce résultat ne vient pas en contradiction avec d'autres pré-
dictions du système), ce n'est pas si dramatique. Cela voudra dire que notre système est
incomplet, qu'il faudrait lui ajouter quelque chose, mais pas qu'il est en soi défaillant.
Et alors, en attendant de le compléter, nous devrons nous contenter d'admettre que : eh
bien oui, c'est bizarre, les phrases de (80) ont le même sens, mais c'est comme ça, étant
donné la définition du sens. Après tout notre système intensionnel prédit correctement
que toutes les tautologies sont *vides de sens* dans la mesure où elles n'apportent en soi
aucune information dans un discours ou une conversation.

En revanche, l'hyperintensionnalité posera un problème préoccupant si nous consta-
tons que le système fait des prédictions qui brisent sa cohérence interne. Et c'est dans
cette direction qu'il faut orienter la critique. Notre système n'est pas nécessairement tenu
de prédire une différence entre les phrases (80), par contre il est tenu de prédire le calcul
des valeurs de vérité correctes des phrases dans n'importe quel monde. Une mauvaise
prédiction serait donc cela : une erreur de calcul de dénotation. Et pour en trouver (s'il
y en a), nous devons revenir au principe de substitution du théorème 4.2 (p. 254). Il dit
que nous pouvons interchanger des sous-expressions de même intension sans changer
l'intension globale de la phrase. Pouvons-nous donc opérer des substitutions qui violent
ce principe ? Là encore il faut regarder du côté des verbes d'attitudes propositionnelles :

(81) a. Jean pense que tous les éléphants sont des éléphants.

b. Jean pense qu'Alice a le même âge qu'elle-même.

Si (80a) a la même intension que (80b), alors (81a) doit avoir la même intension que (81b), en vertu du principe de substitution. Autrement dit, si Jean croit (80a), il doit forcément croire aussi (80b), et même toutes les autres tautologies du langage. Mais est-ce le cas ? Intuitivement non, même si c'est une question qui n'est pas si évidente à trancher. Car on pourrait objecter que même si les gens pensent ce qu'ils veulent (malheureusement
ment), s'ils pensent, c'est qu'ils sont un minimum rationnels et que donc, sans forcément en être conscient, ils penseront toutes les tautologies possibles. Mais c'est là faire de tout individu pensant un parfait raisonneur ou un logicien accompli, ce qui est une hypothèse un peu audacieuse. Et cela impliquerait aussi qu'aucun individu ne pourrait avoir de pensées contradictoires, ce qui semble empiriquement démenti quotidiennement... Et de toute manière, si dans (81) nous remplaçons *penser* par *dire*, l'objection ne tient plus, car rien n'oblige à dire ce que l'on pense ni à dire des choses logiques.

Par conséquent, (81) montre qu'il existe dans la langue ce que l'on appelle des contextes hyperintensionnels, c'est-à-dire sensibles à l'hyperintensionnalité, en l'occurrence des verbes d'attitudes propositionnelles (il y en a peut-être d'autres). Cela prouve que notre système fait des erreurs. Il faudrait donc idéalement le corriger ; pour cela il y a deux objectifs à poursuivre : d'abord formaliser précisément ce qui serait « l'hyperintension » d'une expression, et ensuite redéfinir l'interprétation des verbes d'attitudes propositionnelles en posant que leur argument n'est pas l'intension d'une phrase mais son hyperintension. Ce n'est pas une tâche triviale, loin de là, mais à l'intérieur de LO, la correction à apporter ne concerne que l'analyse des verbes propositionnels. Notre système n'est peut-être pas entièrement contaminé.

Pour cette raison, nous ne nous lancerons pas ici dans une tentative de résoudre ce problème ; nous allons conserver LO tel qu'il est, en restant conscients (et contrits<sup>81</sup>) de son imperfection. Une autre raison est que le traitement formel de l'hyperintensionnalité est singulièrement complexe, et il existe encore aujourd'hui assez peu de consensus sur les analyses à adopter. Je vais cependant, pour terminer, évoquer brièvement une stratégie séduisante proposée par Lewis (1970). D. Lewis distingue la notion d'intension de la notion de signification (*meaning*, dans le texte), cette dernière correspondant à ce que nous appelons ici l'hyperintension. Il définit la signification d'une expression comme une structure (techniquement un arbre) qui contient non seulement l'intension de l'expression mais aussi les intensions de tous ses constituants. Autrement dit, la signification contient, en quelque sorte, l'historique de la construction progressive du sens de l'expression. Et c'est bien ce qui distingue les phrases de (80) : elles sont équivalentes mais leurs sens n'ont pas été obtenus de la même façon. Nous voyons que cette stratégie rePOSE CRUCIALEMENT SUR LE PRINCIPE DE COMPOSITIONNALITÉ QUI SOUS-TEND LE MÉCANISME DE CONSTRUCTION DU SENS À PARTIR (entre autres) DU SENS DES PARTIES. ET Cela nous donne une transition toute trouvée pour passer au chapitre suivant.

<footnote n="81"><sup>81</sup> Mais modérément.</footnote>
<figure><img src="image_31.png" /></figure>
# 5 λ-calcul et théorie des types

L'enjeu de ce chapitre est de s'attaquer sérieusement et précisément à la compositionnalité. Les chapitres précédents se sont consacrés essentiellement à la partie interprétation du système formel, et plus précisément à l'interprétation du langage LO – c'est ce qui correspond à la flèche droite du schéma de la figure 5.1. Nous allons continuer à développer cette partie, mais nous allons aussi commencer à prêter une attention soutenue à la flèche de gauche de la figure 5.1¹, c'est-à-dire le lien entre la langue naturelle et LO.

<figure><img src="image_32.png" /><figcaption>FIG. 5.1 : Architecture du système sémantique formel</figcaption></figure>

Il va s'agir de définir un ensemble de règles qui permettent d'obtenir « automatiquement » la traduction d'une phrase dans LO. Nous nous appuyons pour cela sur le principe de compositionnalité, et comme ce principe dit que le sens d'une phrase dépend du sens de ses parties et de leur mode combinaison syntaxique, le système de règles devra opérer sur des phrases analysées syntaxiquement. Nous allons donc nous situer à l'interface syntaxe-sémantique. C'est là une tâche de grande envergure, qui va nous occuper pendant deux chapitres (celui-ci et le suivant) afin de mettre en place l'appareillage formel qui nous permettra de la mener à bien. Le présent chapitre se consacre à une dernière amélioration de fond de LO qui lui permettra de jouer proprement son rôle de pivot dans un système d'analyse sémantique compositionnelle.

## 5.1 Tout est fonction (ou presque)

### 5.1.1 Des trous dans les formules

Nous savons traduire en LO une phrase simple du français comme (1a). Nous savons le faire car nous comprenons (1a), c'est-à-dire que nous percevons ses conditions de vérité, et nous connaissons maintenant suffisamment bien LO pour symboliser ces conditions dans une formule (1b).

<footnote n="1">¹ Rappelons que par $\tilde{\delta}$ nous représentons une fonction de traduction possible (parmi d'autres) des expressions de la langue naturelle vers des expressions de LO (cf. la conclusion du chapitre 2, §2.5). C'est ce qui nous permet, par exemple, de noter : $\tilde{\delta}(Alice dort) = dormir(a)$.</footnote>
(1) a. Alice regarde Bruno.

b. regarder(a, b)

En fait cet exemple montre que, pour l'instant, nous traduisons du français vers LO de la même manière qu'un polyglotte traduira, par exemple, une phrase de l'italien vers l'anglais. Nous accédons au sens de la phrase de départ puis nous reformulons ce sens dans le langage cible, en l'occurrence ici LO. Cependant il ne faut pas perdre de vue que les traductions que nous effectuons ici ne sont qu'accessoires, et ce qui nous intéresse en sémantique c'est avant tout de décrire le sens des expressions. Pour dire les choses autrement, la traduction vers LO ne doit pas tellement être vue comme une reformulation d'un sens dans une autre langue, mais plutôt comme une manière de dévoiler (c'est-à-dire d'expliciter) le sens. Ainsi traduire dans LO correspond à cette étape d'accès au sens mentionnée ci-dessus ; cela consiste simplement à faire de l'analyse sémantique. Une théorie de description formelle et suffisamment élaborée d'une langue naturelle comme le français devra donc expliciter, et détailler, les mécanismes mis à l'œuvre dans l'analyse sémantique d'une phrase.

L'analyse sémantique pilote le processus de construction du sens d'une phrase et doit donc respecter notre principe de compositionnalité (2.4, p. 55) qui, rappelons-le, dit que l'interprétation (i.e. le sens) d'une phrase dépend de l'interprétation de ses parties et de leur mode de combinaison syntaxique. Cela implique d'abord que l'analyse sémantique doit tenir compte de la syntaxe<fnref n="2" /> et donc opérer sur des phrases analysées syntaxiquement, c'est-à-dire, par exemple, des arbres.

Ainsi, si l'on dispose d'une règle syntaxique qui dit qu'une phrase se réécrit en un groupe nominal suivi d'un groupe verbal, P → GN GV<fnref n="3" />, alors le sens de P doit dépendre du sens de GN et de GV. Et cela a une implication supplémentaire importante : un GN et un GV doivent en soi avoir un sens et donc correspondre à des expressions reconnues et interprétables dans LO. Et de même pour tous les constituants syntaxiques de la phrase.

Reprenons l'exemple (1a) avec son analyse syntaxique, que l'on peut, au moins en première approximation, représenter par l'arbre de constituants en figure 5.2. Le principe de compositionnalité nous dit que chaque constituant de la phrase est interprétable. C'est pourquoi nous pouvons décorer l'arbre en associant à chacun de ses nœuds une expression de LO (qui est, par définition, interprétable). Nous savons ce qui décore le nœud P : c'est la formule (1b) ; et nous prévoyons assez naturellement que les GN, Alice et Bruno, seront décorés respectivement des constantes a et b, et le verbe regarde du prédicat binaire regarder. Mais quelle expression de LO pouvons-nous associer au groupe verbal GV ? Nous venons de voir que par compositionnalité ce GV est interprétable : il devrait donc pouvoir se traduire en soi dans LO.

<footnote n="2">² Il s'agit là bien sûr de la syntaxe du français, pas de la syntaxe de LO que nous avons vue dans les chapitres précédents</footnote>

<footnote n="3">³ Pour le moment, j'utilise encore les notations françaises GN, GV, P, pour désigner les constituants syntaxiques. Par la suite, nous serons amenés à manipuler beaucoup d'autres catégories syntaxiques. Nous passerons alors aux notations anglo-saxonnes, comme NP (*noun phrase*), VP (*verb phrase*), etc. qui sont plus universelles.</footnote>
<figure><img src="image_33.png" /><figcaption>FIG. 5.2 : Analyse de *Alice regarde Bruno*</figcaption></figure>

Pour répondre à cette question, il faut d'abord essayer d'avoir une idée claire sur ce
à quoi correspond sémantiquement un tel GV. Syntaxiquement, il s'agit, d'une certaine
manière, de l'assemblage d'un verbe et d'un GN objet. Et sémantiquement cela corres-
pond au prédicat verbal **regarder** qui a maintenant son second argument (b) mais pas
encore le premier. Autrement dit c'est un prédicat auquel il **manque** un argument. Voir
les choses en termes de manque ou d'absence peut être à ce sujet très éclairant. Un GV
est une expression sémantiquement incomplète, par opposition à une expression qui est,
elle, complète, à savoir une phrase ou, dans LO, une formule. Donc nous aurons intérêt à
voir la traduction d'un GV comme une formule incomplète, non saturée ou plus exacte-
ment *pas encore* saturée. Cela est d'ailleurs généralisable aux prédicats eux-mêmes. Par
exemple, un prédicat verbal binaire comme **regarder** est une expression qui lorsqu'on
lui fournit deux arguments produit, avec ses deux arguments, une formule.

Mais nous sommes ici face à un problème technique très bloquant et en même temps très simple : le langage LO, tel qu’il est défini formellement, ne nous permet tout bonne- ment pas de représenter le sens d’un GV comme *regarde Bruno*, c’est-à-dire un prédicat binaire, *regarder*, qui possède son second argument, *b*, mais pas encore son premier ar- gument. Toute tentative que nous pourrions faire pour implémenter cette idée, pourtant simple, dans LO est vouée à l’échec. Essayons.

Une première suggestion qui peut nous venir à l'esprit serait de traduire le GV par **regarder(x, b)**, en utilisant une variable, *x*, pour l'argument manquant. C'est une expression bien formée, légitime selon la syntaxe de LO ; mais le problème, c'est que c'est une formule, c'est-à-dire une expression saturée, qui a la propriété sémantique de pouvoir être vraie ou fausse. Or ce n'est pas ce que nous voulons pour un GV (un GV n'est ni vrai ni faux). Certes une variable est un désignateur anonyme, dans le sens où elle ne nous indique pas d'elle-même sa dénotation (c'est l'assignation *g* fournie par le contexte qui nous l'indique), mais une variable est tout de même un terme à part entière de LO, apte à occuper une position d'argument d'un prédicat. On peut toujours retraduire **regarder(x, b)** en français ; cela donnera **il (ou elle) regarde Bruno** – une phrase et non un GV.

Une autre suggestion serait de traduire le GV par **regarder(b)**. Mais nous n'avons pas le droit, la syntaxe de LO nous l'interdit. Car nous savons que le prédicat **regarder**
est d'arité 2, et la seule règle qui nous permet d'utiliser un tel prédicat dans LO est
(Syn.1b) (p. 67), qui nous oblige à accompagner le prédicat d'exactement deux arguments.
La définition de la syntaxe du langage étant ce qu'elle est, **regarder(b)** n'est pas une
expression bien formée de LO.

En fait, ce dont nous aurions besoin pour traduire le GV, c'est quelque chose comme
**regarder**(..., **b**), avec un symbole spécial (...) pour représenter une place vide. Bien évi-
demment ce symbole n'existe pas dans LO, et donc là encore nous n'avons pas le droit
d'écrire cette expression. Le problème n'est pas tant que le symbole est absent du lan-
gage, c'est surtout qu'il serait difficile de lui attribuer rigoureusement une interprétation
propre, signifiant qu'il désigne une place vide.

L'enjeu pour nous ici est donc d'augmenter l'expressivité de LO en se donnant les
moyens de représenter rigoureusement dans le langage des choses qui manquent, des
places vides ou des « trous » dans les formules<fnref n="4" />. Par la suite, il nous faudra également
expliciter précisément le processus qui, dans la syntaxe de LO, consiste à combler ces
vides, c'est-à-dire à fournir des arguments aux prédicats. Et – c'est extrêmement impor-
tant – il va aussi nous falloir définir explicitement la règle sémantique qui nous permet-
tra d'interpréter les formules « à trous ». C'est ce point que nous allons commencer par
aborder dans ce qui suit.

5.1.2 Sémantique fonctionnelle des prédicats

Dans cette section, nous allons réviser la définition de l'interprétation (i.e. la dénota-
tion) des prédicats, en la remplaçant par une variante formellement plus efficace et qui,
ensuite, nous permettra d'implémenter très facilement la notion de « trous » dans le sys-
tème sémantique. Cela ne veut pas dire que la définition que nous connaissons jusqu'ici
va devenir complètement caduque (nous la réutiliserons de temps en temps), mais elle
sera maintenant secondaire dans le système LO. Autrement dit, il n'y aura pas de rupture
de cohérence avec ce que nous avons vu auparavant.

5.1.2.1 Prédicats unaires

Commençons avec le cas le plus simple, celui des prédicats unaires. Selon la défini-
tion 2.11 (p. 78), nous le savons bien, un prédicat unaire dénote un ensemble d'indivi-
dus de $\mathcal{A}$ (i.e. un sous-ensemble de $\mathcal{A}$). Par exemple pour le prédicat **dormir**, cela nous
donne :

$$
(2) \quad [[\mathbf{dormir}]]^{M, w, g} = F(w, \mathbf{dormir}) = \text{l'ensemble de tous les individus de } \mathcal{A} \text{ qui dorment dans le monde } w.
$$

<footnote n="4">⁴ Et nous verrons d'ailleurs qu'à cet effet, les trois suggestions examinées ci-dessus ne sont pas complètement aberrantes. Nous pourrons nous apercevoir que l'amendement apporté à LO reprend en quelque sorte le meilleur de chacune de ces suggestions : nous représenterons des trous comme « , mais de façon plus efficace ; nous utiliserons des variables ; et nous nous autoriserons à donner aux prédicats moins d'arguments que prévu par leur arité.</footnote>
5.1 Tout est fonction (ou presque)

Les conditions de vérités définies par la règle (Sém.1a) (de la définition 2.12, p. 79, re-
prise en définition 3.5, p. 120) exploitent ce type de dénotation en faisant appel à la
relation ensembliste d'appartenance, $\in$, pour vérifier que l'argument donné au prédicat
le satisfait bien.

Mais il y a une autre manière de concevoir cette dénotation. Il s'agit d'une variante
mathématique très simple et systématique, qui consiste à voir la dénotation du prédicat
comme une **fonction**, allant de l'ensemble $\mathcal{A}$ vers l'ensemble des valeurs de vérité $\{0; 1\}$.
Plus précisément, c'est la fonction qui, à tout élément de $\mathcal{A}$, attribue la valeur 1 si cet
élément satisfait le prédicat dans le modèle (et dans le monde où l'on choisit d'interpréter
le prédicat). Ainsi pour **dormir**, sa dénotation fonctionnelle générale est définie comme
suit :

$$
(3) \quad [[\mathbf{dormir}]]^{M,w,g} = F(w, \mathbf{dormir}) = \begin{array}{r@{\,}c@{\,}l@{\quad}l}
\mathcal{A} & \to & \{0; 1\} \\
\multicolumn{1}{c}{\mathbf{x}} & \mapsto & \begin{cases} 1 & \text{si } \mathbf{x} \text{ dort dans } w \\ 0 & \text{sinon} \end{cases}
\end{array}
$$

Illustrons immédiatement cela avec un exemple. Prenons un modèle-jouet $\mathcal{M} =$
$\langle \mathcal{A}, \mathcal{W}, F \rangle$, avec $\mathcal{A} = \{ \text{ALICE} ; \text{BRUNO} ; \text{CHARLES} ; \text{DINA} \}$, et plaçons-nous dans un
monde $w_1$ de $\mathcal{W}$. Une valeur possible pour la dénotation du prédicat **dormir** (et donc
aussi du verbe intransitif dort) dans $w_1$ est donnée par la fonction explicitée en (4) :

$$
(4) \quad [[\tilde{\delta}(dort)]]^{M,w_1,g} = [[\mathbf{dormir}]]^{M,w_1,g} = \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \middle| \begin{array}{c} 1 \\ 2 \\ 3 \\ 0 \end{array} \right]
$$

Cette fonction nous indique que ALICE, BRUNO et DINA dorment dans $w_1$, et que CHARLES ne dort pas. C'est très simple, il suffit de suivre les flèches.

Nous avons déjà manipulé beaucoup de fonctions dans les chapitres qui précédaient
(fonction d'interprétation, fonction d'assignation, intensions...), mais ça vaut la peine de
revenir ici quelques instants sur cette notion. Une fonction est un système de mise en
correspondance entre les éléments de deux ensembles donnés, un ensemble de départ et
un ensemble d'arrivée. Elle doit respecter la contrainte qu'à tout élément de l'ensemble
de départ soit associé un et un seul élément de l'ensemble d'arrivée. Cela fait qu'il peut
être également pratique d'adopter une vision plus procédurale des fonctions. Métaphori-
quement, on peut voir une fonction comme petite machine qui donne un résultat quand
on lui a fourni un « ingrédient ». L'ingrédient est ce que l'on nomme l'**argument** de la
fonction (et bien sûr, ce n'est pas pour rien qu'on utilise le même terme quand on parle
des arguments de prédicats dans LO), c'est un élément de l'ensemble de départ ; et le
résultat, que l'on appelle aussi la **VALEUR**, est l'élément de l'ensemble d'arrivée que la
fonction associe à l'argument donné. Ainsi la fonction (4) est cette machine qui retourne
le résultat 1 (vrai) si et seulement si l'argument qu'on lui a donné est un individu qui
dort dans $w_1$. Autrement dit, elle répond à la question « est-ce que x dort dans $w_1$ ? »
pour n'importe quel x de $\mathcal{A}$ – ou plus globalement, à la question « qui dort dans $w_1$ ? ».
Maintenant, puisque $[[dormir]]^{M,w_1,g}$ est une fonction, on peut lui donner un argument, par exemple ALICE, ce qui se fait en écrivant $[[dormir]]^{M,w_1,g}(ALICE)$. Et le modèle $\mathcal{M}$, tel qu'il est décrit (en partie) dans (4), nous dit que $[[dormir]]^{M,w_1,g}(ALICE) = 1$ – il suffit de suivre la flèche qui part d'ALICE. On devine facilement que c'est là la dénotation de la formule dormir(a). De cette façon, le prédicat prévoit la dénotation finale de la formule où il intervient. Cette dénotation dépend de l'argument qui sera donné, mais c'est le prédicat, en tant que fonction, qui fournira la valeur 1 ou 0.

Comme je l'ai suggéré *supra*, passer d'une dénotation ensembliste à une dénotation fonctionnelle des prédicats n'est finalement qu'une variante formelle. C'est exactement ce que nous avons vu au chapitre précédent au sujet des propositions (i.e. l'intension des formules). Prenons le temps ici de rappeler le principe sous-jacent de cette variante. Il y a un fait mathématique bien établi qui dit qu'il existe une équivalence systématique entre la définition d'une fonction qui va d'un ensemble donné $E$ vers un ensemble comme $\{0; 1\}$ et la définition d'un sous-ensemble de $E$. En effet, si l'on dispose d'une fonction qui projette chaque élément de $E$ sur 1 ou 0, on peut en déduire la donnée d'un sous-ensemble particulier de $E$ : celui qui contient juste les éléments de $E$ auxquels la fonction assigne la valeur 1. Inversement, si l'on connaît précisément le contenu d'un sous-ensemble donné de $E$, on peut toujours définir une fonction particulière de $E$ vers $\{0; 1\}$ : la fonction qui retourne la valeur 1 si et seulement si son argument appartient au sous-ensemble en question. Une telle fonction, qui prend ses valeurs dans une paire comme $\{0; 1\}$, s'appelle la *FONCTION CARACTÉRISTIQUE* d'un ensemble ; elle caractérise complètement un ensemble en disant, via la valeur 1, quels sont les éléments qui constituent l'ensemble.

**Définition 5.1 : Fonction caractéristique d'un ensemble**

Soit $E$ un ensemble non vide et $S$ un sous-ensemble de $E$.

La **FONCTION CARACTÉRISTIQUE** de $S$ est la fonction de $E$ vers $\{0; 1\}$ qui à tout élément de $E$ attribue la valeur 1 si cet élément appartient à $S$, et 0 sinon.

À tout ensemble d'objets, quels qu'ils soient, correspond une et une seule fonction caractéristique ; et toute fonction qui prend ses valeurs dans une paire comme $\{0; 1\}^5$ détermine de façon univoque le contenu d'un sous-ensemble précis de son ensemble de départ. Il ne s'agit pas exactement d'un équivalence formelle : un ensemble et une fonction ne sont pas des objets mathématiques de même nature ; mais on peut voir cela comme une équivalence de fond, dans la mesure où la définition de l'un entraîne la définition de l'autre, et réciproquement. Ainsi la fonction présentée en (4) est la fonction caractéristique de l'ensemble $\{ALICE; BRUNO; DINA\}$. Par conséquent (4) nous donne exactement les mêmes informations que (5).

<footnote n="5">⁵ Je dis « une paire comme $\{0; 1\}$ » car en fait n'importe quel ensemble de deux éléments peut faire l'affaire – par exemple $(+; -)$ ou $(\text{oui}; \text{non})$ ou $(\bullet; \circ)$ ou $(\odot; \otimes)$ etc. Il suffit seulement de poser par convention qu'un des deux éléments s'interprète comme un confirmateur de l'appartenance à l'ensemble (pour nous, c'est 1), et l'autre comme un infirmateur (0).</footnote>
$$
(5) \quad \left\| \mathcal{F}(dort) \right\|_{M, w_1, g} = \left\| \mathbf{dormir} \right\|_{M, w_1, g} = \{ \text{ALICE} ; \text{BRUNO} ; \text{DINA} \}
$$

De ce fait, même en étant passé à des dénotations fonctionnelles, nous ne pouvons
guère oublier les ensembles (et ce n’est pas plus mal, car cela prouve au moins que les
formalisations que nous avions vues dans les chapitres précédents ne sont pas fonda-
mentalement remises en question). Mais nous allons voir que l’approche fonctionnelle
est beaucoup plus puissante et expressive pour notre système sémantique.

Il faut cependant préciser que, comme à présent nous formalisons la dénotation des prédicats unaires en tant que fonctions, alors ce qui est écrit en (5) n’est pas parfaitement rigoureux : la dénotation de **dormir** ne peut pas être à la fois une fonction et un ensemble. Nous devrons donc reprendre ici la convention que nous avions posée en §4.4.2 et qui introduisait la notation $\llbracket \cdot \rrbracket_c$. Ainsi (5) devra se reformuler en : $\llbracket \mathbf{dormir} \rrbracket_c^{M,w_1,g} = \{ \text{ALICE} ; \text{BRUNO} ; \text{DINA} \}$. Cette notation fait simplement passer d’une fonction caractéristique à l’ensemble caractérisé par cette fonction.

Et puisque nous allons manipuler une quantité de fonctions, j’introduis ici un élément
de notation qui va nous être très utile. Quand on s’intéresse à des fonctions qui vont, par
exemple, d’un ensemble A vers un ensemble B, il peut être pratique de savoir regrouper
toutes les fonctions possibles qui s’établissent entre A et B. Les regrouper signifie les
ranger dans un ensemble ; car bien sûr il n’y a pas de raison de ne pas concevoir des
ensembles de fonctions (et nous ne nous en priverons pas). En fait ce regroupement ne
demande aucun savoir-faire technique particulier, c’est juste une question de notation<fnref n="6" />.

**Notation 5.1**

Soit A et B deux ensembles non vides. L'ensemble de toutes les fonctions de A vers B se note $B^A$.

Donc l'extension de dormir dans w est un élément de {0 ; 1}^A. Et de manière gé-
nérale, {0 ; 1}^A contient toutes les extensions possibles de tous les prédicats unaires
envisageables dans le modèle.

5.1.2.2 Prédicats binaires et n-aires

Nous avons rendu fonctionnelle la dénotation des prédicats unaires, bien entendu,
nous devons faire la même chose pour les prédicats d'arité supérieure. Les prédicats bi-
naires expriment des relations (à deux membres), et précédemment nous formalisions
leurs extensions au moyen d'ensembles de couples d'individus. En poursuivant notre
entreprise de remplacement les ensembles par des fonctions caractéristiques, nous pour-
rions proposer que la dénotation d'un prédicat binaire est donc une fonction qui associe

<footnote n="6">⁶ Cette notation rappelle celle des puissances en algèbre, et ce n’est pas innocent. En effet, si A contient n éléments et B contient m éléments, alors le nombre total de fonctions que contient $B^A$ est $m^n$. Il faut simplement bien se souvenir que l’ensemble de départ est celui noté en exposant, et l’ensemble d’arrivée celui noté en base.</footnote>
une valeur de vérité à chaque couple d'individus du domaine $\mathcal{A}$. L'ensemble de tous les couples d'individus pris dans $\mathcal{A}$ se note $\mathcal{A} \times \mathcal{A}$ (ou $\mathcal{A}^2$). Ainsi pour le prédicat **regarder**, nous aurions :

$$ (6) \quad [[\mathbf{regarder}]]^{M, w,g} = F(w, \mathbf{regarder}) = \begin{array}{rcl} \mathcal{A} \times \mathcal{A} & \to & \{0; 1\} \\ \langle x, y \rangle & \mapsto & \begin{cases} 1 & \text{si } x \text{ regarde } y \text{ dans } w \\ 0 & \text{sinon} \end{cases} \end{array} $$

En soi cette formalisation n'est pas incorrecte, mais ce n'est pas celle que nous allons retenir, car elle n'est pas suffisamment compositionnelle. Pour que la fonction (6) puisse nous donner un résultat, il faut qu'on lui fournisse directement un couple d'individus ; autrement dit, on est obligé de fournir les deux arguments du prédicat d'un coup. Or nous avons vu précédemment (§5.1.1) que nous aimerions pouvoir donner au prédicat ses arguments un par un, et surtout pouvoir obtenir une interprétation (i.e. une dénotation) à chaque étape. Il se trouve qu'un usage adéquat des fonctions nous permet de faire cela.

Prenons un prédicat à deux places, par exemple **regarder** ou le verbe **regarde**. Si nous fixons (i.e. nous saturons) un de ses arguments, nous obtenons sémantiquement l'équivalent d'un prédicat à une place. Par exemple la dénotation du GV **regarde Bruno** (cf. **regarder**(-, b)) est, à l'instar de celle d'un verbe intransitif comme dort, une fonction de {0 ; 1}esk. C'est la fonction qui renvoie 1 si et seulement si son argument, i.e. la dénotation du GN sujet, regarde effectivement BRUNO dans le monde d'évaluation. Voici en (7) un exemple avec notre modèle-jouet pour le monde w₁ :

$$ (7) \quad [[\tilde{\mathfrak{F}}(\text{regarde Bruno})]]^{M, w_1, g} = \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \right. \xrightarrow{1} \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \right. \xrightarrow{0} $$

(7) présente la fonction qui nous dit qui regarde BRUNO dans w₁ ; en l'occurrence seule ALICE regarde BRUNO.

Bien évidemment, nous avons quelque chose d'analogue pour le GV **regarde Alice** (cf. **regarder**(-, a)). Sa dénotation dans w₁ est la fonction qui répond à la question « qui regarde ALICE dans w₁ ? » (ici CHARLES et DINA) :

$$ (8) \quad [[\tilde{\mathfrak{F}}(\text{regarde Alice})]]^{M, w_1, g} = \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \right. \xrightarrow{1} \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \right. \xrightarrow{0} $$

Idem en (9) pour le GV **regarde Charles** (personne ne regarde CHARLES), et en (10) pour **regarde Dina** (seul BRUNO la regarde) :

$$ (9) \quad [[\tilde{\mathfrak{F}}(\text{regarde Charles})]]^{M, w_1, g} = \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \right. \xrightarrow{1} \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \right. \xrightarrow{0} $$
5.1 Tout est fonction (ou presque)

$$
(10) \quad \left[ \mathcal{F}(\text{regarde Dina}) \right]^{M, w_1, g} = \left[ \begin{array}{c} \text{ALICE} \\ \text{BRUNO} \\ \text{CHARLES} \\ \text{DINA} \end{array} \middle| \begin{array}{c} 1 \\ \text{空箭头} \\ \text{空箭头} \\ 0 \end{array} \right]
$$

Nous constatons donc que quand on fait varier le second argument du prédicat (i.e. le
complément d'objet du GV), on obtient à chaque fois une nouvelle fonction, différente ;
mais c'est toujours une fonction de { 0 ; 1 } $^{A}$. Nous commençons ainsi à avoir une vision
générale de la dénotation propre du prédicat **regarder** : en quelque sorte c'est une **série**
de fonctions. Et ce qui est important c'est que chaque fonction de la série est indexée par
un élément de $^{A}$. Autrement dit, ce que fait la dénotation du prédicat **regarder** en soi,
c'est, pour chaque objet y de $^{A}$, de nous répondre à la question « qui regarde y ? ». Et cela
peut se résumer au moyen d'une grande fonction, puisque la question à laquelle répond
**regarder** dépend de y ; c'est tout simplement la fonction y $\mapsto$ « qui regarde y ? » :

$$
(11) \quad \left[ \mathbf{regarder} \right]^{M, w, g} = \left[ \begin{array}{lclcl} \text{ALICE} & \rightarrow & \text{« qui regarde ALICE dans } w? \text{ »} & & \\ \text{BRUNO} & \rightarrow & \text{« qui regarde BRUNO dans } w? \text{ »} & & \\ \text{CHARLES} & \rightarrow & \text{« qui regarde CHARLES dans } w? \text{ »} & & \\ \text{DINA} & \rightarrow & \text{« qui regarde DINA dans } w? \text{ »} & & \end{array} \right]
$$

Maintenant, pour expliciter complètement cette fonction en reprenant les exemples (7)–
(10) dans $w_1$, cela nous donne ce qui est représenté dans la figure 5.3.

<figure><img src="image_34.png" /><figcaption>FIG. 5.3 : Un exemple de la dénotation fonctionnelle de regarder</figcaption></figure>

Par conséquent, la dénotation du prédicat binaire **regarder** est une fonction qui prend
un argument (en l'occurrence la dénotation du complément d'objet) et qui en résultat
nous donne une autre fonction. Cette seconde fonction à son tour prend elle aussi un
argument (la dénotation du sujet), et nous retourne alors une valeur de vérité. Ce qui se synthétise en (12) :

$$
\begin{align*}
(12) \quad \llbracket \text{regarder} \rrbracket^{M,w,g} &= F(w, \text{regarder}) \\
&= \mathcal{A} \longrightarrow \{0; 1\}^{\mathcal{A}} \\
&\xrightarrow{y} \left( x \longmapsto \begin{cases} 1 & \text{si x regarde y dans } w \\ 0 & \text{sinon} \end{cases} \right)
\end{align*}
$$

On voit que c'est une fonction qui va de $\mathcal{A}$ vers $\{0; 1\}^{\mathcal{A}}$ ; autrement dit, les prédicats binaires prennent donc leur dénotation dans l'ensemble$^7$ $(\{0; 1\}^{\mathcal{A}})^{\mathcal{A}}$. Et par cette formalisation, il devient donc possible de donner au prédicat (i.e. à sa dénotation) ses arguments un par un : le prédicat en soi dénote une fonction de $(\{0; 1\}^{\mathcal{A}})^{\mathcal{A}}$, et lorsqu'il est flanqué d'un seul argument, la dénotation de l'ensemble est encore définie, puisque c'est une fonction de $\{0; 1\}^{\mathcal{A}}$.

On remarquera que l'ordre dans lequel la fonction (12) prend ses arguments (d'abord y puis x) est l'inverse de celui dans lequel on accole les arguments derrière le prédicat **regarder** dans LO : on écrit **regarder(x, y)**, où x correspond au sujet et y au complément d'objet. Cette inversion est purement conventionnelle, et même en quelque sorte arbitraire. Nous aurions très bien pu définir la dénotation de **regarder** comme une fonction qui prend en argument la dénotation du sujet et qui renvoie une fonction qui, elle, prend en argument la dénotation du complément d'objet. Si on choisit habituellement<fnref n="8" /> d'inverser l'ordre des arguments, c'est pour des raisons qui s'expliquent dans ce que nous avons observé en §5.1.1 sur la manière dont un prédicat binaire (un verbe transitif) se combine avec ses arguments dans la structure syntaxique du français. Dans l'ordre de la composition syntaxique, le verbe rencontre d'abord son complément d'objet (et forme avec lui un constituant, GV), puis son sujet. Donc si l'on se donne les moyens de fournir au prédicat ses arguments un par un, il est préférable que le premier soit celui qui est le plus proche dans la structure syntaxique.

Une fois familiarisé avec cette convention, il est assez facile de voir comment la fonc-
tion de la figure 5.3 nous donne la dénotation dans w₁ de toute formule simple de la forme
**regarder**(*α*, *β*) (où *α* et *β* sont deux de nos quatre constantes). La méthode consiste à in-
terpréter, par exemple, **regarder**(*c*, *a*) comme une feuille de route qui nous indique quel
trajet suivre dans le réseau de flèches de la figure 5.3. On se positionne d'abord sur la
dénotation de **regarder**, i.e. à l'entrée du réseau sur la gauche. Puis on se place sur la
dénotation de *a*, **ALICE**; on suit la flèche qui part d'**ALICE**, et on arrive sur une fonction
(un sous-réseau de flèches). Là, on se place sur la dénotation de *c*, **CHARLES**, et on suit
la flèche, pour arriver finalement au résultat 1. Effectivement, selon notre modèle, dans
w₁, il est vrai que Charles regarde Alice.

<footnote n="7">⁷ Attention, ({0; 1}^A)^A n'est pas la même chose que {0; 1}^{A^A}. Car selon les conventions de notation mathématiques {0; 1}^{A^A} équivaut à {0; 1}^{(A^A)^A}, qui est lui aussi un ensemble de fonctions, mais complètement différentes.</footnote>

<footnote n="8">⁸ C'est une convention que l'on retrouve par exemple chez Montague (1973).</footnote>
### Exercice 5.1

En suivant la définition de la fonction en figure 5.3, calculez :

1. $\llbracket \text{regarder}(a, c) \rrbracket^{M, w_1, g}$

2. $\llbracket \text{regarder}(b, d) \rrbracket^{M, w_1, g}$

3. $\llbracket \text{regarder}(d, a) \rrbracket^{M, w_1, g}$

4. $\llbracket \text{regarder}(b, b) \rrbracket^{M, w_1, g}$

Pour les prédicats d'arité supérieure, le principe reste le même. Les prédicats ternaires (comme donner, envoyer) dénotent des fonctions de $((\{0; 1\}^A)^A)^A$, c'est-à-dire des fonctions qui prennent un individu de $\mathcal{A}$ en argument et qui retournent une fonction qui prend un individu en argument et retourne une fonction qui prend un individu en argument et (enfin !) retourne une valeur de vérité. De même, mutatis mutandis, pour les prédicats à 4 places, etc.

Cette façon de définir toute fonction à $n$ arguments comme un enchaînement de $n$ fonctions à un argument est très courante en mathématique. Elle porte le nom de *curry-fication* (ou *schönfinkelisation*<fnref n="9" />). En voici la définition mathématique précise :

### Définition 5.2 : Curryfication

Soit $A_1, A_2, \dots, A_n$ et $B, n+1$ ensembles non vides, et $f$ une fonction à $n$ arguments allant de $A_1 \times A_2 \times \dots \times A_n$ vers $B$ (donc $f \in B^{A_1 \times A_2 \times \dots \times A_n}$).

La version curryfiée de $f$ est la fonction $f^c$ de $((\dots (B^{A_n})^\dots)^{A_1})^{A_2}$ telle que si $f : \langle x_1, x_2, \dots, x_n \rangle \mapsto y$, alors $f^c : x_1 \mapsto (x_2 \mapsto (\dots \mapsto (x_n \mapsto y))\dots)$.

Autrement dit $f^c(x_1)(x_2)\dots(x_n) = f(x_1, x_2, \dots, x_n)$.

Les lecteurs attentifs auront remarqué que dans la définition 5.2, l'ordre des arguments n'est pas inversé entre $f$ et sa curryfiée $f^c$. C'est normal, car il s'agit là de la définition formelle générale. Notre convention d'inversion des arguments n'opère que dans LO, pour écrire de séquences prédicat-arguments. Et dans le modèle – là où sont les fonctions – nous ne manipulerons que des versions curryfiées.

## 5.2 Principes de base du λ-calcul

Nous venons de voir que, dorénavant, tous les prédicats dénotent des fonctions. Nous pouvons maintenant revenir à la syntaxe de LO. Souvenons-nous que l'enjeu est de pouvoir représenter dans LO des expressions non saturées. Le section précédente nous laisse deviner que ces expressions seront, sémantiquement, des fonctions qui ne possèdent pas tous leurs arguments. Mais ici, ce qui va nous occuper, c'est comment exprimer précisément cette idée d'incomplétude dans les écritures de LO ; autrement dit, finalement, comment représenter des éléments manquants, des trous dans les expressions du langage.

<footnote n="9">⁹ *Curryfication* (en anglais *currying*) est forgé sur le nom du mathématicien et logicien H. Curry ; le terme *schönfinkelisation*, inventé par Heim & Kratzer (1997), rend justice au mathématicien et logicien, moins connu, M. Schönfinkel, dont les travaux avaient précédé ceux de Curry dans le même domaine de la logique combinatoire.</footnote>
À cet effet, nous allons adopter la stratégie décisive de R. Montague, qui fut l'un des premiers à avoir l'idée d'appliquer le λ-CALCUL à la sémantique du langage naturel. Le λ-calcul est un système logique créé dans les années 1930 par A. Church, conçu pour formaliser très précisément la notion de fonction et toutes ses manipulations. Il a eu un impact fondamental en mathématiques, en logique ainsi qu'en programmation informatique, mais à la suite de Montague (et à la lumière de ce que nous avons vu dans la section précédente), il s'avère également un outil extrêmement efficace pour la sémantique formelle, en particulier pour élaborer un système d'analyse pleinement compositionnel.

Dans les sous-sections qui suivent, je présenterai les bases du λ-calcul, d'une manière assez simplifiée<fnref n="10" />, en insistant sur les aspects qui relient le formalisme à nos présentes préoccupations (à savoir une façon d'amender l'expressivité de LO pour le rendre opérationnel à tous les niveaux de la représentation syntaxique). Dans la section 5.3, nous redéfinirons fondamentalement et formellement la syntaxe et la sémantique de LO afin d'y intégrer proprement les apports du λ-calcul.

## 5.2.1 La λ-abstraction

### 5.2.1.1 Syntaxe de la λ-abstraction

Notre objectif est de pouvoir écrire dans LO des expressions non saturées, incomplètes. Le principe général est le suivant : les « trous » d'une expression non saturée seront représentés par des *variables*, et au début de l'expression nous *annoncerons* que ces variables correspondent à des trous. Cette annonce se fait au moyen de l'opérateur *λ* (la lettre grecque qui se prononce *lambda*) qui accompagne chacune de ces variables. Du point de vue notationnel, *λ* se comporte donc dans LO comme $∀, ∃$ et $1$ : c'est un lieuur une variable, qui se place en tête d'une expression bien formée.

Prenons tout de suite un exemple. La formule *dormir(x)* est une expression saturée, le prédicat a tous les arguments qu'il lui faut (en l'occurrence un seul, *x*). Pour la désaturer en disant que *x* représente en fait quelque chose qui manque, on écrira $\lambda x \, dormir(x)$. La notation $\lambda x$ peut ainsi se lire comme : « dans ce qui suit, *x* représente une place vide » ou « dans ce qui suit, il manque une valeur à la variable *x* ». On voit donc en quoi l'opérateur $\lambda$ effectue de la « désaturation » de formule ; il permet de faire *abstraction de la variable qu'il lie*<fnref n="11" />. C'est pourquoi $\lambda$ est couramment nommé *opérateur d'abstraction*, et l'opération qui consiste à préfixer une expression par une séquence $\lambda$-variable est ce qui se nomme la *$\lambda$-ABSTRACTION*. Il s'agit, pour nous, d'une nouvelle règle qui vient s'ajouter à la syntaxe de LO :

<footnote n="10">¹⁰ Et je ne doute pas que des logiciens pourraient trouver ma présentation scandaleusement simpliste et hétérodoxe, mais je choisis délibérément de privilégier une approche pédagogique qui s'inscrit dans la continuité du système formel décrit jusqu'ici.</footnote>

<footnote n="11">¹¹ Et on dira que la variable est alors *abstraite* (ou $\lambda$-*abstraite*) dans (ou de) l'expression.</footnote>
### Définition 5.3 : λ-abstraction

Si $\alpha$ est une expression bien formée de LO et si $v$ est une variable de LO, alors $\lambda v\alpha$ est une expression bien formée de LO.
Nous dirons que $\lambda v\alpha$ est un $\lambda$-TERME<fnref n="12" />.

Il est important de remarquer que la définition ne requiert pas que $\alpha$ soit une formule, mais simplement une *expression bien formée*. Jusqu'à présent, les seules expressions bien formées de LO que nous connaissions étaient les formules (et accessoirement les termes et les prédicats); mais maintenant nous en connaissions beaucoup d'autres puisque, selon la définition, la $\lambda$-abstraction produit également des expressions bien formées. Autrement dit, l'application de la règle peut s'itérer autant de fois qu'on le souhaite sur des $\lambda$-termes pour ajouter plusieurs $\lambda$ au début d'une expression.

Ainsi $\lambda y\lambda x \text{ regarder}(x, y)$ est une expression correcte de LO, car **regarder(x, y)** est une expression bien formée (une formule), et par $\lambda$-abstraction on peut former $\lambda x \text{ regarder}(x, y)$, qui est la formule de départ « sans » $x$ (mais avec $y$), et à partir de là, encore par $\lambda$-abstraction, on forme $\lambda y\lambda x \text{ regarder}(x, y)$, qui est le $\lambda$-terme précédent mais cette fois vidé également de $y$. Et comme la $\lambda$-abstraction s'applique sur n'importe quelle expression bien formée, on peut construire $\lambda x \text{ regarder}(x, b)$, ainsi que des $\lambda$-termes particulièrement intéressants comme $\lambda x \exists y [\text{oiseau}(y) \land \text{regarder}(x, y)]$. Ce dernier $\lambda$-terme correspond simplement à la formule $\exists y [\text{oiseau}(y) \land \text{regarder}(x, y)]$, mais sans valeur pour $x$ (ou privée de $x$), ce qui est ni plus ni moins la traduction du GV *regarde un oiseau*. On constate ainsi à quel point la quantité et la variété d'expressions bien formées que l'on peut construire dans LO augmentent par l'ajout de cette seule règle.

On peut également remarquer que, si $\lambda x \text{ dormir}(x)$ est, en quelque sorte, la formule **dormir(x)** sans le $x$, alors finalement ce $\lambda$-terme est la même chose que le prédicat **dormir** seul. Et c'est effectivement le cas<fnref n="13" />. De même, si $\lambda y\lambda x \text{ regarder}(x, y)$ est **regarder(x, y)** sans $x$ ni $y$, alors cela équivaut simplement à **regarder**. Est-ce à dire que la $\lambda$-abstraction est juste une manière inutilement compliquée d'écrire des choses qui existent déjà sous forme simple dans LO ? Les autres exemples vus ci-dessus nous prouvent bien que non : on peut composer des $\lambda$-termes pour former des expressions non saturées qui sont bien plus élaborées qu'une simple constante de prédicat. De plus, les $\lambda$ apportent une plus value informative dans les notations, en pouvant faire apparaître explicitement l'ari-té des prédicats. Quand on a seulement le prédicat **regarder**, on a besoin de connaissances supplémentaires pour savoir qu'il prend deux arguments, ce n'est pas écrit des-sus. En revanche, avec $\lambda y\lambda x \text{ regarder}(x, y)$ on voit immédiatement que le prédicat est

<footnote n="12">¹² On trouve souvent les variantes de notation suivantes pour les $\lambda$-termes : $\lambda v.\alpha$ ou $\lambda v\cdot\alpha$. Notons égale-ment que je me permets de faire ici un usage un peu hétérodoxe de l'appellation $\lambda$-terme : en $\lambda$-calcul classique, toute expression du langage est appelée $\lambda$-terme, qu'elle contienne ou non un symbole $\lambda$. Dans ces pages, pour plus de clarté, je préfère utiliser ce nom seulement pour désigner cette nouvelle catégorie d'expressions de LO.</footnote>

<footnote n="13">¹³ Il s'agit même d'un théorème du $\lambda$-calcul ; cf. §5.3.3.3.</footnote>
à deux arguments (même s'ils ne sont pas instanciés dans le $\lambda$-terme). Enfin, nous pou-
vons former $\lambda y\lambda x \ \mathbf{regarder}(x, y)$, mais il n'y a pas de raison de ne pas former également
$\lambda x\lambda y \ \mathbf{regarder}(x, y)$, qui est lui aussi la formule $\mathbf{regarder}(x, y)$ sans $x$ et $y$. Ces deux $\lambda$-
termes sont ils équivalents ? La réponse est non, car l'ordre des $\lambda$ est significatif. Pour s'en
convaincre, nous devons maintenant aborder la sémantique de la $\lambda$-abstraction, c'est-à-
dire la règle d'interprétation des $\lambda$-termes.

5.2.1.2 Sémantique de la $\lambda$-abstraction

Nous connaissons déjà un peu cette sémantique (cf. §5.1.2) : les $\lambda$-termes dénotent des fonctions. Rappelons qu'une fonction est un mécanisme qui produit un résultat quand on lui fournit un ou plusieurs arguments. Or précisément, il se trouve que les $\lambda$-termes détaillent explicitement ce type de mécanisme : les préfixes $\lambda$+variable indiquent les arguments de la fonction, et le reste ($\alpha$ dans la définition 5.3, que nous appellerons le *corps* de la fonction ou du $\lambda$-terme) décrit le résultat que renvoie la fonction. Ainsi $\lambda x \ \mathbf{dormir}(x)$ dénote la fonction qui, pour chaque valeur possible de $x$, renvoie la dénotation qu'a $\mathbf{dormir}(x)$ lorsque $x$ a cette valeur – ce qui, bien entendu, est exactement la même chose que la dénotation de $\mathbf{dormir}$ (cf. (4), p. 267). De même, $\lambda x \exists y[\mathbf{oiseau}(y) \wedge \mathbf{regarder}(x, y)]$ dénote la fonction qui renvoie la dénotation de la formule $\exists y[\mathbf{oiseau}(y) \wedge \mathbf{regarder}(x, y)]$ pour chaque valeur possible de $x$. Et lorsqu'un $\lambda$-terme comporte plusieurs $\lambda$, il dénote une fonction à plusieurs arguments, telle que nous en avons vue en §5.1.2.2, c'est-à-dire une fonction curryfiée. $\lambda y\lambda x \ \mathbf{regarder}(x, y)$ dénote la fonction qui, pour chaque valeur de $y$, renvoie la dénotation de $\lambda x \mathbf{regarder}(x, y)$ lorsque $y$ a cette valeur ; et ce résultat étant la dénotation d'un $\lambda$-terme, il est lui aussi une fonction qui, pour toute valeur de $x$, renvoie la dénotation de $\mathbf{regarder}(x, y)$ lorsque $x$ a cette valeur (et $y$ la valeur précédemment fixée). C'est exactement la définition de la dénotation de $\mathbf{regarder}$ donnée $\mathbf{supra}$ en (12). Mais ce n'est pas la même chose que la dénotation de $\lambda x\lambda y \ \mathbf{regarder}(x, y)$, car ce $\lambda$-terme dénote d'abord une fonction de $x$ qui retourne une fonction de $y$, alors que $\lambda y\lambda x \ \mathbf{regarder}(x, y)$ dénote d'abord une fonction de $y$ qui retourne une fonction de $x^{14}$.

Donc de manière générale, en reprenant la définition 5.3, on dira que $\lambda v\alpha$ dénote la
fonction qui, pour toute valeur possible de $v$, retourne la dénotation qu'a $\alpha$ lorsque $v$
a cette valeur. Et nous savons définir la dénotation de $\alpha$ pour une valeur donnée de $v$ :
c'est la dénotation de $\alpha$ calculée relativement à une assignation qui fixe la valeur de $v$ à
cette valeur donnée. Cela nous donne la règle d'interprétation des $\lambda$-termes :

Définition 5.4 : Interprétation des $\lambda$-termes

$[\lambda v\alpha]^M, w, g$ est la fonction $x \mapsto [\alpha]^M, w, g_{[x/v]}$, où $x$ est un élément de $\mathcal{A}$.

<footnote n="14">14 En « clair » : $\lambda y\lambda x \ \mathbf{regarder}(x, y)$ dénote la fonction qui pour tout regardé (potentiel) renvoie la fonction qui dit qui le regarde, et $\lambda x\lambda y \ \mathbf{regarder}(x, y)$ dénote la fonction qui pour tout regardeur (potentiel) renvoie la fonction qui dit qui il regarde.</footnote>
Cette sémantique nous montre que la λ-abstraction est, par vocation, une opération qui sert à fabriquer des fonctions à la chaîne dans LO<sup>15</sup>.

### 5.2.2 L'application fonctionnelle

C'est dans la nature des fonctions d'attendre qu'on leur fournisse un (ou plusieurs) argument(s). De même, dans LO, les λ-termes, étant des expressions non saturées, sont en demande de saturation, en attente d'être complétées. D'ailleurs, à cet égard, λx peut se lire aussi comme : « j'attends une valeur pour x afin d'interpréter ce qui suit » (cela peut être commode parfois pour décoder le sens d'un λ-terme un peu complexe). Il est donc du devoir de LO de se donner les moyens de satisfaire ces attentes, c'est-à-dire de donner des arguments aux λ-termes. Il s'agit en quelque sorte de l'opération inverse de la λ-abstraction, opération qui sature les expressions au lieu de les désaturer. C'est ce qu'on appelle l'APPLICATION FONCTIONNELLE.

#### 5.2.2.1 Syntaxe de l'application fonctionnelle dans LO

Dans la syntaxe de LO, l'application fonctionnelle joue le même rôle que la règle (Syn.1) que nous connaissons déjà (et à terme, nous allons même nous débarrasser de cette derrière, qui va devenir inutile). D'ailleurs elles se ressemblent beaucoup :

**Définition 5.5 : Notation de l'application fonctionnelle**

Si $\alpha$ est une expression qui dénote une fonction et si $\beta$ est un terme, alors pour APPLIQUER $\alpha$ à $\beta$, on écrit $[\alpha(\beta)]$. C'est une expression bien formée de LO.

L'écriture $[\alpha(\beta)]$ indique donc que l'on fournit $\beta$ comme argument à $\alpha$ (c'est ce que signifie « appliquer $\alpha$ à $\beta$ »). Par exemple, si l'on veut donner la constante $a$ en argument au $\lambda$-terme $\lambda x \ \mathit{dormir}(x)$, on écrit $[\lambda x \ \mathit{dormir}(x)(a)]$. Et il s'agit là d'une expression saturée (une formule) : $\lambda x$ dit que $x$ représente sémantiquement une place vide, mais de l'autre côté, l'écriture (a) dit que $a$ vient justement occuper cette place ; le trou est donc bouché.

Le point commun graphique entre la règle de la définition 5.5 et la règle (Syn.1) est que la donnée d'un argument (à un prédicat ou à une expression fonctionnelle) s'écrit au moyen de parenthèses. Mais il y a deux différences formelles non triviales : i) avec l'application fonctionnelle, on ajoute des crochets<sup>16</sup>, et ii) on ne fournit qu'un seul argument à la fois (ce qui est normal puisque, rappelons-nous, les prédicats et les λ-termes

<footnote n="15"><sup>15</sup> Ou, pour être plus rigoureux vis-à-vis de notre formalisme, il faudrait dire : qui sert à fabriquer des expressions de LO qui dénotent des fonctions.</footnote>

<footnote n="16"><sup>16</sup> Certes, dans la littérature, la grande majorité des écrits ne s'embarrasse pas de ces crochets, et note l'application fonctionnelle simplement par $\alpha(\beta)$. Mais nous verrons que dans quelques cas, cela n'est pas toujours très prudent ; voir en particulier l'exercice 5.2, p. 280.</footnote>
dénotent des fonctions *curryfiées*). Dans la syntaxe de LO, cela a plusieurs conséquences
qui méritent d'être observées attentivement.

D'abord, on a tout à fait le droit d'effectuer l'application fonctionnelle directement
sur un prédicat comme **dormir**, puisqu'il dénote une fonction. Appliqué à **a**, cela nous
donnera [*dormir(a)*], alors que (Syn.1) donne **dormir(a)**.

Ensuite, si l'on veut donner plusieurs arguments à un λ-terme (ou un prédicat), il faut
répéter l'application fonctionnelle autant de fois que nécessaire. Par exemple, l'appli-
cation [λyλx regarder(x, y)(b)] indique que b est donné comme premier argument au
λ-terme λyλx regarder(x, y) ; mais comme ce λ-terme attend aussi un second argument,
[λyλx regarder(x, y)(b)] dénote lui aussi une fonction ; on peut donc encore effectuer
une application fonctionnelle, ce qui donne, par exemple, [[λyλx regarder(x, y)(b)](a)].
C'est là que les crochets sont importants et utiles. Ils permettent de repérer, sans aucune
ambiguïté, quel argument est donné à quelle expression fonctionnelle. Lorsqu'une ap-
plication fonctionnelle est écrite dans LO encadrée de crochets, on sait que l'argument
est ce qui se trouve dans la paire de parenthèses située *juste avant* le crochet fermant,
et tout ce qui précède et qui commence *exactement après* le crochet ouvrant est ce qui
dénote la fonction. Et ainsi cela indique dans quel ordre un λ-terme (ou une expression
fonctionnelle) « consomme » ses arguments. Dans notre exemple, *a* est forcément le
deuxième argument fourni puisqu'on lui applique [λyλx regarder(x, y)(b)] qui contient
déjà *b* comme argument (cf. fig. 5.4).

<figure><img src="image_35.png" /><figcaption>FIG. 5.4 : Ordre des applications dans [[λyλx regarder(x, y)(b)](a)]</figcaption></figure>

De même, la définition 5.5 nous permet de créer [[regarder(b)](a)]. En revanche, si – comme je l’ai annoncé – nous nous débarrassons de la règle (Syn.1), alors nous ne pourrons carrément plus écrire **regarder(a, b)** ou **regarder(b, a)**, etc. Évidemment, si nous ne disposons que de la définition 5.5, nous allons très rapidement obtenir des écritures surchargées, lourdes et peu agréables à manipuler, comme par exemple [[**homme(c)**] ∧ [[**regarder(a)**](c)]]]. Heureusement, il est courant de s’autoriser quelques simplifications graphiques.

D'abord, lorsque cela ne produit aucune ambiguïté possible, on supprimera les crochets générés par l'application fonctionnelle (ainsi que ceux qui viennent des règles de (Syn.4)<fnref n="17" />). Par exemple, on préférera souvent écrire **homme(c)** ∧ **regarder(a)(c)**. Mais attention : il s'agit d'être très vigilant et de bien s'assurer que la suppression de crochets est sémantiquement inoffensive ; il n'est pas toujours si évident de repérer au premier coup d'œil les crochets dispensables (voir à cet effet l'exercice 5.3, p. 280).

<footnote n="17">17 Les règles qui introduisent les connecteurs binaires.</footnote>
Ensuite, la seconde simplification d'écriture nous autorise à revenir aux notations du
style de (Syn.1), en regroupant les arguments sous forme de liste entre une seule paire
de parenthèses. Et c'est précisément ici qu'entre en jeu la convention d'inversion des
arguments que nous avons vue en §5.1.2.2. La voici dans sa formulation explicite<fnref n="18" /> :

**Convention de notation 5.2 : Règle de suppression des crochets**

Dans LO, on s'autorisera, quand cela sera possible et utile, à simplifier l'écriture
[[α(β)](γ)] en α(γ, β) (ou seulement [α(γ, β)] si c'est nécessaire), et plus généra-
lement [[... [[α(β₁)][β₂]] ... ](βₙ)] en α(βₙ, ..., β₂, β₁) (ou [α(βₙ, ..., β₂, β₁)]).

Ainsi nous pourrons reformuler [[regarder(b)](a)] en regarder(a, b). Cette règle a
donc trois effets : supprimer les crochets, regrouper les arguments successifs au sein
d'une seule paire de parenthèses, et inverser l'ordre des arguments. Par conséquent,
l'écriture de base de l'application fonctionnelle (avec les crochets) nous rappelle dans
LO que les fonctions du modèle sont curryfiées, et l'écriture simplifiée fait le raccord
avec la syntaxe plus traditionnelle de la règle (Syn.1). Et cela va même encore plus loin,
puisque maintenant on peut aisément constater que (Syn.1) devient redondante (et donc
inutile) avec les effets conjugués de la définition 5.5 et de la convention 5.2. Par exemple,
(13) montre comment composer complètement [[λyλx regarder(x, y)(b)](a)] en utilisant
uniquement les règles présentées dans ce chapitre :

<table>
  <tr>
    <td>(13)</td>
    <td>1. <b>regarder</b></td>
    <td>prédicat d'arité 2</td>
  </tr>
  <tr>
    <td></td>
    <td>2. [<b>regarder</b>(y)]</td>
    <td>application fonctionnelle sur y</td>
  </tr>
  <tr>
    <td></td>
    <td>3. [[<b>regarder</b>(y)](x)]</td>
    <td>application fonctionnelle sur x</td>
  </tr>
  <tr>
    <td></td>
    <td>4. <b>regarder</b>(x, y)</td>
    <td>suppression des crochets</td>
  </tr>
  <tr>
    <td></td>
    <td>5. λx <b>regarder</b>(x, y)</td>
    <td>λ-abstraction sur x</td>
  </tr>
  <tr>
    <td></td>
    <td>6. λyλx <b>regarder</b>(x, y)</td>
    <td>λ-abstraction sur y</td>
  </tr>
  <tr>
    <td></td>
    <td>7. [λyλx <b>regarder</b>(x, y)(b)]</td>
    <td>application fonctionnelle sur b</td>
  </tr>
  <tr>
    <td></td>
    <td>8. [[λyλx <b>regarder</b>(x, y)(b)](a)]<sup>19</sup></td>
    <td>application fonctionnelle sur a</td>
  </tr>
</table>

Il est important de noter que selon l'ordre dans lequel on effectue des λ-abstractions et des applications fonctionnelles, on obtiendra des expressions non équivalentes. Et dans certains cas, les crochets seront justement placés différemment. Par exemple, quand on a construit [[regarder(y)](x)], on peut d'abord λ-abstraire y, puis x (à l'inverse de (13)), ce qui donne λxλy[[regarder(y)](x)] (simplifiable en λxλy regarder(x, y)) :

<table>
  <tr>
    <td>(14)</td>
    <td>1. [regarder(y)]</td>
    <td>application fonctionnelle sur y</td>
  </tr>
  <tr>
    <td></td>
    <td>2. [[regarder(y)](x)]</td>
    <td>application fonctionnelle sur x</td>
  </tr>
</table>

<footnote n="18">¹⁸ En toute rigueur, cette règle de simplification ne fait pas strictement partie de la syntaxe de LO. C'est, disons, un cadeau que nous nous faisons afin d'obtenir, après coup, des écritures plus « conviviales ».</footnote>

<footnote n="19">¹⁹ On pourrait même continuer et simplifier encore en λyλx regarder(x, y)(a, b), mais là, pour le coup, je ne le recommande pas du tout ! Nous allons voir qu'il y d'autres façons de poursuivre la simplification.</footnote>
3. $\lambda y[[\text{regarder}(y)](x)]$ $\lambda$-abstraction sur $y$

4. $\lambda x\lambda y[[\text{regarder}(y)](x)]$ $\lambda$-abstraction sur $x$

Mais on peut procéder dans un ordre différent. Après avoir formé $[\text{regarder}(y)]$, on peut faire la $\lambda$-abstraction de $y$, puis appliquer cela à $x$, et enfin $\lambda$-abstraire $x$ :

(15) 1. $[\text{regarder}(y)]$ application fonctionnelle sur $y$

2. $\lambda y[\text{regarder}(y)]$ $\lambda$-abstraction sur $y$

3. $[\lambda y[\text{regarder}(y)](x)]$ application fonctionnelle sur $x$

4. $\lambda x[\lambda y[\text{regarder}(y)](x)]$ $\lambda$-abstraction sur $x$

Les $\lambda$-termes (14-4) et (15-4) ne sont pas équivalents. D'abord (15-4) n'est pas simplifiable par la convention 5.2²⁰. Ensuite (14-4) est relativement simple, il indique explicitement qu'il attend deux arguments, d'abord $x$ puis $y$. Ce n'est pas exactement ce qui se passe dans (15). En (15-2), on désature la position $y$ de $[\text{regarder}(y)]$, et en (15-3), on fournit $x$, pour venir saturer cette position. Autrement dit $x$ joue le rôle de $y$. Et (15-4) indique qu'il manque une valeur pour $x$. Par conséquent, si, par application fonctionnelle, on fournit un argument à (15-4), par exemple $a$, cet argument viendra jouer le rôle de $x$ et aussi de $y$ (puisque $x$ joue le rôle de $y$). Alors que si on applique (14-4) à $a$, cet argument viendra jouer le rôle de $x$ seulement, et $y$ restera désaturé.

### Exercice 5.2 (Désambiguisation d'une expression sans crochet)

En partant de l'expression (mal formée) $\lambda x\lambda y\alpha(\beta)(\gamma)$, et en considérant que $\beta$ et $\gamma$ y sont des arguments fournis par application fonctionnelle, donnez toutes les manières possibles de réécrire correctement l'expression en suivant notre règle d'écriture de la définition 5.5. Vous supposerez notamment que $\alpha$ en soi peut dénoter une fonction (de diverse arité).

### Exercice 5.3 (Suppression des crochets)

Dans les formules suivantes, sachant que *aimer* est un prédicat à deux arguments, supprimez les crochets à chaque fois que c'est possible, en appliquant la règle de simplification.

1. $[[\text{aimer}(x)](y)]$ 5. $[^{\text{aimer}(x)}(y)]$

2. $\lambda x[[\text{aimer}(x)](y)]$ 6. $[^{[\text{aimer}(x)](y)}]$

3. $[\lambda x[\text{aimer}(x)](y)]$ 7. $[\lambda x[[\text{aimer}(y)](x)](z)]$

4. $\diamond[[\text{aimer}(x)](y)]$ 8. $\lambda x[\lambda y[\text{aimer}(y)](x)]$

### Exercice 5.4 (Variante de notation)

La convention de notation présentée ici pour l'application fonctionnelle, $[\alpha(\beta)]$, n'est pas universelle, mais on la retrouve chez certains auteurs, par exemple Gamut (1991b)<fnref n="21" />. Je choisis de l'utiliser dans cet ouvrage car elle permet de repérer assez facilement quelle expression est l'argument de quelle fonction, et en particulier quel argument vient saturer quelle variable $\lambda$-abstraita. Cependant, on trouve très souvent dans la littérature la règle d'application fonctionnelle directement formulée en $\alpha(\beta)$. Dans ce cas, les auteurs les plus prudents, comme par exemple Chierchia & McConnell-Ginet (1990) et Partee,

<footnote n="20">²⁰ Car la règle de suppression des crochets s'applique sur des expressions qui commencent par une séquence ne comportant *que* des crochets ouvrants ([[, [[, etc.), rien ne doit s'intercaler entre deux crochets.</footnote>

<footnote n="21">²¹ Sauf que Gamut (1991b) utilise des parenthèses à la place de nos crochets : $(\alpha(\beta))$.</footnote>
ter Meulen & Wall (1990), prennent alors soin de définir la règle de λ-abstraction sous la forme de $\lambda v[\alpha]^{22}$.

1. Réécrivez les expressions de l'exercice 5.3 en utilisant cette variante de notation.

2. Quel problème cela pose-t-il ? Comment devrait-on encore modifier la syntaxe de LO pour éviter ce genre de problème ?

### 5.2.2.2 Interprétation de l'application fonctionnelle

Ayant introduit l'application fonctionnelle dans la syntaxe de LO, nous devons, comme d'habitude, aussitôt définir sa règle d'interprétation sémantique. Alors là, c'est très simple : l'interprétation de l'application fonctionnelle, c'est... l'application fonctionnelle. Mais il s'agit à présent de l'application fonctionnelle opérationnelle, la réelle application fonctionnelle$^{23}$, cette opération mathématique, présente dans le modèle, qui non seulement réunit une fonction et un argument, mais aussi – et surtout – livre le résultat que la fonction assigne à cet argument (par un calcul ou simplement un système de correspondances). C'est ce que nous avons utilisé en §5.1.2, quand nous avons, par exemple, calculé la valeur de $[[dormir]]^{M,w_1,g}(ALICE)$ (p. 268 ; cf. aussi l'exercice 5.1, p. 272).

**Définition 5.6 : Interprétation de l'application fonctionnelle**

$$[[\alpha(\beta)]]^{M, w, g} = [[\alpha]]^{M, w, g}([eta]]^{M, w, g})$$

La règle dit simplement que la dénotation de l'application $[\alpha(\beta)]$ est l'application de la dénotation de $\alpha$ à la dénotation de $\beta$. Quand on regarde l'application fonctionnelle dans le modèle, $[[\alpha]]^{M, w, g}([eta]]^{M, w, g})$, on voit qu'elle ressemble fort à ce que l'on écrit dans LO, $[\alpha(\beta)]$ ; mais il faut toujours bien garder à l'esprit que l'écriture $[[\alpha]]^{M, w, g}([eta]]^{M, w, g})$ représente le résultat de l'application de la dénotation de $\alpha$ à la dénotation de $\beta$. Et c'est bien ce que nous avons vu en §5.1.2, en constatant que $[[dormir]]^{M,w_1,g}(ALICE)$ est concrètement la même chose que la valeur 1 (étant donné comment nous avons défini les dénotations dans $w_1$) ; de même que, concrètement, $[[regarder]]^{M,w_1,g}(ALICE)$ est la fonction décrite en (8) (p. 270).

Cette règle sémantique va, bien sûr, remplacer les règles (Sém.1) (cf. pp. 79, 120) qui interprétaient les formules atomiques. Mais elle se présente différemment. Les règles (Sém.1) donnaient explicitement des conditions de vérité : elles disaient dans quels cas on obtenait la valeur 1 pour la dénotation d'une formule (et on savait que la valeur serait 0 dans les autres cas). Ici, au lieu de nous proposer une valeur, la règle nous donne directement l'opération qui nous permet de la calculer. Et c'est beaucoup plus performant car, comme on la vu, le résultat peut être autre chose qu'une valeur de vérité, à savoir une fonction.

<footnote>$^{22}$ Partee, ter Meulen & Wall (1990) utilisent des parenthèses à la place des crochets : $\lambda v(\alpha)$.</footnote>

<footnote>$^{23}$ Car la définition 5.5 ne définit qu'une notation : la façon d'écrire l'application fonctionnelle dans notre langage LO.</footnote>
## 5 λ-calcul et théorie des types

En guise d'illustration, regardons ce qui se passe en particulier si l'expression fonctionnelle $\alpha$ est un $\lambda$-terme, i.e. si $\alpha = \lambda v\gamma$. Supposons d'abord que $[[\beta]]^{M, w, g} = \mathbf{B}$. Alors, d'après notre définition 5.6, nous avons $[[\lambda v\gamma(\beta)]]^{M, w, g} = [[\lambda v\gamma]]^{M, w, g}([[[\beta]]^{M, w, g}]) = [[\lambda v\gamma]]^{M, w, g}(\mathbf{B})$. Nous savons aussi que $[[\lambda v\gamma]]^{M, w, g}$ est la fonction qui à tout x signe la valeur $[[\gamma]]^{M, w, g[x/\nu]}$, selon la définition 5.4. Et donc, lorsque c'est $\mathbf{B}$ que l'on donne en argument à cette fonction, le résultat obtenu est $[[\gamma]]^{M, w, g[\mathbf{B}/\nu]}$. Autrement dit, $[[\lambda v\gamma]]^{M, w, g}(\mathbf{B}) = [[\gamma]]^{M, w, g[\mathbf{B}/\nu]}$. C'est bon à savoir.

### Théorème 5.1

$$ \text{Si } [[\beta]]^{M, w, g} = \mathbf{B}, \text{ alors } [[\lambda v\gamma(\beta)]]^{M, w, g} = [[\gamma]]^{M, w, g[\mathbf{B}/\nu]}. $$

Pour terminer, l'exercice suivant reprend les exemples (14) et (15) en démontrant précisément que les deux termes n'ont pas le même sens.

### Exercice 5.5

Détaillez pas à pas le calcul des valeurs suivantes en utilisant successivement les règles des définitions 5.4 et 5.6 (ainsi que le théorème 5.1). On considérera que $w_1$ est le monde décrit dans la §5.1.2 (cf. la figure 5.3, p. 271).

1. $[[\lambda x\lambda y[[\text{regarder}(y)](x)]]]^{M, w_1, g}$

2. $[[\lambda x[\lambda y[\text{regarder}(y)](x)]]]^{M, w_1, g}$

### 5.2.2.3 La colle universelle

Le $\lambda$-calcul augmente considérablement l'expressivité de LO en permettant d'affecter une sémantique fonctionnelle à certaines<sup>24</sup> expressions du français, via leur traduction par des $\lambda$-termes. Cela a une conséquence immédiate et fondamentale sur le traitement de la compositionnalité dans notre système. En fait, c'est quelque chose que nous avons déjà vu en §5.1.2 : certains constituants des phrases correspondent à des expressions non saturées sémantiquement, i.e. des fonctions, et ils se saturent au fur et à mesure en rencontrant d'autres constituants dans l'arbre syntaxique qui jouent précisément le rôle d'arguments de ces fonctions. Autrement dit, la composition sémantique se réalise via l'application fonctionnelle. Et il convient même d'insister ici en disant que, selon la proposition de Montague, véritablement toute composition sémantique s'effectue de cette façon<sup>25</sup>. Cette idée de gérer la compositionnalité au moyen d'un unique mécanisme sémantique repose donc sur le présupposé que lorsqu'un constituant (syntaxique) se décompose en deux<sup>26</sup> sous-constituants, forcément l'un des deux dénote une fonction et

<footnote n="24"><sup>24</sup> Et nous verrons, à terme, que quasiment toutes les expressions interprétables du français peuvent recevoir une sémantique fonctionnelle.</footnote>

<footnote n="25"><sup>25</sup> Même si, plus tard on s'est aperçu que les choses n'étaient peut-être pas aussi simple et que d'autres modes de composition pouvaient s'avérer utiles, voire nécessaires. Pour autant nous pouvons estimer que l'application fonctionnelle reste l'opération centrale, parce que la plus fréquente.</footnote>

<footnote n="26"><sup>26</sup> Nous verrons que cela fonctionne également pour plus de deux sous-constituants directs.</footnote>
l'autre dénote un argument de cette fonction. C'est ce qu'illustre la figure 5.5, en montrant comment, dans un arbre syntaxique décoré de traductions sémantique, le sens des sous-constituants remonte au niveau du nœud supérieur.

<figure><img src="image_36.png" /><figcaption>FIG. 5.5 : Schémas de composition sémantique dans un sous-arbre syntaxique</figcaption></figure>

La figure montre deux schémas possibles, selon que le nœud inférieur qui dénote la fonction est celui de gauche (Y) ou de droite (Z). Et c'est la grammaire de la langue qui nous donne cette information. Par exemple, si nous nous situons au niveau d'un GV qui se décompose en un V transitif et un GN (objet), alors nous savons que la fonction est dénotée par le V (et le GN correspond à l'argument) – nous le savons car, bien entendu, c'est dans la nature d'un verbe d'être sémantiquement un prédicat non saturé. Et si nous nous situons au niveau d'une phrase P se décomposant en un GN sujet et un GV, alors c'est le GV qui fournit la fonction.

À partir de là, nous sommes en mesure de construire complètement et pas à pas la traduction sémantique de notre phrase de départ (1a) en affectant à chaque constituant de l'arbre une expression interprétable de LO :

<figure><img src="image_37.png" /></figure>

La traduction du V se combine par application fonctionnelle avec celle du GN objet pour donner la traduction du GV, puis celle-ci est appliquée à la traduction du GN sujet pour donner la traduction de la phrase. D'accord, le résultat obtenu ne ressemble pas vraiment à ce que l'on avait prévu en (1b). Mais remarquons d'abord qu'alternative-ment, nous aurions eu tout à fait le droit d'utiliser simplement la constante de prédicat **regarder** pour traduire le verbe *regarde*, puisque nous avons vu qu'elle est équivalente au $\lambda$-terme $\lambda y\lambda x \text{ regarder}(x, y)$. Dans ce cas, toujours par l'application fonctionnelle, la tra-duction du GV aurait été [*regarder(b)*], et celle de la phrase [*regarder(b)](a). Et ensuite notre règle de suppression des crochets nous aurait permis de simplifier en **regarder(a, b)**, comme attendu. *Cependant*, la représentation [*$\lambda y\lambda x \text{ regarder}(x, y)(b)$](a) que nous ob-
tenons en (16) est parfaitement correcte et adéquate pour traduire le sens de la phrase : c'est une formule et nous savons qu'elle est équivalente à **regarder**(a, b) ; il n'y a pas de raison de la rejeter sous prétexte qu'elle est plus longue ou plus complexe. Et puisque dorénavant nous adoptons explicitement les $\lambda$-termes pour formaliser les prédicats dans LO, c'est donc ce genre de représentation que nous construirons pour traduire compositionnellement le sens des phrases.

Heureusement, nous allons voir qu'il existe tout de même des moyens de revenir à des notations plus simples et plus traditionnelles tout en utilisant le $\lambda$-calcul.

### 5.2.3 La $\beta$-réduction

Le $\lambda$-calcul comprend quelques règles de simplification que l'on appelle des réductions ou des conversions et qui sont regroupées sous le terme général de $\lambda$-conversion. Celle qui nous sera la plus utile s'appelle la $\beta$-RÉDUCTION. Voici sa définition :

**Définition 5.7 : $\beta$-réduction**

Dans une expression de LO qui contient une application fonctionnelle de la forme $[\lambda v\alpha(\gamma)]$, on peut remplacer cette application par $[\gamma/v]\alpha$.

Effectuer la $\beta$-RÉDUCTION sur $[\lambda v\alpha(\gamma)]$ consiste simplement à effectuer cette substitution.

Rappelons d'abord que l'écriture $[\gamma/v]\alpha$ représente la variante de l'expression $\alpha$ dans laquelle on a remplacé toutes les occurrences libres (cf. déf. 2.15,p. 93) de la variable $v$ par l'expression $\gamma$. La règle de la $\beta$-réduction ne fait qu'incarner dans LO une idée que nous avons déjà rencontrée. En effet, lorsque, par application fonctionnelle, on donne un argument $\gamma$ à un $\lambda$-terme $\lambda v\alpha$, $\gamma$ vient saturer la variable $v$ du $\lambda$-terme, c'est-à-dire que $\gamma$ joue le rôle de $v$ à l'intérieur de $\alpha$ ; et donc dans ce cas, $v$ ne représente plus une place vide dans $\alpha$ ($v$ disparaît de $\alpha$) et $\lambda v$ n'a plus de raison d'être.

En pratique la $\beta$-réduction est une simple opération graphique qui fait le ménage dans une application fonctionnelle ; les étapes de l'opération sont les suivantes. Pour $\beta$-réduire $[\lambda v\alpha(\gamma)]$ :

1. on supprime la paire de crochets de l'application fonctionnelle ;

2. on supprime le $\lambda v$ ;

3. on supprime l'argument donné ($\gamma$) avec ses parenthèses (mais on garde $\gamma$ en mémoire) ;

4. dans ce qui reste, on remplace toutes les occurrences libres de la variable $v$ par $\gamma$.

La $\beta$-réduction va beaucoup nous faciliter la vie, mais il faut bien prendre garde à ne pas commettre d'erreur dans son exécution. Il est primordial de reconnaître exactement le schéma d'application fonctionnelle suivant : $[\lambda v...(\quad)]$ (c'est-à-dire un $\lambda$ qui suit immédiatement un crochet ouvrant et un argument entre parenthèses qui précède immédiatement le crochet fermant).
<figure><img src="image_38.png" /><figcaption>FIG. 5.6 : La β-réduction en image</figcaption></figure>

Pour illustrer l'opération, revenons à l'arbre (16), qui nous donnait comme traduction
finale de la phrase [[λyλx regarder(x, y)(b)](a)]. Voici comment la simplifier, pas à pas,
par β-réduction :

(17) a. [[λyλx regarder(x, y)(b)](a)] ici nous reconnaissons que nous pouvons réduire l'application fonctionnelle qui se trouve entre dans la paire de crochets la plus intérieure (de λy jusqu'à (b))

b. on supprime ces crochets : [λyλx regarder(x, y)(b)(a)]

c. on supprime λy : [λx regarder(x, y)(b)(a)]

d. on supprime (b) : [λx regarder(x, y)(a)]

e. on remplace y par b : [λx regarder(x, b)(a)]

f. nous obtenons un nouveau schéma simplifiable [λx regarder(x, b)(a)], nous pouvons donc recommencer :

g. λx regarder(x, b)(a)

h. regarder(x, b)(a)

i. regarder(a, b)

Bien entendu, dans l'arbre (16), nous pouvions tout de suite (et nous avons intérêt
à le faire) simplifier le GV [λyλx regarder(x, y)(b)] en λx regarder(x, b). Ainsi P au-
rait directement reçu la traduction [λx regarder(x, b)(a)], simplifié comme ci-dessus en
regarder(a, b).

Exercice 5.6

Soit le prédicat **présenter** à 3 arguments (**présenter**(*x*, *y*, *z*) signifie « *x* présente *y* à *z* »).
Effectuez toutes les β-réductions dans les expressions suivantes :

1. [[[λzλyλx présenter(x, y, z)(a)](b)](c)]

2. [[λz[λyλx présenter(x, y, z)(a)](b)](c)]

3. [λz[[λyλx présenter(x, y, z)(a)](b)](c)]

4. [λz[λy[λx présenter(x, y, z)(a)](b)](c)]

La β-réduction repose sur l'équivalence sémantique présentée dans la proposition 5.1 ci-dessous. Il ne s'agit que d'une proposition car nous allons voir qu'en fait, cette équivalence n'en est pas exactement une, c'est-à-dire qu'il existe des cas exceptionnels où elle n'est pas valide. Mais contentons-nous de cette première approximation pour le moment.
**Proposition 5.1**

Quels que soient le modèle $\mathcal{M}$, le monde $w$ et l'assignation $g$ :
$$ [[\lambda v\alpha(\gamma)]]^{\mathcal{M}, w, g} = [[\gamma/v]\alpha]^{\mathcal{M}, w, g}. $$

La « démonstration » de cette proposition peut se présenter ainsi : $[[\lambda v\alpha]]^{\mathcal{M}, w, g}$ est la fonction qui à chaque objet $x$ du domaine associe $[[\alpha]]^{\mathcal{M}, w, g[x/\upsilon]}$. Par conséquent, si $[[\gamma]]^{\mathcal{M}, w, g} = c$, alors $[[[\lambda v\alpha(\gamma)]]]]^{\mathcal{M}, w, g} = [[\alpha]]^{\mathcal{M}, w, g[c/\upsilon]}$. Ainsi toutes les occurrences libres de $v$ dans $\alpha$ seront interprétées relativement à $g[c/\upsilon]$. Autrement dit, pour toute occurrence libre de $v$ dans $\alpha$ sa valeur sémantique est $[[\upsilon]]^{\mathcal{M}, w, g[c/\upsilon]}$, c'est-à-dire $g[c/\upsilon](v)$, c'est-à-dire c, c'est-à-dire $[[\gamma]]^{\mathcal{M}, w, g}$. Donc ce que cela montre c'est que $[\lambda v\alpha(\gamma)]$ s'interprète comme $\alpha$ lorsque ses occurrences libres de $v$ ont la même dénotation que $\gamma$ ; ce qui revient à interpréter $\alpha$ avec $\gamma$ à la place des occurrences libres de $v$ (i.e. $[\gamma/v]\alpha$).

Pourquoi nous limitons-nous aux occurrences libres de $v$ ? Parce que si $\alpha$ contient des occurrences liées de $v$, c'est qu'elles sont liées par soit $\exists v$, soit $\forall v$, soit $\nu v$, soit $\lambda v$. Or les règles sémantiques correspondant à ces lieurs font intervenir une variante de la fonction d'assignation courante en changeant la valeur de $v$. Par exemple, si $\alpha$ contient $\exists v\varphi$, alors $\varphi$ et les occurrences de $v$ qu'elle contient seront interprétées par rapport à $g[c/v]_{[\upsilon]/\nu}$, où $\nu$ est un certain individu du domaine. Et $g[c/v]_{[\upsilon]/\nu}(v) = \nu$. Or le problème de la démonstration ci-dessus, c'est qu'en s'occupant seulement des variables libres (comme il se doit), elle oublie un cas de figure qui est précisément là où l'équivalence proposée ne tient plus (et où donc la $\beta$-réduction n'est pas permise).

Pour nous faire une idée de ces cas de figures, regardons l'exemple présenté dans l'exercice suivant. Prenez le temps d'y réfléchir, les réponses sont données immédiate-ment après.

**Exercice 5.7 (Convention sur les noms de variables)**

Par rapport à un modèle $\mathcal{M}$, un monde $w$ et une assignation $g$ quelconques :

1. Que dénote $\lambda x\exists y \mathbf{regarder}(x, y)$ ?

2. Que dénote $\lambda x\exists u \mathbf{regarder}(x, u)$ ?

3. Que dénote $[\lambda x\exists y \mathbf{regarder}(x, y)(z)]$ ?

4. Effectuez la $\beta$-réduction dans l'expression précédente.

5. Tout va bien ?

6. Que dénote $[\lambda x\exists y \mathbf{regarder}(x, y)(y)]$ ?

7. Effectuez la $\beta$-réduction dans l'expression précédente.

8. Tout va bien ?

1. Que vaut $[[\lambda x\exists y \mathbf{regarder}(x, y)]]^{\mathcal{M}, w, g}$ ? Et bien, c'est la fonction qui pour toute valeur de $x$ nous renvoie la dénotation de $\exists y \mathbf{regarder}(x, y)$ par rapport à $\mathcal{M}$ et $w$. Autrement dit, c'est la fonction qui retourne 1 ssi (la dénotation de) l'argument qu'on lui donne regarde quelqu'un (ou quelque chose) dans $w$. Et en termes en-
semblistes, on dira simplement qu'il s'agit de l'ensemble de tous les individus qui regardent quelqu'un dans w.

2. $\lambda x \exists u \text{ regarder}(x, u)$ dénote exactement la même chose, car ici le nom de la variable liée par $\exists$ ($y$ ou $u$) n'a pas d'importance.

3. Par conséquent $[\lambda x \exists y \text{ regarder}(x, y)(z)]$ est vrai par rapport à $M$, $w$ et $g$ ssi la dénotation de $z$ (par rapport à $g$) est un individu qui regarde quelqu'un.

4. C'est bien confirmé par la $\beta$-réduction qui donne $\exists y \text{ regarder}(z, y)$.

5. Donc oui, tout va bien : la $\beta$-réduction nous donne le résultat attendu.

6. Et évidemment ce que nous venons de voir vaut pour n'importe quel argument donné à $\lambda x \exists y \text{ regarder}(x, y)$, et notamment pour $y : [\lambda x \exists y \text{ regarder}(x, y)(y)]$ est vrai par rapport à $M$, $w$ et $g$ ssi la dénotation de $y$ est un individu qui regarde quelqu'un.

7. Mais ici la $\beta$-réduction va nous donner $\exists y \text{ regarder}(y, y)$, formule qui signifie qu'il existe quelqu'un qui se regarde lui-même.

8. Ce n'est bien sûr pas le sens de la formule originale de 6, donc, non, tout ne va pas bien : la $\beta$-réduction a causé une erreur.

D'où vient cette erreur ? Que s'est-il passé entre les étapes 3 et 6 ? La cause du problème est la suivante : d'une part, l'argument donné au $\lambda$-terme dans $[\lambda x \exists y \text{ regarder}(x, y)(y)]$ contient une variable libre – en l'occurrence, il se réduit même entièrement à cette variable, $y^{27}$ ; et d'autre part, cette même variable, $y$, figure en tant que variable liée (par $\exists y$) dans le $\lambda$-terme. Donc si nous effectuons la $\beta$-réduction, alors le $y$ argument, qui est libre, va prendre la place de $x$, et se retrouver ainsi lié par $\exists y$. Mais nous ne devons pas faire cela, car sinon ce $y$ changera de rôle dans la formule, il n'aurait plus la même interprétation – précisément parce que dans la portée $\exists y, y$ n'est pas interprété par la même assignation qu'à l'extérieur de sa portée. Autrement dit, une variable qui est libre dans l'argument d'un $\lambda$-terme doit toujours rester libre. C'est une contrainte importante pour la $\beta$-réduction, elle est explicitée dans le théorème suivant.

### Théorème 5.2 : Contrainte sur la $\beta$-réduction

Soit $[\alpha(\gamma)]$ une application fonctionnelle. Une variable libre dans $\gamma$ ne doit pas se retrouver liée dans $\alpha$ après $\beta$-réduction.

Cette contrainte nous interdit donc de faire la $\beta$-réduction de 7 dans l'exercice. C'est embêtant, mais la situation n'est pas désespérée, car il y a un moyen très simple de contourner le problème. Puisque dans le $\lambda$-terme, $y$ est liée, nous pouvons sans aucun risque remplacer, à cet endroit, $y$ par une autre variable : $\lambda x \exists y \text{ regarder}(x, y)$ est complètement équivalent à $\lambda x \exists u \text{ regarder}(x, u)$. À ce moment-là, il n'y a plus de collision possible entre l'argument $y$ libre et une variable liée dans le $\lambda$-terme :

<footnote n="27">27 En effet, dans $[\lambda x \exists y \text{ regarder}(x, y)(y)]$ le dernier $y$ est libre, car rappelons-le, la portée de $\exists y$ est simplement regarder(x, y), conformément à la définition de la portée que nous avons vu au chapitre 2.</footnote>
[$\lambda x \exists u \mathbf{regarder}(x, u)(y)$] peut se $\beta$-réduire en $\exists u \mathbf{regarder}(y, u)$, qui est bien le résultat correct, prévu dans l'exercice en 6.

Nous devrons donc toujours prendre la précaution de renommer les variables liées (par $\exists$, $\forall$, $1$ et $\lambda$) dans un $\lambda$-terme lorsque ces variables apparaissent ailleurs dans l'expression de LO que l'on construit.

**Convention de notation 5.3**

Si la variable $v$ est libre dans $\gamma$ et liée dans $\alpha$, alors on remplacera toujours [$\alpha(\gamma)$] par [$\alpha'(\gamma)$] où $\alpha'$ est l'expression $\alpha$ dans laquelle on a renommé toutes les occurrences liées de $v$ par une nouvelle variable.

Nous verrons en §5.3.3.3 qu'il y a d'autres cas de figure où la $\beta$-réduction n'est pas permise, mais il ne s'agit en fait que de cas particuliers de ce que nous venons de voir.

### 5.2.4 Une variété de variables

Dans LO beaucoup d'expressions sont maintenant des $\lambda$-termes ; elles dénotent des fonctions. Cela veut dire que le monde (i.e. le modèle) est peuplé de fonctions. Lorsque nous définissons $M = \langle \mathcal{A}, W, R, F \rangle$, nous ne donnons pas explicitement d'ensembles de fonctions, mais elles sont là : du moment que nous connaissons l'ensemble $\mathcal{A}$ et l'ensemble $\{0; 1\}$, nous sommes capables de concevoir et de retrouver toutes les fonctions possibles qui opèrent sur ces ensembles. Par exemple, l'ensemble de toutes les fonctions de $\mathcal{A}$ vers $\{0; 1\}$, i.e. $\{0; 1\}^{\mathcal{A}}$, est complètement défini par la donnée de $\mathcal{A}$ et $\{0; 1\}$, il se déduit directement du modèle. Cet ensemble contient toutes dénotations possibles de tous les prédicats unaires. Bref dans le modèle nous trouvons des tas de fonctions.

Mais si nous avons des expressions de LO (notamment les constantes de prédicats) qui dénotent des fonctions, alors, rien de nous empêche de nous donner dans LO des *variables* qui dénotent aussi des fonctions. Les variables sont interprétées par les assignments $g$. Jusqu'à présent une assignation $g$ allait chercher ses valeurs dans $\mathcal{A}$. Mais si nous autorisons $g$ à aller aussi chercher ses valeurs dans par exemple $\{0; 1\}^{\mathcal{A}}$, alors $g$ interprétera des variables de prédicats unaires. De même pour des variables de prédicats binaires, en allant chercher des valeurs dans $(\{0; 1\}^{\mathcal{A}})^{\mathcal{A}}$, etc.

Par exemple, si nous posons que $P$ et $Q$ sont des variables de prédicats unaires, alors nous saurons que les assignations leur feront correspondre des fonctions comme ce qui est illustré en figure 5.7 pour, mettons, $g_1$ (qui continue, comme d'habitude, à assigner aussi des valeurs aux variables d'individus).

Ainsi $g_1(P)$ est bien un fonction, et la figure 5.7 nous montre laquelle. Et comme $g_1(P)$ est une fonction de $\mathcal{A}$ dans $\{0; 1\}$, nous pouvons lui donner un argument, par exemple ALICE, ce qui s'écrit : $g_1(P)(ALICE)$. D'après la figure, nous savons que $g_1(P)(ALICE) = 1$, alors que $g_1(Q)(ALICE) = 0$. De même, si $f$ est une certaine fonction de $\{0; 1\}^{\mathcal{A}}$, la variante $g_1[f/P]$ est définie : c'est l'assignation identique à $g_1$ sauf que $g_1(P) = f$.
<figure><img src="image_39.png" /><figcaption>FIG. 5.7 : Une assignation interprétant différentes sortes de variables</figcaption></figure>

L'ajout de variables de prédicats dans LO n'est pas spécialement propre au λ-calcul ; et d'ailleurs nous avions déjà commencé dans les chapitres précédents, avec ce que nous appelions alors des « pseudo-prédicats » C pour limiter les domaines des quantificateurs, qui sont réellement des variables de prédicats unaires. Il suffit d'adapter les assignations g pour intégrer correctement ce type de variables dans le système<fnref n="28" />. Et cela a une application immédiate, déjà prévue par LO : nous pouvons quantifier sur des prédicats, en écrivant par exemple $\forall P[P(a) \to P(b)]$ et $\exists P[P(a) \land P(b)]$. La première formule dit que Bruno possède, dans le monde d'évaluation, toutes les propriétés qu'Alice possède (dans ce monde) ; et la seconde qu'Alice et Bruno ont au moins une propriété commune (dans le monde d'évaluation). Ce sont des formules respectivement très fortes et très faibles, mais elles peuvent s'avérer utiles dans certaines analyses sémantiques.

Cependant c'est avec le λ-calcul que l'ajout de ces variables va littéralement décupler la puissance expressive de LO. Car par la λ-abstraction, nous allons maintenant pouvoir « percer des trous en forme de prédicats » dans les formules. En effet nous pouvons fabriquer le λ-terme $\lambda P[P(a)]$. Informellement, c'est une formule à laquelle il manque un prédicat mais qui lui prévoit déjà un argument, a (i.e. une phrase avec son sujet mais sans son GV). Sémantiquement, ce λ-terme dénote une fonction qui attend en argument la dénotation d'un prédicat et renvoie 1 ssi ALICE satisfait ce prédicat. Comme la dénotation d'un prédicat est elle-même une fonction (de $\{0; 1\}^A$ s'il est unaire), la dénotation de $\lambda P[P(a)]$ est donc une fonction de fonctions (de $\{0; 1\}^{\{(0;1)A\}}$). Cela ne doit pas nous effrayer, les fonctions sont des objets du modèle et peuvent très bien servir d'argument à d'autres fonctions un peu plus complexes. L'explicitation de la dénotation de $\lambda P[P(a)]$ en (18) nous montre qu'il s'agit simplement d'une fonction qui fait le tri parmi les fonctions de $\{0; 1\}^A$ entre celles qui donnent le résultat 1 pour ALICE et les autres.

<footnote n="28">²⁸ Et il aurait alors suffi de dire qu'à une variable de prédicat unaire, g assigne une valeur prise non pas dans $\mathcal{A}$, mais dans $\mathcal{P}(\mathcal{A})$. Et pour un prédicat binaire, dans $\mathcal{P}(\mathcal{A} \times \mathcal{A})$, etc.</footnote>
$$
(18) \quad \llbracket \lambda P[P(a)] \rrbracket^{M, w, g} = \{0; 1\}^{\mathcal{A}} \longrightarrow \{0; 1\}
$$
$$
f \longmapsto 1 \quad \text{ssi} \quad f(\text{ALICE}) = 1
$$

Les λ-termes qui abstraient des prédicats deviennent vite moins impressionnants lors-
qu'on les manipule dans des expressions de LO. Si λP[P(a)] attend un prédicat en ar-
gument, nous allons pouvoir lui en fournir par l'application fonctionnelle en écrivant
par exemple : [λP[P(a)](dormir)]. Et cela se simplifie immédiatement par β-réduction,
en remplaçant P par dormir, ce qui donne : [dormir(a)]. Mais comme nous prenons
l'habitude d'écrire les prédicats sous forme de λ-termes, nous aurons plutôt tendance à
produire l'application fonctionnelle (19) :

$$
(19) \quad [\lambda P[P(a)](\lambda x \, \mathit{dormir}(x))]^{29}
$$

Là aussi nous pouvons opérer la β-réduction, en remplaçant P par l’argument, i.e.
λx dormir(x), ce qui donne (20a). Et à présent nous reconnaissons un nouveau schéma
de β-réduction, que nous savons déjà faire, et qui nous donne (20b).

(20) a. $[\lambda x \, \mathit{dormir}(x)(a)]$

b. dormir(a)

Nous voyons donc qu'une expression comme (19) (qui est une formule) déclenche une
réaction en chaîne de β-réductions qui finissent par simplifier sa complexité initiale.
C'est encore plus spectaculaire quand les expressions multiplient les λ-abstractions et
applications fonctionnelles, comme ce que présentent les exercices 5.8 et 5.9 infra. Car
évidemment nous pouvons aller plus loin dans la fabrication de λ-termes. Par exemple
λPλQ[[P(a)] ∧ [Q(a)]] dénote une fonction à deux arguments; elle attend un premier
prédicat (P), puis un second (Q) et nous livre la conjonction de leur application à a. Nous
pouvons aussi faire λPλyλx[[P(y)](x)] – ou λPλyλx[P(x, y)] – qui présente simplement
une structure prédicative binaire en attente de son « matériel » sémantique, c'est-à-dire
un prédicat et deux termes.

Notons également que l'application fonctionnelle (21a) est tout à fait possible. λP[P(a)]
sert à fournir a à un prédicat (P) qui sera donné en argument ; et comme argument nous
donnons un prédicat binaire (et non unaire). Par une première passe de β-réduction,
nous obtenons (21b) – λyλx aimer(x, y) remplace P –, puis par une seconde passe, (21c)
(a remplace y).

(21) a. $[\lambda P[P(a)](\lambda y \lambda x \, \mathit{aimer}(x, y))]$

b. $[\lambda y \lambda x \, \mathit{aimer}(x, y)(a)]$

c. λx aimer(x, a)

Mais cet exemple nous montre que nous nous approchons d'une pente particulièrement dangereuse. Par le jeu des règles de λ-abstraction et d'application fonctionnelle

<footnote n="29">29 Notons ici que j’ai omis les crochets dans l’argument, pour ne pas surcharger l’écriture. En toute rigueur, le λ-terme argument devrait être λx[dormir(x)]. Mais cette omission est autorisée, car sans conséquence. Les crochets de [P(a)] sont, eux, plus importants.</footnote>
telles qu'elles sont définies dans les pages qui précèdent, nous pouvons écrire une grande quantité d'expressions, dont celles de (22).

(22) a. $[\lambda P[P(a)](b)]$

b. $[\lambda x[dormir(x)](regarder)]$

c. $[\lambda x[dormir(x)](\lambda y\lambda z regarder(z, y))]$

Mais ces expressions ne sont absolument pas interprétables ! Par exemple, (22a) donne une constante d'individu b pour jouer un rôle de prédicat dans le λ-terme, et inversement (22b) fournit un prédicat comme argument à un autre prédicat. Si nous effectuions les β-réductions, nous obtiendrions des aberrations comme $[b(a)]$, $[dormir(regarder)]$, $[dormir(\lambda y\lambda z regarder(z, y))]$ qui n'appartiennent pas à LO. Il est indispensable d'exclure ces écritures du langage ; autrement dit nous avons un besoin urgent de discipliner les règles de λ-calcul pour ne pas anéantir la cohérence de LO. C'est ce que nous abordons dans la section suivante.

### Exercice 5.8 (β-réductions)

Effectuer toutes les β-réductions possibles dans les expressions suivantes :

1. $[\lambda x aimer(x, y)(y)]$

2. $[\lambda x aimer(x, x)(a)]$

3. $[\lambda y\lambda x aimer(x, y)(c)]$

4. $\lambda y[\lambda x aimer(x, y)(c)]$

5. $[[\lambda y\lambda x aimer(x, y)(a)](b)]$

6. $[\lambda y[\lambda x aimer(x, y)(a)](b)]$

7. $[\lambda z\lambda y[\lambda x aimer(x, y)(z)](b)]$

8. $[\lambda P P(x, y)(aimer)]$

9. $[\lambda Q\lambda y\lambda x[Q(x, y) \land Q(y, x)](aimer)]$

10. $[\lambda P[P(a)](\lambda x pleurer(x))]$

11. $[[\lambda X\lambda x[X(x)](chat)](d)]$

12. $[\lambda X\lambda z[[X(z)](z)](\lambda y\lambda x Q(x, y))]$

### Exercice 5.9 (β-réductions)

Effectuer toutes les β-réductions possibles dans les expressions suivantes :

1. $[[\lambda y\lambda x aimer(x, y)(j)](a)]$

2. $[\lambda y[\lambda x aimer(x, y)(j)](a)]$

3. $[\lambda Q\lambda y[Q(y)](\lambda x dormir(x))]$

4. $[[\lambda P\lambda x[[P(x)](y)](aimer)](a)]$

5. $[\lambda P\lambda x[[P(x)](y)](\lambda y\lambda z aimer(y, z))]$

6. $[\lambda X\lambda x[X(\lambda y aimer(x, y))](\lambda Q[Q(a)])]$

## 5.3 Langage objet typé

Dans cette section nous allons définir précisément la syntaxe et la sémantique de LO dans sa nouvelle mouture, pour le rendre apte à accueillir proprement les apports du λ-calcul. Comme nous venons de le voir, nous avons besoin avant tout de régler scrupuleusement la syntaxe du langage pour garantir qu'elle ne produit que des expressions interprétables. Pour ce faire, nous allons utiliser un outil formel central : les types. Notre langage va, de la sorte, devenir typé, d'où le nom de LO typé.
### 5.3.1 Les types

La résolution du « danger » qui est apparu en §5.2.4 peut se résumer par le principe suivant : certaines expressions de LO dénotent des fonctions, mais ces fonctions ne prennent pas n'importe quoi comme argument. Les fonctions ne doivent s'appliquer qu'à des objets dont la nature est conforme à ce qu'elles attendent de par leur définition.<fnref n="30" /> Pour mettre cette contrainte en œuvre, nous allons catégoriser toutes les expressions de LO, un peu comme la grammaire catégorise les expressions de la langue (avec N, V, Adj, Det, GN, GV, etc.). Mais ici, en sémantique, nous ne parlerons pas de catégories mais de *TYPES*. Un type est une étiquette assignée à toute expression de LO et qui caractérise la nature de sa dénotation. On parle d'ailleurs parfois de *types dénotationnels* ou *types de dénotation*.

Ensuite, la démarche consistera à contrôler la bonne formation des expressions de LO grâce aux types, car ceux-ci sont spécialement conçus pour indiquer les bonnes combinations sémantiques.

#### 5.3.1.1 Une infinité de catégories

Nous allons commencer par introduire deux types de base, élémentaires. Ils sont représentés par des symboles simples : e et t.

Les expressions qui dénotent un individu de $\mathcal{A}$, ce que nous appelons des termes depuis le chapitre 2, vont recevoir le type e. Ce nom, e, vient de *entité*. Ce sera donc le type des constantes et variables d'individus, mais aussi de *t*-termes de la forme $1xφ$.

Les expressions qui dénotent une valeur de vérité, c'est-à-dire les formules, reçoivent le type *t* ; *t* comme *truth value*, i.e. « valeur de vérité » en anglais. *Formule et expression de type* *t* seront donc pour nous des synonymes.

Quant aux autres expressions de LO, elles dénotent toutes des fonctions, et nous en rendons compte en leur assignant des types complexes, que nous appellerons aussi des types fonctionnels. Un type fonctionnel caractérise une catégorie de fonctions (curryfiées) en spécifiant tout simplement le type de son argument et le type de son résultat. Un type fonctionnel aura toujours la structure générale $\langle a, b \rangle$ où *a* et *b* représentent des types<fnref n="31" />. Le premier, *a*, indique le type de l'argument de la fonction et le second, *b*, le type du résultat que donne cette fonction.

**Point 5.1**

$\langle a, b \rangle$ est le type des expressions qui dénotent des fonctions dont les arguments

<footnote n="30">³⁰ Ce principe est déjà informellement en germe dans les travaux de Frege (p. ex. Frege 1892a) et il reprend l'idée par laquelle Russell fonde sa fameuse théorie des types (Russell 1903). Ce qui est présenté ici s'inscrit dans la lignée de la formulation de Church (1940) de la théorie.</footnote>

<footnote n="31">³¹ Dans les notations utilisées ici, *a* et *b* ne seront jamais des types, mais des symboles qui représentent n'importe quel type. Précisons aussi que certains auteurs, probablement malhabiles au traitement de texte, notent les types avec des parenthèses au lieu de chevrons, c'est une variante possible.</footnote>
sont les dénotations d'expressions de type *a* et dont les valeurs sont les dénotations d'expressions de type *b*.

Ainsi un prédicat unaire comme **dormir** dénote une fonction qui prend en argument un individu de $\mathcal{A}$, ce qui correspond au type *e*, et retourne comme résultat une valeur de vérité, qui correspond au type *t*. Le type du prédicat est donc $\langle e, t \rangle$, type qui étiquette toutes les expressions qui dénotent une fonction de $\{0 : 1\}^A$.

Un prédicat binaire comme **regarder**, nous l'avons vu, dénote une fonction qui prend en argument un individu (type *e*) et retourne une fonction. Cette dernière est une fonction de $\{0 : 1\}^A$, ce qui correspond au type $\langle e, t \rangle$. Par conséquent le type d'un prédicat binaire est $\langle e, \langle e, t \rangle \rangle$. Et un prédicat à trois places sera de type $\langle e, \langle e, \langle e, t \rangle \rangle \rangle$, etc.

Un type fonctionnel peut donc évidemment enchâsser d'autres types fonctionnels, comme le détermine la définition 5.8. Cette définition est récursive : avec la règle 2, on construit un nouveau type à partir de deux types déjà connus. Elle implique ainsi qu'à partir des deux types de base *e* et *t*, nous disposons d'une infinité de types pour étiquer les expressions de LO.

**Définition 5.8 : Types**

1. *e* et *t* sont des types ;

2. si *a* et *b* sont des types, alors $\langle a, b \rangle$ est un type ;

3. rien d'autre n'est un type.

Ainsi nous savons que, par exemple, $\langle e, t \rangle$, $\langle t, t \rangle$, $\langle \langle e, t \rangle, t \rangle$, $\langle e, \langle e, t \rangle \rangle$, $\langle \langle e, t \rangle, \langle e, t \rangle \rangle$, $\langle \langle e, t \rangle, \langle \langle e, t \rangle, t \rangle \rangle$ sont des types. Car ils sont tous de la forme $\langle a, b \rangle$ où *a* et *b* sont à leurs tours des types. En revanche, $\langle e \rangle$, $\langle t \rangle$, $\langle \langle \langle e, t \rangle, e, t \rangle \rangle$ ne sont pas des types, car nous ne pouvons pas les obtenir à partir de la définition 5.8.

Un type fonctionnel est donc toujours globalement binaire, i.e. un couple $\langle a, b \rangle$, puisqu'il sert à décrire une classe de fonctions curryfiées. Rappelons qu'une fonction curryfiée attend un argument (cf. *a*) et retourne une valeur (cf. *b*) qui peut à son tour être elle-même une fonction. Et nous avons vu en §5.2.4 que certaines fonctions peuvent aussi prendre d'autres fonctions en argument, ce qui fait que le premier composant d'un type fonctionnel (*a*) peut lui-même être un type fonctionnel. Ainsi, le type $\langle \langle e, t \rangle, t \rangle$ correspond aux fonctions qui prennent en argument une fonction de $\{0 : 1\}^A$ (i.e. la dénotation d'un prédicat unaire de type $\langle e, t \rangle$) et retournent une valeur de vérité. C'est ce qui caractérise la dénotation d'un $\lambda$-terme comme $\lambda P[P(a)]$ vue en §5.2.4 (cf. (18)). De même $\langle \langle e, t \rangle, \langle e, t \rangle \rangle$ correspond aux fonctions qui prennent une dénotation de prédicat unaire comme argument et retournent une dénotation de prédicat unaire comme valeur.

En général, la manière la plus simple d'interpréter un type est donc de raisonner en termes de fonctions, en s'aidant de la formulation (rapide mais pratique) suivante : $\langle a, b \rangle$
est le type des fonctions qui attendent a pour donner b. Il suffit de bien repérer quels sont les deux membres principaux (a et b) qui forment le couple, sans se perdre dans la cascade de chevrons quand le type devient très complexe. Ainsi $\langle\langle e, t \rangle, \langle\langle e, t \rangle, t \rangle$, à décodeer comme (23), est le type des expressions fonctionnelles qui attendent un prédicat unaire pour donner... une expression de type $\langle\langle e, t \rangle, t \rangle^{32}$.

$$ (23) \quad \underbrace{\langle\langle e, t \rangle, \langle\langle e, t \rangle, t \rangle}_{\text{raccourci}} $$

Nous pouvons également nous aider dans le décryptage d'un type en exploitant l'équivalence de fond entre la fonction caractéristique d'un ensemble et cet ensemble. Les types de la forme $\langle a, t \rangle$ étiquettent des fonctions qui renvoient 0 ou 1, donc des fonctions caractéristiques d'ensembles composés d'objets correspondant au type a. C'est bien ce qui se passe avec le type $\langle e, t \rangle$, étiquette des prédicats unaires dont les dénotations sont assimilables à des ensembles d'individus de $\mathcal{A}$. De même, le type $\langle\langle e, t \rangle, t \rangle$ est l'étiquette des expressions qui dénotent un ensemble d'objets correspondant au type $\langle e, t \rangle$, autrement dit à une ensemble d'objets qui correspondent à des ensembles d'individus; soit un ensemble d'ensembles d'individus.

Il est également utile de savoir décodeur rapidement les types de la forme $\langle a, \langle b, t \rangle \rangle$. Ces types peuvent être vus comme les étiquettes des expressions qui dénotent une relation binaire entre un objet de type a et un objet de type b. En effet, nous avons vu que $\langle e, \langle e, t \rangle \rangle$ est le type des prédicats binaires, qui dénotent bien des relations entre individus. Et donc $\langle\langle e, t \rangle, \langle\langle e, t \rangle, t \rangle$ peut être vu comme correspondant à des relations entre deux ensembles d'individus.

Profitons-en enfin pour introduire un raccourci de notation que nous utiliserons parfois pour abréger nos écritures et aussi, surtout, pour formuler des généralisations sur certains types. Soit a et b deux types; nous pourrons nous autoriser à abréger le type $\langle a, \langle a, b \rangle \rangle$ en $\langle a^2, b \rangle$, le type $\langle a, \langle a, \langle a, b \rangle \rangle \rangle$ en $\langle a^3, b \rangle$, etc. et de manière générale, le type $\langle a, \langle a, \langle \dots \langle a, b \rangle \dots \rangle \rangle$ où a est répété n fois s'abrégera en $\langle a^n, b \rangle$. Ainsi nous pourrons dire que le type de ce que nous avons appelé jusqu'ici un prédicat n-aire est $\langle e^n, t \rangle$.

### 5.3.1.2 Rencontre du troisième type

Nous allons voir qu'un point crucial de LO typé est que toute expression du langage devra être étiquetée par un et un seul type. Mais nous devons alors remarquer une insuffisance : il existe des expressions de LO qui dénotent bien des fonctions mais qu'il n'est pas possible de typer avec les système présenté ci-dessus. Il s'agit des expressions intensionnelles (§4.4.3.2), de la forme $\wedge\alpha$, qui, rappelons-le, dénotent des fonctions associant, à tout monde possible de $\mathcal{W}$, la dénotation de $\alpha$ dans ce monde. Or nous n'avons pas les moyens (pour l'instant) de définir des types pour les fonctions qui prennent des mondes

<footnote n="32">32 Signalons une coutume qui simplifie parfois les notations des types en faisant l'économie de certains chevrons (ou parenthèses) et de virgules lorsque leur omission ne crée pas d'ambiguïté et facilite la lecture du type. Ainsi on pourra trouver, dans la littérature, le type $\langle e, \langle e, t \rangle \rangle$ simplifié en $e\langle et \rangle$; $\langle\langle e, t \rangle, \langle e, t \rangle \rangle$ en $\langle et \rangle\langle et \rangle$; $\langle\langle e, t \rangle, \langle\langle e, t \rangle, t \rangle \rangle$ en $\langle et, \langle et \rangle t \rangle$, etc.</footnote>
possibles en arguments. Par conséquent, il nous faut augmenter encore notre ensemble de types (bien qu'il soit déjà infini !...).

À cet égard, en vérité, il est ici un peu inexact de parler d'un troisième type. Ce que nous devons introduire ici, c'est un élément de notation qui permette de représenter les mondes de $\mathcal{W}$ dans l'écriture des types, et nous utiliserons pour cela le symbole $s$. Ainsi, si $a$ est le type de $\alpha$, alors $^\alpha a$ est de type $\langle s, a \rangle$, qui étiquette les fonctions de $\mathcal{W}$ vers l'ensemble des dénotations des expressions de type $a$. Par exemple pour une formule $\varphi$ (de type $t$), $^\varphi \varphi$ est de type $\langle s, t \rangle$, ce qui correspond bien aux fonctions de $\mathcal{W}$ vers $\{0; 1\}$, i.e. des propositions.

Nous redonnons ici la définition des types (définition complète cette fois-ci) en définissant par induction l'ensemble $\mathbf{T}$ de tous les types possibles.

### Définition 5.9 : T

T est le plus petit ensemble<fnref n="33" /> tel que :

1. $e \in \mathbf{T}$ et $t \in \mathbf{T}$;

2. si $a \in \mathbf{T}$ et $b \in \mathbf{T}$, alors $\langle a, b \rangle \in \mathbf{T}$ et $\langle s, a \rangle \in \mathbf{T}$.

Nous remarquons donc qu'en vertu de cette définition, s n'est pas un type (ce serait, tout au plus, ce que l'on pourrait appeler un « proto-type », si le terme ne prêtait pas à confusion) ; s n'est en fait qu'un symbole qui permet de construire des types complexes. Dans $\mathbf{T}$, nous ne rencontrerons jamais de type de la forme $\langle a, s \rangle$ : s doit se trouver immédiatement à droite d'un chevron ouvrant, comme le stipule la règle 2 de la définition. Par exemple, $\langle s, e \rangle$, $\langle s, \langle s, t \rangle \rangle$, $\langle t, \langle s, t \rangle \rangle$ et $\langle \langle s, \langle \langle s, \langle e, t \rangle \rangle, t \rangle \rangle$, $\langle e, t \rangle \rangle$, sont des types ; $\langle s, s \rangle$ et $\langle e, s \rangle$ n'en sont pas.

### 5.3.2 Syntaxe de LO typé

#### 5.3.2.1 Syntaxe réglée par les types

À l'aide de cet ensemble de types, nous allons pouvoir définir la syntaxe de LO typé. La syntaxe fournit les règles de bonne formation de toutes expressions interprétables de LO. L'intérêt du langage typé est que les règles syntaxiques ne vont plus se contenter de dire si telle ou telle expression est une expression bien formée de LO, elles vont aussi nous indiquer quel est le type de chaque expression formée. Introduisons tout de suite à cet effet un élément de notation, $\mathfrak{M}\mathbb{E}^{34}$.

<footnote n="33">³³ On le définit comme le plus petit ensemble, afin d'être sûr qu'on y trouvera rien d'autre que ce que spécifient les conditions qui suivent.</footnote>

<footnote n="34">³⁴ Je reprends ici le symbole $\mathfrak{M}\mathbb{E}$ de Montague (1973) qui est l'abréviation de *meaningful expressions*, c'est-à-dire « expressions interprétables ».</footnote>
**Notation 5.4**

L'ensemble de toutes les expressions de type *a* de LO est noté $\mathcal{M}_a$.

Et on notera $\mathcal{M}$ l'ensemble de toutes les expressions bien formées de LO (donc
$\mathcal{M}$ est l'union de tous les $\mathcal{M}_a : \mathcal{M} = \bigcup_{a \in \mathcal{T}} \mathcal{M}_a$).

Ainsi, $\alpha \in \mathcal{M}_a$ est une manière rapide d'écrire que « $\alpha$ est de type $a$ » ; et $\alpha \in \mathcal{M}$ signifie simplement que $\alpha$ est une expression bien formée de LO. Cette notation implique qu'avoir un type (dans T) signifie la même chose qu'être une expression bien formée de LO. Autrement dit, toute expression bien formée du langage doit avoir un (et un seul) type.

Et comme un type est une catégorie d'expressions de LO, nous pouvons prévoir, au
vu de T, que nous allons avoir dans le langage des expressions fonctionnelles de types
extrêmement variés. En §5.2.4, nous avons introduit des variables de prédicats, c'est-à-
dire des variables qui dénotent des fonctions. Dès lors que ce pas est franchi, il n'y a
aucune raison de ne pas continuer : dans le vocabulaire de LO nous allons nous donner,
au moins potentiellement, des variables de n'importe quel type de T ; nous n'aurons pas
de problème pour les interpréter, la plupart dénoteront des fonctions, conformément à
ce qu'indique leur type. De même nous allons considérer que le vocabulaire possède une
collection de constantes pour (potentiellement) n'importe quel type. Formellement, cela
veut dire que nous avons, pour tout type *a* de T, les ensembles $Cns_a$ et $Var_a$, respec-
tivement l'ensemble des constantes de type *a* et l'ensemble des variables de type *a*. Et
comme d'habitude, $Cns$ et $Var$ sont les réunions respectivement de tous les $Cns_a$ et de
tous les $Var_a$.

**Définition 5.10 : Vocabulaire**

Le vocabulaire de LO comporte :

- un ensemble de variables $Var_a$ et un ensemble de constantes $Cns_a$ pour
chaque type $a$ de T;

- un ensemble de symboles logiques :
  `{¬ ; ∧ ; ∨ , → ; ↔ ; = ; ∀ ; ∃ ; t ; [n] ; ⟨n⟩ ; λ ; ^ ; v}` , où *n* peut représenter
divers entiers de $\mathbb{N}$ dans $[n]$ et $⟨n⟩$ (cf. §4.5.1);

- les crochets $[]$ et les parenthèses $()$.

En pratique, évidemment, nous n'aurons pas besoin de variables et de constantes pour tous les types de T, ce qui fait que pour certains types *a*, *Var*<sub>*a*</sub> ou *Cns*<sub>*a*</sub> pourront être vides. Il serait particulièrement utile de disposer d'un moyen de reconnaître facilement le type des variables que nous utiliserons. Une pratique consiste à indicer les variables par leur type (en écrivant, par exemple, $x_e$, $P_{⟨e,t⟩}$, $R_{⟨e,⟨e,t⟩⟩}$...). Mais cela a tendance à allonger
épouvantablement les écritures, et nous choisirons ici plutôt d'indiquer le type des variables à l'extérieur des expressions de LO, en essayant de maintenir des conventions de notation suffisamment intuitives.

Les variables et les constantes de type e seront notées comme d'habitude (x, y, z, u, v, x₁, x₂... et a, b, c,..., a₁, a₂,...). Les variables de types plus complexes seront notées par des majuscules (P, Q, R, N, X, Y...), avec quelques petites spécificités typographiques le cas échéant. Les constantes de prédicats, quel que soit leur type, seront toujours notées en gras **(homme, dormir, aimer, donner...)** en utilisant parfois des majuscules. Les variables de $Var_t$ seront notées $\varphi, \psi, \chi,...$, et celles de $Var_{\langle s,t \rangle}$ $p, q, r...$

La syntaxe de LO typé peut maintenant être définie comme suit :

**Définition 5.11 : Syntaxe de LO typé**

(Syn.1) si $\alpha \in Var_a$ ou $\alpha \in Cns_a$, alors $\alpha \in ME_a$;

(Syn.2) si $\alpha \in ME_{\langle b,a \rangle}$ et $\beta \in ME_b$, alors $[\alpha(\beta)] \in ME_a$;

(Syn.3) si $\alpha$ et $\beta \in ME_a$, alors $[\alpha = \beta] \in ME_t$;

(Syn.4) si $\varphi, \psi \in ME_t$, alors :

a. $\neg \varphi \in ME_t$,

b. $[\varphi \wedge \psi], [\varphi \vee \psi], [\varphi \rightarrow \psi]$ et $[\varphi \leftrightarrow \psi] \in ME_t$;

(Syn.5) si $\varphi \in ME_t$, alors $[n]\varphi$ et $\langle n \rangle \varphi \in ME_t$;

(Syn.6) si $\varphi \in ME_t$ et $\upsilon \in Var_a$, alors $\forall \upsilon \varphi$ et $\exists \upsilon \varphi \in ME_t$, et $\nu \upsilon \varphi \in ME_a$;

(Syn.7) si $\alpha \in ME_a$ et $\upsilon \in Var_b$, alors $\lambda \upsilon \alpha \in ME_{\langle b,a \rangle}$;

(Syn.8) si $\alpha \in ME_a$, alors $\alpha \in ME_{\langle s,a \rangle}$;

(Syn.9) si $\alpha \in ME_{\langle s,a \rangle}$, alors $\alpha \in ME_a$.

La règle (Syn.1) nous donne les expressions de base de LO, c'est-à-dire celles qui, d'office, figurent dans $ME$. Ce sont les variables et les constantes, et elles peuvent être de n'importe quel type.

La règle (Syn.2) introduit l'application fonctionnelle, mais de façon plus disciplinée que ce que nous avons précédemment : une expression fonctionnelle ($\alpha$) de type $\langle b, a \rangle$ n'acceptera que des arguments ($\beta$) dont le type lui convient, i.e. $b$. C'est cette règle qui résout le problème vu en §5.2.4 ; nous ne risquerons plus de donner n'importe quoi comme argument à une fonction, nous sommes sauvés. Remarquons aussi qu'avec (Syn.2), nous obtenons toujours un type plus simple que celui de $\alpha$ : nous passons de $\langle b, a \rangle$ à $a$.

La règle (Syn.3) permet de formuler des identités de dénotation entre deux expressions. Dans le chapitre 2, cette règle était présentée comme une variante de la précédente en considérant que = pouvait être vu comme un prédicat binaire. Il y a à présent une différence importante : dans le chapitre 2, les membres de l'égalité devaient être des termes (variables ou constantes), c'est-à-dire ce que nous nommons maintenant des expressions de type e ; or ici la règle (Syn.3) peut mettre en relation deux expressions de n'importe
quel type, du moment qu'il s'agit du même type pour les deux. Cela rend le langage beau-
coup plus puissant et expressif. Notons aussi que nous ne pouvons plus aussi facilement
considérer (Syn.3) comme une simple variante de (Syn.2) : si = devait correspondre à un
prédicat binaire ordinaire, il devrait avoir un type. Mais quel serait ce type ? Certes il
serait de la forme ⟨a, ⟨a, t⟩⟩, mais cela n'est pas un type précis (cette notation n'est qu'un
format de type). En fait il faudrait envisager autant de types différents pour le « pré-
dicat » = qu'il y a de types dans T; par exemple ⟨e, ⟨e, t⟩⟩ pour l'identité d'individus,
⟨⟨e, t⟩, ⟨⟨e, t⟩, t⟩⟩ pour l'identité de prédicats unaires, etc.

Les règles (Syn.4) introduisent les connecteurs (ou constantes) logiques. Elles sont tout
à fait similaires à celles vues dans le définition 2.8 du chapitre 2, p. 67, (il y avait alors
deux groupes de règles qui s'appelaient (Syn.3) et (Syn.4)). Les connecteurs logiques sont
vérifonctionnels, c'est-à-dire qu'ils ne s'appliquent que sur des formules et produisent à
leurs tours des formules (plus complexes). C'est bien ce que spécifient les règles : elles
ne concernent que les expressions de MEdt.

Les règles (Syn.5) introduisent les opérateurs modaux, et là encore les règles s'ap-
pliquent à des formules (donc de MEdt) pour produire des formules.

Les règles (Syn.6) introduisent les quantifications et la description définie. Il est impor-
tant de remarquer que ces règles sont un peu plus générales que celles vues au chapitre 2 :
en effet ici nous nous autorisons à quantifier sur des variables de n'importe quel type
(noté a dans la règle), alors que jusqu'à présent les quantifications ne s'effectuaient que
sur des variables de type e (nous n'en avions pas d'autres). De même, t peut lier une
variable de n'importe quel type et – c'est important de le noter – le t-terme construit a
le même type que cette variable.

La règle (Syn.7) présente la λ-abstraction ; c'est la règle qui construit les expressions
fonctionnelles et, partant, qui complexifie les types des expressions. On fabrique une
fonction à partir d'une expression α, de type a, en « l'amputant » d'une variable v de
type b. Le résultat est donc bien une expression qui attend un argument de type b pour
redonner alors une expression du type de α ; le type de l'expression fonctionnelle λva
est donc ⟨b, a⟩.

Les règles (Syn.8) et (Syn.9) introduisent respectivement les opérateurs ^ et vus en
§4.4. (Syn.8) complexifie aussi le type d'une expression et c'est ici la seule règle insère
s dans nos types. Rappelons que ^α dénote l'intension de α. Sa dénotation est bien une
fonction, comme l'indique le type ⟨s, a⟩ (tel que nous l'avons défini en §5.3.1.2 supra).
L'opérateur v est l'inverse de ^ : en quelque sorte il ramène la dénotation d'une expression
déjà intensionnelle à son extension dans le monde où on l'interprète. Au chapitre 4, v ne
pouvait apparaître que devant ^ ; mais maintenant il a un peu plus de liberté. (Syn.9) dit
que v ne peut préfixer qu'une expression intensionnelle, c'est-à-dire de type ⟨s, a⟩. Mais
à présent, rien ne nous empêchera d'envisager dans LO des constantes et des variables
qui sont directement et par elles-mêmes d'un type ⟨s, a⟩. Par exemple, si p est de type
⟨s, t⟩, alors v p est bien formée et de type t.
### 5.3.2.2 Exemples

Pour illustrer de manière plus appliquée le fonctionnement de ces règles, regardons pas à pas comment se calcule le type d'une expression bien formée de LO. Le moyen le plus simple et le plus sûr d'y parvenir consiste tout bonnement à reconstruire par devers soi l'expression dont on cherche le type en appliquant correctement les règles syntaxiques nécessaires. Si une expression est bien formée, il n'y a qu'une seule dérivation qui mène à sa construction, et son type s'obtient donc automatiquement à partir de la connaissance du type de ses composants de base. Dans les exemples qui suivent, nous utiliserons des variables et des constantes ainsi typées : $x, y \in Var_e, P \in Var_{\langle e, t \rangle}, a \in Cns_e, \text{dormir} \in Cns_{\langle e, t \rangle}, \text{regarder} \in Cns_{\langle e, \langle e, t \rangle \rangle}$.

Commençons avec un cas très simple :

**(24) $\lambda x[\text{dormir}(x)]**

La constante de prédicat **dormir** est de type $\langle e, t \rangle$ et $x$ de type $e$, ce qui permet d'appliquer la règle (Syn.2) de l'application fonctionnelle pour produire $[\text{dormir}(x)]$ qui est donc de type $t$. Ensuite la règle (Syn.7) de $\lambda$-abstraction est appliquée pour ajouter $\lambda x$. Et la règle nous dit que l'expression est de type $\langle e, t \rangle$, puisque $e$ est le type de $x$. Ce calcul du type de (24) peut se résumer graphiquement comme suit :

<figure><img src="image_40.png" /></figure>

Par la suite, avec ce genre de $\lambda$-terme, nous prendrons l'habitude de souvent user de la règle de suppression des crochets, pour écrire $\lambda x \text{ dormir}(x)$. De même, nous reconnaîtrons rapidement que $\lambda y \lambda x \text{ regarder}(x, y)$ est de type $\langle e, \langle e, t \rangle \rangle$ ; informellement c'est parce que nous y voyons un prédicat binaire, **regarder**, qui possède ses arguments, $x$ et $y$, et ceux-ci sont $\lambda$-abstraits par (Syn.7). Formellement il s'agit de la simplification de $\lambda y \lambda x [[\text{regarder}(y)](x)]$ dont le typage est détaillé en (25) :

<figure><img src="image_41.png" /></figure>

**(26) $\lambda P \lambda x[\text{dormir}(x) \wedge P(a)]**

Nous savons déjà que $\text{dormir}(x)$ est de type $t$. $P$ est de type $\langle e, t \rangle$ et $a$ de type $e$, donc pour les mêmes raisons (i.e. (Syn.2)), $[P(a)]$ – simplifié en $P(a)$ – est de type $t$.
Cela nous permet d'appliquer la règle (Syn.4.b) pour produire $[\mathbf{dormir}(x) \wedge P(a)]$ de type $t$. Ensuite comme en (24), nous trouvons que $\lambda x[\mathbf{dormir}(x) \wedge P(a)]$ est de type $\langle e, t \rangle$ (Syn.7). Et en appliquant encore une fois la règle de $\lambda$-abstraction (Syn.7), $P$ étant de type $\langle e, t \rangle$, nous obtenons le type $\langle \langle e, t \rangle, \langle e, t \rangle \rangle$ pour $\lambda P \lambda x[\mathbf{dormir}(x) \wedge P(a)]$.

<figure><img src="image_42.png" /></figure>

$$ (27) \quad \lambda x \lambda P[\mathbf{dormir}(x) \wedge P(a)] $$

Ici les mêmes règles syntaxiques que précédemment sont appliquées, mais les deux $\lambda$-abstractions n'interviennent pas dans le même ordre. Donc nous trouverons d'abord $\langle\langle e, t \rangle, t \rangle$ pour $\lambda P[\mathbf{dormir}(x) \wedge P(a)]$ puis $\langle e, \langle\langle e, t \rangle, t \rangle \rangle$ pour $\lambda x \lambda P[\mathbf{dormir}(x) \wedge P(a)]$ :

<figure><img src="image_43.png" /></figure>

$$ (28) \quad 1P[P(a)] $$

Il ne s'agit pas à proprement parler d'un $\lambda$-terme, mais c'est une expression que la nouvelle expressivité de LO nous permet de former. Elle utilise (Syn.6) ; nous avons le droit de l'appliquer car $[P(a)]$ est bien de type $t$. Et cette règle dit qu'un $1$-terme a le même type que la variable liée par $1$ :

<figure><img src="image_44.png" /></figure>

Corsons maintenant l'exercice en ajoutant de l'intensionnalité avec $^-$.

$$ (29) \quad \lambda P \lambda x[^{\mathbf{dormir}(x)} \wedge P(a)] $$

Après avoir formé $[\mathbf{dormir}(x) \wedge P(a)]$ de type $t$, on applique la règle (Syn.8) pour ajouter l'opérateur $^-$ (Syn.8) est simple : elle nous dit que juste qu'il faut ajouter $s$ au début du nouveau type obtenu ; donc $[^{\mathbf{dormir}(x)} \wedge P(a)]$ est de type $\langle s, t \rangle$. Ensuite on applique deux fois (Syn.7) comme en (26) ce qui va donner successive-ment les types $\langle e, \langle s, t \rangle \rangle$ et $\langle\langle e, t \rangle, \langle e, \langle s, t \rangle\rangle \rangle$ :
<figure><img src="image_45.png" /></figure>

$$ (30) \quad \lambda P \lambda x [\text{dormir}(x) \wedge P(a)] $$

Ici ^ ne se place plus devant une formule mais devant le λ-terme (de type ⟨e, t⟩) λx[dormir(x) ∧ P(a)]. Donc selon (Syn.8), ^λx[dormir(x) ∧ P(a)] est de type ⟨s, ⟨e, t⟩⟩. Puis par (Syn.7) on trouve ⟨⟨e, t⟩, ⟨s, ⟨e, t⟩⟩⟩ pour toute l'expression :

<figure><img src="image_46.png" /></figure>

$$ (31) \quad \lambda P \lambda x [\text{dormir}(x) \wedge \lambda P(a)] $$

Cette expression, quant à elle, est mal formée, quelle que soit la manière dont on supplée les crochets qui manquent à $\lambda P(a)$. En effet [$\lambda P(a)$] est en soi mal formée. Car les crochets nous disent qu'il s'agirait d'une application fonctionnelle, engendrée par (Syn.2), où l'argument est a et la fonction $\lambda P$. Donc pour arriver là, on aurait d'abord appliqué la règle (Syn.8) sur P (de type ⟨e, t⟩). Par (Syn.8), $\lambda P$ est donc de type ⟨s, ⟨e, t⟩⟩. Mais alors on n'a pas le droit d'appliquer (Syn.2), puisque a est de type e, type qui ne convient pas à celui de $\lambda P$. En revanche le type de a (e) convient à P (⟨e, t⟩), et on a le droit d'écrire $[P(a)]$ qui est de type t. On peut aussi écrire $[P(a)]$, qui est de type ⟨s, t⟩ (par la règle (Syn.8)). Mais à présent, c'est [dormir(x) ∧ $\lambda P(a)$]] qu'on n'a plus le droit d'écrire. Car la règle (Syn.4), qui introduit la conjonction ∧, exige deux expressions de type t. Et ce n'est pas le cas de $[P(a)]$.

En résumé, les deux règles les plus emblématiques du λ-calcul sont (Syn.2) et (Syn.7). (Syn.7) pourra toujours s'appliquer, il n'y a pas de condition à son application et le type du λ-terme produit se déduit simplement et directement, avec la « recette » qui dit que le type de $\lambda v\alpha$ est composé du type de v et de celui de α (cf. fig. 5.8, page suivante). La règle (Syn.2) est plus contrainte : dans une application fonctionnelle, elle contrôle d'abord que le type de l'argument et celui attendu par la fonction sont bien identiques, et ensuite elle transmet alors le type résultant de la fonction à toute l'expression.
### 5 λ-calcul et théorie des types

<figure><img src="image_47.png" /><figcaption>FIG. 5.8 : Types de la λ-abstraction et types de l'application fonctionnelle</figcaption></figure>

#### Exercice 5.10

On se donne les variables suivantes : $x, y \in \mathcal{V}ar_e, \varphi \in \mathcal{V}ar_t, P \in \mathcal{V}ar_{\langle e, t \rangle}$,
$Q \in \mathcal{V}ar_{\langle e, \langle e, t \rangle \rangle}, K \in \mathcal{V}ar_{\langle \langle s, t \rangle, \langle e, t \rangle \rangle}, S \in \mathcal{V}ar_{\langle s, \langle e, t \rangle \rangle}$.

Dites si les expressions suivantes sont bien formées, et si oui quel est leur type. On considère que la règle de suppression des crochets s'est appliquée quand c'était utile.

1. $\lambda x Q(x, y)$

2. $\lambda Q \exists x Q(x, y)$

3. $[\lambda x Q(x, y)(y)]$

4. $\diamond \lambda x P(x)$

5. $\lambda P P$

6. $[\lambda P P(x)(y)]$

7. $\lambda x [\neg S(x)]$

8. $\lambda x [\neg S(x)]$

9. $[\lambda x \neg S(x)]$

10. $K(\neg[\lambda x P(x)(y)])$

11. $\lambda \varphi K(x, \neg\varphi)$

12. $\lambda \varphi \lambda x K(x, \neg\varphi)$

13. $\lambda x \lambda \varphi K(x, \neg\varphi)$

14. $\lambda K \lambda \varphi K(x, \neg\varphi)$

15. $\lambda K \lambda \varphi [[K(\neg\varphi)](x)]$

16. $\lambda K \lambda \varphi [\neg[K(\neg\varphi)](x)]$

17. $\lambda x [P(x) \wedge Q(x)]$

18. $\lambda y \lambda x [P(x) \wedge Q(x, y)](x)$

19. $[\lambda Q Q(x, y)(\lambda x P)]$

20. $\lambda y Q(\neg ix P(x), y)$

#### Exercice 5.11

Quels types peut-on proposer pour $Q$ et $A$ dans chaque expression suivante pour faire en sorte que l'expression soit à chaque fois de type $t$ ? Il y a à chaque fois plusieurs réponses possibles.

1. $Q(A)$

2. $[\neg Q(A)]$

3. $[\neg Q(A)]$

Montrez qu'il n'est pas possible de faire la même chose pour $Q(Q)$.

### 5.3.3 Sémantique de LO typé

#### 5.3.3.1 Calcul de toute sorte de dénotations

Dans les chapitres précédents, les règles d'interprétation sémantique de LO consistaient essentiellement à spécifier le calcul de la dénotation des *formules*, i.e. d'établir leurs conditions de vérité. À présent les expressions bien formées de LO ne sont plus seulement des *formules*, mais des expressions d'une extrême variété de types. Et n'oublions pas que les types, par définition, prévoient la nature de la dénotation des expressions qu'ils catégorisent. Il va donc nous être utile de pouvoir identifier simplement la nature des dénotations associées à chaque type. Pour cela il nous suffira de regrouper
dans un même ensemble toutes les dénotations possibles correspondant à un type donné,
en nommant cet ensemble suivant la convention suivante.

**Notation 5.5 : Domaines de dénotation**

L'ensemble des dénotations possibles d'une expression de type *a* est noté $\mathcal{D}_a$.

Ainsi, si $\alpha \in \mathfrak{M}e_a$, alors $\llbracket \alpha \rrbracket^{\mathfrak{M}, w, g} \in \mathcal{D}_a$. En clair : si $\alpha$ est de type $a$, sa dénotation se trouve dans $\mathcal{D}_a$. On appelle $\mathcal{D}_a$ le DOMAINE DE DÉNOTATION, ou d'interprétation, de $\alpha$ (ainsi que de $\mathfrak{M}e_a$). Il nous faut ensuite spécifier que vaut $\mathcal{D}_a$ pour tout type $a$, c'est ce que donne la définition 5.12.

**Définition 5.12 : Domaines de dénotation**

Soit un modèle intensionnel $\mathcal{M} = (\mathcal{A}, \mathcal{W}, \mathcal{R}, F)$.

1. $\mathcal{D}_e = \mathcal{A}$;

2. $\mathcal{D}_t = \{0; 1\}$;

3. $\mathcal{D}_{\langle a, b \rangle} = \mathcal{D}_b^{\mathcal{D}_a}$, pour $a \neq s$;

4. $\mathcal{D}_{\langle s, a \rangle} = \mathcal{D}_a^W$.

Les deux premières définitions nous disent que les expressions de type *e* et *t* dénotent respectivement des éléments de $\mathcal{A}$ et des valeurs de vérité. La troisième dit qu'une expression fonctionnelle de type $\langle a, b \rangle$ a pour domaine de dénotation l'ensemble de toutes les fonctions qui vont de $\mathcal{D}_a$ vers $\mathcal{D}_b$. Par exemple, $\mathcal{D}_{\langle e, t \rangle} = \mathcal{D}_t^{\mathcal{D}_e} = \{0; 1\}^{\mathcal{A}}$, c'est-à-dire l'ensemble de toutes les fonctions de $\mathcal{A}$ vers $\{0; 1\}$, ou si l'on préfère l'ensemble de toutes les fonctions caractéristiques de sous-ensembles de $\mathcal{A}$. La quatrième règle traite du cas particulier des types intensionnels $\langle s, a \rangle$, car $\mathcal{D}_s$ n'est pas défini (s n'est pas un type), mais s'il existait, $\mathcal{D}_s$ serait identifié à l'ensemble des indices intensionnels, $\mathcal{W}$.

Comme d'habitude, les expressions de LO sont interprétées par rapport à un modèle intensionnel $\mathcal{M} = (\mathcal{A}, \mathcal{W}, \mathcal{R}, F)$ et une assignation $g$. Il faut dire ici un mot sur $F$ et $g$, ces fonctions qui interprètent respectivement les constantes et les variables qui maintenant peuvent être de n'importe quel type. Cela implique que $F$ et $g$ sont sensibles aux types, elles « savent » dans quel ensemble d'arrivée trouver leurs valeurs pour chaque type de $T^{35}$. Par exemple, pour toute variable $v$ de type $a$, une assignation $g$ saura toujours que les valeurs à lui assigner sont dans $\mathcal{D}_a$.

La définition 5.13 donne les règles d'interprétations de LO typé. Dans ces règles, les crochets introduits par la syntaxe ont été omis pour ne pas surcharger les écritures.

<footnote n="35">³⁵ Et nous le savons aussi. Si l'on tient à rentrer dans les détails techniques, l'ensemble de toutes les assignations possibles par rapport à $\mathcal{M}$ est $\bigcup_{a \in \mathcal{T}} \mathcal{D}_a^{\mathcal{Var}_a}$ et celui de toutes les fonctions d'interprétations possibles est $\bigcup_{a \in \mathcal{T}} (\mathcal{D}_a^{\mathcal{Cns}_a})^W$.</footnote>
**Définition 5.13 : Sémantique de LO typé**

Soit un modèle intensionnel $\mathcal{M} = (\mathcal{A}, \mathcal{W}, \mathcal{R}, F)$ et une assignation $g$.

(Sém.1) si $\alpha \in Cns, \llbracket \alpha \rrbracket^{\mathcal{M}, w, g} = F(w, \alpha);$

$$
\text{si } \alpha \in \mathcal{V}ar, \llbracket \alpha \rrbracket^{\mathcal{M}, w, g} = g(\alpha);
$$

$$
(S\text{ém.2}) \quad \llbracket \alpha(\beta) \rrbracket^{\mathcal{M}, w, g} = \llbracket \alpha \rrbracket^{\mathcal{M}, w, g} (\llbracket \beta \rrbracket^{\mathcal{M}, w, g});
$$

$$
(S\text{ém.3}) \quad [\alpha = \beta]^{\mathcal{M}, w, g} = 1 \text{ ssi } [\alpha]^{\mathcal{M}, w, g} = [\beta]^{\mathcal{M}, w, g};
$$

$$
\begin{align*}
(\text{Sém.4}) \quad \llbracket \neg \varphi \rrbracket^{\mathcal{M}, w, g} &= 1 \text{ ssi } \llbracket \varphi \rrbracket^{\mathcal{M}, w, g} = 0; \\
\llbracket \varphi \wedge \psi \rrbracket^{\mathcal{M}, w, g} &= 1, \text{ ssi } \llbracket \varphi \rrbracket^{\mathcal{M}, w, g} = 1 \text{ et } \llbracket \psi \rrbracket^{\mathcal{M}, w, g} = 1; \\
\llbracket \varphi \vee \psi \rrbracket^{\mathcal{M}, w, g} &= 1, \text{ ssi } \llbracket \varphi \rrbracket^{\mathcal{M}, w, g} = 1 \text{ ou } \llbracket \psi \rrbracket^{\mathcal{M}, w, g} = 1; \\
\llbracket \varphi \rightarrow \psi \rrbracket^{\mathcal{M}, w, g} &= 1, \text{ ssi } \llbracket \varphi \rrbracket^{\mathcal{M}, w, g} = 0 \text{ ou } \llbracket \psi \rrbracket^{\mathcal{M}, w, g} = 1; \\
\llbracket \varphi \leftrightarrow \psi \rrbracket^{\mathcal{M}, w, g} &= 1, \text{ ssi } \llbracket \varphi \rrbracket^{\mathcal{M}, w, g} = \llbracket \psi \rrbracket^{\mathcal{M}, w, g};
\end{align*}
$$

$$
(S\text{ém.5}) \quad \llbracket [n] \varphi \rrbracket^{\mathcal{M}, w, g} = 1 \text{ ssi pour tout } w' \in \mathcal{W} \text{ t.q. } w R_{g(n)} w', \llbracket \varphi \rrbracket^{\mathcal{M}, w', g} = 1;
$$

$$
(\text{Sém.5}) \quad \llbracket (n)\varphi \rrbracket^{\mathcal{M}, w, g} = 1 \text{ ssi il existe } w' \in \mathcal{W} \text{ t.q. } w R_{g(n)} w' \text{ et } \llbracket \varphi \rrbracket^{\mathcal{M}, w', g} = 1;
$$

\text{(Sém.6)} si $v \in \mathcal{V}ar_a$, alors :
$$ \llbracket \forall v\varphi \rrbracket^{\mathcal{M}, w, g} = 1 \text{ ssi pour tout } x \in \mathcal{D}_a, \llbracket \varphi \rrbracket^{\mathcal{M}, w, g[x/v]} = 1; $$
$$ \llbracket \exists v\varphi \rrbracket^{\mathcal{M}, w, g} = 1 \text{ ssi il existe } x \in \mathcal{D}_a \text{ t.q. } \llbracket \varphi \rrbracket^{\mathcal{M}, w, g[x/v]} = 1; $$
$$ \llbracket v\varphi \rrbracket^{\mathcal{M}, w, g} \text{ est défini ssi il existe un unique } x \in \mathcal{D}_a \text{ t.q. } \llbracket \varphi \rrbracket^{\mathcal{M}, w, g[x/v]} = 1 \text{ ; alors } \llbracket v\varphi \rrbracket^{\mathcal{M}, w, g} = x; $$

$$
(S\text{ém.7}) \text{ si } \alpha \in \mathcal{M}E_a \text{ et } v \in \mathcal{V}ar_b, \text{ alors : } \llbracket \lambda v\alpha \rrbracket^{\mathcal{M}, w, g} \text{ est la fonction de } \mathcal{D}_a^{\mathcal{D}_b} \text{ qui pour tout } x \in \mathcal{D}_b \text{ donne } x \mapsto \llbracket \alpha \rrbracket^{\mathcal{M}, w, g[x/v]};
$$

$$
(S\text{ém.8}) \text{ si } \alpha \in \mathcal{M}E_a, \text{ alors } \llbracket \wedge \alpha \rrbracket^{\mathcal{M}, w, g} \text{ est la fonction de } \mathcal{D}_a^W \text{ qui pour tout } w' \in \mathcal{W} \\
\text{donne } w' \mapsto \llbracket \alpha \rrbracket^{\mathcal{M}, w', g};
$$

$$
(S\text{ém.9}) \quad [\neg \alpha]^M_{,w,g} = [\alpha]^M_{,w,g}(w).
$$

La règle (Sém.2) de l'application fonctionnelle reprend la définition 5.6 vue en §5.2.2.2 ;
et la règle (Sém.7) de la λ-abstraction reprend la définition 5.4 de §5.2.1.2. Remarquons
aussi, en passant, que si φ et ψ sont de type t, alors [ φ = ψ ] et [ φ ↔ ψ ] signifient
exactement la même chose, ce qui rend le connecteur ↔ redondant. Nous pourrions donc
nous en passer, mais nous le conserverons car il est très usuel en sémantique formelle.

La sémantique de LO typé nous permet aussi de confirmer sous forme de théorèmes
des observations que nous avons faites dans les pages qui précèdent (le terme objet est
employé ici dans son acceptation la plus large pour désigner tout ce que l'on peut trouver
dans le modèle, y compris donc des fonctions).
**Théorème 5.3**

Toute expression de type $\langle a, t \rangle$ dénote la fonction caractéristique d'un ensemble d'objets, et plus précisément d'un sous-ensemble de $\mathcal{D}_a$.

La démonstration est immédiate du fait que $\mathcal{D}_{\langle a,t \rangle} = \{0; 1\}^{\mathcal{D}_a}$. De même, le théorème 5.4 s'appuie sur le fait qu'une relation binaire peut toujours se formaliser comme une fonction à deux arguments qui prend ses valeurs dans $\{0; 1\}$.

**Théorème 5.4**

Toute expression de type $\langle a, \langle a, t \rangle \rangle$ dénote une RELATION (binaire) sur les objets de $\mathcal{D}_a$.

Et plus généralement, une expression de type $\langle a, \langle b, t \rangle \rangle$ dénote une relation (binaire) entre les objets de $\mathcal{D}_a$ et ceux de $\mathcal{D}_b$.

Ces théorèmes s'incarnent directement dans notre notation $\llbracket \rrbracket_c$ que nous définissons formellement à présent :

**Notation 5.6 : $\llbracket \rrbracket_c$**

1. Si $\alpha$ est de type $\langle a, t \rangle$, $\llbracket \alpha \rrbracket_c^{M,w,g} = \{x \in \mathcal{D}_a \mid \llbracket \alpha \rrbracket_c^{M,w,g}(x) = 1\}$.

2. Si $\alpha$ est de type $\langle a, \langle b, t \rangle \rangle$, $\llbracket \alpha \rrbracket_c^{M,w,g} = \{\langle x, y \rangle \in \mathcal{D}_b \times \mathcal{D}_a \mid \llbracket \alpha \rrbracket_c^{M,w,g}(y)(x) = 1\}$.

3. Si $\varphi$ est de type t, $\llbracket \varphi \rrbracket_c^{M,g} = \{w \in W \mid \llbracket \varphi \rrbracket_c^{M,g}(w) = 1\}$.

### 5.3.3.2 Entraînement à la lecture des $\lambda$-termes

L'expressivité de notre langage objet a considérablement décuplé. Il n'est pas inutile de prendre le temps ici d'apprivoiser la multitude des nouvelles écritures pour se familiariser avec leurs significations. Nous allons passer en revue une série de $\lambda$-termes et, pour chaque exemple, je donnerai une description formelle de sa dénotation dans un modèle (a) et une glose plus informelle et rapide de sa lecture « syntaxique » (b).

(32) $\lambda x[\mathit{dormir}(x) \wedge \mathit{ronfler}(x)]$ est de type $\langle e, t \rangle$

a. Il dénote une fonction de $\{0; 1\}^A$ qui à chaque individu de $A$ associe 1 ssi cet individu dort et ronfle dans le monde d'évaluation. En termes ensemblistes, c'est l'ensemble de tous ceux qui dorment et ronflent dans le monde d'évaluation.
b. C'est une expression qui attend un argument de type e pour produire la formule $[\mathit{dormir}(x) \wedge \mathit{ronfler}(x)]$ (quand x aura la valeur de cet argument).

(33) $\lambda\varphi\neg\varphi$ est de type $\langle t, t\rangle$

a. Il dénote une fonction de $\{0; 1\}^{\{0;1\}}$ qui renvoie 1 pour 0 et 0 pour 1. En termes ensemblistes, c'est donc l'ensemble $\{0\}$.

b. C'est une expression qui attend une formule et retourne sa négation.

(34) $\lambda x x$ est de type $\langle e, e \rangle$

a. Il dénote une fonction de $\mathcal{A}^{\mathcal{A}}$ qui renvoie tel quel l'argument qu'on lui donne. C'est ce que l'on appelle la fonction d'identité (sur $\mathcal{A}$).

b. C'est une expression qui attend un argument de type e et redonne cet argument.

(35) $\lambda x a$ est de type $\langle e, e \rangle$

a. Il dénote une fonction de $\mathcal{A}^{\mathcal{A}}$ qui renvoie toujours ALICE, quel que soit son argument. C'est ce que l'on appelle une fonction constante.

b. C'est une expression qui attend un argument de type e mais qui n'en tient pas compte et retourne toujours a$^{36}$.

(36) $\lambda P \exists x [P(x)]$ est de type $\langle \langle e, t \rangle, t \rangle$

a. Il dénote une fonction de $\{0; 1\}^{\{(0;1)\}^A}$ qui à la fonction caractéristique de tout sous-ensemble de $\mathcal{A}$ associe le résultat 1 ssi ce sous-ensemble contient au moins un élément. En termes ensemblistes, c'est l'ensemble de tous les sous-ensembles non vides de $\mathcal{A}$.

b. C'est une expression qui attend un prédicat unaire comme argument et produit la formule $\exists x [P(x)]$ (quand P vaut ce prédicat).

Profitons-en ici pour mentionner différentes façons – alternatives mais équivalentes – d’envisager conceptuellement l’interprétation de $\lambda$-termes à plusieurs arguments (i.e. avec plusieurs $\lambda$). Ils peuvent d’abord bien sûr s’interpréter comme des fonctions à plusieurs arguments, mais aussi comme des relations entre plusieurs objets, ou encore comme une fonction à un argument qui, à partir de cet argument, construit un nouvel objet (qui peut lui-même être une fonction, un ensemble, une relation). Cette dernière vision, plus constructive, peut parfois aider à décodeur les $\lambda$-termes, comme le montrent les exemples suivants.

(37) $\lambda x \lambda P [P(x)]$ est de type $\langle e, \langle\langle e, t \rangle, t \rangle\rangle$

a. Il dénote une fonction de $(\{0; 1\}^{\{(0;1)\}^A})^A$ qui prend en argument un individu de $\mathcal{A}$ (cf. $x$) et renvoie une fonction qui prend en argument la fonction caractéristique d'un ensemble d'individus (cf. $P$) et renvoie finalement 1 ssi le premier individu ($x$) appartient à cet ensemble ($P$). En termes ensemblistes,

<footnote n="36">36 Ce $\lambda$-terme n'est pas, en soi, équivalent à la constante a, car il est fonctionnel – de type $\langle e, e \rangle$ – alors que la constante est de type e. Par $\beta$-réduction $[\lambda x a(b)]$ se simplifie en a, mais il aura fallu donner l’argument b, même si celui-ci est finalement escamoté. Bien sûr, dans une démarche d’analyse sémantique, un tel $\lambda$-terme ne nous sera pas vraiment utile (mais le fait est qu’il existe dans LO).</footnote>
c'est une relation entre un individu et un ensemble et qui établit que l'individue est un élément de l'ensemble ; c'est tout simplement la relation d'appartenance $\in$. On peut également voir cela comme une fonction qui prend en argument un individu et renvoie l'ensemble de tous les sous-ensembles de $\mathcal{A}$ qui contiennent cet individu ($\lambda P[P(x)]$).

b. C'est une expression qui attend un argument de type e puis un prédicat unaire, et qui applique ce prédicat à cet argument. Elle ne fait que réaliser l'application fonctionnelle.

$$ (38) \quad \lambda P \lambda x [P(x)] \text{ est de type } \langle\langle e, t \rangle, \langle e, t \rangle \rangle $$

a. Il dénote une fonction de $(\{0; 1\}^{\mathcal{A}})^{(0;1)^{\mathcal{A}}}$ qui prend en argument la fonction caractéristique d'un ensemble d'individus (cf. P) et renvoie une fonction qui prend en argument un individu (cf. x) et renvoie 1 ssi cet individu (x) appartient à cet ensemble (P). En termes ensemblistes, c'est la relation dite de « possession » entre un ensemble et un individu, et qui peut se noter $\exists$. On peut le voir aussi comme une fonction qui prend en argument un ensemble d'individus et qui, en résultat, reconstruit (la fonction caractéristique de) ce même ensemble (puisque $\lambda x [P(x)]$ dénote l'ensemble de tous les individus qui appartiennent à P). C'est la fonction d'identité sur les ensembles (d'individus de $\mathcal{A}$).

b. Comme la précédente, c'est une expression qui réalise l'application fonctionnelle entre un prédicat (unaire) et un argument (de type e).

Il est important de noter que même s'ils donnent à l'arrivée le même résultat, les $\lambda$-termes (37) et (38) ne sont pas sémantiquement équivalents. Déjà parce qu'ils n'ont pas le même type, et donc parce qu'ils ne « travaillent » pas de la même façon : ils attendent leurs arguments dans l'ordre inverse. Nous nous en rendons compte facilement en leur fournissant seulement leur premier argument. Pour (37), nous aurons par exemple $[\lambda x \lambda P [P(x)](a)]$ qui se $\beta$-réduit en $\lambda P [P(a)]$, i.e. l'ensemble de tous les ensembles qui contiennent ALICE (ou plus informellement, l'ensemble de tous les prédicats que vérifie a). Pour (38), nous aurons par exemple $[\lambda P \lambda x [P(x)](\lambda y \text{ dormir}(y))]$ qui se $\beta$-réduit en $\lambda x [\lambda y \text{ dormir}(y)(x)]$ puis en $\lambda x \text{ dormir}(x)$, i.e. la même chose que $\lambda y \text{ dormir}(y)$.

$$ (39) \quad \lambda x [x = a] \text{ est de type } \langle e, t \rangle $$

a. Il dénote une fonction de $\{0; 1\}^{\mathcal{A}}$ qui à chaque individu de $\mathcal{A}$ associe 1 ssi cet individu est ALICE. En termes ensemblistes, c'est le singleton $\{\text{ALICE}\}$.

b. C'est une expression qui attend un argument de type e et produit une formule qui identifie cet argument à a.

$$ (40) \quad \lambda x \lambda y [x = y] \text{ est de type } \langle e, \langle e, t \rangle \rangle $$

a. Il dénote une fonction de $(\{0; 1\}^{\mathcal{A}})^{\mathcal{A}}$ qui prend en arguments un premier individu, puis un second et retourne 1 ssi il s'agit deux fois du même individu. C'est la relation d'identité (sur $\mathcal{A}$). En termes ensemblistes, on peut également le voir comme une fonction qui pour tout individu x de $\mathcal{A}$ construit le singleton $\{x\}$ ($\lambda y [x = y]$).
b. C'est une expression qui attend deux arguments de type $e$ et retourne la formule qui dit que ces deux arguments ont la même dénotation.

Examinons enfin quelques expressions qui contiennent l'opérateur $^$.

(41) $\lambda x[^{\text{dormir}}(x)]$ est de type $\langle e, \langle s, t \rangle \rangle$

a. Il dénote une fonction de $\{0; 1\}^W \mathcal{A}$ qui à chaque individu de $\mathcal{A}$ associe (la fonction caractéristique de) l'ensemble de tous les mondes où cet individu dort.

b. C'est une expression prédicative qui attend un argument de type $e$ et renvoie une proposition (qui dit que celui qu'on aura donné comme valeur pour $x$ dort).

(42) $^\lambda x \text{ dormir}(x)$ est de type $\langle s, \langle e, t \rangle \rangle$

a. Il dénote une fonction de $\{0; 1\}^\mathcal{A} \mathcal{W}$ qui à tout monde possible $w$ associe (la fonction caractéristique de) l'ensemble de tous ceux qui dorment dans $w$.

b. Ce n'est pas une expression prédicative. Elle n'attend pas par elle-même d'argument dans LO ; elle dénote la propriété de dormir.

Si nous voulons saturer la position $x$ de (42) en donnant un argument, nous devons d'abord la « désintensionnaliser » au moyen de $^v$, en écrivant par exemple $[^v\lambda x \text{ dormir}(x)(a)]$. En toute rigueur, nous n'avons pas le droit d'effectuer la $\beta$-réduction sur cette application fonctionnelle (car elle ne commence pas par $[\lambda]$, mais nous avons vu dans le théorème 4.1 (p. 243) que $[^v\lambda x \text{ dormir}(x)]$ est équivalent à $\lambda x \text{ dormir}(x)$ ; nous pouvons donc simplifier en $[\lambda x \text{ dormir}(x)(a)]$ puis $\text{dormir}(a)$.

### 5.3.3.3 Les $\lambda$-conversions

Nous avons vu en §5.2 que le $\lambda$-calcul s'accompagne d'une série de règles de simplifications, fondées sur des équivalences sémantiques, et que l'on regroupe sous le nom de $\lambda$-conversions. Nous avons assez longuement examiné et discuté celle qui nous est la plus utile : la $\beta$-réduction. Elle simplifie les applications fonctionnelles en – pour résumer – remplaçant la variable $\lambda$-abstraite par l'argument donné au $\lambda$-terme. Sa définition est redonnée ci-dessous, en précisant les situations où la $\beta$-réduction n'est pas licite.

**Définition 5.14 : $\beta$-réduction**

L'expression $[\lambda v\alpha(\gamma)]$ est équivalente à et remplaçable par $[\gamma/v]\alpha$, sauf :

- si une variable libre dans $\gamma$ devait se retrouver liée dans $\alpha$, et

- si $\gamma$ devait se retrouver dans la portée d'un opérateur intensionnel ($[n]$, $\langle n \rangle$ ou $^\lambda$) de $\alpha$.

Le premier cas de figure qui interdit la $\beta$-réduction a déjà été présenté en §5.2.3. Le second procède du même principe (et cela apparaîtra plus clairement en §5.4), mais il ne se
contourne pas aussi facilement que le premier (pour le moment). Il interdit d'effectuer la
β-réduction si l'argument du λ-terme atterrit dans la portée d'un opérateur intensionnel,
et cela se comprend facilement : dans [[λvα(y)]]<sup>M</sup>, w,g, y est interprété dans le monde w
(cf. (Sém.2)); mais si dans α, v est dans la portée de [n], ⟨n⟩ ou ^, alors après β-réduction
γ serait interprété par rapport à d'autres mondes que w et il n'aurait donc pas la même
dénotation qu'avant la β-réduction. Pour s'en convaincre, regardons les formules (43a)
et (43b), que nous traduirons ici simplement par *il est nécessaire que le Pape soit chauve*
(sans s'interroger d'avantage sur le type de modalité en question).

(43) a. [λx[n]chauve(x)(iy pape(y))]

b. [n]chauve(iy pape(y))

(43b) serait le résultat de la β-réduction de (43a). Mais si nous les interprétons par rapport
à un monde w, alors dans (43a), iy pape(y) dénote l'unique individu qui est Pape dans
w ; appelons-le François. Et (43a) sera vraie dans w ssi François est chauve dans tous les
mondes accessibles à w. Or (43b) est vraie dans w ssi, dans tout monde w' accessible
à w, celui qui est Pape dans w' est chauve dans w'. Les deux formules ne sont donc
pas équivalentes ; (43b) pourrait approximativement se paraphraser en si quelqu'un, quel
qu'il soit, est le Pape, alors nécessairement il sera chauve, alors que (43a) parle du seul Pape
du monde d'évaluation.

À titre informatif, je présente ici les deux autres règles de λ-conversion courantes, la η-réduction<sup>37</sup> et l'α-équivalence. Nous avons déjà rencontré la η-réduction quand nous avions constaté que λx dormir(x) et dormir étaient équivalents.

**Définition 5.15 : η-réduction**

Si $v$ n'est pas libre dans $\alpha$, l'expression $\lambda v[\alpha(v)]$ est équivalente à et remplaçable par $\alpha$.

La définition prend garde d'exclure les cas où $\lambda v$ lie aussi des occurrences de $v$
dans $\alpha$. En effet $\lambda x[[\text{regarder}(y)]](x)$ (c'est-à-dire $\lambda x \text{ regarder}(x, y)$, qui correspond
au GV \textit{regarde }y) équivaut à $[\text{regarder}(y)]$, mais $\lambda x[[\text{regarder}(x)]](x)$ (c'est-à-dire
$\lambda x \text{ regarder}(x, x)$, qui correspond au GV \textit{se regarde}) n'équivaut pas à $[\text{regarder}(x)]$ (re-
garde $x)$. C'est parce que $x$ est libre dans $[\text{regarder}(x)]$.

L'α-équivalence a déjà été rencontrée également. Elle dit simplement que l'on peut
renommer sans risque la variable liée par un λ. Ainsi λx dormir(x) peut être remplacé
par λy dormir(y), et λyλx regarder(x, y) par λxλy regarder(y, x)<fnref n="38" />.

<footnote n="37">³⁷ Rappel : η est la lettre grecque êta.</footnote>

<footnote n="38">38 Précisions cependant qu’en toute rigueur, cette dernière substitution se fait avec plusieurs étapes inter-
médiaires : par exemple λyλx regarder(x, y) est remplacé par λyλz regarder(z, y), qui est remplacé par
λxλz regarder(z, x), qui est remplacé par λxλy regarder(y, x). Ceci afin d’éviter de tomber par exemple
sur λyλy regarder(y, y).</footnote>
**Définition 5.16 : α-équivalence**

Soit $u$ et $v$ deux variables de même type. Si $u$ n'apparaît pas dans $\alpha$, alors l'expression $\lambda v\alpha$ est équivalente à et remplaçable par $\lambda u[u/v]\alpha$.

### 5.3.3.4 Conséquence logique et monotonie

Au chapitre 4, nous avons défini l'équivalence sémantique pour n'importe quelle expression de LO (déf. 4.17 p. 253). Cette définition vaut toujours mais à présent nous pouvons également généraliser la définition de la conséquence logique à d'autres expressions que les seules formules de type $t$. Par exemple, il peut être utile de reconnaître une conséquence logique entre des prédicats de type $\langle e, t \rangle$ ou $\langle \langle e, t \rangle, t \rangle$. En effet lorsque nous concluons que *Jim est un éléphant* $\models$ *Jim est un animal* c'est bien parce que nous savons qu'il y a une conséquence logique du prédicat *être un éléphant* vers le prédicat *être un animal*, autrement dit *éléphant* $\models$ *animal*. Avec LO typé nous pouvons assez facilement étendre la définition de $\models$ pour de telles expressions en partant de la définition de base (déf. 4.16 p. 253) que nous manipulons depuis quelque temps. Rappelons cette définition, en nous limitant ici au cas d'une conséquence entre seulement deux formules : si $\varphi$ et $\psi \in M_E$, alors $\varphi \models \psi$ ssi pour tout modèle $M$, tout monde $w$ et toute assignation $g$ tels que $M, w, g \models \varphi$, on a aussi $M, w, g \models \psi$.

Il faut cependant d'abord prendre une petite précaution : $\models$ ne peut pas s'appliquer à tous les types de $T$. Par exemple, cela n'aurait pas beaucoup de sens de définir la relation entre des expressions de type $e$. Nous devons nous limiter à un sous-ensemble de $T$, que nous appellerons l'ensemble des types booléens$^{39}$, $T_B$, défini de la manière suivante :

**Définition 5.17 : Types booléens**

$T_B$ est le plus petit sous-ensemble de $T$ tel que :

1. $t \in T_B$;

2. si $a \in T$ et $b \in T_B$, alors $\langle a, b \rangle \in T_B$.

Les expressions de type booléen sont ces expressions qui lorsqu'on leur fournit tous leurs argument finissent par donner un résultat de type $t$.

Maintenant nous pouvons définir la conséquence logique pour tous ces types en procédant de manière récursive. Le cas initial est celui de la conséquence entre expressions de type $t$ qui correspond à la définition de base rappelée ci-dessus. Ensuite pour tout type booléen complexe, $\models$ est défini comme suit :

<footnote n="39">39 Attention, il ne s'agit pas ici de ce qui est couramment appelé *type booléen* en logique et en informatique et qui renvoie simplement à notre type $t$. Ce que je désigne ici par types booléen est également appelé, dans la littérature anglophone, *conjoinable types*, que nous pourrions traduire (un peu maladroitement) par « types conjoignables ». Cf. §6.6.1.</footnote>
**Définition 5.18 : Conséquence logique généralisée**

Soit $\langle a, b \rangle \in T_B$, $\alpha$ et $\beta \in M_E\langle a, b \rangle$ et $x \in \mathcal{V}ar_a : \alpha \models \beta$ ssi $\alpha(x) \models \beta(x)$.

L'idée est que pour vérifier que $\alpha \models \beta$ nous saturons progressivement les arguments des deux expressions. Nous savons que $\alpha(x)$ et $\beta(x)$ sont de type $b$ qui est lui aussi un type booléen, en vertu de la définition 5.17 ; nous pouvons alors réappliquer « en boucle » la vérification de $\models$ sur ces deux nouvelles expressions jusqu'à ce que nous arrivions au type $t$ qui est pris en charge par la définition de base. Reprenons notre exemple. Pour vérifier que éléphant $\models$ animal, il nous faut vérifier que éléphant($x$) $\models$ animal($x$). Nous sommes maintenant avec deux expressions de type $t$ qui contiennent toutes les deux la variable libre $x$. Nous appliquons alors la définition 4.16 et cette définition nous demande d'envisager toutes les assignations possibles $g$. C'est précisément cela qui garantit la cohérence de la conséquence entre prédicats. Car éléphant($x$) $\models$ animal($x$) dit que pour toute valeur possible de $x$, si $x$ est un éléphant, alors $x$ est un animal$^{40}$. Et nous savons que cela est vrai$^{41}$, ce qui nous permet de conclure que éléphant $\models$ animal. De la même façon nous pouvons démontrer $\lambda x \, aimer(x, a) \models \lambda x \exists y \, aimer(x, y)$ ou $\lambda y \lambda x \, adorer(x, y) \models \lambda y \lambda x \, aimer(x, y)$.

Bien sûr, on peut aussi définir la conséquence entre prédicats en passant par la relation d'inclusion de leurs dénotations ensemblistes : éléphant $\models$ animal ssi pour tout $M$, $w$ et $g$, $[[\text{éléphant}]_c^{M, w, g} \subseteq [[\text{animal}]_c^{M, w, g}]$. Mais en procédant comme nous l'avons fait, nous montrons que la conséquence entre prédicats s'obtient à partir de la conséquence logique classique entre phrases. Et cette conséquence généralisée nous permet assez facilement de caractériser une propriété notable de certaines expressions et que l'on appelle la MONOTONIE.

**Définition 5.19 : Monotonie**

Soit $a$ et $b \in T_B$, $\gamma \in M_E\langle a, b \rangle$, $\alpha$ et $\beta \in M_E\alpha$.

1. $\gamma$ est MONOTONE CROISSANT ssi : si $\alpha \models \beta$ alors $\gamma(\alpha) \models \gamma(\beta)$.

2. $\gamma$ est MONOTONE DÉCROISSANT ssi : si $\alpha \models \beta$ alors $\gamma(\beta) \models \gamma(\alpha)$.

Ce que la définition dit, c'est que les expressions monotones croissantes conservent à leur propre niveau les conséquences logiques que l'on peut observer au niveau de leur position argumentale, alors que les monotones décroissantes inversent ces conséquences$^{42}$. Et parallèlement, il existe des expressions qui ne sont pas monotones, c'est-à-dire qui « détruisent » les conséquences logiques.

<footnote>$^{40}$ C'est comme si $x$ était globalement liée par un quantificateur universel. Et d'ailleurs éléphant($x$) $\models$ animal($x$) équivaut logiquement à $\forall x[\text{éléphant}(x) \rightarrow \text{animal}(x)]$.</footnote>

<footnote>$^{41}$ En supposant que nous avons à ce sujet un postulat de signification comme ceux de §4.5.3.</footnote>

<footnote>$^{42}$ À cet égard, dans la littérature anglophone, ces propriétés sont également appelées, respectivement, *upward entailing context* et *downward entailing context*. Ici contexte doit être pris dans le sens d'environnement syntactico-sémantique.</footnote>
Les propriétés de monotonie sont sémantiquement pertinentes pour plusieurs raisons. D'abord, avec la définition 5.19, nous pouvons les vérifier formellement dans LO. Mais nous pouvons également, parfois assez facilement, repérer ces propriétés directement dans les énoncés de la langue<sup>43</sup>. Par conséquent, si nous constatons qu'un certain environnement syntactico-sémantique se trouve être monotone (dé)croissant, alors nous saurons que sa traduction correcte dans LO devra aussi satisfaire cette propriété. C'est donc un outil pratique pour nous aider à valider des analyses sémantiques. Pour émettre l'hypothèse qu'un environnement linguistique donné, appelons-le C, est monotone, la méthode est, dans ses grandes lignes, la suivante. D'abord, il faut s'assurer qu'il y a un moyen de traduire C dans LO par une expression fonctionnelle (comme γ dans la déf. 5.19). Ensuite, on considère deux expressions linguistiques A et B dont on sait qu'elles sont en relation de conséquence logique A ⊨ B (parce qu'on sait que A et B se traduisent respectivement par α et β et que α ⊨ β) et qui peuvent s'insérer grammaticalement dans C. Notons C(A) et C(B) l'insertion de A et B dans C. Si, en supposant que C(A) est vrai, on constate que C(B) est nécessairement vrai aussi, alors on peut supposer que C est monotone croissant. Si à l'inverse, en supposant que C(B) est vrai, on constate que C(A) est nécessairement vrai, alors c'est l'hypothèse que C est monotone décroissant que l'on peut envisager. Pour renforcer les conclusions, il est prudent de recommencer le test en variant A et B car la définition 5.19 vaut pour n'importe quels α et β.

Voici quelques exemples. Comme la monotonie croissante ne change pas les conséquences logiques, on considère souvent que c'est un peu un cas par défaut. Illustrons-la tout de même avec la position de complément d'un verbe d'attitude comme *penser* ou *dire*. Nous savons que (44a) ⊨ (44b) (ce sont nos A et B).

(44) a. Alice a la grippe et Bruno a un rhume.

b. Alice a la grippe.

Et nous constatons que (45a) ⊨ (45b). C'est donc un indice pour estimer que *penser* est monotone croissant sur sa position de complément.

(45) a. Charles pense qu'Alice a la grippe et Bruno un rhume.

b. Charles pense qu'Alice a la grippe.

Le cas exemplaire de la monotonie décroissante est celui de la négation ($\lambda\varphi\neg\varphi$, i.e. *il est faux que*). En reprenant (44) nous avons cette fois (46b) ⊨ (46a)<sup>44</sup>.

(46) a. Il est faux qu'Alice a la grippe et Bruno un rhume.

b. Il est faux qu'Alice a la grippe.

De même, les adverbes de quantification *parfois* et *souvent*, employé dans des phrases simples, sont monotones croissants, alors que *rarement* est monotone décroissant. Nous

<footnote n="43"><sup>43</sup> En vérité, pour être tout à fait rigoureux, ce qui est « facile » à démontrer c'est qu'un environnement n'est pas monotone ; il suffit pour cela de trouver un contre-exemple. Pour proposer une hypothèse de monotonie, on peut au mieux procéder par induction en examinant de nombreux exemples variés.</footnote>

<footnote n="44"><sup>44</sup> Et (46a) ⊨ (46b) car (46a) est vrai si Alice a la grippe et Bruno n'a pas de rhume, et dans ce cas (46b) est faux.</footnote>
savons que *boire du whisky* $\models$ *boire de l'alcool*, et nous constatons que (47a) $\models$ (47b) et (48b) $\models$ (48a).

(47) a. Charles boit souvent du whisky.

b. Charles boit souvent de l'alcool.

(48) a. Charles boit rarement du whisky.

b. Charles boit rarement de l'alcool.

Nous verrons d'autres exemples plus illustratifs de monotonie (dé)croissante en §6.5.2. Mais nous pouvons dores et déjà faire une observation intéressante. Il se trouve que dans LO l'implication matérielle $\rightarrow$ est monotone décroissante pour sa position d'antécédent (et monotone croissante pour sa position de conséquent), c'est-à-dire que si $\varphi \models \psi$, alors $[\psi \rightarrow \chi] \models [\varphi \rightarrow \chi]$. On peut trouver en français des exemples de conditionnelles qui semblent confirmer cela, comme (49) où (49a) $\models$ (49b).

(49) a. S'il pleut, la route sera glissante.

b. S'il pleut et qu'il fait nuit, la route sera glissante.

Mais en fait il existe de nombreux contre-exemples comme (50) : (50a) $\not\models$ (50b).

(50) a. Si tu avales du poison, tu meurs.

b. Si tu avales du poison et que tu prends un antidote, tu meurs.

Cela tend à montrer que, comme nous l'avons déjà laisser entendre, l'implication matérielle n'est pas une traduction sémantiquement tout à fait adéquate pour rendre compte des structures conditionnelles en si..., alors... des langues naturelles. C'est pourquoi nous reviendrons sur leur analyse au chapitre 9 (vol. 2)<fnref n="45" />.

Un autre intérêt à considérer la monotonie en sémantique est lié à l'étude de certaines expressions de la langue que l'on appelle les TERMES À POLARITÉ NÉGATIVE (ang. *negative polarity items* ou NPI). Ce sont des expressions comme, entre autres, any et ever en anglais, et jamais, aucun, le moindre, quoi/qui que ce soit, du tout, bézef, croyable, broncher, lever le petit doigt... en français. L'emploi grammatical de ces expressions est régi par des contraintes spécifiques. On observe en effet qu'elles ne peuvent apparaître que dans des « contextes négatifs » ; mais c'est là une caractérisation informelle, car ces contextes ne se résument pas simplement à la portée d'une négation comme ne... pas ou il est faux que ni même à la présence de $\neg$ dans la traduction sémantique. C'est pourquoi il a été proposé<fnref n="46" /> une description plus précise qui identifie ces contextes légitimant les NPI aux

<footnote n="45">⁴⁵ On pourrait arguer, à l'inverse, qu'en fait un locuteur qui asserte (50a) fait un usage abusif de la conditionnelle, que littéralement il dit quelque chose de faux (tout en le présentant comme vrai) et que c'est par un mécanisme de réinterprétation (peut-être pragmatique) que l'on comprendra qu'il s'autorise à négliger des exceptions, etc. Mais ce serait là ce que l'on appelle en sciences une hypothèse *ad hoc*, c'est-à-dire une hypothèse supplémentaire qui vient complexifier l'analyse dans le but principal de sauvegarder la proposition initiale, en l'occurrence ici que les conditionnelles se traduisent par des implications matérielles. Il me semble plus raisonnable au moins d'explorer la piste d'une réanalyse des conditionnelles qui rende compte directement de (50).</footnote>

<footnote n="46">⁴⁶ Cf. notamment Ladusaw (1980).</footnote>
environnements monotones décroissants. C'est ainsi ce qui peut expliquer le contraste
en (51) :

(51) a. *Il fait souvent le moindre effort.

b. Il fait rarement le moindre effort.

Les termes à polarité négative constituent un sujet sémantique particulièrement com-
plexe et une immense littérature leur est consacrée. Nous ne faisons ici qu’effleurer très
grossièrement la question (il existe une variété de sous-catégories de ces termes qui n’ont
pas toutes le même comportement et la monotonie telle que nous l’avons définie ici
ne suffit pas à expliquer entièrement le phénomène : par exemple les antécédents de
conditionnelles ne sont pas monotones décroissants mais ils légitiment les NPI). Mais
cela montre qu’il y a une pertinence à étudier des propriétés telles que la monotonie.
C’est d’ailleurs également corroboré par l’observation que les environnements mono-
tones décroissants (et plus généralement ceux qui légitiment les NPI) ont naturellement
tendance à suspendre les implicatures scalaires<fnref n="47" />. Par exemple en (52a) la disjonction est
interprétée exclusivement par implicature scalaire, alors qu’en (52b) elle est interprétée
inclusivement (donc sans l’implicature) :

(52) a. Je prends souvent un dessert ou du fromage au restaurant (mais pas souvent les deux).

b. Je prends rarement un dessert ou du fromage au restaurant (# mais pas rarement les deux).

Exercice 5.12

Supposons qu’en assimilant les fonctions et les ensembles, nous décidions de représenter
sous forme de prédicats de LO quelques notions de la théorie des ensembles. Sachant que
x est de type e et P et Q de type ⟨e, t⟩, donnez pour chaque prédicat défini ci-dessous un
λ-terme qui lui est équivalent (et qui ne contient pas de constante non logique).

1. $[[\text{élément-de}(x, P)]]^{\mathcal{M}, w, g} = 1 \text{ ssi } [[x]]^{\mathcal{M}, w, g} \in [[P]]^{\mathcal{M}, w, g}_{e}$

2. $[[\text{inclus}(P, Q)]]^{\mathcal{M}, w, g} = 1 \text{ ssi } [[P]]^{\mathcal{M}, w, g}_{e} \subseteq [[Q]]^{\mathcal{M}, w, g}_{e}$

3. $[[\text{disjoint}(P, Q)]]^{\mathcal{M}, w, g} = 1 \text{ ssi } [[P]]^{\mathcal{M}, w, g}_{e} \cap [[Q]]^{\mathcal{M}, w, g}_{e} = \emptyset$

4. $[[\text{intersection}(P, Q)]]^{\mathcal{M}, w, g}_{e} = [[P]]^{\mathcal{M}, w, g}_{e} \cap [[Q]]^{\mathcal{M}, w, g}_{e}$

5. $[[\text{union}(P, Q)]]^{\mathcal{M}, w, g}_{e} = [[P]]^{\mathcal{M}, w, g}_{e} \cup [[Q]]^{\mathcal{M}, w, g}_{e}$

6. $[[\text{vide}(P)]]^{\mathcal{M}, w, g} = 1 \text{ ssi } [[P]]^{\mathcal{M}, w, g}_{e} = \emptyset$

7. $[[\text{singleton}(P)]]^{\mathcal{M}, w, g} = 1 \text{ ssi } [[P]]^{\mathcal{M}, w, g}_{e}$ contient un et un seul élément

8. $[[\text{parties-de}(P)]]^{\mathcal{M}, w, g}_{e} = \mathcal{P}([[P]]^{\mathcal{M}, w, g}_{e})$

<footnote n="47">⁴⁷ Cf. par exemple Horn (1989 : chap. 4).</footnote>
Exercice 5.13

Montague (1973) utilise les « raccourcis » de notation suivants<fnref n="48" /> :

- Si $\gamma \in \mathcal{M} \langle s, \langle a, t \rangle \rangle$ et $\alpha \in \mathcal{M} \mathcal{E}_a$, alors $[\gamma \{\alpha\}]$ vaut pour $[^\gamma \gamma(\alpha)]$;

- Si $\gamma \in \mathcal{M} \mathcal{E} \langle s, \langle a, \langle b, t \rangle \rangle \rangle$, $\alpha \in \mathcal{M} \mathcal{E}_a$ et $\beta \in \mathcal{M} \mathcal{E}_b$, alors $[\gamma \{\beta, \alpha\}]$ vaut pour $[^\gamma \gamma(\beta, \alpha)]$;

- Si $x \in \mathcal{V} \mathcal{a}_a$ et $\varphi \in \mathcal{M} \mathcal{E}_t$, alors $\hat{x}\varphi$ vaut pour $\lambda x\varphi$;

- et $\hat{x}\varphi$ vaut pour $^\lambda \lambda x\varphi$;

- Si $\alpha \in \mathcal{M} \mathcal{E}_e$ et $P \in \mathcal{M} \mathcal{E} \langle s, \langle \langle s, e \rangle, t \rangle \rangle$, alors $\alpha^* \text{ vaut pour } \lambda P [P \{^\alpha \alpha\}]$.

Sachant que $x$ et $a$ sont de type $e$, **citron** de type $\langle e, t \rangle$, **aimer** de type $\langle e, \langle e, t \rangle \rangle$ et $\mathcal{P}$ de type $\langle \langle s, e \rangle, t \rangle$, pour chaque expression ci-dessous, donnez son type et retranscrivez la selon notre syntaxe habituelle de la définition 5.11 (p. 297).

1. $a^*$

2. $\lambda x \, ^\lambda \mathit{aimer}\{a, x\}$

3. $\mathcal{P}[\mathcal{P}\{x\}]$

4. $\hat{x} \mathit{citron}(x)$

5. $\hat{x} \mathit{aimer}(a, x)$

6. $[a^*(^\mathcal{P})]$

Détaillez ce que dénote $a^*$ sachant que $a$ dénote ALICE.

### 5.3.4 Applications

#### 5.3.4.1 Une version plus « catégorique »

Commençons par un peu de vocabulaire. Les constantes logiques de LO ($\neg$, $\wedge$, $\vee$, $\rightarrow$, $\leftrightarrow$, $=$, $\forall$, $\exists$, etc.) sont ce que l'on appelle des symboles **SYNCATÉGORÉMATIQUES**. Par op-position, les constantes non logiques et les variables du langage sont, eux, des symboles **CATÉGORÉMATIQUES**. Un symbole catégorématique est un symbole à qui le système at-tribue une interprétation propre et autonome ; autrement dit $\alpha$ est catégorématique si $[\alpha]^M_{w,g}$ est défini (par la définition 5.13). À l'inverse, un symbole syncatégorématique est un symbole dont l'usage (syntaxique) et l'interprétation sont toujours définis « en compagnie » d'une ou plusieurs autres expressions de LO. Par exemple, $\neg$ est syncatég-ro-mématique parce que $\neg$ en soi n'est pas une expression bien formée de LO (elle n'a pas de type) et que $[\neg]^M_{w,g}$ n'est pas défini. Ce que nous savons interpréter c'est $[\neg\varphi]^M_{w,g}$ : il faut que $\neg$ soit accompagné d'une formule. Les règles (Sém.3-9) de la définition 5.13 peuvent, à cet égard, être appelées les règles d'interprétation syncatégorématiques de LO. Plus un langage contient de symboles syncatégorématiques, plus ses règles syntaxiques et sémantiques sont nombreuses.

Pourtant nous savons bien assigner – au moins informellement – une interprétation à la négation $\neg$: elle consiste à inverser la valeur de vérité de la formule qui suit. D'ailleurs nous avions vu (§2.4.1) que c'est un opérateur vérifonctionnel, ce qui signifie qu'il « dé note » une fonction de vérité, en l'occurrence de $\{0; 1\}^{0;1}$. C'est la fonction (53).

$$ (53) \qquad \begin{array}{c} \begin{array}{c} \boxed{1} \\ \boxed{0} \end{array} \\ \mathrel{\substack{\xleftarrow{1} \\ \xrightarrow{0}}} \end{array} $$

<footnote n="48">⁴⁸ Les notations de Montague ne sont pas exactement celles présentées ici : j'ai procédé aux ajustements appropriés pour rester cohérent avec les conventions utilisées dans ce manuel (définition 5.11) ; en l'occurrence, les crochets $[ \ ]$ ne sont pas placés de la même façon.</footnote>
Or rien ne nous empêche de concevoir dans LO une expression *catégorématique* qui dénote (53). Ce sera une constante de type $\langle t, t \rangle$. Appelons-la **non**. Alors les formules **non**($\varphi$) et $\neg\varphi$ sont exactement équivalentes.

Nous pouvons ainsi donner une version catégorématique de tous les connecteurs vé-
rifonctionnels. Pour les connecteurs binaires, ce seront des constantes de types $\langle t, \langle t, t \rangle \rangle$,
qui prennent leur dénotation dans $(\{0 : 1\}^{0;1})^{0;1}$. Par exemple, pour $\wedge$ nous aurons
la constante **et**, et la formule $[[et(\psi)](\varphi)]$, simplifiable en **et**(φ, ψ), sera équivalente à
$[\varphi \wedge \psi]$. Nous nous débarrasserions alors des règles (Syn.4) et (Sém.4) de LO. Cependant,
nous devrions ajouter par ailleurs une définition qui précise le sens de ces constantes afin
de garantir qu’elles répliquent correctement nos connecteurs vérifonctionnels ; quelque
chose comme (54) (pour chaque constante concernée) :

$$
(54) \quad \text{Quels que soient } \mathcal{M}, w \text{ et } g, \llbracket \text{et} \rrbracket^{\mathcal{M}}, w, g =
\left[
\begin{array}{c@{\quad}c}
\begin{array}{c} 1 \rightarrow \\ 0 \rightarrow \end{array}
&
\left[
\begin{array}{@{}cccc@{}}
1 & \rightarrow & 1 & \\
0 & \rightarrow & 0 & \\
\end{array}
\right] \\[2ex]
\begin{array}{c} 1 \rightarrow \\ 0 \rightarrow \end{array}
&
\left[
\begin{array}{@{}cccc@{}}
1 & \rightarrow & 1 & \\
0 & \rightarrow & 0 & \\
\end{array}
\right]
\end{array}
\right]
$$

Une telle définition en soi ne fait pas partie des règles de la définition 5.13 ; elle est
donnée « en annexe », comme la définition de n'importe quel prédicat, et fonctionne
donc un peu comme un postulat de signification (cf. §4.5.3).

Bien entendu, le gain n'est pas considérable, et les versions catégorématiques de
connecteurs sont présentées ici simplement à titre d'illustration de ce que permet un
langage comme LO typé. Nous continuerons à utiliser nos connecteurs syncatégoréma-
tiques, car nous en avons pris l'habitude et ils offrent des modes d'écritures plus simples
et plus naturelles. Par exemple si la négation phrastique du français peut se traduire en
LO par **non** (ou $\lambda\varphi$ **non**($\varphi$)), nous aurons aussi bon compte à la traduire simplement par
$\lambda\varphi\neg\varphi$ (qui bien sûr dénote aussi la fonction (53)); de même pour la conjonction **et** qui se
traduira par $\lambda\psi\lambda\varphi[\varphi \wedge \psi]$ plutôt que par **et** ou $\lambda\psi\lambda\varphi$ **et**($\varphi, \psi$).

Notons que nous avions déjà discuté, sans le dire, de la « catégorématisation » du sym-
bole = (p. 298) pour constater que ce n'était pas si simple, car on ne pourrait pas assigner
un type unique à la constante qui remplacerait =. Cela montre que les symboles synca-
tégorématiques ont un pouvoir expressif utile et parfois supérieur à celui des constantes
non logiques de LO. De même, nous ne pouvons pas vraiment donner une version caté-
gorématique de $\lambda$. En revanche, nous pouvons le faire pour les quantificateurs et nous
en tirerons profit en §6.5 ; quant à $^$, $\vee$ et les opérateurs modaux, leur cas sera abordé,
d'une certaine manière, *infra* en §5.4.

Notons, pour terminer, qu'une constante catégorématique valant pour l'implication
peut être intéressante d'un point de vue représentationnel (et compositionnel). Appelons-
là **si**; nous aurons intérêt à la définir de telle sorte que $[[si(\varphi)](\psi)]$ soit équivalente à
$[\varphi \to \psi]$. Dans ce cas, nous poserons que son sens est défini par (55).

$$
(55) \quad \text{Quels que soient } \mathcal{M}, w \text{ et } g, \llbracket \mathbf{si} \rrbracket^{\mathcal{M}, w, g} =
\left[
\begin{array}{c@{\quad}c}
\begin{array}{c} 1 \rightarrow \\ 0 \rightarrow \end{array}
&
\left[
\begin{array}{@{}cccc@{}}
1 & \rightarrow & 1 & \\
0 & \rightarrow & 0 & \\
\end{array}
\right] \\[2ex]
\begin{array}{c} 1 \rightarrow \\ 0 \rightarrow \end{array}
&
\left[
\begin{array}{@{}cccc@{}}
1 & \rightarrow & 1 & \\
0 & \rightarrow & 0 & \\
\end{array}
\right]
\end{array}
\right]
$$
Mieux vaudra alors éviter d'appliquer la règle de suppression des crochets (qui produit la formule $si(\psi, \varphi)$ peu intuitive); la notation [[$si(\varphi)](\psi)$] (éventuellement simplifiée en $si(\varphi)(\psi)$) montre en effet que si est une traduction naturelle du subordonnant conditionnel si du français, car nous voyons que si prend en premier argument la subordonnée conditionnelle $\varphi$ (qu'introduit si) puis en second argument la principale $\psi$. C'est ainsi plus proche de la structure syntaxique d'une phrase conditionnelle$^{49}$, et c'est même très similaire, dans l'aspect « graphique », de ce nous proposerons au chapitre 9 (vol. 2) pour une analyse précise de ce type de phrases (où nous verrons que l'implication matérielle est en fait mal appropriée).

### 5.3.4.2 Lecture de re des expressions référentielles

Au chapitre précédent (§4.4.3.3), nous avons vu comment représenter sémantiquement la lecture de dicto d'une expression référentielle. Pour Œdipe₁ voulait épouser sa₁ mère, la traduction est (56), où le GN apparaît dans la portée de l'opérateur d'intensionnalité ^ :

(56) **vouloir**(*œ*, ^épouser(*œ*, *ry* mère(*y*, *œ*))

Nous avons également vu que l'analyse de la lecture *de re* était plus problématique car nous n'avions pas d'endroit, hors de la portée de ^, où insérer *ry* mère(*y*, *œ*). Le λ-calcul résout ce problème. La traduction (57) nous donne les conditions de vérité de la phrase avec l'interprétation *de re* du GN.

(57) [$\lambda x$ **vouloir**(*œ*, ^épouser(*œ*, *x*))(*ry* mère(*y*, *œ*)]

La $\beta$-réduction n'est pas autorisée ici car l'argument *ry* mère(*y*, *œ*) se retrouverait dans la portée de ^ (cf. §5.3.3.3); (57) ne se ramène donc pas à (56). Et les deux formules ne sont pas équivalentes. Comme nous l'avions vu, ^épouser(*œ*, *ry* mère(*y*, *œ*)) dénote l'ensemble de tous les mondes dans lesquels Œdipe épouse sa mère; d'un monde à l'autre, celle qui est la mère d'Œdipe peut être une femme différente, mais dans chacun de ces mondes, Œdipe l'épouse. Ainsi (56) est vraie dans un monde w ssi Œdipe souhaite que cet ensemble de mondes contienne w.

En revanche dans (57), l'objet de **vouloir** est la proposition ^épouser(*œ*, *x*), qui dénote l'ensemble de tous les mondes dans lesquels Œdipe épouse *x*. L'identité de *x* (i.e. sa dénotation) dépend de l'assignation *g*, mais ce sera le même individu pour tous les mondes de la proposition. Par exemple, si $g(x) = \text{JOCASTE}$, alors ^épouser(*œ*, *x*) dénotera l'ensemble des mondes où Œdipe épouse Jocaste (qu'elle soit ou non sa mère dans ces mondes). Et **vouloir**(*œ*, ^épouser(*œ*, *x*)) est vraie dans w ssi Œdipe veut épouser *x* dans w. Ensuite par $\lambda$-abstraction, $\lambda x$ **vouloir**(*œ*, ^épouser(*œ*, *x*)) dénote dans w la fonction caractéristique de l'ensemble de tous les individus qu'Œdipe veut épouser dans w. À cette fonction, (57) donne l'argument *ry* mère(*y*, *œ*). Donc en l'interprétant dans w, (57) sera vraie ssi la dénotation dans w de *ry* mère(*y*, *œ*) (c'est-à-dire celle qui est véritablement la mère d'Œdipe dans w) appartient à l'ensemble des personnes qu'Œdipe veut épouser

<footnote>$^{49}$ Cependant, rien ne nous empêche de conserver le symbole $\rightarrow$ en posant que si se traduit par le $\lambda$-terme $\lambda\varphi\lambda\psi[\varphi \rightarrow \psi]$.</footnote>