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
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
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