Module

Groupoid.lean

Nyll.ProCGroups.ReidemeisterSchreier.Groupoid
18 declarations indexed from sourceView source ↗

Reidemeister Schreier / Groupoid

This module rebuilds the spanning-tree loop construction using public conversion functions between mathlib's vertex type synonyms. No private-root declaration or backward elaboration option enters the public API.

Declarations

ReidemeisterSchreier.Groupoid.generatorObject

A generator-quiver vertex viewed in the ambient groupoid.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
abbrev generatorObject
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (a : IsFreeGroupoid.Generators G) : G
ReidemeisterSchreier.Groupoid.generatorHom

A generating arrow with both endpoints expressed through generatorObject.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
abbrev generatorHom
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    {a b : IsFreeGroupoid.Generators G} (e : a ⟶ b) :
    generatorObject a ⟶ generatorObject b
ReidemeisterSchreier.Groupoid.treeVertexObject

A spanning-tree vertex viewed in the ambient groupoid.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
abbrev treeVertexObject
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G))
    (a : T) : G
ReidemeisterSchreier.Groupoid.treeVertexOfObject

An ambient groupoid vertex viewed as a vertex of the wide spanning subquiver.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
abbrev treeVertexOfObject
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G))
    (a : G) : T
ReidemeisterSchreier.Groupoid.rootObject

The root vertex of a spanning tree, explicitly returned in the ambient groupoid type.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
abbrev rootObject
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G))
    [Quiver.Arborescence T] : G
ReidemeisterSchreier.Groupoid.treeEdgeHom

A tree edge viewed as an arrow of the ambient groupoid.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
abbrev treeEdgeHom
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G))
    {a b : T} (e : a ⟶ b) : treeVertexObject T a ⟶ treeVertexObject T b
ReidemeisterSchreier.Groupoid.rootHomOfPath

A path in the chosen spanning tree gives an arrow from its explicit root.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
def rootHomOfPath
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T] :
    ∀ {a : T}, Quiver.Path (Quiver.root T) a →
      (rootObject T ⟶ treeVertexObject T a)
  | _, Quiver.Path.nil => 𝟙 _
  | _, Quiver.Path.cons p e => rootHomOfPath T p ≫ treeEdgeHom T e
ReidemeisterSchreier.Groupoid.rootTreeHom

The canonical spanning-tree arrow from the explicit root to a tree vertex.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
def rootTreeHom
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    (a : T) : rootObject T ⟶ treeVertexObject T a
ReidemeisterSchreier.Groupoid.rootTreeHom_eq

Any spanning-tree path computes the canonical root arrow.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
theorem rootTreeHom_eq
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    {a : T} (p : Quiver.Path (Quiver.root T) a) :
    rootTreeHom T a = rootHomOfPath T p
ReidemeisterSchreier.Groupoid.rootTreeHom_root

The canonical tree arrow at the explicit root is the identity.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
theorem rootTreeHom_root
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T] :
    rootTreeHom T (Quiver.root T) = 𝟙 _
ReidemeisterSchreier.Groupoid.rootLoopOfHom

The loop associated to a groupoid arrow, based at the explicit spanning-tree root.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
def rootLoopOfHom
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    {a b : G} (p : a ⟶ b) : End (rootObject T)
ReidemeisterSchreier.Groupoid.rootLoopOfHom_eq_id

A tree edge gives the identity explicit-root loop.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
theorem rootLoopOfHom_eq_id
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    {a b : IsFreeGroupoid.Generators G} (e : a ⟶ b)
    (h : e ∈ Quiver.wideSubquiverSymmetrify T a b) :
    rootLoopOfHom T (generatorHom e) = 𝟙 (rootObject T)
ReidemeisterSchreier.Groupoid.rootFunctorOfMonoidHom

The functor induced by a homomorphism from the explicit root vertex group.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
def rootFunctorOfMonoidHom
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    {X : Type u} [Monoid X] (f : End (rootObject T) →* X) :
    G ⥤ CategoryTheory.SingleObj X where
  obj _ := ()
  map p := f (rootLoopOfHom T p)
  map_id := by
    intro a
    dsimp only [rootLoopOfHom]
    rw [Category.id_comp, IsIso.hom_inv_id, ← End.one_def, f.map_one, id_as_one]
  map_comp := by
    intros
    rw [CategoryTheory.SingleObj.comp_as_mul, ← f.map_mul]
    simp only [IsIso.inv_hom_id_assoc, rootLoopOfHom, End.mul_def, Category.assoc]
ReidemeisterSchreier.Groupoid.rootFunctorOfMonoidHom_map

The explicit-root induced functor applies the supplied homomorphism to the explicit-root loop.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
theorem rootFunctorOfMonoidHom_map
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    {X : Type u} [Monoid X] (f : End (rootObject T) →* X)
    {a b : G} (p : a ⟶ b) :
    (rootFunctorOfMonoidHom T f).map p = f (rootLoopOfHom T p)
ReidemeisterSchreier.Groupoid.rootLoopOfHom_end

At the root, turning an endomorphism into a loop does nothing.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
theorem rootLoopOfHom_end
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    (p : End (rootObject T)) : rootLoopOfHom T p = p
ReidemeisterSchreier.Groupoid.map_loopOfHom_eq_map

A functor trivial on the spanning tree maps every explicit-root loop to the original arrow.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
lemma map_loopOfHom_eq_map
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    {X : Type u} [Group X] (F : G ⥤ CategoryTheory.SingleObj X)
    (hTree : ∀ {a b : IsFreeGroupoid.Generators G} (e : a ⟶ b),
      e ∈ Quiver.wideSubquiverSymmetrify T a b → F.map (generatorHom e) = 1) :
    ∀ {a b} (q : a ⟶ b), F.map (rootLoopOfHom T q) = (F.map q : X)
ReidemeisterSchreier.Groupoid.endBasis

The complement of a chosen spanning tree in a free connected groupoid gives an explicit free group basis of the root vertex group.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
def endBasis
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T] :
    FreeGroupBasis
      (((Quiver.wideSubquiverEquivSetTotal <| Quiver.wideSubquiverSymmetrify T)ᶜ : Set _))
      (End (rootObject T))
ReidemeisterSchreier.Groupoid.endBasis_apply

The explicit spanning-tree basis evaluates to the corresponding explicit-root loop.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open CategoryTheory CategoryTheory.SingleObj Quiver
universe u
namespace ReidemeisterSchreier.Groupoid
theorem endBasis_apply
    {G : Type u} [Groupoid.{u} G] [IsFreeGroupoid G]
    (T : WideSubquiver (Symmetrify <| IsFreeGroupoid.Generators G)) [Quiver.Arborescence T]
    (e : (((Quiver.wideSubquiverEquivSetTotal <| Quiver.wideSubquiverSymmetrify T)ᶜ : Set _))) :
    endBasis T e = rootLoopOfHom T (generatorHom e.1.hom)