Zulip Chat Archive

Stream: maths

Topic: transporting measurability proofs


Koundinya Vajjha (Jul 03 2019 at 14:55):

I am stuck in a proof where I have a seemingly trivial goal: measurable (λ (a : nnreal), a).
Nothing I try seems to work!
I guess the section on measurable equivalences was set up to solve goals like this, but I'm not able to use it. I'd appreciate any help!

Mario Carneiro (Jul 03 2019 at 14:57):

measurable_id?

Mario Carneiro (Jul 03 2019 at 14:58):

I'm not sure what you mean about measurable equivalences. As always with this kind of thing, there are a hundred implicit arguments so that line is insufficient context

Koundinya Vajjha (Jul 03 2019 at 15:00):

Riight. I have a lot of implicit arguments and measurable_id doesn't work in the proof..

Mario Carneiro (Jul 03 2019 at 15:01):

well, MWE then

Mario Carneiro (Jul 03 2019 at 15:02):

I'm not sure how you expect me to know what the context is if there is something funky going on

Koundinya Vajjha (Jul 03 2019 at 15:05):

yes im working on a MWE, sorry i only realized about the implicit arguments after i posted the question

Mario Carneiro (Jul 03 2019 at 15:06):

you could also post your entire goal and/or the partial proof

Koundinya Vajjha (Jul 03 2019 at 15:25):

Here's the MWE:

import measure_theory.giry_monad
universe u
open measure_theory measure_theory.measure set


section
variables (α : Type*) (β : Type*) [measurable_space α] [measurable_space β]

structure probability_measure extends measure_theory.measure α :=
(measure_univ : to_measure univ = 1)

instance : has_coe_to_fun (probability_measure α) :=
⟨λ_, set α  nnreal, λp s, ennreal.to_nnreal (p.to_measure s)

variable (p : probability_measure α)

lemma prob_diff {s₁ s₂ : set α}(h : s₂  s₁) (h₁ : is_measurable s₁) (h₂ : is_measurable s₂) :
  p (s₁ \ s₂) = p s₁ - p s₂ :=
by sorry

lemma prob_univ : p univ = 1 :=
by sorry


lemma mwe [measurable_space α] [measurable_space β] (f : α  probability_measure β) :
 t : set β, is_measurable t  measurable (λ b:α,(f b) t)  measurable (λ b:α,(f b) (- t)) :=
begin
  intros t ht hA,
  rw compl_eq_univ_diff,
  conv{congr, funext, rw [prob_diff _ _ (subset_univ _) is_measurable.univ ht]}, simp [prob_univ],
  apply measurable.comp hA,
  apply measurable.comp, apply measurable_sub, apply measurable_const,
  apply measurable_subtype_val, swap, apply measurable_of_continuous, apply nnreal.continuous_of_real,
  apply @measurable_id nnreal _,
end

end

Mario Carneiro (Jul 03 2019 at 15:27):

did you try exact measurable_id?

Mario Carneiro (Jul 03 2019 at 15:27):

apply measurable_id probably won't work because of the apply bug

Patrick Massot (Jul 03 2019 at 15:27):

Where is that "apply bug" emoticon again?

Koundinya Vajjha (Jul 03 2019 at 15:28):

pp.all trace

invalid type ascription, term has type
  @measurable.{?l_1 ?l_1} ?m_2 ?m_2 ?m_3 ?m_3 (@id.{?l_1+1} ?m_2)
but is expected to have type
  @measurable.{0 0} nnreal
    (@subtype.{1} real
       (λ (r : real),
          @has_le.le.{0} real real.has_le
            (@has_zero.zero.{0} real
               (@no_zero_divisors.to_has_zero.{0} real (@domain.to_no_zero_divisors.{0} real real.domain)))
            r))
    (@measure_theory.borel.{0} nnreal nnreal.topological_space)
    (@subtype.measurable_space.{0} real
       (λ (r : real),
          @has_le.le.{0} real real.has_le
            (@has_zero.zero.{0} real
               (@no_zero_divisors.to_has_zero.{0} real (@domain.to_no_zero_divisors.{0} real real.domain)))
            r)
       (@measure_theory.borel.{0} real
          (@uniform_space.to_topological_space.{0} real
             (@metric_space.to_uniform_space'.{0} real (@normed_field.to_metric_space.{0} real real.normed_field)))))
    (λ (a : nnreal), a)

Mario Carneiro (Jul 03 2019 at 15:28):

pp.all?

Mario Carneiro (Jul 03 2019 at 15:29):

well why didn't you say so

Mario Carneiro (Jul 03 2019 at 15:29):

it's not the same measure

Mario Carneiro (Jul 03 2019 at 15:29):

your MWE doesn't work for me, it fails at the first apply

Koundinya Vajjha (Jul 03 2019 at 15:30):

what's not the same measure?

Mario Carneiro (Jul 03 2019 at 15:30):

didn't measurable.comp recently get its arguments flipped? I'm not sure if you or I are out of date

Koundinya Vajjha (Jul 03 2019 at 15:31):

I didn't update mathlib in a while

Mario Carneiro (Jul 03 2019 at 15:32):

nnreal is defined to be {r : ℝ // 0 ≤ r}, so it has a measurable space from subtype applied to the measure on real

Mario Carneiro (Jul 03 2019 at 15:32):

but it is also a topological space and so it gets the borel measurable space

Koundinya Vajjha (Jul 03 2019 at 15:34):

yes, which is why i thought I should use ennreal_equiv_nnreal and transport it somehow...

Mario Carneiro (Jul 03 2019 at 15:40):

this works for me:

lemma mwe [measurable_space α] [measurable_space β] (f : α  probability_measure β)
  (t : set β) (ht : is_measurable t) (hA : measurable (λ b:α, f b t)) :
  measurable (λ b:α, f b (- t)) :=
begin
  rw compl_eq_univ_diff,
  conv{congr, funext, rw [prob_diff _ _ (subset_univ _) is_measurable.univ ht]}, simp [prob_univ],
  refine measurable.comp _ hA,
  refine measurable.comp _ (measurable_sub measurable_const _),
  refine measurable_of_continuous nnreal.continuous_of_real,
  exact measurable_of_continuous nnreal.continuous_coe,
end

Koundinya Vajjha (Jul 03 2019 at 15:45):

worked with some modifications for me as well. Thanks mario!


Last updated: Dec 20 2023 at 11:08 UTC