Module docstring
{"# Pushing a quiver structure along a map
Given a map σ : V → W and a Quiver instance on V, this files defines a Quiver instance
on W by associating to each arrow v ⟶ v' in V an arrow σ v ⟶ σ v' in W.
"}
{"# Pushing a quiver structure along a map
Given a map σ : V → W and a Quiver instance on V, this files defines a Quiver instance
on W by associating to each arrow v ⟶ v' in V an arrow σ v ⟶ σ v' in W.
"}
Quiver.Push
definition
(_ : V → W)
/-- The `Quiver` instance obtained by pushing arrows of `V` along the map `σ : V → W` -/
@[nolint unusedArguments]
def Push (_ : V → W) :=
W
Quiver.instNonemptyPush
instance
[h : Nonempty W] : Nonempty (Push σ)
Quiver.PushQuiver
inductive
{V : Type u} [Quiver.{v} V] {W : Type u₂} (σ : V → W) : W → W → Type max u u₂ v
/-- The quiver structure obtained by pushing arrows of `V` along the map `σ : V → W` -/
inductive PushQuiver {V : Type u} [Quiver.{v} V] {W : Type u₂} (σ : V → W) : W → W → Type max u u₂ v
| arrow {X Y : V} (f : X ⟶ Y) : PushQuiver σ (σ X) (σ Y)
Quiver.instPush
instance
: Quiver (Push σ)
instance : Quiver (Push σ) :=
⟨PushQuiver σ⟩
Quiver.Push.of
definition
: V ⥤q Push σ
/-- The prefunctor induced by pushing arrows via `σ` -/
def of : V ⥤q Push σ where
obj := σ
map f := PushQuiver.arrow f
Quiver.Push.of_obj
theorem
: (of σ).obj = σ
Quiver.Push.lift
definition
: Push σ ⥤q W'
/-- Given a function `τ : W → W'` and a prefunctor `φ : V ⥤q W'`, one can extend `τ` to be
a prefunctor `W ⥤q W'` if `τ` and `σ` factorize `φ` at the level of objects, where `W` is given
the pushforward quiver structure `Push σ`. -/
noncomputable def lift : PushPush σ ⥤q W' where
obj := τ
map :=
@PushQuiver.rec V _ W σ (fun X Y _ => τ X ⟶ τ Y) @fun X Y f => by
dsimp only
rw [← h X, ← h Y]
exact φ.map f
Quiver.Push.lift_obj
theorem
: (lift σ φ τ h).obj = τ
Quiver.Push.lift_comp
theorem
: (of σ ⋙q lift σ φ τ h) = φ
theorem lift_comp : (ofof σ ⋙q lift σ φ τ h) = φ := by
fapply Prefunctor.ext
· rintro X
simp only [Prefunctor.comp_obj]
apply Eq.symm
exact h X
· rintro X Y f
simp only [Prefunctor.comp_map]
apply eq_of_heq
iterate 2 apply (cast_heq _ _).trans
apply HEq.symm
apply (eqRec_heq _ _).trans
have : ∀ {α γ} {β : α → γ → Sort _} {a a'} (p : a = a') g (b : β a g), HEq (p ▸ b) b := by
intros
subst_vars
rfl
apply this
Quiver.Push.lift_unique
theorem
(Φ : Push σ ⥤q W') (Φ₀ : Φ.obj = τ) (Φcomp : (of σ ⋙q Φ) = φ) : Φ = lift σ φ τ h
theorem lift_unique (Φ : PushPush σ ⥤q W') (Φ₀ : Φ.obj = τ) (Φcomp : (ofof σ ⋙q Φ) = φ) :
Φ = lift σ φ τ h := by
dsimp only [of, lift]
fapply Prefunctor.ext
· intro X
simp only
rw [Φ₀]
· rintro _ _ ⟨⟩
subst_vars
simp only [Prefunctor.comp_map, cast_eq]
rfl