1
2%%% The following code has been produced by the CHR compiler
3
4
5:- ( current_module(chr) -> true ; use_module(library(chr)) ).
6
7:- get_flag(variable_names, Val), setval(variable_names_flag, Val), set_flag(variable_names, off).
8:- ['math-ineq.pl'].
9:- op(100, xfx, equals).
10:- op(450, xfx, eqnonlin).
11equals(A, B) :-
12	'CHRgen_num'(C),
13	coca(add_one_constraint(C, equals(A, B))),
14	'CHRequals_2'(equals(A, B), D, E, C).
15
16
17
18%%% Rules handling for equals / 2
19
20'CHRequals_2'(equals(A, B), C, D, E) :-
21	'CHRnonvar'(C),
22	!.
23'CHRequals_2'(equals([], A), B, C, D) ?-
24	coca(try_rule(D, equals([], A), anonymous("0"), equals([], E), replacement, true, zero(E))),
25	!,
26	'CHRkill'(B),
27	coca(fired_rule(anonymous("0"))),
28	zero(A).
29'CHRequals_2'(equals([A * B], C), D, E, F) ?-
30	coca(try_rule(F, equals([A * B], C), anonymous("1"), equals([G * H], I), replacement, (nonground(G), nonzero(H)), is_div(I, H, G))),
31	no_delayed_goals((nonground(A), nonzero(B))),
32	!,
33	'CHRkill'(D),
34	coca(fired_rule(anonymous("1"))),
35	is_div(C, B, A).
36'CHRequals_2'(equals(A, B), C, D, E) ?-
37	coca(try_rule(E, equals(A, B), anonymous("2"), equals(F, G), replacement, simplifyable(H * I, F, J), (is_mul(H, I, K), L is K + G, equals(J, L)))),
38	no_delayed_goals(simplifyable(M * N, A, O)),
39	!,
40	'CHRkill'(C),
41	coca(fired_rule(anonymous("2"))),
42	is_mul(M, N, P),
43	Q is P + B,
44	equals(O, Q).
45'CHRequals_2'(equals(A, B), C, D, E) ?-
46	coca(try_rule(E, equals(A, B), anonymous("4"), equals(F, G), replacement, (all_slacks(F, H), sign(G, I), (I = 0 ; I = H)), (I = 0, all_zeroes(F)))),
47	no_delayed_goals((all_slacks(A, J), sign(B, K), (K = 0 ; K = J))),
48	!,
49	'CHRkill'(C),
50	coca(fired_rule(anonymous("4"))),
51	K = 0,
52	all_zeroes(A).
53'CHRequals_2'(equals([A * B|C], D), E, F, G) ?-
54	'CHRget_delayed_goals'(A, H),
55	'CHRequals_2__10'(H, [A], [I, J, K], L),
56	coca(try_double(G, equals([A * B|C], D), L, equals([A * K|J], I), equals([M * N|O], P), equals([M * Q|R], S), keep_second, true, (is_div(N, Q, T), mult_const(eq0(S, R), T, U), add_eq0(eq0(P, O), U, eq0(V, W)), sort1(W, X), equals(X, V)), anonymous("3"))),
57	!,
58	'CHRkill'(E),
59	coca(fired_rule(anonymous("3"))),
60	is_div(B, K, Y),
61	mult_const(eq0(I, J), Y, Z),
62	add_eq0(eq0(D, C), Z, eq0(A1, B1)),
63	sort1(B1, C1),
64	equals(C1, A1).
65'CHRequals_2'(equals(A, B), C, D, E) ?-
66	'CHRget_delayed_goals'(true, F),
67	'CHRequals_2__11'(F, [], [G, H], I),
68	coca(try_double(E, equals(A, B), I, equals(H, G), equals(J, K), equals(L, M), keep_second, (nonzero(M), nonzero(K), all_slacks(L), all_slacks(J)), (N = 0, O = 0, is_div(K, M, P), mult_const(eq0(N, L), P, Q), add_eq0(eq0(O, J), Q, eq0(R, S)), equals(S, R)), anonymous("5"))),
69	no_delayed_goals((nonzero(G), nonzero(B), all_slacks(H), all_slacks(A))),
70	!,
71	'CHRkill'(C),
72	coca(fired_rule(anonymous("5"))),
73	[T, U] = [0, 0],
74	is_div(B, G, V),
75	mult_const(eq0(T, H), V, W),
76	add_eq0(eq0(U, A), W, eq0(X, Y)),
77	equals(Y, X).
78'CHRequals_2'(equals(A, B), C, D, E) :-
79	'CHRequals_2__9'(equals(A, B), C, D, E).
80'CHRequals_2__10'(['CHRequals_2'(equals([A * B|C], D), E, F, G)|H], [A], [I, J, K], L) ?-
81	'CHRvar'(E),
82	'CHR='([D, C, B], [I, J, K]),
83	'CHR='(G, L).
84'CHRequals_2__10'([A|B], C, D, E) :-
85	'CHRequals_2__10'(B, C, D, E).
86:- set_flag('CHRequals_2__10' / 4, leash, notrace).
87'CHRequals_2__11'(['CHRequals_2'(equals(A, B), C, D, E)|F], [], [G, H], I) ?-
88	'CHRvar'(C),
89	'CHR='([B, A], [G, H]),
90	'CHR='(E, I).
91'CHRequals_2__11'([A|B], C, D, E) :-
92	'CHRequals_2__11'(B, C, D, E).
93:- set_flag('CHRequals_2__11' / 4, leash, notrace).
94:- set_flag('CHRequals_2' / 4, leash, notrace).
95:- current_macro('CHRequals_2' / 4, _3838, _3839, _3840) -> true ; define_macro('CHRequals_2' / 4, tr_chr / 2, [write]).
96'CHRequals_2__9'(A, B, C, D) :-
97	'CHRequals_2__12'(A, B, C, D).
98:- set_flag('CHRequals_2__9' / 4, leash, notrace).
99'CHRequals_2__12'(equals([A * B|C], D), E, F, G) ?-
100	'CHRvar'(E),
101	!,
102	'CHRget_delayed_goals'(A, H),
103	'CHRequals_2__12__13'(H, E, equals([A * B|C], D), F, G).
104'CHRequals_2__12'(equals(A, B), C, D, E) :-
105	'CHRequals_2__12__14'(equals(A, B), C, D, E).
106:- set_flag('CHRequals_2__12' / 4, leash, notrace).
107'CHRequals_2__12__13'(['CHRequals_2'(equals([A * B|C], D), E, F, G)|H], I, equals([A * J|K], L), M, N) ?-
108	'CHRvar'(E),
109	coca(try_double(N, equals([A * J|K], L), G, equals([A * B|C], D), equals([O * P|Q], R), equals([O * S|T], U), keep_first, true, (is_div(S, P, V), mult_const(eq0(R, Q), V, W), add_eq0(eq0(U, T), W, eq0(X, Y)), sort1(Y, Z), equals(Z, X)), anonymous("3"))),
110	!,
111	'CHRkill'(E),
112	coca(fired_rule(anonymous("3"))),
113	'CHRequals_2__12__13'(H, I, equals([A * J|K], L), M, N),
114	is_div(B, J, A1),
115	mult_const(eq0(L, K), A1, B1),
116	add_eq0(eq0(D, C), B1, eq0(C1, D1)),
117	sort1(D1, E1),
118	equals(E1, C1).
119'CHRequals_2__12__13'([A|B], C, D, E, F) :-
120	'CHRequals_2__12__13'(B, C, D, E, F).
121'CHRequals_2__12__13'([], A, B, C, D) :-
122	'CHRequals_2__12__14'(B, A, C, D).
123:- set_flag('CHRequals_2__12__13' / 5, leash, notrace).
124'CHRequals_2__12__14'(equals(A, B), C, D, E) ?-
125	'CHRvar'(C),
126	!,
127	'CHRget_delayed_goals'(true, F),
128	'CHRequals_2__12__14__15'(F, C, equals(A, B), D, E).
129'CHRequals_2__12__14'(equals(A, B), C, D, E) :-
130	'CHRequals_2__12__14__16'(equals(A, B), C, D, E).
131:- set_flag('CHRequals_2__12__14' / 4, leash, notrace).
132'CHRequals_2__12__14__15'(['CHRequals_2'(equals(A, B), C, D, E)|F], G, equals(H, I), J, K) ?-
133	'CHRvar'(C),
134	coca(try_double(K, equals(H, I), E, equals(A, B), equals(L, M), equals(N, O), keep_first, (nonzero(M), nonzero(O), all_slacks(L), all_slacks(N)), (P = 0, Q = 0, is_div(O, M, R), mult_const(eq0(P, L), R, S), add_eq0(eq0(Q, N), S, eq0(T, U)), equals(U, T)), anonymous("5"))),
135	no_delayed_goals((nonzero(I), nonzero(B), all_slacks(H), all_slacks(A))),
136	!,
137	'CHRkill'(C),
138	coca(fired_rule(anonymous("5"))),
139	'CHRequals_2__12__14__15'(F, G, equals(H, I), J, K),
140	[V, W] = [0, 0],
141	is_div(B, I, X),
142	mult_const(eq0(V, H), X, Y),
143	add_eq0(eq0(W, A), Y, eq0(Z, A1)),
144	equals(A1, Z).
145'CHRequals_2__12__14__15'([A|B], C, D, E, F) :-
146	'CHRequals_2__12__14__15'(B, C, D, E, F).
147'CHRequals_2__12__14__15'([], A, B, C, D) :-
148	'CHRequals_2__12__14__16'(B, A, C, D).
149:- set_flag('CHRequals_2__12__14__15' / 5, leash, notrace).
150'CHRequals_2__12__14__16'(equals(A, B), C, D, E) :-
151	(
152	    'CHRvar'(C)
153	->
154	    'CHRdelay'([C, equals(A, B)], 'CHRequals_2'(equals(A, B), C, D, E))
155	;
156	    true
157	).
158:- set_flag('CHRequals_2__12__14__16' / 4, leash, notrace).
159eqnonlin(A, B) :-
160	'CHRgen_num'(C),
161	coca(add_one_constraint(C, eqnonlin(A, B))),
162	'CHReqnonlin_2'(eqnonlin(A, B), D, E, C).
163
164
165
166%%% Rules handling for eqnonlin / 2
167
168'CHReqnonlin_2'(eqnonlin(A, B), C, D, E) :-
169	'CHRnonvar'(C),
170	!.
171'CHReqnonlin_2'(eqnonlin(A, B), C, D, E) ?-
172	coca(try_rule(E, eqnonlin(A, B), anonymous("6"), eqnonlin(F, G), replacement, ground(G), (H is G, F =:= H))),
173	no_delayed_goals(ground(B)),
174	!,
175	'CHRkill'(C),
176	coca(fired_rule(anonymous("6"))),
177	I is B,
178	A =:= I.
179'CHReqnonlin_2'(eqnonlin(A, B * C), D, E, F) ?-
180	coca(try_rule(F, eqnonlin(A, B * C), anonymous("7"), eqnonlin(G, H * I), replacement, ground(H), (J is H, G =:= J * I))),
181	no_delayed_goals(ground(B)),
182	!,
183	'CHRkill'(D),
184	coca(fired_rule(anonymous("7"))),
185	K is B,
186	A =:= K * C.
187'CHReqnonlin_2'(eqnonlin(A, B * C), D, E, F) ?-
188	coca(try_rule(F, eqnonlin(A, B * C), anonymous("8"), eqnonlin(G, H * I), replacement, ground(I), (J is I, G =:= J * H))),
189	no_delayed_goals(ground(C)),
190	!,
191	'CHRkill'(D),
192	coca(fired_rule(anonymous("8"))),
193	K is C,
194	A =:= K * B.
195'CHReqnonlin_2'(eqnonlin(A, B), C, D, E) :-
196	'CHReqnonlin_2__17'(eqnonlin(A, B), C, D, E).
197:- set_flag('CHReqnonlin_2' / 4, leash, notrace).
198:- current_macro('CHReqnonlin_2' / 4, _6469, _6470, _6471) -> true ; define_macro('CHReqnonlin_2' / 4, tr_chr / 2, [write]).
199'CHReqnonlin_2__17'(A, B, C, D) :-
200	'CHReqnonlin_2__18'(A, B, C, D).
201:- set_flag('CHReqnonlin_2__17' / 4, leash, notrace).
202'CHReqnonlin_2__18'(eqnonlin(A, B), C, D, E) :-
203	(
204	    'CHRvar'(C)
205	->
206	    'CHRdelay'([C, eqnonlin(A, B)], 'CHReqnonlin_2'(eqnonlin(A, B), C, D, E))
207	;
208	    true
209	).
210:- set_flag('CHReqnonlin_2__18' / 4, leash, notrace).
211
212:- getval(variable_names_flag, Val), set_flag(variable_names, Val).
213