5
6file_search_path(semlib, 'src/prolog/lib').
7file_search_path(nutcracker, 'src/prolog/nutcracker').
8file_search_path(boxer, 'src/prolog/boxer').
9file_search_path(knowledge, 'src/prolog/boxer/knowledge').
10
14
15:- use_module(library(lists),[select/3,append/3]). 16:- use_module(boxer(slashes)). 17:- use_module(boxer(printDrs),[printDrs/2]). 18:- use_module(nutcracker(callInference),[callTPandMB/7]). 19:- use_module(semlib(options),[option/2,parseOptions/2,setOption/3,
20 showOptions/1,setDefaultOptions/1]). 21
22:- dynamic chart/5. 23
24/* ----------------------------------------------------------------------------------
25 Simple Lexicon
26---------------------------------------------------------------------------------- */
27
28lex(every, (s/(s\np))/n, (x1-C)-((((x1-B)-drs([],[imp(drs([[]:x1],[pos(C)]),B)]))-D)-D) ).
29
30lex(two, (s/(s\np))/n, (x1-C)-((((x1-B)-drs([[]:x2],[pred(x2,two,n,1),imp(drs([[]:x1],[rel(x1,x2,member,1)]),C),imp(drs([[]:x1],[rel(x1,x2,member,1)]),B)]))-D)-D) ).
31lex(three, (s/(s\np))/n, (x1-C)-((((x1-B)-drs([[]:x2],[pred(x2,three,n,1),imp(drs([[]:x1],[rel(x1,x2,member,1)]),C),imp(drs([[]:x1],[rel(x1,x2,member,1)]),B)]))-D)-D) ).
32lex(four, (s/(s\np))/n, (x1-C)-((((x1-B)-drs([[]:x2],[pred(x2,four,n,1),imp(drs([[]:x1],[rel(x1,x2,member,1)]),C),imp(drs([[]:x1],[rel(x1,x2,member,1)]),B)]))-D)-D) ).
33
34lex(a, np/n, (x1-C)-((x1-B)-drs([[]:x1],[pos(C),pos(B)])) ).
35
36lex(big, n/n, (x1-B)-(x1-drs([],[pred(x1,big,a,0),pos(B)])) ).
37
38lex(man, n, x1-drs([],[pred(x1,man,n,0)]) ).
39lex(men, n, x1-drs([],[pred(x1,man,n,0)]) ).
40lex(woman, n, x1-drs([],[pred(x1,woman,n,0)]) ).
41
42lex(someone, np, (x1-B)-drs([[]:x1],[pred(x1,person,n,1),pos(B)]) ).
43
44lex(herself, np, (x1-B)-drs([],[pred(x1,female,n,0),pos(B)]) ).
45
46lex(mia, np, (x1-B)-drs([[]:x1],[named(x1,mia,per,0),pos(B)]) ).
47lex(lou, np, (x1-B)-drs([[]:x1],[named(x1,lou,per,0),pos(B)]) ).
48lex(andy, np, (x1-B)-drs([[]:x1],[named(x1,andy,per,0),pos(B)]) ).
49
50lex(mia, s/(s\np), ((x1-B)-drs([[]:x1],[named(x1,mia,per,0),pos(B)])-C)-C ).
51
52lex(everyone, s/(s\np), ((x1-B)-drs([],[imp(drs([[]:x1],[pred(x1,person,n,1)]),B)])-C)-C ).
53
54lex(slowly, (s\np)\(s\np), ((x2-drs([],[pred(x2,slow,a,0),pos(C)]))-B)-((x2-C)-B) ).
55lex(slowly, s\s, ((x2-drs([],[pred(x2,slow,a,0),pos(C)]))-B)-((x2-C)-B) ).
56
57lex(smokes, s\np, (((x1-drs([[]:x2],[pred(x2,smoke,v,0),rel(x2,x1,theme,0),pos(B)]))-C)-((x2-B)-C)) ).
58lex(smoke, s\np, (((x1-drs([[]:x2],[pred(x2,smoke,v,0),rel(x2,x1,theme,0),pos(B)]))-C)-((x2-B)-C)) ).
59
60lex(saw, (s\np)/np, ((x1-drs([],[rel(x2,x1,theme,0),pos(D)]))-B)-(((x1-drs([[]:x2],[pred(x2,see,v,0),rel(x2,x1,agent,0),pos(B)]))-C)-((x2-D)-C)) ).
61
62lex(and, (np/np)\np, ((x1-drs([],[rel(x1,x2,member,1)]))-B1)-(((x1-drs([],[rel(x1,x2,member,1)]))-B2)-((x1-B)-drs([[]:x2],[pos(B1),pos(B2),imp(drs([[]:x1],[rel(x1,x2,member,1)]),B)])))).
63
64lex('.', t\s, ((x2-drs([],[pred(x2,event,v,0)]))-B)-B ).
65
69
70combine(A,B,C,D,E,fa(D,E)):- fa(A,B,C).
71combine(A,B,C,D,E,ba(D,E)):- ba(A,B,C).
72combine(A,B,C,D,E,fc(D,E)):- fc(A,B,C).
73
77
78fa((A/B):X-Y, B:X, A:Y).
79ba(A:X, (B\A):X-Y, B:Y).
80fc((A/B):X-Y, (B/C):Z-X, (A/C):Z-Y).
81
82
86
87example( 1, [mia,smokes,'.']).
88example( 2, [two,men,smoke,'.']).
89example( 3, [every,man,smokes,'.']).
90example( 4, [a,woman,smokes,'.']).
91example( 5, [mia,saw,a,man,'.']).
92example( 6, [every,big,man,smokes,'.']).
93example( 7, [every,big,man,saw,a,big,man,'.']).
94example( 8, [two,men,saw,a,woman,'.']).
95example( 9, [three,men,saw,a,woman,'.']).
96example(10, [four,men,saw,a,woman,'.']).
97
98example(20, [lou,and,andy,smoke,'.']).
99example(21, [lou,and,andy,saw,a,woman,'.']).
100
101example(31, [two,men,smoke,'.']).
102example(32, [a,man,smokes,'.']).
103example(33, [three,men,smoke,'.']).
104
105example(41, [mia,smokes,slowly,'.']).
106example(42, [a,man,smokes,slowly,'.']).
107example(43, [every,man,smokes,slowly,'.']).
108example(44, [mia,saw,a,man,slowly,'.']).
109example(45, [every,woman,saw,a,man,slowly,'.']).
110
111example(101,[smokes,mia,'.']).
112example(102,[mia,saw,every,man,'.']).
113
114
118
119example(Example):-
120 setDefaultOptions(nutcracker),
121 example(Example,Sentence),
122 retractall(chart(_,_,_,_,_)),
123 initChart(Sentence,0,N),
124 parse(1,1,N,_), !.
125
126test(Sentence):-
127 setDefaultOptions(nutcracker),
128 retractall(chart(_,_,_,_,_)),
129 initChart(Sentence,0,N),
130 parse(1,1,N,_), !.
131
135
136rte(E1,E2):-
137 setDefaultOptions(nutcracker),
138 setOption(nutcracker,'--tp',vampire),
139 setOption(nutcracker,'--mb',paradox3),
140 example(E1,S1),
141 retractall(chart(_,_,_,_,_)),
142 initChart(S1,0,N1),
143 parse(1,1,N1,F1),
144 example(E2,S2),
145 retractall(chart(_,_,_,_,_)),
146 initChart(S2,0,N2),
147 parse(1,1,N2,F2),
148 inference(not(imp(F1,F2))).
149
150
154
155initChart([],X,X).
156
157initChart([Token|L],X,N):-
158 Y is X + 1,
159 lex(Token,Cat,Sem),
160 assert(chart(X,Y,Cat,Sem,lex(Cat,Token))),
161 initChart(L,Y,N).
162
166
167parse(Start,K,End,FOL):-
168 K > End,
169 chart(Start,End,Cat,Sem,Der), !,
170 write(chart(Start,End,Cat,Sem,Der)),nl,
171 output(Cat,Sem,Der,FOL).
172
173parse(M,K,L,F):-
174 L is M+K, !,
175 parse(M,L),
176 KInc is K+1,
177 parse(0,KInc,L,F).
178
179parse(M,K,L,F):-
180 N is M+K,
181 parse(M,N),
182 MInc is M+1,
183 parse(MInc,K,L,F).
184
185
189
190output(Cat,Sem,Der,FOL):-
191 write(cat:Cat),nl,
192 write(sem:Sem),nl,
193 reduce(Sem,Drs), !,
194 printDrs(user_output,Drs),
195 write(der:Der),nl,
196 drs2fol(Drs,FOL),
197 inference(FOL).
198
202
203parse(M,L):-
204 chart(M,X,Cat1,Sem1,Der1),
205 chart(X,L,Cat2,Sem2,Der2),
206 combine(Cat1:Sem1,Cat2:Sem2,Cat3:Sem3,Der1,Der2,Der3), !,
207 assert(chart(M,L,Cat3,Sem3,Der3)).
208
209parse(_,_).
210
211
215
216inference(FOL):-
217 MaxDomSize=20,
218
219 A10 = all(X,all(Y,imp(member(X,Y),and(individual(X),collection(Y))))),
220 A11 = all(B,imp(two(B),and(some(A,firstmember(A,B)),some(A,secondmember(A,B))))),
221 A12 = all(B,imp(three(B),and(some(A,firstmember(A,B)),and(some(A,secondmember(A,B)),some(A,thirdmember(A,B)))))),
222 A13 = all(B,imp(four(B),and(some(A,firstmember(A,B)),and(some(A,secondmember(A,B)),and(some(A,thirdmember(A,B)),some(A,fourthmember(A,B))))))),
223
224 A14 = all(X,all(Y,imp(firstmember(X,Y),member(X,Y)))),
225 A15 = all(X,all(Y,imp(secondmember(X,Y),member(X,Y)))),
226 A16 = all(X,all(Y,imp(thirdmember(X,Y),member(X,Y)))),
227 A17 = all(X,all(Y,imp(fourthmember(X,Y),member(X,Y)))),
228
232
234 A1 = and(A10,and(A11,and(A12,and(A13,and(A14,and(A15,and(A16,A17))))))),
235
236 A21 = all(X,imp(individual(X),not(collection(X)))),
237 A22 = all(X,imp(individual(X),not(event(X)))),
238 A23 = all(X,imp(collection(X),not(event(X)))),
239 A24 = all(X,imp(man(X),not(woman(X)))),
240 A25 = all(X,imp(man(X),human(X))),
241 A26 = all(X,imp(woman(X),human(X))),
242 A27 = all(X,imp(human(X),individual(X))),
243 A28 = all(X,imp(smoke(X),event(X))),
244 A29 = all(X,imp(see(X),event(X))),
245 A2 = and(A21,and(A22,and(A23,and(A24,and(A25,and(A26,and(A27,and(A28,A29)))))))),
246
247 A31 = all(X,imp(two(X),collection(X))),
248 A32 = all(X,imp(three(X),collection(X))),
249 A33 = all(X,imp(four(X),collection(X))),
250 A3 = and(A31,and(A32,A33)),
251
252 A40 = all(X,imp(two(X),not(some(Y,and(firstmember(Y,X),secondmember(Y,X)))))),
253 A41 = all(X,imp(three(X),not(some(Y,and(firstmember(Y,X),thirdmember(Y,X)))))),
254 A42 = all(X,imp(three(X),not(some(Y,and(secondmember(Y,X),thirdmember(Y,X)))))),
255 A43 = all(X,imp(three(X),not(some(Y,and(firstmember(Y,X),secondmember(Y,X)))))),
256 A44 = all(X,imp(four(X),not(some(Y,and(firstmember(Y,X),secondmember(Y,X)))))),
257 A45 = all(X,imp(four(X),not(some(Y,and(firstmember(Y,X),thirdmember(Y,X)))))),
258 A46 = all(X,imp(four(X),not(some(Y,and(firstmember(Y,X),fourthmember(Y,X)))))),
259 A47 = all(X,imp(four(X),not(some(Y,and(secondmember(Y,X),thirdmember(Y,X)))))),
260 A48 = all(X,imp(four(X),not(some(Y,and(secondmember(Y,X),fourthmember(Y,X)))))),
261 A49 = all(X,imp(four(X),not(some(Y,and(thirdmember(Y,X),fourthmember(Y,X)))))),
262 A4 = and(A40,and(A41,and(A42,and(A43,and(A44,and(A45,and(A46,and(A47,and(A48,A49))))))))),
263
264 A51 = all(X,imp(lou(X),not(andy(X)))),
265 A52 = all(X,imp(lou(X),man(X))),
266 A53 = all(X,imp(andy(X),man(X))),
267 A54 = all(X,imp(mia(X),woman(X))),
268 A5 = and(A51,and(A52,and(A53,A54))),
269
270 A60 = all(X,imp(and(individual(X),some(Y,and(individual(Y),not(eq(Y,X))))),some(Y,and(two(Y),member(X,Y))))),
271 A61 = all(X,imp(and(individual(X),some(Y,and(two(Y),not(member(X,Y))))),some(Y,and(three(Y),member(X,Y))))),
272 A62 = all(X,imp(and(individual(X),some(Y,and(three(Y),not(member(X,Y))))),some(Y,and(four(Y),member(X,Y))))),
273
274 A63 = all(X,imp(two(X),all(Y,imp(member(Y,X),or(firstmember(Y,X),secondmember(Y,X)))))),
275 A64 = all(X,imp(three(X),all(Y,imp(member(Y,X),or(firstmember(Y,X),or(secondmember(Y,X),thirdmember(Y,X))))))),
276 A65 = all(X,imp(four(X),all(Y,imp(member(Y,X),or(firstmember(Y,X),or(secondmember(Y,X),or(thirdmember(Y,X),fourthmember(Y,X)))))))),
277
278 A66 = all(X,all(Y,imp(some(C,and(firstmember(X,C),firstmember(Y,C))),eq(X,Y)))),
279 A67 = all(X,all(Y,imp(some(C,and(secondmember(X,C),secondmember(Y,C))),eq(X,Y)))),
280 A68 = all(X,all(Y,imp(some(C,and(thirdmember(X,C),thirdmember(Y,C))),eq(X,Y)))),
281 A69 = all(X,all(Y,imp(some(C,and(fourthmember(X,C),fourthmember(Y,C))),eq(X,Y)))),
282
283 A6 = and(A60,and(A61,and(A62,and(A63,and(A64,and(A65,and(A66,and(A67,and(A68,A69))))))))),
284
285 BK = and(A1,and(A2,and(A3,and(A4,and(A5,A6))))),
286 F = and(BK,FOL),
287 callTPandMB([],not(F),F,1,MaxDomSize,Model,Engine),
288
289 write(engine:Engine),nl,
290 printModel(Model,user_output),nl.
291
292
296
297reduce(drs(D,Conds),Reduced):-
298 select(pos(drs([],C1)),Conds,C2), !,
299 append(C1,C2,C3),
300 reduce(drs(D,C3),Reduced).
301
302reduce(drs(D,C1),drs(D,C2)):- !,
303 reduce(C1,C2).
304
305reduce([],[]):- !.
306
307reduce([pos(B1)|L1],[pos(B2)|L2]):- !,
308 reduce(B1,B2),
309 reduce(L1,L2).
310
311reduce([imp(A1,B1)|L1],[imp(A2,B2)|L2]):- !,
312 reduce(A1,A2),
313 reduce(B1,B2),
314 reduce(L1,L2).
315
316reduce([or(A1,B1)|L1],[or(A2,B2)|L2]):- !,
317 reduce(A1,A2),
318 reduce(B1,B2),
319 reduce(L1,L2).
320
321reduce([C|L1],[C|L2]):- !,
322 reduce(L1,L2).
323
324
328
329drs2fol(drs([],[Cond]),Formula):- !, cond2fol(Cond,Formula).
330
331drs2fol(drs([],[Cond1,Cond2|Conds]),and(Formula1,Formula2)):- !,
332 cond2fol(Cond1,Formula1), drs2fol(drs([],[Cond2|Conds]),Formula2).
333
334drs2fol(drs([_:X|Referents],Conds),some(V,Formula)):-
335 ref2var(X,V),
336 drs2fol(drs(Referents,Conds),Formula).
337
338
342
343ref2var(x1,'X'):- !.
344ref2var(x2,'Y'):- !.
345
346
350
351cond2fol(_:C,F):- !,
352 cond2fol(C,F).
353
354cond2fol(not(Drs),not(Formula)):- !,
355 drs2fol(Drs,Formula).
356
357cond2fol(pos(Drs),Formula):- !,
358 drs2fol(Drs,Formula).
359
360cond2fol(or(Drs1,Drs2),or(Formula1,Formula2)):- !,
361 drs2fol(Drs1,Formula1),
362 drs2fol(Drs2,Formula2).
363
364cond2fol(imp(drs(D,C),B),Formula):- !,
365 cond2fol(not(drs(D,[not(B)|C])),Formula).
366
367cond2fol(named(X,N1,Type,Sense),F):-
368 symbol(Type,N1,Sense,N2), !,
369 ref2var(X,V),
370 F=..[N2,V].
371
372cond2fol(eq(X,Y),eq(V1,V2)):-
373 ref2var(X,V1),
374 ref2var(Y,V2).
375
376cond2fol(pred(X,Sym1,Type,Sense),F):-
377 symbol(Type,Sym1,Sense,Sym2), !,
378 ref2var(X,V), F=..[Sym2,V].
379
380cond2fol(rel(X,Y,Sym1,Sense),F):-
381 symbol(r,Sym1,Sense,Sym2), !,
382 ref2var(X,V1), ref2var(Y,V2), F=..[Sym2,V1,V2].
383
384
388
389symbol(Type,F1,0,F2):- !, symbol(Type,F1,1,F2).
390symbol(_Type,F1,_Sense,F2):- F1=F2.
391
392
396
397printModel(model(D,[]),Stream):- !,
398 format(Stream,'model(~p, [])',[D]).
399
400printModel(model(D,[F]),Stream):- !,
401 format(Stream,'model(~p,~n [~p])',[D,F]).
402
403printModel(model(D,[X,Y|F]),Stream):- !,
404 sort([X,Y|F],[First|Sorted]),
405 format(Stream,'model(~p,~n [~p,~n',[D,First]),
406 printModel(Sorted,Stream).
407
408printModel([Last],Stream):- !,
409 format(Stream,' ~p])',[Last]).
410
411printModel([X|L],Stream):- !,
412 format(Stream,' ~p,~n',[X]),
413 printModel(L,Stream).
414
415printModel(Model,Stream):-
416 write(Stream,Model)