Verified canonical binary elimination for auxiliary dual checks #
The effective elimination library chooses the first nonzero coordinate at
each insertion. Its resulting pivot set is exactly the dimension-defined
canonical pivot set used by CL.canonLin. Thus its residual, not merely an
arbitrary equivalent quotient representative, computes that canonical map.
theorem
MIPRE.Introspection.AuxiliaryCanonical.firstOne_before
(bs : Cost.BitStr)
(j : ℕ)
(hj : j < LowDegree.BinaryLinear.firstOne bs)
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.firstOne_vector_before
{n : ℕ}
(v : Fin n → ZMod 2)
(i : Fin n)
(hi : ↑i < LowDegree.BinaryLinear.firstOne (LowDegree.BinaryLinear.vectorBits v))
:
def
MIPRE.Introspection.AuxiliaryCanonical.Leading
{n t : ℕ}
(b : List (LowDegree.BinaryLinear.Pivot n t))
:
Equations
- MIPRE.Introspection.AuxiliaryCanonical.Leading b = ∀ p ∈ b, ∀ i < p.1, p.2.1 i = 0
Instances For
theorem
MIPRE.Introspection.AuxiliaryCanonical.leading_insert
{n t : ℕ}
{b : List (LowDegree.BinaryLinear.Pivot n t)}
(hb : Leading b)
(r : LowDegree.BinaryLinear.Row n t)
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.typedBasis_leading
{n t : ℕ}
(rows : List (LowDegree.BinaryLinear.Row n t))
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.pivot_one
{n t : ℕ}
{b : List (LowDegree.BinaryLinear.Pivot n t)}
(hb : LowDegree.BinaryLinear.IsPivotBasis b)
(p : LowDegree.BinaryLinear.Pivot n t)
(hp : p ∈ b)
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.pivot_nodup
{n t : ℕ}
{b : List (LowDegree.BinaryLinear.Pivot n t)}
(hb : LowDegree.BinaryLinear.IsPivotBasis b)
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.pivotSpan_range
{n t : ℕ}
(b : List (LowDegree.BinaryLinear.Pivot n t))
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.finrank_pivotSpan
{n t : ℕ}
{b : List (LowDegree.BinaryLinear.Pivot n t)}
(hb : LowDegree.BinaryLinear.IsPivotBasis b)
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.pivot_set_canonical
{n t : ℕ}
{b : List (LowDegree.BinaryLinear.Pivot n t)}
(hb : LowDegree.BinaryLinear.IsPivotBasis b)
(hl : Leading b)
:
The program's stored pivot indices equal the source's canonical pivot set.
theorem
MIPRE.Introspection.AuxiliaryCanonical.reduce_sub_mem
{n t : ℕ}
(S : Submodule (ZMod 2) (Fin n → ZMod 2))
(b : List (LowDegree.BinaryLinear.Pivot n t))
(hb : ∀ p ∈ b, p.2.1 ∈ S)
(r : LowDegree.BinaryLinear.Row n t)
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.typedReduce_canonLin
{n t : ℕ}
{b : List (LowDegree.BinaryLinear.Pivot n t)}
(hb : LowDegree.BinaryLinear.IsPivotBasis b)
(hl : Leading b)
(r : LowDegree.BinaryLinear.Row n t)
:
theorem
MIPRE.Introspection.AuxiliaryCanonical.typedBasis_canonLin
{n t : ℕ}
(rows : List (LowDegree.BinaryLinear.Row n t))
(v : Fin n → ZMod 2)
:
(LowDegree.BinaryLinear.typedReduce (LowDegree.BinaryLinear.typedBasis rows) (v, 0)).1 = (CL.canonLin (LowDegree.BinaryLinear.rowSpan rows)) v
Canonical reduction for an arbitrary finite generating family.
A single uniform polynomial-time program for the exact canonical quotient representative. The coefficient width is zero, since no certificate is output.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
MIPRE.Introspection.AuxiliaryCanonical.canonicalProg_correct
{n : ℕ}
(vs : List (Fin n → ZMod 2))
(v : Fin n → ZMod 2)
:
canonicalProg.toFun (List.map LowDegree.BinaryLinear.vectorBits vs, LowDegree.BinaryLinear.vectorBits v) = LowDegree.BinaryLinear.vectorBits ((CL.canonLin (Submodule.span (ZMod 2) {x : Fin n → ZMod 2 | x ∈ vs})) v)