Theorem: CategoryTheory.Dial.instCategory_id_f
File: Mathlib/CategoryTheory/Dialectica/Basic.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X : Dial C
⊢ (Subobject.pullback π(π₁, π₂)).obj X.rel ≤ (Subobject.pullback (prod.map (𝟙 X.src) (𝟙 X.tgt))).obj X.rel
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X✝ Y✝ : Dial C
f : X✝ ⟶ Y✝
⊢ 𝟙 X✝ ≫ f = f
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X✝ Y✝ : Dial C
f : X✝ ⟶ Y✝
⊢ { f := f.f, F := f.F, le := ⋯ } = f
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X✝ Y✝ : Dial C
f : X✝ ⟶ Y✝
⊢ { f := f.f, F := f.F, le := ⋯ } = f
state_after: no goals
tactic: rfl
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X✝ Y✝ : Dial C
f : X✝ ⟶ Y✝
⊢ f ≫ 𝟙 Y✝ = f
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X✝ Y✝ : Dial C
f : X✝ ⟶ Y✝
⊢ { f := f.f, F := f.F, le := ⋯ } = f
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X✝ Y✝ : Dial C
f : X✝ ⟶ Y✝
⊢ { f := f.f, F := f.F, le := ⋯ } = f
state_after: no goals
tactic: rfl
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
W✝ X✝ Y✝ Z✝ : Dial C
f : W✝ ⟶ X✝
g : X✝ ⟶ Y✝
h : Y✝ ⟶ Z✝
⊢ (f ≫ g) ≫ h = f ≫ g ≫ h
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
W✝ X✝ Y✝ Z✝ : Dial C
f : W✝ ⟶ X✝
g : X✝ ⟶ Y✝
h : Y✝ ⟶ Z✝
⊢ π(π₁, prod.map (f.f ≫ g.f) (𝟙 Z✝.tgt) ≫ h.F) ≫ π(π₁, prod.map f.f (𝟙 Y✝.tgt) ≫ g.F) ≫ f.F =
    π(π₁, prod.map f.f (𝟙 Z✝.tgt) ≫ π(π₁, prod.map g.f (𝟙 Z✝.tgt) ≫ h.F) ≫ g.F) ≫ f.F
tactic: simp only [Category.assoc, Hom.mk.injEq, true_and]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
W✝ X✝ Y✝ Z✝ : Dial C
f : W✝ ⟶ X✝
g : X✝ ⟶ Y✝
h : Y✝ ⟶ Z✝
⊢ π(π₁, prod.map (f.f ≫ g.f) (𝟙 Z✝.tgt) ≫ h.F) ≫ π(π₁, prod.map f.f (𝟙 Y✝.tgt) ≫ g.F) ≫ f.F =
    π(π₁, prod.map f.f (𝟙 Z✝.tgt) ≫ π(π₁, prod.map g.f (𝟙 Z✝.tgt) ≫ h.F) ≫ g.F) ≫ f.F
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
W✝ X✝ Y✝ Z✝ : Dial C
f : W✝ ⟶ X✝
g : X✝ ⟶ Y✝
h : Y✝ ⟶ Z✝
⊢ (π(π₁, prod.map (f.f ≫ g.f) (𝟙 Z✝.tgt) ≫ h.F) ≫ π(π₁, prod.map f.f (𝟙 Y✝.tgt) ≫ g.F)) ≫ f.F =
    π(π₁, (prod.map f.f (𝟙 Z✝.tgt) ≫ π(π₁, prod.map g.f (𝟙 Z✝.tgt) ≫ h.F)) ≫ g.F) ≫ f.F
tactic: rw [← Category.assoc, ← Category.assoc]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
W✝ X✝ Y✝ Z✝ : Dial C
f : W✝ ⟶ X✝
g : X✝ ⟶ Y✝
h : Y✝ ⟶ Z✝
⊢ (π(π₁, prod.map (f.f ≫ g.f) (𝟙 Z✝.tgt) ≫ h.F) ≫ π(π₁, prod.map f.f (𝟙 Y✝.tgt) ≫ g.F)) ≫ f.F =
    π(π₁, (prod.map f.f (𝟙 Z✝.tgt) ≫ π(π₁, prod.map g.f (𝟙 Z✝.tgt) ≫ h.F)) ≫ g.F) ≫ f.F
state_after: case e_a
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
W✝ X✝ Y✝ Z✝ : Dial C
f : W✝ ⟶ X✝
g : X✝ ⟶ Y✝
h : Y✝ ⟶ Z✝
⊢ π(π₁, prod.map (f.f ≫ g.f) (𝟙 Z✝.tgt) ≫ h.F) ≫ π(π₁, prod.map f.f (𝟙 Y✝.tgt) ≫ g.F) =
    π(π₁, (prod.map f.f (𝟙 Z✝.tgt) ≫ π(π₁, prod.map g.f (𝟙 Z✝.tgt) ≫ h.F)) ≫ g.F)
tactic: congr 1
state_before: case e_a
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
W✝ X✝ Y✝ Z✝ : Dial C
f : W✝ ⟶ X✝
g : X✝ ⟶ Y✝
h : Y✝ ⟶ Z✝
⊢ π(π₁, prod.map (f.f ≫ g.f) (𝟙 Z✝.tgt) ≫ h.F) ≫ π(π₁, prod.map f.f (𝟙 Y✝.tgt) ≫ g.F) =
    π(π₁, (prod.map f.f (𝟙 Z✝.tgt) ≫ π(π₁, prod.map g.f (𝟙 Z✝.tgt) ≫ h.F)) ≫ g.F)
state_after: no goals
tactic: ext <;> simp