The pieces a merge is built from #
Explicit expander constructions come in special sizes — squares, powers — but
ExpanderFamily wants a member on every n. An expander on N vertices is
folded onto n of them by identifying u with u mod n, with self-loops
padding the fibres that come up short. MergeGen carries out that fold at an
arbitrary width; this module holds the two ingredients it rests on.
The first is the estimate on the old steps. Write f for a function on the
merged graph and F = f ∘ π for its lift. Splitting F into its mean and its
centred part and applying the base's spectral bound to the latter gives
λ² ‖F‖² + (1 - λ²) N c², where c is the mean of F — nonzero, because the
heavier fibres weigh more.
The second is that the fibres stay balanced: with (m - 1) n ≤ N at most one
of a vertex's m slots is empty, so however large the width, the padding costs
one loop per vertex.
Main definitions #
Complexity.RegGraph.proj— the new vertex an old one lands onComplexity.RegGraph.liftN— the old vertex in a given slot of a fibre
Main results #
Complexity.RegGraph.sum_sq_step_lift_le— the old steps, with the mean correctedComplexity.RegGraph.card_liftN_none_le_one— the balanced fibres a general merge needs
The fibres of a merge #
The spectral bound #
The base graph, on Fin N.
Equations
- Complexity.RegGraph.base hd rot hrot = Complexity.RegGraph.ofRot d hd N rot hrot
Instances For
Balanced fibres, for a merge of any width #
With (m - 1) n ≤ N ≤ m n every fibre has m - 1 or m elements, so at most
one of the m slots is empty and the padding costs one loop per vertex however
large m is.
These are the two facts a general merge rests on; they are stated for a natural-number slot index, which is the form the general construction needs.