mirror of
https://github.com/Z3Prover/z3
synced 2025-04-28 19:35:50 +00:00
na (#4254)
* remove level of indirection for context and ast_manager in smt_theory Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add request by #4252 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * move to def Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * int Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix #4251 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix #4255 * fix #4257 * add code to debug #4246 * restore new solver as default * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix #4246 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
becf423c77
commit
fdc87f286f
18 changed files with 269 additions and 231 deletions
|
@ -74,7 +74,7 @@ struct imp {
|
|||
|
||||
|
||||
void generate_tang_plane(const point & pl) {
|
||||
c().add_lemma();
|
||||
new_lemma lemma(c());
|
||||
c().negate_relation(m_jx, m_x.rat_sign()*pl.x);
|
||||
c().negate_relation(m_jy, m_y.rat_sign()*pl.y);
|
||||
#if Z3DEBUG
|
||||
|
@ -90,18 +90,21 @@ struct imp {
|
|||
t.add_monomial(- m_y.rat_sign()*pl.x, m_jy);
|
||||
t.add_monomial(- m_x.rat_sign()*pl.y, m_jx);
|
||||
t.add_var(m_j);
|
||||
c().mk_ineq(t, m_below? llc::GT : llc::LT, - pl.x*pl.y);
|
||||
c().mk_ineq(t, m_below? llc::GT : llc::LT, - pl.x*pl.y);
|
||||
}
|
||||
|
||||
void generate_two_tang_lines() {
|
||||
m_tang.add_lemma();
|
||||
// Should be v = val(m_x)*val(m_y), and val(factor) = factor.rat_sign()*var(factor.var())
|
||||
c().mk_ineq(m_jx, llc::NE, c().val(m_jx));
|
||||
c().mk_ineq(m_j, - m_y.rat_sign() * m_xy.x, m_jy, llc::EQ);
|
||||
|
||||
m_tang.add_lemma();
|
||||
c().mk_ineq(m_jy, llc::NE, c().val(m_jy));
|
||||
c().mk_ineq(m_j, - m_x.rat_sign() * m_xy.y, m_jx, llc::EQ);
|
||||
{
|
||||
new_lemma lemma(c());
|
||||
// Should be v = val(m_x)*val(m_y), and val(factor) = factor.rat_sign()*var(factor.var())
|
||||
c().mk_ineq(m_jx, llc::NE, c().val(m_jx));
|
||||
c().mk_ineq(m_j, - m_y.rat_sign() * m_xy.x, m_jy, llc::EQ);
|
||||
}
|
||||
{
|
||||
new_lemma lemma(c());
|
||||
c().mk_ineq(m_jy, llc::NE, c().val(m_jy));
|
||||
c().mk_ineq(m_j, - m_x.rat_sign() * m_xy.y, m_jx, llc::EQ);
|
||||
}
|
||||
}
|
||||
// Get two planes tangent to surface z = xy, one at point a, and another at point b, creating a cut
|
||||
void get_initial_tang_points() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue