mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 21:38:44 +00:00
add QF_DT
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
a0d0812b0c
commit
8ff1e070be
|
@ -244,7 +244,7 @@ struct pull_quant::imp {
|
||||||
quantifier * q1 = m_manager.update_quantifier(to_quantifier(n), new_expr);
|
quantifier * q1 = m_manager.update_quantifier(to_quantifier(n), new_expr);
|
||||||
proof * p1 = 0;
|
proof * p1 = 0;
|
||||||
if (n != q1) {
|
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);
|
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));
|
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;
|
datatype_util m_dt_util;
|
||||||
pb_util m_pb_util;
|
pb_util m_pb_util;
|
||||||
bool m_uf; // true if the logic supports uninterpreted functions
|
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_arrays; // true if the logic supports arbitrary arrays
|
||||||
bool m_bv_arrays; // true if the logic supports only bv arrays
|
bool m_bv_arrays; // true if the logic supports only bv arrays
|
||||||
bool m_reals; // true if the logic supports reals
|
bool m_reals; // true if the logic supports reals
|
||||||
|
@ -53,6 +54,7 @@ struct check_logic::imp {
|
||||||
|
|
||||||
void reset() {
|
void reset() {
|
||||||
m_uf = false;
|
m_uf = false;
|
||||||
|
m_dt = false;
|
||||||
m_arrays = false;
|
m_arrays = false;
|
||||||
m_bv_arrays = false;
|
m_bv_arrays = false;
|
||||||
m_reals = false;
|
m_reals = false;
|
||||||
|
@ -105,6 +107,10 @@ struct check_logic::imp {
|
||||||
m_uf = true;
|
m_uf = true;
|
||||||
m_bvs = true;
|
m_bvs = true;
|
||||||
}
|
}
|
||||||
|
else if (logic == "QF_DT") {
|
||||||
|
m_uf = true;
|
||||||
|
m_dt = true;
|
||||||
|
}
|
||||||
else if (logic == "QF_AUFLIA") {
|
else if (logic == "QF_AUFLIA") {
|
||||||
m_uf = true;
|
m_uf = true;
|
||||||
m_arrays = true;
|
m_arrays = true;
|
||||||
|
@ -187,6 +193,7 @@ struct check_logic::imp {
|
||||||
m_bvs = true;
|
m_bvs = true;
|
||||||
m_uf = true;
|
m_uf = true;
|
||||||
m_ints = true;
|
m_ints = true;
|
||||||
|
m_dt = true;
|
||||||
m_nonlinear = true; // non-linear 0-1 variables may get eliminated
|
m_nonlinear = true; // non-linear 0-1 variables may get eliminated
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -443,7 +450,7 @@ struct check_logic::imp {
|
||||||
else if (fid == m_seq_util.get_family_id()) {
|
else if (fid == m_seq_util.get_family_id()) {
|
||||||
// nothing to check
|
// 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
|
// nothing to check
|
||||||
}
|
}
|
||||||
else if (fid == m_pb_util.get_family_id() && m_logic == "QF_FD") {
|
else if (fid == m_pb_util.get_family_id() && m_logic == "QF_FD") {
|
||||||
|
|
|
@ -125,6 +125,8 @@ namespace smt {
|
||||||
setup_QF_FPBV();
|
setup_QF_FPBV();
|
||||||
else if (m_logic == "QF_S")
|
else if (m_logic == "QF_S")
|
||||||
setup_QF_S();
|
setup_QF_S();
|
||||||
|
else if (m_logic == "QF_DT")
|
||||||
|
setup_QF_DT();
|
||||||
else
|
else
|
||||||
setup_unknown();
|
setup_unknown();
|
||||||
}
|
}
|
||||||
|
@ -190,6 +192,8 @@ namespace smt {
|
||||||
setup_AUFLIRA();
|
setup_AUFLIRA();
|
||||||
else if (m_logic == "UFNIA")
|
else if (m_logic == "UFNIA")
|
||||||
setup_UFNIA();
|
setup_UFNIA();
|
||||||
|
else if (m_logic == "QF_DT")
|
||||||
|
setup_QF_DT();
|
||||||
else if (m_logic == "LRA")
|
else if (m_logic == "LRA")
|
||||||
setup_LRA();
|
setup_LRA();
|
||||||
else
|
else
|
||||||
|
@ -210,6 +214,10 @@ namespace smt {
|
||||||
m_params.m_random_initial_activity = IA_RANDOM;
|
m_params.m_random_initial_activity = IA_RANDOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup::setup_QF_DT() {
|
||||||
|
setup_QF_UF();
|
||||||
|
}
|
||||||
|
|
||||||
void setup::setup_QF_BVRE() {
|
void setup::setup_QF_BVRE() {
|
||||||
setup_QF_BV();
|
setup_QF_BV();
|
||||||
setup_QF_LIA();
|
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
|
// setup_<logic>(static_features & st) can only be used if the logical context will perform a single
|
||||||
// check.
|
// check.
|
||||||
//
|
//
|
||||||
|
void setup_QF_DT();
|
||||||
void setup_QF_UF();
|
void setup_QF_UF();
|
||||||
void setup_QF_UF(static_features const & st);
|
void setup_QF_UF(static_features const & st);
|
||||||
void setup_QF_RDL();
|
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) {
|
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) {
|
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) {
|
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…
Reference in a new issue