Theorem: Measurable.exists_continuous
File: Mathlib/MeasureTheory/Constructions/Polish.lean

tactic: obtain ⟨b, b_count, -, hb⟩ :
    ∃ b : Set (Set (range f)), b.Countable ∧ ∅ ∉ b ∧ IsTopologicalBasis b :=
  exists_countable_basis (range f)
state_before: α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α
state_after: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α

tactic: haveI : Countable b := b_count.to_subtype
state_before: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α
state_after: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α

tactic: have : ∀ s : b, IsClopenable (rangeFactorization f ⁻¹' s) := fun s ↦ by
  apply MeasurableSet.isClopenable
  exact hf.subtype_mk (hb.isOpen s.2).measurableSet
state_before: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α
state_after: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this✝ : Countable ↑b
this : ∀ (s : ↑b), IsClopenable (rangeFactorization f ⁻¹' ↑s)
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α

tactic: choose T Tt Tpolish _ Topen using this
state_before: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this✝ : Countable ↑b
this : ∀ (s : ↑b), IsClopenable (rangeFactorization f ⁻¹' ↑s)
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α
state_after: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α

tactic: obtain ⟨t', t'T, t't, t'_polish⟩ :
    ∃ t' : TopologicalSpace α, (∀ i, t' ≤ T i) ∧ t' ≤ t ∧ @PolishSpace α t' :=
  exists_polishSpace_forall_le (t := t) T Tt Tpolish
state_before: case intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α
state_after: case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α

tactic: refine ⟨t', t't, ?_, t'_polish⟩
state_before: case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
⊢ ∃ t' ≤ t, Continuous f ∧ PolishSpace α
state_after: case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
⊢ Continuous f

tactic: have : Continuous[t', _] (rangeFactorization f) :=
  hb.continuous_iff.2 fun s hs => t'T ⟨s, hs⟩ _ (Topen ⟨s, hs⟩)
state_before: case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
⊢ Continuous f
state_after: case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this✝ : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
this : Continuous (rangeFactorization f)
⊢ Continuous f

tactic: exact continuous_subtype_val.comp this
state_before: case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this✝ : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
this : Continuous (rangeFactorization f)
⊢ Continuous f
state_after: no goals

tactic: apply MeasurableSet.isClopenable
state_before: α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
s : ↑b
⊢ IsClopenable (rangeFactorization f ⁻¹' ↑s)
state_after: case hs
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
s : ↑b
⊢ MeasurableSet (rangeFactorization f ⁻¹' ↑s)

tactic: exact hf.subtype_mk (hb.isOpen s.2).measurableSet
state_before: case hs
α✝ : Type u_1
ι : Type u_2
inst✝⁶ : TopologicalSpace α✝
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : b.Countable
hb : IsTopologicalBasis b
this : Countable ↑b
s : ↑b
⊢ MeasurableSet (rangeFactorization f ⁻¹' ↑s)
state_after: no goals