Documentation

MerLeanBpqc.Theorems.Thm_9_ExpanderBitDegree

Theorem 9: Expander Bit Degree #

Main Results #

Hamming weight for product vectors #

noncomputable def ExpanderBitDegree.totalWeight {V : Type u_1} [Fintype V] {m : } (y : VFin m𝔽₂) :

The total Hamming weight of y : V → Fin m → 𝔽₂.

Equations
Instances For
    noncomputable def ExpanderBitDegree.vertexSupport {V : Type u_1} [Fintype V] {m : } (y : VFin m𝔽₂) :

    The vertex support of y.

    Equations
    Instances For
      theorem ExpanderBitDegree.vertexSupport_nonempty {V : Type u_1} [Fintype V] [DecidableEq V] {m : } {y : VFin m𝔽₂} (hy : y 0) :

      Weight bounds #

      theorem ExpanderBitDegree.totalWeight_div_le_card {V : Type u_1} [Fintype V] [DecidableEq V] {m : } (hm : 0 < m) (y : VFin m𝔽₂) :
      (totalWeight y) / m (vertexSupport y).card

      Coboundary map #

      noncomputable def ExpanderBitDegree.coboundary {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {s m : } (Λ : Labeling G) (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) (y : VFin m𝔽₂) :
      G.edgeSet𝔽₂

      The coboundary map δ, the transpose of the Tanner differential.

      Equations
      Instances For
        noncomputable def ExpanderBitDegree.coboundaryWeight {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {s m : } (Λ : Labeling G) (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) (y : VFin m𝔽₂) :
        Equations
        Instances For

          Transpose of parity check #

          noncomputable def ExpanderBitDegree.parityCheckTranspose {s m : } (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) :

          The transpose of parityCheck via the dot product: (parityCheckTranspose H y)(j) = dotProduct y (H (Pi.single j 1)).

          Equations
          Instances For
            theorem ExpanderBitDegree.parityCheckTranspose_injective {s m : } (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) (hPC_surj : Function.Surjective parityCheck) :

            If parityCheck is surjective, its transpose is injective.

            The transpose image lies in the dual code.

            theorem ExpanderBitDegree.parityCheckTranspose_weight_ge {s m : } (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) (hPC_surj : Function.Surjective parityCheck) (dLperp : ) (hdLperp_def : dLperp = (ClassicalCode.ofParityCheck parityCheck).dualCode.distance) (y : Fin m𝔽₂) (hy : y 0) :
            dLperp hammingWeight ((parityCheckTranspose parityCheck) y)

            For nonzero y, the weight of the transpose image is at least dLperp.

            Coboundary at boundary edges #

            theorem ExpanderBitDegree.coboundary_eq_sum {V : Type u_1} [Fintype V] [DecidableEq V] {s m : } {G : SimpleGraph V} [DecidableRel G.Adj] (Λ : Labeling G) (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) (y : VFin m𝔽₂) (e : G.edgeSet) :
            coboundary G Λ parityCheck y e = v : V, y v ⬝ᵥ (differential Λ parityCheck) (Pi.single e 1) v

            The coboundary at an edge equals the sum of local transpose contributions.

            Core combinatorial lemma #

            theorem ExpanderBitDegree.coboundary_boundary_vertex {V : Type u_1} [Fintype V] [DecidableEq V] {s m : } {G : SimpleGraph V} [DecidableRel G.Adj] (Λ : Labeling G) (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) (y : VFin m𝔽₂) (e : G.edgeSet) (v : V) (hve : v e) (hother : we, w vy w = 0) :
            coboundary G Λ parityCheck y e = y v ⬝ᵥ (differential Λ parityCheck) (Pi.single e 1) v

            For a boundary edge e = {v, w} with w ∉ vertexSupport y, the coboundary value depends only on the contribution from v.

            theorem ExpanderBitDegree.nonBdyPos_add_boundary_le_degree {V : Type u_1} [Fintype V] [DecidableEq V] {G : SimpleGraph V} [DecidableRel G.Adj] {s : } (Λ : Labeling G) (hreg : G.IsRegularOfDegree s) (S : Finset V) (v : V) (hv : v S) :

            For v ∈ S in an s-regular graph, the number of label positions corresponding to neighbors in S, plus the boundary edge count at v, is at most s.

            Main Theorem #

            theorem ExpanderBitDegree.expanderBitDegree {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (s : ) (hs : 1 s) (hconn : G.Connected) (hreg : G.IsRegularOfDegree s) (hcard : 2 Fintype.card V) {m : } (parityCheck : (Fin s𝔽₂) →ₗ[𝔽₂] Fin m𝔽₂) (hPC_surj : Function.Surjective parityCheck) (Λ : Labeling G) (kL : ) (hkL : kL + m = s) (dLperp : ) (hdLperp_ge : 2 dLperp) (hdLperp_le : dLperp s) (hdLperp_def : dLperp = (ClassicalCode.ofParityCheck parityCheck).dualCode.distance) (α : ) (hα_pos : 0 < α) (hα_bound : α * m < 1) (y : VFin m𝔽₂) (hy_weight : (totalWeight y) α * (Fintype.card V) * m) :
            have lam2 := GraphExpansion.secondLargestEigenvalue G hcard; have β := (dLperp - 1 - lam2 - α * m * (s - lam2)) / (m * (dLperp - 1)); β * (totalWeight y) (coboundaryWeight G Λ parityCheck y)