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:- local (=:=) / 2. 9:- op(100, xfx, equals). 10:- ['math-utilities']. 11A =:= B :- 12 'CHRgen_num'(C), 13 coca(add_one_constraint(C, A =:= B)), 14 'CHR=:=_2'(A =:= B, D, E, C). 15 16 17 18%%% Rules handling for =:= / 2 19 20'CHR=:=_2'(A =:= B, C, D, E) :- 21 ( 22 'CHRnonvar'(C) 23 ; 24 'CHRalready_in'('CHR=:=_2'(A =:= B, C, D, E)), 25 coca(already_in) 26 ), 27 !. 28'CHR=:=_2'(A =:= B, C, D, E) ?- 29 coca(try_rule(E, A =:= B, normalize, F =:= G, replacement, true, (normalize(F, G, H, I), equals(H, I)))), 30 !, 31 'CHRkill'(C), 32 coca(fired_rule(normalize)), 33 normalize(A, B, J, K), 34 equals(J, K). 35'CHR=:=_2'(A =:= B, C, D, E) :- 36 'CHR=:=_2__0'(A =:= B, C, D, E). 37:- set_flag('CHR=:=_2' / 4, leash, notrace). 38:- current_macro('CHR=:=_2' / 4, _1353, _1354, _1355) -> true ; define_macro('CHR=:=_2' / 4, tr_chr / 2, [write]). 39'CHR=:=_2__0'(A, B, C, D) :- 40 'CHR=:=_2__1'(A, B, C, D). 41:- set_flag('CHR=:=_2__0' / 4, leash, notrace). 42'CHR=:=_2__1'(A =:= B, C, D, E) :- 43 ( 44 'CHRvar'(C) 45 -> 46 'CHRdelay'([C, A =:= B], 'CHR=:=_2'(A =:= B, C, D, E)) 47 ; 48 true 49 ). 50:- set_flag('CHR=:=_2__1' / 4, leash, notrace). 51equals(A, B) :- 52 'CHRgen_num'(C), 53 coca(add_one_constraint(C, equals(A, B))), 54 'CHRequals_2'(equals(A, B), D, E, C). 55 56 57 58%%% Rules handling for equals / 2 59 60'CHRequals_2'(equals(A, B), C, D, E) :- 61 ( 62 'CHRnonvar'(C) 63 ; 64 'CHRalready_in'('CHRequals_2'(equals(A, B), C, D, E)), 65 coca(already_in) 66 ), 67 !. 68'CHRequals_2'(equals(A, B), C, D, E) ?- 69 'CHRget_delayed_goals'(true, F), 70 'CHRequals_2__3'(F, [], [G, H, I, J], K), 71 coca(try_double(E, equals(A, B), K, equals([J * I|H], G), equals(L, M), equals([N * O|P], Q), keep_second, delete(N * R, L, S), (is_div(R, O, T), mult_const(eq0(Q, P), T, eq0(U, V)), add_eq0(eq0(M, S), eq0(U, V), eq0(W, X)), equals(X, W)), eliminate)), 72 no_global_bindings(delete(J * Y, A, Z), (equals(A, B), equals([J * I|H], G))), 73 !, 74 'CHRkill'(C), 75 coca(fired_rule(eliminate)), 76 is_div(Y, I, A1), 77 mult_const(eq0(G, H), A1, eq0(B1, C1)), 78 add_eq0(eq0(B, Z), eq0(B1, C1), eq0(D1, E1)), 79 equals(E1, D1). 80'CHRequals_2'(equals(A, B), C, D, E) :- 81 'CHRequals_2__2'(equals(A, B), C, D, E). 82'CHRequals_2__3'(['CHRequals_2'(equals([A * B|C], D), E, F, G)|H], [], [I, J, K, L], M) ?- 83 'CHRvar'(E), 84 'CHR='([D, C, B, A], [I, J, K, L]), 85 'CHR='(G, M). 86'CHRequals_2__3'([A|B], C, D, E) :- 87 'CHRequals_2__3'(B, C, D, E). 88:- set_flag('CHRequals_2__3' / 4, leash, notrace). 89:- set_flag('CHRequals_2' / 4, leash, notrace). 90:- current_macro('CHRequals_2' / 4, _2599, _2600, _2601) -> true ; define_macro('CHRequals_2' / 4, tr_chr / 2, [write]). 91'CHRequals_2__2'(A, B, C, D) :- 92 'CHRequals_2__4'(A, B, C, D). 93:- set_flag('CHRequals_2__2' / 4, leash, notrace). 94'CHRequals_2__4'(equals([A * B|C], D), E, F, G) ?- 95 'CHRvar'(E), 96 !, 97 'CHRget_delayed_goals'(true, H), 98 'CHRequals_2__4__5'(H, E, equals([A * B|C], D), F, G). 99'CHRequals_2__4'(equals(A, B), C, D, E) :- 100 'CHRequals_2__4__6'(equals(A, B), C, D, E). 101:- set_flag('CHRequals_2__4' / 4, leash, notrace). 102'CHRequals_2__4__5'(['CHRequals_2'(equals(A, B), C, D, E)|F], G, equals([H * I|J], K), L, M) ?- 103 'CHRvar'(C), 104 coca(try_double(M, equals([H * I|J], K), E, equals(A, B), equals([N * O|P], Q), equals(R, S), keep_first, delete(N * T, R, U), (is_div(T, O, V), mult_const(eq0(Q, P), V, eq0(W, X)), add_eq0(eq0(S, U), eq0(W, X), eq0(Y, Z)), equals(Z, Y)), eliminate)), 105 no_global_bindings(delete(H * A1, A, B1), (equals([H * I|J], K), equals(A, B))), 106 !, 107 'CHRkill'(C), 108 coca(fired_rule(eliminate)), 109 'CHRequals_2__4__5'(F, G, equals([H * I|J], K), L, M), 110 is_div(A1, I, C1), 111 mult_const(eq0(K, J), C1, eq0(D1, E1)), 112 add_eq0(eq0(B, B1), eq0(D1, E1), eq0(F1, G1)), 113 equals(G1, F1). 114'CHRequals_2__4__5'([A|B], C, D, E, F) :- 115 'CHRequals_2__4__5'(B, C, D, E, F). 116'CHRequals_2__4__5'([], A, B, C, D) :- 117 'CHRequals_2__4__6'(B, A, C, D). 118:- set_flag('CHRequals_2__4__5' / 5, leash, notrace). 119'CHRequals_2__4__6'(equals(A, B), C, D, E) :- 120 ( 121 'CHRvar'(C) 122 -> 123 'CHRdelay'([C, equals(A, B)], 'CHRequals_2'(equals(A, B), C, D, E)) 124 ; 125 true 126 ). 127:- set_flag('CHRequals_2__4__6' / 4, leash, notrace). 128 129:- getval(variable_names_flag, Val), set_flag(variable_names, Val). 130