Here is an SMT-LIB 2.0 benchmark which I executed with z3 :
(set-logic AUFLIA)
(declare-sort PZ 0)
(declare-fun MS (Int PZ) Bool)
(assert (forall ((x Int)) (exists ((X PZ))
(and (MS x X)
(forall ((y Int)) (=> (MS y X) (= y x)))))))
(check-sat)
I expected the result to be sat
, with at least a model where PZ
is the powerset of Z (integers) and MS
is a predicate which tests the membership of an integer into a subset of Z (an element of the sort PZ
).
But z3 answered unsat
.
Could you help me understanding this result please ? Specifically, how does z3 interprets the sort Int
? Is it really considered infinite ? What about dynamically declared sort (here the sort PZ
) ?