2:- module(closure,[closure/3,closing/1,plosing/1]).    3
    4:- use_module(boxer(slashes)).    5:- use_module(library(lists),[member/2]).    6:- use_module(boxer(lexicon),[semlex/5]).    7:- use_module(semlib(errors),[warning/2]).    8:- use_module(semlib(options),[option/2]).    9
   10
   11/* =========================================================================
   12   Closing and propositonal closing (Plosing)
   13========================================================================= */
   14
   15closing(lam(_,_:drs([],[]))).
   16
   17plosing(lam(X,B:drs([],[B:[]:pred(X,closing,v,99)]))):- option('--semantics',amr), !.
   18plosing(lam(X,B:drs([],[B:[]:pred(X,closing,v,99)]))):- option('--semantics',tacitus), !.
   19plosing(lam(_,_:drs([],[]))).
   20
   21
   22/* -------------------------------------------------------------------------
   23   Closure
   24------------------------------------------------------------------------- */
   25
   26closure(Cat,Sem,Closed):-
   27   member(Cat,[t:_, t]), !, 
   28   Closed = Sem.
   29
   30closure(s:_,Sem,Closed):- !,
   31   plosing(CC),
   32   Closed = app(Sem,CC).
   33
   34closure(Cat,Sem,Closed):-
   35   member(Cat,[s:b\np]), 
   36   option('--semantics',amr), !,
   37   Imp=lam(X,B:drs([],[B:[]:pred(X,closing,v,99),B:[]:pred(X,imperative,r,0)])),
   38   Closed = app(app(Sem,lam(P,merge(B:drs([B:[]:X],[B:[]:pred(X,you,n,1)]),app(P,X)))),Imp).
   39
   40closure(Cat,Sem,Closed):-
   41   member(Cat,[s:_\np, s:_/np]), !,
   42   plosing(CC),
   43   Closed = app(app(Sem,lam(P,merge(B:drs([B:[]:X],[B:[]:pred(X,thing,n,12)]),app(P,X)))),CC).
   44
   45closure(Cat,Sem,Closed):-
   46   member(Cat,[s:_/pp, s:_\pp]), !,
   47   plosing(CC),
   48   Closed = app(app(Sem,lam(X,B:drs([],[B:[]:pred(X,thing,n,12)]))),CC).
   49
   50closure(Cat,Sem,Closed):-
   51   member(Cat,[s:_/s:_, s:_\s:_]), !,
   52   plosing(CC),
   53   Closed = app(app(Sem,lam(P,merge(B:drs([B:[]:X],[B:[]:pred(X,event,n,1)]),app(P,X)))),CC).
   54
   55closure(Cat,Sem,Closed):-
   56   member(Cat,[(s:_/s:_)/(s:_/s:_), (s:_/s:_)\(s:_/s:_),
   57               (s:_\s:_)/(s:_\s:_), (s:_\s:_)\(s:_\s:_)]), !,
   58   plosing(CC),
   59   Closed = app(app(app(Sem,lam(S,lam(F,app(S,lam(E,app(F,E)))))),
   60                    lam(P,merge(B:drs([B:[]:X],[]),app(P,X)))),CC).
   61
   62closure(Cat,Sem,Closed):-   
   63   option('--semantics',amr),
   64   member(Cat,[np, np:_]), !,
   65   Closed = app(Sem,lam(X,B:drs([],[B:[]:pred(X,closing,v,99)]))).
   66
   67closure(Cat,Sem,Closed):-
   68   member(Cat,[np, np:_]), !,
   69   Closed = app(Sem,lam(X,B:drs([],[B:[]:pred(X,topic,a,1)]))).
   70
   71closure(Cat,Sem,Closed):-
   72   option('--semantics',amr),
   73   member(Cat,[np:nb/n, np/n]), !, 
   74   Closed = app(app(Sem,lam(_,_:drs([],[]))),lam(X,B:drs([],[B:[]:pred(X,closing,v,99)]))).
   75
   76closure(Cat,Sem,Closed):-
   77   member(Cat,[np:nb/n, np/n]), !, 
   78   Closed = app(app(Sem,lam(_,_:drs([],[]))),lam(X,B:drs([],[B:[]:pred(X,topic,a,1)]))).
   79
   80closure(Cat,Sem,Closed):-
   81   member(Cat,[np\np, np/np]), !, 
   82   Closed = app(app(Sem,lam(P,merge(B1:drs([B1:[]:X],[B1:[]:pred(X,thing,n,12)]),app(P,X)))),
   83                lam(X,B2:drs([],[B2:[]:pred(X,thing,n,12)]))).
   84
   85closure(Cat,Sem,Closed):-
   86   option('--semantics',amr),
   87   member(Cat,[n, pp]), !,
   88   Closed = merge(B:drs([B:[]:X],[B:[]:pred(X,closing,v,99)]),app(Sem,X)).
   89
   90closure(Cat,Sem,Closed):-
   91   member(Cat,[n, pp]), !,
   92   Closed = merge(B:drs([B:[]:X],[B:[]:pred(X,topic,a,1)]),app(Sem,X)).
   93
   94closure(Cat,Sem,Closed):-
   95   member(Cat,[(s:_\np)\((s:_\np)/np)]), !,
   96   semlex((s:dcl\np)/np,event,[],[]-_,TV),
   97   closure(s:dcl\np,app(Sem,TV),Closed).
   98
   99closure(Cat,Sem,Closed):-
  100   member(Cat,[(s:_\np)\((s:_\np)/pp)]), !,
  101   semlex((s:dcl\np)/pp,event,[],[]-_,TV),
  102   closure(s:dcl\np,app(Sem,TV),Closed).
  103
  104closure(Cat,Sem,Closed):-
  105   member(Cat,[(s:_\np)\(((s:_\np)/pp)/np)]), !,
  106   semlex(((s:dcl\np)/pp)/np,event,[],[]-_,DTV),
  107   closure(s:dcl\np,app(Sem,DTV),Closed).
  108
  109closure(Cat,Sem,Closed):-
  110   member(Cat,[(s:dcl\np)/(s:b\np),
  111               (s:to\np)\(s:to\np),
  112               (s:b\np)\(s:b\np)]), !,
  113   semlex(s:b\np,event,[],[]-_,IV),
  114   closure(s:dcl\np,app(Sem,IV),Closed).
  115
  116closure(Cat,Sem,Closed):-
  117   member(Cat,[(s:_\np)\(s:_\np),
  118               (s:_\np)/(s:_\np),
  119               (s:dcl/np)\(s:dcl/np),
  120               (s:dcl\np)\(s:dcl\np)]), !,
  121   semlex(s:dcl\np,event,[],[]-_,IV),
  122   closure(s:dcl\np,app(Sem,IV),Closed).
  123
  124closure(Cat,Sem,Closed):-
  125   member(Cat,[s:dcl/(s:adj\np)]), !,
  126   semlex(s:adj\np,event,[],[]-_,IV),
  127   closure(s:dcl,app(Sem,IV),Closed).
  128
  129closure(Cat,Sem,Closed):-
  130   member(Cat,[s:_/(s:_\np)]), !,
  131   semlex(s:dcl\np,event,[],[]-_,IV),
  132   closure(s:dcl,app(Sem,IV),Closed).
  133
  134closure(Cat,Sem,Closed):-
  135   member(Cat,[s:wq/(s:q/np), s:wq/(s:adj\np)]), !,
  136   semlex(s:dcl\np,event,[],[]-_,IV),
  137   closure(s:wq,app(Sem,IV),Closed).
  138
  139closure(Cat,Sem,Closed):-
  140   member(Cat,[s:wq/(s:pss\np), s:q/(s:pss\np)]), !,
  141   semlex(s:pss\np,event,[],[]-_,IV),
  142   closure(s:wq,app(Sem,IV),Closed).
  143
  144closure(Cat,Sem,Closed):-
  145   member(Cat,[s:wq/(s:b\np),
  146               s:q/(s:b\np),
  147               s:q/(s:ng\np),
  148               s:qem/(s:dcl/np)]), !,
  149   semlex(s:dcl\np, event,[],[]-_,IV),
  150   closure(s:wq, app(Sem,IV),Closed).
  151
  152closure(X,_,_):-
  153   warning('no closure operation for ~p',[X]), 
  154   fail