awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.Adjunction (goal)
Goal:
C₁ : Type u_1
C₂ : Type u_2
D₁ : Type u_3
D₂ : Type u_4
inst : Category.{v_1, u_1} C₁
inst_1 : Category.{v_2, u_2} C₂
inst_2 : Category.{v_3, u_3} D₁
inst_3 : Category.{v_4, u_4} D₂
G : Functor.{v_1, v_2, u_1, u_2} C₁ C₂
F : Functor.{v_2, v_1, u_2, u_1} C₂ C₁
adj : G ⊣ F
L₁ : Functor.{v_1, v_3, u_1, u_3} C₁ D₁
L₂ : Functor.{v_2, v_4, u_2, u_4} C₂ D₂
W₁ : MorphismProperty.{v_1, u_1} C₁
W₂ : MorphismProperty.{v_2, u_2} C₂
inst_4 : L₁.IsLocalization W₁
inst_5 : L₂.IsLocalization W₂
G' : Functor.{v_3, v_4, u_3, u_4} D₁ D₂
F' : Functor.{v_4, v_3, u_4, u_3} D₂ D₁
α : L₁ ⋙ G' ⟶ G ⋙ L₂
β : F ⋙ L₁ ⟶ L₂ ⋙ F'
inst_6 : G'.IsLeftDerivedFunctor α W₁
inst_7 : F'.IsRightDerivedFunctor β W₂
η : 𝟭 D₁ ⟶ G' ⋙ F'
ε : F' ⋙ G' ⟶ 𝟭 D₂
hη : ∀ (X₁ : C₁), η.app (L₁.obj X₁) ≫ F'.map (α.app X₁) = L₁.map (adj.unit.app X₁) ≫ β.app (G.obj X₁)
hε : ∀ (X₂ : C₂), G'.map (β.app X₂) ≫ ε.app (L₂.obj X₂) = α.app (F.obj X₂) ≫ L₂.map (adj.counit.app X₂)
X₂ : C₂
eq₁ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) = η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂))
eq₃ : L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
eq₂ :
  F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) =
    F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
hγ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
hγ₁ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₂ :
  β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₃ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₄ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₅ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₆ : L₁.map (adj.unit.app (F.obj X₂)) ≫ β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
⊢ β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫
          𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) ≫ 𝟙 (F'.obj (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
have hγ₇ : L₁.map (adj.unit.app (F.obj X₂)) ≫ L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
Tactic: rw [Category.comp_id, Category.comp_id, Category.id_comp, Category.id_comp,
      reassoc_of% eq₁, eq₂, reassoc_of% (hη (F.obj X₂)), ← eq₃, ← L₁.map_comp_assoc,
      adj.right_triangle_components, Functor.map_id, Category.id_comp]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.Adjunction (goal)
Goal:
C₁ : Type u_1
C₂ : Type u_2
D₁ : Type u_3
D₂ : Type u_4
inst : Category.{v_1, u_1} C₁
inst_1 : Category.{v_2, u_2} C₂
inst_2 : Category.{v_3, u_3} D₁
inst_3 : Category.{v_4, u_4} D₂
G : Functor.{v_1, v_2, u_1, u_2} C₁ C₂
F : Functor.{v_2, v_1, u_2, u_1} C₂ C₁
adj : G ⊣ F
L₁ : Functor.{v_1, v_3, u_1, u_3} C₁ D₁
L₂ : Functor.{v_2, v_4, u_2, u_4} C₂ D₂
W₁ : MorphismProperty.{v_1, u_1} C₁
W₂ : MorphismProperty.{v_2, u_2} C₂
inst_4 : L₁.IsLocalization W₁
inst_5 : L₂.IsLocalization W₂
G' : Functor.{v_3, v_4, u_3, u_4} D₁ D₂
F' : Functor.{v_4, v_3, u_4, u_3} D₂ D₁
α : L₁ ⋙ G' ⟶ G ⋙ L₂
β : F ⋙ L₁ ⟶ L₂ ⋙ F'
inst_6 : G'.IsLeftDerivedFunctor α W₁
inst_7 : F'.IsRightDerivedFunctor β W₂
η : 𝟭 D₁ ⟶ G' ⋙ F'
ε : F' ⋙ G' ⟶ 𝟭 D₂
hη : ∀ (X₁ : C₁), η.app (L₁.obj X₁) ≫ F'.map (α.app X₁) = L₁.map (adj.unit.app X₁) ≫ β.app (G.obj X₁)
hε : ∀ (X₂ : C₂), G'.map (β.app X₂) ≫ ε.app (L₂.obj X₂) = α.app (F.obj X₂) ≫ L₂.map (adj.counit.app X₂)
X₂ : C₂
eq₁ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) = η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂))
eq₃ : L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
eq₂ :
  F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) =
    F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
hγ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
hγ₁ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₂ :
  β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₃ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₄ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₅ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₆ : L₁.map (adj.unit.app (F.obj X₂)) ≫ β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₇ : L₁.map (adj.unit.app (F.obj X₂)) ≫ L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
⊢ β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫
          𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) ≫ 𝟙 (F'.obj (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
have hγ₈ : L₁.map (adj.unit.app (F.obj X₂) ≫ F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
Tactic: rw [Category.comp_id, Category.comp_id, Category.id_comp, Category.id_comp,
      reassoc_of% eq₁, eq₂, reassoc_of% (hη (F.obj X₂)), ← eq₃, ← L₁.map_comp_assoc,
      adj.right_triangle_components, Functor.map_id, Category.id_comp]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.Adjunction (goal)
Goal:
C₁ : Type u_1
C₂ : Type u_2
D₁ : Type u_3
D₂ : Type u_4
inst : Category.{v_1, u_1} C₁
inst_1 : Category.{v_2, u_2} C₂
inst_2 : Category.{v_3, u_3} D₁
inst_3 : Category.{v_4, u_4} D₂
G : Functor.{v_1, v_2, u_1, u_2} C₁ C₂
F : Functor.{v_2, v_1, u_2, u_1} C₂ C₁
adj : G ⊣ F
L₁ : Functor.{v_1, v_3, u_1, u_3} C₁ D₁
L₂ : Functor.{v_2, v_4, u_2, u_4} C₂ D₂
W₁ : MorphismProperty.{v_1, u_1} C₁
W₂ : MorphismProperty.{v_2, u_2} C₂
inst_4 : L₁.IsLocalization W₁
inst_5 : L₂.IsLocalization W₂
G' : Functor.{v_3, v_4, u_3, u_4} D₁ D₂
F' : Functor.{v_4, v_3, u_4, u_3} D₂ D₁
α : L₁ ⋙ G' ⟶ G ⋙ L₂
β : F ⋙ L₁ ⟶ L₂ ⋙ F'
inst_6 : G'.IsLeftDerivedFunctor α W₁
inst_7 : F'.IsRightDerivedFunctor β W₂
η : 𝟭 D₁ ⟶ G' ⋙ F'
ε : F' ⋙ G' ⟶ 𝟭 D₂
hη : ∀ (X₁ : C₁), η.app (L₁.obj X₁) ≫ F'.map (α.app X₁) = L₁.map (adj.unit.app X₁) ≫ β.app (G.obj X₁)
hε : ∀ (X₂ : C₂), G'.map (β.app X₂) ≫ ε.app (L₂.obj X₂) = α.app (F.obj X₂) ≫ L₂.map (adj.counit.app X₂)
X₂ : C₂
eq₁ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) = η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂))
eq₃ : L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
eq₂ :
  F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) =
    F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
hγ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
hγ₁ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₂ :
  β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₃ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₄ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₅ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₆ : L₁.map (adj.unit.app (F.obj X₂)) ≫ β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₇ : L₁.map (adj.unit.app (F.obj X₂)) ≫ L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
hγ₈ : L₁.map (adj.unit.app (F.obj X₂) ≫ F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
⊢ β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫
          𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) ≫ 𝟙 (F'.obj (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
have hγ₉ : L₁.map (𝟙 (F.obj X₂)) ≫ β.app X₂ = β.app X₂
Tactic: rw [Category.comp_id, Category.comp_id, Category.id_comp, Category.id_comp,
      reassoc_of% eq₁, eq₂, reassoc_of% (hη (F.obj X₂)), ← eq₃, ← L₁.map_comp_assoc,
      adj.right_triangle_components, Functor.map_id, Category.id_comp]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.Adjunction (goal)
Goal:
C₁ : Type u_1
C₂ : Type u_2
D₁ : Type u_3
D₂ : Type u_4
inst : Category.{v_1, u_1} C₁
inst_1 : Category.{v_2, u_2} C₂
inst_2 : Category.{v_3, u_3} D₁
inst_3 : Category.{v_4, u_4} D₂
G : Functor.{v_1, v_2, u_1, u_2} C₁ C₂
F : Functor.{v_2, v_1, u_2, u_1} C₂ C₁
adj : G ⊣ F
L₁ : Functor.{v_1, v_3, u_1, u_3} C₁ D₁
L₂ : Functor.{v_2, v_4, u_2, u_4} C₂ D₂
W₁ : MorphismProperty.{v_1, u_1} C₁
W₂ : MorphismProperty.{v_2, u_2} C₂
inst_4 : L₁.IsLocalization W₁
inst_5 : L₂.IsLocalization W₂
G' : Functor.{v_3, v_4, u_3, u_4} D₁ D₂
F' : Functor.{v_4, v_3, u_4, u_3} D₂ D₁
α : L₁ ⋙ G' ⟶ G ⋙ L₂
β : F ⋙ L₁ ⟶ L₂ ⋙ F'
inst_6 : G'.IsLeftDerivedFunctor α W₁
inst_7 : F'.IsRightDerivedFunctor β W₂
η : 𝟭 D₁ ⟶ G' ⋙ F'
ε : F' ⋙ G' ⟶ 𝟭 D₂
hη : ∀ (X₁ : C₁), η.app (L₁.obj X₁) ≫ F'.map (α.app X₁) = L₁.map (adj.unit.app X₁) ≫ β.app (G.obj X₁)
hε : ∀ (X₂ : C₂), G'.map (β.app X₂) ≫ ε.app (L₂.obj X₂) = α.app (F.obj X₂) ≫ L₂.map (adj.counit.app X₂)
X₂ : C₂
eq₁ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) = η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂))
eq₃ : L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
eq₂ :
  F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) =
    F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
hγ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
hγ₁ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₂ :
  β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₃ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₄ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₅ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₆ : L₁.map (adj.unit.app (F.obj X₂)) ≫ β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₇ : L₁.map (adj.unit.app (F.obj X₂)) ≫ L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
hγ₈ : L₁.map (adj.unit.app (F.obj X₂) ≫ F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
hγ₉ : L₁.map (𝟙 (F.obj X₂)) ≫ β.app X₂ = β.app X₂
⊢ β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫
          𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) ≫ 𝟙 (F'.obj (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
have hγ₁₀ : 𝟙 (L₁.obj (F.obj X₂)) ≫ β.app X₂ = β.app X₂
Tactic: rw [Category.comp_id, Category.comp_id, Category.id_comp, Category.id_comp,
      reassoc_of% eq₁, eq₂, reassoc_of% (hη (F.obj X₂)), ← eq₃, ← L₁.map_comp_assoc,
      adj.right_triangle_components, Functor.map_id, Category.id_comp]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.Adjunction (goal)
Goal:
C₁ : Type u_1
C₂ : Type u_2
D₁ : Type u_3
D₂ : Type u_4
inst : Category.{v_1, u_1} C₁
inst_1 : Category.{v_2, u_2} C₂
inst_2 : Category.{v_3, u_3} D₁
inst_3 : Category.{v_4, u_4} D₂
G : Functor.{v_1, v_2, u_1, u_2} C₁ C₂
F : Functor.{v_2, v_1, u_2, u_1} C₂ C₁
adj : G ⊣ F
L₁ : Functor.{v_1, v_3, u_1, u_3} C₁ D₁
L₂ : Functor.{v_2, v_4, u_2, u_4} C₂ D₂
W₁ : MorphismProperty.{v_1, u_1} C₁
W₂ : MorphismProperty.{v_2, u_2} C₂
inst_4 : L₁.IsLocalization W₁
inst_5 : L₂.IsLocalization W₂
G' : Functor.{v_3, v_4, u_3, u_4} D₁ D₂
F' : Functor.{v_4, v_3, u_4, u_3} D₂ D₁
α : L₁ ⋙ G' ⟶ G ⋙ L₂
β : F ⋙ L₁ ⟶ L₂ ⋙ F'
inst_6 : G'.IsLeftDerivedFunctor α W₁
inst_7 : F'.IsRightDerivedFunctor β W₂
η : 𝟭 D₁ ⟶ G' ⋙ F'
ε : F' ⋙ G' ⟶ 𝟭 D₂
hη : ∀ (X₁ : C₁), η.app (L₁.obj X₁) ≫ F'.map (α.app X₁) = L₁.map (adj.unit.app X₁) ≫ β.app (G.obj X₁)
hε : ∀ (X₂ : C₂), G'.map (β.app X₂) ≫ ε.app (L₂.obj X₂) = α.app (F.obj X₂) ≫ L₂.map (adj.counit.app X₂)
X₂ : C₂
eq₁ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) = η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂))
eq₃ : L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
eq₂ :
  F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) =
    F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂))
hγ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
hγ₁ :
  β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₂ :
  β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ 𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) =
    β.app X₂
hγ₃ : β.app X₂ ≫ η.app (F'.obj (L₂.obj X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₄ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (G'.map (β.app X₂)) ≫ F'.map (ε.app (L₂.obj X₂)) = β.app X₂
hγ₅ : η.app (L₁.obj (F.obj X₂)) ≫ F'.map (α.app (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₆ : L₁.map (adj.unit.app (F.obj X₂)) ≫ β.app (G.obj (F.obj X₂)) ≫ F'.map (L₂.map (adj.counit.app X₂)) = β.app X₂
hγ₇ : L₁.map (adj.unit.app (F.obj X₂)) ≫ L₁.map (F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
hγ₈ : L₁.map (adj.unit.app (F.obj X₂) ≫ F.map (adj.counit.app X₂)) ≫ β.app X₂ = β.app X₂
hγ₉ : L₁.map (𝟙 (F.obj X₂)) ≫ β.app X₂ = β.app X₂
hγ₁₀ : 𝟙 (L₁.obj (F.obj X₂)) ≫ β.app X₂ = β.app X₂
⊢ β.app X₂ ≫
      𝟙 (F'.obj (L₂.obj X₂)) ≫
        η.app (F'.obj (L₂.obj X₂)) ≫
          𝟙 (F'.obj (G'.obj (F'.obj (L₂.obj X₂)))) ≫ F'.map (ε.app (L₂.obj X₂)) ≫ 𝟙 (F'.obj (L₂.obj X₂)) =
    β.app X₂ ≫ 𝟙 (F'.obj (L₂.obj X₂))
have hγ₁₁ : β.app X₂ = β.app X₂
Tactic: rw [Category.comp_id, Category.comp_id, Category.id_comp, Category.id_comp,
      reassoc_of% eq₁, eq₂, reassoc_of% (hη (F.obj X₂)), ← eq₃, ← L₁.map_comp_assoc,
      adj.right_triangle_components, Functor.map_id, Category.id_comp]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
D : Type u_2
H : Type u_3
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_2} D
inst_2 : Category.{v_5, u_3} H
LF : Functor.{v_3, v_5, u_2, u_3} D H
F : Functor.{v_1, v_5, u_1, u_3} C H
L : Functor.{v_1, v_3, u_1, u_2} C D
α : L ⋙ LF ⟶ F
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
⊢ LF.IsLeftDerivedFunctor α W ↔ LF.IsRightKanExtension α
have mp : LF.IsLeftDerivedFunctor α W → LF.IsRightKanExtension α
Tactic: constructor
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
D : Type u_2
H : Type u_3
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_2} D
inst_2 : Category.{v_5, u_3} H
LF : Functor.{v_3, v_5, u_2, u_3} D H
F : Functor.{v_1, v_5, u_1, u_3} C H
L : Functor.{v_1, v_3, u_1, u_2} C D
α : L ⋙ LF ⟶ F
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
mp : LF.IsLeftDerivedFunctor α W → LF.IsRightKanExtension α
⊢ LF.IsLeftDerivedFunctor α W ↔ LF.IsRightKanExtension α
have mpr : LF.IsRightKanExtension α → LF.IsLeftDerivedFunctor α W
Tactic: constructor
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
D : Type u_3
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_3} D
inst_2 : Category.{v_5, u_2} H
LF' LF : Functor.{v_3, v_5, u_3, u_2} D H
F : Functor.{v_1, v_5, u_1, u_2} C H
L : Functor.{v_1, v_3, u_1, u_3} C D
α : L ⋙ LF ⟶ F
α' : L ⋙ LF' ⟶ F
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
e : LF ≅ LF'
comm : L.whiskerLeft e.hom ≫ α' = α
⊢ LF.IsLeftDerivedFunctor α W ↔ LF'.IsLeftDerivedFunctor α' W
have simp : LF.IsRightKanExtension α ↔ LF'.IsRightKanExtension α'
Tactic: simp only [isLeftDerivedFunctor_iff_isRightKanExtension]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
D : Type u_3
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_3} D
inst_2 : Category.{v_5, u_2} H
LF' LF : Functor.{v_3, v_5, u_3, u_2} D H
F F' : Functor.{v_1, v_5, u_1, u_2} C H
L : Functor.{v_1, v_3, u_1, u_3} C D
α' : L ⋙ LF' ⟶ F'
α : L ⋙ LF ⟶ F
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
inst_4 : LF.IsLeftDerivedFunctor α W
τ : F' ⟶ F
X : C
⊢ (LF'.leftDerivedNatTrans LF α' α W τ).app (L.obj X) ≫ α.app X = α'.app X ≫ τ.app X
have dsimp : (LF.leftDerivedLift α W LF' (α' ≫ τ)).app (L.obj X) ≫ α.app X = α'.app X ≫ τ.app X
Tactic: dsimp only [leftDerivedNatTrans]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_3
D : Type u_1
H : Type u_2
inst : Category.{v_1, u_3} C
inst_1 : Category.{v_3, u_1} D
inst_2 : Category.{v_5, u_2} H
LF : Functor.{v_3, v_5, u_1, u_2} D H
F : Functor.{v_1, v_5, u_3, u_2} C H
L : Functor.{v_1, v_3, u_3, u_1} C D
α : L ⋙ LF ⟶ F
W : MorphismProperty.{v_1, u_3} C
inst_3 : L.IsLocalization W
inst_4 : LF.IsLeftDerivedFunctor α W
G : Functor.{v_3, v_5, u_1, u_2} D H
β : L ⋙ G ⟶ F
⊢ G.IsLeftDerivedFunctor β W ↔ IsIso (LF.leftDerivedLift α W G β)
have rw : G.IsRightKanExtension β ↔ IsIso (LF.leftDerivedLift α W G β)
Tactic: rw [isLeftDerivedFunctor_iff_isRightKanExtension]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (hypothesis)
Goal:
C : Type u_3
D : Type u_1
H : Type u_2
inst : Category.{v_1, u_3} C
inst_1 : Category.{v_3, u_1} D
inst_2 : Category.{v_5, u_2} H
LF : Functor.{v_3, v_5, u_1, u_2} D H
F : Functor.{v_1, v_5, u_3, u_2} C H
L : Functor.{v_1, v_3, u_3, u_1} C D
α : L ⋙ LF ⟶ F
W : MorphismProperty.{v_1, u_3} C
inst_3 : L.IsLocalization W
inst_4 : LF.IsLeftDerivedFunctor α W
G : Functor.{v_3, v_5, u_1, u_2} D H
β : L ⋙ G ⟶ F
⊢ G.IsRightKanExtension β ↔ IsIso (LF.leftDerivedLift α W G β)
have this : LF.IsRightKanExtension α
Tactic: have := IsLeftDerivedFunctor.isRightKanExtension _ α W
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (hypothesis)
Goal:
C : Type u_1
D : Type u_3
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_3} D
inst_2 : Category.{v_5, u_2} H
F : Functor.{v_1, v_5, u_1, u_2} C H
L : Functor.{v_1, v_3, u_1, u_3} C D
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
⊢ F.HasLeftDerivedFunctor W ↔ L.HasRightKanExtension F
have this : F.HasLeftDerivedFunctor W ↔ W.Q.HasRightKanExtension F
Tactic: have : HasLeftDerivedFunctor F W ↔ HasRightKanExtension W.Q F :=
    ⟨fun h => h.hasRightKanExtension', fun h => ⟨h⟩⟩
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
D : Type u_3
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_3} D
inst_2 : Category.{v_5, u_2} H
F : Functor.{v_1, v_5, u_1, u_2} C H
L : Functor.{v_1, v_3, u_1, u_3} C D
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
this : F.HasLeftDerivedFunctor W ↔ W.Q.HasRightKanExtension F
⊢ F.HasLeftDerivedFunctor W ↔ L.HasRightKanExtension F
have rw : W.Q.HasRightKanExtension F ↔ L.HasRightKanExtension F
Tactic: rw [this, hasRightExtension_iff_postcomp₁ (Localization.compUniqFunctor W.Q L W) F]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
D : Type u_3
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_3} D
inst_2 : Category.{v_5, u_2} H
F : Functor.{v_1, v_5, u_1, u_2} C H
L : Functor.{v_1, v_3, u_1, u_3} C D
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
this : F.HasLeftDerivedFunctor W ↔ W.Q.HasRightKanExtension F
rw : W.Q.HasRightKanExtension F ↔ L.HasRightKanExtension F
⊢ F.HasLeftDerivedFunctor W ↔ L.HasRightKanExtension F
have rw₁ : W.Q.HasRightKanExtension F ↔ W.Q.HasRightKanExtension F
Tactic: rw [this, hasRightExtension_iff_postcomp₁ (Localization.compUniqFunctor W.Q L W) F]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_5, u_2} H
F F' : Functor.{v_1, v_5, u_1, u_2} C H
e : F ≅ F'
W : MorphismProperty.{v_1, u_1} C
⊢ F.HasLeftDerivedFunctor W ↔ F'.HasLeftDerivedFunctor W
have rw : W.Q.HasRightKanExtension F ↔ F'.HasLeftDerivedFunctor W
Tactic: rw [hasLeftDerivedFunctor_iff F W.Q W, hasLeftDerivedFunctor_iff F' W.Q W,
    hasRightExtension_iff_of_iso₂ W.Q e]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_5, u_2} H
F F' : Functor.{v_1, v_5, u_1, u_2} C H
e : F ≅ F'
W : MorphismProperty.{v_1, u_1} C
rw : W.Q.HasRightKanExtension F ↔ F'.HasLeftDerivedFunctor W
⊢ F.HasLeftDerivedFunctor W ↔ F'.HasLeftDerivedFunctor W
have rw₁ : W.Q.HasRightKanExtension F ↔ W.Q.HasRightKanExtension F'
Tactic: rw [hasLeftDerivedFunctor_iff F W.Q W, hasLeftDerivedFunctor_iff F' W.Q W,
    hasRightExtension_iff_of_iso₂ W.Q e]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (goal)
Goal:
C : Type u_1
H : Type u_2
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_5, u_2} H
F F' : Functor.{v_1, v_5, u_1, u_2} C H
e : F ≅ F'
W : MorphismProperty.{v_1, u_1} C
rw : W.Q.HasRightKanExtension F ↔ F'.HasLeftDerivedFunctor W
rw₁ : W.Q.HasRightKanExtension F ↔ W.Q.HasRightKanExtension F'
⊢ F.HasLeftDerivedFunctor W ↔ F'.HasLeftDerivedFunctor W
have rw₂ : W.Q.HasRightKanExtension F' ↔ W.Q.HasRightKanExtension F'
Tactic: rw [hasLeftDerivedFunctor_iff F W.Q W, hasLeftDerivedFunctor_iff F' W.Q W,
    hasRightExtension_iff_of_iso₂ W.Q e]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.LeftDerived (hypothesis)
Goal:
C : Type u_1
D : Type u_2
H : Type u_3
inst : Category.{v_1, u_1} C
inst_1 : Category.{v_3, u_2} D
inst_2 : Category.{v_5, u_3} H
LF : Functor.{v_3, v_5, u_2, u_3} D H
F : Functor.{v_1, v_5, u_1, u_3} C H
L : Functor.{v_1, v_3, u_1, u_2} C D
α : L ⋙ LF ⟶ F
W : MorphismProperty.{v_1, u_1} C
inst_3 : L.IsLocalization W
inst_4 : LF.IsLeftDerivedFunctor α W
⊢ F.HasLeftDerivedFunctor W
have this : LF.IsRightKanExtension α
Tactic: have := IsLeftDerivedFunctor.isRightKanExtension LF α W
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.PointwiseLeftDerived (goal)
Goal:
C : Type u₁
D : Type u₂
H : Type u₃
inst : Category.{v₁, u₁} C
inst_1 : Category.{v₂, u₂} D
inst_2 : Category.{v₃, u₃} H
F : Functor.{v₁, v₃, u₁, u₃} C H
L : Functor.{v₁, v₂, u₁, u₂} C D
W : MorphismProperty.{v₁, u₁} C
inst_3 : L.IsLocalization W
X : C
⊢ F.HasPointwiseLeftDerivedFunctorAt W X ↔ L.HasPointwiseRightKanExtensionAt F (L.obj X)
have rw : F.HasPointwiseLeftDerivedFunctorAt W X ↔ W.Q.HasPointwiseRightKanExtensionAt F (W.Q.obj X)
Tactic: rw [← hasPointwiseRightKanExtensionAt_iff_of_equivalence W.Q L F
    (Localization.uniq W.Q L W) (Localization.compUniqFunctor W.Q L W) (W.Q.obj X) (L.obj X)
    ((Localization.compUniqFunctor W.Q L W).app X)]
-- Lean 4 proof step from Mathlib.CategoryTheory.Functor.Derived.PointwiseLeftDerived (goal)
Goal:
C : Type u₁
H : Type u₃
inst : Category.{v₁, u₁} C
inst_1 : Category.{v₃, u₃} H
F : Functor.{v₁, v₃, u₁, u₃} C H
W : MorphismProperty.{v₁, u₁} C
X Y : C
w : X ⟶ Y
hw : W w
⊢ F.HasPointwiseLeftDerivedFunctorAt W X ↔ F.HasPointwiseLeftDerivedFunctorAt W Y
have simp : W.Q.HasPointwiseRightKanExtensionAt F (W.Q.obj X) ↔ W.Q.HasPointwiseRightKanExtensionAt F (W.Q.obj Y)
Tactic: simp only [F.hasPointwiseLeftDerivedFunctorAt_iff W.Q W]