l3lab/ntp-mathlib huggingface dataset:
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  

Proof state:
case h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝¹ : CompactSpace ↑(TopCat.of A)
this✝ : T2Space ↑(TopCat.of A)
this : CompactSpace ↑(TopCat.of B)
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
have : T2Space (TopCat.of B) := by assumption
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by 

Proof state:
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝¹ : CompactSpace ↑(TopCat.of A)
this✝ : T2Space ↑(TopCat.of A)
this : CompactSpace ↑(TopCat.of B)
⊢ T2Space ↑(TopCat.of B)

Next tactic:
assumption
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  

Proof state:
case h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝² : CompactSpace ↑(TopCat.of A)
this✝¹ : T2Space ↑(TopCat.of A)
this✝ : CompactSpace ↑(TopCat.of B)
this : T2Space ↑(TopCat.of B)
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
let A' : CompHaus := ⟨TopCat.of A⟩
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  

Proof state:
case h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝² : CompactSpace ↑(TopCat.of A)
this✝¹ : T2Space ↑(TopCat.of A)
this✝ : CompactSpace ↑(TopCat.of B)
this : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
let B' : CompHaus := ⟨TopCat.of B⟩
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  

Proof state:
case h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝² : CompactSpace ↑(TopCat.of A)
this✝¹ : T2Space ↑(TopCat.of A)
this✝ : CompactSpace ↑(TopCat.of B)
this : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
let f' : X ⟶ B' := ⟨f, hf⟩
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  

Proof state:
case h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝² : CompactSpace ↑(TopCat.of A)
this✝¹ : T2Space ↑(TopCat.of A)
this✝ : CompactSpace ↑(TopCat.of B)
this : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
let g' : A' ⟶ B' := ⟨g,hg⟩
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  

Proof state:
case h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝² : CompactSpace ↑(TopCat.of A)
this✝¹ : T2Space ↑(TopCat.of A)
this✝ : CompactSpace ↑(TopCat.of B)
this : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
have : Epi g' := by
    rw [CompHaus.epi_iff_surjective]
    assumption
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  have : Epi g' := by
    

Proof state:
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝² : CompactSpace ↑(TopCat.of A)
this✝¹ : T2Space ↑(TopCat.of A)
this✝ : CompactSpace ↑(TopCat.of B)
this : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
⊢ Epi g'

Next tactic:
rw [CompHaus.epi_iff_surjective]
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  have : Epi g' := by
    rw [CompHaus.epi_iff_surjective]
    

Proof state:
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝² : CompactSpace ↑(TopCat.of A)
this✝¹ : T2Space ↑(TopCat.of A)
this✝ : CompactSpace ↑(TopCat.of B)
this : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
⊢ Function.Surjective ⇑g'

Next tactic:
assumption
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  have : Epi g' := by
    rw [CompHaus.epi_iff_surjective]
    assumption
  

Proof state:
case h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝³ : CompactSpace ↑(TopCat.of A)
this✝² : T2Space ↑(TopCat.of A)
this✝¹ : CompactSpace ↑(TopCat.of B)
this✝ : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
this : Epi g'
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
obtain ⟨h, hh⟩ := Projective.factors f' g'
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  have : Epi g' := by
    rw [CompHaus.epi_iff_surjective]
    assumption
  obtain ⟨h, hh⟩ := Projective.factors f' g'
  

Proof state:
case h.intro
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝³ : CompactSpace ↑(TopCat.of A)
this✝² : T2Space ↑(TopCat.of A)
this✝¹ : CompactSpace ↑(TopCat.of B)
this✝ : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
this : Epi g'
h : X ⟶ A'
hh : h ≫ g' = f'
⊢ ∃ h, Continuous h ∧ g ∘ h = f

Next tactic:
refine ⟨h, h.2, ?_⟩
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  have : Epi g' := by
    rw [CompHaus.epi_iff_surjective]
    assumption
  obtain ⟨h, hh⟩ := Projective.factors f' g'
  refine ⟨h, h.2, ?_⟩
  

Proof state:
case h.intro
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝³ : CompactSpace ↑(TopCat.of A)
this✝² : T2Space ↑(TopCat.of A)
this✝¹ : CompactSpace ↑(TopCat.of B)
this✝ : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
this : Epi g'
h : X ⟶ A'
hh : h ≫ g' = f'
⊢ g ∘ ⇑h = f

Next tactic:
ext t
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  have : Epi g' := by
    rw [CompHaus.epi_iff_surjective]
    assumption
  obtain ⟨h, hh⟩ := Projective.factors f' g'
  refine ⟨h, h.2, ?_⟩
  ext t
  

Proof state:
case h.intro.h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝³ : CompactSpace ↑(TopCat.of A)
this✝² : T2Space ↑(TopCat.of A)
this✝¹ : CompactSpace ↑(TopCat.of B)
this✝ : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
this : Epi g'
h : X ⟶ A'
hh : h ≫ g' = f'
t : ↑X.toTop
⊢ (g ∘ ⇑h) t = f t

Next tactic:
apply_fun (fun e => e t) at hh
/-- `Projective` implies `ExtremallyDisconnected`. -/
instance (X : CompHaus.{u}) [Projective X] : ExtremallyDisconnected X := by
  apply CompactT2.Projective.extremallyDisconnected
  intro A B _ _ _ _ _ _ f g hf hg hsurj
  have : CompactSpace (TopCat.of A) := by assumption
  have : T2Space (TopCat.of A) := by assumption
  have : CompactSpace (TopCat.of B) := by assumption
  have : T2Space (TopCat.of B) := by assumption
  let A' : CompHaus := ⟨TopCat.of A⟩
  let B' : CompHaus := ⟨TopCat.of B⟩
  let f' : X ⟶ B' := ⟨f, hf⟩
  let g' : A' ⟶ B' := ⟨g,hg⟩
  have : Epi g' := by
    rw [CompHaus.epi_iff_surjective]
    assumption
  obtain ⟨h, hh⟩ := Projective.factors f' g'
  refine ⟨h, h.2, ?_⟩
  ext t
  apply_fun (fun e => e t) at hh
  

Proof state:
case h.intro.h
X : CompHaus
inst✝⁶ : Projective X
A B : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : CompactSpace A
inst✝² : T2Space A
inst✝¹ : CompactSpace B
inst✝ : T2Space B
f : ↑X.toTop → B
g : A → B
hf : Continuous f
hg : Continuous g
hsurj : Function.Surjective g
this✝³ : CompactSpace ↑(TopCat.of A)
this✝² : T2Space ↑(TopCat.of A)
this✝¹ : CompactSpace ↑(TopCat.of B)
this✝ : T2Space ↑(TopCat.of B)
A' : CompHaus := mk (TopCat.of A)
B' : CompHaus := mk (TopCat.of B)
f' : X ⟶ B' := ContinuousMap.mk f
g' : A' ⟶ B' := ContinuousMap.mk g
this : Epi g'
h : X ⟶ A'
t : ↑X.toTop
hh : (h ≫ g') t = f' t
⊢ (g ∘ ⇑h) t = f t

Next tactic:
exact hh
/-- The equivalence between isomorphisms in `Stonean` and homeomorphisms
of topological spaces. -/
@[simps!]
noncomputable
def isoEquivHomeo {X Y : Stonean} : (X ≅ Y) ≃ (X ≃ₜ Y) where
  toFun := homeoOfIso
  invFun := isoOfHomeo
  left_inv f := by 

Proof state:
X Y : Stonean
f : X ≅ Y
⊢ isoOfHomeo (homeoOfIso f) = f

Next tactic:
ext
/-- The equivalence between isomorphisms in `Stonean` and homeomorphisms
of topological spaces. -/
@[simps!]
noncomputable
def isoEquivHomeo {X Y : Stonean} : (X ≅ Y) ≃ (X ≃ₜ Y) where
  toFun := homeoOfIso
  invFun := isoOfHomeo
  left_inv f := by ext; 

Proof state:
case w.w
X Y : Stonean
f : X ≅ Y
x✝ : (forget Stonean).obj X
⊢ (isoOfHomeo (homeoOfIso f)).hom x✝ = f.hom x✝

Next tactic:
rfl
/-- The equivalence between isomorphisms in `Stonean` and homeomorphisms
of topological spaces. -/
@[simps!]
noncomputable
def isoEquivHomeo {X Y : Stonean} : (X ≅ Y) ≃ (X ≃ₜ Y) where
  toFun := homeoOfIso
  invFun := isoOfHomeo
  left_inv f := by ext; rfl
  right_inv f := by 

Proof state:
X Y : Stonean
f : CoeSort.coe X ≃ₜ CoeSort.coe Y
⊢ homeoOfIso (isoOfHomeo f) = f

Next tactic:
ext
/-- The equivalence between isomorphisms in `Stonean` and homeomorphisms
of topological spaces. -/
@[simps!]
noncomputable
def isoEquivHomeo {X Y : Stonean} : (X ≅ Y) ≃ (X ≃ₜ Y) where
  toFun := homeoOfIso
  invFun := isoOfHomeo
  left_inv f := by ext; rfl
  right_inv f := by ext; 

Proof state:
case H
X Y : Stonean
f : CoeSort.coe X ≃ₜ CoeSort.coe Y
x✝ : CoeSort.coe X
⊢ (homeoOfIso (isoOfHomeo f)) x✝ = f x✝

Next tactic:
rfl
/--
A finite discrete space as a Stonean space.
-/
def mkFinite (X : Type*) [Finite X] [TopologicalSpace X] [DiscreteTopology X] : Stonean where
  compHaus := CompHaus.of X
  extrDisc := by
    

Proof state:
X : Type u_1
inst✝² : Finite X
inst✝¹ : TopologicalSpace X
inst✝ : DiscreteTopology X
⊢ ExtremallyDisconnected ↑(CompHaus.of X).toTop

Next tactic:
dsimp
/--
A finite discrete space as a Stonean space.
-/
def mkFinite (X : Type*) [Finite X] [TopologicalSpace X] [DiscreteTopology X] : Stonean where
  compHaus := CompHaus.of X
  extrDisc := by
    dsimp
    

Proof state:
X : Type u_1
inst✝² : Finite X
inst✝¹ : TopologicalSpace X
inst✝ : DiscreteTopology X
⊢ ExtremallyDisconnected X

Next tactic:
constructor
/--
A finite discrete space as a Stonean space.
-/
def mkFinite (X : Type*) [Finite X] [TopologicalSpace X] [DiscreteTopology X] : Stonean where
  compHaus := CompHaus.of X
  extrDisc := by
    dsimp
    constructor
    

Proof state:
case open_closure
X : Type u_1
inst✝² : Finite X
inst✝¹ : TopologicalSpace X
inst✝ : DiscreteTopology X
⊢ ∀ (U : Set X), IsOpen U → IsOpen (closure U)

Next tactic:
intro U _
/--
A finite discrete space as a Stonean space.
-/
def mkFinite (X : Type*) [Finite X] [TopologicalSpace X] [DiscreteTopology X] : Stonean where
  compHaus := CompHaus.of X
  extrDisc := by
    dsimp
    constructor
    intro U _
    

Proof state:
case open_closure
X : Type u_1
inst✝² : Finite X
inst✝¹ : TopologicalSpace X
inst✝ : DiscreteTopology X
U : Set X
a✝ : IsOpen U
⊢ IsOpen (closure U)

Next tactic:
apply isOpen_discrete (closure U)
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  

Proof state:
X Y : Stonean
f : X ⟶ Y
⊢ Epi f ↔ Function.Surjective ⇑f

Next tactic:
refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
  

Proof state:
X Y : Stonean
f : X ⟶ Y
⊢ Epi f → Function.Surjective ⇑f

Next tactic:
dsimp [Function.Surjective]
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
  dsimp [Function.Surjective]
  

Proof state:
X Y : Stonean
f : X ⟶ Y
⊢ Epi f → ∀ (b : CoeSort.coe Y), ∃ a, f a = b

Next tactic:
intro h y
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
  dsimp [Function.Surjective]
  intro h y
  

Proof state:
X Y : Stonean
f : X ⟶ Y
h : Epi f
y : CoeSort.coe Y
⊢ ∃ a, f a = y

Next tactic:
by_contra! hy
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
  dsimp [Function.Surjective]
  intro h y
  by_contra! hy
  

Proof state:
X Y : Stonean
f : X ⟶ Y
h : Epi f
y : CoeSort.coe Y
hy : ∀ (a : CoeSort.coe X), f a ≠ y
⊢ False

Next tactic:
let C := Set.range f
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
  dsimp [Function.Surjective]
  intro h y
  by_contra! hy
  let C := Set.range f
  

Proof state:
X Y : Stonean
f : X ⟶ Y
h : Epi f
y : CoeSort.coe Y
hy : ∀ (a : CoeSort.coe X), f a ≠ y
C : Set (CoeSort.coe Y) := Set.range ⇑f
⊢ False

Next tactic:
have hC : IsClosed C := (isCompact_range f.continuous).isClosed
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
  dsimp [Function.Surjective]
  intro h y
  by_contra! hy
  let C := Set.range f
  have hC : IsClosed C := (isCompact_range f.continuous).isClosed
  

Proof state:
X Y : Stonean
f : X ⟶ Y
h : Epi f
y : CoeSort.coe Y
hy : ∀ (a : CoeSort.coe X), f a ≠ y
C : Set (CoeSort.coe Y) := Set.range ⇑f
hC : IsClosed C
⊢ False

Next tactic:
let U := Cᶜ
/--
A morphism in `Stonean` is an epi iff it is surjective.

TODO: prove that `forget Stonean` preserves pushouts (in fact it preserves all finite colimits)
and deduce this from general lemmas about concrete categories.
-/
lemma epi_iff_surjective {X Y : Stonean} (f : X ⟶ Y) :
    Epi f ↔ Function.Surjective f := by
  refine ⟨?_, ConcreteCategory.epi_of_surjective _⟩
  dsimp [Function.Surjective]
  intro h y
  by_contra! hy
  let C := Set.range f
  have hC : IsClosed C := (isCompact_range f.continuous).isClosed
  let U := Cᶜ
  

Proof state:
X Y : Stonean
f : X ⟶ Y
h : Epi f
y : CoeSort.coe Y
hy : ∀ (a : CoeSort.coe X), f a ≠ y
C : Set (CoeSort.coe Y) := Set.range ⇑f
hC : IsClosed C
U : Set (CoeSort.coe Y) := Cᶜ
⊢ False

Next tactic:
have hUy : U ∈ nhds y := by
    simp only [Set.mem_range, hy, exists_false, not_false_eq_true, hC.compl_mem_nhds]