3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-02-13 12:23:01 +00:00

Refactor mk_and and mk_app to use std::span API (#8285)

* Initial plan

* Refactor mk_and and mk_app to use std::span

- Made mk_and(unsigned num_args, expr * const * args) private
- Added new public mk_and(std::span<expr* const> args) method
- Added new public mk_app(family_id fid, decl_kind k, std::span<expr* const> args) method
- Updated all convenience overloads to use std::span version
- Updated all external call sites to use the new std::span API

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Fix remaining test files to use std::span API

- Updated src/test/sorting_network.cpp
- Updated src/test/ho_matcher.cpp with explicit cast to resolve ambiguity

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Revert overlapping changes superseded by PR #8286

Reverted 30 files to match the state from PR #8286 (commit ebc0688) which refactored mk_and/mk_or call sites to use vector overloads. This supersedes the std::span changes in those files.

Retained std::span changes in files unique to this PR:
- Core API changes (ast.h, ast.cpp)
- Files not affected by PR #8286 (api_context.cpp, ast_util.cpp, bool_rewriter.h, datatype_rewriter.cpp, dom_simplifier.cpp, factor_rewriter.cpp, pb2bv_rewriter.cpp, quant_hoist.cpp, spacer_cluster_util.cpp, sortmax.cpp, array_axioms.cpp, smtfd_solver.cpp, goal.cpp, ho_matcher.cpp, qe_arith.cpp, sorting_network.cpp)
- Special case in hnf.cpp where both PRs modified different lines

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

---------

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:
Copilot 2026-01-22 16:58:38 -08:00 committed by GitHub
parent 97b24a345f
commit 058a8c082d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 33 additions and 25 deletions

View file

@ -159,7 +159,7 @@ public:
void mk_and(unsigned num_args, expr * const * args, expr_ref & result) {
if (mk_and_core(num_args, args, result) == BR_FAILED) {
SASSERT(!m_elim_and);
result = m().mk_and(num_args, args);
result = m().mk_and(std::span<expr* const>(args, num_args));
}
}
void mk_or(unsigned num_args, expr * const * args, expr_ref & result) {

View file

@ -170,6 +170,6 @@ br_status datatype_rewriter::mk_eq_core(expr * lhs, expr * rhs, expr_ref & resul
for (unsigned i = 0; i < num; ++i) {
eqs.push_back(m().mk_eq(to_app(lhs)->get_arg(i), to_app(rhs)->get_arg(i)));
}
result = m().mk_and(eqs.size(), eqs.data());
result = m().mk_and(std::span<expr* const>(eqs.data(), eqs.size()));
return BR_REWRITE2;
}

View file

@ -140,7 +140,7 @@ bool expr_dominators::compile(expr * e) {
}
bool expr_dominators::compile(unsigned sz, expr * const* es) {
expr_ref e(m.mk_and(sz, es), m);
expr_ref e(m.mk_and(std::span<expr* const>(es, sz)), m);
return compile(e);
}

View file

@ -115,7 +115,7 @@ br_status factor_rewriter::mk_lt(expr * arg1, expr * arg2, expr_ref & result) {
eqs[i] = m().mk_not(eqs[i].get());
}
eqs.push_back(neg);
result = m().mk_and(eqs.size(), eqs.data());
result = m().mk_and(std::span<expr* const>(eqs.data(), eqs.size()));
TRACE(factor_rewriter, tout << mk_pp(result.get(), m()) << "\n";);
return BR_DONE;
}

View file

@ -945,7 +945,7 @@ struct pb2bv_rewriter::imp {
pliteral mk_false() { return m.mk_false(); }
pliteral mk_true() { return m.mk_true(); }
pliteral mk_max(unsigned n, pliteral const* lits) { return trail(m.mk_or(n, lits)); }
pliteral mk_min(unsigned n, pliteral const* lits) { return trail(m.mk_and(n, lits)); }
pliteral mk_min(unsigned n, pliteral const* lits) { return trail(m.mk_and(std::span<expr* const>(lits, n))); }
pliteral mk_not(pliteral a) { if (m.is_not(a,a)) return a; return trail(m.mk_not(a)); }
std::ostream& pp(std::ostream& out, pliteral lit) { return out << mk_ismt2_pp(lit, m); }

View file

@ -217,7 +217,7 @@ private:
if (rewrite_ok)
m_rewriter.mk_and(args.size(), args.data(), result);
else
result = m.mk_and (args.size (), args.data ());
result = m.mk_and(std::span<expr* const>(args.data(), args.size()));
}
else if (m.is_or(fml)) {
num_args = to_app(fml)->get_num_args();