let all_separated iter1 iter2 r1 r2 =
try
let w = ref F.p_true in
iter1
(fun p r ->
iter2
(fun q r' ->
let s = F.p_implies
(A.equal p q)
(range_disjoint r r')
in
if F.is_false s then raise Trivial ;
w := F.p_and !w s
) r2
) r1 ; !w
with Trivial ->
F.p_false