The model that the default tactic finds is correct (it means x == 0.5, which is right for any rounding mode). Adding (assert (= rm roundNearestTiesToEven)) does not change the result.
I can't imagine that the root cause of this is a buggy translation of to_fp to bit-vectors, I would find it more likely that there's some conceptual problem in theory_fpa.cpp.
Also, sat takes a whole bunch of time and then reports (sat "abort giveup") and I can imagine that it doesn't clean up properly and leaves some contradiction in the context. I have no idea how that tactic works though.
I would also take this as starting assumption given that extracting clauses from sat.euf=true state is fresh.
Therefore, I would not classify this as an fp bug.
This is a simplified version of a problem reported in https://github.com/Z3Prover/z3/issues/4889.
This input:
produces:
The model that the default tactic finds is correct (it means
x == 0.5
, which is right for any rounding mode). Adding(assert (= rm roundNearestTiesToEven))
does not change the result.I can't imagine that the root cause of this is a buggy translation of
to_fp
to bit-vectors, I would find it more likely that there's some conceptual problem intheory_fpa.cpp
.Also,
sat
takes a whole bunch of time and then reports(sat "abort giveup")
and I can imagine that it doesn't clean up properly and leaves some contradiction in the context. I have no idea how that tactic works though.@NikolajBjorner any ideas?