Skip to content

Instantly share code, notes, and snippets.

@Anniepoo
Created March 31, 2021 21:20
Show Gist options
  • Save Anniepoo/aefe83fd4ab60e47111d136899b2b8a7 to your computer and use it in GitHub Desktop.
Save Anniepoo/aefe83fd4ab60e47111d136899b2b8a7 to your computer and use it in GitHub Desktop.
listing(clpfd_equal_/2)
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