FIXED: enforce equality also for ground elements in tuples

Example:

    ?- tuples_in([[A,B]], [[1,2],[3,4]]),
       tuples_in([[A,B]], [[3,2]]).
       false.

See https://github.com/SWI-Prolog/swipl-devel/issues/1160.
This commit is contained in:
Markus Triska
2023-04-11 22:31:09 +02:00
parent f08f539768
commit 5dce7d9075

View File

@@ -4357,14 +4357,14 @@ list_first_rest([L|Ls], L, Ls).
tuple_domain([], _) --> [].
tuple_domain([T|Ts], Relation0) -->
{ maplist(list_first_rest, Relation0, Firsts, Relation1) },
( var(T) ->
( Firsts = [Unique] -> T = Unique
; { list_to_domain(Firsts, FDom),
( Firsts = [Unique] -> T = Unique
; ( var(T) ->
{ list_to_domain(Firsts, FDom),
fd_get(T, TDom, TPs),
domains_intersection(TDom, FDom, TDom1) },
fd_put(T, TDom1, TPs)
; []
)
; []
),
tuple_domain(Ts, Relation1).