2:- module(punctuation,[semlex_punct/4]).    3
    4:- use_module(boxer(slashes)).    5:- use_module(boxer(categories),[category/3]).    6:- use_module(library(lists),[member/2]).    7:- use_module(semlib(options),[option/2]).    8
    9
   10/* --------------------------------------------------------------
   11   Aux predicates
   12-------------------------------------------------------------- */
   13
   14punctuation('.').
   15punctuation(',').
   16punctuation(':').
   17punctuation(';').
   18punctuation('LQU').
   19punctuation('RQU').
   20punctuation('LRB').
   21punctuation('RRB').
   22punctuation('LSB').
   23punctuation('RSB').
   24punctuation('LCB').
   25punctuation('RCB').
   26
   27
   28/* --------------------------------------------------------------
   29   Punctuation
   30-------------------------------------------------------------- */
   31
   32semlex_punct(t:_\s:_,_,_,Sem):- !,
   33   Sem = lam(S,app(S,lam(_,drs([],[])))).
   34
   35/* --------------------------------------------------------------
   36   Punctuation (tuples)
   37
   38semlex_punct(Cat,POS,Index,Sem):- 
   39   option('--semantics',tuple),
   40   punctuation(POS),
   41   member(Cat,[s:X\s:X,s:X/s:X,np\np,np/np]), !,
   42   Sem = lam(S,lam(F,app(S,lam(E,merge(drs([],[Index:pred(E,punctuation,a,42)]),app(F,E)))))).
   43
   44semlex_punct(Cat,POS,Index,Sem):- 
   45   option('--semantics',tuple),
   46   punctuation(POS),
   47   member(Cat,[n:X/n:X,n:X\n:X,pp/pp,pp\pp]), !,
   48   Sem = lam(P,lam(Y,merge(drs([],[Index:pred(Y,punctuation,a,42)]),app(P,Y)))).
   49
   50semlex_punct(Cat,POS,Index,Sem):- 
   51   option('--semantics',tuple),
   52   punctuation(POS),   
   53   category(vpadv,Cat,_), !,
   54   Sem = lam(X,lam(Q,lam(F,app(app(X,Q),lam(E,merge(drs([],[Index:pred(E,punctuation,a,42)]),app(F,E))))))).
   55
   56semlex_punct(Cat,POS,Index,Sem):- 
   57   option('--semantics',tuple),
   58   punctuation(POS),   
   59   member(Cat,[np\np, np/np]), !,
   60   Sem = lam(Q,lam(P,app(Q,lam(X,merge(drs([],[Index:pred(X,punctuation,a,42)]),
   61                                       app(P,X)))))).
   62
   63semlex_punct(Cat,POS,Index,Sem):- 
   64   option('--semantics',tuple),
   65   punctuation(POS),   
   66   member(Cat,[((s:X\np)/(s:X\np))/((s:X\np)/(s:X\np)),
   67               ((s:X\np)/(s:X\np))\((s:X\np)/(s:X\np)),
   68               ((s:X\np)\(s:X\np))\((s:X\np)\(s:X\np)),  
   69               ((s:X\np)\(s:X\np))/((s:X\np)\(s:X\np))]), !,
   70   Sem = lam(AV,lam(VP,lam(NP,lam(F,app(app(app(AV,VP),NP),lam(E,merge(drs([],[Index:pred(E,punctuation,a,42)]),app(F,E)))))))).
   71
   72semlex_punct(Cat,POS,Index,Sem):- 
   73   option('--semantics',tuple),
   74   punctuation(POS),   
   75   member(Cat,[(s:X/s:X)/(s:X/s:X),
   76               (s:X/s:X)\(s:X/s:X),
   77               (s:X\s:X)/(s:X\s:X),
   78               (s:X\s:X)\(s:X\s:X)]), !, 
   79   Sem = lam(M,lam(S,lam(F,app(app(M,S),lam(E,merge(drs([],[Index:pred(E,punctuation,a,42)]),app(F,E))))))).
   80
   81semlex_punct(Cat,POS,Index,Sem):- 
   82   option('--semantics',tuple),
   83   punctuation(POS),   
   84   member(Cat,[(np\np)/(np\np),
   85               (np\np)\(np\np),
   86               (np/np)/(np/np)]), !, 
   87   Sem = lam(M,lam(Q,lam(P,app(app(M,Q),lam(X,merge(drs([],[Index:pred(X,punctuation,a,42)]),
   88                                                    app(P,X))))))).
   89-------------------------------------------------------------- */
   90
   91semlex_punct(Cat,POS,_Index,Sem):- 
   92   member(Cat,[(s:X/s:X)/(s:Y/s:Y),
   93               (s:X/s:X)/(s:Y\s:Y),
   94               (s:X/s:X)\(s:Y/s:Y),
   95               (s:X/s:X)\(s:Y\s:Y),
   96               (s:X\s:X)/(s:Y\s:Y),
   97               (s:X\s:X)/(s:Y/s:Y),
   98               (s:X\s:X)\(s:Y/s:Y),
   99               (s:X\s:X)\(s:Y\s:Y)]),
  100   punctuation(POS), !,
  101   Sem = lam(P,P).
  102
  103semlex_punct(C\C,POS,_Index,Sem):- 
  104   punctuation(POS), !,
  105   Sem = lam(X,X).
  106
  107semlex_punct(C/C,POS,_Index,Sem):- 
  108   punctuation(POS), !,
  109   Sem = lam(X,X)