File: Mathlib/Analysis/Normed/Group/SemiNormedGrp/Kernels.lean

full_name: SemiNormedGrp₁.cokernelCocone
code: /-- Auxiliary definition for `HasCokernels SemiNormedGrp₁`. -/
def cokernelCocone {X Y : SemiNormedGrp₁.{u}} (f : X ⟶ Y) : Cofork f 0 
goal: CategoryTheory.Limits.Cofork f 0

full_name: SemiNormedGrp₁.cokernelLift
code: /-- Auxiliary definition for `HasCokernels SemiNormedGrp₁`. -/
def cokernelLift {X Y : SemiNormedGrp₁.{u}} (f : X ⟶ Y) (s : CokernelCofork f) :
    (cokernelCocone f).pt ⟶ s.pt 
goal: (SemiNormedGrp₁.cokernelCocone f).pt ⟶ s.pt

full_name: SemiNormedGrp₁.instHasCokernels
code: instance : HasCokernels SemiNormedGrp₁.{u} 
goal: CategoryTheory.Limits.HasCokernels SemiNormedGrp₁

full_name: SemiNormedGrp.instSubHom
code: instance {V W : SemiNormedGrp.{u}} : Sub (V ⟶ W) 
goal: Sub (V ⟶ W)

full_name: SemiNormedGrp.instNormHom
code: noncomputable instance {V W : SemiNormedGrp.{u}} : Norm (V ⟶ W) 
goal: Norm (V ⟶ W)

full_name: SemiNormedGrp.instNNNormHom
code: noncomputable instance {V W : SemiNormedGrp.{u}} : NNNorm (V ⟶ W) 
goal: NNNorm (V ⟶ W)

full_name: SemiNormedGrp.fork
code: /-- The equalizer cone for a parallel pair of morphisms of seminormed groups. -/
def fork {V W : SemiNormedGrp.{u}} (f g : V ⟶ W) : Fork f g 
goal: CategoryTheory.Limits.Fork f g

full_name: SemiNormedGrp.hasLimit_parallelPair
code: instance hasLimit_parallelPair {V W : SemiNormedGrp.{u}} (f g : V ⟶ W) :
    HasLimit (parallelPair f g) 
goal: CategoryTheory.Limits.HasLimit (CategoryTheory.Limits.parallelPair f g)

full_name: SemiNormedGrp.instHasEqualizers
code: instance : Limits.HasEqualizers.{u, u + 1} SemiNormedGrp 
goal: CategoryTheory.Limits.HasEqualizers SemiNormedGrp

full_name: SemiNormedGrp.cokernelCocone
code: /-- Auxiliary definition for `HasCokernels SemiNormedGrp`. -/
noncomputable
def cokernelCocone {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) : Cofork f 0 
goal: CategoryTheory.Limits.Cofork f 0

full_name: SemiNormedGrp.cokernelLift
code: /-- Auxiliary definition for `HasCokernels SemiNormedGrp`. -/
noncomputable
def cokernelLift {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) (s : CokernelCofork f) :
    (cokernelCocone f).pt ⟶ s.pt 
goal: (SemiNormedGrp.cokernelCocone f).pt ⟶ s.pt

full_name: SemiNormedGrp.isColimitCokernelCocone
code: /-- Auxiliary definition for `HasCokernels SemiNormedGrp`. -/
noncomputable
def isColimitCokernelCocone {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) :
    IsColimit (cokernelCocone f) 
goal: CategoryTheory.Limits.IsColimit (SemiNormedGrp.cokernelCocone f)

full_name: SemiNormedGrp.instHasCokernels
code: instance : HasCokernels SemiNormedGrp.{u} 
goal: CategoryTheory.Limits.HasCokernels SemiNormedGrp

full_name: SemiNormedGrp.explicitCokernel
code: /-- An explicit choice of cokernel, which has good properties with respect to the norm. -/
noncomputable
def explicitCokernel {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) : SemiNormedGrp.{u} 
goal: SemiNormedGrp

full_name: SemiNormedGrp.explicitCokernelDesc
code: /-- Descend to the explicit cokernel. -/
noncomputable
def explicitCokernelDesc {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z} (w : f ≫ g = 0) :
    explicitCokernel f ⟶ Z 
goal: SemiNormedGrp.explicitCokernel f ⟶ Z

full_name: SemiNormedGrp.explicitCokernelπ
code: /-- The projection from `Y` to the explicit cokernel of `X ⟶ Y`. -/
noncomputable
def explicitCokernelπ {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) : Y ⟶ explicitCokernel f 
goal: Y ⟶ SemiNormedGrp.explicitCokernel f

full_name: SemiNormedGrp.explicitCokernelπ_surjective
code: theorem explicitCokernelπ_surjective {X Y : SemiNormedGrp.{u}} {f : X ⟶ Y} :
    Function.Surjective (explicitCokernelπ f) 
goal: Function.Surjective ⇑(SemiNormedGrp.explicitCokernelπ f)

full_name: SemiNormedGrp.comp_explicitCokernelπ
code: @[simp, reassoc]
theorem comp_explicitCokernelπ {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) :
    f ≫ explicitCokernelπ f = 0 
goal: f ≫ SemiNormedGrp.explicitCokernelπ f = 0

full_name: SemiNormedGrp.explicitCokernelπ_apply_dom_eq_zero
code: @[simp]
theorem explicitCokernelπ_apply_dom_eq_zero {X Y : SemiNormedGrp.{u}} {f : X ⟶ Y} (x : X) :
    (explicitCokernelπ f) (f x) = 0 
goal: (SemiNormedGrp.explicitCokernelπ f) (f x) = 0

full_name: SemiNormedGrp.explicitCokernelπ_desc
code: @[simp, reassoc]
theorem explicitCokernelπ_desc {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    (w : f ≫ g = 0) : explicitCokernelπ f ≫ explicitCokernelDesc w = g 
goal: SemiNormedGrp.explicitCokernelπ f ≫ SemiNormedGrp.explicitCokernelDesc w = g

full_name: SemiNormedGrp.explicitCokernelπ_desc_apply
code: @[simp]
theorem explicitCokernelπ_desc_apply {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    {cond : f ≫ g = 0} (x : Y) : explicitCokernelDesc cond (explicitCokernelπ f x) = g x 
goal: (SemiNormedGrp.explicitCokernelDesc cond) ((SemiNormedGrp.explicitCokernelπ f) x) = g x

full_name: SemiNormedGrp.explicitCokernelDesc_unique
code: theorem explicitCokernelDesc_unique {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    (w : f ≫ g = 0) (e : explicitCokernel f ⟶ Z) (he : explicitCokernelπ f ≫ e = g) :
    e = explicitCokernelDesc w 
goal: e = SemiNormedGrp.explicitCokernelDesc w

full_name: SemiNormedGrp.explicitCokernelDesc_comp_eq_desc
code: theorem explicitCokernelDesc_comp_eq_desc {X Y Z W : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    -- Porting note: renamed `cond` to `cond'` to avoid
    -- failed to rewrite using equation theorems for 'cond'
    {h : Z ⟶ W} {cond' : f ≫ g = 0} :
    explicitCokernelDesc cond' ≫ h =
      explicitCokernelDesc
        (show f ≫ g ≫ h = 0 by rw [← CategoryTheory.Category.assoc, cond', Limits.zero_comp]) 
goal: SemiNormedGrp.explicitCokernelDesc cond' ≫ h = SemiNormedGrp.explicitCokernelDesc ⋯

full_name: SemiNormedGrp.explicitCokernelDesc_zero
code: @[simp]
theorem explicitCokernelDesc_zero {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} :
    explicitCokernelDesc (show f ≫ (0 : Y ⟶ Z) = 0 from CategoryTheory.Limits.comp_zero) = 0 
goal: SemiNormedGrp.explicitCokernelDesc ⋯ = 0

full_name: SemiNormedGrp.explicitCokernel_hom_ext
code: @[ext]
theorem explicitCokernel_hom_ext {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y}
    (e₁ e₂ : explicitCokernel f ⟶ Z) (h : explicitCokernelπ f ≫ e₁ = explicitCokernelπ f ≫ e₂) :
    e₁ = e₂ 
goal: e₁ = e₂

full_name: SemiNormedGrp.explicitCokernelπ.epi
code: instance explicitCokernelπ.epi {X Y : SemiNormedGrp.{u}} {f : X ⟶ Y} :
    Epi (explicitCokernelπ f) 
goal: CategoryTheory.Epi (SemiNormedGrp.explicitCokernelπ f)

full_name: SemiNormedGrp.isQuotient_explicitCokernelπ
code: theorem isQuotient_explicitCokernelπ {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) :
    NormedAddGroupHom.IsQuotient (explicitCokernelπ f) 
goal: NormedAddGroupHom.IsQuotient (SemiNormedGrp.explicitCokernelπ f)

full_name: SemiNormedGrp.normNoninc_explicitCokernelπ
code: theorem normNoninc_explicitCokernelπ {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) :
    (explicitCokernelπ f).NormNoninc 
goal: NormedAddGroupHom.NormNoninc (SemiNormedGrp.explicitCokernelπ f)

full_name: SemiNormedGrp.explicitCokernelDesc_norm_le_of_norm_le
code: theorem explicitCokernelDesc_norm_le_of_norm_le {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y}
    {g : Y ⟶ Z} (w : f ≫ g = 0) (c : ℝ≥0) (h : ‖g‖ ≤ c) : ‖explicitCokernelDesc w‖ ≤ c 
goal: ‖SemiNormedGrp.explicitCokernelDesc w‖ ≤ ↑c

full_name: SemiNormedGrp.explicitCokernelDesc_normNoninc
code: theorem explicitCokernelDesc_normNoninc {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    {cond : f ≫ g = 0} (hg : g.NormNoninc) : (explicitCokernelDesc cond).NormNoninc 
goal: NormedAddGroupHom.NormNoninc (SemiNormedGrp.explicitCokernelDesc cond)

full_name: SemiNormedGrp.explicitCokernelDesc_comp_eq_zero
code: theorem explicitCokernelDesc_comp_eq_zero {X Y Z W : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    {h : Z ⟶ W} (cond : f ≫ g = 0) (cond2 : g ≫ h = 0) : explicitCokernelDesc cond ≫ h = 0 
goal: SemiNormedGrp.explicitCokernelDesc cond ≫ h = 0

full_name: SemiNormedGrp.explicitCokernelDesc_norm_le
code: theorem explicitCokernelDesc_norm_le {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    (w : f ≫ g = 0) : ‖explicitCokernelDesc w‖ ≤ ‖g‖ 
goal: ‖SemiNormedGrp.explicitCokernelDesc w‖ ≤ ‖g‖

full_name: SemiNormedGrp.explicitCokernelIso
code: /-- The explicit cokernel is isomorphic to the usual cokernel. -/
noncomputable
def explicitCokernelIso {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) :
    explicitCokernel f ≅ cokernel f 
goal: SemiNormedGrp.explicitCokernel f ≅ CategoryTheory.Limits.cokernel f

full_name: SemiNormedGrp.explicitCokernelIso_hom_π
code: @[simp]
theorem explicitCokernelIso_hom_π {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) :
    explicitCokernelπ f ≫ (explicitCokernelIso f).hom = cokernel.π _ 
goal: SemiNormedGrp.explicitCokernelπ f ≫ (SemiNormedGrp.explicitCokernelIso f).hom = CategoryTheory.Limits.cokernel.π f

full_name: SemiNormedGrp.explicitCokernelIso_inv_π
code: @[simp]
theorem explicitCokernelIso_inv_π {X Y : SemiNormedGrp.{u}} (f : X ⟶ Y) :
    cokernel.π f ≫ (explicitCokernelIso f).inv = explicitCokernelπ f 
goal: CategoryTheory.Limits.cokernel.π f ≫ (SemiNormedGrp.explicitCokernelIso f).inv = SemiNormedGrp.explicitCokernelπ f

full_name: SemiNormedGrp.explicitCokernelIso_hom_desc
code: @[simp]
theorem explicitCokernelIso_hom_desc {X Y Z : SemiNormedGrp.{u}} {f : X ⟶ Y} {g : Y ⟶ Z}
    (w : f ≫ g = 0) :
    (explicitCokernelIso f).hom ≫ cokernel.desc f g w = explicitCokernelDesc w 
goal: (SemiNormedGrp.explicitCokernelIso f).hom ≫ CategoryTheory.Limits.cokernel.desc f g w =
  SemiNormedGrp.explicitCokernelDesc w

full_name: SemiNormedGrp.explicitCokernel.map
code: /-- A special case of `CategoryTheory.Limits.cokernel.map` adapted to `explicitCokernel`. -/
noncomputable def explicitCokernel.map {A B C D : SemiNormedGrp.{u}}
    {fab : A ⟶ B} {fbd : B ⟶ D} {fac : A ⟶ C} {fcd : C ⟶ D} (h : fab ≫ fbd = fac ≫ fcd) :
    explicitCokernel fab ⟶ explicitCokernel fcd 
goal: SemiNormedGrp.explicitCokernel fab ⟶ SemiNormedGrp.explicitCokernel fcd

full_name: SemiNormedGrp.ExplicitCoker.map_desc
code: /-- A special case of `CategoryTheory.Limits.cokernel.map_desc` adapted to `explicitCokernel`. -/
theorem ExplicitCoker.map_desc {A B C D B' D' : SemiNormedGrp.{u}}
    {fab : A ⟶ B} {fbd : B ⟶ D} {fac : A ⟶ C} {fcd : C ⟶ D} {h : fab ≫ fbd = fac ≫ fcd}
    {fbb' : B ⟶ B'} {fdd' : D ⟶ D'} {condb : fab ≫ fbb' = 0} {condd : fcd ≫ fdd' = 0} {g : B' ⟶ D'}
    (h' : fbb' ≫ g = fbd ≫ fdd') :
    explicitCokernelDesc condb ≫ g = explicitCokernel.map h ≫ explicitCokernelDesc condd 
goal: SemiNormedGrp.explicitCokernelDesc condb ≫ g =
  SemiNormedGrp.explicitCokernel.map h ≫ SemiNormedGrp.explicitCokernelDesc condd