Documentation

HexBerlekampZassenhausMathlib.Termination

theorem HexBerlekampZassenhausMathlib.BHKS.adjustedCoordBound_lt_bhksBound (f : Hex.ZPoly) (hfdeg : 0 < Hex.DensePoly.natDegree f) :
have n := Hex.DensePoly.natDegree f; have R := 4 * n + n * n * n; have V := 2 * n * 2 ^ (2 * n) * R; V + V * R + 2 ^ n * R < Hex.bhksBound f

The complete-vector coordinate envelope used by the BHKS adjustment is strictly below the executable resultant cap.

theorem HexBerlekampZassenhausMathlib.BHKS.cldFullAux_resultant_natAbs_lt_bhksBound (f : Hex.ZPoly) (p a : ) (liftedFactors : Array Hex.ZPoly) (v : Vector ((Hex.bhksLatticeBasis f p a liftedFactors).factorCount + (Hex.bhksLatticeBasis f p a liftedFactors).coeffWidth)) (hf : f 0) (hfdeg : 0 < Hex.DensePoly.natDegree f) (hp2 : 2 p) (hp500 : p 500) (hr : liftedFactors.size Hex.DensePoly.natDegree f) (hv : ∀ (x : Fin (liftedFactors.size + Hex.DensePoly.natDegree f)), v[x].natAbs have n := Hex.DensePoly.natDegree f; have R := 4 * n + n * n * n; have V := 2 * n * 2 ^ (2 * n) * R; V + V * R + 2 ^ n * R) :

The explicit bhksBound strictly dominates the resultant of the input and any corrected full auxiliary whose complete lattice vector satisfies the E coordinate bound built into that cap.

theorem HexBerlekampZassenhausMathlib.BHKS.no_badVector (f : Hex.ZPoly) (p a : ) (liftedFactors : Array Hex.ZPoly) (trueSupports : Set (Set (Fin liftedFactors.size))) (hf : f 0) (hfdeg : 0 < Hex.DensePoly.natDegree f) (hf_lc_coprime : IsCoprime (↑(p ^ a)) (HexPolyZMathlib.toPolynomial f).leadingCoeff) (hp2 : 2 p) (hp500 : p 500) (hr : liftedFactors.size Hex.DensePoly.natDegree f) (hk : 1 < p ^ a) (hprecision : 2 * Hex.bhksBound f < p ^ a) (hcut : ∀ (j : Fin (Hex.DensePoly.natDegree f)), Hex.bhksCoeffCutThreshold p f j a) (hfac : ∀ (i : Fin liftedFactors.size), ∃ (h : Hex.ZPoly), Hex.DensePoly.Monic (liftedFactors.getD (↑i) 1) 0 < Hex.DensePoly.natDegree (liftedFactors.getD (↑i) 1) f.congr (liftedFactors.getD (↑i) 1 * h) (p ^ a)) (hdeg_le : ∀ (i : Fin liftedFactors.size), (HexPolyZMathlib.toPolynomial (liftedFactors.getD (↑i) 1)).natDegree (HexPolyZMathlib.toPolynomial f).natDegree) (hcop : ∀ (i j : Fin liftedFactors.size), j iIsCoprime (Polynomial.map (Int.castRingHom (ZMod (p ^ a))) (HexPolyZMathlib.toPolynomial (liftedFactors.getD (↑i) 1))) (Polynomial.map (Int.castRingHom (ZMod (p ^ a))) (HexPolyZMathlib.toPolynomial (liftedFactors.getD (↑j) 1)))) (hown : ∀ (i : Fin liftedFactors.size), IsCoprime (Polynomial.map (Int.castRingHom (ZMod (p ^ a))) (HexPolyZMathlib.toPolynomial (liftedFactors.getD (↑i) 1))) (Polynomial.map (Int.castRingHom (ZMod (p ^ a))) (HexPolyZMathlib.toPolynomial (Hex.cldQuotientMod f (liftedFactors.getD (↑i) 1) p a)))) (hsupport : ∀ (q : Polynomial ), Irreducible qq HexPolyZMathlib.toPolynomial fStrueSupports, iS, Polynomial.map (Int.castRingHom (ZMod (p ^ a))) (HexPolyZMathlib.toPolynomial (liftedFactors.getD (↑i) 1)) Polynomial.map (Int.castRingHom (ZMod (p ^ a))) q) (v : Vector ((Hex.bhksLatticeBasis f p a liftedFactors).factorCount + (Hex.bhksLatticeBasis f p a liftedFactors).coeffWidth)) (hv : (Hex.bhksLatticeBasis f p a liftedFactors).basis.memLattice v) (hzero : ∃ (i : Fin liftedFactors.size), v[Fin.castAdd (Hex.DensePoly.natDegree f) i] = 0) (hnonzero : StrueSupports, iS, v[Fin.castAdd (Hex.DensePoly.natDegree f) i] 0) (hvBound : ∀ (x : Fin (liftedFactors.size + Hex.DensePoly.natDegree f)), v[x].natAbs have n := Hex.DensePoly.natDegree f; have R := 4 * n + n * n * n; have V := 2 * n * 2 ^ (2 * n) * R; V + V * R + 2 ^ n * R) :

Abstract algebraic BHKS bad-vector contradiction.

The hypotheses expose exactly the production facts later supplied by the Hensel lift: local monicity and positive degree, pairwise coprimality, own-CLD coprimality, and the fact that every monic irreducible factor of f is represented by one true support. The conclusion rules out a bounded lattice vector having one zero exponent while remaining nonzero on every true support.