Free groupoid on a quiver #
This file defines the free groupoid on a quiver, the lifting of a prefunctor to its unique extension as a functor from the free groupoid, and proves uniqueness of this extension.
Main results #
Given the type V
and a quiver instance on V
:
FreeGroupoid V
: a type synonym forV
.FreeGroupoid.instGroupoid
: theGroupoid
instance onFreeGroupoid V
.lift
: the lifting of a prefunctor fromV
toV'
whereV'
is a groupoid, to a functor.FreeGroupoid V ⥤ V'
.lift_spec
andlift_unique
: the proofs that, respectively,lift
indeed is a lifting and is the unique one.
Implementation notes #
The free groupoid is first defined by symmetrifying the quiver, taking the induced path category and finally quotienting by the reducibility relation.
The "reduction" relation
- step: ∀ {V : Type u} [inst : Quiver V] (X Z : Quiver.Symmetrify V) (f : X ⟶ Z), CategoryTheory.Groupoid.Free.redStep (CategoryTheory.CategoryStruct.id (CategoryTheory.Paths.of.obj X)) (CategoryTheory.CategoryStruct.comp f.toPath (Quiver.reverse f).toPath)
Instances For
The underlying vertices of the free groupoid
Equations
- CategoryTheory.FreeGroupoid V = CategoryTheory.Quotient CategoryTheory.Groupoid.Free.redStep
Instances For
instance
CategoryTheory.Groupoid.Free.instNonemptyFreeGroupoid
{V : Type u_1}
[Quiver V]
[Nonempty V]
:
Equations
- ⋯ = ⋯
theorem
CategoryTheory.Groupoid.Free.congr_reverse
{V : Type u}
[Quiver V]
{X : CategoryTheory.Paths (Quiver.Symmetrify V)}
{Y : CategoryTheory.Paths (Quiver.Symmetrify V)}
(p : X ⟶ Y)
(q : X ⟶ Y)
:
CategoryTheory.Quotient.CompClosure CategoryTheory.Groupoid.Free.redStep p q →
CategoryTheory.Quotient.CompClosure CategoryTheory.Groupoid.Free.redStep (Quiver.Path.reverse p)
(Quiver.Path.reverse q)
theorem
CategoryTheory.Groupoid.Free.congr_comp_reverse
{V : Type u}
[Quiver V]
{X : CategoryTheory.Paths (Quiver.Symmetrify V)}
{Y : CategoryTheory.Paths (Quiver.Symmetrify V)}
(p : X ⟶ Y)
:
Quot.mk (CategoryTheory.Quotient.CompClosure CategoryTheory.Groupoid.Free.redStep)
(CategoryTheory.CategoryStruct.comp p (Quiver.Path.reverse p)) = Quot.mk (CategoryTheory.Quotient.CompClosure CategoryTheory.Groupoid.Free.redStep)
(CategoryTheory.CategoryStruct.id X)
theorem
CategoryTheory.Groupoid.Free.congr_reverse_comp
{V : Type u}
[Quiver V]
{X : CategoryTheory.Paths (Quiver.Symmetrify V)}
{Y : CategoryTheory.Paths (Quiver.Symmetrify V)}
(p : X ⟶ Y)
:
Quot.mk (CategoryTheory.Quotient.CompClosure CategoryTheory.Groupoid.Free.redStep)
(CategoryTheory.CategoryStruct.comp (Quiver.Path.reverse p) p) = Quot.mk (CategoryTheory.Quotient.CompClosure CategoryTheory.Groupoid.Free.redStep)
(CategoryTheory.CategoryStruct.id Y)
Equations
- CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid = CategoryTheory.Quotient.category CategoryTheory.Groupoid.Free.redStep
def
CategoryTheory.Groupoid.Free.quotInv
{V : Type u}
[Quiver V]
{X : CategoryTheory.FreeGroupoid V}
{Y : CategoryTheory.FreeGroupoid V}
(f : X ⟶ Y)
:
Y ⟶ X
The inverse of an arrow in the free groupoid
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- CategoryTheory.FreeGroupoid.instGroupoid = CategoryTheory.Groupoid.mk (fun {X Y : CategoryTheory.FreeGroupoid V} => CategoryTheory.Groupoid.Free.quotInv) ⋯ ⋯
The inclusion of the quiver on V
to the underlying quiver on FreeGroupoid V
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
CategoryTheory.Groupoid.Free.of_eq
{V : Type u}
[Quiver V]
:
CategoryTheory.Groupoid.Free.of V = Quiver.Symmetrify.of ⋙q CategoryTheory.Paths.of ⋙q (CategoryTheory.Quotient.functor CategoryTheory.Groupoid.Free.redStep).toPrefunctor
def
CategoryTheory.Groupoid.Free.lift
{V : Type u}
[Quiver V]
{V' : Type u'}
[CategoryTheory.Groupoid V']
(φ : V ⥤q V')
:
The lift of a prefunctor to a groupoid, to a functor from FreeGroupoid V
Equations
- CategoryTheory.Groupoid.Free.lift φ = CategoryTheory.Quotient.lift CategoryTheory.Groupoid.Free.redStep (CategoryTheory.Paths.lift (Quiver.Symmetrify.lift φ)) ⋯
Instances For
theorem
CategoryTheory.Groupoid.Free.lift_spec
{V : Type u}
[Quiver V]
{V' : Type u'}
[CategoryTheory.Groupoid V']
(φ : V ⥤q V')
:
CategoryTheory.Groupoid.Free.of V ⋙q (CategoryTheory.Groupoid.Free.lift φ).toPrefunctor = φ
theorem
CategoryTheory.Groupoid.Free.lift_unique
{V : Type u}
[Quiver V]
{V' : Type u'}
[CategoryTheory.Groupoid V']
(φ : V ⥤q V')
(Φ : CategoryTheory.Functor (CategoryTheory.FreeGroupoid V) V')
(hΦ : CategoryTheory.Groupoid.Free.of V ⋙q Φ.toPrefunctor = φ)
: