Theorem: Stonean.effectiveEpiFamily_tfae
File: Mathlib/Topology/Category/Stonean/EffectiveEpi.lean

tactic: tfae_have 2 → 1
state_before: α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
⊢ [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b].TFAE
state_after: case tfae_2_to_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
⊢ Epi (Sigma.desc π) → EffectiveEpiFamily X π

α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
⊢ [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b].TFAE

tactic: tfae_have 1 → 2
state_before: α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
⊢ [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b].TFAE
state_after: case tfae_1_to_2
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
⊢ EffectiveEpiFamily X π → Epi (Sigma.desc π)

α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b].TFAE

tactic: tfae_have 3 ↔ 1
state_before: α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b].TFAE
state_after: case tfae_3_iff_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ (∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b) ↔ EffectiveEpiFamily X π

α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_3_iff_1 : (∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b) ↔ EffectiveEpiFamily X π
⊢ [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b].TFAE

tactic: tfae_finish
state_before: α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
tfae_3_iff_1 : (∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b) ↔ EffectiveEpiFamily X π
⊢ [EffectiveEpiFamily X π, Epi (Sigma.desc π), ∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b].TFAE
state_after: no goals

tactic: intro
state_before: case tfae_2_to_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
⊢ Epi (Sigma.desc π) → EffectiveEpiFamily X π
state_after: case tfae_2_to_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
a✝ : Epi (Sigma.desc π)
⊢ EffectiveEpiFamily X π

tactic: simpa [← effectiveEpi_desc_iff_effectiveEpiFamily, (effectiveEpi_tfae (Sigma.desc π)).out 0 1]
state_before: case tfae_2_to_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
a✝ : Epi (Sigma.desc π)
⊢ EffectiveEpiFamily X π
state_after: no goals

tactic: intro
state_before: case tfae_1_to_2
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
⊢ EffectiveEpiFamily X π → Epi (Sigma.desc π)
state_after: case tfae_1_to_2
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
a✝ : EffectiveEpiFamily X π
⊢ Epi (Sigma.desc π)

tactic: infer_instance
state_before: case tfae_1_to_2
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
a✝ : EffectiveEpiFamily X π
⊢ Epi (Sigma.desc π)
state_after: no goals

tactic: erw [((CompHaus.effectiveEpiFamily_tfae
  (fun a ↦ Stonean.toCompHaus.obj (X a)) (fun a ↦ Stonean.toCompHaus.map (π a))).out 2 0 : )]
state_before: case tfae_3_iff_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ (∀ (b : CoeSort.coe B), ∃ a x, (π a) x = b) ↔ EffectiveEpiFamily X π
state_after: case tfae_3_iff_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ (EffectiveEpiFamily (fun a => toCompHaus.obj (X a)) fun a => toCompHaus.map (π a)) ↔ EffectiveEpiFamily X π

tactic: exact ⟨fun h ↦ Stonean.toCompHaus.finite_effectiveEpiFamily_of_map _ _ h,
  fun _ ↦ inferInstance⟩
state_before: case tfae_3_iff_1
α : Type
inst✝ : Finite α
B : Stonean
X : α → Stonean
π : (a : α) → X a ⟶ B
tfae_2_to_1 : Epi (Sigma.desc π) → EffectiveEpiFamily X π
tfae_1_to_2 : EffectiveEpiFamily X π → Epi (Sigma.desc π)
⊢ (EffectiveEpiFamily (fun a => toCompHaus.obj (X a)) fun a => toCompHaus.map (π a)) ↔ EffectiveEpiFamily X π
state_after: no goals