mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 01:25:31 +00:00
Bugfix for FP theory; handling of UFs and interpreted functions from other theories.
This commit is contained in:
parent
8c11299be6
commit
081ba9093a
5 changed files with 89 additions and 51 deletions
|
@ -215,16 +215,16 @@ void fpa2bv_converter::mk_uninterpreted_function(func_decl * f, unsigned num, ex
|
|||
expr_ref_buffer new_args(m);
|
||||
|
||||
for (unsigned i = 0; i < num ; i ++)
|
||||
if (is_float(args[i]))
|
||||
{
|
||||
expr * sgn, * sig, * exp;
|
||||
split_fp(args[i], sgn, exp, sig);
|
||||
new_args.push_back(sgn);
|
||||
new_args.push_back(sig);
|
||||
new_args.push_back(exp);
|
||||
}
|
||||
else
|
||||
new_args.push_back(args[i]);
|
||||
if (is_float(args[i]))
|
||||
{
|
||||
expr * sgn, * sig, * exp;
|
||||
split_fp(args[i], sgn, exp, sig);
|
||||
new_args.push_back(sgn);
|
||||
new_args.push_back(sig);
|
||||
new_args.push_back(exp);
|
||||
}
|
||||
else
|
||||
new_args.push_back(args[i]);
|
||||
|
||||
func_decl * fd;
|
||||
func_decl_triple fd3;
|
||||
|
@ -270,6 +270,7 @@ void fpa2bv_converter::mk_uninterpreted_function(func_decl * f, unsigned num, ex
|
|||
func_decl * f_sig = m.mk_func_decl(symbol(name_buffer.c_str()), new_domain.size(), new_domain.c_ptr(), m_bv_util.mk_sort(m_util.get_sbits(f->get_range())-1));
|
||||
name_buffer.reset(); name_buffer << f->get_name() << ".exp";
|
||||
func_decl * f_exp = m.mk_func_decl(symbol(name_buffer.c_str()), new_domain.size(), new_domain.c_ptr(), m_bv_util.mk_sort(m_util.get_ebits(f->get_range())));
|
||||
|
||||
expr_ref a_sgn(m), a_sig(m), a_exp(m);
|
||||
a_sgn = m.mk_app(f_sgn, new_args.size(), new_args.c_ptr());
|
||||
a_sig = m.mk_app(f_sig, new_args.size(), new_args.c_ptr());
|
||||
|
|
|
@ -86,7 +86,7 @@ public:
|
|||
void mk_numeral(func_decl * f, unsigned num, expr * const * args, expr_ref & result);
|
||||
virtual void mk_const(func_decl * f, expr_ref & result);
|
||||
virtual void mk_rm_const(func_decl * f, expr_ref & result);
|
||||
void mk_uninterpreted_function(func_decl * f, unsigned num, expr * const * args, expr_ref & result);
|
||||
virtual void mk_uninterpreted_function(func_decl * f, unsigned num, expr * const * args, expr_ref & result);
|
||||
void mk_var(unsigned base_inx, sort * srt, expr_ref & result);
|
||||
|
||||
void mk_pinf(func_decl * f, expr_ref & result);
|
||||
|
|
|
@ -176,7 +176,7 @@ struct fpa2bv_rewriter_cfg : public default_rewriter_cfg {
|
|||
}
|
||||
}
|
||||
|
||||
if (f->get_family_id() == null_family_id)
|
||||
if (f->get_family_id() != m_conv.fu().get_family_id())
|
||||
{
|
||||
bool is_float_uf = m_conv.is_float(f->get_range());
|
||||
unsigned i = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue