Replaced loading hprolog by loading library(dialect/hprolog)
[chr.git] / guard_entailment.chr
blob6338cd64d378cdd80c66055c542f90e3ca8c4000
1 :- module(guard_entailment,
2           [ entails_guard/2,
3             simplify_guards/5
4           ]).
5 :- include(chr_op).
6 :- use_module(library(dialect/hprolog)).
7 :- use_module(builtins).
8 :- use_module(chr_compiler_errors).
9 :- chr_option(debug, off).
10 :- chr_option(optimize, full).
11 :- chr_option(verbosity,off).
12 %:- chr_option(dynattr,on).
13 :- chr_constraint known/1, test/1, cleanup/0, variables/1.
14 entails_guard(A, B) :-
15         copy_term_nat((A, B), (C, F)),
16         term_variables(C, D),
17         variables(D),
18         sort(C, E),
19         entails_guard2(E), !,
20         test(F), !,
21         cleanup.
22 entails_guard2([]).
23 entails_guard2([A|B]) :-
24         known(A),
25         entails_guard2(B).
26 simplify_guards(A, H, B, G, I) :-
27         copy_term_nat((A, B), (C, E)),
28         term_variables(C, D),
29         variables(D),
30         sort(C,Z),
31         entails_guard2(Z), !,
32         simplify(E, F),
33         simplified(B, F, G, H, I), !,
34         cleanup.
35 simplified([], [], [], A, A).
36 simplified([A|B], [keep|C], [A|D], E, F) :-
37         simplified(B, C, D, E, F).
38 simplified([_|_], [fail|_], fail, A, A).
39 simplified([A|B], [true|L], [I|M], F, J) :-
40         builtins:binds_b(A, C),
41         term_variables(B, D),
42         intersect_eq(C, D, E), !,
43         (   E=[]
44         ->  term_variables(F, G),
45             intersect_eq(C, G, H), !,
46             (   H=[]
47             ->  I=true,
48                 J=K
49             ;   I=true,
50                 J= (A, K)
51             )
52         ;   I=A,
53             J=K
54         ),
55         simplified(B, L, M, F, K).
56 simplify([], []).
57 simplify([A|D], [B|E]) :-
58         (   \+try(true, A)
59         ->  B=true
60         ;   builtins:negate_b(A, C),
61             (   \+try(true, C)
62             ->  B=fail
63             ;   B=keep
64             )
65         ),
66         known(A),
67         simplify(D, E).
68 try(A, B) :-
69         (   known(A)
70         ->  true
71         ;   chr_error(internal, 'Entailment Checker: try/2.\n', [])
72         ),
73         (   test(B)
74         ->  fail
75         ;   true
76         ).
77 add_args_unif([], [], true).
78 add_args_unif([A|C], [B|D], (A=B, E)) :-
79         add_args_unif(C, D, E).
80 add_args_nunif([], [], fail).
81 add_args_nunif([A|C], [B|D], (A\=B;E)) :-
82         add_args_nunif(C, D, E).
83 add_args_nmatch([], [], fail).
84 add_args_nmatch([A|C], [B|D], (A\==B;E)) :-
85         add_args_nmatch(C, D, E).
86 all_unique_vars(A, B) :-
87         all_unique_vars(A, B, []).
88 all_unique_vars([], _, _).
89 all_unique_vars([A|D], B, C) :-
90         var(A),
91         \+memberchk_eq(A, B),
92         \+memberchk_eq(A, C),
93         all_unique_vars(D, [A|C]).
94 :- chr_constraint'test/1_1_$default'/1, 'test/1_1_$special_,/2'/2, 'test/1_1_$special_\\+/1'/1, 'test/1_1_$special_integer/1'/1, 'test/1_1_$special_float/1'/1, 'test/1_1_$special_number/1'/1, 'test/1_1_$special_ground/1'/1, 'test/1_1_$special_=:=/2'/2, 'test/1_1_$special_==/2'/2, 'test/1_1_$special_true/0'/0, 'test/1_1_$special_functor/3'/3, 'test/1_1_$special_=/2'/2, 'test/1_1_$special_;/2'/2, 'test/1_1_$special_is/2'/2, 'test/1_1_$special_</2'/2, 'test/1_1_$special_>=/2'/2, 'test/1_1_$special_>/2'/2, 'test/1_1_$special_=\\=/2'/2, 'test/1_1_$special_=</2'/2, 'test/1_1_$special_\\==/2'/2, 'known/1_1_$default'/1, 'known/1_1_$special_;/2'/2, 'known/1_1_$special_nonvar/1'/1, 'known/1_1_$special_var/1'/1, 'known/1_1_$special_atom/1'/1, 'known/1_1_$special_atomic/1'/1, 'known/1_1_$special_compound/1'/1, 'known/1_1_$special_ground/1'/1, 'known/1_1_$special_integer/1'/1, 'known/1_1_$special_float/1'/1, 'known/1_1_$special_number/1'/1, 'known/1_1_$special_=\\=/2'/2, 'known/1_1_$special_\\+/1'/1, 'known/1_1_$special_functor/3'/3, 'known/1_1_$special_\\=/2'/2, 'known/1_1_$special_=/2'/2, 'known/1_1_$special_,/2'/2, 'known/1_1_$special_\\==/2'/2, 'known/1_1_$special_==/2'/2, 'known/1_1_$special_is/2'/2, 'known/1_1_$special_</2'/2, 'known/1_1_$special_>=/2'/2, 'known/1_1_$special_>/2'/2, 'known/1_1_$special_=</2'/2, 'known/1_1_$special_=:=/2'/2, 'known/1_1_$special_fail/0'/0.
95 test((A, B))<=>'test/1_1_$special_,/2'(A, B).
96 test(\+A)<=>'test/1_1_$special_\\+/1'(A).
97 test(integer(A))<=>'test/1_1_$special_integer/1'(A).
98 test(float(A))<=>'test/1_1_$special_float/1'(A).
99 test(number(A))<=>'test/1_1_$special_number/1'(A).
100 test(ground(A))<=>'test/1_1_$special_ground/1'(A).
101 test(A=:=B)<=>'test/1_1_$special_=:=/2'(A, B).
102 test(A==B)<=>'test/1_1_$special_==/2'(A, B).
103 test(true)<=>'test/1_1_$special_true/0'.
104 test(functor(A, B, C))<=>'test/1_1_$special_functor/3'(A, B, C).
105 test(A=B)<=>'test/1_1_$special_=/2'(A, B).
106 test((A;B))<=>'test/1_1_$special_;/2'(A, B).
107 test(A is B)<=>'test/1_1_$special_is/2'(A, B).
108 test(A<B)<=>'test/1_1_$special_</2'(A, B).
109 test(A>=B)<=>'test/1_1_$special_>=/2'(A, B).
110 test(A>B)<=>'test/1_1_$special_>/2'(A, B).
111 test(A=\=B)<=>'test/1_1_$special_=\\=/2'(A, B).
112 test(A=<B)<=>'test/1_1_$special_=</2'(A, B).
113 test(A\==B)<=>'test/1_1_$special_\\==/2'(A, B).
114 test(A)<=>'test/1_1_$default'(A).
115 known((A;B))<=>'known/1_1_$special_;/2'(A, B).
116 known(nonvar(A))<=>'known/1_1_$special_nonvar/1'(A).
117 known(var(A))<=>'known/1_1_$special_var/1'(A).
118 known(atom(A))<=>'known/1_1_$special_atom/1'(A).
119 known(atomic(A))<=>'known/1_1_$special_atomic/1'(A).
120 known(compound(A))<=>'known/1_1_$special_compound/1'(A).
121 known(ground(A))<=>'known/1_1_$special_ground/1'(A).
122 known(integer(A))<=>'known/1_1_$special_integer/1'(A).
123 known(float(A))<=>'known/1_1_$special_float/1'(A).
124 known(number(A))<=>'known/1_1_$special_number/1'(A).
125 known(A=\=B)<=>'known/1_1_$special_=\\=/2'(A, B).
126 known(\+A)<=>'known/1_1_$special_\\+/1'(A).
127 known(functor(A, B, C))<=>'known/1_1_$special_functor/3'(A, B, C).
128 known(A\=B)<=>'known/1_1_$special_\\=/2'(A, B).
129 known(A=B)<=>'known/1_1_$special_=/2'(A, B).
130 known((A, B))<=>'known/1_1_$special_,/2'(A, B).
131 known(A\==B)<=>'known/1_1_$special_\\==/2'(A, B).
132 known(A==B)<=>'known/1_1_$special_==/2'(A, B).
133 known(A is B)<=>'known/1_1_$special_is/2'(A, B).
134 known(A<B)<=>'known/1_1_$special_</2'(A, B).
135 known(A>=B)<=>'known/1_1_$special_>=/2'(A, B).
136 known(A>B)<=>'known/1_1_$special_>/2'(A, B).
137 known(A=<B)<=>'known/1_1_$special_=</2'(A, B).
138 known(A=:=B)<=>'known/1_1_$special_=:=/2'(A, B).
139 known(fail)<=>'known/1_1_$special_fail/0'.
140 known(A)<=>'known/1_1_$default'(A).
141 'known/1_1_$special_;/2'(A, B)\'known/1_1_$special_;/2'(A, B)<=>true.
142 'known/1_1_$special_nonvar/1'(A)\'known/1_1_$special_nonvar/1'(A)<=>true.
143 'known/1_1_$special_var/1'(A)\'known/1_1_$special_var/1'(A)<=>true.
144 'known/1_1_$special_atom/1'(A)\'known/1_1_$special_atom/1'(A)<=>true.
145 'known/1_1_$special_atomic/1'(A)\'known/1_1_$special_atomic/1'(A)<=>true.
146 'known/1_1_$special_compound/1'(A)\'known/1_1_$special_compound/1'(A)<=>true.
147 'known/1_1_$special_ground/1'(A)\'known/1_1_$special_ground/1'(A)<=>true.
148 'known/1_1_$special_integer/1'(A)\'known/1_1_$special_integer/1'(A)<=>true.
149 'known/1_1_$special_float/1'(A)\'known/1_1_$special_float/1'(A)<=>true.
150 'known/1_1_$special_number/1'(A)\'known/1_1_$special_number/1'(A)<=>true.
151 'known/1_1_$special_=\\=/2'(A, B)\'known/1_1_$special_=\\=/2'(A, B)<=>true.
152 'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_\\+/1'(A)<=>true.
153 'known/1_1_$special_functor/3'(A, B, C)\'known/1_1_$special_functor/3'(A, B, C)<=>true.
154 'known/1_1_$special_\\=/2'(A, B)\'known/1_1_$special_\\=/2'(A, B)<=>true.
155 'known/1_1_$special_=/2'(A, B)\'known/1_1_$special_=/2'(A, B)<=>true.
156 'known/1_1_$special_,/2'(A, B)\'known/1_1_$special_,/2'(A, B)<=>true.
157 'known/1_1_$special_\\==/2'(A, B)\'known/1_1_$special_\\==/2'(A, B)<=>true.
158 'known/1_1_$special_==/2'(A, B)\'known/1_1_$special_==/2'(A, B)<=>true.
159 'known/1_1_$special_is/2'(A, B)\'known/1_1_$special_is/2'(A, B)<=>true.
160 'known/1_1_$special_</2'(A, B)\'known/1_1_$special_</2'(A, B)<=>true.
161 'known/1_1_$special_>=/2'(A, B)\'known/1_1_$special_>=/2'(A, B)<=>true.
162 'known/1_1_$special_>/2'(A, B)\'known/1_1_$special_>/2'(A, B)<=>true.
163 'known/1_1_$special_=</2'(A, B)\'known/1_1_$special_=</2'(A, B)<=>true.
164 'known/1_1_$special_=:=/2'(A, B)\'known/1_1_$special_=:=/2'(A, B)<=>true.
165 'known/1_1_$special_fail/0'\'known/1_1_$special_fail/0'<=>true.
166 'known/1_1_$default'(A)\'known/1_1_$default'(A)<=>true.
167 'known/1_1_$special_fail/0'\'test/1_1_$special_,/2'(_, _)<=>true.
168 'known/1_1_$special_fail/0'\'test/1_1_$special_\\+/1'(_)<=>true.
169 'known/1_1_$special_fail/0'\'test/1_1_$special_integer/1'(_)<=>true.
170 'known/1_1_$special_fail/0'\'test/1_1_$special_float/1'(_)<=>true.
171 'known/1_1_$special_fail/0'\'test/1_1_$special_number/1'(_)<=>true.
172 'known/1_1_$special_fail/0'\'test/1_1_$special_ground/1'(_)<=>true.
173 'known/1_1_$special_fail/0'\'test/1_1_$special_=:=/2'(_, _)<=>true.
174 'known/1_1_$special_fail/0'\'test/1_1_$special_==/2'(_, _)<=>true.
175 'known/1_1_$special_fail/0'\'test/1_1_$special_true/0'<=>true.
176 'known/1_1_$special_fail/0'\'test/1_1_$special_functor/3'(_, _, _)<=>true.
177 'known/1_1_$special_fail/0'\'test/1_1_$special_=/2'(_, _)<=>true.
178 'known/1_1_$special_fail/0'\'test/1_1_$special_;/2'(_, _)<=>true.
179 'known/1_1_$special_fail/0'\'test/1_1_$special_is/2'(_, _)<=>true.
180 'known/1_1_$special_fail/0'\'test/1_1_$special_</2'(_, _)<=>true.
181 'known/1_1_$special_fail/0'\'test/1_1_$special_>=/2'(_, _)<=>true.
182 'known/1_1_$special_fail/0'\'test/1_1_$special_>/2'(_, _)<=>true.
183 'known/1_1_$special_fail/0'\'test/1_1_$special_=\\=/2'(_, _)<=>true.
184 'known/1_1_$special_fail/0'\'test/1_1_$special_=</2'(_, _)<=>true.
185 'known/1_1_$special_fail/0'\'test/1_1_$special_\\==/2'(_, _)<=>true.
186 'known/1_1_$special_fail/0'\'test/1_1_$default'(_)<=>true.
187 'known/1_1_$special_;/2'(A, B)\'test/1_1_$special_;/2'(A, B)<=>true.
188 'known/1_1_$special_nonvar/1'(A)\'test/1_1_$default'(nonvar(A))<=>true.
189 'known/1_1_$special_var/1'(A)\'test/1_1_$default'(var(A))<=>true.
190 'known/1_1_$special_atom/1'(A)\'test/1_1_$default'(atom(A))<=>true.
191 'known/1_1_$special_atomic/1'(A)\'test/1_1_$default'(atomic(A))<=>true.
192 'known/1_1_$special_compound/1'(A)\'test/1_1_$default'(compound(A))<=>true.
193 'known/1_1_$special_ground/1'(A)\'test/1_1_$special_ground/1'(A)<=>true.
194 'known/1_1_$special_integer/1'(A)\'test/1_1_$special_integer/1'(A)<=>true.
195 'known/1_1_$special_float/1'(A)\'test/1_1_$special_float/1'(A)<=>true.
196 'known/1_1_$special_number/1'(A)\'test/1_1_$special_number/1'(A)<=>true.
197 'known/1_1_$special_=\\=/2'(A, B)\'test/1_1_$special_=\\=/2'(A, B)<=>true.
198 'known/1_1_$special_\\+/1'(A)\'test/1_1_$special_\\+/1'(A)<=>true.
199 'known/1_1_$special_functor/3'(A, B, C)\'test/1_1_$special_functor/3'(A, B, C)<=>true.
200 'known/1_1_$special_\\=/2'(A, B)\'test/1_1_$default'(A\=B)<=>true.
201 'known/1_1_$special_=/2'(A, B)\'test/1_1_$special_=/2'(A, B)<=>true.
202 'known/1_1_$special_,/2'(A, B)\'test/1_1_$special_,/2'(A, B)<=>true.
203 'known/1_1_$special_\\==/2'(A, B)\'test/1_1_$special_\\==/2'(A, B)<=>true.
204 'known/1_1_$special_==/2'(A, B)\'test/1_1_$special_==/2'(A, B)<=>true.
205 'known/1_1_$special_is/2'(A, B)\'test/1_1_$special_is/2'(A, B)<=>true.
206 'known/1_1_$special_</2'(A, B)\'test/1_1_$special_</2'(A, B)<=>true.
207 'known/1_1_$special_>=/2'(A, B)\'test/1_1_$special_>=/2'(A, B)<=>true.
208 'known/1_1_$special_>/2'(A, B)\'test/1_1_$special_>/2'(A, B)<=>true.
209 'known/1_1_$special_=</2'(A, B)\'test/1_1_$special_=</2'(A, B)<=>true.
210 'known/1_1_$special_=:=/2'(A, B)\'test/1_1_$special_=:=/2'(A, B)<=>true.
211 'known/1_1_$special_fail/0'\'test/1_1_$default'(fail)<=>true.
212 'known/1_1_$default'(A)\'test/1_1_$default'(A)<=>true.
213 'test/1_1_$special_\\==/2'(F, A)<=>nonvar(A), functor(A, C, B)|A=..[_|E], length(D, B), G=..[C|D], add_args_nmatch(D, E, H), I= (\+functor(F, C, B);functor(F, C, B), F=G, H), test(I).
214 'test/1_1_$special_\\==/2'(A, B)<=>nonvar(A)|'test/1_1_$special_\\==/2'(B, A).
215 'known/1_1_$special_=:=/2'(A, B)\'test/1_1_$special_=</2'(A, B)<=>true.
216 'known/1_1_$special_=:=/2'(A, C)\'test/1_1_$special_=</2'(A, B)<=>number(B), number(C), C=<B|true.
217 'known/1_1_$special_=:=/2'(A, C)\'test/1_1_$special_=</2'(B, A)<=>number(B), number(C), B=<C|true.
218 'known/1_1_$special_=</2'(A, C)\'test/1_1_$special_=</2'(A, B)<=>number(B), number(C), C=<B|true.
219 'known/1_1_$special_=</2'(B, A)\'test/1_1_$special_=</2'(C, A)<=>number(B), number(C), C=<B|true.
220 'known/1_1_$special_=</2'(A, C)\'test/1_1_$special_=\\=/2'(A, B)<=>number(B), number(C), B>C|true.
221 'known/1_1_$special_=</2'(B, A)\'test/1_1_$special_=\\=/2'(A, C)<=>number(B), number(C), C<B|true.
222 'known/1_1_$special_>/2'(B, A)<=>'known/1_1_$special_</2'(A, B).
223 'known/1_1_$special_>=/2'(B, A)<=>'known/1_1_$special_=</2'(A, B).
224 'known/1_1_$special_</2'(A, B)<=>'known/1_1_$special_=</2'(A, B), 'known/1_1_$special_=\\=/2'(A, B).
225 'known/1_1_$special_is/2'(A, B)<=>'known/1_1_$special_=:=/2'(A, B).
226 'test/1_1_$special_>/2'(B, A)<=>'test/1_1_$special_</2'(A, B).
227 'test/1_1_$special_>=/2'(B, A)<=>'test/1_1_$special_=</2'(A, B).
228 'test/1_1_$special_</2'(A, B)<=>'test/1_1_$special_,/2'(A=<B, A=\=B).
229 'test/1_1_$special_is/2'(A, B)<=>'test/1_1_$special_=:=/2'(A, B).
230 'known/1_1_$special_==/2'(A, B)==>number(A)|'known/1_1_$special_=:=/2'(A, B).
231 'known/1_1_$special_==/2'(B, A)==>number(A)|'known/1_1_$special_=:=/2'(B, A).
232 'known/1_1_$special_\\==/2'(A, B)==>number(A)|'known/1_1_$special_=\\=/2'(A, B).
233 'known/1_1_$special_\\==/2'(B, A)==>number(A)|'known/1_1_$special_=\\=/2'(B, A).
234 'known/1_1_$special_fail/0'\'known/1_1_$special_;/2'(_, _)<=>true.
235 'known/1_1_$special_fail/0'\'known/1_1_$special_nonvar/1'(_)<=>true.
236 'known/1_1_$special_fail/0'\'known/1_1_$special_var/1'(_)<=>true.
237 'known/1_1_$special_fail/0'\'known/1_1_$special_atom/1'(_)<=>true.
238 'known/1_1_$special_fail/0'\'known/1_1_$special_atomic/1'(_)<=>true.
239 'known/1_1_$special_fail/0'\'known/1_1_$special_compound/1'(_)<=>true.
240 'known/1_1_$special_fail/0'\'known/1_1_$special_ground/1'(_)<=>true.
241 'known/1_1_$special_fail/0'\'known/1_1_$special_integer/1'(_)<=>true.
242 'known/1_1_$special_fail/0'\'known/1_1_$special_float/1'(_)<=>true.
243 'known/1_1_$special_fail/0'\'known/1_1_$special_number/1'(_)<=>true.
244 'known/1_1_$special_fail/0'\'known/1_1_$special_=\\=/2'(_, _)<=>true.
245 'known/1_1_$special_fail/0'\'known/1_1_$special_\\+/1'(_)<=>true.
246 'known/1_1_$special_fail/0'\'known/1_1_$special_functor/3'(_, _, _)<=>true.
247 'known/1_1_$special_fail/0'\'known/1_1_$special_\\=/2'(_, _)<=>true.
248 'known/1_1_$special_fail/0'\'known/1_1_$special_=/2'(_, _)<=>true.
249 'known/1_1_$special_fail/0'\'known/1_1_$special_,/2'(_, _)<=>true.
250 'known/1_1_$special_fail/0'\'known/1_1_$special_\\==/2'(_, _)<=>true.
251 'known/1_1_$special_fail/0'\'known/1_1_$special_==/2'(_, _)<=>true.
252 'known/1_1_$special_fail/0'\'known/1_1_$special_is/2'(_, _)<=>true.
253 'known/1_1_$special_fail/0'\'known/1_1_$special_</2'(_, _)<=>true.
254 'known/1_1_$special_fail/0'\'known/1_1_$special_>=/2'(_, _)<=>true.
255 'known/1_1_$special_fail/0'\'known/1_1_$special_>/2'(_, _)<=>true.
256 'known/1_1_$special_fail/0'\'known/1_1_$special_=</2'(_, _)<=>true.
257 'known/1_1_$special_fail/0'\'known/1_1_$special_=:=/2'(_, _)<=>true.
258 'known/1_1_$special_fail/0'\'known/1_1_$special_fail/0'<=>true.
259 'known/1_1_$special_fail/0'\'known/1_1_$default'(_)<=>true.
260 'known/1_1_$special_,/2'(A, B)<=>known(A), known(B).
261 'known/1_1_$special_=:=/2'(A, A)<=>true.
262 'known/1_1_$special_==/2'(A, A)<=>true.
263 'known/1_1_$special_=</2'(A, A)<=>true.
264 'known/1_1_$special_=/2'(A, A)<=>true.
265 'known/1_1_$special_=/2'(A, B)<=>var(A)|A=B.
266 'known/1_1_$special_=/2'(B, A)<=>var(A)|B=A.
267 'known/1_1_$special_\\=/2'(A, B)<=>ground(A), ground(B), A=B|'known/1_1_$special_fail/0'.
268 variables(E), 'known/1_1_$special_functor/3'(A, B, C)<=>var(A), ground(B), ground(C)|functor(A, B, C), A=..[_|D], append(D, E, F), variables(F).
269 'known/1_1_$special_functor/3'(A, B, C)<=>nonvar(A), \+functor(A, B, C)|'known/1_1_$special_fail/0'.
270 'known/1_1_$special_\\+/1'(functor(A, B, C))<=>nonvar(A), functor(A, B, C)|'known/1_1_$special_fail/0'.
271 'known/1_1_$special_functor/3'(A, B, C), 'known/1_1_$special_functor/3'(A, D, E)<=>nonvar(B), nonvar(C), nonvar(D), nonvar(E)|'known/1_1_$special_fail/0'.
272 'known/1_1_$special_\\=/2'(A, A)<=>'known/1_1_$special_fail/0'.
273 'known/1_1_$special_=/2'(A, B)<=>nonvar(A), nonvar(B), functor(A, C, D)|functor(B, C, D), A=B->true;'known/1_1_$special_fail/0'.
274 'known/1_1_$special_\\=/2'(A, B)<=>var(A), nonvar(B), functor(B, D, C), C>0|length(E, C), B=..[D|F], G=..[D|E], add_args_nunif(F, E, H), I= (\+functor(A, D, C);A=G, H), known(I).
275 'known/1_1_$special_\\=/2'(A, B)<=>nonvar(A), nonvar(B), functor(A, C, D)|functor(B, C, D)->A=..[C|E], B=..[C|F], add_args_nunif(E, F, G), known(G);true.
276 'known/1_1_$special_\\=/2'(B, A)==>'known/1_1_$special_\\=/2'(A, B).
277 'known/1_1_$special_=</2'(A, B)<=>number(A), number(B), A>B|'known/1_1_$special_fail/0'.
278 'known/1_1_$special_=</2'(A, B)\'known/1_1_$special_=</2'(A, C)<=>number(B), number(C), B=<C|true.
279 'known/1_1_$special_=</2'(C, A)\'known/1_1_$special_=</2'(B, A)<=>number(B), number(C), B=<C|true.
280 'known/1_1_$special_=</2'(B, A), 'known/1_1_$special_=</2'(A, B)<=>'known/1_1_$special_=:=/2'(B, A).
281 'known/1_1_$special_=</2'(B, A), 'known/1_1_$special_=</2'(A, C)==>'known/1_1_$special_=</2'(B, C).
282 'known/1_1_$special_=</2'(A, B), 'known/1_1_$special_=\\=/2'(A, B), 'known/1_1_$special_=</2'(B, C), 'known/1_1_$special_=\\=/2'(B, C)==>'known/1_1_$special_=\\=/2'(A, C).
283 'known/1_1_$special_=:=/2'(A, B)<=>number(A), number(B), A=\=B|'known/1_1_$special_fail/0'.
284 'known/1_1_$special_=\\=/2'(A, B)<=>number(A), number(B), A=:=B|'known/1_1_$special_fail/0'.
285 'known/1_1_$special_=\\=/2'(A, A)<=>'known/1_1_$special_fail/0'.
286 'known/1_1_$special_=:=/2'(A, B), 'known/1_1_$special_=\\=/2'(A, B)<=>'known/1_1_$special_fail/0'.
287 'known/1_1_$special_=:=/2'(B, A), 'known/1_1_$special_=:=/2'(A, C)==>B\==C|'known/1_1_$special_=:=/2'(B, C).
288 'known/1_1_$special_=:=/2'(B, A)==>'known/1_1_$special_=:=/2'(A, B).
289 'known/1_1_$special_=\\=/2'(B, A)==>'known/1_1_$special_=\\=/2'(A, B).
290 'known/1_1_$special_number/1'(A)<=>nonvar(A), \+number(A)|'known/1_1_$special_fail/0'.
291 'known/1_1_$special_float/1'(A)<=>nonvar(A), \+float(A)|'known/1_1_$special_fail/0'.
292 'known/1_1_$special_integer/1'(A)<=>nonvar(A), \+integer(A)|'known/1_1_$special_fail/0'.
293 'known/1_1_$special_integer/1'(A)==>'known/1_1_$special_number/1'(A).
294 'known/1_1_$special_float/1'(A)==>'known/1_1_$special_number/1'(A).
295 'known/1_1_$special_;/2'(A, B), 'known/1_1_$special_\\+/1'((A;B))<=>'known/1_1_$special_fail/0'.
296 'known/1_1_$special_nonvar/1'(A), 'known/1_1_$special_\\+/1'(nonvar(A))<=>'known/1_1_$special_fail/0'.
297 'known/1_1_$special_var/1'(A), 'known/1_1_$special_\\+/1'(var(A))<=>'known/1_1_$special_fail/0'.
298 'known/1_1_$special_atom/1'(A), 'known/1_1_$special_\\+/1'(atom(A))<=>'known/1_1_$special_fail/0'.
299 'known/1_1_$special_atomic/1'(A), 'known/1_1_$special_\\+/1'(atomic(A))<=>'known/1_1_$special_fail/0'.
300 'known/1_1_$special_compound/1'(A), 'known/1_1_$special_\\+/1'(compound(A))<=>'known/1_1_$special_fail/0'.
301 'known/1_1_$special_ground/1'(A), 'known/1_1_$special_\\+/1'(ground(A))<=>'known/1_1_$special_fail/0'.
302 'known/1_1_$special_integer/1'(A), 'known/1_1_$special_\\+/1'(integer(A))<=>'known/1_1_$special_fail/0'.
303 'known/1_1_$special_float/1'(A), 'known/1_1_$special_\\+/1'(float(A))<=>'known/1_1_$special_fail/0'.
304 'known/1_1_$special_number/1'(A), 'known/1_1_$special_\\+/1'(number(A))<=>'known/1_1_$special_fail/0'.
305 'known/1_1_$special_=\\=/2'(A, B), 'known/1_1_$special_\\+/1'(A=\=B)<=>'known/1_1_$special_fail/0'.
306 'known/1_1_$special_\\+/1'(A), 'known/1_1_$special_\\+/1'(\+A)<=>'known/1_1_$special_fail/0'.
307 'known/1_1_$special_functor/3'(A, B, C), 'known/1_1_$special_\\+/1'(functor(A, B, C))<=>'known/1_1_$special_fail/0'.
308 'known/1_1_$special_\\=/2'(A, B), 'known/1_1_$special_\\+/1'(A\=B)<=>'known/1_1_$special_fail/0'.
309 'known/1_1_$special_=/2'(A, B), 'known/1_1_$special_\\+/1'(A=B)<=>'known/1_1_$special_fail/0'.
310 'known/1_1_$special_,/2'(A, B), 'known/1_1_$special_\\+/1'((A, B))<=>'known/1_1_$special_fail/0'.
311 'known/1_1_$special_\\==/2'(A, B), 'known/1_1_$special_\\+/1'(A\==B)<=>'known/1_1_$special_fail/0'.
312 'known/1_1_$special_==/2'(A, B), 'known/1_1_$special_\\+/1'(A==B)<=>'known/1_1_$special_fail/0'.
313 'known/1_1_$special_is/2'(A, B), 'known/1_1_$special_\\+/1'(A is B)<=>'known/1_1_$special_fail/0'.
314 'known/1_1_$special_</2'(A, B), 'known/1_1_$special_\\+/1'(A<B)<=>'known/1_1_$special_fail/0'.
315 'known/1_1_$special_>=/2'(A, B), 'known/1_1_$special_\\+/1'(A>=B)<=>'known/1_1_$special_fail/0'.
316 'known/1_1_$special_>/2'(A, B), 'known/1_1_$special_\\+/1'(A>B)<=>'known/1_1_$special_fail/0'.
317 'known/1_1_$special_=</2'(A, B), 'known/1_1_$special_\\+/1'(A=<B)<=>'known/1_1_$special_fail/0'.
318 'known/1_1_$special_=:=/2'(A, B), 'known/1_1_$special_\\+/1'(A=:=B)<=>'known/1_1_$special_fail/0'.
319 'known/1_1_$special_fail/0', 'known/1_1_$special_\\+/1'(fail)<=>'known/1_1_$special_fail/0'.
320 'known/1_1_$default'(A), 'known/1_1_$special_\\+/1'(A)<=>'known/1_1_$special_fail/0'.
321 'known/1_1_$special_\\==/2'(A, B), 'known/1_1_$special_==/2'(A, B)<=>'known/1_1_$special_fail/0'.
322 'known/1_1_$special_==/2'(B, A), 'known/1_1_$special_==/2'(A, C)==>'known/1_1_$special_==/2'(B, C).
323 'known/1_1_$special_==/2'(B, A), 'known/1_1_$special_\\==/2'(A, C)==>'known/1_1_$special_\\==/2'(B, C).
324 'known/1_1_$special_==/2'(B, A)==>'known/1_1_$special_==/2'(A, B).
325 'known/1_1_$special_\\==/2'(B, A)==>'known/1_1_$special_\\==/2'(A, B).
326 'known/1_1_$special_\\==/2'(A, A)==>'known/1_1_$special_fail/0'.
327 'known/1_1_$special_\\==/2'(A, B)<=>nonvar(A), nonvar(B), functor(A, C, D)|functor(B, C, D)->A=..[C|E], B=..[C|F], add_args_nmatch(E, F, G), known(G);true.
328 'known/1_1_$special_==/2'(A, B)==>'known/1_1_$special_=/2'(A, B).
329 'known/1_1_$special_ground/1'(A)==>'known/1_1_$special_nonvar/1'(A).
330 'known/1_1_$special_compound/1'(A)==>'known/1_1_$special_nonvar/1'(A).
331 'known/1_1_$special_atomic/1'(A)==>'known/1_1_$special_nonvar/1'(A).
332 'known/1_1_$special_number/1'(A)==>'known/1_1_$special_nonvar/1'(A).
333 'known/1_1_$special_atom/1'(A)==>'known/1_1_$special_nonvar/1'(A).
334 'known/1_1_$special_var/1'(A), 'known/1_1_$special_nonvar/1'(A)<=>'known/1_1_$special_fail/0'.
335 'known/1_1_$special_;/2'(A, B)\'known/1_1_$special_;/2'(\+ (A;B), C)<=>known(C).
336 'known/1_1_$special_nonvar/1'(A)\'known/1_1_$special_;/2'(\+nonvar(A), B)<=>known(B).
337 'known/1_1_$special_var/1'(A)\'known/1_1_$special_;/2'(\+var(A), B)<=>known(B).
338 'known/1_1_$special_atom/1'(A)\'known/1_1_$special_;/2'(\+atom(A), B)<=>known(B).
339 'known/1_1_$special_atomic/1'(A)\'known/1_1_$special_;/2'(\+atomic(A), B)<=>known(B).
340 'known/1_1_$special_compound/1'(A)\'known/1_1_$special_;/2'(\+compound(A), B)<=>known(B).
341 'known/1_1_$special_ground/1'(A)\'known/1_1_$special_;/2'(\+ground(A), B)<=>known(B).
342 'known/1_1_$special_integer/1'(A)\'known/1_1_$special_;/2'(\+integer(A), B)<=>known(B).
343 'known/1_1_$special_float/1'(A)\'known/1_1_$special_;/2'(\+float(A), B)<=>known(B).
344 'known/1_1_$special_number/1'(A)\'known/1_1_$special_;/2'(\+number(A), B)<=>known(B).
345 'known/1_1_$special_=\\=/2'(A, B)\'known/1_1_$special_;/2'(\+A=\=B, C)<=>known(C).
346 'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'(\+ \+A, B)<=>known(B).
347 'known/1_1_$special_functor/3'(A, B, C)\'known/1_1_$special_;/2'(\+functor(A, B, C), D)<=>known(D).
348 'known/1_1_$special_\\=/2'(A, B)\'known/1_1_$special_;/2'(\+A\=B, C)<=>known(C).
349 'known/1_1_$special_=/2'(A, B)\'known/1_1_$special_;/2'(\+A=B, C)<=>known(C).
350 'known/1_1_$special_,/2'(A, B)\'known/1_1_$special_;/2'(\+ (A, B), C)<=>known(C).
351 'known/1_1_$special_\\==/2'(A, B)\'known/1_1_$special_;/2'(\+A\==B, C)<=>known(C).
352 'known/1_1_$special_==/2'(A, B)\'known/1_1_$special_;/2'(\+A==B, C)<=>known(C).
353 'known/1_1_$special_is/2'(A, B)\'known/1_1_$special_;/2'(\+A is B, C)<=>known(C).
354 'known/1_1_$special_</2'(A, B)\'known/1_1_$special_;/2'(\+A<B, C)<=>known(C).
355 'known/1_1_$special_>=/2'(A, B)\'known/1_1_$special_;/2'(\+A>=B, C)<=>known(C).
356 'known/1_1_$special_>/2'(A, B)\'known/1_1_$special_;/2'(\+A>B, C)<=>known(C).
357 'known/1_1_$special_=</2'(A, B)\'known/1_1_$special_;/2'(\+A=<B, C)<=>known(C).
358 'known/1_1_$special_=:=/2'(A, B)\'known/1_1_$special_;/2'(\+A=:=B, C)<=>known(C).
359 'known/1_1_$special_fail/0'\'known/1_1_$special_;/2'(\+fail, A)<=>known(A).
360 'known/1_1_$default'(A)\'known/1_1_$special_;/2'(\+A, B)<=>known(B).
361 'known/1_1_$special_;/2'(A, B)\'known/1_1_$special_;/2'((\+ (A;B), _), C)<=>known(C).
362 'known/1_1_$special_nonvar/1'(A)\'known/1_1_$special_;/2'((\+nonvar(A), _), B)<=>known(B).
363 'known/1_1_$special_var/1'(A)\'known/1_1_$special_;/2'((\+var(A), _), B)<=>known(B).
364 'known/1_1_$special_atom/1'(A)\'known/1_1_$special_;/2'((\+atom(A), _), B)<=>known(B).
365 'known/1_1_$special_atomic/1'(A)\'known/1_1_$special_;/2'((\+atomic(A), _), B)<=>known(B).
366 'known/1_1_$special_compound/1'(A)\'known/1_1_$special_;/2'((\+compound(A), _), B)<=>known(B).
367 'known/1_1_$special_ground/1'(A)\'known/1_1_$special_;/2'((\+ground(A), _), B)<=>known(B).
368 'known/1_1_$special_integer/1'(A)\'known/1_1_$special_;/2'((\+integer(A), _), B)<=>known(B).
369 'known/1_1_$special_float/1'(A)\'known/1_1_$special_;/2'((\+float(A), _), B)<=>known(B).
370 'known/1_1_$special_number/1'(A)\'known/1_1_$special_;/2'((\+number(A), _), B)<=>known(B).
371 'known/1_1_$special_=\\=/2'(A, B)\'known/1_1_$special_;/2'((\+A=\=B, _), C)<=>known(C).
372 'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'((\+ \+A, _), B)<=>known(B).
373 'known/1_1_$special_functor/3'(A, B, C)\'known/1_1_$special_;/2'((\+functor(A, B, C), _), D)<=>known(D).
374 'known/1_1_$special_\\=/2'(A, B)\'known/1_1_$special_;/2'((\+A\=B, _), C)<=>known(C).
375 'known/1_1_$special_=/2'(A, B)\'known/1_1_$special_;/2'((\+A=B, _), C)<=>known(C).
376 'known/1_1_$special_,/2'(A, B)\'known/1_1_$special_;/2'((\+ (A, B), _), C)<=>known(C).
377 'known/1_1_$special_\\==/2'(A, B)\'known/1_1_$special_;/2'((\+A\==B, _), C)<=>known(C).
378 'known/1_1_$special_==/2'(A, B)\'known/1_1_$special_;/2'((\+A==B, _), C)<=>known(C).
379 'known/1_1_$special_is/2'(A, B)\'known/1_1_$special_;/2'((\+A is B, _), C)<=>known(C).
380 'known/1_1_$special_</2'(A, B)\'known/1_1_$special_;/2'((\+A<B, _), C)<=>known(C).
381 'known/1_1_$special_>=/2'(A, B)\'known/1_1_$special_;/2'((\+A>=B, _), C)<=>known(C).
382 'known/1_1_$special_>/2'(A, B)\'known/1_1_$special_;/2'((\+A>B, _), C)<=>known(C).
383 'known/1_1_$special_=</2'(A, B)\'known/1_1_$special_;/2'((\+A=<B, _), C)<=>known(C).
384 'known/1_1_$special_=:=/2'(A, B)\'known/1_1_$special_;/2'((\+A=:=B, _), C)<=>known(C).
385 'known/1_1_$special_fail/0'\'known/1_1_$special_;/2'((\+fail, _), A)<=>known(A).
386 'known/1_1_$default'(A)\'known/1_1_$special_;/2'((\+A, _), B)<=>known(B).
387 'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'(A, B)<=>known(B).
388 'known/1_1_$special_\\+/1'(A)\'known/1_1_$special_;/2'((A, _), B)<=>known(B).
389 'known/1_1_$special_;/2'(fail, A)<=>known(A).
390 'known/1_1_$special_;/2'(A, fail)<=>known(A).
391 'known/1_1_$special_;/2'(true, _)<=>true.
392 'known/1_1_$special_;/2'(_, true)<=>true.
393 'known/1_1_$special_functor/3'(A, _, _)\'known/1_1_$special_;/2'(\+functor(A, _, _), _)<=>true.
394 'known/1_1_$special_;/2'(\+functor(A, B, C), D)<=>nonvar(A), functor(A, B, C)|known(D).
395 'known/1_1_$special_;/2'(\+functor(A, B, C), _)<=>nonvar(A), \+functor(A, B, C)|true.
396 'test/1_1_$special_;/2'(fail, A)<=>test(A).
397 'test/1_1_$special_;/2'(A, fail)<=>test(A).
398 % 'test/1_1_$special_=/2'(A, B)<=>A=B|A=B.
399 'test/1_1_$special_=/2'(A, B)<=>ground(A), ground(B)|A=B.
400 % 'test/1_1_$special_=/2'(A, B)<=>nonvar(A), var(B)|'test/1_1_$special_=/2'(B, A).
401 % variables(F)\'test/1_1_$special_=/2'(A, B)<=>var(A), nonvar(B), functor(B, D, C), C>0, B=..[D|E], \+all_unique_vars(E, F)|G= (functor(A, D, C), A=B), test(G).
403 % variables(F) \ 'test/1_1_$special_=/2'(A, B) <=> 
404 %               var(A), 
405 %               nonvar(B), 
406 %               \+ memberchk_eq(A,F),
407 %               functor(B, C, D), 
408 %               B=..[C|_]
409 %       |
410 %               E=functor(A, C, D), 
411 %               test(E).
412 % 'test/1_1_$special_=/2'(A, B)<=>nonvar(A), nonvar(B), functor(B, C, D), B=..[C|F]|functor(A, C, D), A=..[C|E], add_args_unif(E, F, G), test(G).
413 variables(D)\'test/1_1_$special_functor/3'(A, B, C)<=>var(A), ground(B), ground(C), \+memberchk_eq(A, D)|functor(A, B, C).
414 'test/1_1_$special_true/0'<=>true.
415 'test/1_1_$special_==/2'(A, B)<=>A==B|true.
416 'test/1_1_$special_=:=/2'(A, B)<=>A==B|true.
417 'test/1_1_$special_=</2'(A, B)<=>A==B|true.
418 'test/1_1_$special_=</2'(A, B)<=>ground(A), ground(B), A=<B|true.
419 'test/1_1_$special_=</2'(A, B)<=>ground(A), ground(B), A>B|fail.
420 'test/1_1_$special_=:=/2'(A, B)<=>ground(A), ground(B), A=:=B|true.
421 'test/1_1_$special_=:=/2'(A, B)<=>ground(A), ground(B), A=\=B|fail.
422 'test/1_1_$special_=\\=/2'(A, B)<=>ground(A), ground(B), A=\=B|true.
423 'test/1_1_$special_=\\=/2'(A, B)<=>ground(A), ground(B), A=:=B|fail.
424 'test/1_1_$special_functor/3'(A, B, C)<=>nonvar(A), functor(A, B, C)|true.
425 'test/1_1_$special_functor/3'(A, _, _)<=>nonvar(A)|fail.
426 'test/1_1_$special_ground/1'(A)<=>ground(A)|true.
427 'test/1_1_$special_number/1'(A)<=>number(A)|true.
428 'test/1_1_$special_float/1'(A)<=>float(A)|true.
429 'test/1_1_$special_integer/1'(A)<=>integer(A)|true.
430 'test/1_1_$special_number/1'(A)<=>nonvar(A)|fail.
431 'test/1_1_$special_float/1'(A)<=>nonvar(A)|fail.
432 'test/1_1_$special_integer/1'(A)<=>nonvar(A)|fail.
433 'test/1_1_$special_\\+/1'(functor(A, B, C))<=>nonvar(A), functor(A, B, C)|fail.
434 'test/1_1_$special_\\+/1'(functor(A, _, _))<=>nonvar(A)|true.
435 'test/1_1_$special_\\+/1'(ground(A))<=>ground(A)|fail.
436 'test/1_1_$special_\\+/1'(number(A))<=>number(A)|fail.
437 'test/1_1_$special_\\+/1'(float(A))<=>float(A)|fail.
438 'test/1_1_$special_\\+/1'(integer(A))<=>integer(A)|fail.
439 'test/1_1_$special_\\+/1'(number(A))<=>nonvar(A)|true.
440 'test/1_1_$special_\\+/1'(float(A))<=>nonvar(A)|true.
441 'test/1_1_$special_\\+/1'(integer(A))<=>nonvar(A)|true.
442 'test/1_1_$special_,/2'(A, B)<=>test(A), known(A), test(B).
443 'test/1_1_$special_;/2'(A, B)<=>true|negate_b(A, D), negate_b(B, C), (known(C), test(A);known(D), test(B)).
444 'test/1_1_$special_,/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, (B, C)), !, negate_b(A, D), known(D), \+try(E, (B, C)).
445 'test/1_1_$special_\\+/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, \+B), !, negate_b(A, C), known(C), \+try(D, \+B).
446 'test/1_1_$special_integer/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, integer(B)), !, negate_b(A, C), known(C), \+try(D, integer(B)).
447 'test/1_1_$special_float/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, float(B)), !, negate_b(A, C), known(C), \+try(D, float(B)).
448 'test/1_1_$special_number/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, number(B)), !, negate_b(A, C), known(C), \+try(D, number(B)).
449 'test/1_1_$special_ground/1'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, ground(B)), !, negate_b(A, C), known(C), \+try(D, ground(B)).
450 'test/1_1_$special_=:=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B=:=C), !, negate_b(A, D), known(D), \+try(E, B=:=C).
451 'test/1_1_$special_==/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B==C), !, negate_b(A, D), known(D), \+try(E, B==C).
452 'test/1_1_$special_true/0', 'known/1_1_$special_;/2'(A, C)<=>true|\+try(A, true), !, negate_b(A, B), known(B), \+try(C, true).
453 'test/1_1_$special_functor/3'(B, C, D), 'known/1_1_$special_;/2'(A, F)<=>true|\+try(A, functor(B, C, D)), !, negate_b(A, E), known(E), \+try(F, functor(B, C, D)).
454 'test/1_1_$special_=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B=C), !, negate_b(A, D), known(D), \+try(E, B=C).
455 'test/1_1_$special_;/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, (B;C)), !, negate_b(A, D), known(D), \+try(E, (B;C)).
456 'test/1_1_$special_is/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B is C), !, negate_b(A, D), known(D), \+try(E, B is C).
457 'test/1_1_$special_</2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B<C), !, negate_b(A, D), known(D), \+try(E, B<C).
458 'test/1_1_$special_>=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B>=C), !, negate_b(A, D), known(D), \+try(E, B>=C).
459 'test/1_1_$special_>/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B>C), !, negate_b(A, D), known(D), \+try(E, B>C).
460 'test/1_1_$special_=\\=/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B=\=C), !, negate_b(A, D), known(D), \+try(E, B=\=C).
461 'test/1_1_$special_=</2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B=<C), !, negate_b(A, D), known(D), \+try(E, B=<C).
462 'test/1_1_$special_\\==/2'(B, C), 'known/1_1_$special_;/2'(A, E)<=>true|\+try(A, B\==C), !, negate_b(A, D), known(D), \+try(E, B\==C).
463 'test/1_1_$default'(B), 'known/1_1_$special_;/2'(A, D)<=>true|\+try(A, B), !, negate_b(A, C), known(C), \+try(D, B).
464 'test/1_1_$special_,/2'(_, _)<=>fail.
465 'test/1_1_$special_\\+/1'(_)<=>fail.
466 'test/1_1_$special_integer/1'(_)<=>fail.
467 'test/1_1_$special_float/1'(_)<=>fail.
468 'test/1_1_$special_number/1'(_)<=>fail.
469 'test/1_1_$special_ground/1'(_)<=>fail.
470 'test/1_1_$special_=:=/2'(_, _)<=>fail.
471 'test/1_1_$special_==/2'(_, _)<=>fail.
472 'test/1_1_$special_true/0'<=>fail.
473 'test/1_1_$special_functor/3'(_, _, _)<=>fail.
474 'test/1_1_$special_=/2'(_, _)<=>fail.
475 'test/1_1_$special_;/2'(_, _)<=>fail.
476 'test/1_1_$special_is/2'(_, _)<=>fail.
477 'test/1_1_$special_</2'(_, _)<=>fail.
478 'test/1_1_$special_>=/2'(_, _)<=>fail.
479 'test/1_1_$special_>/2'(_, _)<=>fail.
480 'test/1_1_$special_=\\=/2'(_, _)<=>fail.
481 'test/1_1_$special_=</2'(_, _)<=>fail.
482 'test/1_1_$special_\\==/2'(_, _)<=>fail.
483 'test/1_1_$default'(_)<=>fail.
484 cleanup\'known/1_1_$special_;/2'(_, _)<=>true.
485 cleanup\'known/1_1_$special_nonvar/1'(_)<=>true.
486 cleanup\'known/1_1_$special_var/1'(_)<=>true.
487 cleanup\'known/1_1_$special_atom/1'(_)<=>true.
488 cleanup\'known/1_1_$special_atomic/1'(_)<=>true.
489 cleanup\'known/1_1_$special_compound/1'(_)<=>true.
490 cleanup\'known/1_1_$special_ground/1'(_)<=>true.
491 cleanup\'known/1_1_$special_integer/1'(_)<=>true.
492 cleanup\'known/1_1_$special_float/1'(_)<=>true.
493 cleanup\'known/1_1_$special_number/1'(_)<=>true.
494 cleanup\'known/1_1_$special_=\\=/2'(_, _)<=>true.
495 cleanup\'known/1_1_$special_\\+/1'(_)<=>true.
496 cleanup\'known/1_1_$special_functor/3'(_, _, _)<=>true.
497 cleanup\'known/1_1_$special_\\=/2'(_, _)<=>true.
498 cleanup\'known/1_1_$special_=/2'(_, _)<=>true.
499 cleanup\'known/1_1_$special_,/2'(_, _)<=>true.
500 cleanup\'known/1_1_$special_\\==/2'(_, _)<=>true.
501 cleanup\'known/1_1_$special_==/2'(_, _)<=>true.
502 cleanup\'known/1_1_$special_is/2'(_, _)<=>true.
503 cleanup\'known/1_1_$special_</2'(_, _)<=>true.
504 cleanup\'known/1_1_$special_>=/2'(_, _)<=>true.
505 cleanup\'known/1_1_$special_>/2'(_, _)<=>true.
506 cleanup\'known/1_1_$special_=</2'(_, _)<=>true.
507 cleanup\'known/1_1_$special_=:=/2'(_, _)<=>true.
508 cleanup\'known/1_1_$special_fail/0'<=>true.
509 cleanup\'known/1_1_$default'(_)<=>true.
510 cleanup\variables(_)<=>true.
511 cleanup<=>true.