• Aucun résultat trouvé

En plus des phrases déclaratives simples examinées jusqu’ici, la grammaire deCurtest suf-fisamment riche pour pouvoir reconnaître des phrases comportant des coordinations. Ainsi, les phrases suivantes sont reconnues :

1. Vincent or Mia dances ; 2. Every man or woman dances ; 3. Mia dances or smokes.

Tous ces exemples utilisent la disjonction, mais des exemples similaires utilisant la conjonc-tion sont également reconnus. Par ailleurs, il est important de remarquer que chacun de ces exemples fait une utilisation différente de la coordination. Plus précisément, dans chacun des exemples, ce sont des constituants syntaxiques différents qui sont coordonnés. Dans la phrase 1 la conjonction coordonne des groupes nominaux, tandis qu’elle coordonne des noms dans la phrase 2 et des groupes verbaux dans la phrase 3.

DansCurt, le support des coordinations est entièrement lexicalisé. En effet, dans le fichier semLexLambda.pldeCurt, nous pouvons trouver les représentations des coordinations. Elles sont définies comme suit :

semLex(coord,M):-M = [type:conj,

sem:lam(X,lam(Y,lam(P,and(app(X,P),app(Y,P)))))]; M = [type:disj,

sem:lam(X,lam(Y,lam(P,or(app(X,P),app(Y,P)))))].

En d’autres termes, la coordination conjonctive « and » est représentée par le terme

λXY P.(XP)∧(Y P), tandis que la coordination disjonctive « or » est représentée par leλ -termeλXY P.(XP)∨(Y P). Nous aimerions donc ajouter au lexique deNessieune famille fermée coord comportant deux lemmes conj et disj dont les représentations sémantiques sont celles que nous venons de donner. Cependant, pour y parvenir, nous devons faire en sorte que les termes représentant les coordinations puissent être typés, sans quoi ils seront refusés par Nessie. Si l’on noteτ(V)le type d’une variableV, alors le type des deux termes représentant les coordinations peut s’écrire comme τ(X) → τ(Y) → τ(P) → t, oùt représente comme nous l’avons déjà vu le type des valeurs booléennes. Mais que valent τ(X), τ(Y) et τ(P)? Un examen plus attentif des définitions des coordinations montre que, dans les deux cas,X et

Y sont des fonctions prenantP en argument et renvoyant des valeurs de type t, ce qui peut se traduire par les équations de types suivantes :

τ(X) =τ(P) →tetτ(Y) = τ(P) →t. En posantτ(P) = α, nous pouvons donc réécrire le type des termes représentant les coordinations de la façon suivante :

(α→t)→(α→t)→α →t. Il reste donc, pour pouvoir affecter un type aux coordinations, à trouver la valeur deα. Pour y parvenir, nous pouvons chercher où la coordination est employée

dans la grammaire deCurt et voir quel est le type des constituants coordonnés. Or, comme nous l’avons vu au début de cette section, les coordinations peuvent coordonner des noms, des groupes nominaux et des groupes verbaux. Cependant, les types sémantiques associés à ces différents constituants sont différents. En effet, les noms ont pour typee → t, tandis que les noms propres et groupes verbaux ont pour type(e→ t) →t. Nous remarquons donc que, dans le cas des noms communs, la coordination est utilisée avecα=e, alors que pour une utilisation de la coordination entre groupes nominaux ou groupes verbaux nous avonsα = e → t. Ceci signifie que la coordination telle qu’elle est définie dansCurtestpolymorphe, c’est-à-dire que ses arguments peuvent être de plusieurs types, pourvu que ces types satisfassent les équations de typage données précédemment. Cependant, le système de typage TYnsur lequelNessieest basé ne permet pas l’expression de tels types polymorphes. Donc, le traitement des coordinations parCurtne peut être repris tel quel dansNessie. Il faut trouver une solution ne faisant pas appel à du polymorphisme.

La solution que nous proposons consiste à utiliser plusieurs coordinations différentes, à savoir une par constituants syntaxiques que l’on souhaite coordonner. Ici, comme nous l’avons vu, la grammaire deNessiene permet des coordinations qu’entre noms, groupes verbaux et groupes nominaux. Nous définissons donc trois familles fermées (coordn,coordnpetcoordvp) com-portant chacune deux lemmesconjetdisj. Voici les définitions qui sont ajoutées au lexique deNessie:

family coordn; lemma conj {

family = coordn;

term = lam n1, n2 : pred. lam x : e. ( n1(x) && n2(x) ) };

lemma disj {

family = coordn;

term = lam n1, n2 : pred. lam x : e. ( n1(x) || n2(x) ) };

family coordnp; lemma conjnp {

family = coordnp;

term = lam np1, np2 : np. lam p : pred. ( np1(p) && np2(p) ) };

lemma disjnp { family = coordnp;

term = lam np1, np2 : np. lam p : pred. ( np1(p) || np2(p) ) };

family coordvp; lemma conj {

family = coordvp;

term = lam vp1, vp2 : pred. lam x : e. ( vp1(x) && vp2(x) ) };

lemma disj {

family = coordvp;

term = lam vp1, vp2 : pred. lam x : e. ( vp1(x) || vp2(x) ) };

Il reste à voir comment construire les arbres syntaxiques correspondant à ces constructions. Il y a ici une difficulté qui est que, au moment où la feuille correspondant à la conjonction de coor-dination est parcourue, on ne sait pas quels sont les constituants syntaxiques qu’elle coordonne. Il n’est donc pas possible de générer la bonne feuille. La solution que nous proposons consiste à utiliser une feuille générique représentant une conjonction de coordination sans spécifier la-quelle, feuille qui sera remplacée, dans la règle de DCG coordonnant deux constituants, par la véritable conjonction, celle qui coordonne les deux constituants syntaxiques dont on dispose. La règle assurant l’interface avec le lexique pour y rechercher des conjonctions de coordination s’écrit donc comme suit :

coord([ast:leaf(Type,coord),type:Type,sem:Sem])--> {lexEntry(coord,[syntax:Word,type:Type])}, Word,

{semLex(coord,[type:Type,sem:Sem])}.

La variable Type est instanciée dans le lexique syntaxique et peut prendre les deux va-leurs conj et disj. Les deux feuilles qui peuvent être générées par cette règle sont donc leaf(conj, coord)etleaf(disj, coord).

Comme nous l’avons dit, les règles coordonnant plusieurs constituants syntaxiques doivent « modifier » cette feuille en spécifiant la famille adéquate pour la coordination. Voici par exemple comment est écrite la règle coordonnant deux noms :

n([ ast:nary(n,’lam A, B, C. (B(A,C))’,AstN1,AstCoord,AstN2), coord:yes,sem:N ])--> n([ast:AstN1,coord:no,sem:N1]), coord([ast:_,type:Type,sem:C]), n([ast:AstN2,coord:_,sem:N2]), {AstCoord=leaf(Type,coordn)}, {combine(n:N,[n:N1,coord:C,n:N2])}.

Pour comprendre ce qu’il se passe au niveau des arbres, supposons que l’on souhaite calculer l’arbre d’analyse pour le nom « man or woman ». Le tableau suivant donne des arbres possibles pour les noms « man » et « woman », ainsi que pour la conjonction disjonctive « or ».

Lemme Arbre

man leaf(man,noun)

woman leaf(woman,noun)

or leaf(disj,coord)

nary( n, ’lam A, B, C. (B(A,C))’, leaf(man,noun), leaf(disj,coordn), leaf(woman,noun) ).

Leλ-terme qui apparaît dans cet arbre spécifie que sa représentation sémantique est obtenue en appliquant celle du deuxième sous-arbre à celle du premier et à celle du troisième, c’est-à-dire en appliquant le sous-arbre produit par la coordination aux sous arbres correspondant aux deux noms à coordonner, ce qui est bien ce qui est fait dans Curt. Les règles permettant de coordonner les groupes nominaux et verbaux fonctionnent exactement de la même façon. Les

λ-termes sont les mêmes, la seule chose qui change est la feuille choisie pour représenter la conjonction de coordination.

Avant d’en revenir à notre suite de tests, une remarque sur le polymorphisme nous paraît opportune. Il est clair que si le système de type était polymorphe, une seule coordination aurait suffit, comme dansNessie. Nous aurions alors pu, comme nous l’envisagions au début de cette sous-section, n’ajouter qu’une famille à deux lemmes au lexique deNessie. Avec les notations OCamlintroduites au chapitre précédent pour représenter les types polymorphes, la déclaration de la famille et des lemmes aurait pu s’écrire ainsi :

family coord; lemma conj {

family = coord;

term = lam X, Y : (’a -> t). lam P : ’a. ( X(P) && Y(P) ) };

lemma disj { family = coord;

term = lam X, Y : (’a -> t). lam P : ’a. ( X(P) || Y(P) ) };

La règle de DCG avec construction d’arbre syntaxique pour la coordination de noms, que nous avions présentée précédemment, pourrait alors s’écrire, un peu plus simplement :

n([ ast:nary( n, ’lam A, B, C. (B(A,C))’, AstN1, AstCoord, AstN2), coord:yes, sem:N ])--> n([ast:AstN1,coord:no,sem:N1]),

coord([ast:AstCoord,type:Type,sem:C]), n([ast:AstN2,coord:_,sem:N2]),

{combine(n:N,[n:N1,coord:C,n:N2])}.

et l’on n’aurait donc plus besoin d’« oublier » la valeur de la feuille correspondant à la coordi-nation, comme on l’a fait à l’aide de la variable anonyme_pour en mettre une autre,ad hoc, à la place. Cette solution paraît certes plus élégante, mais elle pose, en même temps, la question de l’expressivité du système de types ainsi obtenu. Nous reviendrons à cette question et donnerons quelques pistes de réflexion et éléments de réponse dans la conclusion de cette thèse, chapitre 8. Nous pouvons enfin en revenir aux tests de validation deNessie. Comme nous l’avions ex-pliqué à la fin de la section précédente, 16 phrases, parmi toutes celles fournies avec Curt, comportent des coordinations. Dans notre première série de tests, nous n’avions pas considéré ces 16 phrases. Mais, maintenant que, d’une part, le lexique de Nessie a été étendu et que, d’autre part, la DCG deCurta été modifiée de sorte à pouvoir produire des arbres aussi pour les coordinations, nous pouvons réintégrer ces 16 phrases avec coordination à l’ensemble de phrases que nous utilisons pour validerNessie. Comme pour les27 phrases considérées pré-cédemment, nous constatons que, pour ces16nouvelles phrases, les deux formes sémantiques produites parCurtetNessiesont bienα-équivalentes, à la fois avant et après réduction. Cette nouvelle série de résultats positifs constitue une preuve supplémentaire du bon fonctionnement deNessie. En outre, nous avions signalé que la première série de phrases ne permettait pas de tester complètement le traitement par Nessie des arbresn-aires, les arbres générés par cette première série de phrases ne comportant en fait qu’un nœud et un terme modifiant sa représen-tation. Il en va autrement avec les coordinations, puisque, comme nous avons pu le constater par exemple avec la règle cordonnant les noms, les arbres générés comportent3sous-arbres. C’est cette constatation qui nous conduit à penser que cette deuxième série de tests complète la vali-dation, ébauchée par la première, de la correction de la construction sémantique pour les arbres

n-aires.