mirror of
https://github.com/Z3Prover/z3
synced 2026-02-09 18:40:51 +00:00
Modern C++: Add std::span overload for mk_or, adopt std::clamp, optimize stream output (#8507)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
parent
384a8e291b
commit
bb35267e46
10 changed files with 19 additions and 20 deletions
|
|
@ -130,7 +130,7 @@ extern "C" {
|
|||
for (unsigned i = 0; i < sz; ++i) {
|
||||
buffer << "\n " << mk_ismt2_pp(to_ast_vector_ref(v).get(i), mk_c(c)->m(), 2);
|
||||
}
|
||||
buffer << ")";
|
||||
buffer << ')';
|
||||
return mk_c(c)->mk_external_string(buffer.str());
|
||||
Z3_CATCH_RETURN(nullptr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -200,14 +200,14 @@ extern "C" {
|
|||
LOG_Z3_param_descrs_to_string(c, p);
|
||||
RESET_ERROR_CODE();
|
||||
std::ostringstream buffer;
|
||||
buffer << "(";
|
||||
buffer << '(';
|
||||
unsigned sz = to_param_descrs_ptr(p)->size();
|
||||
for (unsigned i = 0; i < sz; ++i) {
|
||||
if (i > 0)
|
||||
buffer << ", ";
|
||||
buffer << to_param_descrs_ptr(p)->get_param_name(i);
|
||||
}
|
||||
buffer << ")";
|
||||
buffer << ')';
|
||||
return mk_c(c)->mk_external_string(std::move(buffer).str());
|
||||
Z3_CATCH_RETURN("");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -427,13 +427,13 @@ struct z3_replayer::imp {
|
|||
case 'R':
|
||||
// reset
|
||||
next();
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] " << "R\n";);
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] R\n";);
|
||||
reset();
|
||||
break;
|
||||
case 'P': {
|
||||
// push pointer
|
||||
next(); skip_blank(); read_ptr();
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] " << "P " << m_ptr << "\n";);
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] P " << m_ptr << "\n";);
|
||||
if (m_ptr == 0) {
|
||||
m_args.push_back(nullptr);
|
||||
}
|
||||
|
|
@ -449,7 +449,7 @@ struct z3_replayer::imp {
|
|||
case 'S': {
|
||||
// push string
|
||||
next(); skip_blank(); read_string();
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] " << "S " << m_string.begin() << "\n";);
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] S " << m_string.begin() << "\n";);
|
||||
symbol sym(m_string.begin()); // save string
|
||||
m_args.push_back(value(STRING, sym.bare_str()));
|
||||
break;
|
||||
|
|
@ -457,7 +457,7 @@ struct z3_replayer::imp {
|
|||
case 'N':
|
||||
// push null symbol
|
||||
next();
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] " << "N\n";);
|
||||
TRACE(z3_replayer, tout << "[" << m_line << "] N\n";);
|
||||
m_args.push_back(value(SYMBOL, symbol::null));
|
||||
break;
|
||||
case '$': {
|
||||
|
|
|
|||
|
|
@ -2206,6 +2206,7 @@ public:
|
|||
app * mk_xor(ref_buffer<expr, ast_manager> const& args) { return mk_xor(args.size(), args.data()); }
|
||||
app * mk_or(unsigned num_args, expr * const * args) { return mk_app(basic_family_id, OP_OR, num_args, args); }
|
||||
app * mk_and(std::span<expr* const> args) { return mk_app(basic_family_id, OP_AND, args); }
|
||||
app * mk_or(std::span<expr* const> args) { return mk_app(basic_family_id, OP_OR, args); }
|
||||
app * mk_or(expr * arg1, expr * arg2) { return mk_app(basic_family_id, OP_OR, arg1, arg2); }
|
||||
app * mk_and(expr * arg1, expr * arg2) { return mk_app(basic_family_id, OP_AND, arg1, arg2); }
|
||||
app * mk_or(expr * arg1, expr * arg2, expr * arg3) { return mk_app(basic_family_id, OP_OR, arg1, arg2, arg3); }
|
||||
|
|
@ -2216,10 +2217,10 @@ public:
|
|||
app * mk_and(ptr_vector<expr> const& args) { return mk_and(std::span<expr* const>(args.data(), args.size())); }
|
||||
app * mk_and(ref_buffer<expr, ast_manager> const& args) { return mk_and(std::span<expr* const>(args.data(), args.size())); }
|
||||
app * mk_and(ptr_buffer<expr> const& args) { return mk_and(std::span<expr* const>(args.data(), args.size())); }
|
||||
app * mk_or(ref_vector<expr, ast_manager> const& args) { return mk_or(args.size(), args.data()); }
|
||||
app * mk_or(ptr_vector<expr> const& args) { return mk_or(args.size(), args.data()); }
|
||||
app * mk_or(ref_buffer<expr, ast_manager> const& args) { return mk_or(args.size(), args.data()); }
|
||||
app * mk_or(ptr_buffer<expr> const& args) { return mk_or(args.size(), args.data()); }
|
||||
app * mk_or(ref_vector<expr, ast_manager> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
|
||||
app * mk_or(ptr_vector<expr> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
|
||||
app * mk_or(ref_buffer<expr, ast_manager> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
|
||||
app * mk_or(ptr_buffer<expr> const& args) { return mk_or(std::span<expr* const>(args.data(), args.size())); }
|
||||
app * mk_implies(expr * arg1, expr * arg2) { return mk_app(basic_family_id, OP_IMPLIES, arg1, arg2); }
|
||||
app * mk_not(expr * n) { return mk_app(basic_family_id, OP_NOT, n); }
|
||||
app * mk_distinct(unsigned num_args, expr * const * args);
|
||||
|
|
|
|||
|
|
@ -284,14 +284,14 @@ namespace euf {
|
|||
out << " " << c.m_label->get_name() << " " << c.m_oreg;
|
||||
for (unsigned i = 0; i < c.m_num_args; ++i)
|
||||
out << " " << c.m_iregs[i];
|
||||
out << ")";
|
||||
out << ')';
|
||||
}
|
||||
|
||||
void display_is_cgr(std::ostream & out, const is_cgr & c) {
|
||||
out << "(IS_CGR " << c.m_label->get_name() << " " << c.m_ireg;
|
||||
for (unsigned i = 0; i < c.m_num_args; ++i)
|
||||
out << " " << c.m_iregs[i];
|
||||
out << ")";
|
||||
out << ')';
|
||||
}
|
||||
|
||||
void display_yield(std::ostream & out, const yield & y) {
|
||||
|
|
|
|||
|
|
@ -522,7 +522,7 @@ struct nnf::imp {
|
|||
|
||||
app * r;
|
||||
if (fr.m_pol)
|
||||
r = m.mk_or(2, m_result_stack.data() + fr.m_spos);
|
||||
r = m.mk_or(std::span<expr* const>(m_result_stack.data() + fr.m_spos, 2));
|
||||
else
|
||||
r = m.mk_and(std::span<expr* const>(m_result_stack.data() + fr.m_spos, 2));
|
||||
|
||||
|
|
|
|||
|
|
@ -391,7 +391,7 @@ bool bound_propagator::relevant_bound(var x, double new_k) const {
|
|||
if (abs_k < 0.0)
|
||||
abs_k -= abs_k;
|
||||
if (bounded)
|
||||
improvement = m_threshold * std::max(std::min(interval_size, abs_k), 1.0);
|
||||
improvement = m_threshold * std::clamp(interval_size, 1.0, abs_k);
|
||||
else
|
||||
improvement = m_threshold * std::max(abs_k, 1.0);
|
||||
|
||||
|
|
|
|||
|
|
@ -580,7 +580,7 @@ void substitution_tree::display(std::ostream & out, subst const & s) const {
|
|||
out << "(" << to_app(s.second)->get_decl()->get_name();
|
||||
for (unsigned i = 0; i < num; ++i)
|
||||
out << " r!" << to_var(to_app(s.second)->get_arg(i))->get_idx();
|
||||
out << ")";
|
||||
out << ')';
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -1969,8 +1969,7 @@ void pred_transformer::update_solver_with_rfs(prop_solver *solver,
|
|||
e = m.mk_or(m.mk_not(rule_tag), rf->get(), rf->tag());
|
||||
}
|
||||
else {
|
||||
expr *args[4] = { not_rule_tag, last_tag, rf->get(), rf->tag() };
|
||||
e = m.mk_or(4, args);
|
||||
e = m.mk_or(not_rule_tag, last_tag, rf->get(), rf->tag());
|
||||
}
|
||||
last_tag = m.mk_not(rf->tag());
|
||||
pm.formula_n2o(e.get(), e, pos);
|
||||
|
|
|
|||
|
|
@ -155,8 +155,7 @@ namespace smt {
|
|||
proof* ps[2] = { p3, p4 };
|
||||
p5 = m.mk_unit_resolution(2, ps);
|
||||
SASSERT(m.get_fact(p5) == m.mk_false());
|
||||
expr* eqs[3] = { m.mk_not(m_eq1), m.mk_not(m_eq2), m_eq3 };
|
||||
expr_ref conclusion(m.mk_or(3, eqs), m);
|
||||
expr_ref conclusion(m.mk_or(m.mk_not(m_eq1), m.mk_not(m_eq2), m_eq3), m);
|
||||
p6 = m.mk_lemma(p5, conclusion);
|
||||
return p6;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue