# Covering #

This file defines coverings of quivers as prefunctors that are bijective on the so-called stars and costars at each vertex of the domain.

## Main definitions #

• Quiver.Star u is the type of all arrows with source u;
• Quiver.Costar u is the type of all arrows with target u;
• Prefunctor.star φ u is the obvious function star u → star (φ.obj u);
• Prefunctor.costar φ u is the obvious function costar u → costar (φ.obj u);
• Prefunctor.IsCovering φ means that φ.star u and φ.costar u are bijections for all u;
• Quiver.PathStar u is the type of all paths with source u;
• Prefunctor.pathStar u is the obvious function PathStar u → PathStar (φ.obj u).

## Main statements #

• Prefunctor.IsCovering.pathStar_bijective states that if φ is a covering, then φ.pathStar u is a bijection for all u. In other words, every path in the codomain of φ lifts uniquely to its domain.

## TODO #

Clean up the namespaces by renaming Prefunctor to Quiver.Prefunctor.

## Tags #

Cover, covering, quiver, path, lift

@[reducible, inline]
abbrev Quiver.Star {U : Type u_1} [] (u : U) :
Type (max u_1 u)

The Quiver.Star at a vertex is the collection of arrows whose source is the vertex. The type Quiver.Star u is defined to be Σ (v : U), (u ⟶ v).

Equations
• = ((v : U) × (u v))
Instances For
@[reducible, inline]
abbrev Quiver.Star.mk {U : Type u_1} [] {u : U} {v : U} (f : u v) :

Constructor for Quiver.Star. Defined to be Sigma.mk.

Equations
• = v, f
Instances For
@[reducible, inline]
abbrev Quiver.Costar {U : Type u_1} [] (v : U) :
Type (max u_1 u)

The Quiver.Costar at a vertex is the collection of arrows whose target is the vertex. The type Quiver.Costar v is defined to be Σ (u : U), (u ⟶ v).

Equations
• = ((u : U) × (u v))
Instances For
@[reducible, inline]
abbrev Quiver.Costar.mk {U : Type u_1} [] {u : U} {v : U} (f : u v) :

Constructor for Quiver.Costar. Defined to be Sigma.mk.

Equations
• = u, f
Instances For
@[simp]
theorem Prefunctor.star_snd {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
∀ (a : ), (φ.star u a).snd = φ.map a.snd
@[simp]
theorem Prefunctor.star_fst {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
∀ (a : ), (φ.star u a).fst = φ.obj a.fst
def Prefunctor.star {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
Quiver.Star (φ.obj u)

A prefunctor induces a map of Quiver.Star at every vertex.

Equations
Instances For
@[simp]
theorem Prefunctor.costar_fst {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
∀ (a : ), (φ.costar u a).fst = φ.obj a.fst
@[simp]
theorem Prefunctor.costar_snd {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
∀ (a : ), (φ.costar u a).snd = φ.map a.snd
def Prefunctor.costar {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
Quiver.Costar (φ.obj u)

A prefunctor induces a map of Quiver.Costar at every vertex.

Equations
Instances For
@[simp]
theorem Prefunctor.star_apply {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) {u : U} {v : U} (e : u v) :
φ.star u () = Quiver.Star.mk (φ.map e)
@[simp]
theorem Prefunctor.costar_apply {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) {u : U} {v : U} (e : u v) :
φ.costar v () = Quiver.Costar.mk (φ.map e)
theorem Prefunctor.star_comp {U : Type u_1} [] {V : Type u_3} [] (φ : U ⥤q V) {W : Type u_2} [] (ψ : V ⥤q W) (u : U) :
(φ ⋙q ψ).star u = ψ.star (φ.obj u) φ.star u
theorem Prefunctor.costar_comp {U : Type u_1} [] {V : Type u_3} [] (φ : U ⥤q V) {W : Type u_2} [] (ψ : V ⥤q W) (u : U) :
(φ ⋙q ψ).costar u = ψ.costar (φ.obj u) φ.costar u
structure Prefunctor.IsCovering {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) :

A prefunctor is a covering of quivers if it defines bijections on all stars and costars.

Instances For
theorem Prefunctor.IsCovering.star_bijective {U : Type u_1} [] {V : Type u_2} [] {φ : U ⥤q V} (self : φ.IsCovering) (u : U) :
Function.Bijective (φ.star u)
theorem Prefunctor.IsCovering.costar_bijective {U : Type u_1} [] {V : Type u_2} [] {φ : U ⥤q V} (self : φ.IsCovering) (u : U) :
Function.Bijective (φ.costar u)
@[simp]
theorem Prefunctor.IsCovering.map_injective {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (hφ : φ.IsCovering) {u : U} {v : U} :
Function.Injective fun (f : u v) => φ.map f
theorem Prefunctor.IsCovering.comp {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) {W : Type u_3} [] (ψ : V ⥤q W) (hφ : φ.IsCovering) (hψ : ψ.IsCovering) :
(φ ⋙q ψ).IsCovering
theorem Prefunctor.IsCovering.of_comp_right {U : Type u_3} [] {V : Type u_1} [] (φ : U ⥤q V) {W : Type u_2} [] (ψ : V ⥤q W) (hψ : ψ.IsCovering) (hφψ : (φ ⋙q ψ).IsCovering) :
φ.IsCovering
theorem Prefunctor.IsCovering.of_comp_left {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) {W : Type u_3} [] (ψ : V ⥤q W) (hφ : φ.IsCovering) (hφψ : (φ ⋙q ψ).IsCovering) (φsur : Function.Surjective φ.obj) :
ψ.IsCovering
def Quiver.symmetrifyStar {U : Type u_1} [] (u : U) :
Quiver.Star (Quiver.Symmetrify.of.obj u)

The star of the symmetrification of a quiver at a vertex u is equivalent to the sum of the star and the costar at u in the original quiver.

Equations
Instances For
def Quiver.symmetrifyCostar {U : Type u_1} [] (u : U) :
Quiver.Costar (Quiver.Symmetrify.of.obj u)

The costar of the symmetrification of a quiver at a vertex u is equivalent to the sum of the costar and the star at u in the original quiver.

Equations
Instances For
theorem Prefunctor.symmetrifyStar {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
φ.symmetrify.star u = (Quiver.symmetrifyStar (φ.obj u)).symm Sum.map (φ.star u) (φ.costar u)
theorem Prefunctor.symmetrifyCostar {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
φ.symmetrify.costar u = (Quiver.symmetrifyCostar (φ.obj u)).symm Sum.map (φ.costar u) (φ.star u)
theorem Prefunctor.IsCovering.symmetrify {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (hφ : φ.IsCovering) :
φ.symmetrify.IsCovering
@[reducible, inline]
abbrev Quiver.PathStar {U : Type u_1} [] (u : U) :
Type (max u_1 u u_1)

The path star at a vertex u is the type of all paths starting at u. The type Quiver.PathStar u is defined to be Σ v : U, Path u v.

Equations
• = ((v : U) × )
Instances For
@[reducible, inline]
abbrev Quiver.PathStar.mk {U : Type u_1} [] {u : U} {v : U} (p : ) :

Constructor for Quiver.PathStar. Defined to be Sigma.mk.

Equations
• = v, p
Instances For
def Prefunctor.pathStar {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (u : U) :
Quiver.PathStar (φ.obj u)

A prefunctor induces a map of path stars.

Equations
Instances For
@[simp]
theorem Prefunctor.pathStar_apply {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) {u : U} {v : U} (p : ) :
φ.pathStar u = Quiver.PathStar.mk (φ.mapPath p)
theorem Prefunctor.pathStar_injective {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (hφ : ∀ (u : U), Function.Injective (φ.star u)) (u : U) :
Function.Injective (φ.pathStar u)
theorem Prefunctor.pathStar_surjective {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (hφ : ∀ (u : U), Function.Surjective (φ.star u)) (u : U) :
Function.Surjective (φ.pathStar u)
theorem Prefunctor.pathStar_bijective {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) (hφ : ∀ (u : U), Function.Bijective (φ.star u)) (u : U) :
Function.Bijective (φ.pathStar u)
theorem Prefunctor.IsCovering.pathStar_bijective {U : Type u_1} [] {V : Type u_2} [] {φ : U ⥤q V} (hφ : φ.IsCovering) (u : U) :
Function.Bijective (φ.pathStar u)
@[simp]
theorem Quiver.starEquivCostar_symm_apply_fst {U : Type u_1} [] (u : U) (e : ) :
(.symm e).fst = e.fst
@[simp]
theorem Quiver.starEquivCostar_apply_snd {U : Type u_1} [] (u : U) (e : ) :
().snd = Quiver.reverse e.snd
@[simp]
theorem Quiver.starEquivCostar_apply_fst {U : Type u_1} [] (u : U) (e : ) :
().fst = e.fst
@[simp]
theorem Quiver.starEquivCostar_symm_apply_snd {U : Type u_1} [] (u : U) (e : ) :
(.symm e).snd = Quiver.reverse e.snd
def Quiver.starEquivCostar {U : Type u_1} [] (u : U) :

In a quiver with involutive inverses, the star and costar at every vertex are equivalent. This map is induced by Quiver.reverse.

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem Quiver.starEquivCostar_apply {U : Type u_1} [] {u : U} {v : U} (e : u v) :
@[simp]
theorem Quiver.starEquivCostar_symm_apply {U : Type u_1} [] {u : U} {v : U} (e : u v) :
.symm () =
theorem Prefunctor.costar_conj_star {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) [φ.MapReverse] (u : U) :
φ.costar u = (Quiver.starEquivCostar (φ.obj u)) φ.star u .symm
theorem Prefunctor.bijective_costar_iff_bijective_star {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) [φ.MapReverse] (u : U) :
Function.Bijective (φ.costar u) Function.Bijective (φ.star u)
theorem Prefunctor.isCovering_of_bijective_star {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) [φ.MapReverse] (h : ∀ (u : U), Function.Bijective (φ.star u)) :
φ.IsCovering
theorem Prefunctor.isCovering_of_bijective_costar {U : Type u_1} [] {V : Type u_2} [] (φ : U ⥤q V) [φ.MapReverse] (h : ∀ (u : U), Function.Bijective (φ.costar u)) :
φ.IsCovering