mirror of
https://github.com/Z3Prover/z3
synced 2025-04-22 16:45:31 +00:00
add QF_DT
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
a0d0812b0c
commit
8ff1e070be
5 changed files with 20 additions and 4 deletions
|
@ -244,7 +244,7 @@ struct pull_quant::imp {
|
|||
quantifier * q1 = m_manager.update_quantifier(to_quantifier(n), new_expr);
|
||||
proof * p1 = 0;
|
||||
if (n != q1) {
|
||||
proof * p0 = m_manager.mk_pull_quant(to_quantifier(n)->get_expr(), to_quantifier(new_expr));
|
||||
proof * p0 = m_manager.mk_pull_quant(n, to_quantifier(new_expr));
|
||||
p1 = m_manager.mk_quant_intro(to_quantifier(n), q1, p0);
|
||||
}
|
||||
proof * p2 = q1 == r ? 0 : m_manager.mk_pull_quant(q1, to_quantifier(r));
|
||||
|
|
|
@ -37,6 +37,7 @@ struct check_logic::imp {
|
|||
datatype_util m_dt_util;
|
||||
pb_util m_pb_util;
|
||||
bool m_uf; // true if the logic supports uninterpreted functions
|
||||
bool m_dt; // true if the lgoic supports dattypes
|
||||
bool m_arrays; // true if the logic supports arbitrary arrays
|
||||
bool m_bv_arrays; // true if the logic supports only bv arrays
|
||||
bool m_reals; // true if the logic supports reals
|
||||
|
@ -53,6 +54,7 @@ struct check_logic::imp {
|
|||
|
||||
void reset() {
|
||||
m_uf = false;
|
||||
m_dt = false;
|
||||
m_arrays = false;
|
||||
m_bv_arrays = false;
|
||||
m_reals = false;
|
||||
|
@ -105,6 +107,10 @@ struct check_logic::imp {
|
|||
m_uf = true;
|
||||
m_bvs = true;
|
||||
}
|
||||
else if (logic == "QF_DT") {
|
||||
m_uf = true;
|
||||
m_dt = true;
|
||||
}
|
||||
else if (logic == "QF_AUFLIA") {
|
||||
m_uf = true;
|
||||
m_arrays = true;
|
||||
|
@ -187,6 +193,7 @@ struct check_logic::imp {
|
|||
m_bvs = true;
|
||||
m_uf = true;
|
||||
m_ints = true;
|
||||
m_dt = true;
|
||||
m_nonlinear = true; // non-linear 0-1 variables may get eliminated
|
||||
}
|
||||
else {
|
||||
|
@ -443,7 +450,7 @@ struct check_logic::imp {
|
|||
else if (fid == m_seq_util.get_family_id()) {
|
||||
// nothing to check
|
||||
}
|
||||
else if (fid == m_dt_util.get_family_id() && m_logic == "QF_FD") {
|
||||
else if (fid == m_dt_util.get_family_id() && m_dt) {
|
||||
// nothing to check
|
||||
}
|
||||
else if (fid == m_pb_util.get_family_id() && m_logic == "QF_FD") {
|
||||
|
|
|
@ -125,6 +125,8 @@ namespace smt {
|
|||
setup_QF_FPBV();
|
||||
else if (m_logic == "QF_S")
|
||||
setup_QF_S();
|
||||
else if (m_logic == "QF_DT")
|
||||
setup_QF_DT();
|
||||
else
|
||||
setup_unknown();
|
||||
}
|
||||
|
@ -190,6 +192,8 @@ namespace smt {
|
|||
setup_AUFLIRA();
|
||||
else if (m_logic == "UFNIA")
|
||||
setup_UFNIA();
|
||||
else if (m_logic == "QF_DT")
|
||||
setup_QF_DT();
|
||||
else if (m_logic == "LRA")
|
||||
setup_LRA();
|
||||
else
|
||||
|
@ -210,6 +214,10 @@ namespace smt {
|
|||
m_params.m_random_initial_activity = IA_RANDOM;
|
||||
}
|
||||
|
||||
void setup::setup_QF_DT() {
|
||||
setup_QF_UF();
|
||||
}
|
||||
|
||||
void setup::setup_QF_BVRE() {
|
||||
setup_QF_BV();
|
||||
setup_QF_LIA();
|
||||
|
|
|
@ -54,6 +54,7 @@ namespace smt {
|
|||
// setup_<logic>(static_features & st) can only be used if the logical context will perform a single
|
||||
// check.
|
||||
//
|
||||
void setup_QF_DT();
|
||||
void setup_QF_UF();
|
||||
void setup_QF_UF(static_features const & st);
|
||||
void setup_QF_RDL();
|
||||
|
|
|
@ -141,7 +141,7 @@ bool smt_logics::logic_has_fpa(symbol const & s) {
|
|||
}
|
||||
|
||||
bool smt_logics::logic_has_uf(symbol const & s) {
|
||||
return s == "QF_UF" || s == "UF";
|
||||
return s == "QF_UF" || s == "UF" || s == "QF_DT";
|
||||
}
|
||||
|
||||
bool smt_logics::logic_has_horn(symbol const& s) {
|
||||
|
@ -153,5 +153,5 @@ bool smt_logics::logic_has_pb(symbol const& s) {
|
|||
}
|
||||
|
||||
bool smt_logics::logic_has_datatype(symbol const& s) {
|
||||
return s == "QF_FD" || s == "ALL";
|
||||
return s == "QF_FD" || s == "ALL" || s == "QF_DT";
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue