Theorem: CategoryTheory.Dial.isoMk_inv_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 Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback π(π₁, π₂ ≫ e₂.inv)).obj X.rel ≤ (Subobject.pullback (prod.map e₁.hom (𝟙 Y.tgt))).obj Y.rel
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback (π(π₁, π₂ ≫ e₂.inv) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel ≤
    (Subobject.pullback (prod.map e₁.hom (𝟙 Y.tgt))).obj Y.rel
tactic: rw [eq, ← Subobject.pullback_comp]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback (π(π₁, π₂ ≫ e₂.inv) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel ≤
    (Subobject.pullback (prod.map e₁.hom (𝟙 Y.tgt))).obj Y.rel
state_after: case a
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback (π(π₁, π₂ ≫ e₂.inv) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel =
    (Subobject.pullback (prod.map e₁.hom (𝟙 Y.tgt))).obj Y.rel
tactic: apply le_of_eq
state_before: case a
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback (π(π₁, π₂ ≫ e₂.inv) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel =
    (Subobject.pullback (prod.map e₁.hom (𝟙 Y.tgt))).obj Y.rel
state_after: case a.e_self.e_self.e_f
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ π(π₁, π₂ ≫ e₂.inv) ≫ prod.map e₁.hom e₂.hom = prod.map e₁.hom (𝟙 Y.tgt)
tactic: congr
state_before: case a.e_self.e_self.e_f
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ π(π₁, π₂ ≫ e₂.inv) ≫ prod.map e₁.hom e₂.hom = prod.map e₁.hom (𝟙 Y.tgt)
state_after: no goals
tactic: ext <;> simp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback π(π₁, π₂ ≫ e₂.hom)).obj Y.rel ≤ (Subobject.pullback (prod.map e₁.inv (𝟙 X.tgt))).obj X.rel
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback π(π₁, π₂ ≫ e₂.hom)).obj Y.rel ≤
    (Subobject.pullback (prod.map e₁.inv (𝟙 X.tgt) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel
tactic: rw [eq, ← Subobject.pullback_comp]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback π(π₁, π₂ ≫ e₂.hom)).obj Y.rel ≤
    (Subobject.pullback (prod.map e₁.inv (𝟙 X.tgt) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel
state_after: case a
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback π(π₁, π₂ ≫ e₂.hom)).obj Y.rel =
    (Subobject.pullback (prod.map e₁.inv (𝟙 X.tgt) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel
tactic: apply le_of_eq
state_before: case a
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ (Subobject.pullback π(π₁, π₂ ≫ e₂.hom)).obj Y.rel =
    (Subobject.pullback (prod.map e₁.inv (𝟙 X.tgt) ≫ prod.map e₁.hom e₂.hom)).obj Y.rel
state_after: case a.e_self.e_self.e_f
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ π(π₁, π₂ ≫ e₂.hom) = prod.map e₁.inv (𝟙 X.tgt) ≫ prod.map e₁.hom e₂.hom
tactic: congr
state_before: case a.e_self.e_self.e_f
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
e₁ : X.src ≅ Y.src
e₂ : X.tgt ≅ Y.tgt
eq : X.rel = (Subobject.pullback (prod.map e₁.hom e₂.hom)).obj Y.rel
⊢ π(π₁, π₂ ≫ e₂.hom) = prod.map e₁.inv (𝟙 X.tgt) ≫ prod.map e₁.hom e₂.hom
state_after: no goals
tactic: ext <;> simp