I declared an exclusive datatype in z3 as well as a constant and a little assertion:
(declare-datatypes () ((IntOrBool (bpart (b Bool)) (ipart (i Int)))))
(declare-fun iob () (IntOrBool))
(assert (= true (b iob)))
I get the expected result (bpart true)
, but with
(assert (= 1 (i iob)))
z3 reports (bpart false)
.
Does z3 ignore the assertion I gave? If he treats the datatype as a non-exclusive one, how can I force z3 to return an ipart
as result?