Created
March 31, 2021 21:20
-
-
Save Anniepoo/aefe83fd4ab60e47111d136899b2b8a7 to your computer and use it in GitHub Desktop.
listing(clpfd_equal_/2)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
clpfd:clpfd_equal_(A, B) :- | |
( cyclic_term(A) | |
-> domain_error(clpfd_expression, A) | |
; cyclic_term(B) | |
-> domain_error(clpfd_expression, B) | |
; false | |
). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(A), | |
( A= ?(C) | |
; A= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(A), | |
D=A | |
), | |
( nonvar(B), | |
( B= ?(E) | |
; B= #(E) | |
) | |
-> must_be_fd_integer(E), | |
F=E | |
; v_or_i(B), | |
F=B | |
), | |
true, | |
!, | |
constrain_to_integer(D), | |
D=F. | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(A), | |
( A= ?(C) | |
; A= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(A), | |
D=A | |
), | |
nonvar(B), | |
B=E+F, | |
( nonvar(E), | |
( E= ?(G) | |
; E= #(G) | |
) | |
-> must_be_fd_integer(G), | |
H=G | |
; v_or_i(E), | |
H=E | |
), | |
( nonvar(F), | |
( F= ?(I) | |
; F= #(I) | |
) | |
-> must_be_fd_integer(I), | |
J=I | |
; v_or_i(F), | |
J=F | |
), | |
true, | |
!, | |
make_propagator(pplus(H, J, D), K), | |
init_propagator(H, K), | |
init_propagator(J, K), | |
init_propagator(D, K), | |
trigger_once(K). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(B), | |
( B= ?(C) | |
; B= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(B), | |
D=B | |
), | |
nonvar(A), | |
A=E+F, | |
( nonvar(E), | |
( E= ?(G) | |
; E= #(G) | |
) | |
-> must_be_fd_integer(G), | |
H=G | |
; v_or_i(E), | |
H=E | |
), | |
( nonvar(F), | |
( F= ?(I) | |
; F= #(I) | |
) | |
-> must_be_fd_integer(I), | |
J=I | |
; v_or_i(F), | |
J=F | |
), | |
true, | |
!, | |
make_propagator(pplus(H, J, D), K), | |
init_propagator(H, K), | |
init_propagator(J, K), | |
init_propagator(D, K), | |
trigger_once(K). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(A), | |
( A= ?(C) | |
; A= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(A), | |
D=A | |
), | |
nonvar(B), | |
B=E-F, | |
( nonvar(E), | |
( E= ?(G) | |
; E= #(G) | |
) | |
-> must_be_fd_integer(G), | |
H=G | |
; v_or_i(E), | |
H=E | |
), | |
( nonvar(F), | |
( F= ?(I) | |
; F= #(I) | |
) | |
-> must_be_fd_integer(I), | |
J=I | |
; v_or_i(F), | |
J=F | |
), | |
true, | |
!, | |
make_propagator(pplus(D, J, H), K), | |
init_propagator(D, K), | |
init_propagator(J, K), | |
init_propagator(H, K), | |
trigger_once(K). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(B), | |
( B= ?(C) | |
; B= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(B), | |
D=B | |
), | |
nonvar(A), | |
A=E-F, | |
( nonvar(E), | |
( E= ?(G) | |
; E= #(G) | |
) | |
-> must_be_fd_integer(G), | |
H=G | |
; v_or_i(E), | |
H=E | |
), | |
( nonvar(F), | |
( F= ?(I) | |
; F= #(I) | |
) | |
-> must_be_fd_integer(I), | |
J=I | |
; v_or_i(F), | |
J=F | |
), | |
true, | |
!, | |
make_propagator(pplus(D, J, H), K), | |
init_propagator(D, K), | |
init_propagator(J, K), | |
init_propagator(H, K), | |
trigger_once(K). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(A), | |
( A= ?(C) | |
; A= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(A), | |
D=A | |
), | |
nonvar(B), | |
B=E*F, | |
( nonvar(E), | |
( E= ?(G) | |
; E= #(G) | |
) | |
-> must_be_fd_integer(G), | |
H=G | |
; v_or_i(E), | |
H=E | |
), | |
( nonvar(F), | |
( F= ?(I) | |
; F= #(I) | |
) | |
-> must_be_fd_integer(I), | |
J=I | |
; v_or_i(F), | |
J=F | |
), | |
true, | |
!, | |
make_propagator(ptimes(H, J, D), K), | |
init_propagator(H, K), | |
init_propagator(J, K), | |
init_propagator(D, K), | |
trigger_once(K). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(B), | |
( B= ?(C) | |
; B= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(B), | |
D=B | |
), | |
nonvar(A), | |
A=E*F, | |
( nonvar(E), | |
( E= ?(G) | |
; E= #(G) | |
) | |
-> must_be_fd_integer(G), | |
H=G | |
; v_or_i(E), | |
H=E | |
), | |
( nonvar(F), | |
( F= ?(I) | |
; F= #(I) | |
) | |
-> must_be_fd_integer(I), | |
J=I | |
; v_or_i(F), | |
J=F | |
), | |
true, | |
!, | |
make_propagator(ptimes(H, J, D), K), | |
init_propagator(H, K), | |
init_propagator(J, K), | |
init_propagator(D, K), | |
trigger_once(K). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(A), | |
( A= ?(C) | |
; A= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(A), | |
D=A | |
), | |
nonvar(B), | |
B= -E, | |
( nonvar(E), | |
( E= ?(F) | |
; E= #(F) | |
) | |
-> must_be_fd_integer(F), | |
G=F | |
; v_or_i(E), | |
G=E | |
), | |
true, | |
!, | |
make_propagator(ptimes(-1, G, D), H), | |
init_propagator(G, H), | |
init_propagator(D, H), | |
trigger_once(H). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(B), | |
( B= ?(C) | |
; B= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(B), | |
D=B | |
), | |
nonvar(A), | |
A= -E, | |
( nonvar(E), | |
( E= ?(F) | |
; E= #(F) | |
) | |
-> must_be_fd_integer(F), | |
G=F | |
; v_or_i(E), | |
G=E | |
), | |
true, | |
!, | |
make_propagator(ptimes(-1, G, D), H), | |
init_propagator(G, H), | |
init_propagator(D, H), | |
trigger_once(H). | |
clpfd:clpfd_equal_(A, B) :- | |
C=A, | |
D=B, | |
left_right_linsum_const(C, D, E, F, G), | |
!, | |
scalar_product_(#=, E, F, G). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(A), | |
( A= ?(C) | |
; A= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(A), | |
D=A | |
), | |
E=B, | |
true, | |
!, | |
parse_clpfd(E, D). | |
clpfd:clpfd_equal_(A, B) :- | |
( nonvar(B), | |
( B= ?(C) | |
; B= #(C) | |
) | |
-> must_be_fd_integer(C), | |
D=C | |
; v_or_i(B), | |
D=B | |
), | |
E=A, | |
true, | |
!, | |
parse_clpfd(E, D). | |
clpfd:clpfd_equal_(A, B) :- | |
C=A, | |
D=B, | |
true, | |
!, | |
parse_clpfd(C, E), | |
parse_clpfd(D, E). | |
true. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment