Theorem: CategoryTheory.Limits.isLimitConeOfAdj_lift
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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
j : J
⊢ (fun s => (adj.homEquiv s.pt F) s.π) s ≫ (coneOfAdj adj F).π.app j = s.π.app j
state_after: 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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
j : J
eq :
  ((L ⋙ const J).map s.π ≫ adj.counit.app F).app j = (adj.counit.app ((const J).obj s.pt) ≫ (𝟭 (J ⥤ C)).map s.π).app j
⊢ (fun s => (adj.homEquiv s.pt F) s.π) s ≫ (coneOfAdj adj F).π.app j = s.π.app j
tactic: have eq := NatTrans.congr_app (adj.counit.naturality s.π) j
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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
j : J
eq :
  ((L ⋙ const J).map s.π ≫ adj.counit.app F).app j = (adj.counit.app ((const J).obj s.pt) ≫ (𝟭 (J ⥤ C)).map s.π).app j
⊢ (fun s => (adj.homEquiv s.pt F) s.π) s ≫ (coneOfAdj adj F).π.app j = s.π.app j
state_after: 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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
j : J
eq :
  ((L ⋙ const J).map s.π ≫ adj.counit.app F).app j = (adj.counit.app ((const J).obj s.pt) ≫ (𝟭 (J ⥤ C)).map s.π).app j
eq' : ((const J).map (adj.unit.app s.pt) ≫ adj.counit.app ((const J).obj s.pt)).app j = (𝟙 ((const J).obj s.pt)).app j
⊢ (fun s => (adj.homEquiv s.pt F) s.π) s ≫ (coneOfAdj adj F).π.app j = s.π.app j
tactic: have eq' := NatTrans.congr_app (adj.left_triangle_components s.pt) j
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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
j : J
eq :
  ((L ⋙ const J).map s.π ≫ adj.counit.app F).app j = (adj.counit.app ((const J).obj s.pt) ≫ (𝟭 (J ⥤ C)).map s.π).app j
eq' : ((const J).map (adj.unit.app s.pt) ≫ adj.counit.app ((const J).obj s.pt)).app j = (𝟙 ((const J).obj s.pt)).app j
⊢ (fun s => (adj.homEquiv s.pt F) s.π) s ≫ (coneOfAdj adj F).π.app j = s.π.app j
state_after: 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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
j : J
eq : L.map s.π ≫ (adj.counit.app F).app j = (adj.counit.app ((const J).obj s.pt)).app j ≫ s.π.app j
eq' : adj.unit.app s.pt ≫ (adj.counit.app ((const J).obj s.pt)).app j = 𝟙 s.pt
⊢ (adj.homEquiv s.pt F) s.π ≫ (adj.counit.app F).app j = s.π.app j
tactic: dsimp at eq eq' ⊢
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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
j : J
eq : L.map s.π ≫ (adj.counit.app F).app j = (adj.counit.app ((const J).obj s.pt)).app j ≫ s.π.app j
eq' : adj.unit.app s.pt ≫ (adj.counit.app ((const J).obj s.pt)).app j = 𝟙 s.pt
⊢ (adj.homEquiv s.pt F) s.π ≫ (adj.counit.app F).app j = s.π.app j
state_after: no goals
tactic: rw [Adjunction.homEquiv_unit, assoc, eq, reassoc_of% eq']
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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
m : s.pt ⟶ (coneOfAdj adj F).pt
hm : ∀ (j : J), m ≫ (coneOfAdj adj F).π.app j = s.π.app j
⊢ (adj.homEquiv s.pt F).symm m = (adj.homEquiv s.pt F).symm ((fun s => (adj.homEquiv s.pt F) s.π) s)
state_after: case w.h
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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
m : s.pt ⟶ (coneOfAdj adj F).pt
hm : ∀ (j : J), m ≫ (coneOfAdj adj F).π.app j = s.π.app j
j : J
⊢ ((adj.homEquiv s.pt F).symm m).app j = ((adj.homEquiv s.pt F).symm ((fun s => (adj.homEquiv s.pt F) s.π) s)).app j
tactic: ext j
state_before: case w.h
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
L : (J ⥤ C) ⥤ C
adj : const J ⊣ L
F : J ⥤ C
s : Cone F
m : s.pt ⟶ (coneOfAdj adj F).pt
hm : ∀ (j : J), m ≫ (coneOfAdj adj F).π.app j = s.π.app j
j : J
⊢ ((adj.homEquiv s.pt F).symm m).app j = ((adj.homEquiv s.pt F).symm ((fun s => (adj.homEquiv s.pt F) s.π) s)).app j
state_after: no goals
tactic: simpa using hm j