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

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
⊢ 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: 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
⊢ 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: refine ⟨(IsLimit.equivIsoLimit (ForkOfι.ext ?_ _ h)) ?_⟩
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: 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
⊢ P.map (F.map π).op = (F.op ⋙ P).map π.op
state_after: no goals

tactic: simp only [Functor.comp_map, op_map, Quiver.Hom.unop_op, ← map_comp, ← op_comp, c.condition]
state_before: 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
state_after: no goals

tactic: refine (hP (F.map π) (PullbackCone.mk (F.map c.fst) (F.map c.snd) ?_) ?_).some
state_before: 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) ⋯)
state_after: case refine_2.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
⊢ F.map c.fst ≫ F.map π = F.map c.snd ≫ F.map π

case refine_2.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 (PullbackCone.mk (F.map c.fst) (F.map c.snd) ?refine_2.refine_1)

tactic: simp only [← map_comp, c.condition]
state_before: case refine_2.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
⊢ F.map c.fst ≫ F.map π = F.map c.snd ≫ F.map π
state_after: no goals

tactic: exact (isLimitMapConePullbackConeEquiv F c.condition)
  (isLimitOfPreserves F (hc.ofIsoLimit (PullbackCone.ext (Iso.refl _) (by simp) (by simp))))
state_before: case refine_2.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 (PullbackCone.mk (F.map c.fst) (F.map c.snd) ⋯)
state_after: no goals

tactic: 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
⊢ c.fst = (Iso.refl c.pt).hom ≫ (PullbackCone.mk c.fst c.snd ⋯).fst
state_after: no goals

tactic: 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
⊢ c.snd = (Iso.refl c.pt).hom ≫ (PullbackCone.mk c.fst c.snd ⋯).snd
state_after: no goals