Theorem: CategoryTheory.Iso.ext
File: Mathlib/CategoryTheory/Iso.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
α β : X ≅ Y
w : α.hom = β.hom
this : α.inv = β.inv
⊢ α = β
state_after: case mk
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
β : X ≅ Y
hom✝ : X ⟶ Y
inv✝ : Y ⟶ X
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
w : { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.hom = β.hom
this : { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.inv = β.inv
⊢ { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ } = β
tactic: cases α
state_before: case mk
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
β : X ≅ Y
hom✝ : X ⟶ Y
inv✝ : Y ⟶ X
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
w : { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.hom = β.hom
this : { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.inv = β.inv
⊢ { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ } = β
state_after: case mk.mk
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
hom✝¹ : X ⟶ Y
inv✝¹ : Y ⟶ X
hom_inv_id✝¹ : hom✝¹ ≫ inv✝¹ = 𝟙 X
inv_hom_id✝¹ : inv✝¹ ≫ hom✝¹ = 𝟙 Y
hom✝ : X ⟶ Y
inv✝ : Y ⟶ X
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
w :
  { hom := hom✝¹, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ }.hom =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.hom
this :
  { hom := hom✝¹, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ }.inv =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.inv
⊢ { hom := hom✝¹, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ } =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }
tactic: cases β
state_before: case mk.mk
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
hom✝¹ : X ⟶ Y
inv✝¹ : Y ⟶ X
hom_inv_id✝¹ : hom✝¹ ≫ inv✝¹ = 𝟙 X
inv_hom_id✝¹ : inv✝¹ ≫ hom✝¹ = 𝟙 Y
hom✝ : X ⟶ Y
inv✝ : Y ⟶ X
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
w :
  { hom := hom✝¹, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ }.hom =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.hom
this :
  { hom := hom✝¹, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ }.inv =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.inv
⊢ { hom := hom✝¹, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ } =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }
state_after: case mk.mk.refl
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
hom✝ : X ⟶ Y
inv✝¹ : Y ⟶ X
hom_inv_id✝¹ : hom✝ ≫ inv✝¹ = 𝟙 X
inv_hom_id✝¹ : inv✝¹ ≫ hom✝ = 𝟙 Y
inv✝ : Y ⟶ X
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
this :
  { hom := hom✝, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ }.inv =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.inv
⊢ { hom := hom✝, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ } =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }
tactic: cases w
state_before: case mk.mk.refl
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
hom✝ : X ⟶ Y
inv✝¹ : Y ⟶ X
hom_inv_id✝¹ : hom✝ ≫ inv✝¹ = 𝟙 X
inv_hom_id✝¹ : inv✝¹ ≫ hom✝ = 𝟙 Y
inv✝ : Y ⟶ X
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
this :
  { hom := hom✝, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ }.inv =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }.inv
⊢ { hom := hom✝, inv := inv✝¹, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ } =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }
state_after: case mk.mk.refl.refl
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
hom✝ : X ⟶ Y
inv✝ : Y ⟶ X
hom_inv_id✝¹ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝¹ : inv✝ ≫ hom✝ = 𝟙 Y
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
⊢ { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ } =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }
tactic: cases this
state_before: case mk.mk.refl.refl
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
hom✝ : X ⟶ Y
inv✝ : Y ⟶ X
hom_inv_id✝¹ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝¹ : inv✝ ≫ hom✝ = 𝟙 Y
hom_inv_id✝ : hom✝ ≫ inv✝ = 𝟙 X
inv_hom_id✝ : inv✝ ≫ hom✝ = 𝟙 Y
⊢ { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝¹, inv_hom_id := inv_hom_id✝¹ } =
    { hom := hom✝, inv := inv✝, hom_inv_id := hom_inv_id✝, inv_hom_id := inv_hom_id✝ }
state_after: no goals
tactic: rfl
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
α β : X ≅ Y
w : α.hom = β.hom
⊢ α.inv = α.inv ≫ β.hom ≫ β.inv
state_after: no goals
tactic: rw [Iso.hom_inv_id, Category.comp_id]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
α β : X ≅ Y
w : α.hom = β.hom
⊢ α.inv ≫ β.hom ≫ β.inv = (α.inv ≫ α.hom) ≫ β.inv
state_after: no goals
tactic: rw [Category.assoc, ← w]
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
α β : X ≅ Y
w : α.hom = β.hom
⊢ (α.inv ≫ α.hom) ≫ β.inv = β.inv
state_after: no goals
tactic: rw [Iso.inv_hom_id, Category.id_comp]