Theorem: MeasureTheory.isClopenable_iff_measurableSet
File: Mathlib/MeasureTheory/Constructions/Polish.lean

tactic: refine' ⟨fun hs => _, fun hs => hs.isClopenable⟩
state_before: α : Type ?u.324968
inst✝⁵ : TopologicalSpace α
ι : Type ?u.324974
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type ?u.325005
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
⊢ IsClopenable s ↔ MeasurableSet s

tactic: obtain ⟨t', t't, t'_polish, s_closed, _⟩ :
  ∃ t' : TopologicalSpace γ, t' ≤ tγ ∧ @PolishSpace γ t' ∧ IsClosed[t'] s ∧ IsOpen[t'] s := hs
state_before: α : Type ?u.324968
inst✝⁵ : TopologicalSpace α
ι : Type ?u.324974
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type ?u.325005
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : IsClopenable s
⊢ MeasurableSet s

tactic: have C : @Continuous γ γ t' tγ id := continuous_id_of_le t't
state_before: case intro.intro.intro.intro
α : Type ?u.324968
inst✝⁵ : TopologicalSpace α
ι : Type ?u.324974
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type ?u.325005
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
⊢ MeasurableSet s

tactic: have E :=
  @Continuous.measurableEmbedding γ t' t'_polish (@borel γ t')
    (@BorelSpace.mk _ _ (borel γ) rfl)
    γ tγ (@PolishSpace.t2Space γ tγ _) _ _ id C injective_id
state_before: case intro.intro.intro.intro
α : Type ?u.324968
inst✝⁵ : TopologicalSpace α
ι : Type ?u.324974
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type ?u.325005
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
⊢ MeasurableSet s

tactic: have M : @MeasurableSet γ (@borel γ t') s :=
  @IsClosed.measurableSet γ s t' (@borel γ t')
    (@BorelSpace.opensMeasurable γ t' (@borel γ t') (@BorelSpace.mk _ _ (borel γ) rfl))
    s_closed
state_before: case intro.intro.intro.intro
α : Type ?u.324968
inst✝⁵ : TopologicalSpace α
ι : Type ?u.324974
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type ?u.325005
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
E : MeasurableEmbedding id
⊢ MeasurableSet s

tactic: convert E.measurableSet_image.2 M
state_before: case intro.intro.intro.intro
α : Type ?u.324968
inst✝⁵ : TopologicalSpace α
ι : Type ?u.324974
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type ?u.325005
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
E : MeasurableEmbedding id
M : MeasurableSet s
⊢ MeasurableSet s

tactic: simp only [id.def, image_id']
state_before: case h.e'_3
α : Type ?u.324968
inst✝⁵ : TopologicalSpace α
ι : Type ?u.324974
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type ?u.325005
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
E : MeasurableEmbedding id
M : MeasurableSet s
⊢ s = id '' s