Documentation

HexBerlekampZassenhausMathlib.Lattice.SupportEquivalence

theorem HexBerlekampZassenhausMathlib.BHKS.coord_eq_of_mem_trueSupportSpanInt {r : } (trueSupports : Set (Set (Fin r))) {j k : Fin r} (hjk : supportEquivalent trueSupports j k) {v : Fin r} (hv : v trueSupportSpanInt trueSupports) :
v j = v k

Membership in the true-support span forces equal coordinates at columns with the same true-support membership signature.

theorem HexBerlekampZassenhausMathlib.BHKS.mem_trueSupportSpanInt_of_constant_on_partition {r : } (trueSupports : Set (Set (Fin r))) (hcover : ∀ (i : Fin r), StrueSupports, i S) (hdisjoint : StrueSupports, TtrueSupports, iS, i TS = T) (hne : StrueSupports, S.Nonempty) (v : Fin r) (hconstant : StrueSupports, iS, jS, v i = v j) :
v trueSupportSpanInt trueSupports

For a genuine finite partition, a vector belongs to the true-support span whenever it is constant on every part.

Together with coord_eq_of_mem_trueSupportSpanInt, this characterizes W as the integer vectors that are constant on each true support.

theorem HexBerlekampZassenhausMathlib.BHKS.exists_ne_on_support_of_not_mem_trueSupportSpanInt {r : } (trueSupports : Set (Set (Fin r))) (hcover : ∀ (i : Fin r), StrueSupports, i S) (hdisjoint : StrueSupports, TtrueSupports, iS, i TS = T) (hne : StrueSupports, S.Nonempty) (v : Fin r) (hv : vtrueSupportSpanInt trueSupports) :
StrueSupports, iS, jS, v i v j

Any integer vector outside the true-support span varies on at least one part of the genuine partition.

theorem HexBerlekampZassenhausMathlib.BHKS.exists_adjustedVector (L : Hex.BhksLatticeBasis) (hL : BhksBlockForm L) (trueSupports : Set (Set (Fin L.factorCount))) (hcover : ∀ (i : Fin L.factorCount), StrueSupports, i S) (hdisjoint : StrueSupports, TtrueSupports, iS, i TS = T) (hne : StrueSupports, S.Nonempty) (data : (S : trueSupports) → SupportShortVectorData L S) (V U : ) (v : Vector (L.factorCount + L.coeffWidth)) (hvL : L.basis.memLattice v) (hvBound : ∀ (x : Fin (L.factorCount + L.coeffWidth)), v[x].natAbs V) (hdataBound : ∀ (S : trueSupports) (x : Fin (L.factorCount + L.coeffWidth)), (data S).vector[x].natAbs U) (hvW : (fun (i : Fin L.factorCount) => v[Fin.castAdd L.coeffWidth i])trueSupportSpanInt trueSupports) :
∃ (w : Vector (L.factorCount + L.coeffWidth)), L.basis.memLattice w (∃ (i : Fin L.factorCount), w[Fin.castAdd L.coeffWidth i] = 0) (∀ StrueSupports, iS, w[Fin.castAdd L.coeffWidth i] 0) ∀ (x : Fin (L.factorCount + L.coeffWidth)), w[x].natAbs V + V * U + trueSupports.ncard * U

Adjust a full BHKS lattice vector outside W by full true-support short vectors. The adjusted vector has a zero exponent at one local factor, but its first block is nonzero on every true support.

The correction is performed on row-combination coefficients, not merely on the projected first block, so the result remains an actual vector of the full BHKS lattice.

theorem HexBerlekampZassenhausMathlib.BHKS.projectedRowSpanInt_le_trueSupportSpanInt_of_no_bad (L : Hex.BhksLatticeBasis) (hL : BhksBlockForm L) (hrows : 1 L.factorCount + L.coeffWidth) (trueSupports : Set (Set (Fin L.factorCount))) (hcover : ∀ (i : Fin L.factorCount), StrueSupports, i S) (hdisjoint : StrueSupports, TtrueSupports, iS, i TS = T) (hne : StrueSupports, S.Nonempty) (data : (S : trueSupports) → SupportShortVectorData L S) (V U : ) (hretainedBound : ∀ (j : Fin (L.factorCount + L.coeffWidth)), j < Hex.bhksCutPrefixCount L (Hex.bhksProjectedRowsTrace L hrows).reducedMatrix∀ (x : Fin (L.factorCount + L.coeffWidth)), ((Hex.bhksProjectedRowsTrace L hrows).reducedMatrix.row j)[x].natAbs V) (hdataBound : ∀ (S : trueSupports) (x : Fin (L.factorCount + L.coeffWidth)), (data S).vector[x].natAbs U) (hnoBad : ∀ (w : Vector (L.factorCount + L.coeffWidth)), L.basis.memLattice w(∃ (i : Fin L.factorCount), w[Fin.castAdd L.coeffWidth i] = 0)(∀ StrueSupports, iS, w[Fin.castAdd L.coeffWidth i] 0)(∀ (x : Fin (L.factorCount + L.coeffWidth)), w[x].natAbs V + V * U + trueSupports.ncard * U)False) :

The geometric half of the BHKS reverse containment. If every bounded adjusted lattice vector with one zero local exponent and a nonzero exponent on every true support is impossible, then every executable retained row belongs to the true-support span.

The theorem isolates all LLL bookkeeping: the caller supplies only coordinate bounds for retained rows and support short vectors, plus the algebraic bad-vector contradiction.

Casting an integer vector in the executable projected span to places it in the rational row space used by RREF.

If L' = W, equality of all coordinates in the rational projected row space is exactly equality of true-support membership signatures.