mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 12:28:44 +00:00
add filter to detect circumventing the default semantics of bit-vector division with the use of the sat-based bit-vector solver. Provides a way to fix issue #190
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
ee5f1ad6b6
commit
ef7915858b
|
@ -168,6 +168,8 @@ public:
|
|||
}
|
||||
|
||||
br_status mk_eq_core(expr * lhs, expr * rhs, expr_ref & result);
|
||||
|
||||
bool hi_div0() const { return m_hi_div0; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -28,6 +28,7 @@ Notes:
|
|||
#include"rewriter_def.h"
|
||||
#include"for_each_expr.h"
|
||||
#include"cooperate.h"
|
||||
#include"bv_rewriter.h"
|
||||
|
||||
class bv1_blaster_tactic : public tactic {
|
||||
|
||||
|
@ -491,6 +492,8 @@ tactic * mk_bv1_blaster_tactic(ast_manager & m, params_ref const & p) {
|
|||
class is_qfbv_eq_probe : public probe {
|
||||
public:
|
||||
virtual result operator()(goal const & g) {
|
||||
bv_rewriter rw(g.m());
|
||||
if (!rw.hi_div0()) return false;
|
||||
bv1_blaster_tactic t(g.m());
|
||||
return t.is_target(g);
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ Revision History:
|
|||
#include"arith_decl_plugin.h"
|
||||
#include"bv_decl_plugin.h"
|
||||
#include"goal_util.h"
|
||||
#include"bv_rewriter.h"
|
||||
|
||||
class memory_probe : public probe {
|
||||
public:
|
||||
|
@ -303,6 +304,8 @@ public:
|
|||
class is_qfbv_probe : public probe {
|
||||
public:
|
||||
virtual result operator()(goal const & g) {
|
||||
bv_rewriter rw(g.m());
|
||||
if (!rw.hi_div0()) return false;
|
||||
return !test<is_non_qfbv_predicate>(g);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue