3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-12-04 11:06:45 +00:00

wip stellensatz

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2025-09-28 23:06:35 +03:00
parent 72f5fe1f7f
commit 184fae6fcc
3 changed files with 125 additions and 12 deletions

View file

@ -6,6 +6,7 @@
#include "math/lp/nla_coi.h"
#include "math/lp/int_solver.h"
#include "math/polynomial/polynomial.h"
#include <variant>
namespace nla {
@ -55,6 +56,10 @@ namespace nla {
map<unsigned_vector, unsigned, svector_hash<unsigned_hash>, eq> m_vars2mon;
u_map<unsigned_vector> m_mon2vars;
small_object_allocator m_allocator;
unsynch_mpq_manager m_qm;
polynomial::manager m_pm;
struct resolvent {
lp::constraint_index old_ci;
lpvar mi;
@ -101,9 +106,15 @@ namespace nla {
void saturate_monotonicity(lpvar j, rational const &val_j, svector<lpvar> const &vars, rational const &val_vars);
void saturate_monotonicity(lpvar j, rational const & val_j, lpvar x, int sign_x, lpvar y, int sign_y);
void saturate_monotonicity(lpvar j, rational const &val_j, lpvar x, lpvar y);
void saturate_squares(lpvar j, rational const &val_j, svector<lpvar> const &vars);
// polynomial tricks
using term_offset = std::pair<lp::lar_term, rational>; // term and its offset
uint_set m_factored_constraints;
bool get_factors(term_offset &t, vector<term_offset> &factors);
polynomial::polynomial_ref to_poly(term_offset const &t);
term_offset to_term(polynomial::polynomial const &p);
void saturate_factors(lp::constraint_index ci);
// lemmas
void add_lemma(lp::explanation const& ex);