Documentation

Complexity.Foundations.Combinatorics.Expander.SimpleGraph

Rotation maps of simple graphs #

A rotation map determines a simple graph, in which distinct vertices are adjacent when an edge joins them (RotationMap.toSimpleGraph). When the rotation map has neither self-loops nor parallel edges (RotationMap.IsSimple), this loses nothing: the simple graph is regular of degree |D|, its walk operator averages over the neighbors in the simple graph, and its edges between two sets of vertices are those of the rotation map (IsSimple.card_interedges), so the results on rotation maps, such as the expander mixing lemma, apply to it. Conversely, every d-regular simple graph has a simple rotation map with labels Fin d (exists_isSimple_toSimpleGraph_eq).

Main definitions #

Main results #

References #

def Cslib.RotationMap.toSimpleGraph {V : Type u_1} {D : Type u_2} (G : RotationMap V D) :

The simple graph underlying G: distinct vertices are adjacent when an edge of G joins them. Self-loops are dropped and parallel edges merged.

Instances For
    @[simp]
    theorem Cslib.RotationMap.toSimpleGraph_adj {V : Type u_1} {D : Type u_2} (G : RotationMap V D) {u v : V} :
    G.toSimpleGraph.Adj u v ↔ u ≠ v ∧ ∃ (i : D), G.neighbor u i = v

    Distinct vertices are adjacent in the simple graph of G when an edge of G joins them.

    @[instance_reducible]

    Adjacency in the simple graph of a rotation map with finitely many labels is decidable.

    structure Cslib.RotationMap.IsSimple {V : Type u_1} {D : Type u_2} (G : RotationMap V D) :

    G is simple: it has no self-loops and no parallel edges.

    • neighbor_ne (v : V) (i : D) : G.neighbor v i ≠ v

      No edge joins a vertex to itself.

    • neighbor_injective (v : V) : Function.Injective (G.neighbor v)

      No two edges at a vertex lead to the same neighbor.

    Instances For
      theorem Cslib.RotationMap.IsSimple.toSimpleGraph_adj_iff {V : Type u_1} {D : Type u_2} {G : RotationMap V D} (hG : G.IsSimple) {u v : V} :
      G.toSimpleGraph.Adj u v ↔ ∃ (i : D), G.neighbor u i = v

      In the simple graph of a simple rotation map, u and v are adjacent exactly when v is a neighbor of u.

      The neighbors of v in the simple graph are the ends of the edges at v.

      The simple graph of a simple rotation map with labels D is regular of degree |D|.

      theorem Cslib.RotationMap.IsSimple.walk_apply_eq_sum_neighborFinset {V : Type u_1} {D : Type u_2} {G : RotationMap V D} [Fintype D] (hG : G.IsSimple) [G.toSimpleGraph.LocallyFinite] (f : V → ℝ) (v : V) :
      G.walk f v = (∑ w ∈ G.toSimpleGraph.neighborFinset v, f w) / ↑(Fintype.card D)

      The walk operator of a simple rotation map averages over the neighbors in its simple graph.

      The edges of the simple graph between two sets of vertices are those of the rotation map.

      Every d-regular simple graph is the simple graph of a simple rotation map with labels Fin d, obtained by numbering the neighbors of each vertex Arora and Barak, Section 21.3.