Theorem: CompactT2.ExtremallyDisconnected.projective
File: Mathlib/Topology/ExtremallyDisconnected.lean

Proof steps:
state_before: X : Type u
inst✝⁶ : TopologicalSpace X
A D E : Type u
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace D
inst✝³ : TopologicalSpace E
inst✝² : ExtremallyDisconnected A
inst✝¹ : CompactSpace A
inst✝ : T2Space A
⊢ Projective A
state_after: X : Type u
inst✝¹² : TopologicalSpace X
A D E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: intro B C _ _ _ _ _ _ φ f φ_cont f_cont f_surj
state_before: X : Type u
inst✝¹² : TopologicalSpace X
A D E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: let D : Set <| A × B := {x | φ x.fst = f x.snd}
state_before: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: have D_comp : CompactSpace D := isCompact_iff_compactSpace.mp
    (isClosed_eq (φ_cont.comp continuous_fst) (f_cont.comp continuous_snd)).isCompact
state_before: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: let π₁ : D → A := Prod.fst ∘ Subtype.val
state_before: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: have π₁_cont : Continuous π₁ := continuous_fst.comp continuous_subtype_val
state_before: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: have π₁_surj : π₁.Surjective := fun a => ⟨⟨⟨a, _⟩, (f_surj <| φ a).choose_spec.symm⟩, rfl⟩
state_before: X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: rcases exists_compact_surjective_zorn_subset π₁_cont π₁_surj with ⟨E, _, E_onto, E_min⟩
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: let ρ : E → A := E.restrict π₁
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: have ρ_cont : Continuous ρ := π₁_cont.continuousOn.restrict
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: have ρ_surj : ρ.Surjective := fun a => by
    rcases (E_onto ▸ mem_univ a : a ∈ π₁ '' E) with ⟨d, ⟨hd, rfl⟩⟩; exact ⟨⟨d, hd⟩, rfl⟩
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: let ρ' := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: let π₂ : D → B := Prod.snd ∘ Subtype.val
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
tactic: have π₂_cont : Continuous π₂ := continuous_snd.comp continuous_subtype_val
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
⊢ ∃ h, Continuous h ∧ f ∘ h = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
⊢ f ∘ E.restrict π₂ ∘ ⇑ρ'.symm = φ
tactic: refine ⟨E.restrict π₂ ∘ ρ'.symm, ⟨π₂_cont.continuousOn.restrict.comp ρ'.symm.continuous, ?_⟩⟩
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
⊢ f ∘ E.restrict π₂ ∘ ⇑ρ'.symm = φ
state_after: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
⊢ f ∘ E.restrict π₂ = φ ∘ ⇑ρ'
tactic: suffices f ∘ E.restrict π₂ = φ ∘ ρ' by
    rw [← comp.assoc, this, comp.assoc, Homeomorph.self_comp_symm, comp_id]
state_before: case intro.intro.intro
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
⊢ f ∘ E.restrict π₂ = φ ∘ ⇑ρ'
state_after: case intro.intro.intro.h
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
x : ↑E
⊢ (f ∘ E.restrict π₂) x = (φ ∘ ⇑ρ') x
tactic: ext x
state_before: case intro.intro.intro.h
X : Type u
inst✝¹² : TopologicalSpace X
A D✝ E✝ : Type u
inst✝¹¹ : TopologicalSpace A
inst✝¹⁰ : TopologicalSpace D✝
inst✝⁹ : TopologicalSpace E✝
inst✝⁸ : ExtremallyDisconnected A
inst✝⁷ : CompactSpace A
inst✝⁶ : T2Space A
B C : Type u
inst✝⁵ : TopologicalSpace B
inst✝⁴ : TopologicalSpace C
inst✝³ : CompactSpace B
inst✝² : T2Space B
inst✝¹ : CompactSpace C
inst✝ : T2Space C
φ : A → C
f : B → C
φ_cont : Continuous φ
f_cont : Continuous f
f_surj : Surjective f
D : Set (A × B) := {x | φ x.1 = f x.2}
D_comp : CompactSpace ↑D
π₁ : ↑D → A := Prod.fst ∘ Subtype.val
π₁_cont : Continuous π₁
π₁_surj : Surjective π₁
E : Set ↑D
left✝ : CompactSpace ↑E
E_onto : π₁ '' E = univ
E_min : ∀ (E₀ : Set ↑E), E₀ ≠ univ → IsClosed E₀ → E.restrict π₁ '' E₀ ≠ univ
ρ : ↑E → A := E.restrict π₁
ρ_cont : Continuous ρ
ρ_surj : Surjective ρ
ρ' : ↑E ≃ₜ A := ExtremallyDisconnected.homeoCompactToT2 ρ_cont ρ_surj E_min
π₂ : ↑D → B := Prod.snd ∘ Subtype.val
π₂_cont : Continuous π₂
x : ↑E
⊢ (f ∘ E.restrict π₂) x = (φ ∘ ⇑ρ') x
state_after: no goals
tactic: exact x.val.mem.symm