1/* -------------------------------------------------------------------------
    2   Prepositional Phrases
    3------------------------------------------------------------------------- */
    4
    5semlex(pp,Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
    6   Sem = lam(X,B:drs([B:[]:Y],[B:Index:pred(Y,thing,n,12),
    7                               B:[]:rel(X,Y,Sym,0)])).
    8
    9
   10/* -------------------------------------------------------------------------
   11   PP|NP 
   12
   13   ... switch *to* bass ...
   14   ... walked away *from* the project ...
   15
   16------------------------------------------------------------------------- */
   17
   18semlex(pp/np,Sym,Index,Att1-[sem:'REL'|Att2],Sem):-
   19   option('--roles',verbnet),
   20   roles(Sym,pp/np,[Role],Att1-Att2), !,
   21   Sem = lam(Q,lam(X,app(Q,lam(Y,B:drs([],[B:Index:role(X,Y,Role,1)]))))).
   22
   23semlex(pp/np,Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
   24   Sem = lam(Q,lam(X,app(Q,lam(Y,B:drs([],[B:Index:rel(X,Y,Sym,0)]))))).
   25
   26
   27/* -------------------------------------------------------------------------
   28   PP|N
   29------------------------------------------------------------------------- */
   30
   31semlex(pp/n,Sym,Index,Att-[sem:'UOM'|Att],Sem):-
   32   att(Att,pos,'$'), !,
   33   Sem = lam(N,lam(X,merge(B:drs([B:[]:Y],[B:Index:pred(Y,Sym,n,1),B:[]:rel(X,Y,rel,0)]),
   34                           app(N,Y)))).
   35
   36semlex(pp/n,Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
   37   Sem = lam(N,lam(X,merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,Sym,0)]),app(N,Y)))).
   38
   39
   40/* -------------------------------------------------------------------------
   41   PP/VP[ng]
   42
   43   ... succeeded *in* freeing ...
   44   ... suspected *of* using ...
   45   ... refrained *from* opening ...
   46   ... limited *to* providing ...
   47
   48------------------------------------------------------------------------- */
   49
   50semlex(pp/(s:ng\np),Sym,Index,Att1-[sem:'SUB'|Att2],Sem):-
   51   roles(Sym,pp/(s:ng\np),[Role],Att1-Att2), !,
   52   plosing(CC),
   53   NP = lam(P,merge(B2:drs([B2:[]:Y],[]),app(P,Y))),
   54   Sem = lam(VP,lam(E,B1:drs([B1:[]:P],[B1:Index:role(E,P,Role,1),
   55                                        B1:[]:prop(P,app(app(VP,NP),CC))]))).
   56
   57
   58/* -------------------------------------------------------------------------
   59   PP/VP[adj]
   60
   61------------------------------------------------------------------------- */
   62
   63semlex(pp/(s:adj\np),Sym,Index,Att1-[sem:'REL'|Att2],Sem):-
   64   roles(Sym,(s:adj\np),[Role],Att1-Att2), !,
   65   Sem = lam(VP,lam(X,app(app(VP,lam(P,merge(B:drs([B:[]:Y],[]),app(P,Y)))),
   66                          lam(E,C:drs([],[C:Index:role(X,E,Role,1)]))))).
   67
   68semlex(pp/(s:b\np),Sym,Index,Att1-[sem:'REL'|Att2],Sem):-
   69   roles(Sym,pp/(s:b\np),[Role],Att1-Att2), !,
   70   Sem = lam(VP,lam(X,app(app(VP,lam(P,merge(B:drs([B:[]:Y],[]),app(P,Y)))),
   71                          lam(E,C:drs([],[C:Index:role(X,E,Role,1)]))))).
   72
   73semlex(pp/(s:_\np),Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
   74   Sem = lam(VP,lam(X,app(app(VP,lam(P,merge(B:drs([B:[]:Y],[]),app(P,Y)))),
   75                          lam(E,C:drs([],[C:Index:rel(X,E,Sym,0)]))))).
   76
   77
   78
   79%   Prep + NP + VP (... results in shareholders receiving ...)
   80%
   81semlex((pp/(s:_\np))/np,Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
   82   Sem = lam(NP,lam(VP,lam(E,app(app(VP,NP),lam(F,B:drs([],[B:Index:rel(E,F,Sym,0)])))))).
   83
   84semlex(pp/s:_,Sym,Index,Att1-[sem:'SUB'|Att2],Sem):-
   85   roles(Sym,pp/s:_,[Role],Att1-Att2), !,
   86   Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:role(E,X,Role,1)]))))).
   87
   88semlex(pp/s,Sym,Index,Att1-[sem:'SUB'|Att2],Sem):-
   89   roles(Sym,pp/s,[Role],Att1-Att2), !,
   90   Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:role(E,X,Role,1)]))))).
   91
   92semlex(pp/s:_,Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
   93   Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))).
   94
   95semlex(pp/s,Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
   96   Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))).
   97
   98
   99/* -------------------------------------------------------------------------
  100   (pp|np)|np
  101------------------------------------------------------------------------- */
  102
  103semlex((pp\np)/np,Sym,Index,Att-[sem:'REL'|Att],Sem):- !,
  104   Sem = lam(Q1,lam(Q2,lam(X,merge(app(Q2,lam(Z,B1:drs([],[B1:[]:rel(X,Z,rel,0)]))),
  105                                   app(Q1,lam(Y,B2:drs([],[B2:Index:rel(X,Y,Sym,0)]))))))).
  106
  107
  108
  109/* -------------------------------------------------------------------------
  110   PP modifiers
  111------------------------------------------------------------------------- */
  112
  113semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):- 
  114   option('--semantics',drg),   
  115   notSymbol(Sym),
  116   member(Cat,[pp/pp,pp\pp]), !, 
  117   Sem = lam(P,lam(E,B:drs([],[B:Index:pred(E,Sym,s,1),B:[]:not(app(P,E))]))).
  118
  119semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-
  120   notSymbol(Sym),
  121   member(Cat,[pp/pp,pp\pp]), !, 
  122   Sem = lam(P,lam(E,B:drs([],[B:Index:not(app(P,E))]))).
  123
  124semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-
  125   member(Cat,[pp/pp,pp\pp]), !, 
  126   att(Att,sense,Sense),
  127   Sem = lam(P,lam(E,merge(app(P,E),
  128                           B:drs([],[B:Index:pred(E,Sym,r,Sense)])))).
  129
  130semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
  131   member(Cat,[(pp\pp)\np,
  132               (pp\pp)/np,
  133               (pp/pp)/np]), !, 
  134   Sem = lam(NP,lam(P,lam(E,merge(app(P,E),
  135                                  app(NP,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))))).
  136
  137semlex(Cat,Sym,Index,Att-[sem:'REL'|Att],Sem):-
  138   member(Cat,[(pp\pp)\s:dcl,
  139               (pp\pp)/s:dcl,
  140               (pp/pp)/s:dcl]), !, 
  141   Sem = lam(S,lam(P,lam(E,merge(app(P,E),
  142                                 app(S,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))))).
  143
  144semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):-  
  145   notSymbol(Sym),
  146   member(Cat,[(pp\pp)/(pp\pp),
  147               (pp/pp)/(pp/pp)]), !,
  148   Sem = lam(Z,lam(P,lam(Y,app(app(Z,lam(X,B:drs([],[B:Index:not(app(P,X))]))),Y)))).
  149
  150semlex(Cat,Sym,Index,Att-[sem:'IST'|Att],Sem):-  
  151   member(Cat,[(pp\pp)/(pp\pp),
  152               (pp/pp)/(pp/pp)]), !,
  153   att(Att,sense,Sense),
  154   Sem = lam(Z,lam(P,lam(Y,app(app(Z,lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,Sense)]),
  155                                                 app(P,X)))),Y)))).
  156
  157
  158/* -------------------------------------------------------------------------
  159   Preposition: the (as in "the week before")
  160------------------------------------------------------------------------- */
  161
  162semlex(Cat,the,Index,Att1-[sem:'DEF'|Att2],Sem):-
  163   member(Cat,[(pp\pp)/n]), !, 
  164   role(['Time'],Att1-Att2,[Role]),
  165   Sem = lam(N,lam(P,lam(E,merge(app(P,E),
  166                                 alfa(def,merge(B1:drs([B1:[]:X],[]),
  167                                                app(N,X)),
  168                                          B2:drs([],[B2:Index:role(E,X,Role,1)])))))).
  169
  170semlex(Cat,Sym,Index,Att-[sem:'DEF'|Att],Sem):-
  171   member(Cat,[(pp\pp)/n]), !, 
  172   Sem = lam(N,lam(P,lam(E,merge(app(P,E),
  173                                 alfa(def,merge(B1:drs([B1:[]:X],[]),
  174                                                app(N,X)),
  175                                          B2:drs([],[B2:Index:rel(E,X,Sym,0)])))))).
  176
  177
  178/* -------------------------------------------------------------------------
  179   Compound adjectives (actually, the hyphen in compound adjectives)
  180------------------------------------------------------------------------- */
  181
  182semlex(pp\n,'-',Index,Att-[sem:'UNK'|Att],Sem):- !,
  183   Sem = lam(N,lam(X,alfa(def,merge(B1:drs([B1:[]:Y],[]),app(N,Y)),
  184                                    B2:drs([],[B2:Index:rel(X,Y,loc_rel,0)])))).
  185
  186semlex(pp\n,'-',Index,Att-[sem:'UNK'|Att],Sem):- !,
  187   Sem = lam(N,lam(X,merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,rel,0)]),
  188                           app(N,Y)))).
  189
  190semlex(pp