correct verify_attributes/3 for variables that have no CLP(ℤ) attribute attached (#373)

Example:

    ?- freeze(B, queen_value_truth(C,N,B)), Q #= N #<==> B.
       clpz:(Q#=N#<==>B), clpz:(B in 0..1), freeze:freeze(B,queen_value_truth(C,N,B))
    ;  false.
This commit is contained in:
Markus Triska
2020-04-30 18:10:09 +02:00
parent f7b401b9b6
commit a39f4b4487

View File

@@ -7371,7 +7371,8 @@ goals_entail(Goals, E) :-
verify_attributes(Var, Other, Gs) :-
% portray_clause(Var = Other),
( get_attr(Var, clpz, clpz_attr(_,_,_,Dom,Ps,Q)) ->
( get_atts(Var, clpz(CLPZ)) ->
CLPZ = clpz_attr(_,_,_,Dom,Ps,Q),
( nonvar(Other) ->
( integer(Other) -> true
; type_error(integer, Other)
@@ -7379,7 +7380,7 @@ verify_attributes(Var, Other, Gs) :-
domain_contains(Dom, Other),
phrase(trigger_props(Ps), [Q], [_]),
Gs = [phrase(do_queue, [Q], _)]
; fd_get(Other, OD, OPs),
; ( get_atts(Other, clpz(clpz_attr(_,_,_,OD,OPs,_))) ->
domains_intersection(OD, Dom, Dom1),
append_propagators(Ps, OPs, Ps1),
new_queue(Q0),
@@ -7387,6 +7388,9 @@ verify_attributes(Var, Other, Gs) :-
phrase((fd_put(Other,Dom1,Ps1),
trigger_props(Ps1)), [Q0], _),
Gs = [phrase(do_queue, [Q0], _)]
; put_atts(Other, clpz(CLPZ)),
Gs = []
)
)
; Gs = []
).