diff --git a/src/measure_theory/measure/measure_space.lean b/src/measure_theory/measure/measure_space.lean index fc3c6d4a29829..548a46c09e353 100644 --- a/src/measure_theory/measure/measure_space.lean +++ b/src/measure_theory/measure/measure_space.lean @@ -1019,9 +1019,12 @@ lemma tendsto_ae_map {f : α → β} (hf : ae_measurable f μ) : tendsto f μ.ae omit m0 -/-- Pullback of a `measure`. If `f` sends each `measurable` set to a `measurable` set, then for each -measurable set `s` we have `comap f μ s = μ (f '' s)`. -/ -def comap [measurable_space α] (f : α → β) : measure β →ₗ[ℝ≥0∞] measure α := +/-- Pullback of a `measure` as a linear map. If `f` sends each measurable set to a measurable +set, then for each measurable set `s` we have `comapₗ f μ s = μ (f '' s)`. + +If the linearity is not needed, please use `comap` instead, which works for a larger class of +functions. -/ +def comapₗ [measurable_space α] (f : α → β) : measure β →ₗ[ℝ≥0∞] measure α := if hf : injective f ∧ ∀ s, measurable_set s → measurable_set (f '' s) then lift_linear (outer_measure.comap f) $ λ μ s hs t, begin @@ -1032,14 +1035,47 @@ if hf : injective f ∧ ∀ s, measurable_set s → measurable_set (f '' s) then end else 0 -lemma comap_apply {β} [measurable_space α] {mβ : measurable_space β} (f : α → β) (hfi : injective f) +lemma comapₗ_apply {β} [measurable_space α] {mβ : measurable_space β} + (f : α → β) (hfi : injective f) (hf : ∀ s, measurable_set s → measurable_set (f '' s)) (μ : measure β) (hs : measurable_set s) : - comap f μ s = μ (f '' s) := + comapₗ f μ s = μ (f '' s) := begin - rw [comap, dif_pos, lift_linear_apply _ hs, outer_measure.comap_apply, coe_to_outer_measure], + rw [comapₗ, dif_pos, lift_linear_apply _ hs, outer_measure.comap_apply, coe_to_outer_measure], exact ⟨hfi, hf⟩ end +/-- Pullback of a `measure`. If `f` sends each measurable set to a null-measurable set, +then for each measurable set `s` we have `comap f μ s = μ (f '' s)`. -/ +def comap [measurable_space α] (f : α → β) (μ : measure β) : measure α := +if hf : injective f ∧ ∀ s, measurable_set s → null_measurable_set (f '' s) μ then + (outer_measure.comap f μ.to_outer_measure).to_measure $ λ s hs t, + begin + simp only [coe_to_outer_measure, outer_measure.comap_apply, ← image_inter hf.1, + image_diff hf.1], + exact (measure_inter_add_diff₀ _ (hf.2 s hs)).symm + end +else 0 + +lemma comap_apply₀ [measurable_space α] (f : α → β) (μ : measure β) (hfi : injective f) + (hf : ∀ s, measurable_set s → null_measurable_set (f '' s) μ) + (hs : null_measurable_set s (comap f μ)) : + comap f μ s = μ (f '' s) := +begin + rw [comap, dif_pos (and.intro hfi hf)] at hs ⊢, + rw [to_measure_apply₀ _ _ hs, outer_measure.comap_apply, coe_to_outer_measure] +end + +lemma comap_apply {β} [measurable_space α] {mβ : measurable_space β} (f : α → β) (hfi : injective f) + (hf : ∀ s, measurable_set s → measurable_set (f '' s)) (μ : measure β) (hs : measurable_set s) : + comap f μ s = μ (f '' s) := +comap_apply₀ f μ hfi (λ s hs, (hf s hs).null_measurable_set) hs.null_measurable_set + +lemma comapₗ_eq_comap {β} [measurable_space α] {mβ : measurable_space β} (f : α → β) + (hfi : injective f) (hf : ∀ s, measurable_set s → measurable_set (f '' s)) + (μ : measure β) (hs : measurable_set s) : + comapₗ f μ s = comap f μ s := +(comapₗ_apply f hfi hf μ hs).trans (comap_apply f hfi hf μ hs).symm + /-! ### Restricting a measure -/ /-- Restrict a measure `μ` to a set `s` as an `ℝ≥0∞`-linear map. -/