# Zulip Chat Archive

## Stream: general

### Topic: nnreal.measurable_space = borel nnreal

#### Hunter Monroe (May 29 2021 at 18:15):

How can I prove the first of these? The second and third go through. This is from formal-ml, where I am fixing the proofs that no longer work with the current version of mathlib.

```
lemma nnreal_measurable_space_def:nnreal.measurable_space = borel nnreal := rfl
lemma real_measurable_space_def:real.measurable_space = borel real := rfl
lemma ennreal_measurable_space_def:ennreal.measurable_space = borel ennreal := rfl
```

#### Kalle Kytölä (May 29 2021 at 21:31):

I guess the current measurable space structure on `nnreal`

is inherited from that of `ℝ`

(which indeed is by definition the Borel sigma-algebra) via the inclusion `coe : nnreal → ℝ`

, i.e., the measurable space is `comap coe _`

. (At least this is where I got via `subtype.measurable_space`

etc.)

In that case the relevant doc should be this.

#### Kalle Kytölä (May 29 2021 at 21:32):

I copy the existing code and docstring of `comap`

below, because I have one tiny comment about the docstring, and more importantly the definition does not seem to behave the way I expected:

```
/-- The reverse image of a measure space under a function. `comap f m` contains the sets `s : set α`
such that `s` is the `f`-preimage of a measurable set in `β`. -/
protected def comap (f : α → β) (m : measurable_space β) : measurable_space α :=
{ measurable_set' := λ s, ∃s', m.measurable_set' s' ∧ f ⁻¹' s' = s,
measurable_set_empty := ⟨∅, m.measurable_set_empty, rfl⟩,
measurable_set_compl := assume s ⟨s', h₁, h₂⟩, ⟨s'ᶜ, m.measurable_set_compl _ h₁, h₂ ▸ rfl⟩,
measurable_set_Union := assume s hs,
let ⟨s', hs'⟩ := classical.axiom_of_choice hs in
⟨⋃ i, s' i, m.measurable_set_Union _ (λ i, (hs' i).left), by simp [hs'] ⟩ }
```

#### Kalle Kytölä (May 29 2021 at 21:32):

It seems first of all that there is a tiny misprint in the docstring: "measure space" should be "measurable space".

#### Kalle Kytölä (May 29 2021 at 21:33):

But what I don't understand is why I fail to use this definition in my attempt below...

Otherwise the following should prove what @Hunter Monroe asked above (although the proof would anyway be terribly inelegant), but there is one really puzzling `sorry`

in it (puzzling to me, at least):

```
import topology.instances.real
import topology.instances.nnreal
import measure_theory.borel_space
import measure_theory.measurable_space
import topology.algebra.ordered.basic
open set
open measurable_space
lemma open_imp_borel {γ : Type*} [top_γ : topological_space γ]
{G : set γ} : is_open G → (borel γ).measurable_set' G := measurable_set_generate_from
lemma closed_imp_borel {γ : Type*} [top_γ : topological_space γ]
{F : set γ} : is_closed F → (borel γ).measurable_set' F :=
begin
set G := Fᶜ with hG ,
have FeqGc := compl_compl F ,
rw ← hG at FeqGc ,
intro hFclosed ,
have Gmble := open_imp_borel (is_open_compl_iff.mpr hFclosed) ,
rw ← FeqGc ,
exact (borel γ).measurable_set_compl G Gmble ,
end
lemma nnreal_measurable_space_def:nnreal.measurable_space = borel nnreal
:=
begin
apply le_antisymm ,
{ intros B hB ,
-- I thought the following `suffices` is what `subtype.measurable_space`
-- literally means by definition, but...
suffices : ∃ (s' : set ℝ) , real.measurable_space.measurable_set' s' ∧ (coe⁻¹' s') = B ,
{ cases this with C hC ,
-- use C , -- I expected this to lead to a goal which is just `hC`...
--
-- ...but it leads to a strange goal requiring to prove openness of `C`!
-- Am I using `use` incorrectly to provide the set required by the ∃
-- in `∃s', m.measurable_set' s' ∧ f ⁻¹' s' = s,` ?
sorry , } ,
rcases hB with ⟨ A , mble_A , hAB ⟩ ,
set A' := A ∩ {x : ℝ | 0 ≤ x} with hA' ,
set H := {x : ℝ | 0 ≤ x} with hH ,
have clos_H : is_closed H := is_closed_ge' 0 ,
have mble_A' : real.measurable_space.measurable_set' A' ,
{ apply measurable_set.inter mble_A (closed_imp_borel clos_H) , } ,
have key : (coe⁻¹' A') = B := by tidy ,
use [A' , ⟨ mble_A' , key ⟩] , } ,
{ suffices : ∀ (U : set nnreal), is_open U → nnreal.measurable_space.measurable_set' U ,
{ exact opens_measurable_space.borel_le , } ,
intros U hU ,
have key : ∃ (V : set ℝ), is_open V ∧ (coe⁻¹' V) = U := by tidy ,
rcases key with ⟨ V , V_open , hVU ⟩ ,
use V ,
exact ⟨ open_imp_borel V_open , hVU ⟩ , } ,
end
```

#### Kalle Kytölä (May 29 2021 at 21:59):

Btw, I started fiercely hitting the keyboard in the above as if it was a level of the NNG :) --- i.e., without thinking.

I guess the right way would instead be to prove that `subtype.measurable_space`

of any `borel_space`

is the borel space on the subtype (perhaps one needs the assumption that the subtype was a Borel set to start with...). But much of the above should already work to that case.

I didn't immediately find that in the library, though.

#### Kalle Kytölä (May 29 2021 at 22:26):

In fact, unsurprisingly the *right way* (namely via `subtype.borel_space`

) is already in `measure_theory.borel_space`

, and the following works:

```
import measure_theory.borel_space
lemma nnreal_measurable_space_def:nnreal.measurable_space = borel nnreal
:=
begin
exact borel_space.measurable_eq ,
end
```

Sorry about the thoughtless answer before! (Although I still don't understand why `use`

didn't work in it... I would appreciate if someone is able to clarify it to me.)

Last updated: Dec 20 2023 at 11:08 UTC