Expander families, and expanderizing a graph #
Dinur's preprocessing needs a fixed constant degree d and a constant
lam < 1 such that every vertex count admits a d-regular graph with spectral
bound lam. ExpanderFamily packages exactly that.
The family is given as raw rotation data on Fin n × Fin degree, one
involution per vertex count, rather than as a function into RegGraph. That
matters downstream: degree reduction puts an expander on the cloud of every
vertex at once, and those clouds have different sizes, so all of them must speak
the same label type Fin degree. Deriving the graphs from shared data gives
that for free, and makes order and deg computations Fintype.card_fin
rather than hypotheses.
Isolating the requirement this way matters for a second reason: nothing else in
the development depends on how the family is built. Neither Mathlib nor this
library currently contains an explicit expander construction — no spectral gap,
edge expansion, Cheeger inequality, or zig-zag product — so producing an
ExpanderFamily is a self-contained sub-project (zig-zag, or a Margulis-type
Cayley construction), and everything downstream is already stated against this
interface.
Main definitions #
RegGraph.ofRot— a graph onFin nfrom a rotation involutionExpanderFamily— constant degree, uniform spectral bound, shared label typeExpanderFamily.graph,ExpanderFamily.expanderize
Main results #
ExpanderFamily.order_graph,ExpanderFamily.deg_graphExpanderFamily.spectralBound_expanderize— expanderization has a boundExpanderFamily.expanderize_bound_lt_one— and the bound is below one
A family of constant-degree expanders, presented as rotation data: for every
vertex count n, an involution on Fin n × Fin degree whose graph contracts
mean-zero functions by a fixed lam < 1.
- degree : ℕ
The constant degree, shared by every member.
The degree is positive.
The rotation map on
nvertices.- rot_involutive (n : ℕ) : Function.Involutive (self.rot n)
Each rotation map is an involution.
- lam : ℝ
The uniform contraction factor.
The factor is nonnegative.
The factor is below one: this is the spectral gap.
- spectral (n : ℕ) : (RegGraph.ofRot self.degree ⋯ n (self.rot n) ⋯).SpectralBound self.lam
Every member contracts mean-zero functions by
lam.
Instances For
The member of the family on n vertices.
Equations
- E.graph n = Complexity.RegGraph.ofRot E.degree ⋯ n (E.rot n) ⋯
Instances For
The identification of the family member's vertices with G's: the
numbering G's vertices carry.
Equations
- E.vertexEquiv G = (Complexity.NumEnc.equivFinCard G.V).symm
Instances For
G with a family expander superposed on its vertices.
Equations
- E.expanderize G = G.union (E.graph G.order) (E.vertexEquiv G)
Instances For
Expanderization. Superposing a family expander gives a graph with a spectral bound.