3:- module(drs2fol,[pdrs2fol/2,drs2fol/2,symbol/4]). 4
5
9
10drs2fol(smerge(B1,B2),Form):- !, drs2fol(merge(B1,B2),Form).
11
12drs2fol(alfa(_,B1,B2),Form):- !, drs2fol(merge(B1,B2),Form).
13
14drs2fol(drs([],[Cond]),Formula):- !, cond2fol(Cond,Formula).
15
16drs2fol(drs([],[Cond1,Cond2|Conds]),and(Formula1,Formula2)):- !,
17 cond2fol(Cond1,Formula1), drs2fol(drs([],[Cond2|Conds]),Formula2).
18
19drs2fol(drs([_:X|Referents],Conds),some(X,Formula)):- !,
20 drs2fol(drs(Referents,Conds),Formula).
21
22drs2fol(merge(B1,B2),Form):- !,
23 drs2folGap(B1,Gap^Form), drs2fol(B2,Gap).
24
25drs2fol(X,_):-
26 user:option('--warnings',true),
27 format(user_error,'WARNING: drs2fol/2 failed for:~n~p~n',[X]), fail.
28
29
36
37drs2folGap(smerge(B1,B2),Gap^F):- !, drs2folGap(merge(B1,B2),Gap^F).
38
39drs2folGap(alfa(_,B1,B2),Gap^F):- !, drs2folGap(merge(B1,B2),Gap^F).
40
41drs2folGap(merge(B1,B2),Gap2^F):- !,
42 drs2folGap(B1,Gap1^F), drs2folGap(B2,Gap2^Gap1).
43
44drs2folGap(drs([_:X|Dom],Conds),Gap^some(X,F)):- !,
45 drs2folGap(drs(Dom,Conds),Gap^F).
46
47drs2folGap(drs([],Conds),Gap^and(F,Gap)):-
48 drs2fol(drs([],Conds),F).
49
50
54
55cond2fol(_:C,F):- !,
56 cond2fol(C,F).
57
58cond2fol(not(Drs),not(Formula)):- !,
59 drs2fol(Drs,Formula).
60
61cond2fol(prop(_,Drs),Formula):- !,
62 drs2fol(Drs,Formula).
63
64cond2fol(or(Drs1,Drs2),or(Formula1,Formula2)):- !,
65 drs2fol(Drs1,Formula1),
66 drs2fol(Drs2,Formula2).
67
68cond2fol(whq(Drs1,Drs2),F):- !,
69 cond2fol(imp(Drs1,Drs2),F).
70
71cond2fol(whq(_,Drs1,_,Drs2),F):- !,
72 cond2fol(imp(Drs1,Drs2),F).
73
74cond2fol(imp(drs([],Conds),Drs2),imp(Formula1,Formula2)):- !,
75 drs2fol(drs([],Conds),Formula1),
76 drs2fol(Drs2,Formula2).
77
78cond2fol(imp(drs([_:X|Referents],Conds),Drs2),all(X,Formula)):- !,
79 cond2fol(imp(drs(Referents,Conds),Drs2),Formula).
80
83
84cond2fol(card(X,C,_),some(Y,and(card(X,Y),and(F1,F2)))):-
85 symbol(C,c,num,S1),
86 symbol(numeral,n,1,S2),
87 F1=..[S1,Y],
88 F2=..[S2,Y], !.
89
90cond2fol(named(X,N1,Type,Sense),F):-
91 symbol(N1,Type,Sense,N2), !,
92 F=..[N2,X].
93
94cond2fol(timex(X,D1),F):-
95 timex(D1,D2),
96 F=..[D2,X], !.
97
98cond2fol(eq(X,Y),eq(X,Y)):-
99 var(X), var(Y), !.
100
101cond2fol(pred(X,Sym1,Type,Sense),F):-
102 symbol(Sym1,Type,Sense,Sym2), !,
103 F=..[Sym2,X].
104
105cond2fol(rel(X,Y,Sym1,Sense),F):-
106 symbol(Sym1,r,Sense,Sym2), !,
107 F=..[Sym2,X,Y].
108
109cond2fol(X,_):-
110 user:option('--warnings',true),
111 format(user_error,'WARNING: cond2fol/2 failed for ~p~n',[X]), fail.
112
113
117
118pdrs2fol(drs([],[Cond]),Formula):- !,
119 pcond2fol(Cond,Formula).
120
121pdrs2fol(drs([],[Cond1,Cond2|Conds]),and(Formula1,Formula2)):- !,
122 pcond2fol(Cond1,Formula1),
123 pdrs2fol(drs([],[Cond2|Conds]),Formula2).
124
125pdrs2fol(drs([_:X|Referents],Conds),some(X,and(some(Y,member(Y,X)),Formula))):- !,
126 pdrs2fol(drs(Referents,Conds),Formula).
127
128pdrs2fol(X,_):-
129 user:option('--warnings',true),
130 format(user_error,'WARNING: drs2fol/2 failed for ~p~n',[X]), fail.
131
132
136
137pcond2fol(_:C,F):- !,
138 pcond2fol(C,F).
139
140pcond2fol(not(Drs),not(Formula)):- !,
141 pdrs2fol(Drs,Formula).
142
143pcond2fol(prop(_,Drs),Formula):- !,
144 pdrs2fol(Drs,Formula).
145
146pcond2fol(or(Drs1,Drs2),or(Formula1,Formula2)):- !,
147 pdrs2fol(Drs1,Formula1),
148 pdrs2fol(Drs2,Formula2).
149
150pcond2fol(whq(Drs1,Drs2),F):- !,
151 pcond2fol(imp(Drs1,Drs2),F).
152
153pcond2fol(whq(_,Drs1,_,Drs2),F):- !,
154 pcond2fol(imp(Drs1,Drs2),F).
155
156pcond2fol(imp(drs([],Conds),Drs2),imp(Formula1,Formula2)):- !,
157 pdrs2fol(drs([],Conds),Formula1),
158 pdrs2fol(Drs2,Formula2).
159
160pcond2fol(imp(drs([_:X|Referents],Conds),Drs2),all(X,Formula)):- !,
161 pcond2fol(imp(drs(Referents,Conds),Drs2),Formula).
162
163pcond2fol(card(X,1,eq),some(Y,and(member(Y,X),all(Z,imp(member(Z,X),eq(Z,Y)))))):- !.
164
165pcond2fol(card(X,2,ge),some(Y,and(member(Y,X),some(Z,and(member(Z,X),not(eq(Z,Y))))))):- !.
166
167pcond2fol(card(X,C1,T),card(X,C2,T)):-
168 symbol(C1,p,0,C2), !.
169
170pcond2fol(named(X,N1,_,_),named(X,N2)):-
171 symbol(N1,p,0,N2), !.
172
173pcond2fol(timex(X,D1),timex(X,D2)):-
174 timex(D1,D2), !.
175
176pcond2fol(eq(X,Y),all(A,all(B,imp(and(member(A,X),member(B,Y)),eq(X,Y))))):-
177 var(X), var(Y), !.
178
179pcond2fol(pred(X,Sym1,Type,Sense),all(Y,imp(member(Y,X),F))):-
180 symbol(Sym1,Type,Sense,Sym2), !,
181 F=..[Sym2,Y].
182
183pcond2fol(rel(X,Y,Sym1,Sense),all(A,all(B,imp(and(member(A,X),member(B,Y)),F)))):-
184 symbol(Sym1,r,Sense,Sym2), !,
185 F=..[Sym2,A,B].
186
187pcond2fol(X,_):-
188 user:option('--warnings',true),
189 format(user_error,'WARNING: cond2fol/2 failed for ~p~n',[X]),
190 fail.
191
192
193
197
198symbol(F1,Cat,Sense,F2):-
199 var(Sense), !,
200 symbol(F1,Cat,1,F2).
201
202symbol(F1,per,Sense,F2):- !,
203 symbol(F1,p,Sense,F2).
204
205symbol(F1,loc,Sense,F2):-
206 symbol(F1,l,Sense,F2).
207
208symbol(F1,org,Sense,F2):-
209 symbol(F1,o,Sense,F2).
210
211symbol(F1,nam,Sense,F2):-
212 symbol(F1,p,Sense,F2).
213
214symbol(F1,ttl,Sense,F2):-
215 symbol(F1,p,Sense,F2).
216
217symbol(D,t,_Sense,F):- !,
218 timex(D,F).
219
220symbol(F1,Type,0,F2):- !,
221 symbol(F1,Type,1,F2).
222
223symbol(F1,Type,Sense,F2):-
224 (number(F1);atom(F1)),
225 name(F1,A1),
226 sym(A1,A2),
227 name(Type,[T]),
228 name(Sense,A3),
229 append(A2,[95|A3],A4),
230 name(F2,[T,95|A4]),
231 atom(F2), !.
232
233
234sym([],[]).
235
238sym([33|L1],[101,120,99,108,97,109,97,116,105,111,110,109,97,114,107|L2]):- !,
239 sym(L1,L2).
240
243sym([34|L1],[100,111,117,98,108,101,113,117,111,116,101|L2]):- !,
244 sym(L1,L2).
245
248sym([35|L1],[104,101,107,106,101|L2]):- !,
249 sym(L1,L2).
250
253sym([36|L1],[100,111,108,108,97,114|L2]):- !,
254 sym(L1,L2).
255
258sym([37|L1],[112,101,114,99,101,110,116|L2]):- !,
259 sym(L1,L2).
260
263sym([38|L1],[97,109,112,101,114,115,97,110,100|L2]):- !,
264 sym(L1,L2).
265
268sym([39|L1],[115,105,110,103,108,101,113,117,111,116,101|L2]):- !,
269 sym(L1,L2).
270
271sym([40|L1],[108,114,98|L2]):- !,
272 sym(L1,L2).
273
274sym([41|L1],[114,114,98|L2]):- !,
275 sym(L1,L2).
276
279sym([42|L1],[116,105,109,101,115|L2]):- !,
280 sym(L1,L2).
281
284sym([43|L1],[112,108,117,115|L2]):- !,
285 sym(L1,L2).
286
289sym([44|L1],L2):- !,
290 sym(L1,L2).
291
294sym([45|L1],[104,121,112,104,101,110|L2]):- !,
295 sym(L1,L2).
296
299sym([46|L1],L2):- !,
300 sym(L1,L2).
301
304sym([47|L1],L2):- !,
305 sym(L1,L2).
306
309sym([58|L1],[99,111,108,111,110|L2]):- !,
310 sym(L1,L2).
311
314sym([59|L1],[115,101,109,105,99,111,108,111,110|L2]):- !,
315 sym(L1,L2).
316
319sym([64|L1],[97,116|L2]):- !,
320 sym(L1,L2).
321
322
323sym([91|L1],[108,114,98|L2]):- !,
324 sym(L1,L2).
325
328sym([92|L1],L2):- !,
329 sym(L1,L2).
330
331sym([93|L1],[114,114,98|L2]):- !,
332 sym(L1,L2).
333
334sym([123|L1],[108,114,98|L2]):- !,
335 sym(L1,L2).
336
339sym([124|L1],L2):- !,
340 sym(L1,L2).
341
342sym([125|L1],[114,114,98|L2]):- !,
343 sym(L1,L2).
344
345sym([X|L1],[Y|L2]):-
346 X > 64, X < 91, !,
347 Y is X + 32,
348 sym(L1,L2).
349
350sym([X|L1],[X|L2]):-
351 sym(L1,L2).
352
353
357
358timex(date(_:_,_:Y,_:M,_:D),Timex):- !,
359 timex(date(Y,M,D),Timex).
360
361timex(date(_:Y,_:M,_:D),Timex):- !,
362 timex(date(Y,M,D),Timex).
363
364timex(time(_:H,_:M,_:S),Timex):- !,
365 timex(time(H,M,S),Timex).
366
367timex(date(Y,M,D),Timex):-
368 year(Y,[Y1,Y2,Y3,Y4]),
369 month(M,[M1,M2]),
370 day(D,[D1,D2]),
371 name(Timex,[116,95,Y1,Y2,Y3,Y4,M1,M2,D1,D2]).
372
373timex(time(H,M,S),Timex):-
374 hour(H,[H1,H2]),
375 minute(M,[M1,M2]),
376 second(S,[S1,S2]),
377 name(Timex,[116,95,H1,H2,M1,M2,S1,S2]).
378
379year(Y,C):- var(Y), !, name('XXXX',C).
380year(Y,C):- name(Y,C).
381
382month(Y,C):- var(Y), !, name('XX',C).
383month(Y,C):- name(Y,C).
384
385day(Y,C):- var(Y), !, name('XX',C).
386day(Y,C):- name(Y,C).
387
388hour(A,C):- day(A,C).
389minute(A,C):- day(A,C).
390second(A,C):- day(A,C)