Theorem: CompHaus.epi_iff_surjective
File: Mathlib/Topology/Category/CompHaus/Basic.lean

tactic: constructor
state_before: X Y : CompHaus
f : X ⟶ Y
⊢ Epi f ↔ Function.Surjective ((forget CompHaus).map f)

tactic: dsimp [Function.Surjective]
state_before: case mp
X Y : CompHaus
f : X ⟶ Y
⊢ Epi f → Function.Surjective ((forget CompHaus).map f)

tactic: contrapose!
state_before: case mp
X Y : CompHaus
f : X ⟶ Y
⊢ Epi f → ∀ (b : (forget CompHaus).obj Y), ∃ a, (forget CompHaus).map f a = b

tactic: rintro ⟨y, hy⟩ hf
state_before: case mp
X Y : CompHaus
f : X ⟶ Y
⊢ (∃ b, ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ b) → ¬Epi f

tactic: let C := Set.range f
state_before: case mp.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
⊢ False

tactic: have hC : IsClosed C := (isCompact_range f.continuous).isClosed
state_before: case mp.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
⊢ False

tactic: let D := ({y} : Set Y)
state_before: case mp.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
⊢ False

tactic: have hD : IsClosed D := isClosed_singleton
state_before: case mp.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
⊢ False

tactic: have hCD : Disjoint C D := by
  rw [Set.disjoint_singleton_right]
  rintro ⟨y', hy'⟩
  exact hy y' hy'
state_before: case mp.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
⊢ False

tactic: haveI : NormalSpace ((forget CompHaus).obj Y) := normalOfCompactT2
state_before: case mp.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
⊢ False

tactic: obtain ⟨φ, hφ0, hφ1, hφ01⟩ := exists_continuous_zero_one_of_closed hC hD hCD
state_before: case mp.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this : NormalSpace ((forget CompHaus).obj Y)
⊢ False

tactic: haveI : CompactSpace (ULift.{u} <| Set.Icc (0 : ℝ) 1) := Homeomorph.ulift.symm.compactSpace
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
⊢ False

tactic: haveI : T2Space (ULift.{u} <| Set.Icc (0 : ℝ) 1) := Homeomorph.ulift.symm.t2Space
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this : CompactSpace (ULift ↑(Set.Icc 0 1))
⊢ False

tactic: let Z := of (ULift.{u} <| Set.Icc (0 : ℝ) 1)
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
⊢ False

tactic: let g : Y ⟶ Z :=
  ⟨fun y' => ⟨⟨φ y', hφ01 y'⟩⟩,
    continuous_uLift_up.comp (φ.continuous.subtype_mk fun y' => hφ01 y')⟩
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
⊢ False

tactic: let h : Y ⟶ Z := ⟨fun _ => ⟨⟨0, Set.left_mem_Icc.mpr zero_le_one⟩⟩, continuous_const⟩
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
⊢ False

tactic: have H : h = g := by
  rw [← cancel_epi f]
  ext x
  apply ULift.ext
  apply Subtype.ext
  dsimp
  change 0 = φ (f x)
  simp only [hφ0 (Set.mem_range_self x), Pi.zero_apply]
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
⊢ False

tactic: apply_fun fun e => (e y).down.1 at H
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
H : h = g
⊢ False

tactic: dsimp at H
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
H : ↑((forget CompHaus).map h y).down = ↑((forget CompHaus).map g y).down
⊢ False

tactic: change 0 = φ y at H
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
H :
  ↑((forget CompHaus).map (ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } })
          y).down =
    ↑((forget CompHaus).map
          (ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }) y).down
⊢ False

tactic: simp only [hφ1 (Set.mem_singleton y), Pi.one_apply] at H
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
H : 0 = ↑φ y
⊢ False

tactic: exact zero_ne_one H
state_before: case mp.intro.intro.intro.intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
H : 0 = 1
⊢ False

tactic: rw [Set.disjoint_singleton_right]
state_before: X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
⊢ Disjoint C D

tactic: rintro ⟨y', hy'⟩
state_before: X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
⊢ ¬y ∈ C

tactic: exact hy y' hy'
state_before: case intro
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
y' : (forget CompHaus).obj X
hy' : (forget CompHaus).map f y' = y
⊢ False

tactic: rw [← cancel_epi f]
state_before: X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
⊢ h = g

tactic: ext x
state_before: X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
⊢ f ≫ h = f ≫ g

tactic: apply ULift.ext
state_before: case w
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
x : (forget CompHaus).obj X
⊢ (forget CompHaus).map (f ≫ h) x = (forget CompHaus).map (f ≫ g) x

tactic: apply Subtype.ext
state_before: case w.h
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
x : (forget CompHaus).obj X
⊢ ((forget CompHaus).map (f ≫ h) x).down = ((forget CompHaus).map (f ≫ g) x).down

tactic: dsimp
state_before: case w.h.a
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
x : (forget CompHaus).obj X
⊢ ↑((forget CompHaus).map (f ≫ h) x).down = ↑((forget CompHaus).map (f ≫ g) x).down

tactic: change 0 = φ (f x)
state_before: case w.h.a
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
x : (forget CompHaus).obj X
⊢ ↑((forget CompHaus).map (f ≫ ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } })
          x).down =
    ↑((forget CompHaus).map
          (f ≫ ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }) x).down

tactic: simp only [hφ0 (Set.mem_range_self x), Pi.zero_apply]
state_before: case w.h.a
X Y : CompHaus
f : X ⟶ Y
y : (forget CompHaus).obj Y
hy : ∀ (a : (forget CompHaus).obj X), (forget CompHaus).map f a ≠ y
hf : Epi f
C : Set ((forget CompHaus).obj Y) := Set.range ((forget CompHaus).map f)
hC : IsClosed C
D : Set ↑Y.toTop := {y}
hD : IsClosed D
hCD : Disjoint C D
this✝¹ : NormalSpace ((forget CompHaus).obj Y)
φ : C((forget CompHaus).obj Y, ℝ)
hφ0 : Set.EqOn (↑φ) 0 C
hφ1 : Set.EqOn (↑φ) 1 D
hφ01 : ∀ (x : (forget CompHaus).obj Y), ↑φ x ∈ Set.Icc 0 1
this✝ : CompactSpace (ULift ↑(Set.Icc 0 1))
this : T2Space (ULift ↑(Set.Icc 0 1))
Z : CompHaus := of (ULift ↑(Set.Icc 0 1))
g : Y ⟶ Z := ContinuousMap.mk fun y' => { down := { val := ↑φ y', property := (_ : ↑φ y' ∈ Set.Icc 0 1) } }
h : Y ⟶ Z := ContinuousMap.mk fun x => { down := { val := 0, property := (_ : 0 ∈ Set.Icc 0 1) } }
x : (forget CompHaus).obj X
⊢ 0 = ↑φ ((forget CompHaus).map f x)

tactic: rw [← CategoryTheory.epi_iff_surjective]
state_before: case mpr
X Y : CompHaus
f : X ⟶ Y
⊢ Function.Surjective ((forget CompHaus).map f) → Epi f

tactic: apply (forget CompHaus).epi_of_epi_map
state_before: case mpr
X Y : CompHaus
f : X ⟶ Y
⊢ Epi ((forget CompHaus).map f) → Epi f