3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 18:31:49 +00:00

add comments to hnf_cutter

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2020-07-02 16:16:46 -07:00
parent fff6a94de4
commit 80a4da9b1d
2 changed files with 26 additions and 2 deletions

View file

@ -154,7 +154,30 @@ namespace lp {
}
bool hnf_cutter::overflow() const { return m_overflow; }
/*
Here is the citation from "Cutting the Mix" by Jürgen Christ and Jochen Hoenicke.
The algorithm is based on the Simplex algorithm. The solution space
forms a polyhedron in Q^n . If the solution space is non-empty, the
Simplex algorithm returns a solution of Axb . We further assume
that the returned solution x0 is a vertex of the polyhedron, i. e.,
there is a nonsingular square submatrix A and a corresponding
vector b , such that Ax0=b . We call Axb the defining
constraints of the vertex. If the returned solution is not on a
vertex we introduce artificial branches on input variables into A
and use these branches as defining constraints. These branches are
rarely needed in practise.
The main idea is to bring the constraint system Axbb into a Hermite
normal form H and to compute the unimodular matrix U with AU=H . The
Hermite normal form is uniquely defined. The constraint system Axb
is equivalent to Hyb with y:=(U1)x . Since the solution x0 of
Ax0=b is not integral, the corresponding vector y0=(U1)x0 is not
integral, either. The cuts from proofs algorithm creates an extended
branch on one of the components y_i of y , i. e., y_iy0_i or
y_iy0_i. Further on it the papetr there is a lemma showing that
branch y_iy0_i is impossible.
*/
lia_move hnf_cutter::create_cut(lar_term& t, mpq& k, explanation* ex, bool & upper
#ifdef Z3DEBUG
, const vector<mpq> & x0

View file

@ -8,7 +8,8 @@ Module Name:
Abstract:
Cuts (branches) from Hermite matrices
The implementation is based on ideas from
"Cutting the Mix" by Jürgen Christ and Jochen Hoenicke.
Author:
Lev Nachmanson (levnach)