Theorem: CategoryTheory.Limits.lim_map
File: Mathlib/CategoryTheory/Limits/HasLimits.lean

Proof steps:
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F✝ : J ⥤ C
inst✝ : HasLimitsOfShape J C
F : J ⥤ C
⊢ { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (𝟙 F) =
    𝟙 ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.obj F)
state_after: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F✝ : J ⥤ C
inst✝ : HasLimitsOfShape J C
F : J ⥤ C
⊢ ∀ (j : J),
    { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (𝟙 F) ≫ limit.π F j =
      𝟙 ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.obj F) ≫ limit.π F j
tactic: apply Limits.limit.hom_ext
state_before: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F✝ : J ⥤ C
inst✝ : HasLimitsOfShape J C
F : J ⥤ C
⊢ ∀ (j : J),
    { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (𝟙 F) ≫ limit.π F j =
      𝟙 ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.obj F) ≫ limit.π F j
state_after: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F✝ : J ⥤ C
inst✝ : HasLimitsOfShape J C
F : J ⥤ C
j : J
⊢ { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (𝟙 F) ≫ limit.π F j =
    𝟙 ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.obj F) ≫ limit.π F j
tactic: intro j
state_before: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F✝ : J ⥤ C
inst✝ : HasLimitsOfShape J C
F : J ⥤ C
j : J
⊢ { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (𝟙 F) ≫ limit.π F j =
    𝟙 ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.obj F) ≫ limit.π F j
state_after: no goals
tactic: erw [limMap_π, Category.id_comp, Category.comp_id]
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F : J ⥤ C
inst✝ : HasLimitsOfShape J C
X✝ Y✝ Z✝ : J ⥤ C
α : X✝ ⟶ Y✝
β : Y✝ ⟶ Z✝
⊢ { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (α ≫ β) =
    { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map α ≫
      { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map β
state_after: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F : J ⥤ C
inst✝ : HasLimitsOfShape J C
X✝ Y✝ Z✝ : J ⥤ C
α : X✝ ⟶ Y✝
β : Y✝ ⟶ Z✝
⊢ ∀ (j : J),
    { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (α ≫ β) ≫ limit.π Z✝ j =
      ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.map α ≫
          { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map β) ≫
        limit.π Z✝ j
tactic: apply Limits.limit.hom_ext
state_before: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F : J ⥤ C
inst✝ : HasLimitsOfShape J C
X✝ Y✝ Z✝ : J ⥤ C
α : X✝ ⟶ Y✝
β : Y✝ ⟶ Z✝
⊢ ∀ (j : J),
    { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (α ≫ β) ≫ limit.π Z✝ j =
      ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.map α ≫
          { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map β) ≫
        limit.π Z✝ j
state_after: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F : J ⥤ C
inst✝ : HasLimitsOfShape J C
X✝ Y✝ Z✝ : J ⥤ C
α : X✝ ⟶ Y✝
β : Y✝ ⟶ Z✝
j : J
⊢ { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (α ≫ β) ≫ limit.π Z✝ j =
    ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.map α ≫
        { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map β) ≫
      limit.π Z✝ j
tactic: intro j
state_before: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F : J ⥤ C
inst✝ : HasLimitsOfShape J C
X✝ Y✝ Z✝ : J ⥤ C
α : X✝ ⟶ Y✝
β : Y✝ ⟶ Z✝
j : J
⊢ { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map (α ≫ β) ≫ limit.π Z✝ j =
    ({ obj := fun F => limit F, map := fun {X Y} α => limMap α }.map α ≫
        { obj := fun F => limit F, map := fun {X Y} α => limMap α }.map β) ≫
      limit.π Z✝ j
state_after: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F : J ⥤ C
inst✝ : HasLimitsOfShape J C
X✝ Y✝ Z✝ : J ⥤ C
α : X✝ ⟶ Y✝
β : Y✝ ⟶ Z✝
j : J
⊢ ((Cones.postcompose (α ≫ β)).obj (limit.cone X✝)).π.app j = (limit.cone X✝).π.app j ≫ α.app j ≫ β.app j
tactic: erw [assoc, IsLimit.fac, IsLimit.fac, ← assoc, IsLimit.fac, assoc]
state_before: case w
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F : J ⥤ C
inst✝ : HasLimitsOfShape J C
X✝ Y✝ Z✝ : J ⥤ C
α : X✝ ⟶ Y✝
β : Y✝ ⟶ Z✝
j : J
⊢ ((Cones.postcompose (α ≫ β)).obj (limit.cone X✝)).π.app j = (limit.cone X✝).π.app j ≫ α.app j ≫ β.app j
state_after: no goals
tactic: rfl