3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-18 02:16:40 +00:00

remove the generate_simple_tangent_lemma()

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2019-05-19 21:55:46 -07:00
parent f20a028f7b
commit 58c8f3f118
3 changed files with 0 additions and 146 deletions

View file

@ -82,7 +82,6 @@ void tangents::tangent_lemma_bf(const monomial& m, const factorization& bf){
TRACE("nla_solver", tout << "tang domain = "; print_tangent_domain(a, b, tout); tout << std::endl;);
unsigned lemmas_size_was = c().m_lemma_vec->size();
rational sign(1);
generate_simple_tangent_lemma(m, bf);
generate_two_tang_lines(bf, xy, j);
generate_tang_plane(a.x, a.y, bf[0], bf[1], below, j);
generate_tang_plane(b.x, b.y, bf[0], bf[1], below, j);
@ -100,47 +99,6 @@ void tangents::tangent_lemma_bf(const monomial& m, const factorization& bf){
c().print_specific_lemma((*c().m_lemma_vec)[i], tout); );
}
// using a fact that
// a != 0 & b != 0 & |a|*|b| = c & |a'| ~ |a| & |b'| ~ |b| => |a'|*|b'| ~ c,
// where ~ is < or >.
void tangents::generate_simple_tangent_lemma(const monomial& m, const factorization& bf) {
TRACE("nla_solver", tout << "m:" << pp_mon(c(), m) << std::endl;);
rational v = c().product_value(m.vars());
const rational mv = val(m);
SASSERT(mv != v);
SASSERT(!mv.is_zero() && !v.is_zero());
rational sign = rational(nla::rat_sign(mv));
if (sign != nla::rat_sign(v)) {
c().generate_simple_sign_lemma(-sign, m);
return;
}
c().add_empty_lemma();
v = val(bf);
SASSERT(rat_sign(v) == rat_sign(mv));
bool gt = abs(mv) > abs(v);
unsigned j;
if (gt) {
for (const factor& f : bf) {
j = var(f);
const rational jv = val(j);
rational js = rational(nla::rat_sign(jv));
c().mk_ineq(js, j, llc::LE);
c().mk_ineq(js, j, llc::GT, abs(jv));
}
c().mk_ineq(sign, m.var(), llc::LT);
c().mk_ineq(sign, m.var(), llc::LE, abs(v));
} else {
for (const factor& f : bf) {
j = var(f);
const rational jv = val(j);
rational js = rational(nla::rat_sign(jv));
c().mk_ineq(js, j, llc::LT, abs(jv));
}
c().mk_ineq(sign, m.var(), llc::LT);
c().mk_ineq(sign, m.var(), llc::GE, abs(v));
}
TRACE("nla_solver", c().print_lemma(tout););
}
void tangents::generate_two_tang_lines(const factorization & bf, const point& xy, lpvar j) {
add_empty_lemma();