case tfae_1_to_2
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
⊢ EffectiveEpiFamily X π → Epi (Sigma.desc π)

α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ TFAE [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b]
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
⊢ TFAE [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b]
tfae_have 1 → 2
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b

α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_2_to_3 : Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
⊢ TFAE [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b]
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ TFAE [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b]
tfae_have 2 → 3
case tfae_3_to_1
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_2_to_3 : Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
⊢ (∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b) → EffectiveEpiFamily X π

α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_2_to_3 : Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
tfae_3_to_1 : (∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b) → EffectiveEpiFamily X π
⊢ TFAE [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b]
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_2_to_3 : Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
⊢ TFAE [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b]
tfae_have 3 → 1
no goals
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_2_to_3 : Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
tfae_3_to_1 : (∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b) → EffectiveEpiFamily X π
⊢ TFAE [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b]
tfae_finish
case tfae_1_to_2
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
✝ : EffectiveEpiFamily X π
⊢ Epi (Sigma.desc π)
case tfae_1_to_2
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
⊢ EffectiveEpiFamily X π → Epi (Sigma.desc π)
intro
no goals
case tfae_1_to_2
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
✝ : EffectiveEpiFamily X π
⊢ Epi (Sigma.desc π)
infer_instance
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Epi (Sigma.desc π)
⊢ ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
intro e
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
⊢ ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Epi (Sigma.desc π)
⊢ ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
rw [epi_iff_surjective] at e
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
⊢ ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
⊢ ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
let i : ∐ X ≅ finiteCoproduct X :=
  (colimit.isColimit _).coconePointUniqueUpToIso (finiteCoproduct.isColimit _)
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
b : ↑B.toTop
⊢ ∃ a x, (forget CompHaus).map (π a) x = b
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
⊢ ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
intro b
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
⊢ ∃ a x, (forget CompHaus).map (π a) x = (forget CompHaus).map (Sigma.desc π) t
case tfae_2_to_3
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
b : ↑B.toTop
⊢ ∃ a x, (forget CompHaus).map (π a) x = b
obtain ⟨t,rfl⟩ := e b
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
⊢ ∃ a x, (forget CompHaus).map (π a) x = (forget CompHaus).map (Sigma.desc π) t
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
⊢ ∃ a x, (forget CompHaus).map (π a) x = (forget CompHaus).map (Sigma.desc π) t
let q := i.hom t
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
⊢ (forget CompHaus).map (π q.fst) q.snd = (forget CompHaus).map (Sigma.desc π) t
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
⊢ ∃ a x, (forget CompHaus).map (π a) x = (forget CompHaus).map (Sigma.desc π) t
refine ⟨q.1,q.2,?_⟩
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ (forget CompHaus).map (π q.fst) q.snd = (forget CompHaus).map (Sigma.desc π) t
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
⊢ (forget CompHaus).map (π q.fst) q.snd = (forget CompHaus).map (Sigma.desc π) t
have : t = i.inv (i.hom t) := show t = (i.hom ≫ i.inv) t by simp only [i.hom_inv_id] ; rfl
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ (forget CompHaus).map (π q.fst) q.snd =
    (forget CompHaus).map (Sigma.desc π) ((forget CompHaus).map i.inv ((forget CompHaus).map i.hom t))
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ (forget CompHaus).map (π q.fst) q.snd = (forget CompHaus).map (Sigma.desc π) t
rw [this]
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ (forget CompHaus).map (π q.fst) q.snd = (forget CompHaus).map (i.inv ≫ Sigma.desc π) ((forget CompHaus).map i.hom t)
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ (forget CompHaus).map (π q.fst) q.snd =
    (forget CompHaus).map (Sigma.desc π) ((forget CompHaus).map i.inv ((forget CompHaus).map i.hom t))
show _ = (i.inv ≫ Sigma.desc π) (i.hom t)
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ i.inv ≫ Sigma.desc π = finiteCoproduct.desc X π
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ (forget CompHaus).map (π q.fst) q.snd = (forget CompHaus).map (i.inv ≫ Sigma.desc π) ((forget CompHaus).map i.hom t)
suffices i.inv ≫ Sigma.desc π = finiteCoproduct.desc X π by
  rw [this] ; rfl
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ Sigma.desc π = i.hom ≫ finiteCoproduct.desc X π
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ i.inv ≫ Sigma.desc π = finiteCoproduct.desc X π
rw [Iso.inv_comp_eq]
case tfae_2_to_3.intro.w
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ ∀ (j : Discrete α),
    colimit.ι (Discrete.functor X) j ≫ Sigma.desc π =
      colimit.ι (Discrete.functor X) j ≫ i.hom ≫ finiteCoproduct.desc X π
case tfae_2_to_3.intro
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ Sigma.desc π = i.hom ≫ finiteCoproduct.desc X π
apply colimit.hom_ext
case tfae_2_to_3.intro.w.mk
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
a : α
⊢ colimit.ι (Discrete.functor X) { as := a } ≫ Sigma.desc π =
    colimit.ι (Discrete.functor X) { as := a } ≫ i.hom ≫ finiteCoproduct.desc X π
case tfae_2_to_3.intro.w
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
⊢ ∀ (j : Discrete α),
    colimit.ι (Discrete.functor X) j ≫ Sigma.desc π =
      colimit.ι (Discrete.functor X) j ≫ i.hom ≫ finiteCoproduct.desc X π
rintro ⟨a⟩
case tfae_2_to_3.intro.w.mk
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
a : α
⊢ π a = (finiteCoproduct.cocone X).ι.app { as := a } ≫ finiteCoproduct.desc X π
case tfae_2_to_3.intro.w.mk
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
a : α
⊢ colimit.ι (Discrete.functor X) { as := a } ≫ Sigma.desc π =
    colimit.ι (Discrete.functor X) { as := a } ≫ i.hom ≫ finiteCoproduct.desc X π
simp only [Discrete.functor_obj, colimit.ι_desc, Cofan.mk_pt, Cofan.mk_ι_app,
  colimit.comp_coconePointUniqueUpToIso_hom_assoc]
case tfae_2_to_3.intro.w.mk.w
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
a : α
x✝ : (forget CompHaus).obj (X a)
⊢ (forget CompHaus).map (π a) x✝ =
    (forget CompHaus).map ((finiteCoproduct.cocone X).ι.app { as := a } ≫ finiteCoproduct.desc X π) x✝
case tfae_2_to_3.intro.w.mk
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
a : α
⊢ π a = (finiteCoproduct.cocone X).ι.app { as := a } ≫ finiteCoproduct.desc X π
ext
no goals
case tfae_2_to_3.intro.w.mk.w
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
a : α
x✝ : (forget CompHaus).obj (X a)
⊢ (forget CompHaus).map (π a) x✝ =
    (forget CompHaus).map ((finiteCoproduct.cocone X).ι.app { as := a } ≫ finiteCoproduct.desc X π) x✝
rfl
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
⊢ t = (forget CompHaus).map (𝟙 (∐ X)) t
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
⊢ t = (forget CompHaus).map (i.hom ≫ i.inv) t
simp only [i.hom_inv_id]
no goals
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
⊢ t = (forget CompHaus).map (𝟙 (∐ X)) t
rfl
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this✝ : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
this : i.inv ≫ Sigma.desc π = finiteCoproduct.desc X π
⊢ (forget CompHaus).map (π q.fst) q.snd =
    (forget CompHaus).map (finiteCoproduct.desc X π) ((forget CompHaus).map i.hom t)
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this✝ : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
this : i.inv ≫ Sigma.desc π = finiteCoproduct.desc X π
⊢ (forget CompHaus).map (π q.fst) q.snd = (forget CompHaus).map (i.inv ≫ Sigma.desc π) ((forget CompHaus).map i.hom t)
rw [this]
no goals
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
e : Function.Surjective ((forget CompHaus).map (Sigma.desc π))
i : ∐ X ≅ finiteCoproduct X :=
  IsColimit.coconePointUniqueUpToIso (colimit.isColimit (Discrete.functor X)) (finiteCoproduct.isColimit X)
t : (forget CompHaus).obj (∐ fun b => X b)
q : (forget CompHaus).obj (finiteCoproduct X) := (forget CompHaus).map i.hom t
this✝ : t = (forget CompHaus).map i.inv ((forget CompHaus).map i.hom t)
this : i.inv ≫ Sigma.desc π = finiteCoproduct.desc X π
⊢ (forget CompHaus).map (π q.fst) q.snd =
    (forget CompHaus).map (finiteCoproduct.desc X π) ((forget CompHaus).map i.hom t)
rfl
no goals
case tfae_3_to_1
α : Type
inst✝ : Fintype α
B : CompHaus
X : α → CompHaus
π : (a : α) → X a ⟶ B
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_2_to_3 : Epi (Sigma.desc π) → ∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b
⊢ (∀ (b : ↑B.toTop), ∃ a x, (forget CompHaus).map (π a) x = b) → EffectiveEpiFamily X π
apply effectiveEpiFamily_of_jointly_surjective