Zulip Chat Archive
Stream: Is there code for X?
Topic: Double `Filter.Eventually`
Jihoon Hyun (May 10 2025 at 18:23):
I'm trying to prove the following:
import Mathlib
open MeasureTheory
example
{α₁ : Type*} [MeasureSpace α₁] {β₁ : Type*} [MeasureSpace β₁] (e₁ : β₁ ≃ᵐ α₁)
{α₂ : Type*} [MeasureSpace α₂] {β₂ : Type*} [MeasureSpace β₂] (e₂ : β₂ ≃ᵐ α₂)
{p : α₁ → α₂ → Prop} (h : ∀ᵐ (a₁ : α₁) (a₂ : α₂), p a₁ a₂) :
∀ᵐ (b₁ : β₁) (b₂ : β₂), p (e₁ b₁) (e₂ b₂) := by
sorry
Is there a nice theorem which can handle double 'almost everywhere' easily?
Also, this would easily come up with another version with a doubly nested Filter.Eventually (∀ᶠ). Do we have a tool to prove that as well?
Aaron Liu (May 10 2025 at 18:38):
Why do you have both docs#MeasureTheory.MeasurableSpace and docs#MeasureTheory.MeasureSpace
Aaron Liu (May 10 2025 at 18:38):
This will cause problems
Aaron Liu (May 10 2025 at 18:46):
I'm pretty sure to prove this you have to assume that e₁ and e₂ are docs#MeasureTheory.Measure.QuasiMeasurePreserving
Jihoon Hyun (May 11 2025 at 14:14):
Why do you have both..
Thanks, this is now fixed in the example.
I'm pretty sure to prove this you have to assume that e₁ and e₂ are docs#MeasureTheory.Measure.QuasiMeasurePreserving
According to docs#MeasurableEquiv.quasiMeasurePreserving_symm , they are already QuasiMeasurePreserving.
Still, is there a nice way to deal with inner ∀ᵐ or ∀ᶠs? I don't think there is a nice lemma dealing with these.
Yury G. Kudryashov (May 11 2025 at 14:17):
Nothing in your assumptions say that e₁ or e₂ play nicely with the measures.
Yury G. Kudryashov (May 11 2025 at 14:17):
You only assume that they're measurable with measurable inverses.
Aaron Liu (May 11 2025 at 14:17):
Jihoon Hyun said:
According to docs#MeasurableEquiv.quasiMeasurePreserving_symm , they are already
QuasiMeasurePreserving.
This says they are QuasiMeasurePreserving from MeasureTheory.Measure.map (⇑e) volume to volume, but I need it to be QuasiMeasurePreserving from volume to volume.
Yury G. Kudryashov (May 11 2025 at 14:21):
If you add (h₁ : QuasiMeasurePreserving e₁) and similarly for e₂, then you can filter_upwards [h₁.ae h] with a ha using h₂.ae ha
Yury G. Kudryashov (May 11 2025 at 14:21):
(not tested)
Aaron Liu (May 11 2025 at 14:23):
Yury G. Kudryashov said:
filter_upwards [h₁.ae h] with a ha using h₂.ae ha
This does work
Jihoon Hyun (May 11 2025 at 14:23):
Aaron Liu 말함:
Yury G. Kudryashov said:
filter_upwards [h₁.ae h] with a ha using h₂.ae haThis does work
Now I wonder why this works..
Jihoon Hyun (May 11 2025 at 14:24):
I only know that filter_upwards converts ∀ᵐ into ∀, but how does this work here?
Kevin Buzzard (May 11 2025 at 14:25):
You can hover over it to find out what it actually does (it's cleverer than just turning ∀ᵐ into ∀)
Jihoon Hyun (May 11 2025 at 14:27):
Thanks, it should take some time for me to digest..
Yury G. Kudryashov (May 11 2025 at 17:15):
If you unfold everything, you get (h₁.ae h).mono fun a ha => h₂.ae ha
Last updated: Dec 20 2025 at 21:32 UTC