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

Proof steps:
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{u_6, u_3} E
P : Cᵒᵖ ⥤ D
F : E ⥤ C
inst✝¹ : {X B : E} → (π : X ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) F
inst✝ : F.PreservesEffectiveEpis
hP : EqualizerCondition P
⊢ EqualizerCondition (F.op ⋙ P)
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{u_6, u_3} E
P : Cᵒᵖ ⥤ D
F : E ⥤ C
inst✝² : {X B : E} → (π : X ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) F
inst✝¹ : F.PreservesEffectiveEpis
hP : EqualizerCondition P
X B : E
π : X ⟶ B
inst✝ : EffectiveEpi π
c : PullbackCone π π
hc : IsLimit c
⊢ Nonempty (IsLimit (Fork.ofι ((F.op ⋙ P).map π.op) ⋯))
tactic: intro X B π _ c hc
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{u_6, u_3} E
P : Cᵒᵖ ⥤ D
F : E ⥤ C
inst✝² : {X B : E} → (π : X ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) F
inst✝¹ : F.PreservesEffectiveEpis
hP : EqualizerCondition P
X B : E
π : X ⟶ B
inst✝ : EffectiveEpi π
c : PullbackCone π π
hc : IsLimit c
⊢ Nonempty (IsLimit (Fork.ofι ((F.op ⋙ P).map π.op) ⋯))
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{u_6, u_3} E
P : Cᵒᵖ ⥤ D
F : E ⥤ C
inst✝² : {X B : E} → (π : X ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) F
inst✝¹ : F.PreservesEffectiveEpis
hP : EqualizerCondition P
X B : E
π : X ⟶ B
inst✝ : EffectiveEpi π
c : PullbackCone π π
hc : IsLimit c
h : P.map (F.map π).op = (F.op ⋙ P).map π.op
⊢ Nonempty (IsLimit (Fork.ofι ((F.op ⋙ P).map π.op) ⋯))
tactic: have h : P.map (F.map π).op = (F.op ⋙ P).map π.op := by simp
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{u_6, u_3} E
P : Cᵒᵖ ⥤ D
F : E ⥤ C
inst✝² : {X B : E} → (π : X ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) F
inst✝¹ : F.PreservesEffectiveEpis
hP : EqualizerCondition P
X B : E
π : X ⟶ B
inst✝ : EffectiveEpi π
c : PullbackCone π π
hc : IsLimit c
h : P.map (F.map π).op = (F.op ⋙ P).map π.op
⊢ Nonempty (IsLimit (Fork.ofι ((F.op ⋙ P).map π.op) ⋯))
state_after: case refine_1
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{u_6, u_3} E
P : Cᵒᵖ ⥤ D
F : E ⥤ C
inst✝² : {X B : E} → (π : X ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) F
inst✝¹ : F.PreservesEffectiveEpis
hP : EqualizerCondition P
X B : E
π : X ⟶ B
inst✝ : EffectiveEpi π
c : PullbackCone π π
hc : IsLimit c
h : P.map (F.map π).op = (F.op ⋙ P).map π.op
⊢ P.map (F.map π).op ≫ (F.op ⋙ P).map c.fst.op = P.map (F.map π).op ≫ (F.op ⋙ P).map c.snd.op

case refine_2
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{u_6, u_3} E
P : Cᵒᵖ ⥤ D
F : E ⥤ C
inst✝² : {X B : E} → (π : X ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) F
inst✝¹ : F.PreservesEffectiveEpis
hP : EqualizerCondition P
X B : E
π : X ⟶ B
inst✝ : EffectiveEpi π
c : PullbackCone π π
hc : IsLimit c
h : P.map (F.map π).op = (F.op ⋙ P).map π.op
⊢ IsLimit (Fork.ofι (P.map (F.map π).op) ?refine_1)
tactic: refine ⟨(IsLimit.equivIsoLimit (ForkOfι.ext ?_ _ h)) ?_⟩