2:- module(mergeDRT,[mergeDrs/2]). 3
4:- use_module(library(lists),[member/2,append/3]). 5:- use_module(boxer(noncomp),[noncomp/3]). 6
7
11
12mergeDrs(Var,Var):- var(Var), !.
13
14mergeDrs(lab(K,B),lab(K,R)):- !,
15 mergeDrs(B,R).
16
17mergeDrs(sdrs([],C),sdrs([],C)):- !.
18
19mergeDrs(sdrs([sub(B1,B2)|L1],C1),sdrs([sub(R1,R2)|L2],C2)):- !,
20 mergeDrs(B1,R1),
21 mergeDrs(B2,R2),
22 mergeDrs(sdrs(L1,C1),sdrs(L2,C2)).
23
24mergeDrs(sdrs([lab(K2,sdrs([sub(lab(K2,B2),B3)],C1))|L],C2),R):- !,
25 append(C1,C2,C3),
26 mergeDrs(sdrs([sub(lab(K2,B2),B3)|L],C3),R).
27
28mergeDrs(sdrs([lab(K2,sdrs([lab(K2,B2)],C1))|L],C2),R):- !,
29 append(C1,C2,C3),
30 mergeDrs(sdrs([lab(K2,B2)|L],C3),R).
31
32mergeDrs(sdrs([lab(K,B)|L1],C1),sdrs([lab(K,R)|L2],C2)):- !,
33 mergeDrs(B,R),
34 mergeDrs(sdrs(L1,C1),sdrs(L2,C2)).
35
36mergeDrs(B,R):-
37 pnf(B,P),
38 reduceMerge(P,R).
39
40
44
47reduceMerge(Var,Var):- var(Var), !.
48
51reduceMerge(merge(Var,B),merge(Var,R)):- var(Var), !, reduceMerge(B,R).
52reduceMerge(merge(B,Var),merge(R,Var)):- var(Var), !, reduceMerge(B,R).
53reduceMerge(alfa(T,Var,B),alfa(T,Var,R)):- var(Var), !, reduceMerge(B,R).
54reduceMerge(alfa(T,B,Var),alfa(T,R,Var)):- var(Var), !, reduceMerge(B,R).
55
58reduceMerge(merge(B:B1,B:B2),B:B3):- !,
59 merge(B1,B2,B3).
60
61reduceMerge(alfa(_,_:B1,B:B2),B:B3):- !,
62 merge(B1,B2,B3).
63
66reduceMerge(merge(K1:B1,sdrs([lab(K,B2)|L],R)),SDRS):- !,
67 mergeDrs(sdrs([lab(K,merge(K1:B1,B2))|L],R),SDRS).
68
69reduceMerge(merge(K1:B1,sdrs([sub(lab(K,B2),B3)|L],R)),SDRS):- !,
70 mergeDrs(sdrs([sub(lab(K,merge(K1:B1,B2)),B3)|L],R),SDRS).
71
72reduceMerge(merge(sdrs([lab(K,K1)],R),B2),SDRS):- !,
73 mergeDrs(sdrs([lab(K,merge(K1,B2))],R),SDRS).
74
75reduceMerge(merge(sdrs([sub(lab(K,K1),B3)],R),B2),SDRS):- !,
76 mergeDrs(sdrs([sub(lab(K,merge(K1,B2)),B3)],R),SDRS).
77
78reduceMerge(merge(sdrs([X|L1],R1),B),sdrs([X|L2],R2)):- !,
79 reduceMerge(merge(sdrs(L1,R1),B),sdrs(L2,R2)).
80
81reduceMerge(alfa(T,K1:B1,sdrs([lab(K,B2)|L],R)),SDRS):- !,
82 mergeDrs(sdrs([lab(K,alfa(T,K1:B1,B2))|L],R),SDRS).
83
84reduceMerge(alfa(T,K1:B1,sdrs([sub(lab(K,B2),B3)|L],R)),SDRS):- !,
85 mergeDrs(sdrs([sub(lab(K,alfa(T,K1:B1,B2)),B3)|L],R),SDRS).
86
87reduceMerge(alfa(T,sdrs([lab(K,K1:B1)],R),B2),SDRS):- !,
88 mergeDrs(sdrs([lab(K,alfa(T,K1:B1,B2))],R),SDRS).
89
90reduceMerge(alfa(T,sdrs([sub(lab(K,K1),B3)],R),B2),SDRS):- !,
91 mergeDrs(sdrs([sub(lab(K,alfa(T,K1,B2)),B3)],R),SDRS).
92
95reduceMerge(merge(B:B1,merge(B:B2,K)),Reduced):- !,
96 merge(B1,B2,B3),
97 reduceMerge(merge(B:B3,K),Reduced).
98
99reduceMerge(alfa(_,_:B1,merge(B:B2,K)),Reduced):- !,
100 merge(B1,B2,B3),
101 reduceMerge(merge(B:B3,K),Reduced).
102
103reduceMerge(merge(B:B1,alfa(_,_:B2,K)),Reduced):- !,
104 merge(B1,B2,B3),
105 reduceMerge(merge(B:B3,K),Reduced).
106
107reduceMerge(alfa(_,_:B1,alfa(T,B:B2,K)),Reduced):- !,
108 merge(B1,B2,B3),
109 reduceMerge(alfa(T,B:B3,K),Reduced).
110
111reduceMerge(merge(B:B1,merge(sdrs([lab(K,B:B2)|L],R),M)),Reduced):- !,
112 merge(B1,B2,B3),
113 reduceMerge(merge(sdrs([lab(K,B:B3)|L],R),M),Reduced).
114
115reduceMerge(alfa(_,_:B1,merge(sdrs([lab(K,B:B2)|L],R),M)),Reduced):- !,
116 merge(B1,B2,B3),
117 reduceMerge(merge(sdrs([lab(K,B:B3)|L],R),M),Reduced).
118
119reduceMerge(alfa(_,_:B1,alfa(T,sdrs([lab(K,B:B2)|L],R),M)),Reduced):- !,
120 merge(B1,B2,B3),
121 reduceMerge(alfa(T,sdrs([lab(K,B:B3)|L],R),M),Reduced).
122
123reduceMerge(merge(B:B1,merge(sdrs([sub(lab(K,B:B2),B4)|L],R),M)),Reduced):- !,
124 merge(B1,B2,B3),
125 reduceMerge(merge(sdrs([sub(lab(K,B:B3),B4)|L],R),M),Reduced).
126
127reduceMerge(alfa(_,_:B1,merge(sdrs([sub(lab(K,B:B2),B4)|L],R),M)),Reduced):- !,
128 merge(B1,B2,B3),
129 reduceMerge(merge(sdrs([sub(lab(K,B:B3),B4)|L],R),M),Reduced).
130
131reduceMerge(alfa(_,_:B1,alfa(T,sdrs([sub(lab(K,B:B2),B4)|L],R),M)),Reduced):- !,
132 merge(B1,B2,B3),
133 reduceMerge(alfa(T,sdrs([sub(lab(K,B:B3),B4)|L],R),M),Reduced).
134
135reduceMerge(B:drs(D,C1),B:drs(D,C2)):- !, mergeConds(C1,C2).
136
137reduceMerge(M,M).
138
139
143
144pnf(Var,Var):- var(Var), !.
145pnf(alfa(T1,alfa(T2,B1,B2),B3),alfa(T2,N1,N2)):- !, pnf(B1,N1), pnf(alfa(T1,B2,B3),N2).
146pnf(merge(Var,B),merge(Var,B)):- var(Var), !.
147pnf(alfa(T,Var,B),alfa(T,Var,B)):- var(Var), !.
148pnf(merge(merge(B1,B2),B3),merge(N1,N2)):- !, pnf(B1,N1), pnf(merge(B2,B3),N2).
149pnf(merge(alfa(T,B1,B2),B3),alfa(T,N1,N2)):- !, pnf(B1,N1), pnf(merge(B2,B3),N2).
150pnf(merge(B1,B2),merge(B1,R2)):- !, pnf(B2,R2).
151pnf(alfa(T,B1,B2),alfa(T,R1,R2)):- !, pnf(B1,R1), pnf(B2,R2).
152pnf(B,B).
153
154
158
159mergeConds([B:F:Cond1|C1],[B:F:Cond2|C2]):- !,
160 mergeConds([Cond1|C1],[Cond2|C2]).
161
162mergeConds([F:Cond1|C1],[F:Cond2|C2]):- !,
163 mergeConds([Cond1|C1],[Cond2|C2]).
164
165mergeConds([imp(B1,B2)|C1],[imp(B3,B4)|C2]):- !,
166 mergeDrs(B1,B3),
167 mergeDrs(B2,B4),
168 mergeConds(C1,C2).
169
170mergeConds([duplex(Type,B1,Var,B2)|C1],[duplex(Type,B3,Var,B4)|C2]):- !,
171 mergeDrs(B1,B3),
172 mergeDrs(B2,B4),
173 mergeConds(C1,C2).
174
175mergeConds([or(B1,B2)|C1],[or(B3,B4)|C2]):- !,
176 mergeDrs(B1,B3),
177 mergeDrs(B2,B4),
178 mergeConds(C1,C2).
179
180mergeConds([not(B1)|C1],[not(B2)|C2]):- !,
181 mergeDrs(B1,B2),
182 mergeConds(C1,C2).
183
184mergeConds([nec(B1)|C1],[nec(B2)|C2]):- !,
185 mergeDrs(B1,B2),
186 mergeConds(C1,C2).
187
188mergeConds([pos(B1)|C1],[pos(B2)|C2]):- !,
189 mergeDrs(B1,B2),
190 mergeConds(C1,C2).
191
192mergeConds([prop(X,B1)|C1],[prop(X,B2)|C2]):- !,
193 mergeDrs(B1,B2),
194 mergeConds(C1,C2).
195
196mergeConds([pred(A,B,C,D)|C1],[pred(A,B,C,D)|C2]):- !,
197 mergeConds(C1,C2).
198
199mergeConds([rel(A,B,C,D)|C1],[rel(A,B,C,D)|C2]):- !,
200 mergeConds(C1,C2).
201
202mergeConds([role(A,B,C,D)|C1],[role(A,B,C,D)|C2]):- !,
203 mergeConds(C1,C2).
204
205mergeConds([card(A,S,T)|C1],[card(A,S,T)|C2]):- !,
206 mergeConds(C1,C2).
207
208mergeConds([named(A,S,T,U)|C1],[named(A,S,T,U)|C2]):- !,
209 mergeConds(C1,C2).
210
211mergeConds([timex(A,S)|C1],[timex(A,S)|C2]):- !,
212 mergeConds(C1,C2).
213
214mergeConds([eq(X,Y)|C1],[eq(X,Y)|C2]):- !,
215 mergeConds(C1,C2).
216
217mergeConds([],[]).
218
219
223
224merge(drs([],[C1]),drs(D,[C2|L]),drs(D,[C3|L])):- noncomp(C1,C2,C3), !.
225merge(drs(D1,C1),drs(D2,C2),drs(D3,C3)):- !, merge(D1,D2,D3), merge(C1,C2,C3).
226merge([],L,L):- !.
227merge([X|L1],L2,L3):- member(Y,L2), X==Y, !, merge(L1,L2,L3).
228merge([X|L1],L2,[X|L3]):- merge(L1,L2,L3)