Theorem: CategoryTheory.Simple.of_iso
File: Mathlib/CategoryTheory/Simple.lean

tactic: haveI : Mono (f ≫ i.hom) := mono_comp _ _
state_before: C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
⊢ IsIso f ↔ f ≠ 0

tactic: constructor
state_before: C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
⊢ IsIso f ↔ f ≠ 0

tactic: intro h w
state_before: case mp
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
⊢ IsIso f → f ≠ 0

tactic: have j : IsIso (f ≫ i.hom)
state_before: case mp
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : IsIso f
w : f = 0
⊢ False

tactic: infer_instance
state_before: case j
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : IsIso f
w : f = 0
⊢ IsIso (f ≫ i.hom)

case mp
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : IsIso f
w : f = 0
j : IsIso (f ≫ i.hom)
⊢ False

tactic: rw [Simple.mono_isIso_iff_nonzero] at j
state_before: case mp
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : IsIso f
w : f = 0
j : IsIso (f ≫ i.hom)
⊢ False

tactic: subst w
state_before: case mp
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : IsIso f
w : f = 0
j✝ : IsIso (f ≫ i.hom)
j : f ≫ i.hom ≠ 0
⊢ False

tactic: simp at j
state_before: case mp
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
m : Mono 0
this : Mono (0 ≫ i.hom)
h : IsIso 0
j✝ : IsIso (0 ≫ i.hom)
j : 0 ≫ i.hom ≠ 0
⊢ False

tactic: intro h
state_before: case mpr
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
⊢ f ≠ 0 → IsIso f

tactic: have j : IsIso (f ≫ i.hom) := by
  apply isIso_of_mono_of_nonzero
  intro w
  apply h
  simpa using (cancel_mono i.inv).2 w
state_before: case mpr
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : f ≠ 0
⊢ IsIso f

tactic: rw [← Category.comp_id f, ← i.hom_inv_id, ← Category.assoc]
state_before: case mpr
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : f ≠ 0
j : IsIso (f ≫ i.hom)
⊢ IsIso f

tactic: infer_instance
state_before: case mpr
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : f ≠ 0
j : IsIso (f ≫ i.hom)
⊢ IsIso ((f ≫ i.hom) ≫ i.inv)

tactic: apply isIso_of_mono_of_nonzero
state_before: C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : f ≠ 0
⊢ IsIso (f ≫ i.hom)

tactic: intro w
state_before: case w
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : f ≠ 0
⊢ f ≫ i.hom ≠ 0

tactic: apply h
state_before: case w
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : f ≠ 0
w : f ≫ i.hom = 0
⊢ False

tactic: simpa using (cancel_mono i.inv).2 w
state_before: case w
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Simple Y
i : X ≅ Y
Y✝ : C
f : Y✝ ⟶ X
m : Mono f
this : Mono (f ≫ i.hom)
h : f ≠ 0
w : f ≫ i.hom = 0
⊢ f = 0