3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-10 19:27:06 +00:00

add comments to hnf_cutter

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2020-07-03 10:53:18 -07:00
parent 49e49d6bb6
commit 7a4eed0216

View file

@ -159,24 +159,24 @@ namespace lp {
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
Simplex algorithm returns a solution of Ax <= b . 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
vector b , such that Ax0=b . We call Ax <=b 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
The main idea is to bring the constraint system Ax<=b 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
Hermite normal form is uniquely defined. The constraint system Ax<=b
is equivalent to Hy <=b 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 in the paper there is a lemma showing that
branch y_iy0_i is impossible.
branch on one of the components y_i of y , i. e., y_i <= floor(y0_i) or
y_i>=ceil(y0_i). Further on in the paper there is a lemma showing that
branch y_i >= ceil(y0_i) is impossible.
*/
lia_move hnf_cutter::create_cut(lar_term& t, mpq& k, explanation* ex, bool & upper
#ifdef Z3DEBUG