File: Mathlib/Combinatorics/Quiver/Covering.lean

full_name: Quiver.Star
code: /-- 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)`. -/
abbrev Quiver.Star (u : U) 
goal: Type (max u_1 u)

full_name: Quiver.Star.mk
code: /-- Constructor for `Quiver.Star`. Defined to be `Sigma.mk`. -/
protected abbrev Quiver.Star.mk {u v : U} (f : u ⟶ v) : Quiver.Star u 
goal: Quiver.Star u

full_name: Quiver.Costar
code: /-- 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)`. -/
abbrev Quiver.Costar (v : U) 
goal: Type (max u_1 u)

full_name: Quiver.Costar.mk
code: /-- Constructor for `Quiver.Costar`. Defined to be `Sigma.mk`. -/
protected abbrev Quiver.Costar.mk {u v : U} (f : u ⟶ v) : Quiver.Costar v 
goal: Quiver.Costar v

full_name: Prefunctor.star_fst
code: /-- A prefunctor induces a map of `Quiver.Star` at every vertex. -/
@[simps]
def Prefunctor.star (u : U) : Quiver.Star u → Quiver.Star (φ.obj u) 
goal: ∀ (a : Quiver.Star u), (φ.star u a).fst = φ.obj a.fst

full_name: Prefunctor.star_snd
code: /-- A prefunctor induces a map of `Quiver.Star` at every vertex. -/
@[simps]
def Prefunctor.star (u : U) : Quiver.Star u → Quiver.Star (φ.obj u) 
goal: ∀ (a : Quiver.Star u), (φ.star u a).snd = φ.map a.snd

full_name: Prefunctor.star
code: /-- A prefunctor induces a map of `Quiver.Star` at every vertex. -/
@[simps]
def Prefunctor.star (u : U) : Quiver.Star u → Quiver.Star (φ.obj u) 
goal: Quiver.Star u → Quiver.Star (φ.obj u)

full_name: Prefunctor.costar_fst
code: /-- A prefunctor induces a map of `Quiver.Costar` at every vertex. -/
@[simps]
def Prefunctor.costar (u : U) : Quiver.Costar u → Quiver.Costar (φ.obj u) 
goal: ∀ (a : Quiver.Costar u), (φ.costar u a).fst = φ.obj a.fst

full_name: Prefunctor.costar
code: /-- A prefunctor induces a map of `Quiver.Costar` at every vertex. -/
@[simps]
def Prefunctor.costar (u : U) : Quiver.Costar u → Quiver.Costar (φ.obj u) 
goal: Quiver.Costar u → Quiver.Costar (φ.obj u)

full_name: Prefunctor.costar_snd
code: /-- A prefunctor induces a map of `Quiver.Costar` at every vertex. -/
@[simps]
def Prefunctor.costar (u : U) : Quiver.Costar u → Quiver.Costar (φ.obj u) 
goal: ∀ (a : Quiver.Costar u), (φ.costar u a).snd = φ.map a.snd

full_name: Prefunctor.star_apply
code: @[simp]
theorem Prefunctor.star_apply {u v : U} (e : u ⟶ v) :
    φ.star u (Quiver.Star.mk e) = Quiver.Star.mk (φ.map e) 
goal: φ.star u (Quiver.Star.mk e) = Quiver.Star.mk (φ.map e)

full_name: Prefunctor.costar_apply
code: @[simp]
theorem Prefunctor.costar_apply {u v : U} (e : u ⟶ v) :
    φ.costar v (Quiver.Costar.mk e) = Quiver.Costar.mk (φ.map e) 
goal: φ.costar v (Quiver.Costar.mk e) = Quiver.Costar.mk (φ.map e)

full_name: Prefunctor.star_comp
code: theorem Prefunctor.star_comp (u : U) : (φ ⋙q ψ).star u = ψ.star (φ.obj u) ∘ φ.star u 
goal: (φ ⋙q ψ).star u = ψ.star (φ.obj u) ∘ φ.star u

full_name: Prefunctor.costar_comp
code: theorem Prefunctor.costar_comp (u : U) : (φ ⋙q ψ).costar u = ψ.costar (φ.obj u) ∘ φ.costar u 
goal: (φ ⋙q ψ).costar u = ψ.costar (φ.obj u) ∘ φ.costar u

full_name: Prefunctor.IsCovering
code: /-- A prefunctor is a covering of quivers if it defines bijections on all stars and costars. -/
protected structure Prefunctor.IsCovering : Prop where
  star_bijective : ∀ u, Bijective (φ.star u)
  costar_bijective : ∀ u, Bijective (φ.costar u)
goal: Prop

full_name: Prefunctor.IsCovering.star_bijective
code: /-- A prefunctor is a covering of quivers if it defines bijections on all stars and costars. -/
protected structure Prefunctor.IsCovering : Prop where
  star_bijective : ∀ u, Bijective (φ.star u)
  costar_bijective : ∀ u, Bijective (φ.costar u)
goal: Function.Bijective (φ.star u)

full_name: Prefunctor.IsCovering.costar_bijective
code: /-- A prefunctor is a covering of quivers if it defines bijections on all stars and costars. -/
protected structure Prefunctor.IsCovering : Prop where
  star_bijective : ∀ u, Bijective (φ.star u)
  costar_bijective : ∀ u, Bijective (φ.costar u)
goal: Function.Bijective (φ.costar u)

full_name: Prefunctor.IsCovering.map_injective
code: @[simp]
theorem Prefunctor.IsCovering.map_injective (hφ : φ.IsCovering) {u v : U} :
    Injective fun f : u ⟶ v => φ.map f 
goal: Function.Injective fun f => φ.map f

full_name: Prefunctor.IsCovering.comp
code: theorem Prefunctor.IsCovering.comp (hφ : φ.IsCovering) (hψ : ψ.IsCovering) : (φ ⋙q ψ).IsCovering 
goal: (φ ⋙q ψ).IsCovering

full_name: Prefunctor.IsCovering.of_comp_right
code: theorem Prefunctor.IsCovering.of_comp_right (hψ : ψ.IsCovering) (hφψ : (φ ⋙q ψ).IsCovering) :
    φ.IsCovering 
goal: φ.IsCovering

full_name: Prefunctor.IsCovering.of_comp_left
code: theorem Prefunctor.IsCovering.of_comp_left (hφ : φ.IsCovering) (hφψ : (φ ⋙q ψ).IsCovering)
    (φsur : Surjective φ.obj) : ψ.IsCovering 
goal: ψ.IsCovering

full_name: Quiver.symmetrifyStar
code: /-- 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. -/
def Quiver.symmetrifyStar (u : U) :
    Quiver.Star (Symmetrify.of.obj u) ≃ Quiver.Star u ⊕ Quiver.Costar u 
goal: Quiver.Star (Quiver.Symmetrify.of.obj u) ≃ Quiver.Star u ⊕ Quiver.Costar u

full_name: Quiver.symmetrifyCostar
code: /-- 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. -/
def Quiver.symmetrifyCostar (u : U) :
    Quiver.Costar (Symmetrify.of.obj u) ≃ Quiver.Costar u ⊕ Quiver.Star u 
goal: Quiver.Costar (Quiver.Symmetrify.of.obj u) ≃ Quiver.Costar u ⊕ Quiver.Star u

full_name: Prefunctor.symmetrifyStar
code: theorem Prefunctor.symmetrifyStar (u : U) :
    φ.symmetrify.star u =
      (Quiver.symmetrifyStar _).symm ∘ Sum.map (φ.star u) (φ.costar u) ∘
        Quiver.symmetrifyStar u 
goal: φ.symmetrify.star u =
  ⇑(Quiver.symmetrifyStar (φ.obj u)).symm ∘ Sum.map (φ.star u) (φ.costar u) ∘ ⇑(Quiver.symmetrifyStar u)

full_name: Prefunctor.symmetrifyCostar
code: protected theorem Prefunctor.symmetrifyCostar (u : U) :
    φ.symmetrify.costar u =
      (Quiver.symmetrifyCostar _).symm ∘
        Sum.map (φ.costar u) (φ.star u) ∘ Quiver.symmetrifyCostar u 
goal: φ.symmetrify.costar u =
  ⇑(Quiver.symmetrifyCostar (φ.obj u)).symm ∘ Sum.map (φ.costar u) (φ.star u) ∘ ⇑(Quiver.symmetrifyCostar u)

full_name: Prefunctor.IsCovering.symmetrify
code: protected theorem Prefunctor.IsCovering.symmetrify (hφ : φ.IsCovering) :
    φ.symmetrify.IsCovering 
goal: φ.symmetrify.IsCovering

full_name: Quiver.PathStar
code: /-- 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`. -/
abbrev Quiver.PathStar (u : U) 
goal: Type (max u_1 u u_1)

full_name: Quiver.PathStar.mk
code: /-- Constructor for `Quiver.PathStar`. Defined to be `Sigma.mk`. -/
protected abbrev Quiver.PathStar.mk {u v : U} (p : Path u v) : Quiver.PathStar u 
goal: Quiver.PathStar u

full_name: Prefunctor.pathStar
code: /-- A prefunctor induces a map of path stars. -/
def Prefunctor.pathStar (u : U) : Quiver.PathStar u → Quiver.PathStar (φ.obj u) 
goal: Quiver.PathStar u → Quiver.PathStar (φ.obj u)

full_name: Prefunctor.pathStar_apply
code: @[simp]
theorem Prefunctor.pathStar_apply {u v : U} (p : Path u v) :
    φ.pathStar u (Quiver.PathStar.mk p) = Quiver.PathStar.mk (φ.mapPath p) 
goal: φ.pathStar u (Quiver.PathStar.mk p) = Quiver.PathStar.mk (φ.mapPath p)

full_name: Prefunctor.pathStar_injective
code: theorem Prefunctor.pathStar_injective (hφ : ∀ u, Injective (φ.star u)) (u : U) :
    Injective (φ.pathStar u) 
goal: Function.Injective (φ.pathStar u)

full_name: Prefunctor.pathStar_surjective
code: theorem Prefunctor.pathStar_surjective (hφ : ∀ u, Surjective (φ.star u)) (u : U) :
    Surjective (φ.pathStar u) 
goal: Function.Surjective (φ.pathStar u)

full_name: Prefunctor.pathStar_bijective
code: theorem Prefunctor.pathStar_bijective (hφ : ∀ u, Bijective (φ.star u)) (u : U) :
    Bijective (φ.pathStar u) 
goal: Function.Bijective (φ.pathStar u)

full_name: Prefunctor.IsCovering.pathStar_bijective
code: protected theorem pathStar_bijective (hφ : φ.IsCovering) (u : U) : Bijective (φ.pathStar u) 
goal: Function.Bijective (φ.pathStar u)

full_name: Quiver.starEquivCostar_symm_apply_fst
code: /-- In a quiver with involutive inverses, the star and costar at every vertex are equivalent.
This map is induced by `Quiver.reverse`. -/
@[simps]
def Quiver.starEquivCostar (u : U) : Quiver.Star u ≃ Quiver.Costar u 
goal: ((Quiver.starEquivCostar u).symm e).fst = e.fst

full_name: Quiver.starEquivCostar
code: /-- In a quiver with involutive inverses, the star and costar at every vertex are equivalent.
This map is induced by `Quiver.reverse`. -/
@[simps]
def Quiver.starEquivCostar (u : U) : Quiver.Star u ≃ Quiver.Costar u 
goal: Quiver.Star u ≃ Quiver.Costar u

full_name: Quiver.starEquivCostar_apply_fst
code: /-- In a quiver with involutive inverses, the star and costar at every vertex are equivalent.
This map is induced by `Quiver.reverse`. -/
@[simps]
def Quiver.starEquivCostar (u : U) : Quiver.Star u ≃ Quiver.Costar u 
goal: ((Quiver.starEquivCostar u) e).fst = e.fst

full_name: Quiver.starEquivCostar_apply_snd
code: /-- In a quiver with involutive inverses, the star and costar at every vertex are equivalent.
This map is induced by `Quiver.reverse`. -/
@[simps]
def Quiver.starEquivCostar (u : U) : Quiver.Star u ≃ Quiver.Costar u 
goal: ((Quiver.starEquivCostar u) e).snd = Quiver.reverse e.snd

full_name: Quiver.starEquivCostar_symm_apply_snd
code: /-- In a quiver with involutive inverses, the star and costar at every vertex are equivalent.
This map is induced by `Quiver.reverse`. -/
@[simps]
def Quiver.starEquivCostar (u : U) : Quiver.Star u ≃ Quiver.Costar u 
goal: ((Quiver.starEquivCostar u).symm e).snd = Quiver.reverse e.snd

full_name: Quiver.starEquivCostar_apply
code: @[simp]
theorem Quiver.starEquivCostar_apply {u v : U} (e : u ⟶ v) :
    Quiver.starEquivCostar u (Quiver.Star.mk e) = Quiver.Costar.mk (reverse e) 
goal: (Quiver.starEquivCostar u) (Quiver.Star.mk e) = Quiver.Costar.mk (Quiver.reverse e)

full_name: Quiver.starEquivCostar_symm_apply
code: @[simp]
theorem Quiver.starEquivCostar_symm_apply {u v : U} (e : u ⟶ v) :
    (Quiver.starEquivCostar v).symm (Quiver.Costar.mk e) = Quiver.Star.mk (reverse e) 
goal: (Quiver.starEquivCostar v).symm (Quiver.Costar.mk e) = Quiver.Star.mk (Quiver.reverse e)

full_name: Prefunctor.costar_conj_star
code: theorem Prefunctor.costar_conj_star (u : U) :
    φ.costar u = Quiver.starEquivCostar (φ.obj u) ∘ φ.star u ∘ (Quiver.starEquivCostar u).symm 
goal: φ.costar u = ⇑(Quiver.starEquivCostar (φ.obj u)) ∘ φ.star u ∘ ⇑(Quiver.starEquivCostar u).symm

full_name: Prefunctor.bijective_costar_iff_bijective_star
code: theorem Prefunctor.bijective_costar_iff_bijective_star (u : U) :
    Bijective (φ.costar u) ↔ Bijective (φ.star u) 
goal: Function.Bijective (φ.costar u) ↔ Function.Bijective (φ.star u)

full_name: Prefunctor.isCovering_of_bijective_star
code: theorem Prefunctor.isCovering_of_bijective_star (h : ∀ u, Bijective (φ.star u)) : φ.IsCovering 
goal: φ.IsCovering

full_name: Prefunctor.isCovering_of_bijective_costar
code: theorem Prefunctor.isCovering_of_bijective_costar (h : ∀ u, Bijective (φ.costar u)) :
    φ.IsCovering 
goal: φ.IsCovering