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