Theorem: CategoryTheory.regularTopology.equalizerCondition_iff_isIso_lift
File: Mathlib/CategoryTheory/Sites/Coherent/RegularSheaves.lean

tactic: constructor
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
⊢ EqualizerCondition P ↔
    ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
state_after: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
⊢ EqualizerCondition P →
    ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)

case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
⊢ (∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)) →
    EqualizerCondition P

tactic: intro hP X B π _ _
state_before: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
⊢ EqualizerCondition P →
    ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
state_after: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : EqualizerCondition P
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ IsIso (equalizer.lift (P.map π.op) ⋯)

tactic: have h := hP.bijective_mapToEqualizer_pullback _ X B π
state_before: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : EqualizerCondition P
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ IsIso (equalizer.lift (P.map π.op) ⋯)
state_after: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : EqualizerCondition P
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
h : Function.Bijective (MapToEqualizer P π pullback.fst pullback.snd ⋯)
⊢ IsIso (equalizer.lift (P.map π.op) ⋯)

tactic: rw [← isIso_iff_bijective, mapToEqualizer_eq_comp] at h
state_before: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : EqualizerCondition P
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
h : Function.Bijective (MapToEqualizer P π pullback.fst pullback.snd ⋯)
⊢ IsIso (equalizer.lift (P.map π.op) ⋯)
state_after: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : EqualizerCondition P
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
h : IsIso (equalizer.lift (P.map π.op) ⋯ ≫ (Types.equalizerIso (P.map pullback.fst.op) (P.map pullback.snd.op)).hom)
⊢ IsIso (equalizer.lift (P.map π.op) ⋯)

tactic: exact IsIso.of_isIso_comp_right (equalizer.lift (P.map π.op)
  (equalizerCondition_w' P π))
  (Types.equalizerIso _ _).hom
state_before: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : EqualizerCondition P
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
h : IsIso (equalizer.lift (P.map π.op) ⋯ ≫ (Types.equalizerIso (P.map pullback.fst.op) (P.map pullback.snd.op)).hom)
⊢ IsIso (equalizer.lift (P.map π.op) ⋯)
state_after: no goals

tactic: intro hP
state_before: case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
⊢ (∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)) →
    EqualizerCondition P
state_after: case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
⊢ EqualizerCondition P

tactic: apply EqualizerCondition.mk
state_before: case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
⊢ EqualizerCondition P
state_after: case mpr.hP
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
⊢ ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π],
    Function.Bijective (MapToEqualizer P π pullback.fst pullback.snd ⋯)

tactic: intro X B π _ _
state_before: case mpr.hP
C : Type u_1
D : Type u_2
E : Type u_3
inst✝² : Category.{u_5, u_1} C
inst✝¹ : Category.{?u.38589, u_2} D
inst✝ : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
⊢ ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π],
    Function.Bijective (MapToEqualizer P π pullback.fst pullback.snd ⋯)
state_after: case mpr.hP
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ Function.Bijective (MapToEqualizer P π pullback.fst pullback.snd ⋯)

tactic: rw [mapToEqualizer_eq_comp, ← isIso_iff_bijective]
state_before: case mpr.hP
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ Function.Bijective (MapToEqualizer P π pullback.fst pullback.snd ⋯)
state_after: case mpr.hP
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ IsIso (equalizer.lift (P.map π.op) ⋯ ≫ (Types.equalizerIso (P.map pullback.fst.op) (P.map pullback.snd.op)).hom)

tactic: infer_instance
state_before: case mpr.hP
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Category.{?u.38589, u_2} D
inst✝² : Category.{?u.38593, u_3} E
P : Cᵒᵖ ⥤ Type u_4
hP : ∀ (X B : C) (π : X ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π], IsIso (equalizer.lift (P.map π.op) ⋯)
X B : C
π : X ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ IsIso (equalizer.lift (P.map π.op) ⋯ ≫ (Types.equalizerIso (P.map pullback.fst.op) (P.map pullback.snd.op)).hom)
state_after: no goals