Skip to content

Commit cc4d764

Browse files
feat: Add lemmas about finite products of measures (#13311)
Add the following lemmas about finite product of measures and measurable equivalences: - `piCongrLeft_apply_apply` - `pi_map_piCongrLeft` - `pi_map_piOptionEquivProd`
1 parent b3e51ce commit cc4d764

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

Mathlib/MeasureTheory/Constructions/Pi.lean

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,44 @@ theorem ae_eq_set_pi {I : Set ι} {s t : ∀ i, Set (α i)} (h : ∀ i ∈ I, s
508508
(ae_le_set_pi fun i hi => (h i hi).le).antisymm (ae_le_set_pi fun i hi => (h i hi).symm.le)
509509
#align measure_theory.measure.ae_eq_set_pi MeasureTheory.Measure.ae_eq_set_pi
510510

511+
lemma pi_map_piCongrLeft [hι' : Fintype ι'] (e : ι ≃ ι') {β : ι' → Type*}
512+
[∀ i, MeasurableSpace (β i)] (μ : (i : ι') → Measure (β i)) [∀ i, SigmaFinite (μ i)] :
513+
(Measure.pi fun i ↦ μ (e i)).map (MeasurableEquiv.piCongrLeft (fun i ↦ β i) e)
514+
= Measure.pi μ := by
515+
let e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) :=
516+
MeasurableEquiv.piCongrLeft (fun i ↦ β i) e
517+
refine Measure.pi_eq (fun s _ ↦ ?_) |>.symm
518+
rw [e_meas.measurableEmbedding.map_apply]
519+
let s' : (i : ι) → Set (β (e i)) := fun i ↦ s (e i)
520+
have : e_meas ⁻¹' pi univ s = pi univ s' := by
521+
ext x
522+
simp only [mem_preimage, Set.mem_pi, mem_univ, forall_true_left, s']
523+
refine (e.forall_congr ?_).symm
524+
intro i
525+
rw [MeasurableEquiv.piCongrLeft_apply_apply e x i]
526+
rw [this, pi_pi, Finset.prod_equiv e.symm]
527+
· simp only [Finset.mem_univ, implies_true]
528+
intro i _
529+
simp only [s']
530+
congr
531+
all_goals rw [e.apply_symm_apply]
532+
533+
lemma pi_map_piOptionEquivProd {β : Option ι → Type*} [∀ i, MeasurableSpace (β i)]
534+
(μ : (i : Option ι) → Measure (β i)) [∀ (i : Option ι), SigmaFinite (μ i)] :
535+
((Measure.pi fun i ↦ μ (some i)).prod (μ none)).map
536+
(MeasurableEquiv.piOptionEquivProd β).symm = Measure.pi μ := by
537+
refine pi_eq (fun s _ ↦ ?_) |>.symm
538+
let e_meas : ((i : ι) → β (some i)) × β none ≃ᵐ ((i : Option ι) → β i) :=
539+
MeasurableEquiv.piOptionEquivProd β |>.symm
540+
have me := MeasurableEquiv.measurableEmbedding e_meas
541+
have : e_meas ⁻¹' pi univ s = (pi univ (fun i ↦ s (some i))) ×ˢ (s none) := by
542+
ext x
543+
simp only [mem_preimage, Set.mem_pi, mem_univ, forall_true_left, mem_prod]
544+
refine ⟨by tauto, fun _ i ↦ ?_⟩
545+
rcases i <;> tauto
546+
simp only [me.map_apply, univ_option, le_eq_subset, Finset.prod_insertNone, this, prod_prod,
547+
pi_pi, mul_comm]
548+
511549
section Intervals
512550

513551
variable [∀ i, PartialOrder (α i)] [∀ i, NoAtoms (μ i)]

Mathlib/MeasureTheory/MeasurableSpace/Basic.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1763,6 +1763,11 @@ def piCongrLeft (f : δ ≃ δ') : (∀ b, π (f b)) ≃ᵐ ∀ a, π a where
17631763
theorem coe_piCongrLeft (f : δ ≃ δ') :
17641764
⇑(MeasurableEquiv.piCongrLeft π f) = f.piCongrLeft π := by rfl
17651765

1766+
lemma piCongrLeft_apply_apply {ι ι' : Type*} (e : ι ≃ ι') {β : ι' → Type*}
1767+
[∀ i', MeasurableSpace (β i')] (x : (i : ι) → β (e i)) (i : ι) :
1768+
piCongrLeft (fun i' ↦ β i') e x (e i) = x i := by
1769+
rw [piCongrLeft, coe_mk, Equiv.piCongrLeft_apply_apply]
1770+
17661771
/-- Pi-types are measurably equivalent to iterated products. -/
17671772
@[simps! (config := .asFn)]
17681773
def piMeasurableEquivTProd [DecidableEq δ'] {l : List δ'} (hnd : l.Nodup) (h : ∀ i, i ∈ l) :

0 commit comments

Comments
 (0)