3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-16 07:45:27 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-04-30 09:30:43 -07:00
commit f525f43e43
155 changed files with 3188 additions and 1043 deletions

View file

@ -3,6 +3,7 @@ z3_add_component(fpa_tactics
fpa2bv_model_converter.cpp
fpa2bv_tactic.cpp
qffp_tactic.cpp
qffplra_tactic.cpp
COMPONENT_DEPENDENCIES
arith_tactics
bv_tactics
@ -14,4 +15,5 @@ z3_add_component(fpa_tactics
TACTIC_HEADERS
fpa2bv_tactic.h
qffp_tactic.h
qffplra_tactic.h
)

View file

@ -90,7 +90,7 @@ class fpa2bv_tactic : public tactic {
expr * sgn, *sig, *exp;
m_conv.split_fp(new_curr, sgn, exp, sig);
result.back()->assert_expr(m.mk_eq(sgn, m_conv.bu().mk_numeral(0, 1)));
result.back()->assert_expr(m.mk_eq(exp, m_conv.bu().mk_numeral(-1, m_conv.bu().get_bv_size(exp))));
result.back()->assert_expr(m.mk_eq(exp, m_conv.bu().mk_bv_neg(m_conv.bu().mk_numeral(1, m_conv.bu().get_bv_size(exp)))));
result.back()->assert_expr(m.mk_eq(sig, m_conv.bu().mk_numeral(1, m_conv.bu().get_bv_size(sig))));
}
}

View file

@ -0,0 +1,72 @@
/*++
Copyright (c) 2012 Microsoft Corporation
Module Name:
qffpalra_tactic.cpp
Abstract:
Tactic for QF_FPLRA benchmarks.
Author:
Christoph (cwinter) 2018-04-24
Notes:
--*/
#include "tactic/tactical.h"
#include "tactic/fpa/qffp_tactic.h"
#include "tactic/fpa/qffplra_tactic.h"
tactic * mk_qffplra_tactic(ast_manager & m, params_ref const & p) {
tactic * st = mk_qffp_tactic(m, p);
st->updt_params(p);
return st;
}
struct is_non_qffplra_predicate {
struct found {};
ast_manager & m;
bv_util bu;
fpa_util fu;
arith_util au;
is_non_qffplra_predicate(ast_manager & _m) : m(_m), bu(m), fu(m), au(m) {}
void operator()(var *) { throw found(); }
void operator()(quantifier *) { throw found(); }
void operator()(app * n) {
sort * s = get_sort(n);
if (!m.is_bool(s) && !fu.is_float(s) && !fu.is_rm(s) && !bu.is_bv_sort(s) && !au.is_real(s))
throw found();
family_id fid = n->get_family_id();
if (fid == m.get_basic_family_id() ||
fid == fu.get_family_id() ||
fid == bu.get_family_id() ||
fid == au.get_family_id())
return;
if (is_uninterp_const(n))
return;
if (au.is_real(s))
return;
throw found();
}
};
class is_qffplra_probe : public probe {
public:
result operator()(goal const & g) override {
return !test<is_non_qffplra_predicate>(g);
}
~is_qffplra_probe() override {}
};
probe * mk_is_qffplra_probe() {
return alloc(is_qffplra_probe);
}

View file

@ -0,0 +1,38 @@
#pragma once
/*++
Copyright (c) 2012 Microsoft Corporation
Module Name:
qffplra_tactic.h
Abstract:
Tactic for QF_FPLRA benchmarks.
Author:
Christoph (cwinter) 2018-04-24
Notes:
--*/
#ifndef QFFPLRA_TACTIC_H_
#define QFFPLRA_TACTIC_H_
#include "util/params.h"
class ast_manager;
class tactic;
tactic * mk_qffplra_tactic(ast_manager & m, params_ref const & p = params_ref());
/*
ADD_TACTIC("qffplra", "(try to) solve goal using the tactic for QF_FPLRA.", "mk_qffplra_tactic(m, p)")
*/
probe * mk_is_qffplra_probe();
/*
ADD_PROBE("is-qffplra", "true if the goal is in QF_FPLRA.", "mk_is_qffplra_probe()")
*/
#endif