Documentation

Mathlib.Combinatorics.Quiver.Schreier

Schreier Graphs #

This module defines Schreier graphs as quivers with labelled edges.

Given a monoid M acting on a type V and a map ι : S → M, the Schreier graph has vertices V and a directed edge x → ι(s) • x for each x : V and s : S.

Main definitions #

Main results #

Examples #

Implementation notes #

Although referred to informally as graphs, Schreier graphs have multiple, directed, labelled edges between nodes and so are implemented here as quivers.

References #

structure Quiver.SchreierGraph (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} ( : SM) :
Type u_1

A Schreier graph for a monoid M acting on V with generators ι : S → M. Vertices are elements of V, and there is an edge from x to y for each s : S such that ι s • x = y.

  • ofVertex :: (
    • toVertex : V

      The underlying vertex.

  • )
Instances For
    theorem Quiver.SchreierGraph.ext {V : Type u_1} {M : Type u_2} {inst✝ : SMul M V} {S : Type u_3} { : SM} {x y : SchreierGraph V } (toVertex : x.toVertex = y.toVertex) :
    x = y
    theorem Quiver.SchreierGraph.ext_iff {V : Type u_1} {M : Type u_2} {inst✝ : SMul M V} {S : Type u_3} { : SM} {x y : SchreierGraph V } :
    def Quiver.SchreierGraph.equiv (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) :

    Equivalence between the original vertex type and the Schreier graph type.

    Equations
    Instances For
      @[simp]
      theorem Quiver.SchreierGraph.equiv_apply_toVertex (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) (toVertex : V) :
      ((equiv V ι) toVertex).toVertex = toVertex
      @[simp]
      theorem Quiver.SchreierGraph.equiv_symm_apply (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) (self : SchreierGraph V ι) :
      (equiv V ι).symm self = self.toVertex
      @[implicit_reducible]
      instance Quiver.SchreierGraph.schreierGraphSMul (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) :

      Transport the scalar multiplication to the Schreier graph vertices.

      Equations
      @[implicit_reducible]
      instance Quiver.SchreierGraph.schreierGraphQuiver (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) :

      The quiver structure on a Schreier graph. An arrow from x to y exists when there is an s : S such that (ι s) • x = y.

      Equations
      def Quiver.SchreierGraph.labelling (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) :

      The labelling of arrows in a Schreier graph by elements of S. This is encoded as a prefunctor to SingleObj S.

      Equations
      Instances For
        @[simp]
        theorem Quiver.SchreierGraph.labelling_map (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) {X✝ Y✝ : SchreierGraph V ι} (e : X✝ Y✝) :
        (labelling V ι).map e = e
        @[simp]
        theorem Quiver.SchreierGraph.labelling_obj (V : Type u_1) {M : Type u_2} [SMul M V] {S : Type u_3} (ι : SM) (x✝ : SchreierGraph V ι) :
        @[implicit_reducible]
        instance Quiver.SchreierGraph.instMulAction (V : Type u_1) {M : Type u_2} [Monoid M] [MulAction M V] {S : Type u_3} (ι : SM) :

        The monoid acts on the vertices of the Schreier graph.

        Equations

        Schreier graphs for group actions #

        When we have a group action, the labelling becomes a covering.

        def Quiver.SchreierGraph.labellingStarEquiv {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) :

        The star map of the labelling prefunctor as an equivalence.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          theorem Quiver.SchreierGraph.labellingStarEquiv_symm_apply_snd_coe {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) (x✝ : Star (SingleObj.star S)) :
          ((labellingStarEquiv ι x).symm x✝).snd = x✝.snd
          @[simp]
          theorem Quiver.SchreierGraph.labellingStarEquiv_symm_apply_fst {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) (x✝ : Star (SingleObj.star S)) :
          ((labellingStarEquiv ι x).symm x✝).fst = ι x✝.snd x
          @[simp]
          theorem Quiver.SchreierGraph.labellingStarEquiv_apply {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) (a✝ : Star x) :
          (labellingStarEquiv ι x) a✝ = (labelling V ι).star x a✝
          def Quiver.SchreierGraph.labellingCostarEquiv {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) :

          The costar map of the labelling prefunctor as an equivalence.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            @[simp]
            theorem Quiver.SchreierGraph.labellingCostarEquiv_apply {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) (a✝ : Costar x) :
            (labellingCostarEquiv ι x) a✝ = (labelling V ι).costar x a✝
            @[simp]
            theorem Quiver.SchreierGraph.labellingCostarEquiv_symm_apply_snd_coe {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) (x✝ : Costar (SingleObj.star S)) :
            ((labellingCostarEquiv ι x).symm x✝).snd = x✝.snd
            @[simp]
            theorem Quiver.SchreierGraph.labellingCostarEquiv_symm_apply_fst {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) (x : SchreierGraph V ι) (x✝ : Costar (SingleObj.star S)) :
            ((labellingCostarEquiv ι x).symm x✝).fst = (ι x✝.snd)⁻¹ x
            theorem Quiver.SchreierGraph.labelling_isCovering {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) :

            The labelling prefunctor is a covering for Schreier graphs with group actions.

            theorem Quiver.SchreierGraph.map_smul_of_comp_labelling_eq {V : Type u_1} {M : Type u_2} [Group M] [MulAction M V] {S : Type u_3} (ι : SM) {W : Type u_4} [MulAction M W] (φ : SchreierGraph V ι ⥤q SchreierGraph W ι) (φm : φ ⋙q labelling W ι = labelling V ι) (v : SchreierGraph V ι) (s : S) :
            φ.obj (ι s v) = ι s φ.obj v

            If a prefunctor between Schreier graphs commutes with the labelling (i.e., labels are preserved), then it commutes with the group action. In other words, morphisms that preserve edge labels also preserve the group structure.