1:- module(lexicon,[semlex/5]).    2:- multifile semlex/5.    3
    4:- use_module(boxer(slashes)).    5:- use_module(boxer(string2digit),[string2digit/2,string2score/2]).    6:- use_module(boxer(categories),[category/3,att/3,sense/4,roles/4,rel/3,role/3]).    7:- use_module(semlib(options),[option/2]).    8:- use_module(knowledge(ne),[neClass/2,neClassType/3,neClassType/4]).    9:- use_module(knowledge(dates),[month/2,dofm/2,decade/2,year/2]).   10:- use_module(knowledge(punctuation),[punctuation/2]).   11%:-use_module(knowledge(title),[title/2]).
   12%:- use_module(knowledge(negprefix),[negprefix/4]).
   13%:- use_module(knowledge(negsuffix),[negsuffix/4]).
   14%:-use_module(knowledge(nationality),[nationality/2]).
   15:- use_module(lex(determiners),[semlex_det/4]).   16:- use_module(lex(verbs),[semlex_verb/5]).   17:- use_module(boxer(closure),[closing/1,plosing/1]).   18:- use_module(library(lists),[member/2]).   19:- use_module(boxer(coordination),[coordMacro/2,argCard/2]).   20:- use_module(boxer(resolveDRT),[goldAntecedent/2]).   21
   22:- [lex/pp].   23:- [lex/n].   24% :- [lex/s].
   25% :- [lex/np].
   26
   27
   28/* =========================================================================
   29   Category Abstraction
   30========================================================================= */
   31
   32cat(X1/Y1,X2|Y2):- !, cat(X1,X2), cat(Y1,Y2).
   33cat(X1\Y1,X2|Y2):- !, cat(X1,X2), cat(Y1,Y2).
   34cat(X,X).
   35
   36
   37/* =========================================================================
   38   Punctuation
   39========================================================================= */
   40
   41semlex(t:_\s:_,_,_,Att-[sem:'NIL'|Att],Sem):- !,
   42   closing(CC),
   43   Sem = lam(S,app(S,CC)).
   44
   45semlex(s:X\s:X,'?',Index,Att-[sem:'QUE'|Att],Sem):- 
   46   option('--semantics',amr), !,
   47   Sem = lam(S,lam(F,app(S,lam(E,merge(B:drs([],[B:Index:pred(E,interrogative,r,1)]),app(F,E)))))).
   48
   49semlex(Cat,_,_,Att-[sem:'NIL'|Att],Sem):- 
   50   att(Att,pos,POS),
   51   punctuation(POS,_),
   52   member(Cat,[C\C, C/C,
   53               (s:X/s:X)/(s:Y/s:Y), (s:X/s:X)/(s:Y\s:Y),
   54               (s:X/s:X)\(s:Y/s:Y), (s:X/s:X)\(s:Y\s:Y),
   55               (s:X\s:X)/(s:Y\s:Y), (s:X\s:X)/(s:Y/s:Y),
   56               (s:X\s:X)\(s:Y/s:Y), (s:X\s:X)\(s:Y\s:Y)]), !,
   57   Sem = lam(P,P).
   58
   59semlex(Cat,_,_,Att-[sem:'NIL'|Att],Sem):- 
   60   att(Att,pos,POS),
   61   punctuation(POS,_),
   62   member(Cat,[(((s:X\np)/(s:X\np))\(s:Y/s:Y)),
   63               (((s:X\np)\(s:X\np))\(s:Y/s:Y))]), !,
   64   Sem = lam(SMOD,lam(VP,lam(NP,app(SMOD,app(VP,NP))))).
   65
   66semlex(Cat,_,Index,Att-[sem:'SUB'|Att],Sem):-
   67   att(Att,pos,POS),
   68   punctuation(POS,left),
   69   member(Cat,[(np\np)/np,(np\np)\np,(np/np)/np,(np/np)\np]), !,
   70   Sem = lam(Q1,lam(Q2,lam(P,app(Q2,lam(X,app(Q1,lam(Y,merge(B:drs([],[B:Index:rel(X,Y,rel,0)]),app(P,X))))))))).
   71
   72semlex(Cat,_,Index,Att-[sem:'SUB'|Att],Sem):-
   73   att(Att,pos,POS),
   74   punctuation(POS,_),
   75   member(Cat,[(s:X\s:X)/np,(s:X\s:X)\np,(s:X/s:X)/np,(s:X/s:X)\np]), !,
   76   Sem = lam(Q1,lam(Q2,lam(P,app(Q2,lam(Z,app(Q1,lam(Y,merge(B:drs([],[B:Index:rel(Z,Y,rel,0)]),app(P,Z))))))))).
   77
   78semlex(Cat,_,Index,Att-[sem:'SUB'|Att],Sem):-
   79   att(Att,pos,POS),
   80   punctuation(POS,left),
   81   member(Cat,[(n\n)/n,(n/n)/n]), !,
   82   Sem = lam(N,lam(P,lam(X,merge(merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,rel,0)]),app(N,Y)),app(P,X))))).
   83
   84semlex(Cat,_,Index,Att-[sem:'SUB'|Att],Sem):-
   85   att(Att,pos,POS),
   86   punctuation(POS,_),
   87   member(Cat,[((s:X\np)\(s:X\np))/np, 
   88               ((s:X\np)/(s:X\np))/np, 
   89               ((s:X\np)\(s:X\np))\np, 
   90               ((s:X\np)/(s:X\np))\np]), !,
   91   Sem = lam(Q2,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,app(Q2,lam(Y,merge(B:drs([],[B:Index:rel(E,Y,rel,0)]),app(F,E)))))))))).
   92
   93
   94/* =========================================================================
   95   Coordination (disjunction and negation)
   96========================================================================= */
   97
   98semlex(conj:n,Sym,Index,Att-[sem:'DIS'|Att],Sem):-
   99   Sym = or,
  100   option('--semantics',drg), !,
  101   Sem = lam(P2,lam(P1,lam(X,B:drs([],[B:Index:pred(X,Sym,s,1),
  102                                       B:[]:or(app(P1,X),app(P2,X))])))).
  103
  104semlex(conj:Cat,Lemma,Index,Att-[sem:'DIS'|Att],Sem):-
  105   member(Lemma,[either,or]), !,
  106   argCard(Cat,N),
  107   coordMacro(N,Coord),
  108   Sem = app(Coord,lam(K2,lam(K1,B:drs([],[B:Index:or(K1,K2)])))).
  109
  110semlex(conj:Cat,Lemma,Index,Att-[sem:'NOT'|Att],Sem):- 
  111   member(Lemma,[neither,nor,not,of,than]), !,
  112   argCard(Cat,N),
  113   coordMacro(N,Coord),
  114   Sem = app(Coord,lam(K2,lam(K1,merge(K1,B:drs([],[B:Index:not(K2)]))))).
  115
  116
  117/* =========================================================================
  118   Contrast
  119========================================================================= */
  120
  121semlex(conj:(s:_\np),but,Index,Att-[sem:'BUT'|Att],Sem):-    
  122   option('--theory',sdrt),
  123   option('--semantics',amr), !,
  124   Sem = lam(V1,lam(V2,lam(X,lam(E,sdrs([lab(K1,app(app(V2,X),E)),
  125                                         lab(K2,app(app(V1,X),E))],
  126                                        [Index:rel(K1,K2,'contrast-01')]))))).
  127
  128semlex(conj:(s:_\np),but,Index,Att-[sem:'BUT'|Att],Sem):-    
  129   option('--theory',sdrt), !,
  130   Sem = lam(V1,lam(V2,lam(X,lam(E,sdrs([lab(K1,app(app(V2,X),E)),
  131                                         lab(K2,app(app(V1,X),E))],
  132                                        [Index:rel(K1,K2,continuation),
  133                                         []:rel(K1,K2,contrast)]))))).
  134
  135semlex(conj:(s:_),but,Index,Att-[sem:'BUT'|Att],Sem):- 
  136   option('--theory',sdrt),
  137   option('--semantics',amr), !,
  138   Sem = lam(S1,lam(S2,lam(E,sdrs([lab(K1,app(S2,E)),
  139                                   lab(K2,app(S1,E))],
  140                                  [Index:rel(K1,K2,'contrast-01')])))).
  141
  142semlex(conj:(s:_),but,Index,Att-[sem:'BUT'|Att],Sem):- 
  143   option('--theory',sdrt), !,
  144   Sem = lam(S1,lam(S2,lam(E,sdrs([lab(K1,app(S2,E)),
  145                                   lab(K2,app(S1,E))],
  146                                  [Index:rel(K1,K2,continuation),
  147                                   []:rel(K1,K2,contrast)])))).
  148
  149
  150
  151/* =========================================================================
  152   Coordination: nouns
  153========================================================================= */
  154
  155semlex(conj:n,Sym,Index,Att-[sem:'AND'|Att],Sem):-
  156   option('--semantics',amr), !,
  157   Sem = lam(P2,lam(P1,lam(X,merge(B:drs([B:[]:Y,B:[]:Z],
  158                                         [B:Index:pred(X,Sym,n,1),
  159                                          B:[]:rel(X,Y,op1,1),
  160                                          B:[]:rel(X,Z,op2,1)]),
  161                                   merge(app(P1,Y),
  162                                         app(P2,Z)))))).
  163
  164semlex(conj:n,Sym,Index,Att-[sem:'AND'|Att],Sem):- 
  165   option('--semantics',drg), !,
  166   Sem = lam(P2,lam(P1,lam(X,merge(B:drs([B:[]:Y,B:[]:Z],
  167                                         [B:Index:pred(X,Sym,s,1),
  168                                          B:[]:rel(Y,X,subset_of,1),
  169                                          B:[]:rel(Z,X,subset_of,1)]),
  170                                   merge(app(P1,Y),
  171                                         app(P2,Z)))))).
  172
  173semlex(conj:n,_Sym,_,Att-[sem:'AND'|Att],Sem):- !,
  174   Sem = lam(P2,lam(P1,lam(X,merge(B:drs([B:[]:Y,B:[]:Z],
  175                                         [B:[]:rel(Y,X,subset_of,1),
  176                                          B:[]:rel(Z,X,subset_of,1)]),
  177                                   merge(app(P1,Y),
  178                                         app(P2,Z)))))).
  179
  180
  181/* =========================================================================
  182   Coordination: adjectives
  183========================================================================= */
  184
  185semlex(conj:(n/n),_,_,Att-[sem:'AND'|Att],Sem):- !,
  186   Sem = lam(A2,lam(A1,lam(P,lam(X,app(app(A1,lam(Y,app(app(A2,P),Y))),X))))).
  187
  188% this the old analysis, where the noun is copied
  189semlex(conj:(n/n),_,_,Att-[sem:'AND'|Att],Sem):- !,
  190   Sem = lam(A2,lam(A1,lam(P,lam(X,merge(B:drs([B:[]:Y,B:[]:Z],
  191                                               [B:[]:rel(Y,X,subset_of,1),
  192                                                B:[]:rel(Z,X,subset_of,1)]),
  193                                   merge(app(app(A1,P),Y),
  194                                         app(app(A2,P),Z))))))).
  195
  196
  197/* =========================================================================
  198   Coordination: noun phrases
  199========================================================================= */
  200
  201semlex(conj:np,Sym,Index,Att-[sem:'AND'|Att],Sem):- 
  202   option('--semantics',amr), !,  
  203   Sem = lam(X2,lam(X1,lam(P,merge(merge(B:drs([B:[]:X],[B:Index:pred(X,Sym,n,0)]),
  204                                         merge(app(X1,lam(Y,B1:drs([],[B1:[]:rel(X,Y,op1,1)]))),
  205                                               app(X2,lam(Z,B2:drs([],[B2:[]:rel(X,Z,op2,1)]))))),
  206                                   app(P,X))))).
  207
  208semlex(conj:np,_,Index,Att-[sem:'AND'|Att],Sem):- !,  % collective
  209   Sem = lam(X2,lam(X1,lam(P,merge(merge(B:drs([B:Index:X],[]),
  210                                         merge(app(X1,lam(Y,B1:drs([],[B1:[]:rel(Y,X,subset_of,1)]))),
  211                                               app(X2,lam(Z,B2:drs([],[B2:[]:rel(Z,X,subset_of,1)]))))),
  212                                   app(P,X))))).
  213
  214semlex(conj:app,_,Index,Att-[sem:'APP'|Att],Sem):- !,
  215   Sem = lam(X1,lam(X2,lam(P,app(X2,
  216                                 lam(Y,merge(app(X1,lam(X,B:drs([],[B:Index:rel(Y,X,rel,2)]))),
  217                                             app(P,Y))))))).
  218
  219
  220/* =========================================================================
  221   Coordination: verb phrases
  222========================================================================= */
  223
  224semlex(conj:(s:_\np),Sym,Index,Att-[sem:'COO'|Att],Sem):-   
  225   option('--semantics',amr),
  226   option('--theory',sdrt), !,
  227   Sem = lam(V1,lam(V2,lam(N,lam(E,app(N,lam(X,sdrs([lab(K1,app(app(V2,lam(P,app(P,X))),E)),
  228                                                     lab(K2,app(app(V1,lam(P,app(P,X))),E))],
  229                                        [Index:rel(K1,K2,Sym)]))))))).
  230
  231semlex(conj:(s:_\np),Sym,Index,Att-[sem:'COO'|Att],Sem):-   
  232   option('--semantics',amr),
  233   option('--theory',sdrt), !,
  234   Sem = lam(V1,lam(V2,lam(X,lam(E,sdrs([lab(K1,app(app(V2,X),E)),
  235                                         lab(K2,app(app(V1,X),E))],
  236                                        [Index:rel(K1,K2,Sym)]))))).
  237
  238
  239semlex(conj:(s:_\np),_Sym,Index,Att-[sem:'COO'|Att],Sem):-   
  240   option('--theory',sdrt), !,
  241   Sem = lam(V1,lam(V2,lam(N,lam(E,app(N,lam(X,sdrs([lab(K1,app(app(V2,lam(P,app(P,X))),E)),
  242                                                     lab(K2,app(app(V1,lam(P,app(P,X))),E))],
  243                                        [Index:rel(K1,K2,continuation),
  244                                         []:rel(K1,K2,parallel)]))))))).
  245
  246semlex(conj:(s:_\np),_Sym,Index,Att-[sem:'COO'|Att],Sem):-    % VP coordination
  247   option('--theory',sdrt), !,
  248   Sem = lam(V1,lam(V2,lam(X,lam(E,sdrs([lab(K1,app(app(V2,X),E)),
  249                                         lab(K2,app(app(V1,X),E))],
  250                                        [Index:rel(K1,K2,continuation),
  251                                         []:rel(K1,K2,parallel)]))))).
  252
  253
  254/* =========================================================================
  255   Coordination: sentences
  256========================================================================= */
  257
  258semlex(conj:(s:_),Sym,Index,Att-[sem:'COO'|Att],Sem):-   
  259   option('--semantics',amr),
  260   option('--theory',sdrt), !,
  261   Sem = lam(S1,lam(S2,lam(E,sdrs([lab(K1,app(S2,E)),
  262                                   lab(K2,app(S1,E))],
  263                                  [Index:rel(K1,K2,Sym)])))).
  264
  265semlex(conj:(s:_),_Sym,Index,Att-[sem:'COO'|Att],Sem):-     % S coordination
  266   option('--theory',sdrt), !,
  267   Sem = lam(S1,lam(S2,lam(E,sdrs([lab(K1,app(S2,E)),
  268                                   lab(K2,app(S1,E))],
  269                                  [Index:rel(K1,K2,continuation),
  270                                   []:rel(K1,K2,parallel)])))).
  271
  272
  273/* =========================================================================
  274   Coordination: all other cases
  275========================================================================= */
  276
  277semlex(conj:CCat,_,_,Att-[sem:'AND'|Att],Sem):- !,
  278   argCard(CCat,N),
  279   coordMacro(N,Coord),
  280   Sem = app(Coord,lam(K2,lam(K1,merge(K1,K2)))).
  281
  282
  283/* =========================================================================
  284   Compound Coordination
  285========================================================================= */
  286
  287%semlex(conj:F/conj:F,instead,Index,Att-[sem:'UNK'|Att],Sem):- !,  % instead of
  288%   Sem = lam(C,lam(K1,lam(K2,app(app(C,B:drs([],[B:Index:not(K1)])),K2)))).
  289
  290%semlex(conj:F/conj:F,rather,Index,Att-[sem:'UNK'|Att],Sem):- !,   % rather than
  291%   Sem = lam(C,lam(K1,lam(K2,app(app(C,B:drs([],[B:Index:not(K1)])),K2)))).
  292
  293semlex(conj:F/conj:F,_,_,Att-[sem:'NIL'|Att],lam(U,U)):- !.
  294semlex(conj:F\conj:F,_,_,Att-[sem:'NIL'|Att],lam(U,U)):- !.
  295
  296
  297/* =========================================================================
  298   Quotes
  299========================================================================= */
  300
  301semlex(q,_,Index,Att-[sem:'UNK'|Att],Sem):- !,
  302   Sem = lam(X,B:drs([],[B:Index:pred(X,quotation,n,2)])).
  303
  304semlex((n/q)/n,_,Index,Att-[sem:'UNK'|Att],Sem):- !,
  305   Sem = lam(N,lam(Q,lam(X,merge(B:drs([],[B:Index:pred(X,quotation,n,2)]),
  306                                 merge(app(N,X),app(Q,X)))))).
  307
  308semlex((np/q)/np,_,Index,Att-[sem:'UNK'|Att],Sem):- !,
  309   Sem = lam(NP,lam(Q,lam(P,app(NP,lam(X,merge(B:drs([],[B:Index:pred(X,quotation,n,2)]),
  310                                               merge(app(Q,X),app(P,X)))))))).
  311
  312semlex((s:dcl/q)/s:dcl,_,Index,Att-[sem:'UNK'|Att],Sem):- !,
  313   Sem = lam(S,lam(Q,lam(F,app(S,lam(E,merge(B:drs([],[B:Index:pred(E,quotation,n,2)]),
  314                                             merge(app(Q,E),app(F,E)))))))).
  315
  316
  317/* -------------------------------------------------------------------------
  318   Determiners
  319------------------------------------------------------------------------- */
  320
  321semlex(np/n,Token,Index,Att,Sem):- !, semlex_det(Token,Index,Att,Sem).
  322
  323
  324/* -------------------------------------------------------------------------
  325   Possessives
  326------------------------------------------------------------------------- */
  327
  328semlex(np/(n/pp),_,Index,Att-[sem:'HAS'|Att],Sem):- !,
  329   Sem = lam(RN,lam(P,alfa(pro,B1:drs([B1:[]:Y],[B1:[]:pred(Y,male,n,2)]),
  330                               alfa(def,merge(B2:drs([B2:[]:X],[]),
  331                                              app(app(RN,lam(U,B3:drs([],[B3:Index:rel(U,Y,of,1)]))),X)),
  332                                        app(P,X))))).
  333
  334
  335/* -------------------------------------------------------------------------
  336   Determiners (as many as X)
  337------------------------------------------------------------------------- */
  338
  339semlex(((np/n)/pp)/(s:adj\np),_,Index,Att-[sem:'EQA'|Att],Sem):- !,
  340   closing(CC),
  341   Sem = lam(AP,lam(PP,lam(N,lam(P,merge(merge(B:drs([B:Index:X],[]),
  342                                               merge(app(N,X),
  343                                                     merge(app(PP,X),
  344                                                           app(app(AP,lam(Q,app(Q,X))),CC)))),
  345                                         app(P,X)))))).
  346
  347
  348/* -------------------------------------------------------------------------
  349   Many/Much [as NP]
  350------------------------------------------------------------------------- */
  351
  352semlex(np,many,Index,Att-[sem:'QUA'|Att],Sem):- !,
  353   Sem = lam(P,merge(B:drs([B:[]:X],[B:Index:pred(X,quantity,n,1)]),app(P,X))).
  354
  355semlex(np,much,Index,Att-[sem:'QUA'|Att],Sem):- !,
  356   Sem = lam(P,merge(B:drs([B:[]:X],[B:Index:pred(X,amount,n,3)]),app(P,X))).
  357
  358
  359/* -------------------------------------------------------------------------
  360   There insertion
  361------------------------------------------------------------------------- */
  362
  363semlex(np,'there',Index,Att-[sem:'UNK'|Att],Sem):-
  364   option('--semantics',amr), 
  365   att(Att,pos,'EX'), !,
  366   Sem = lam(P,merge(B:drs([B:[]:X],[B:Index:pred(X,there,n,1)]),app(P,X))).
  367
  368semlex(np,'there',Index,Att-[sem:'NIL'|Att],Sem):-
  369   att(Att,pos,'EX'), !,
  370   Sem = lam(P,merge(B:drs([B:Index:X],[]),app(P,X))).
  371
  372
  373/* -------------------------------------------------------------------------
  374   Pronouns (non-reflexives)
  375------------------------------------------------------------------------- */
  376
  377semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  378   option('--semantics',amr),
  379   member(Lemma,['I',i,me,mine]), !,
  380   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,i,n,1)]),app(P,X))).
  381
  382semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  383   member(Lemma,['I',i,me,mine]), !,
  384%  goldAntecedent(Index,Att),
  385   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,person,n,1)]),app(P,X))).
  386
  387semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  388   option('--semantics',amr),
  389   member(Lemma,['we','us','\'s','ours']), !,
  390   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,we,n,1)]),app(P,X))).
  391
  392semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  393   member(Lemma,['we','us','\'s','ours']), !,
  394%  goldAntecedent(Index,Att),
  395   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,person,n,1)]),app(P,X))).
  396
  397semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  398   member(Lemma,['we','us','\'s','ours']), !,
  399%  goldAntecedent(Index,Att),
  400   Sem = lam(P,alfa(pro,B1:drs([B1:[]:G],[B1:Index:pred(G,group,n,1)]),
  401                        B2:drs([],[B2:[]:imp(B3:drs([B3:[]:X],[B3:[]:rel(X,G,member_of,0)]),
  402                                          merge(B4:drs([],[B4:[]:pred(X,person,n,1)]),       
  403                                                app(P,X)))]))).
  404
  405semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  406   option('--semantics',amr),
  407   member(Lemma,[whom,you,thou,yours]), !,
  408   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,you,n,1)]),app(P,X))).
  409
  410semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  411   member(Lemma,[whom,you,thou,yours]), !,
  412%  goldAntecedent(Index,Att),
  413   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,person,n,1)]),app(P,X))).
  414
  415semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  416   option('--semantics',amr),
  417   member(Lemma,['he','his','him']), !,
  418   goldAntecedent(Index,Att),
  419   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,he,n,1)]),app(P,X))).
  420
  421semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  422   member(Lemma,['he','his','him']), !,
  423   goldAntecedent(Index,Att),
  424   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,male,n,2)]),app(P,X))).
  425
  426semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  427   option('--semantics',amr),
  428   member(Lemma,['she','hers','her']), !,
  429   goldAntecedent(Index,Att),
  430   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,she,n,1)]),app(P,X))).
  431
  432semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  433   member(Lemma,['she','hers','her']), !,
  434   goldAntecedent(Index,Att),
  435   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,female,n,2)]),app(P,X))).
  436
  437semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  438   option('--semantics',amr),
  439   member(Lemma,[it,'\'t']), !,
  440   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,it,n,1)]),app(P,X))).
  441
  442semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  443   member(Lemma,[it,'\'t']), !,
  444%  goldAntecedent(Index,Att),
  445   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,thing,n,12)]),app(P,X))).
  446
  447semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  448   option('--semantics',amr),
  449   member(Lemma,['they','them','theirs']), !,
  450   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,they,n,1)]),app(P,X))).
  451
  452semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  453   member(Lemma,['they','them','theirs']), !,
  454%  goldAntecedent(Index,Att),
  455   Sem = lam(P,alfa(pro,B:drs([B:[]:X],[B:Index:pred(X,thing,n,12)]),app(P,X))).
  456
  457semlex( np, Lemma,Index,Att-[sem:'PRO'|Att],Sem):-
  458   member(Lemma,['they','them','theirs']), !,
  459%  goldAntecedent(Index,Att),
  460   Sem = lam(P,alfa(pro,B1:drs([B1:[]:G],[B1:Index:pred(G,group,n,1)]),
  461                        B2:drs([],[B2:[]:imp(B2:drs([B2:[]:X],[B2:[]:rel(X,G,member_of,0)]),
  462                                          app(P,X))]))).
  463
  464
  465/* -------------------------------------------------------------------------
  466   Reflexive Pronouns 
  467------------------------------------------------------------------------- */
  468
  469semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  470   option('--semantics',amr),
  471   member(Lemma,[myself,yourself,thyself,ourselves]), !,
  472   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,i,n,1)]),app(P,X))).
  473
  474semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  475   member(Lemma,[myself,yourself,thyself,ourselves]), !,
  476   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,person,n,1)]),app(P,X))).
  477
  478semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  479   option('--semantics',amr),
  480   member(Lemma,['himself']), !,
  481   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,he,n,1)]),app(P,X))).
  482
  483semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  484   member(Lemma,['himself']), !,
  485   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,male,n,2)]),app(P,X))).
  486
  487semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  488   option('--semantics',amr),
  489   member(Lemma,['herself']), !,
  490   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,she,n,1)]),app(P,X))).
  491
  492semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  493   member(Lemma,['herself']), !,
  494   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,female,n,2)]),app(P,X))).
  495
  496semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  497   member(Lemma,['itself']), !,
  498   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,thing,n,12)]),app(P,X))).
  499
  500semlex( np, Lemma,Index,Att-[sem:'REF'|Att],Sem):-
  501   member(Lemma,['themselves']), !,
  502   Sem = lam(P,alfa(ref,B:drs([B:[]:X],[B:Index:pred(X,group,n,1)]),app(P,X))).
  503
  504
  505/* -------------------------------------------------------------------------
  506   Demonstratives and Quantificational Noun Phrases
  507------------------------------------------------------------------------- */
  508
  509semlex( np, Lemma,Index,Att-[sem:'NOT'|Att],Sem):-
  510   \+ option('--semantics',amr),
  511   member(Lemma,['none','neither',nothing]), !,
  512   Sem = lam(P,B1:drs([],[B1:Index:not(merge(B2:drs([B2:[]:X],[B2:Index:pred(X,thing,n,12)]),app(P,X)))])).
  513
  514semlex( np, Lemma,Index,Att-[sem:'DIS'|Att],Sem):-
  515   \+ option('--semantics',amr),
  516   member(Lemma,[something,some,'both','most','more','many','less','half','another']), !,
  517   Sem = lam(P,merge(B:drs([B:[]:X],[B:Index:pred(X,thing,n,12)]),app(P,X))).
  518
  519semlex( np, Lemma,Index,Att-[sem:'PRX'|Att],Sem):-
  520   option('--semantics',amr),
  521   member(Lemma,['this','these']), !,
  522   Sem = lam(P,alfa(def,B:drs([B:[]:X],[B:Index:pred(X,this,n,1)]),app(P,X))).
  523
  524semlex( np, Lemma,Index,Att-[sem:'DST'|Att],Sem):-
  525   option('--semantics',amr),
  526   member(Lemma,['that','those']), !,
  527   Sem = lam(P,alfa(def,B:drs([B:[]:X],[B:Index:pred(X,that,n,1)]),app(P,X))).
  528
  529semlex( np, Lemma,Index,Att-[sem:'PRX'|Att],Sem):-
  530   member(Lemma,['this','these']), !,
  531   Sem = lam(P,alfa(def,B:drs([B:[]:X],[B:Index:pred(X,thing,n,12)]),app(P,X))).
  532
  533semlex( np, Lemma,Index,Att-[sem:'DST'|Att],Sem):-
  534   member(Lemma,['that','those']), !,
  535   Sem = lam(P,alfa(def,B:drs([B:[]:X],[B:Index:pred(X,thing,n,12)]),app(P,X))).
  536
  537semlex( np, Lemma,Index,Att-[sem:'AND'|Att],Sem):-
  538   \+ option('--semantics',amr),
  539   member(Lemma,['all','any','each','either',everything,anything]), !,
  540   Sem = lam(P,B1:drs([],[B1:[]:imp(B2:drs([B2:[]:X],[B2:Index:pred(X,thing,n,12)]),app(P,X))])).
  541
  542semlex( np, Lemma,Index,Att-[sem:'AND'|Att],Sem):-
  543   \+ option('--semantics',amr),
  544   member(Lemma,[everybody,everyone,anybody,anyone]), !,
  545   Sem = lam(P,B1:drs([],[B1:[]:imp(B2:drs([B2:[]:X],[B2:Index:pred(X,person,n,1)]),app(P,X))])).
  546
  547semlex( np, Lemma,Index,Att-[sem:'NOT'|Att],Sem):-
  548   \+ option('--semantics',amr),
  549   member(Lemma,[nobody,noone,'no-one']), !,
  550%  Sem = lam(P,B1:drs([],[B1:Index:not(merge(B2:drs([B2:[]:X],[B2:Index:pred(X,people,n,1)]),app(P,X)))])).
  551   Sem = lam(P,B1:drs([],[B1:Index:not(merge(B2:drs([B2:[]:X],[B2:Index:pred(X,person,n,1)]),app(P,X)))])).
  552
  553semlex( np, Lemma,Index,Att-[sem:'DIS'|Att],Sem):-
  554   \+ option('--semantics',amr),
  555   member(Lemma,[someone,somebody]), !,
  556   Sem = lam(P,merge(B:drs([B:[]:X],[B:Index:pred(X,person,n,1)]),app(P,X))).
  557
  558
  559/* -------------------------------------------------------------------------
  560   NP Why
  561------------------------------------------------------------------------- */
  562
  563semlex( np, Lemma,Index,Att-[sem:'QUE'|Att],Sem):-
  564   Lemma = 'why', !,
  565   Sem = lam(P,B1:drs([],[B1:[]:duplex(whq,
  566                                     B2:drs([B2:[]:X],[B2:Index:pred(X,reason,n,2)]),
  567                                     X,
  568                                     app(P,X))])).
  569
  570
  571/* -------------------------------------------------------------------------
  572   NP (all others)
  573------------------------------------------------------------------------- */
  574
  575semlex(np,Sym,Index,Att-[sem:Tag|Att],Sem):- 
  576   att(Att,pos,Pos), member(Pos,['NNP','NNPS']), !,
  577   att(Att,namex,Ne), neClassType(Ne,Class,Type,Tag),
  578   Sem = lam(P,alfa(nam,B:drs([B:[]:X],[B:Index:named(X,Sym,Class,Type)]),app(P,X))).
  579
  580semlex(np,Sym,Index,Att-[sem:'CON'|Att],Sem):- !,
  581   att(Att,sense,Sense),
  582   Sem = lam(P,merge(B:drs([B:[]:X],[B:Index:pred(X,Sym,n,Sense)]),app(P,X))).
  583
  584
  585/* -------------------------------------------------------------------------
  586   NP/PP
  587------------------------------------------------------------------------- */
  588
  589semlex(np/pp, Sym,Index,Att-[sem:'ROL'|Att],Sem):- !,
  590   att(Att,sense,Sense),
  591   Sem = lam(PP,lam(P,merge(B:drs([B:[]:X],[B:Index:pred(X,Sym,n,Sense)]),
  592                            merge(app(P,X),app(PP,X))))).
  593
  594
  595
  596/* -------------------------------------------------------------------------
  597   Question words: whose
  598------------------------------------------------------------------------- */
  599
  600semlex(Cat,whose,Index,Att-[sem:'QUE'|Att],Sem):-
  601   member(Cat,[(s:wq/(s:dcl\np))/n,
  602               (s:wq/(s:q/np))/n,
  603               (s:wq\(s:dcl/np))/n]), !, 
  604   Sem = lam(N,lam(V,app(V,lam(P,B1:drs([],[B1:[]:duplex(whq,
  605                                                         merge(merge(B2:drs([B2:[]:Y],[]),app(N,Y)),
  606                                                               B3:drs([B3:[]:X],[B3:Index:pred(X,person,n,1),B3:[]:rel(Y,X,of,1)])),
  607                                                         X, 
  608                                                         app(P,Y))]))))).
  609
  610
  611/* -------------------------------------------------------------------------
  612   Question words: which/what N
  613------------------------------------------------------------------------- */
  614
  615semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  616   member(Cat,[(s:wq/(s:dcl\np))/n,
  617               (s:wq/(s:q/np))/n,
  618               (s:qem/(s:dcl\np))/n,
  619               (s:qem/(s:dcl/np))/n,
  620               (s:wq\(s:dcl/np))/n]), !, 
  621   Sem = lam(P1,lam(V2,app(V2,lam(P3,B1:drs([],[B1:[]:duplex(whq,
  622                                             merge(B2:drs([B2:Index:X4],[]),app(P1,X4)),
  623                                             X4,
  624                                             app(P3,X4))]))))).
  625
  626semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  627   Cat = (s:wq/(s:q/pp))/n, !,  % WH-DET N + YNQ
  628   Sem = lam(N,lam(V,lam(E,B1:drs([],[B1:[]:duplex(whq,
  629                                              merge(B2:drs([B2:[]:X],[]),app(N,X)),
  630                                              X,
  631                                              app(app(V,lam(Y,B3:drs([],[B3:Index:rel(Y,X,rel,0)]))),E))])))).
  632
  633
  634/* -------------------------------------------------------------------------
  635   Question words: how much/many 
  636------------------------------------------------------------------------- */
  637
  638semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  639   member(Cat,[(s:wq/(s:q/np))/np,
  640               (s:wq/(s:dcl\np))/np]), !, 
  641   Sem = lam(NP,lam(VP,lam(E,B1:drs([],[B1:[]:duplex(whq,
  642                                               merge(B2:drs([B2:[]:X,B2:[]:Y],[B2:Index:card(X,Y,eq)]),
  643                                                     app(NP,lam(U,B3:drs([],[B3:[]:eq(U,X)])))),
  644                                               Y,
  645                                               app(app(VP,lam(P,app(P,X))),E))])))).
  646
  647
  648
  649/* -------------------------------------------------------------------------
  650   Question words: how much/many N 
  651------------------------------------------------------------------------- */
  652
  653semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  654   member(Cat,[((s:wq/(s:q/np))/n)/(np/n),        
  655               ((s:wq/(s:dcl\np))/n)/(np/n)]), !, 
  656   Sem = lam(D,lam(N,lam(VP,lam(E,B1:drs([],[B1:[]:duplex(whq,
  657                                                    merge(B2:drs([B2:[]:X,B2:[]:Y],[B2:Index:card(X,Y,eq)]),
  658                                                          app(app(D,N),lam(Z,B3:drs([],[B3:[]:eq(X,Z)])))),
  659                                                    Y,
  660                                                    app(app(VP,lam(P,app(P,X))),E))]))))).
  661
  662semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  663   member(Cat,[((s:wq/(s:q/pp))/n)/(np/n),        
  664               ((s:wq/(s:dcl\pp))/n)/(np/n)]), !, 
  665   Sem = lam(D,lam(N,lam(VP,lam(E,B1:drs([],[B1:[]:duplex(whq,
  666                                                    merge(B2:drs([B2:[]:X,B2:[]:Y],[B2:Index:card(X,Y,eq)]),
  667                                                          app(app(D,N),lam(Z,B3:drs([],[B3:[]:eq(X,Z)])))),
  668                                                    Y,
  669                                                    app(app(VP,lam(Y,B4:drs([],[B4:[]:rel(Y,X,rel,0)]))),E))]))))).
  670
  671semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  672   member(Cat,[(((s:wq/pp)/((s:q/pp)/np))/n)/(np/n)]), !,
  673   Sem = lam(D,lam(N,lam(TV,lam(PP,lam(E,B1:drs([],[B1:[]:duplex(whq,
  674                                                           merge(B2:drs([B2:[]:X,B2:[]:Y],[B2:Index:card(X,Y,eq)]),
  675                                                                 app(app(D,N),lam(Z,B3:drs([],[B3:[]:eq(X,Z)])))),
  676                                                           Y,
  677                                                           app(app(app(TV,lam(P,app(P,X))),PP),E))])))))).
  678
  679
  680semlex(((s:wq/pp)/n)/(np/n),_Sym,Index,Att-[sem:'QUE'|Att],Sem):- !,  % American English dialect (How many feet in a mile?)
  681   Sem = lam(D,lam(N,lam(PP,lam(_,B1:drs([],[B1:[]:duplex(whq,
  682                                                    merge(B2:drs([B2:[]:X,B2:[]:Y],[Index:card(X,Y,eq)]),
  683                                                          app(app(D,N),lam(Z,B3:drs([],[B3:[]:eq(X,Z)])))),
  684                                                    Y,                                           
  685                                                    app(PP,X))]))))).
  686         
  687
  688semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  689   member(Cat,[(((s:wq/(s:pss\np))/((s:q/(s:pss\np))/np))/n)/(np/n)]),
  690   Sem = lam(D,lam(N,lam(_,lam(VP,lam(E,B1:drs([],[B1:[]:duplex(whq,
  691                                                          merge(B2:drs([B2:[]:X,B2:[]:Y],[B2:Index:card(X,Y,eq)]),
  692                                                                app(app(D,N),lam(Z,B3:drs([],[B3:[]:eq(X,Z)])))),
  693                                                          Y,
  694                                                          app(app(VP,lam(P,app(P,X))),E))])))))).
  695
  696
  697
  698/* -------------------------------------------------------------------------
  699   Question words: how ADJ 
  700------------------------------------------------------------------------- */
  701
  702semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  703   member(Cat,[(s:wq/(s:q/(s:adj\np)))/(s:adj\np),
  704               ((s:wq/pp)/((s:q/pp)/(s:adj\np)))/(s:adj\np),
  705               (s:qem/(s:dcl/(s:adj\np)))/(s:adj\np)]), !, % How ADJ
  706   Sem = lam(A,lam(U,app(U,lam(NP,lam(E,app(NP,lam(X,B1:drs([],[B1:[]:duplex(whq,
  707                                                                       merge(B2:drs([B2:Index:Y],[]),
  708                                                                             app(app(A,lam(P,app(P,Y))),E)),
  709                                                                       Y,
  710                                                                       B3:drs([],[B3:[]:rel(Y,X,of,1)]))])))))))).
  711
  712
  713semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  714   Cat = (s:wq/(s:q/pp))/(s:adj\np), !, % How often does...
  715   closing(CC),
  716   Sem = lam(A,lam(VP,lam(F,B1:drs([],[B1:[]:duplex(whq,
  717                                              merge(B2:drs([B2:Index:X],[]),
  718                                                    app(app(A,lam(P,app(P,X))),CC)),
  719                                              X,
  720                                              app(app(VP,lam(Y,B3:drs([],[B3:[]:rel(Y,X,rel,0)]))),F))])))).
  721
  722
  723/* -------------------------------------------------------------------------
  724   Question words: basic question words 
  725------------------------------------------------------------------------- */
  726
  727semlex(Cat,Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  728   member(Cat,[s:wq/(s:dcl\np),  
  729               s:wq/(s:q/np),  
  730               s:wq\(s:dcl/np)]), 
  731   ( Sym = what,      Pred = thing,        Sense=12;
  732     Sym = whatever,  Pred = thing,        Sense=12;
  733     Sym = which,     Pred = thing,        Sense=12;
  734     Sym = whichever, Pred = thing,        Sense=12;
  735     Sym = where,     Pred = location,     Sense=1;
  736     Sym = why,       Pred = reason,       Sense=2;
  737     Sym = how,       Pred = manner,       Sense=2; 
  738     Sym = who,       Pred = person,       Sense=1;      
  739     Sym = whoever,   Pred = person,       Sense=1;      
  740     Sym = whom,      Pred = person,       Sense=1;      
  741     Sym = when,      Pred = unit_of_time, Sense=1 
  742   ), !,
  743   Sem = lam(VP,lam(F,B1:drs([],[B1:[]:duplex(whq,
  744                                        B2:drs([B2:[]:X],[B2:Index:pred(X,Pred,n,Sense)]),
  745                                        X,
  746                                        app(app(VP,lam(P,app(P,X))),F))]))).
  747
  748
  749semlex(Cat,Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  750   Cat = s:wq/(s:q/pp), 
  751   ( Sym=where, Pred=location,     Rel=loc_rel,  Sense=1;
  752     Sym=why,   Pred=reason,       Rel=rel,      Sense=2;
  753     Sym=how,   Pred=manner,       Rel=rel,      Sense=2;
  754     Sym=when,  Pred=unit_of_time, Rel=temp_rel, Sense=1
  755   ), !, 
  756   Sem = lam(VP,lam(F,B1:drs([],[B1:[]:duplex(whq,
  757                                        B2:drs([B2:[]:X],[B2:Index:pred(X,Pred,n,Sense)]),
  758                                        X,
  759                                        app(app(VP,lam(E,B3:drs([],[B3:[]:rel(E,X,Rel,0)]))),F))]))).
  760
  761semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  762   member(Cat,[np/(s:dcl\np),
  763               np/(s:dcl/np)]), !,
  764   closing(CC),
  765   Sem = lam(VP,lam(P,B1:drs([],[B1:[]:duplex(whq,
  766                                        B2:drs([B2:[]:X],[B2:Index:pred(X,thing,n,12)]),
  767                                        X,
  768                                        merge(app(app(VP,lam(R,app(R,X))),CC),app(P,X)))]))). 
  769
  770semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  771   member(Cat,[np/((s:to\np)/np)]), !,
  772   closing(CC),
  773   Sem = lam(TV,lam(P,B1:drs([],[B1:[]:duplex(whq,
  774                                        B2:drs([B2:[]:X],[B2:Index:pred(X,thing,n,12)]),
  775                                        X,
  776                                        merge(app(app(app(TV,lam(R,app(R,X))),lam(Q,merge(B3:drs([B3:[]:Z],[B3:[]:pred(Z,thing,n,12)]),
  777                                                                                          app(Q,Z)))),CC),app(P,X)))]))). 
  778
  779semlex(Cat,_Sym,Index,Att-[sem:'QUE'|Att],Sem):-
  780   member(Cat,[(np/(s:dcl\np))/n,
  781               (np/(s:dcl/np))/n]), !,
  782   closing(CC),
  783   Sem = lam(N,lam(VP,lam(P,B1:drs([],[B1:[]:duplex(whq,
  784                                              merge(B2:drs([B2:Index:X],[]),app(N,X)),
  785                                              X,
  786                                              merge(app(app(VP,lam(R,app(R,X))),CC),app(P,X)))])))). 
  787
  788
  789semlex(s:wq/s:q,Sym,Index,Att-[sem:'QUE'|Att],Sem):- 
  790   ( Sym=how,   Pred=manner,       Sense=2 ;
  791     Sym=where, Pred=location,     Sense=1 ;
  792     Sym=when,  Pred=unit_of_time, Sense=1 ;
  793     Sym=why,   Pred=reason,       Sense=2 ;
  794     Sym=what,  Pred=thing,        Sense=12 
  795   ), !,
  796   Sem = lam(YNQ,lam(E,app(YNQ,lam(F,B1:drs([],[B1:[]:duplex(whq,
  797                                                       B2:drs([B2:[]:X],[B2:Index:pred(X,Pred,n,Sense)]),    
  798                                                       X,
  799                                                       merge(B3:drs([],[B3:[]:rel(F,X,rel,0)]),app(E,F)))]))))). 
  800
  801semlex(s:qem/(s:to\np),_,Index,Att-[sem:'QUE'|Att],Sem):- !,
  802   Sem = lam(VP,lam(E,app(app(VP,lam(P,merge(B1:drs([B1:[]:X],[]),app(P,X)))),lam(F,merge(B2:drs([],[B2:Index:pred(F,manner,n,2)]),app(E,F)))))). % how to
  803
  804% whose
  805semlex(Cat,whose,Index,Att-[sem:'QUE'|Att],Sem):- 
  806   member(Cat,[s:wq/(s:q/np),
  807               s:wq\(s:dcl/np),
  808               s:wq/(s:dcl\np)]), !,
  809   Sem = lam(VP,app(VP,lam(P,B1:drs([],[B1:[]:duplex(whq,
  810                                                     B2:drs([B2:[]:X,B2:[]:Y],[B2:Index:pred(X,thing,n,12),
  811                                                                               B2:[]:pred(Y,person,n,1),
  812                                                                               B2:[]:rel(X,Y,of,1)]),
  813                                                     X,
  814                                                     app(P,X))])))).
  815
  816semlex(Cat,_,Index,Att-[sem:'QUE'|Att],Sem):- 
  817   member(Cat,[s:qem/(s:dcl\np),
  818               s:_/(s:dcl\np),
  819               s:qem/(s:dcl/np)]), !,   
  820   Sem = lam(VP,app(VP,lam(P,B1:drs([],[B1:[]:duplex(whq,
  821                                               B2:drs([B2:[]:X],[B2:Index:pred(X,thing,n,12)]),
  822                                               X,
  823                                               app(P,X))])))).
  824
  825% how
  826semlex((s:qem/s:dcl)/(s:adj\np),_,Index,Att-[sem:'QUE'|Att],Sem):- !,
  827   Sem = lam(VP,lam(S,app(VP,lam(P,B1:drs([],[B1:[]:duplex(whq,
  828                                                     merge(B2:drs([B2:[]:X],[B2:Index:pred(X,manner,n,2)]),app(P,X)),
  829                                                     X,
  830                                                     app(S,lam(E,B3:drs([],[B3:[]:rel(E,X,rel,0)]))))]))))).
  831
  832% how much energy was lost (??)
  833% how many years has GP been campaigning
  834semlex(Cat,_,Index,Att-[sem:'QUE'|Att],Sem):-
  835   member(Cat,[((s:qem/(s:dcl\np))/n)/(s:adj\np),
  836               ((s:qem/(s:dcl/np))/n)/(s:adj\np)]), !,
  837   closing(CC),
  838   Sem = lam(VPADJ,lam(N,lam(VPDCL,lam(E,app(app(VPADJ,lam(P,B1:drs([],[B1:[]:duplex(whq,
  839                                                                                merge(B2:drs([B2:Index:X],[]),
  840                                                                                      merge(app(N,X),
  841                                                                                            app(P,X))),
  842                                                                     X,
  843                                                                     app(app(VPDCL,lam(P,app(P,X))),E))]))),CC))))).
  844
  845% why does he always wait
  846semlex((s:X\s:X)/s:q,_,Index,Att-[sem:'QUE'|Att],Sem):- !,
  847   Sem = lam(W,lam(S,lam(F,app(S,lam(E,merge(B1:drs([B1:[]:Y],[B1:[]:prop(Y,B2:drs([],[B2:[]:duplex(whq,
  848                                                                                           B3:drs([B3:[]:Z],[B3:Index:pred(Z,reason,n,2)]),
  849                                                                                           Z,
  850                                                                                           app(W,lam(E,B4:drs([],[B4:[]:rel(E,Z,rel,0)]))))])),
  851                                                            B1:[]:rel(E,Y,rel,0)]),
  852                                             app(F,E))))))).
  853
  854
  855/* =========================================================================
  856   Relative pronouns, pied-piping ("N under which S", "NP under which S")
  857========================================================================= */
  858
  859semlex(((np\np)/s:dcl)\((s:F\s:F)/np),_Sym,_Index,Att-[sem:'PRO'|Att],Sem):- !,
  860   closing(CC),
  861   Sem = lam(Prep,lam(S,lam(NP,lam(Q,app(app(app(Prep,lam(P,app(NP,lam(X,merge(app(P,X),app(Q,X)))))),S),CC))))). 
  862
  863semlex(((np\np)/s:dcl)\((np\np)/np),_Sym,_Index,Att-[sem:'PRO'|Att],Sem):- !,
  864   closing(CC),
  865   Sem = lam(Prep,lam(S,lam(NP,lam(Q,app(app(app(Prep,lam(P,app(NP,lam(X,merge(app(P,X),app(Q,X)))))),S),CC))))). 
  866
  867semlex(((n\n)/s:dcl)\((n\n)/np),_Sym,_Index,Att-[sem:'PRO'|Att],Sem):- !,
  868   Sem = lam(Prep,lam(S,lam(N,app(app(Prep,S),N)))).
  869
  870semlex(((np\np)/s:dcl)\((n\n)/np),_Sym,_Index,Att-[sem:'PRO'|Att],Sem):- !,
  871   Sem = lam(Prep,lam(S,lam(NP,lam(P,app(NP,app(app(Prep,S),P)))))).
  872
  873
  874
  875/* =========================================================================
  876   Verbs
  877========================================================================= */
  878
  879semlex(Cat,Sym,Index,Att,Sem):- semlex_verb(Cat,Sym,Index,Att,Sem), !.
  880
  881
  882
  883/* =========================================================================
  884   Other Modifiers
  885========================================================================= */
  886
  887/* -------------------------------------------------------------------------
  888   Superlative: at least/most/best (no idea how to specify semantics)
  889------------------------------------------------------------------------- */
  890
  891semlex(Cat,Sym,Index,Att-[sem:'TOP'|Att],Sem):-
  892   member(Cat,[(s:_/s:_)/(s:asup\np),(np/np)/(s:asup\np)]), !,
  893   Sem = lam(VP,lam(NP,lam(P,app(app(VP,NP),lam(X,merge(B:drs([],[B:Index:pred(X,Sym,a,0)]),app(P,X))))))).
  894
  895semlex(Cat,_Sym,_Index,Att-[sem:'NIL'|Att],Sem):-
  896   member(Cat,[(C/C)/(s:asup\np), 
  897               (C\C)/(s:asup\np), 
  898               (C\C)\(s:asup\np),
  899               (C/C)\(s:asup\np)]), !,
  900   Sem = lam(_,lam(N,N)).
  901
  902
  903/* -------------------------------------------------------------------------
  904   Comparatives
  905------------------------------------------------------------------------- */
  906
  907semlex(Cat,Sym,Index,Att-[sem:'MOR'|Att],Sem):-
  908   member(Cat,[(np/np)\(s:adj\np),
  909               (np/np)/(s:adj\np)]), !,
  910   att(Att,sense,Sense),
  911   Sem = lam(VP,lam(NP,lam(P,app(app(VP,NP),lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,Sense)]),app(P,X))))))).
  912
  913semlex(Cat,Sym,Index,Att-[sem:'MOR'|Att],Sem):-
  914   member(Cat,[((np/np)/(np/np))\(s:adj\np),
  915               ((np\np)\(np\np))/(s:dcl\np)]), !, 
  916   att(Att,sense,Sense),
  917   Sem = lam(VP,lam(NPNP,lam(NP,lam(P,app(app(VP,app(NPNP,NP)),lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,Sense)]),app(P,X)))))))).
  918
  919semlex(Cat,Sym,Index,Att-[sem:'MOR'|Att],Sem):-
  920   Cat = ((((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np)))/(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))))\(s:adj\np), !,
  921   att(Att,sense,Sense),
  922   Sem = lam(_AP,lam(MM,lam(M,lam(VP,app(app(MM,M),lam(Q,lam(F,app(app(VP,Q),lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),app(F,E))))))))))).
  923
  924
  925
  926/* -------------------------------------------------------------------------
  927   Complementizers (Wh)
  928------------------------------------------------------------------------- */
  929
  930semlex(s:qem/s:dcl,Sym,Index,Att-[sem:'QUE'|Att],Sem):- 
  931   ( Sym=how,   Pred=manner,       Sense=2, Rel=manner_rel;
  932     Sym=where, Pred=location,     Sense=1, Rel=loc_rel;
  933     Sym=when,  Pred=unit_of_time, Sense=1, Rel=time_rel;
  934     Sym=why,   Pred=reason,       Sense=2, Rel=reason_rel), !,
  935   Sem = lam(S,lam(F,B1:drs([],[B1:[]:duplex(whq,
  936                                       B2:drs([B2:[]:X],[B2:Index:pred(X,Pred,n,Sense)]),
  937                                       X,
  938                                       app(S,lam(E,merge(B3:drs([],[B3:[]:rel(E,X,Rel,0)]),
  939                                                         app(F,E)))))]))).
  940
  941
  942/* -------------------------------------------------------------------------
  943   Complementizers 
  944------------------------------------------------------------------------- */
  945
  946semlex(Cat,_Sym,Index,Att-[sem:'SUB'|Att],Sem):-
  947   member(Cat,[s:em/s:dcl,s:bem/s:b,s:em/s:b,s:qem/s:dcl]), !,
  948   plosing(CC),
  949   Sem = lam(S,lam(E,merge(B:drs([B:Index:K],
  950                                 [B:[]:prop(K,app(S,CC))]),
  951                           app(E,K)))).
  952
  953% it is illegal for children to smoke
  954%
  955semlex(Cat,_,_Index,Att-[sem:'SUB'|Att],Sem):- 
  956   Cat = (s:for/(s:to\np))/np, !,
  957   Sem = lam(NP,lam(VP,app(VP,NP))).
  958
  959%semlex(Cat,_,Index,Att-[sem:'UNK'|Att],Sem):- 
  960%   Cat = (s:for/(s:to\np))/np, !,
  961%   plosing(CC),
  962%   Sem = lam(NP,lam(VP,lam(E,merge(B:drs([B:Index:K],
  963%                                         [B:[]:prop(K,app(app(VP,NP),CC))]),
  964%                                   app(E,K))))).
  965
  966semlex(Cat,_Sym,_Index,Att-[sem:'NIL'|Att],Sem):-
  967   category(comp,Cat,_), !,
  968   Sem = lam(S,lam(F,app(S,F))).
  969
  970semlex(Cat,_,Index,Att-[sem:'SUB'|Att],Sem):-
  971   Cat = np/s:dcl, !,
  972   plosing(CC),
  973   Sem = lam(S,lam(P,merge(B:drs([B:Index:X],
  974                                 [B:[]:prop(X,app(S,CC))]),
  975                           app(P,X)))).
  976
  977
  978/* -------------------------------------------------------------------------
  979   Locative Adverbs
  980------------------------------------------------------------------------- */
  981
  982semlex(Cat,Sym,Index,Att1-[sem:'DIS'|Att2],Sem):-
  983   category(vpadv,Cat,_),
  984   member(Sym,[somewhere]), !,
  985   role(['Location'],Att1-Att2,[Role]),
  986   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([B:[]:Z],[B:Index:pred(Z,location,n,1),
  987                                                                    B:[]:role(E,Z,Role,1)]),app(F,E))))))).
  988
  989semlex(Cat,Sym,Index,Att1-[sem:'AND'|Att2],Sem):-
  990   category(vpadv,Cat,_),
  991   member(Sym,[anywhere,everywhere]), !,
  992   role(['Location'],Att1-Att2,[Role]),
  993   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,B1:drs([],[B1:[]:imp(B2:drs([B2:[]:Z],[B2:Index:pred(Z,location,n,1)]),
  994                                                                   merge(B3:drs([],[B3:[]:role(E,Z,Role,1)]),app(F,E)))])))))).
  995
  996semlex(Cat,Sym,Index,Att1-[sem:'NOT'|Att2],Sem):-
  997   category(vpadv,Cat,_),
  998   member(Sym,[nowhere]), !,
  999   role(['Location'],Att1-Att2,[Role]),
 1000   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,B1:drs([],[B1:Index:not(merge(B2:drs([B2:[]:Z],[B2:[]:pred(Z,location,n,1),
 1001                                                                                              B2:[]:role(E,Z,Role,1)]),app(F,E)))])))))).
 1002
 1003
 1004/* -------------------------------------------------------------------------
 1005   Not 
 1006------------------------------------------------------------------------- */
 1007
 1008semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 1009   category(vpadv,Cat,_),
 1010   option('--semantics',drg),
 1011   notSymbol(Sym), !,
 1012   Sem = lam(X,lam(Q,lam(F,B1:drs([],[B1:[]:not(app(app(X,Q),lam(E,merge(B2:drs([],[B2:Index:pred(E,Sym,s,1)]),app(F,E)))))])))).
 1013
 1014semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 1015   category(vpadv,Cat,_),
 1016   notSymbol(Sym), 
 1017   option('--x',true), !,
 1018%  Sem = lam(V,lam(Q,lam(F,app(Q,lam(X,B:drs([],[B:Index:not(app(app(V,lam(P,app(P,X))),F))])))))). %%% subject wide scope (preferred?)
 1019   Sem = lam(X,lam(Q,lam(F,B:drs([],[B:Index:not(app(app(X,Q),F))])))).                             %%% negation wide scope (dispreferred?)
 1020
 1021semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 1022   category(vpadv,Cat,_),
 1023   notSymbol(Sym), !,
 1024   Sem = lam(V,lam(Q,lam(F,app(Q,lam(X,B:drs([],[B:Index:not(app(app(V,lam(P,app(P,X))),F))])))))). %%% subject wide scope (preferred?)
 1025%  Sem = lam(X,lam(Q,lam(F,B:drs([],[B:Index:not(app(app(X,Q),F))])))).                             %%% negation wide scope (dispreferred?)
 1026
 1027semlex(Cat,Sym,Index,Att-[sem:'POS'|Att],Sem):-
 1028   category(vpadv,Cat,_),
 1029   member(Sym,[perhaps,maybe,possibly]),
 1030   option('--modal',true), !,
 1031   Sem = lam(V,lam(Q,lam(F,app(Q,lam(X,B:drs([],[B:Index:pos(app(app(V,lam(P,app(P,X))),F))])))))). %%% subject wide scope (preferred?)
 1032%  Sem = lam(X,lam(Q,lam(F,B:drs([],[B:Index:not(app(app(X,Q),F))])))).                             %%% negation wide scope (dispreferred?)
 1033
 1034
 1035/* -------------------------------------------------------------------------
 1036   Cardinals that function as VP modifiers (often wrongly analysed)
 1037------------------------------------------------------------------------- */
 1038
 1039semlex(Cat,Sym,Index,Att1-[sem:'QUA'|Att2],Sem):-
 1040   att(Att1,pos,'CD'),
 1041   category(vpadv,Cat,_),
 1042   string2digit(Sym,Digit), !,
 1043   rel(for,Att1-Att2,Relation),
 1044   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([B:[]:X],[B:Index:card(X,Digit,eq),
 1045                                                                    B:[]:rel(E,X,Relation,0)]),app(F,E))))))).
 1046
 1047/* -------------------------------------------------------------------------
 1048   Intensifiers
 1049------------------------------------------------------------------------- */
 1050
 1051semlex((s:adj\np)/(s:adj\np),Sym,Index,Att-[sem:'INT'|Att],Sem):- !,
 1052   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,0)]),app(F,E))))))).
 1053
 1054
 1055/* -------------------------------------------------------------------------
 1056   NPs that function as VP modifiers
 1057------------------------------------------------------------------------- */
 1058
 1059semlex(Cat,Sym,Index,Att1-[sem:Tag|Att2],Sem):-
 1060   category(vpadv,Cat,_),
 1061   att(Att1,pos,Pos),
 1062   member(Pos,['NNP','NNPS']), !,
 1063   att(Att1,namex,NE), neClassType(NE,Class,Type,Tag),
 1064   rel(on,Att1-Att2,Relation),
 1065   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([B:[]:X],[B:Index:named(X,Sym,Class,Type),
 1066                                                                    B:[]:rel(E,X,Relation,0)]),app(F,E))))))).
 1067
 1068semlex(Cat,Sym,Index,Att1-[sem:'CON'|Att2],Sem):-
 1069   category(vpadv,Cat,_),
 1070   att(Att1,pos,Pos),
 1071   member(Pos,['NN','NNS']), !,
 1072   att(Att1,sense,Sense),
 1073   role(['Time'],Att1-Att2,[Role]),
 1074   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([B:[]:X],[B:Index:pred(X,Sym,n,Sense),
 1075                                                                    B:[]:role(E,X,Role,1)]),app(F,E))))))).
 1076
 1077
 1078/* -------------------------------------------------------------------------
 1079   Comparative (more)
 1080
 1081semlex(Cat,Sym,Index,Att-[sem:'MOR'|Att],Sem):-
 1082   Sym = more,
 1083   Cat = (s:adj\np)/(s:adj\np), !,
 1084   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(D1,merge(B:drs([B:[]:D2],[B:Index:rel(D1,D2,more,0)]),app(F,D1))))))).
 1085------------------------------------------------------------------------- */
 1086
 1087
 1088/* -------------------------------------------------------------------------
 1089   Adverbs (VP modifying)
 1090------------------------------------------------------------------------- */
 1091
 1092%semlex(Cat,Sym,Index,Att-[sem:'UNK'|Att],Sem):-
 1093%   category(vpadv,Cat,_), 
 1094%   option('--x',true),
 1095%   negprefix(_, Sym, Prefix, Core), !,
 1096%   Sem = lam(X,lam(Q,lam(F,B1:drs([],[B1:Index:not(app(app(X,Q),lam(E,merge(B2:drs([],[B2:Index:pred(E,Prefix,a,71),B2:Index:pred(E,Core,a,1)]),app(F,E)))))])))).
 1097
 1098%semlex(Cat,Sym,Index,Att-[sem:'UNK'|Att],Sem):-
 1099%   category(vpadv,Cat,_), 
 1100%   option('--x',true), 
 1101%   negsuffix(_, Sym, Suffix, Core), !,
 1102%   Sem = lam(X,lam(Q,lam(F,B1:drs([],[B1:Index:not(app(app(X,Q),lam(E,merge(B2:drs([],[B2:Index:pred(E,Suffix,a,72),B2:Index:pred(E,Core,a,1)]),app(F,E)))))])))).
 1103
 1104semlex(Cat,Sym,Index,Att1-[sem:'QUA'|Att2],Sem):-
 1105   category(vpadv,Cat,_), 
 1106   member(Sym:Card,[once:1,twice:2,thrice:3]), !,
 1107   role(['Frequency'],Att1-Att2,[Role]),
 1108   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([B:[]:M],[B:[]:role(E,M,Role,1),
 1109                                                                    B:Index:pred(M,time,n,1),
 1110                                                                    B:[]:card(M,Card,eq)]),app(F,E))))))).
 1111
 1112semlex(Cat,Sym,Index,Att1-[sem:'IST'|Att2],Sem):-
 1113   category(vpadv,Cat,_), !, 
 1114   att(Att1,sense,Sense),
 1115   role(['Manner'],Att1-Att2,[Role]),
 1116   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([B:[]:M],[B:[]:role(E,M,Role,1),
 1117                                                                    B:Index:pred(M,Sym,a,Sense)]),app(F,E))))))).
 1118%   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),app(F,E))))))).
 1119
 1120
 1121/* -------------------------------------------------------------------------
 1122   Definite prepositions 
 1123------------------------------------------------------------------------- */
 1124
 1125% "the" as apposition trigger
 1126%
 1127semlex(Cat,the,Index,Att-[sem:'APP'|Att],Sem):- 
 1128   Cat = (np\np)/n, !,
 1129   Sem = lam(N,lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:eq(X,Y)]),
 1130                                             merge(app(N,Y),app(P,X)))))))).
 1131
 1132% temporal
 1133%
 1134semlex(Cat,Sym,Index,Att1-[sem:'PRX'|Att2],Sem):- 
 1135   option('--semantics',amr),
 1136   member(Sym,[this,those]),
 1137   Cat = (np\np)/n, !,
 1138   role(['Time'],Att1-Att2,[Role]),
 1139   Sem = lam(N,lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:pred(Y,this,r,2),B:[]:role(X,Y,Role,1)]),
 1140                                             merge(app(N,Y),app(P,X)))))))).
 1141
 1142semlex(Cat,Sym,Index,Att1-[sem:'DST'|Att2],Sem):- 
 1143   option('--semantics',amr),
 1144   member(Sym,[that,these]),
 1145   Cat = (np\np)/n, !,
 1146   role(['Time'],Att1-Att2,[Role]),
 1147   Sem = lam(N,lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:pred(Y,that,r,2),B:[]:role(X,Y,Role,1)]),
 1148                                             merge(app(N,Y),app(P,X)))))))).
 1149
 1150semlex(Cat,Sym,Index,Att1-[sem:'PRX'|Att2],Sem):- 
 1151   member(Sym,[this,these]),
 1152   Cat = (np\np)/n, !,
 1153   role(['Time'],Att1-Att2,[Role]),
 1154   Sem = lam(N,lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:role(X,Y,Role,1)]),
 1155                                             merge(app(N,Y),app(P,X)))))))).
 1156
 1157semlex(Cat,Sym,Index,Att1-[sem:'DST'|Att2],Sem):- 
 1158   member(Sym,[this,that,those,these]),
 1159   Cat = (np\np)/n, !,
 1160   role(['Time'],Att1-Att2,[Role]),
 1161   Sem = lam(N,lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:role(X,Y,Role,1)]),
 1162                                             merge(app(N,Y),app(P,X)))))))).
 1163
 1164% seven cents a share
 1165%
 1166semlex(Cat,Sym,Index,Att1-[sem:'AND'|Att2],Sem):-
 1167   member(Sym,[a,an,each]),
 1168   Cat = (np\np)/n, !,
 1169   rel(for,Att1-Att2,Relation),
 1170   Sem = lam(N,lam(Q,lam(P,B1:drs([],[B1:[]:imp(merge(B2:drs([B2:[]:Y],[]),
 1171                                                      app(N,Y)),
 1172                                                app(Q,lam(X,merge(B3:drs([],[B3:Index:rel(X,Y,Relation,0)]),
 1173                                                               app(P,X)))))])))).
 1174
 1175% release June 5
 1176%
 1177semlex(Cat,Sym,Index,Att1-[sem:'MOY'|Att2],Sem):- 
 1178   Cat = (np\np)/n, 
 1179   att(Att1,pos,'NNP'),
 1180   att(Att1,namex,NE), neClass(NE,tim),
 1181   role(['Time'],Att1-Att2,[Role]),
 1182   month(Sym,MID), !,
 1183   Sem = lam(N,lam(Q,lam(P,app(Q,lam(X,merge(merge(B:drs([B:[]:Y],[B:[]:role(X,Y,Role,1)]),
 1184                                                   merge(B:drs([],[B:Index:timex(Y,date([]:'+',[]:'XXXX',Index:MID,[]:'XX'))]),app(N,Y))),
 1185                                             app(P,X))))))).
 1186
 1187% To be done: $, another, both, no
 1188%
 1189semlex(Cat,_Sym,Index,Att-[sem:'NIL'|Att],Sem):- 
 1190   Cat = (np\np)/n, !,
 1191   Sem = lam(N,lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,rel,0)]),
 1192                                             merge(app(N,Y),app(P,X)))))))).
 1193
 1194
 1195/* -------------------------------------------------------------------------
 1196   Prepositions
 1197------------------------------------------------------------------------- */
 1198
 1199semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1200   member(Cat,[((np\np)\(np\np))/np,
 1201               ((np\np)/(np\np))/np]), !,
 1202   Sem = lam(Q1,lam(R,lam(Q2,lam(P,merge(app(Q1,lam(X,app(Q2,lam(Y,B:drs([],[B:Index:rel(Y,X,Sym,0)]))))),app(app(R,Q2),P)))))).
 1203
 1204semlex(Cat,_Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1205   Cat = (np/np)/n, !,
 1206   Sem = lam(N,lam(Q,lam(P,merge(merge(B1:drs([B1:[]:Y],[]),app(N,Y)),app(Q,lam(X,merge(B2:drs([],[B2:Index:rel(X,Y,rel,0)]),app(P,X)))))))).
 1207
 1208% except
 1209%
 1210semlex(Cat,except,Index,Att-[sem:'NOT'|Att],Sem):-
 1211   Cat = (np\np)/pp, !,
 1212   Sem = lam(PP,lam(NP,lam(P,app(NP,lam(X,merge(B:drs([],[B:Index:not(app(PP,X))]),app(P,X))))))).
 1213
 1214% ... countries depending on ...
 1215%
 1216semlex(Cat,Sym,Index,Att1-[sem:'EXG'|Att2],Sem):-
 1217   Cat = (np\np)/pp, 
 1218   att(Att1,sense,Sense),
 1219   att(Att1,pos,'VBG'), 
 1220   roles(Sym,s:dcl\np,[Role],Att1-Att2), !,
 1221   Sem = lam(PP,lam(NP,lam(P,app(NP,lam(X,merge(B:drs([B:[]:E],[B:Index:pred(E,Sym,v,Sense),
 1222                                                                B:[]:role(X,E,Role,-1)]),merge(app(PP,E),app(P,X)))))))).
 1223
 1224% ... infrastructure compared to ...
 1225%
 1226semlex(Cat,Sym,Index,Att1-[sem:'EXT'|Att2],Sem):-
 1227   Cat = (np\np)/pp, 
 1228   att(Att1,sense,Sense),
 1229   att(Att1,pos,'VBN'), 
 1230   roles(Sym,s:pss\np,[Role],Att1-Att2), !,
 1231   Sem = lam(PP,lam(NP,lam(P,app(NP,lam(X,merge(B:drs([B:[]:E],[B:Index:pred(E,Sym,v,Sense),
 1232                                                                B:[]:role(X,E,Role,-1)]),merge(app(PP,E),app(P,X)))))))).
 1233
 1234% double prepositions: 
 1235%
 1236semlex(Cat,Sym,Index,Att-[sem:'ROL'|Att],Sem):-
 1237   Cat = (np\np)/pp, !,
 1238   att(Att,sense,Sense),
 1239   Sem = lam(PP,lam(NP,lam(P,app(NP,lam(X,merge(B:drs([B:[]:Y],[B:[]:pred(Y,thing,n,12), 
 1240                                                                B:Index:rel(X,Y,Sym,Sense)]),merge(app(PP,Y),app(P,X)))))))).
 1241
 1242semlex(Cat,Tok,Index,Att-[sem:'NOT'|Att],Sem):-
 1243   \+ option('--semantics',amr),
 1244   Tok = without, Sym = with,
 1245   member(Cat,[(np\np)/np,(np/np)/np]), !,
 1246   Sem = lam(Q1,lam(Q2,lam(P,app(Q2,lam(X,merge(B1:drs([],[B1:Index:not(app(Q1,lam(Y,B2:drs([],[B2:Index:rel(X,Y,Sym,0)]))))]),app(P,X))))))).
 1247
 1248semlex(Cat,Sym,Index,Att-[sem:'RLI'|Att],Sem):-
 1249   member(Cat,[(np\np)/np,(np\np)\np,(np/np)/np]),
 1250   att(Att,scope,inv), !,
 1251   Sem = lam(Q1,lam(Q2,lam(P,app(Q1,lam(Y,app(Q2,lam(X,merge(B:drs([],[B:Index:rel(X,Y,Sym,0)]),app(P,X))))))))).
 1252
 1253semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1254   member(Cat,[(np\np)/np,(np\np)\np,(np/np)/np]), !,
 1255   Sem = lam(Q1,lam(Q2,lam(P,app(Q2,lam(X,app(Q1,lam(Y,merge(B:drs([],[B:Index:rel(X,Y,Sym,0)]),app(P,X))))))))).
 1256
 1257% permafrost three meters below the surface
 1258semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1259   Cat = ((np\np)\np)/np, !,
 1260   Sem = lam(Q1,lam(Q2,lam(Q3,lam(P,app(Q3,lam(X,app(Q2,lam(Y,app(Q1,lam(Z,merge(B:drs([],[B:[]:rel(X,Y,rel,0),
 1261                                                                                           B:Index:rel(Y,Z,Sym,0)]),
 1262                                                                                 app(P,X)))))))))))).
 1263
 1264% for it to take effect
 1265%
 1266semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):- 
 1267   Cat = ((np\np)/(s:to\np))/np, !,
 1268   Sem = lam(NP1,lam(VP,lam(NP2,lam(P,app(NP2,lam(X,merge(app(app(VP,NP1),
 1269                                                              lam(Y,B:drs([],[B:Index:rel(X,Y,Sym,0)]))),
 1270                                                          app(P,X)))))))).
 1271
 1272semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):- 
 1273   Cat = ((np\np)/(s:ng\np))/np, !,
 1274   plosing(CC),
 1275   Sem = lam(NP1,lam(VP,lam(NP2,lam(P,app(NP2,lam(X,merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,Sym,0),
 1276                                                                          B:[]:prop(Y,app(app(VP,NP1),CC))]),
 1277                                                          app(P,X)))))))).
 1278
 1279semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):- 
 1280   member(Cat,[((np\np)/pp)/np]), !,
 1281   Sem = lam(Q1,lam(PP,lam(Q2,lam(P,app(Q2,lam(X,app(Q1,lam(Y,merge(B:drs([],[B:Index:rel(X,Y,Sym,0)]),
 1282                                                                    merge(app(PP,X),app(P,X))))))))))).
 1283
 1284semlex((n/pp)/(s:adj\np),Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1285   Sem = lam(VP,lam(PP,lam(X,app(app(VP,lam(P,app(P,X))),lam(E,merge(B:drs([],[B:Index:rel(X,E,Sym,0)]),app(PP,E))))))).
 1286
 1287semlex(((s:wq/s:q)\(s:wq/s:q))/np,Sym,Index,Att-[sem:'UNK'|Att],Sem):- !,
 1288   Sem = lam(NP,lam(U,lam(YNQ,lam(F,app(app(U,YNQ),lam(E,merge(app(NP,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))),app(F,E)))))))).
 1289
 1290% intensifiers
 1291
 1292semlex(Cat,_,Index,Att-[sem:'INT'|Att],Sem):-
 1293   member(Cat,[((s:adj\np)/(s:adj\np))/n]), !, %  a bit
 1294   Sem = lam(N,lam(A,lam(Q,lam(F,app(app(A,Q),lam(E,merge(merge(B:drs([B:[]:X],[B:Index:rel(E,X,rel,0)]),
 1295                                                                 app(N,X)),
 1296                                                           app(F,E)))))))).
 1297
 1298% Passive Clause
 1299%
 1300semlex(Cat,by,Index,Att1-[sem:'REL'|Att2],Sem):-
 1301   Cat = ((s:pss\np)\(s:pss\np))/np, 
 1302   roles(by,Cat,[Role],Att1-Att2), !,
 1303   Sem = lam(Q2,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,app(Q2,lam(Y,merge(B:drs([],[B:Index:role(E,Y,Role,1)]),app(F,E)))))))))).
 1304     
 1305               
 1306semlex(Cat,Tok,Index,Att-[sem:'NOT'|Att],Sem):-
 1307   \+ option('--semantics',amr),
 1308   Tok = without, Sym = with,
 1309   member(Cat,[((s:X\np)\(s:X\np))/np, 
 1310               ((s:X\np)/(s:X\np))/np]), !,
 1311   Sem = lam(Q2,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B1:drs([],[B1:Index:not(app(Q2,lam(Y,B2:drs([],[B2:Index:rel(E,Y,Sym,0)]))))]),
 1312                                                           app(F,E)))))))).
 1313
 1314semlex(Cat,Sym,Index,Att-[sem:'RLI'|Att],Sem):-
 1315   member(Cat,[((s:X\np)\(s:X\np))/np,
 1316	       ((s:X\np)/(s:X\np))/np,
 1317               ((s:X\np)\(s:X\np))\np,
 1318               ((s:X\np)/(s:X\np))\np]),
 1319   att(Att,scope,inv), !,
 1320   Sem = lam(Q2,lam(V,lam(Q,lam(F,app(Q2,lam(Y,app(app(V,Q),lam(E,merge(B:drs([],[B:Index:rel(E,Y,Sym,0)]),app(F,E)))))))))).
 1321
 1322semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1323   member(Cat,[((s:X\np)\(s:X\np))/np, 
 1324               ((s:X\np)/(s:X\np))/np, 
 1325               ((s:X\np)\(s:X\np))\np, 
 1326               ((s:X\np)/(s:X\np))\np]), !,
 1327   Sem = lam(Q2,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,app(Q2,lam(Y,merge(B:drs([],[B:Index:rel(E,Y,Sym,0)]),app(F,E)))))))))).
 1328
 1329% from 8% the week before
 1330semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1331   member(Cat,[(((s:X\np)\(s:X\np))\np)/np,
 1332               (((s:X\np)\(s:X\np))/np)/np]), !,
 1333   Sem = lam(Q3,lam(Q2,lam(V,lam(Q1,lam(F,app(app(V,Q1),lam(E,app(Q3,lam(Z,merge(B1:drs([],[B1:Index:rel(E,Z,Sym,0)]),
 1334                                                                                 app(Q2,lam(Y,merge(B2:drs([],[B2:[]:rel(E,Y,rel,0)]),
 1335                                                                                                    app(F,E)))))))))))))).
 1336
 1337semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1338   member(Cat,[(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np)))/np,
 1339               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/np,
 1340               (((s:X\np)/(s:X\np))\((s:X\np)/(s:X\np)))/np,
 1341               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))\np]), !,
 1342   Sem = lam(Q,lam(AV,lam(VP,lam(NP,lam(F,app(app(app(AV,VP),NP),lam(E,merge(app(Q,lam(Z,B:drs([],[B:Index:rel(E,Z,Sym,0)]))),
 1343                                                                             app(F,E))))))))).
 1344
 1345semlex(Cat,_Sym,Index,Att1-[sem:'REL'|Att2],Sem):-
 1346   member(Cat,[(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np)))/n,
 1347               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/n,
 1348               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))\n,
 1349               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/pp]), !,
 1350   role(['Time'],Att1-Att2,[Role]),
 1351   Sem = lam(N,lam(AV,lam(VP,lam(NP,lam(F,app(app(app(AV,VP),NP),lam(E,merge(merge(B:drs([B:[]:Z],[B:Index:role(E,Z,Role,1)]),
 1352                                                                                   app(N,Z)),
 1353                                                                             app(F,E))))))))).
 1354
 1355semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1356   member(Cat,[(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np)))/s:dcl,
 1357               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/s:dcl,
 1358               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))\s:dcl]), !,
 1359   Sem = lam(S,lam(AV,lam(VP,lam(NP,lam(F,app(app(app(AV,VP),NP),lam(E,merge(app(S,lam(Z,B:drs([],[B:Index:rel(E,Z,Sym,0)]))),
 1360                                                                             app(F,E))))))))).
 1361
 1362semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 1363   member(Cat,[(((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/(s:pss\np),
 1364               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/(s:adj\np)]), !,
 1365   Sem = lam(VP1,lam(AV,lam(VP2,lam(NP,lam(F,app(app(app(AV,VP2),NP),lam(E,merge(app(app(VP1,lam(P,merge(B1:drs([B1:[]:Z],[B1:[]:pred(Z,thing,n,12)]),
 1366                                                                                                         app(P,Z)))),lam(Z,B2:drs([],[B2:Index:rel(E,Z,Sym,0)]))),
 1367                                                                                 app(F,E))))))))).
 1368
 1369/* -------------------------------------------------------------------------
 1370   Discourse connectors: VP if S
 1371------------------------------------------------------------------------- */
 1372
 1373semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 1374   option('--semantics',amr),
 1375   member(Cat,[((s:X\np)\(s:X\np))/s:dcl]), !,
 1376   Sem = lam(S,lam(VP,lam(Q,lam(F,app(app(VP,Q),lam(Y,merge(app(F,Y),app(S,lam(E,B2:drs([],[B2:Index:rel(Y,E,condition,1)])))))))))).
 1377
 1378semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 1379   member(Cat,[((s:X\np)\(s:X\np))/s:dcl]), !,
 1380   plosing(CC),
 1381   Sem = lam(S,lam(VP,lam(Q,lam(F,B:drs([],[B:Index:imp(app(S,CC),app(app(VP,Q),F))]))))).
 1382
 1383
 1384/* -------------------------------------------------------------------------
 1385   Discourse connectors: where
 1386------------------------------------------------------------------------- */
 1387
 1388semlex(Cat,where,Index,Att1-[symbol:'location',sem:'SUB'|Att2],Sem):-
 1389   member(Cat,[((s:X\np)\(s:X\np))/s:dcl]), !,
 1390   role(['Time'],Att1-Att2,[Role]),
 1391   Sem = lam(S,lam(V,lam(Q,lam(F,merge(merge(B1:drs([B1:[]:T],[B1:Index:pred(T,location,n,1)]),
 1392                                                app(app(V,Q),lam(E,merge(B2:drs([],[B2:[]:role(E,T,Role,1)]),app(F,E))))),
 1393                                       app(S,lam(E2,B3:drs([],[B3:[]:role(E2,T,Role,1)])))))))).
 1394
 1395
 1396/* -------------------------------------------------------------------------
 1397   Discourse connectors: when
 1398------------------------------------------------------------------------- */
 1399
 1400semlex(Cat,when,Index,Att-[sem:'SUB'|Att],Sem):-
 1401   option('--tense',true),
 1402   option('--theory',drt),
 1403   member(Cat,[((s:X\np)\(s:X\np))/s:dcl]), !,
 1404   Sem = lam(S,lam(V,lam(Q,lam(F,merge(merge(B1:drs([B1:[]:T],[B1:Index:pred(T,time,n,1)]),
 1405                                             app(S,lam(E,B2:drs([],[B2:[]:rel(E,T,temp_included,1)])))),
 1406                                       app(app(V,Q),lam(E,merge(B3:drs([],[B3:[]:rel(E,T,temp_included,1)]),app(F,E))))))))).
 1407
 1408
 1409/* -------------------------------------------------------------------------
 1410   Discourse connectors: as does NP
 1411------------------------------------------------------------------------- */
 1412
 1413semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 1414   option('--theory',drt),
 1415   Cat = ((s:X\np)\(s:X\np))/s:inv, !,
 1416   att(Att,sense,Sense),
 1417   Sem = lam(S,lam(V,lam(Q,lam(F,merge(app(app(V,Q),lam(E,app(F,E))),
 1418                                       app(S,lam(E,B:drs([],[B:Index:pred(E,Sym,r,Sense)])))))))).
 1419
 1420semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 1421   option('--theory',sdrt),
 1422   Cat = ((s:X\np)\(s:X\np))/s:inv, !,
 1423   plosing(CC),
 1424   Sem = lam(S,lam(V,lam(Q,lam(F,sdrs([sub(lab(K1,B1),lab(K2,B2))],[Index:rel(K1,K2,Sym)]))))),
 1425   B1 = app(app(V,Q),lam(E,app(F,E))),
 1426   B2 = app(S,CC).
 1427
 1428
 1429/* -------------------------------------------------------------------------
 1430   Discourse connectors (VP modifying)
 1431------------------------------------------------------------------------- */
 1432
 1433semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 1434   option('--theory',sdrt),
 1435   member(Cat,[((s:X\np)\(s:X\np))/s:_,
 1436               ((s:X\np)/(s:X\np))/s:_]), !,
 1437   plosing(CC),
 1438   Sem = lam(S,lam(V,lam(Q,lam(F,sdrs([sub(lab(K1,B1),lab(K2,B2))],[Index:rel(K1,K2,Sym)]))))),
 1439   B1 = app(app(V,Q),F),
 1440   B2 = app(S,CC).
 1441
 1442semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 1443   member(Cat,[((s:X\np)\(s:X\np))/s,
 1444               ((s:X\np)/(s:X\np))/s,
 1445               ((s:X\np)\(s:X\np))/s:_,
 1446               ((s:X\np)/(s:X\np))/s:_]), !,
 1447   plosing(CC),
 1448   Sem = lam(S,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([B:[]:Z],
 1449                                                                [B:Index:rel(E,Z,Sym,0),
 1450                                                                 B:[]:prop(Z,app(S,CC))]),
 1451                                                          app(F,E)))))))).
 1452
 1453semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 1454   member(Cat,[(((s:X\np)\(s:X\np))\np)/s:dcl ]), !,
 1455   plosing(CC),
 1456   Sem = lam(S,lam(NP,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([B:[]:Z],
 1457                                                                       [B:Index:rel(E,Z,Sym,0),
 1458                                                                        B:[]:prop(Z,app(S,CC))]),
 1459                                                                 merge(app(NP,lam(U,B2:drs([],[B2:[]:rel(E,U,rel,0)]))),
 1460                                                                       app(F,E)))))))))).
 1461
 1462semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 1463   member(Cat,[((s:X\np)/s:_)/(s:X\np)]), !,
 1464   plosing(CC),
 1465   Sem = lam(V,lam(S,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([B:[]:Z],
 1466                                                                [B:Index:rel(E,Z,Sym,0),
 1467                                                                 B:[]:prop(Z,app(S,CC))]),
 1468                                                          app(F,E)))))))).
 1469
 1470
 1471/* -------------------------------------------------------------------------
 1472   Prepositions:  "VP prep VPing"
 1473------------------------------------------------------------------------- */
 1474
 1475semlex(Cat,without,Index,Att-[sem:'NOT'|Att],Sem):-
 1476   \+ option('--semantics',amr),
 1477   member(Cat,[((s:X\np)\(s:X\np))/(s:ng\np),
 1478               ((s:X\np)/(s:X\np))/(s:ng\np)]), !,
 1479   CC=lam(Y,B2:drs([],[B2:Index:rel(E,Y,manner,1)])),
 1480   Sem = lam(VA,lam(VM,lam(Q,lam(F,app(Q,
 1481                                       lam(Z,app(app(VM,lam(P,app(P,Z))),
 1482                                                 lam(E,merge(app(F,E),
 1483                                                             B:drs([],[B:Index:not(app(app(VA,lam(P,app(P,Z))),
 1484                                                                                   CC))])))))))))).
 1485
 1486semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 1487   option('--semantics',amr),
 1488   member(Cat,[((s:X\np)\(s:X\np))/(s:adj\np),((s:X\np)/(s:X\np))/(s:adj\np),
 1489               ((s:X\np)\(s:X\np))/(s:pss\np),((s:X\np)/(s:X\np))/(s:pss\np)]), !,
 1490   Sem = lam(VA,lam(VM,lam(Q,lam(F,app(Q,
 1491                                       lam(Z,app(app(VM,lam(P,app(P,Z))),
 1492                                                 lam(E,merge(app(F,E),
 1493                                                             app(app(VA,lam(P,app(P,Z))),
 1494                                                                 lam(G,B:drs([],[B:Index:rel(E,G,condition,1)])))))))))))).
 1495
 1496semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 1497   member(Cat,[((s:X\np)\(s:X\np))/(s:adj\np),((s:X\np)/(s:X\np))/(s:adj\np),
 1498               ((s:X\np)\(s:X\np))/(s:pss\np),((s:X\np)/(s:X\np))/(s:pss\np)]), !,
 1499   plosing(CC),
 1500   Sem = lam(VA,lam(VM,lam(Q,lam(F,app(Q,lam(Z,B:drs([],[B:Index:imp(app(app(VA,lam(P,app(P,Z))),CC),
 1501                                                                     app(app(VM,lam(P,app(P,Z))),F))]))))))).
 1502
 1503
 1504semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1505   member(Cat,[((s:X\np)\(s:X\np))/(s:ng\np),((s:X\np)/(s:X\np))/(s:ng\np),
 1506               ((s:X\np)\(s:X\np))/(s:adj\np),((s:X\np)/(s:X\np))/(s:adj\np),
 1507               ((s:X\np)\(s:X\np))/(s:pss\np),((s:X\np)/(s:X\np))/(s:pss\np)]), !,
 1508   Sem = lam(VA,lam(VM,lam(Q,lam(F,app(Q,
 1509                                       lam(Z,app(app(VM,lam(P,app(P,Z))),
 1510                                                 lam(E,merge(app(F,E),
 1511                                                             app(app(VA,lam(P,app(P,Z))),
 1512                                                                 lam(G,B:drs([],[B:Index:rel(E,G,Sym,0)])))))))))))).
 1513
 1514% used by type-changing rule
 1515%
 1516semlex(Cat,Sym,Index,Att1-[sem:'REL'|Att2],Sem):-
 1517   member(Cat,[((s:X\np)\(s:X\np))/(s:to\np), 
 1518               ((s:X\np)/(s:X\np))/(s:to\np)]), !,
 1519   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2), 
 1520   Sem = lam(VP,lam(V,lam(Q,lam(F,app(Q,lam(Z,app(app(V,Q),
 1521                                      lam(E,app(app(VP,lam(P,app(P,Z))),
 1522                                                lam(Y,merge(B2:drs([],[B2:Index:role(E,Y,Role,1)]),app(F,E)))))))))))).
 1523
 1524% it is clear who planted the bomb
 1525%
 1526semlex(Cat,Sym,Index,Att1-[sem:'QUE'|Att2],Sem):-
 1527   Sym = who,
 1528   member(Cat,[
 1529               ((s:X\np)\(s:X\np))/(s:dcl\np), % which
 1530               ((s:X\np)\(s:X\np))/(s:dcl/np), % who
 1531               ((s:X\np)/(s:X\np))/(s:dcl\np)]), !,
 1532   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2), 
 1533   NP = lam(R,merge(B1:drs([B1:[]:W],[B1:Index:pred(W,person,n,1)]),app(R,W))),
 1534   Sem = lam(VP,lam(V,lam(Q,lam(F,app(Q,lam(Z,app(app(V,lam(P,app(P,Z))),
 1535                                      lam(E,app(app(VP,NP),
 1536                                                lam(Y,merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),app(F,E)))))))))))).
 1537
 1538% specify which was the 
 1539%
 1540semlex(Cat,Sym,Index,Att1-[sem:'QUE'|Att2],Sem):-
 1541   Sym = which,
 1542   member(Cat,[((s:X\np)\(s:X\np))/(s:dcl\np),  
 1543               ((s:X\np)\(s:X\np))/(s:dcl/np),  
 1544               ((s:X\np)/(s:X\np))/(s:dcl\np)]), !,
 1545   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2), 
 1546   NP = lam(R,merge(B1:drs([B1:[]:W],[B1:Index:pred(W,thing,n,12)]),app(R,W))),
 1547   Sem = lam(VP,lam(V,lam(Q,lam(F,app(Q,lam(Z,app(app(V,lam(P,app(P,Z))),
 1548                                      lam(E,app(app(VP,NP),
 1549                                                lam(Y,merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),app(F,E)))))))))))).
 1550
 1551% all other cases
 1552%
 1553semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1554   member(Cat,[((s:X\np)\(s:X\np))/(s:_\np),  
 1555               ((s:X\np)\(s:X\np))/(s:_/np)]), !,
 1556   NP = lam(R,merge(B1:drs([B1:[]:W],[B1:Index:pred(W,thing,n,12)]),app(R,W))),
 1557   Sem = lam(VP,lam(V,lam(Q,lam(F,app(Q,lam(Z,app(app(V,lam(P,app(P,Z))),
 1558                                      lam(E,app(app(VP,NP),
 1559                                                lam(Y,merge(B2:drs([],[B2:[]:rel(E,Y,Sym,0)]),app(F,E)))))))))))).
 1560
 1561%
 1562%
 1563semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1564   member(Cat,[
 1565               ((s:adj\np)/(s:to\np))/(s:adj\np), 
 1566               ((s:adj\np)/(s:for\np))/(s:adj\np), 
 1567               ((s:b\np)/(s:ng\np))/(s:adj\np), 
 1568               ((s:b\np)/(s:dcl\np))/(s:adj\np), 
 1569               ((s:pt\np)/(s:ng\np))/(s:adj\np), 
 1570               ((s:dcl\np)/(s:b\np))/(s:adj\np), 
 1571               ((s:dcl\np)/(s:adj\np))/(s:adj\np)]), !,
 1572   Sem = lam(VP,lam(V,lam(Q,lam(F,app(app(V,Q),
 1573                                      lam(E,app(app(VP,
 1574                                                    lam(P,merge(B1:drs([B1:[]:Z],[B1:[]:pred(Z,thing,n,12)]),app(P,Z)))),
 1575                                                lam(Y,merge(B2:drs([],[B2:Index:rel(E,Y,Sym,0)]),app(F,E)))))))))).
 1576
 1577
 1578/* -------------------------------------------------------------------------
 1579   Control Prepositions (NP)
 1580------------------------------------------------------------------------- */
 1581
 1582semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1583   member(Cat,[(((s:X\np)\(s:X\np))/(s:ng\np))/np,
 1584               (((s:X\np)\(s:X\np))/(s:pt\np))/np,
 1585               (((s:X\np)\(s:X\np))/(s:pss\np))/np,
 1586               (((s:X\np)\(s:X\np))/(s:b\np))/np,
 1587               (((s:X\np)\(s:X\np))/(s:to\np))/np]), !,
 1588   Sem =  lam(NP,lam(VP,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,app(app(VP,lam(P,app(NP,lam(Y,merge(B:drs([],[B:Index:rel(E,Y,Sym,0)]),
 1589                                                                                                 app(P,Y)))))),F)))))))).
 1590
 1591/* -------------------------------------------------------------------------
 1592   Control Prepositions (N)
 1593   Example: "in", as in: "I had a plan in place to respond."
 1594------------------------------------------------------------------------- */
 1595
 1596semlex(Cat,Sym,Index,Att1-[sem:'REL'|Att2],Sem):-
 1597   member(Cat,[(((s:X\np)\(s:X\np))/(s:ng\np))/n,
 1598               (((s:X\np)\(s:X\np))/(s:pt\np))/n,
 1599               (((s:X\np)\(s:X\np))/(s:pss\np))/n,
 1600               (((s:X\np)\(s:X\np))/(s:b\np))/n,
 1601               (((s:X\np)\(s:X\np))/(s:to\np))/n]), !,
 1602   plosing(CC),
 1603   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2),
 1604   Sem = lam(N,lam(VP,lam(Y,lam(Q,lam(F,app(Q,lam(U,app(app(Y,lam(P,app(P,U))),lam(E,merge(B:drs([B:[]:Z,B:[]:K],
 1605                                                                                                 [B:Index:rel(E,Z,Sym,0),
 1606								                                  B:[]:prop(K,app(app(VP,lam(P,app(P,U))),CC)),
 1607                                                                                                  B:[]:rel(E,K,Role,0)]),
 1608                                                                 merge(app(N,Z),app(F,E)))))))))))).
 1609
 1610
 1611semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1612   Cat = (((s:X\np)\(s:X\np))/pp)/np, !,
 1613   Sem =  lam(NP,lam(PP,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(app(NP,lam(Y,B:drs([],[B:Index:rel(E,Y,Sym,0)]))),
 1614                                                                   merge(app(PP,E),app(F,E)))))))))).
 1615
 1616semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1617   member(Cat,[((s:_\s:_)/pp)/np,
 1618               ((s:_/s:_)/pp)/np]), !,   
 1619   Sem = lam(Q,lam(PP,lam(S,lam(F,app(S,lam(E,merge(app(Q,lam(Y,B:drs([],[B:Index:rel(E,Y,Sym,0)]))),
 1620                                                    merge(app(PP,E),app(F,E))))))))).
 1621
 1622semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1623   member(Cat,[(s:wq\s:wq)/np,
 1624               (s:X/s:X)\np,
 1625               (s:X/s:X)/np,
 1626               (s:X\s:X)/np]), !,   
 1627   Sem = lam(Q,lam(S,lam(F,app(S,lam(E,merge(app(Q,lam(Y,B:drs([],[B:Index:rel(E,Y,Sym,0)]))),app(F,E))))))).
 1628
 1629
 1630/* -------------------------------------------------------------------------
 1631   Sentence-initial determiners
 1632------------------------------------------------------------------------- */
 1633
 1634semlex(Cat,Lemma,Index,Att1-[sem:'PRX'|Att2],Sem):-
 1635   option('--semantics',amr),
 1636   member(Lemma,[this,these]), 
 1637   member(Cat,[(s:X/s:X)/n,(s:X\s:X)/n]), !,
 1638   role(['Time'],Att1-Att2,[Role]),
 1639   Sem = lam(P,lam(S,lam(F,alfa(def,merge(B1:drs([B1:[]:Y],[B1:Index:pred(Y,this,r,2)]),app(P,Y)),
 1640                                    app(S,lam(E,merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),app(F,E)))))))).
 1641
 1642semlex(Cat,Lemma,Index,Att1-[sem:'DST'|Att2],Sem):-
 1643   option('--semantics',amr),
 1644   member(Lemma,[that,those]), 
 1645   member(Cat,[(s:X/s:X)/n,(s:X\s:X)/n]), !,
 1646   role(['Time'],Att1-Att2,[Role]),
 1647   Sem = lam(P,lam(S,lam(F,alfa(def,merge(B1:drs([B1:[]:Y],[B1:Index:pred(Y,that,r,2)]),app(P,Y)),
 1648                                    app(S,lam(E,merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),app(F,E)))))))).
 1649
 1650semlex(Cat,Lemma,Index,Att1-[sem:'PRX'|Att2],Sem):-
 1651   member(Lemma,[this,these]), 
 1652   member(Cat,[(s:X/s:X)/n,(s:X\s:X)/n]), !,
 1653   role(['Time'],Att1-Att2,[Role]),
 1654   Sem = lam(P,lam(S,lam(F,alfa(def,merge(B1:drs([B1:Index:Y],[]),app(P,Y)),
 1655                                    app(S,lam(E,merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),app(F,E)))))))).
 1656
 1657semlex(Cat,Lemma,Index,Att1-[sem:'DST'|Att2],Sem):-
 1658   member(Lemma,[the,that,those]), 
 1659   member(Cat,[(s:X/s:X)/n,(s:X\s:X)/n]), !,
 1660   role(['Time'],Att1-Att2,[Role]),
 1661   Sem = lam(P,lam(S,lam(F,alfa(def,merge(B1:drs([B1:Index:Y],[]),app(P,Y)),
 1662                                    app(S,lam(E,merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),app(F,E)))))))).
 1663
 1664semlex(Cat,Lemma,Index,Att1-[sem:'DEF'|Att2],Sem):-
 1665   member(Lemma,[the]), 
 1666   member(Cat,[(s:X/s:X)/n,(s:X\s:X)/n]), !,
 1667   role(['Time'],Att1-Att2,[Role]),
 1668   Sem = lam(P,lam(S,lam(F,alfa(def,merge(B1:drs([B1:Index:Y],[]),app(P,Y)),
 1669                                    app(S,lam(E,merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),app(F,E)))))))).
 1670
 1671semlex(Cat,Lemma,Index,Att1-[sem:'AND'|Att2],Sem):-
 1672   member(Lemma,[all,every,each,any]), 
 1673   member(Cat,[(s:X/s:X)/n,(s:X\s:X)/n]), !,
 1674   role(['Time'],Att1-Att2,[Role]),
 1675   Sem = lam(P,lam(S,lam(F,B1:drs([],[B1:[]:imp(merge(B2:drs([B2:Index:Y],[]),app(P,Y)),
 1676                                          app(S,lam(E,merge(B3:drs([],[B3:[]:role(E,Y,Role,1)]),app(F,E)))))])))).
 1677
 1678semlex(Cat,_Sym,Index,Att1-[sem:'DIS'|Att2],Sem):-
 1679   member(Cat,[(s:X/s:X)/n,
 1680               (s:X\s:X)/n]), !,
 1681   rel(for,Att1-Att2,Relation),
 1682   Sem = lam(P,lam(S,lam(F,merge(merge(B1:drs([B1:Index:Y],[]),app(P,Y)),
 1683                                 app(S,lam(E,merge(B2:drs([],[B2:[]:rel(E,Y,Relation,0)]),app(F,E)))))))).
 1684
 1685
 1686/* -------------------------------------------------------------------------
 1687   Example: With violence escalating in Kosovo, S
 1688------------------------------------------------------------------------- */
 1689
 1690semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1691   member(Cat,[((s:X/s:X)/(s:ng\np))/np,
 1692               ((s:X/s:X)/(s:pt\np))/np,
 1693               ((s:X/s:X)/(s:b\np))/np,
 1694               ((s:X/s:X)/(s:adj\np))/np]), !,   
 1695   closing(CC),
 1696   Sem = lam(Q,lam(VP,lam(S,lam(F,app(S,lam(E,app(app(VP,lam(P,app(Q,lam(Y,merge(B:drs([],[B:Index:rel(E,Y,Sym,0)]),merge(app(P,Y),app(F,E))))))),CC))))))).
 1697
 1698semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1699   member(Cat,[((s:X/s:X)\np)/np]), !,
 1700   Sem = lam(Q1,lam(Q2,lam(S,lam(F,app(S,lam(E,app(Q2,lam(Y,app(Q1,lam(Z,merge(B:drs([],[B:Index:rel(Y,Z,Sym,0)]),app(F,E)))))))))))).
 1701
 1702semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1703   member(Cat,[((s:X/s:X)\np)/s:dcl]), !,
 1704   Sem = lam(S1,lam(Q2,lam(S,lam(F,app(S,lam(E,app(Q2,lam(Y,app(S1,lam(E,merge(B:drs([],[B:Index:rel(E,Y,Sym,0)]),app(F,E)))))))))))).
 1705
 1706% Where on the body ...
 1707semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1708   Cat = ((s:wq/(s:q/pp))\(s:wq/(s:q/pp)))/np,
 1709   Sem = lam(NP,lam(Q,lam(VP,lam(F,app(app(Q,VP),lam(E,merge(app(NP,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))),
 1710                                                             app(F,E)))))))). 
 1711
 1712
 1713/* -------------------------------------------------------------------------
 1714   instead (of)
 1715------------------------------------------------------------------------- */
 1716
 1717semlex(Cat,instead,Index,Att-[sem:'NOT'|Att],Sem):-
 1718   member(Cat,[((s:X\np)\(s:X\np))/pp,
 1719               ((s:X\np)/(s:X\np))/pp,
 1720               ((s:adj\np)\(s:adj\np))/pp]), !,
 1721   Sem = lam(PP,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,B:drs([],[B:Index:not(merge(app(PP,E),app(F,E)))]))))))). 
 1722
 1723
 1724/* -------------------------------------------------------------------------
 1725   VP ... according to ...
 1726------------------------------------------------------------------------- */
 1727
 1728semlex(Cat,Sym,Index,Att1-[sem:'EXG'|Att2],Sem):-
 1729   att(Att1,pos,'VBG'),
 1730   member(Cat,[((s:X\np)\(s:X\np))/pp,
 1731               ((s:X\np)/(s:X\np))/pp,
 1732               ((s:adj\np)\(s:adj\np))/pp]), !,
 1733   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2),
 1734   Sem = lam(PP,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([B:[]:Y],[B:Index:pred(Y,Sym,v,0),
 1735                                                                           B:[]:role(Y,E,Role,1)]),
 1736                                                           merge(app(PP,Y),app(F,E))))))))). 
 1737
 1738semlex(Cat,Sym,Index,Att1-[sem:'EXT'|Att2],Sem):-
 1739   att(Att1,pos,'VBN'),
 1740   member(Cat,[((s:X\np)\(s:X\np))/pp,
 1741               ((s:X\np)/(s:X\np))/pp,
 1742               ((s:adj\np)\(s:adj\np))/pp]), !,
 1743   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2),
 1744   Sem = lam(PP,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([B:[]:Y],[B:Index:pred(Y,Sym,v,0),
 1745                                                                           B:[]:role(Y,E,Role,1)]),
 1746                                                           merge(app(PP,Y),app(F,E))))))))). 
 1747
 1748
 1749/* -------------------------------------------------------------------------
 1750   Double prepositions, such as "out of", "together with"
 1751------------------------------------------------------------------------- */
 1752
 1753semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 1754   member(Cat,[((s:X\np)\(s:X\np))/pp,
 1755               ((s:X\np)/(s:X\np))/pp,
 1756               ((s:adj\np)\(s:adj\np))/pp]), !,
 1757   Sem = lam(PP,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,0)]),merge(app(PP,E),app(F,E))))))))). 
 1758
 1759
 1760/* -------------------------------------------------------------------------
 1761   Double prepositions, 
 1762     such as "According to NP, ..." (VBG)
 1763         and "Based on reports, ..." (VBN)
 1764------------------------------------------------------------------------- */
 1765
 1766semlex(Cat,Sym,Index,Att1-[sem:'EXG'|Att2],Sem):-
 1767   att(Att1,pos,'VBG'),
 1768   member(Cat,[(s:X/s:X)/pp,(s:X\s:X)/pp]), !, 
 1769   plosing(CC),
 1770   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2),
 1771   Sem = lam(PP,lam(S,lam(F,merge(B:drs([B:[]:E,B:[]:P],[B:Index:pred(E,Sym,v,0),
 1772                                                         B:[]:role(E,P,Role,1), 
 1773                                                         B:[]:prop(P,app(S,CC))]),
 1774                                  merge(app(PP,E),app(F,E)))))).
 1775
 1776semlex(Cat,Sym,Index,Att1-[sem:'EXN'|Att2],Sem):-
 1777   att(Att1,pos,'VBN'),
 1778   member(Cat,[(s:X/s:X)/pp,(s:X\s:X)/pp]), !, 
 1779   plosing(CC),
 1780   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2),
 1781   Sem = lam(PP,lam(S,lam(F,merge(B:drs([B:[]:E,B:[]:P],[B:Index:pred(E,Sym,v,0),
 1782                                                         B:[]:role(E,P,Role,1), 
 1783                                                         B:[]:prop(P,app(S,CC))]),
 1784                                  merge(app(PP,E),app(F,E)))))).
 1785
 1786semlex(Cat,Sym,Index,Att1-[sem:'NOT'|Att2],Sem):-
 1787   Sym = nowhere,
 1788   member(Cat,[(s:X/s:X)/pp,
 1789               (s:X\s:X)/pp]), !, 
 1790   role(['Location'],Att1-Att2,[Role]),
 1791   Sem = lam(PP,lam(S,lam(F,app(S,lam(E,B:drs([],[B:Index:not(merge(B:drs([B:Index:Y],[B:[]:pred(Y,location,n,1),
 1792                                                                                       B:[]:role(E,Y,Role,1)]),
 1793                                                                merge(app(PP,Y),app(F,E))))])))))).
 1794
 1795semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 1796   member(Cat,[(s:X/s:X)/pp,
 1797               (s:X\s:X)/pp]), !, 
 1798   att(Att,sense,Sense),
 1799   Sem = lam(PP,lam(S,lam(F,app(S,lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),
 1800                                              merge(app(PP,E),
 1801                                                    app(F,E)))))))). 
 1802
 1803
 1804/* -------------------------------------------------------------------------
 1805   VP adverb modifier (negation)
 1806------------------------------------------------------------------------- */
 1807
 1808semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 1809   notSymbol(Sym),
 1810   option('--semantics',drg),
 1811   member(Cat,[((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)),
 1812               ((s:X\np)/(s:X\np))\((s:X\np)/(s:X\np)),
 1813               ((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)),
 1814               ((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))]), !,
 1815   Sem = lam(AV,lam(VP,lam(NP,lam(F,B1:drs([],[B1:[]:not(app(app(app(AV,VP),NP),lam(E,merge(B2:drs([],[B2:Index:pred(E,Sym,s,1)]),app(F,E)))))]))))).
 1816
 1817
 1818semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 1819   notSymbol(Sym), 
 1820   member(Cat,[((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)),
 1821               ((s:X\np)/(s:X\np))\((s:X\np)/(s:X\np)),
 1822               ((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)),
 1823               ((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))]), !,
 1824   Sem = lam(AV,lam(VP,lam(NP,lam(F,B:drs([],[B:Index:not(app(app(app(AV,VP),NP),lam(E,app(F,E))))]))))).
 1825
 1826
 1827/* -------------------------------------------------------------------------
 1828   VP adverb modifier (Cardinals that function as modifiers)
 1829------------------------------------------------------------------------- */
 1830
 1831semlex(Cat,Sym,Index,Att1-[sem:'QUA'|Att2],Sem):-
 1832   att(Att1,pos,'CD'),
 1833   member(Cat,[((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)),
 1834               ((s:X\np)/(s:X\np))\((s:X\np)/(s:X\np)),
 1835               ((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)),  
 1836               ((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))]), 
 1837   string2digit(Sym,Digit), !,
 1838   role(['Time'],Att1-Att2,[Role]),
 1839   Sem = lam(AV,lam(VP,lam(NP,lam(F,app(app(app(AV,VP),NP),lam(E,merge(B:drs([B:[]:Y],[B:Index:card(Y,Digit,eq),
 1840                                                                                       B:[]:role(E,Y,Role,1)]),
 1841                                                                       app(F,E)))))))).
 1842
 1843/* -------------------------------------------------------------------------
 1844   VP adverb modifier (NPs that function as modifiers) `Saturday evening`
 1845------------------------------------------------------------------------- */
 1846
 1847semlex(Cat,Sym,Index,Att1-[sem:'CON'|Att2],Sem):-
 1848   member(Cat,[((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)),
 1849               ((s:X\np)/(s:X\np))\((s:X\np)/(s:X\np)),
 1850               ((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)),  
 1851               ((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))]), 
 1852   att(Att1,pos,Pos),
 1853   member(Pos,['NN','NNS','NNP','NNPS']), !,
 1854   att(Att1,sense,Sense),
 1855   role(['Time'],Att1-Att2,[Role]),
 1856   Sem = lam(AV,lam(VP,lam(NP,lam(F,app(app(app(AV,VP),NP),lam(E,merge(B:drs([B:[]:Y],[B:Index:pred(Y,Sym,n,Sense),
 1857                                                                                       B:[]:role(E,Y,Role,1)]),
 1858                                                                       app(F,E)))))))).
 1859
 1860
 1861/* -------------------------------------------------------------------------
 1862   VP adverb modifier (intersective)
 1863------------------------------------------------------------------------- */
 1864
 1865semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 1866   member(Cat,[((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)),
 1867               ((s:X\np)/(s:X\np))\((s:X\np)/(s:X\np)),
 1868               ((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)),  
 1869               ((s:adj\np)\(s:adj\np))/((s:adj\np)\(s:adj\np)),  
 1870               ((s:adj\np)/(s:adj\np))/((s:adj\np)/(s:adj\np)),
 1871               ((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))]), !,
 1872   att(Att,sense,Sense),
 1873   Sem = lam(AV,lam(VP,lam(NP,lam(F,app(app(app(AV,VP),NP),lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),app(F,E)))))))).
 1874
 1875% VP adverb modifier (negation)
 1876
 1877semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 1878   option('--semantics',drg),
 1879   member(Cat,[(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np)))/(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))),
 1880               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/(((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np))),
 1881               (((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)))/(((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)))]), 
 1882   notSymbol(Sym), !,
 1883   Sem = lam(M,lam(AV,lam(VP,lam(NP,lam(F,B1:drs([],[B1:Index:not(app(app(app(app(M,AV),VP),NP),lam(E,merge(B2:drs([],[B2:Index:pred(E,Sym,s,1)]),app(F,E)))))])))))).
 1884
 1885semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 1886   member(Cat,[(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np)))/(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))),
 1887               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/(((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np))),
 1888               (((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)))/(((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)))]), 
 1889   notSymbol(Sym), !,
 1890   Sem = lam(M,lam(AV,lam(VP,lam(NP,lam(F,B:drs([],[B:Index:not(app(app(app(app(M,AV),VP),NP),lam(E,app(F,E))))])))))).
 1891
 1892semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 1893   member(Cat,[(((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/((s:X\np)\(s:X\np))]), !,
 1894   att(Att,sense,Sense),
 1895   Sem = lam(AV1,lam(AV2,lam(VP,lam(NP,lam(F,app(app(app(AV2,app(AV1,VP)),NP),
 1896                                             lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),app(F,E))))))))).
 1897
 1898% VP adverb modifier (intersective)
 1899semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 1900   member(Cat,[(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np)))/(((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))), 
 1901               (((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)))/(((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np))),
 1902               (((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))/(((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)))]), !,
 1903   att(Att,sense,Sense),
 1904   Sem = lam(M,lam(AV,lam(VP,lam(NP,lam(F,app(app(app(app(M,AV),VP),NP),lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),app(F,E))))))))).
 1905
 1906/* -------------------------------------------------------------------------
 1907   If VP, then ... S
 1908------------------------------------------------------------------------- */
 1909
 1910semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 1911   option('--semantics',amr),
 1912   member(Cat,[(s:X/s:X)/(s:_\np),(s:X\s:X)/(s:_\np)]), !,
 1913   Sem = lam(VP,lam(S,lam(G,app(app(VP,lam(P,merge(B1:drs([B1:[]:Y],[B1:Index:pred(Y,thing,n,12)]),app(P,Y)))),
 1914                                lam(F,merge(app(G,F),app(S,lam(E,B2:drs([],[B2:[]:rel(E,F,condition,0)]))))))))).
 1915
 1916semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 1917   member(Cat,[(s:X/s:X)/(s:_\np),(s:X\s:X)/(s:_\np)]), !,
 1918   plosing(CC),
 1919   Sem = lam(VP,lam(S,lam(F,B:drs([],[B:Index:imp(app(app(VP,lam(P,merge(B1:drs([B1:[]:Y],[B1:Index:pred(Y,thing,n,12)]),app(P,Y)))),CC),
 1920                                                  app(S,F))])))).
 1921
 1922semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 1923   member(Cat,[(s:X/s:X)/(s:_\np),(s:X\s:X)/(s:_\np)]), !,
 1924   Sem = lam(VP,lam(S,lam(G,app(app(VP,lam(P,merge(B1:drs([B1:[]:Y],[B1:Index:pred(Y,thing,n,12)]),app(P,Y)))),
 1925                                lam(F,merge(app(G,F),app(S,lam(E,B2:drs([],[B2:[]:rel(E,F,Sym,0)]))))))))).
 1926
 1927
 1928/* -------------------------------------------------------------------------
 1929   Preposition (in front of WH, as in "From where ...")
 1930------------------------------------------------------------------------- */
 1931
 1932semlex((s:wq/(s:q/pp))/(s:wq/(s:q/np)),Sym,Index,Att-[sem:'REL'|Att],Sem):-
 1933   Sem = lam(Q,lam(W,lam(F,app(app(Q,V),F)))),
 1934   V = lam(N,lam(E,app(N,lam(X,app(app(W,lam(Y,B:drs([],[B:Index:rel(Y,X,Sym,0)]))),E))))).
 1935
 1936semlex((s:wq/(s:q/np))/(s:wq/(s:q/np)),_Sym,_Index,Att-[sem:'NIL'|Att],Sem):-
 1937   Sem = lam(X,X).
 1938
 1939
 1940/* -------------------------------------------------------------------------
 1941   Possessive 
 1942------------------------------------------------------------------------- */
 1943
 1944semlex(Cat,_Lemma,Index,Att-[sem:'HAS'|Att],Sem):-
 1945   member(Cat,[(np:nb/n)/(n/n),
 1946               (np/n)/(n/n)]), !,
 1947   Sem = lam(S,lam(P,lam(Q,merge(B:drs([B:[]:U],[]),
 1948                                 merge(app(app(S,lam(X,merge(app(P,X),B1:drs([B1:[]:Y],[B1:Index:rel(X,Y,of,1)])))),U),
 1949                                       app(Q,U)))))).
 1950
 1951
 1952
 1953semlex(Cat,_,Index,Att1-[sem:'HAS'|Att2],Sem):- 
 1954   member(Cat,[(np/n)\np, 
 1955               (np:nb/n)\np]), !,
 1956   rel(of,Att1-Att2,Relation),
 1957   Sem = lam(NP,lam(N,lam(P,app(NP,lam(Y,alfa(def,merge(B:drs([B:[]:X],[B:Index:rel(X,Y,Relation,1)]),
 1958                                                        app(N,X)),
 1959                                                  app(P,X))))))).
 1960
 1961semlex(Cat,_,Index,Att-[sem:'HAS'|Att],Sem):- 
 1962   member(Cat,[(np/(n/pp))\np, 
 1963               (np:nb/(n/pp))\np]), !,
 1964   Sem = lam(NP,lam(RN,lam(P,app(NP,lam(Y,alfa(def,merge(B:drs([B:[]:X],[]),
 1965                                                         app(app(RN,lam(Z,B2:drs([],[B2:Index:rel(Z,Y,of,1)]))),X)),
 1966                                                   app(P,X))))))).
 1967
 1968
 1969semlex(Cat,_,Index,Att-[sem:'HAS'|Att],Sem):- 
 1970   member(Cat,[((np:nb/n)/(n/n))\np,
 1971               ((np/n)/(n/n))\np]), !,
 1972   Sem = lam(N,lam(S,lam(P,lam(Q,merge(B1:drs([B1:[]:U],[]),
 1973                                       merge(app(app(S,lam(X,merge(app(P,X),
 1974                                                                   app(N,lam(Y,B2:drs([],[B2:Index:rel(X,Y,of,1)])))))),U),
 1975                                             app(Q,U))))))).
 1976
 1977semlex((n/n)\n,_,Index,Att-[sem:'HAS'|Att],Sem):- !,
 1978   Sem = lam(N1,lam(N2,lam(X,merge(B1:drs([B1:[]:Y],[]),
 1979                                   merge(app(N1,Y),
 1980                                         merge(app(N2,X),
 1981                                               B2:drs([],[B2:Index:rel(X,Y,of,1)]))))))).
 1982semlex(Cat,_,Index,Att-[sem:'HAS'|Att],Sem):- 
 1983   member(Cat,[((s:wq/(s:q/np))/n)\(s:wq/(s:q/np)),
 1984               ((s:wq\(s:dcl/np))/n)\(s:wq\(s:dcl/np)),
 1985               ((s:wq/(s:dcl\np))/n)\(s:wq/(s:dcl\np))]), !,
 1986   XXX = lam(U,lam(E,app(U,lam(Y,alfa(def,merge(B:drs([B:[]:X],[B:Index:rel(X,Y,of,1)]),
 1987                                          app(N,X)),
 1988                                    app(app(V,lam(Q,app(Q,X))),E)))))),                      
 1989   Sem = lam(NP,lam(N,lam(V,lam(P,app(app(NP,XXX),P))))).
 1990
 1991%  Sem = lam(NP,lam(N,lam(V,app(V,lam(P2,app(NP,lam(V2,app(V2,lam(Y,alfa(def,merge(B:drs([B:Index:X],[B:Index:rel(X,Y,of,1)]),app(N,X)),app(P2,X))))))))))).
 1992
 1993
 1994/* -------------------------------------------------------------------------
 1995   Emphasising Pronouns
 1996------------------------------------------------------------------------- */
 1997
 1998semlex(np\np, himself,Index,Att-[sem:'EMP'|Att],Sem):- 
 1999   option('--semantics',amr), !,
 2000   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,he,n,1)]),app(P,X)))))).
 2001
 2002semlex(np\np, himself,Index,Att-[sem:'EMP'|Att],Sem):- !,
 2003   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,male,n,2)]),app(P,X)))))).
 2004
 2005semlex(np\np, herself,Index,Att-[sem:'EMP'|Att],Sem):-
 2006   option('--semantics',amr), !,
 2007   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,she,n,1)]),app(P,X)))))).
 2008
 2009semlex(np\np, herself,Index,Att-[sem:'EMP'|Att],Sem):- !,
 2010   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,female,n,2)]),app(P,X)))))).
 2011
 2012semlex(np\np, itself,Index,Att-[sem:'EMP'|Att],Sem):-
 2013   option('--semantics',amr), !,
 2014   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,it,n,1)]),app(P,X)))))).
 2015
 2016semlex(np\np, itself,Index,Att-[sem:'EMP'|Att],Sem):- !,
 2017   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,thing,n,12)]),app(P,X)))))).
 2018
 2019semlex(np\np, Sym,Index,Att-[sem:'EMP'|Att],Sem):-
 2020   option('--semantics',amr), 
 2021   member(Sym,[myself,yourself,thyself,ourselves,themselves]), !,
 2022   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,we,n,1)]),app(P,X)))))).
 2023
 2024semlex(np\np, Sym,Index,Att-[sem:'EMP'|Att],Sem):-
 2025   member(Sym,[myself,yourself,thyself,ourselves,themselves]), !,
 2026   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,person,n,1)]),app(P,X)))))).
 2027
 2028
 2029/* -------------------------------------------------------------------------
 2030   NP modifiers: floating quantifiers 
 2031------------------------------------------------------------------------- */
 2032
 2033semlex(Cat,Sym,Index,Att-[sem:'AND'|Att],Sem):-
 2034   option('--semantics',amr),
 2035   member(Cat,[np\np, np/np]), 
 2036   member(Sym,[all,each]), !,
 2037   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,2)]),app(P,X)))))).
 2038
 2039semlex(Cat,Sym,Index,Att-[sem:'EXC'|Att],Sem):-
 2040   option('--semantics',amr),
 2041   member(Cat,[np\np, np/np]), 
 2042   member(Sym,[only]), !,
 2043   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,2)]),app(P,X)))))).
 2044
 2045
 2046semlex(Cat,Sym,Index,Att-[sem:'AND'|Att],Sem):-
 2047   member(Cat,[np\np, np/np]), 
 2048   member(Sym,[all,each]), !,
 2049   Sem = lam(Q,lam(P,B1:drs([],[B1:[]:imp(merge(B2:drs([B2:Index:X],[]),app(Q,lam(Y,B3:drs([],[B3:[]:eq(X,Y)])))),app(P,X))]))).
 2050
 2051
 2052/* -------------------------------------------------------------------------
 2053   NP modifiers: only
 2054------------------------------------------------------------------------- */
 2055
 2056semlex(Cat,only,Index,Att-[sem:'EXC'|Att],Sem):-
 2057   \+ option('--semantics',amr),
 2058   member(Cat,[np\np, np/np]), !,
 2059   Sem = lam(NP,lam(P,alfa(fac,merge(B1:drs([B1:Index:Z],[]),
 2060                                     app(NP,lam(X,merge(app(P,X),
 2061                                                        B2:drs([],[B2:[]:eq(Z,X)]))))),
 2062                               B3:drs([],[B3:[]:imp(merge(B4:drs([B4:[]:Y],[]),app(P,Y)),
 2063                                                          B5:drs([],[B5:[]:eq(Z,Y)]))])))).
 2064
 2065
 2066/* -------------------------------------------------------------------------
 2067   NP modifiers: negation
 2068------------------------------------------------------------------------- */
 2069
 2070semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 2071   member(Cat,[np\np, np/np]), 
 2072   notSymbol(Sym), !,
 2073   Sem = lam(NP,lam(P,B:drs([],[B:Index:not(app(NP,P))]))).
 2074
 2075semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 2076   Cat = (((np\np)/(np\np))/((np\np)/(np\np))),
 2077   notSymbol(Sym), !,
 2078   Sem = lam(A1,lam(A2,lam(NP,lam(P,B:drs([],[B:Index:not(app(app(app(A1,A2),NP),P))]))))).
 2079
 2080
 2081/* -------------------------------------------------------------------------
 2082   NP modifiers
 2083------------------------------------------------------------------------- */
 2084
 2085semlex(Cat,Sym,Index,Att1-[sem:'DOW'|Att2],Sem):-
 2086   att(Att1,pos,Pos),
 2087   member(Pos,['NNP','NNPS']),
 2088   att(Att1,namex,NE), neClassType(NE,tim,Type),
 2089   member(Cat,[np\np, np/np]), !,
 2090   rel(on,Att1-Att2,Relation),
 2091   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:named(Y,Sym,tim,Type),B:[]:rel(X,Y,Relation,0)]),
 2092                                       app(P,X)))))).
 2093
 2094semlex(Cat,Sym,Index,Att-[sem:Tag|Att],Sem):-
 2095   att(Att,pos,Pos),
 2096   member(Pos,['NNP','NNPS']),
 2097   member(Cat,[np\np, np/np]), !,
 2098   att(Att,namex,Ne), neClassType(Ne,Class,Type,Tag),
 2099   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:named(X,Sym,Class,Type)]),
 2100                                       app(P,X)))))).
 2101
 2102semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 2103   att(Att,pos,Pos),
 2104   member(Pos,['IN','RB','JJ']),
 2105   member(Cat,[np\np, np/np]), !,
 2106   att(Att,sense,Sense),
 2107   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,Sense)]),
 2108                                       app(P,X)))))).
 2109
 2110semlex(Cat,Sym,Index,Att-[sem:'MOR'|Att],Sem):-
 2111   att(Att,pos,Pos),
 2112   member(Pos,['JJR','RBR']),
 2113   member(Cat,[np\np, np/np]), !,
 2114   att(Att,sense,Sense),
 2115   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,Sense)]),
 2116                                       app(P,X)))))).
 2117
 2118
 2119semlex(Cat,Sym,Index,Att1-[sem:'SCO'|Att2],Sem):-
 2120   member(Cat,[np\np, np/np]),
 2121   att(Att1,pos,'CD'),
 2122   string2score(Sym,Score), !,
 2123   rel(with,Att1-Att2,Relation),
 2124   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:named(Y,Score,sco,num),
 2125                                                       B:[]:rel(X,Y,Relation,0)]),
 2126                                       app(P,X)))))).
 2127
 2128semlex(Cat,Sym,Index,Att1-[sem:'CON'|Att2],Sem):-
 2129   member(Cat,[np\np, np/np]), !,
 2130   att(Att1,sense,Sense),
 2131   role(['Time'],Att1-Att2,[Role]),
 2132   Sem = lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Y],[B:Index:pred(Y,Sym,n,Sense),
 2133                                                       B:[]:role(X,Y,Role,1)]),
 2134                                       app(P,X)))))).
 2135
 2136
 2137/* -------------------------------------------------------------------------
 2138   NP modifiers (superlative contruction)
 2139------------------------------------------------------------------------- */
 2140
 2141semlex(Cat,Sym,Index,Att-[sem:'TOP'|Att],Sem):-
 2142   member(Cat,[d/np]), !,
 2143   Sem = lam(X,lam(Y,B:drs([],[B:Index:rel(Y,X,Sym,0)]))).
 2144
 2145
 2146/* -------------------------------------------------------------------------
 2147   NP modifier modifiers: deitics
 2148
 2149semlex(Cat,Sym,_Index,Att-[sem:'UNK'|Att],Sem):-
 2150   member(Cat,[(np\np)/(np\np),
 2151               (np\np)\(np\np),
 2152               (np/np)/(np/np)]), 
 2153   member(Sym,[there,here,ago,such,now]), !,
 2154   Sem = lam(M,lam(Q,lam(P,app(app(M,Q),P)))). 
 2155------------------------------------------------------------------------- */
 2156
 2157
 2158/* -------------------------------------------------------------------------
 2159   NP modifier modifiers (proper names)
 2160------------------------------------------------------------------------- */
 2161
 2162semlex(Cat,Sym,Index,Att-[sem:Tag|Att],Sem):-
 2163   att(Att,pos,Pos),
 2164   member(Pos,['NNP','NNPS']),
 2165   member(Cat,[(np\np)/(np\np),
 2166               (np\np)\(np\np),
 2167               (np/np)/(np/np)]), !, 
 2168   att(Att,namex,Ne), neClassType(Ne,Class,Type,Tag),
 2169   Sem = lam(M,lam(Q,lam(P,app(app(M,Q),lam(X,merge(B:drs([],[B:Index:named(X,Sym,Class,Type)]),
 2170                                                    app(P,X))))))).
 2171
 2172/* -------------------------------------------------------------------------
 2173   NP modifier modifiers (not)
 2174------------------------------------------------------------------------- */
 2175
 2176semlex(Cat,not,Index,Att-[sem:'NOT'|Att],Sem):-
 2177   member(Cat,[(np\np)/(np\np),
 2178               (np\np)\(np\np),
 2179               (np/np)/(np/np)]), !, 
 2180%   Sem = lam(M,lam(Q,lam(P,app(app(M,Q),lam(X,B:drs([],[B:Index:not(app(P,X))])))))).
 2181   Sem = lam(M,lam(Q,lam(P,B:drs([],[B:Index:not(app(app(M,Q),lam(X,app(P,X))))])))).
 2182
 2183
 2184/* -------------------------------------------------------------------------
 2185   NP modifier modifiers
 2186------------------------------------------------------------------------- */
 2187
 2188semlex(Cat,Sym,Index,Att-[sem:'CON'|Att],Sem):-
 2189   member(Cat,[(np\np)/(np\np),
 2190               (np\np)\(np\np),
 2191               (np/np)/(np/np)]), !, 
 2192   att(Att,sense,Sense),
 2193   Sem = lam(M,lam(Q,lam(P,app(app(M,Q),lam(X,merge(B:drs([],[B:Index:pred(X,Sym,n,Sense)]),
 2194                                                    app(P,X))))))).
 2195
 2196
 2197
 2198/* -------------------------------------------------------------------------
 2199   NP modifier modifiers, superlative ("most notably")
 2200------------------------------------------------------------------------- */
 2201
 2202semlex(Cat,_Sym,Index,Att-[sem:'TOP'|Att],Sem):-
 2203   member(Cat,[(np/np)/(d/np)]), !, 
 2204   Sem = lam(R,lam(Q,lam(P,app(Q,lam(X,merge(B1:drs([],[B1:Index:imp(B2:drs([B2:[]:Y],[B2:[]:not(B3:drs([],[B3:[]:eq(X,Y)]))]),
 2205                                                               app(app(R,X),Y))]),
 2206                                             app(P,X))))))).
 2207
 2208
 2209/* -------------------------------------------------------------------------
 2210   NPs that function as S modifiers
 2211------------------------------------------------------------------------- */
 2212
 2213semlex(Cat,Sym,Index,Att1-[sem:Tag|Att2],Sem):-
 2214   category(smod,Cat,Sym), 
 2215   att(Att1,pos,Pos),
 2216   member(Pos,['NNP','NNPS']), !,
 2217   att(Att1,namex,Ne), neClassType(Ne,Class,Type,Tag),
 2218   role(['Time'],Att1-Att2,[Role]),
 2219   Sem = lam(S,lam(F,app(S,lam(E,merge(B:drs([B:[]:X],[B:Index:named(X,Sym,Class,Type),
 2220                                                       B:[]:role(E,X,Role,1)]),app(F,E)))))).
 2221
 2222semlex(Cat,Sym,Index,Att1-[sem:'DOW'|Att2],Sem):-
 2223   category(smod,Cat,Sym), 
 2224   att(Att1,pos,Pos),
 2225   member(Pos,['NN','NNS']), !,
 2226   att(Att1,sense,Sense),
 2227   role(['Time'],Att1-Att2,[Role]),
 2228   Sem = lam(S,lam(F,app(S,lam(E,merge(B:drs([B:[]:X],[B:Index:pred(X,Sym,n,Sense),
 2229                                                       B:[]:role(E,X,Role,1)]),app(F,E)))))).
 2230
 2231semlex(Cat,Sym,Index,Att1-[sem:'NOT'|Att2],Sem):-
 2232   category(smod,Cat,Sym), 
 2233   member(Sym,[nowhere]), !,
 2234   role(['Location'],Att1-Att2,[Role]),
 2235   Sem = lam(S,lam(F,app(S,lam(E,B1:drs([],[B1:Index:not(merge(B2:drs([B2:Index:X],[B2:[]:pred(X,location,n,1),
 2236                                                                                    B2:[]:role(E,X,Role,1)]),app(F,E)))]))))).
 2237
 2238semlex(Cat,Sym,Index,Att1-[sem:'AND'|Att2],Sem):-
 2239   category(smod,Cat,Sym), 
 2240   member(Sym,[everywhere,anywhere]), !,
 2241   role(['Location'],Att1-Att2,[Role]),
 2242   Sem = lam(S,lam(F,app(S,lam(E,merge(B:drs([B:[]:X],[B:Index:pred(X,location,n,1),
 2243                                                       B:[]:role(E,X,Role,1)]),app(F,E)))))).
 2244
 2245semlex(Cat,Sym,Index,Att1-[sem:'DIS'|Att2],Sem):-
 2246   category(smod,Cat,Sym), 
 2247   member(Sym,[somewhere]), !,
 2248   role(['Location'],Att1-Att2,[Role]),
 2249   Sem = lam(S,lam(F,app(S,lam(E,merge(B:drs([B:[]:X],[B:Index:pred(X,location,n,1),
 2250                                                       B:[]:role(E,X,Role,1)]),app(F,E)))))).
 2251
 2252
 2253/* -------------------------------------------------------------------------
 2254   S modifiers
 2255------------------------------------------------------------------------- */
 2256
 2257semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
 2258   notSymbol(Sym),
 2259   category(smod,Cat,Sym), !,
 2260   Sem = lam(S,lam(F,B:drs([],[B:Index:not(app(S,F))]))).
 2261
 2262semlex(Cat,Sym,Index,Att-[sem:'POS'|Att],Sem):-
 2263   member(Sym,[perhaps,maybe,possibly]),
 2264   option('--modal',true),
 2265   category(smod,Cat,Sym), !,
 2266   Sem = lam(S,lam(F,B:drs([],[B:Index:pos(app(S,F))]))).
 2267
 2268semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
 2269   category(smod,Cat,Sym), !,
 2270   att(Att,sense,Sense),
 2271   Sem = lam(S,lam(F,app(S,lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),app(F,E)))))).
 2272
 2273
 2274/* -------------------------------------------------------------------------
 2275   S modifier modifiers
 2276------------------------------------------------------------------------- */
 2277
 2278semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):- 
 2279   notSymbol(Sym), 
 2280   member(Cat,[(s:X/s:X)/(s:X/s:X),
 2281               (s:X/s:X)\(s:X/s:X),
 2282               (s:X\s:X)/(s:X\s:X),
 2283               (s:X\s:X)\(s:X\s:X)]), !, 
 2284   Sem = lam(M,lam(S,lam(F,B:drs([],[B:Index:not(app(app(M,S),F))])))).
 2285
 2286semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):- 
 2287   member(Cat,[(s:X/s:X)/(s:X/s:X),
 2288               (s:X/s:X)\(s:X/s:X),
 2289               (s:X\s:X)/(s:X\s:X),
 2290               (s:X\s:X)\(s:X\s:X)]), !, 
 2291   att(Att,sense,Sense),
 2292   Sem = lam(M,lam(Q,lam(P,app(app(M,Q),lam(E,merge(B:drs([],[B:Index:pred(E,Sym,r,Sense)]),
 2293                                                    app(P,E))))))).
 2294
 2295semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):- 
 2296   member(Cat,[((s:X/s:X)/(s:X/s:X))/np,
 2297               ((s:X/s:X)\(s:X/s:X))/np,
 2298               ((s:X\s:X)/(s:X\s:X))/np,
 2299               ((s:X\s:X)\(s:X\s:X))/np]), !, 
 2300   Sem = lam(Q,lam(M,lam(S,lam(F,app(app(M,S),lam(E,merge(app(Q,lam(Y,B:drs([],[B:Index:rel(E,Y,Sym,0)]))),app(F,E)))))))).
 2301
 2302semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):- 
 2303   member(Cat,[((s:X/s:X)/(s:X/s:X))/s:dcl,
 2304               ((s:X/s:X)\(s:X/s:X))/s:dcl,
 2305               ((s:X\s:X)/(s:X\s:X))/s:dcl,
 2306               ((s:X\s:X)\(s:X\s:X))/s:dcl]), !, 
 2307   plosing(CC),
 2308   Sem = lam(S1,lam(M,lam(S2,lam(F,merge(B1:drs([B1:[]:E,B1:[]:Z,B1:[]:Y],
 2309                                                [B1:[]:prop(E,B2:drs([],[B2:Index:rel(Z,Y,Sym,0)])),
 2310                                                 B1:[]:prop(Z,app(S1,CC)),
 2311                                                 B1:[]:prop(Y,app(app(M,S2),CC))]),
 2312                                   app(F,E)))))).
 2313
 2314
 2315/* -------------------------------------------------------------------------
 2316   Mostly Temporal modifiers: "every month", "this week", "Nov. 29"
 2317------------------------------------------------------------------------- */
 2318
 2319semlex(Cat,Sym,Index,Att-[sem:'UOM'|Att],Sem):-
 2320   att(Att,pos,'$'), !,
 2321   member(Cat,[((s:X\np)\(s:X\np))/n,((s:X\np)/(s:X\np))/n]), !,
 2322   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,alfa(def,merge(B1:drs([B1:[]:Y],
 2323                                                                          [B1:[]:pred(Y,Sym,n,1)]),
 2324                                                                   app(N,Y)),
 2325                                                             merge(B2:drs([],[B2:Index:rel(E,Y,rel,0)]),
 2326                                                                   app(F,E))))))))).
 2327
 2328semlex(Cat,Sym,Index,Att1-[sem:'PRX'|Att2],Sem):-
 2329   option('--semantics',amr),
 2330   member(Cat,[((s:X\np)\(s:X\np))/n,
 2331               ((s:X\np)/(s:X\np))/n]), 
 2332   member(Sym,[this,these]), !,
 2333   role(['Time'],Att1-Att2,[Role]),
 2334   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,alfa(def,merge(B1:drs([B1:[]:Y],[B1:Index:pred(Y,this,r,2)]),
 2335                                                                   app(N,Y)),
 2336                                                             merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),
 2337                                                                   app(F,E))))))))).
 2338
 2339semlex(Cat,Sym,Index,Att1-[sem:'DST'|Att2],Sem):-
 2340   option('--semantics',amr),
 2341   member(Cat,[((s:X\np)\(s:X\np))/n,
 2342               ((s:X\np)/(s:X\np))/n]), 
 2343   member(Sym,[that,those]), !,
 2344   role(['Time'],Att1-Att2,Role),
 2345   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,alfa(def,merge(B1:drs([B1:[]:Y],[B1:Index:pred(Y,that,r,2)]),
 2346                                                                   app(N,Y)),
 2347                                                             merge(B2:drs([],[B2:[]:role(E,Y,Role,1)]),
 2348                                                                   app(F,E))))))))).
 2349
 2350semlex(Cat,Sym,Index,Att1-[sem:'PRX'|Att2],Sem):-
 2351   member(Cat,[((s:X\np)\(s:X\np))/n,
 2352               ((s:X\np)/(s:X\np))/n]), 
 2353   member(Sym,[this,these]), !,
 2354   role(['Time'],Att1-Att2,[Role]),
 2355   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,alfa(def,merge(B1:drs([B1:[]:Y],[]),
 2356                                                                   app(N,Y)),
 2357                                                             merge(B2:drs([],[B2:Index:role(E,Y,Role,1)]),
 2358                                                                   app(F,E))))))))).
 2359
 2360semlex(Cat,Sym,Index,Att1-[sem:'DST'|Att2],Sem):-
 2361   member(Cat,[((s:X\np)\(s:X\np))/n,
 2362               ((s:X\np)/(s:X\np))/n]), 
 2363   member(Sym,[that,those]), !,
 2364   role(['Time'],Att1-Att2,[Role]),
 2365   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,alfa(def,merge(B1:drs([B1:[]:Y],[]),
 2366                                                                   app(N,Y)),
 2367                                                             merge(B2:drs([],[B2:Index:role(E,Y,Role,1)]),
 2368                                                                   app(F,E))))))))).
 2369
 2370semlex(Cat,Sym,Index,Att1-[sem:'DEF'|Att2],Sem):-
 2371   member(Cat,[((s:X\np)\(s:X\np))/n,
 2372               ((s:X\np)/(s:X\np))/n]), 
 2373   member(Sym,[the,that,those]), !,
 2374   role(['Time'],Att1-Att2,[Role]),
 2375   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,alfa(def,merge(B1:drs([B1:[]:Y],[]),
 2376                                                                   app(N,Y)),
 2377                                                             merge(B2:drs([],[B2:Index:role(E,Y,Role,1)]),
 2378                                                                   app(F,E))))))))).
 2379
 2380semlex(Cat,Sym,Index,Att1-[sem:'AND'|Att2],Sem):-
 2381   member(Cat,[((s:X\np)\(s:X\np))/n,
 2382               ((s:X\np)/(s:X\np))/n]), 
 2383   member(Sym,[every,each,all,any,either]), !,
 2384   role(['Time'],Att1-Att2,[Role]),
 2385   Sem = lam(N,lam(V,lam(Q,lam(F,B1:drs([],[B1:[]:imp(merge(B2:drs([B2:Index:Y],[]),app(N,Y)),
 2386                                                app(app(V,Q),lam(E,merge(B3:drs([],[B3:[]:role(E,Y,Role,1)]),
 2387                                                                         app(F,E)))))]))))).
 2388
 2389semlex(Cat,Sym,Index,Att1-[sem:'DIS'|Att2],Sem):-
 2390   member(Cat,[((s:X\np)\(s:X\np))/n,
 2391               ((s:X\np)/(s:X\np))/n]), 
 2392   member(Sym,[a,an,some]), !,
 2393   role(['Time'],Att1-Att2,[Role]),
 2394   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([B:Index:Y],[B:[]:role(E,Y,Role,1)]),
 2395                                                          merge(app(N,Y),app(F,E))))))))).
 2396
 2397semlex(Cat,no,Index,Att1-[sem:'NOT'|Att2],Sem):-
 2398   member(Cat,[((s:X\np)\(s:X\np))/n,
 2399               ((s:X\np)/(s:X\np))/n]), !,
 2400   rel(for,Att1-Att2,Relation),
 2401   Sem = lam(N,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,B1:drs([],[B1:Index:not(merge(B2:drs([B2:Index:Y],[B2:[]:rel(E,Y,Relation,0)]),
 2402                                                                            merge(app(N,Y),app(F,E))))]))))))).
 2403
 2404semlex(Cat,Sym,Index,Att1-[sem:'MOY'|Att2],Sem):-
 2405   att(Att1,pos,'NNP'),
 2406   att(Att1,namex,NE), neClass(NE,tim),
 2407   member(Cat,[((s:X\np)\(s:X\np))/n, ((s:X\np)/(s:X\np))/n]), 
 2408   month(Sym,MID), !,
 2409   role(['Time'],Att1-Att2,[Role]),
 2410   Sem = lam(P,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B1:drs([B1:[]:Y],[B1:Index:timex(Y,date([]:'+',[]:'XXXX',Index:MID,[]:'XX')),
 2411                                                                            B1:[]:role(E,Y,Role,1)]),
 2412                                                          merge(app(P,Y),app(F,E))))))))).
 2413
 2414semlex(Cat,Sym,Index,Att1-[sem:'REL'|Att2],Sem):-
 2415   member(Cat,[((s:X\np)\(s:X\np))/n,
 2416               ((s:X\np)/(s:X\np))/n]), !,
 2417   att(Att1,sense,Sense),
 2418   role(['Time'],Att1-Att2,[Role]),
 2419   Sem = lam(P,lam(V,lam(Q,lam(F,app(app(V,Q),lam(E,merge(B:drs([B:[]:Y],[B:Index:pred(Y,Sym,n,Sense),
 2420                                                                          B:[]:role(E,Y,Role,1)]),
 2421                                                          merge(app(P,Y),app(F,E))))))))).
 2422
 2423
 2424/* -------------------------------------------------------------------------
 2425   Discourse connectors: when
 2426------------------------------------------------------------------------- */
 2427
 2428semlex(Cat,when,Index,Att-[sem:'SUB'|Att],Sem):-
 2429   option('--tense',true),
 2430   option('--theory',drt),
 2431   member(Cat,[(s:X/s:X)/s:dcl,
 2432               (s:wq/s:wq)/s:dcl]), !, 
 2433   Sem = lam(S1,lam(S2,lam(F,merge(merge(B1:drs([B1:[]:T],[B1:[]:pred(T,time,n,1)]),
 2434                                         app(S1,lam(E,B2:drs([],[B2:Index:rel(E,T,temp_included,1)])))),
 2435                                   app(S2,lam(E,merge(B3:drs([],[B3:[]:rel(E,T,temp_included,1)]),app(F,E)))))))).
 2436
 2437semlex(Cat,when,Index,Att-[sem:'SUB'|Att],Sem):-
 2438   option('--tense',true),
 2439   option('--theory',drt),
 2440   member(Cat,[(s:X\s:X)/s:dcl,
 2441               (s:wq\s:wq)/s:dcl]), !, 
 2442   Sem = lam(S2,lam(S1,lam(F,merge(merge(B1:drs([B1:[]:T],[[]:pred(T,time,n,1)]),
 2443                                         app(S1,lam(E,B2:drs([],[B2:Index:rel(E,T,temp_included,1)])))),
 2444                                   app(S2,lam(E,merge(B3:drs([],[B3:[]:rel(E,T,temp_included,1)]),app(F,E)))))))).
 2445
 2446
 2447/* -------------------------------------------------------------------------
 2448   Discourse connectors: if S1 then S2; S2 if S1
 2449------------------------------------------------------------------------- */
 2450
 2451semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 2452   option('--semantics',amr),
 2453   member(Cat,[(s:X/s:X)/s:dcl,(s:wq/s:wq)/s:dcl,
 2454               (s:X\s:X)/s:dcl,(s:wq\s:wq)/s:dcl]), !, 
 2455   Sem = lam(S1,lam(S2,lam(F,app(S2,lam(Y,merge(app(F,Y),app(S1,lam(E,B2:drs([],[B2:Index:rel(Y,E,condition,1)]))))))))).
 2456
 2457semlex(Cat,if,Index,Att-[sem:'IMP'|Att],Sem):-
 2458   member(Cat,[(s:X/s:X)/s:dcl,(s:wq/s:wq)/s:dcl,
 2459               (s:X\s:X)/s:dcl,(s:wq\s:wq)/s:dcl]), !, 
 2460   plosing(CC),
 2461   Sem = lam(S1,lam(S2,lam(F,B:drs([],[B:Index:imp(app(S1,CC),app(S2,F))])))).
 2462
 2463
 2464/* -------------------------------------------------------------------------
 2465   Discourse connectors: if
 2466------------------------------------------------------------------------- */
 2467
 2468semlex((s:X\s:X)/s:dcl,and,_Index,Att-[sem:'IMP'|Att],Sem):-
 2469   option('--theory',drt), !,
 2470   plosing(CC),
 2471   Sem = lam(S2,lam(S1,lam(F,merge(app(S1,CC),app(S2,F))))).
 2472
 2473
 2474/* -------------------------------------------------------------------------
 2475   Discourse connectors: all others
 2476------------------------------------------------------------------------- */
 2477
 2478semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 2479   option('--theory',sdrt),
 2480   Cat = (s:X/s:X)/s:_, !,
 2481   plosing(CC),
 2482%  Sem = lam(S1,lam(S2,lam(F,sdrs([lab(K1,B1),lab(K2,B2)],[Index:rel(K1,K2,Sym)])))),
 2483   Sem = lam(S2,lam(S1,lam(F,sdrs([sub(lab(K1,B1),lab(K2,B2))],[Index:rel(K1,K2,Sym)])))),
 2484   B1 = app(S1,CC),
 2485   B2 = app(S2,F).
 2486
 2487semlex(Cat,Sym,Index,Att-[sem:'COO'|Att],Sem):-
 2488   option('--theory',sdrt),
 2489   Cat = (s:X\s:X)/s:_, !,
 2490   plosing(CC),
 2491   Sem = lam(S2,lam(S1,lam(F,sdrs([lab(K1,B1),lab(K2,B2)],[Index:rel(K1,K2,Sym)])))),
 2492   B1 = app(S1,CC),
 2493   B2 = app(S2,F).
 2494
 2495semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 2496   member(Cat,[(s:X/s:X)/s:dcl,
 2497               (s:X/s:X)/s:inv,
 2498               (s:wq/s:wq)/s:dcl]), !, 
 2499   plosing(CC),
 2500   Sem = lam(S1,lam(S2,lam(F,merge(B1:drs([B1:[]:E,B1:[]:Z,B1:[]:Y],
 2501                                          [B1:[]:prop(E,B2:drs([],[B2:Index:rel(Z,Y,Sym,0)])),
 2502                                           B1:[]:prop(Z,app(S1,CC)),
 2503                                           B1:[]:prop(Y,app(S2,CC))]),
 2504                                   app(F,E))))).
 2505
 2506semlex(Cat,Sym,Index,Att-[sem:'SUB'|Att],Sem):-
 2507   member(Cat,[(s:X\s:X)/s:dcl,
 2508               (s:wq\s:wq)/s:dcl]), !, 
 2509   plosing(CC),
 2510   Sem = lam(S2,lam(S1,lam(F,merge(B1:drs([B1:[]:E,B1:[]:Z,B1:[]:Y],
 2511                                          [B1:[]:prop(E,B2:drs([],[B2:Index:rel(Z,Y,Sym,0)])),
 2512                                           B1:[]:prop(Z,app(S1,CC)),
 2513                                           B1:[]:prop(Y,app(S2,CC))]),
 2514                                   app(F,E))))).
 2515
 2516
 2517/* -------------------------------------------------------------------------
 2518   Non-Restrictive Relative Pronous
 2519------------------------------------------------------------------------- */
 2520
 2521semlex(Cat,Sym,_,Att1-[sem:'PRO'|Att2],Sem):-
 2522   Cat = (np\np)/((s:to\np)/np), !,
 2523   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2),
 2524   NP = lam(R,merge(B:drs([B:[]:Y],[B:[]:pred(Y,thing,n,12)]),app(R,Y))),
 2525   Sem = lam(TV,lam(Q,lam(P,app(Q,lam(X,merge(app(app(app(TV,NP),
 2526                                                      lam(P,app(P,X))),
 2527                                                  lam(Z,B2:drs([],[B2:[]:role(X,Z,Role,1)]))),
 2528                                              app(P,X))))))).
 2529
 2530semlex(Cat,Sym,_,Att1-[sem:'PRO'|Att2],Sem):-
 2531   Cat = (np\np)/(s:to\np), !,
 2532   roles(Sym,(s:dcl\np)/s:_,[Role,_],Att1-Att2),
 2533   Sem = lam(VP,lam(Q,lam(P,app(Q,lam(X,merge(app(app(VP,lam(P,app(P,X))),
 2534                                                  lam(Y,B:drs([],[B:[]:role(X,Y,Role,1)]))),
 2535                                              app(P,X))))))).
 2536
 2537semlex(Cat,_Sym,_,Att-[sem:'PRO'|Att],Sem):-
 2538   member(Cat,[(np\np)/(s:_\np),(np\np)/(s:_/np)]),
 2539   option('--elimeq',true), !,
 2540   closing(CC),
 2541   Sem = lam(VP,lam(Q,lam(P,app(Q,lam(X,merge(app(app(VP,
 2542                                                      lam(P,app(P,X))),
 2543                                                  CC),
 2544                                              app(P,X))))))).
 2545
 2546semlex(Cat,_Sym,Index,Att-[sem:'PRO'|Att],Sem):-
 2547   member(Cat,[(np\np)/(s:_\np), (np\np)/(s:_/np)]),
 2548   option('--elimeq',false), !,
 2549   closing(CC),
 2550   Sem = lam(VP,lam(Q,lam(P,app(Q,lam(X,merge(app(app(VP,
 2551                                                      lam(P,merge(B:drs([B:Index:Y],[B:[]:eq(X,Y)]),app(P,Y)))),
 2552                                                  CC),
 2553                                              app(P,X))))))).
 2554
 2555
 2556
 2557/* -------------------------------------------------------------------------
 2558   Other kind of relative pronous (pied piping)
 2559------------------------------------------------------------------------- */
 2560
 2561semlex(Cat,_Sym,Index,Att-[sem:'PRO'|Att],Sem):-
 2562   Cat=((np\np)/(s:dcl\np))\(np/np), !,
 2563   closing(CC),
 2564   Sem = lam(M,lam(VP,lam(NP,lam(P,app(NP,lam(Y,merge(B:drs([B:[]:Z],[B:Index:eq(Y,Z)]),
 2565                                                      merge(app(P,Y),
 2566                                                            app(app(VP,app(M,lam(Q,app(Q,Z)))),CC))))))))).
 2567
 2568
 2569/* -------------------------------------------------------------------------
 2570   whose
 2571------------------------------------------------------------------------- */
 2572
 2573semlex(((np\np)/(s:dcl\np))/n,_,Index,Att1-[sem:'HAS'|Att2],Sem):- !,
 2574   closing(CC),
 2575   rel(of,Att1-Att2,Relation),
 2576   Sem = lam(N,lam(VP,lam(Q,lam(P,app(Q,lam(X,merge(app(app(VP,lam(P,merge(B:drs([B:[]:Y],[B:Index:rel(Y,X,Relation,1)]),
 2577                                                                           merge(app(N,Y),app(P,Y))))),CC),
 2578                                                    app(P,X)))))))). 
 2579
 2580
 2581/* -------------------------------------------------------------------------
 2582   Further relative pronouns
 2583------------------------------------------------------------------------- */
 2584
 2585semlex((np\np)/s:_,Sym,Index,Att-[sem:'PRO'|Att],Sem):- !,
 2586   plosing(CC),
 2587   Sem = lam(S,lam(Q,lam(P,app(Q,lam(X,merge(B:drs([B:[]:Z],[B:Index:rel(X,Z,Sym,0),
 2588                                                             B:[]:prop(Z,app(S,CC))]),
 2589                                             app(P,X))))))).
 2590
 2591
 2592semlex(Cat,Sym,Index,Att-[sem:'PRO'|Att],Sem):-
 2593   member(Cat,[((np\np)\(np\np))/s:dcl]), !, 
 2594   Sem = lam(S,lam(M,lam(NP,lam(Q,app(app(M,NP),
 2595                                      lam(X,merge(app(S,lam(E,B:drs([],[B:Index:rel(E,X,Sym,0)]))),
 2596                                                  app(Q,X)))))))).
 2597
 2598
 2599/* -------------------------------------------------------------------------
 2600   Interjections and Sentential Categories
 2601------------------------------------------------------------------------- */
 2602
 2603%semlex(Cat,Sym,Index,Att-[sem:'UNK'|Att],Sem):-
 2604%   option('--x',true),
 2605%   member(Sym,[no]),
 2606%   category(s,Cat,intj), !,
 2607%   att(Att,sense,Sense),
 2608%   Sem = lam(E,merge(B1:drs([B1:[]:X],[B1:Index:not(B2:drs([],[B2:Index:pred(X,Sym,n,Sense)]))]),app(E,X))).
 2609
 2610semlex(Cat,Sym,Index,Att-[sem:'ITJ'|Att],Sem):-
 2611   category(s,Cat,_), !,
 2612   att(Att,sense,Sense),
 2613   Sem = lam(E,merge(B:drs([B:[]:X],[B:Index:pred(X,Sym,n,Sense)]),app(E,X))).
 2614
 2615
 2616/* =========================================================================
 2617   Aux Predicates
 2618========================================================================= */
 2619
 2620notSymbol(not).
 2621notSymbol(nor)