diff --git a/Carleson/Calculations.lean b/Carleson/Calculations.lean index 6eb7367..259674d 100644 --- a/Carleson/Calculations.lean +++ b/Carleson/Calculations.lean @@ -1,4 +1,7 @@ -/- +import Carleson.ProofData +import Mathlib.Tactic.Rify + +/-! This is a file for arithmetical lemmas - lemmas that don't depend on any of Carleson's project definitions, or, really, on any fancy definitions period. @@ -7,9 +10,6 @@ Roughly speaking, if a lemma is in this file, it should be purely calculational/ e.g. `lemma calculation_1 : 2 + 2 = 4`. All lemmas are prepended with a prefix `calculation_`. -/ -import Carleson.ProofData -import Mathlib.Tactic.Rify - open ShortVariables open scoped NNReal ENNReal variable {X : Type*} {a : ℕ} {q : ℝ} {K : X → X → ℂ} {σ₁ σ₂ : X → ℤ} {F G : Set X} @@ -80,7 +80,8 @@ lemma calculation_10 (h : (100 : ℝ) < D) : _ < _ := by norm_num lemma calculation_3 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] {x y : ℤ} (h : x + 3 < y) : - 100 * D ^ (x + 3) + ((4 * D ^ (-2 : ℝ)) * D ^ (x + 3)) + (((8 : ℝ)⁻¹ * D ^ (-3 : ℝ)) * D ^ (x + 3)) + 8 * D ^ y < 10 * D ^ y := by + 100 * D ^ (x + 3) + ((4 * D ^ (-2 : ℝ)) * D ^ (x + 3)) + + (((8 : ℝ)⁻¹ * D ^ (-3 : ℝ)) * D ^ (x + 3)) + 8 * D ^ y < 10 * D ^ y := by rw [← show (2 : ℝ) + 8 = 10 by norm_num, right_distrib] gcongr rw [← distrib_three_right ..] @@ -120,9 +121,11 @@ lemma calculation_4 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] gcongr _ ≤ 100 * D ^ (s_1 + 3) + 4 * D ^ (s_1 + 1) + 8⁻¹ * D ^ s_1 + 8 * D ^ s_3 := by gcongr - _ = 100 * D ^ (s_1 + 3) + ((4 * D ^ (- 2 : ℝ)) * D ^ (s_1 + 3)) + 8⁻¹ * D ^ s_1 + 8 * D ^ s_3 := by + _ = 100 * D ^ (s_1 + 3) + ((4 * D ^ (- 2 : ℝ)) * D ^ (s_1 + 3)) + + 8⁻¹ * D ^ s_1 + 8 * D ^ s_3 := by rw [calculation_1 (s := s_1)] - _ = 100 * D ^ (s_1 + 3) + ((4 * D ^ (- 2 : ℝ)) * D ^ (s_1 + 3)) + (((8 : ℝ)⁻¹ * D ^ (- 3 : ℝ)) * D ^ (s_1 + 3)) + 8 * D ^ s_3 := by + _ = 100 * D ^ (s_1 + 3) + ((4 * D ^ (- 2 : ℝ)) * D ^ (s_1 + 3)) + + (((8 : ℝ)⁻¹ * D ^ (- 3 : ℝ)) * D ^ (s_1 + 3)) + 8 * D ^ s_3 := by rw [calculation_2 (s := s_1)] _ < 10 * D ^ s_3 := by exact calculation_3 (h := three) (X := X) @@ -271,7 +274,6 @@ lemma calculation_7_7_4 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] trans 2 ^ 12 · norm_num gcongr - · norm_num lia exact Nat.mul_le_mul this (Nat.le_add_left 1 n) diff --git a/Carleson/Defs.lean b/Carleson/Defs.lean index a78a398..9da62ec 100644 --- a/Carleson/Defs.lean +++ b/Carleson/Defs.lean @@ -4,11 +4,6 @@ import Carleson.ToMathlib.WeakType import Mathlib.Analysis.CStarAlgebra.Classes import Mathlib.Analysis.Fourier.AddCircle -open MeasureTheory Measure Metric Complex Set Function ENNReal -open scoped NNReal - -noncomputable section - /-! # Main statements of the Carleson project This file contains the statements of the main theorems from the Carleson formalization project: @@ -31,6 +26,11 @@ Fourier sums for continous functions (Theorem 1.0.1 in the blueprint). -/ +open MeasureTheory Measure Metric Complex Set Function ENNReal +open scoped NNReal + +noncomputable section + section DoublingMeasure universe u @@ -74,15 +74,12 @@ variable [FunctionDistances 𝕜 X] instance : Coe (Θ X) C(X, 𝕜) := ⟨FunctionDistances.coeΘ⟩ instance : FunLike (Θ X) X 𝕜 where coe := fun f ↦ (f : C(X, 𝕜)) - coe_injective' _ _ hfg := FunctionDistances.coeΘ_injective fun x ↦ congrFun hfg x - -set_option linter.unusedVariables false in + coe_injective _ _ hfg := FunctionDistances.coeΘ_injective fun x ↦ congrFun hfg x /-- Class used to endow `Θ X` with a pseudometric space structure. -/ -@[nolint unusedArguments] -def WithFunctionDistance (x : X) (r : ℝ) := Θ X +def WithFunctionDistance (_x : X) (_r : ℝ) := Θ X -instance {x : X} {r : ℝ} [d : FunctionDistances 𝕜 X] : - PseudoMetricSpace (WithFunctionDistance x r) := d.metric x r +instance {x : X} {r : ℝ} : + PseudoMetricSpace (WithFunctionDistance x r) := FunctionDistances.metric x r end FunctionDistances @@ -228,8 +225,6 @@ This section contains the statements of the main theorems from the project: Theo (classical Carleson), Theorem 1.1.1 (metric space Carleson) and Theorem 1.1.2 (linearised metric Carleson). -/ -set_option linter.unusedVariables false - open Real /-- The Nᵗʰ partial Fourier sum of `f : ℝ → ℂ` for `N : ℕ`. -/ @@ -242,7 +237,7 @@ local notation "S_" => partialFourierSum continous functions. For the proof, see `classical_carleson` in the file `Carleson.Classical.ClassicalCarleson`. -/ def ClassicalCarleson : Prop := - ∀ {f : ℝ → ℂ} (cont_f : Continuous f) (periodic_f : f.Periodic (2 * π)), + ∀ {f : ℝ → ℂ} (_cont_f : Continuous f) (_periodic_f : f.Periodic (2 * π)), ∀ᵐ x, Filter.Tendsto (S_ · f x) Filter.atTop (nhds (f x)) /-- The constant used in `MetricSpaceCarleson` and `LinearizedMetricCarleson`. @@ -253,10 +248,10 @@ def C1_0_2 (a : ℕ) (q : ℝ≥0) : ℝ≥0 := 2 ^ ((3 * 𝕔 + 18 + 5 * (𝕔 For the proof, see `metric_carleson` in the file `Carleson.MetricCarleson.Main`. -/ def MetricSpaceCarleson : Prop := ∀ {X : Type*} {a : ℕ} [MetricSpace X] {q q' : ℝ≥0} {F G : Set X} {K : X → X → ℂ} - [KernelProofData a K] {f : X → ℂ} [IsCancellative X (defaultτ a)] (hq : q ∈ Ioc 1 2) - (hqq' : q.HolderConjugate q') (mF : MeasurableSet F) (mG : MeasurableSet G) - (mf : Measurable f) (nf : (‖f ·‖) ≤ F.indicator 1) - (hT : HasBoundedStrongType (nontangentialOperator K · ·) 2 2 volume volume (C_Ts a)), + [KernelProofData a K] {f : X → ℂ} [IsCancellative X (defaultτ a)] (_hq : q ∈ Ioc 1 2) + (_hqq' : q.HolderConjugate q') (_mF : MeasurableSet F) (_mG : MeasurableSet G) + (_mf : Measurable f) (_nf : (‖f ·‖) ≤ F.indicator 1) + (_hT : HasBoundedStrongType (nontangentialOperator K · ·) 2 2 volume volume (C_Ts a)), ∫⁻ x in G, carlesonOperator K f x ≤ C1_0_2 a q * volume G ^ (q' : ℝ)⁻¹ * volume F ^ (q : ℝ)⁻¹ /-- Theorem 1.1.2. @@ -264,9 +259,10 @@ For the proof, see `linearized_metric_carleson` in the file `Carleson.MetricCarl def LinearizedMetricCarleson : Prop := ∀ {X : Type*} {a : ℕ} [MetricSpace X] {q q' : ℝ≥0} {F G : Set X} {K : X → X → ℂ} [KernelProofData a K] {Q : SimpleFunc X (Θ X)} {f : X → ℂ} [IsCancellative X (defaultτ a)] - (hq : q ∈ Ioc 1 2) (hqq' : q.HolderConjugate q') (mF : MeasurableSet F) (mG : MeasurableSet G) - (mf : Measurable f) (nf : (‖f ·‖) ≤ F.indicator 1) - (hT : ∀ θ : Θ X, HasBoundedStrongType (linearizedNontangentialOperator Q θ K · ·) + (_hq : q ∈ Ioc 1 2) (_hqq' : q.HolderConjugate q') + (_mF : MeasurableSet F) (_mG : MeasurableSet G) + (_mf : Measurable f) (_nf : (‖f ·‖) ≤ F.indicator 1) + (_hT : ∀ θ : Θ X, HasBoundedStrongType (linearizedNontangentialOperator Q θ K · ·) 2 2 volume volume (C_Ts a)), ∫⁻ x in G, linearizedCarlesonOperator Q K f x ≤ C1_0_2 a q * volume G ^ (q' : ℝ)⁻¹ * volume F ^ (q : ℝ)⁻¹ diff --git a/Carleson/DoublingMeasure.lean b/Carleson/DoublingMeasure.lean index e571aff..f186a8a 100644 --- a/Carleson/DoublingMeasure.lean +++ b/Carleson/DoublingMeasure.lean @@ -2,12 +2,6 @@ import Carleson.Defs import Carleson.LipschitzNorm import Carleson.ToMathlib.Data.ENNReal -open MeasureTheory Measure Metric Complex Set Bornology Function -open ENNReal hiding one_lt_two -open scoped NNReal - -noncomputable section - /-! # Basic definitions and lemmas This file contains definitions from Section 2 of the blueprint and used throughout the proof @@ -18,6 +12,12 @@ provided for them (as well as for the constants `a` and `tau`). -/ +open MeasureTheory Measure Metric Complex Set Bornology Function +open ENNReal hiding one_lt_two +open scoped NNReal + +noncomputable section + lemma seven_le_c : 7 ≤ 𝕔 := by simp [𝕔] lemma c_le_100 : 𝕔 ≤ 100 := by simp [𝕔] @@ -76,8 +76,7 @@ lemma hundred_lt_D : 100 < defaultD a := by have : 16 ≤ a ^ 2 := by nlinarith [four_le_a X] simp only [defaultD] gcongr - · norm_num - · nlinarith [seven_le_c] + nlinarith [seven_le_c] -- used in 7.5.6 (`limited_scale_impact`) lemma hundred_lt_realD : (100 : ℝ) < defaultD a := mod_cast hundred_lt_D X @@ -190,7 +189,7 @@ variable [FunctionDistances 𝕜 X] instance : ContinuousMapClass (Θ X) X 𝕜 := ⟨fun f ↦ (f : C(X, 𝕜)).2⟩ -def toWithFunctionDistance {x : X} {r : ℝ} [FunctionDistances 𝕜 X] : +def toWithFunctionDistance {x : X} {r : ℝ} : Θ X ≃ WithFunctionDistance x r := .refl _ end FunctionDistances @@ -219,12 +218,12 @@ lemma oscillation_le_cdist [CompatibleFunctions 𝕜 X A] (x : X) (r : ℝ) (f g (hy : y ∈ ball x r) (hz : z ∈ ball x r) : ‖coeΘ f y - coeΘ g y - coeΘ f z + coeΘ g z‖ ≤ dist_{x, r} f g := by apply le_trans <| le_localOscillation x r f g hy hz - rw [← ENNReal.toReal_ofReal dist_nonneg] + erw [← ENNReal.toReal_ofReal dist_nonneg] exact ENNReal.toReal_mono ENNReal.ofReal_ne_top CompatibleFunctions.localOscillation_le_cdist export CompatibleFunctions (localOscillation_le_cdist cdist_mono cdist_le le_cdist) -lemma dist_congr [FunctionDistances 𝕜 X] {x₁ x₂ : X} {r₁ r₂ : ℝ} {f g : Θ X} +lemma cdist_congr [FunctionDistances 𝕜 X] {x₁ x₂ : X} {r₁ r₂ : ℝ} {f g : Θ X} (e₁ : x₁ = x₂) (e₂ : r₁ = r₂) : dist_{x₁, r₁} f g = dist_{x₂, r₂} f g := by congr variable (X) in @@ -253,7 +252,9 @@ lemma enorm_integral_exp_le [CompatibleFunctions ℝ X A] {τ : ℝ} [IsCancella rcases eq_or_ne (iLipENorm φ x r) ∞ with h1 | h1 · apply le_top.trans_eq symm - simp [h1, edist_ne_top, hA, (measure_ball_pos volume x hr).ne'] + have finite_dist : edist_{x, r} f g ≠ ∞ := edist_ne_top + (toWithFunctionDistance f) (toWithFunctionDistance g) + simp [h1, finite_dist, hA, (measure_ball_pos volume x hr).ne'] exact IsCancellative.enorm_integral_exp_le' hr h1 h2 /-- Constructor of `IsCancellative` in terms of real norms instead of extended reals. -/ @@ -266,7 +267,7 @@ lemma isCancellative_of_norm_integral_exp_le (τ : ℝ) [CompatibleFunctions ℝ constructor intro x r φ hr h1 h2 f g convert ENNReal.ofReal_le_ofReal (h (x := x) (r := r) (φ := φ) hr h1 h2 (f := f) (g := g)) - · rw [ofReal_norm_eq_enorm] + · rw [ofReal_norm] congr 1 rw [setIntegral_eq_integral_of_forall_compl_eq_zero (fun y hy ↦ ?_)] have : φ y = 0 := by @@ -280,10 +281,10 @@ lemma isCancellative_of_norm_integral_exp_le (τ : ℝ) [CompatibleFunctions ℝ · simp · simp only [Measure.real, ofReal_toReal measure_ball_ne_top] · simp [iLipNNNorm, coe_toNNReal h1] - · rw [← ENNReal.ofReal_rpow_of_pos (by positivity)] + · have nonneg_dist : 0 ≤ dist_{x, r} f g := dist_nonneg + rw [← ENNReal.ofReal_rpow_of_pos (by linarith)] congr - rw [ENNReal.ofReal_add zero_le_one dist_nonneg] - simp [edist_dist] + erw [ENNReal.ofReal_add zero_le_one dist_nonneg, ENNReal.ofReal_one, edist_dist] /-- The "volume function" `V`. We will need to assume `IsFiniteMeasureOnCompacts` and `ProperSpace` to actually know that this volume is finite. -/ @@ -492,25 +493,28 @@ variable [CompatibleFunctions ℝ X (defaultA a)] lemma le_cdist_iterate {x : X} {r : ℝ} (hr : 0 ≤ r) (f g : Θ X) (k : ℕ) : 2 ^ k * dist_{x, r} f g ≤ dist_{x, (defaultA a) ^ k * r} f g := by induction k with - | zero => rw [pow_zero, one_mul]; congr! <;> simp + | zero => + rw [pow_zero, one_mul] + exact (cdist_congr rfl (by simp)).le | succ k ih => trans 2 * dist_{x, (defaultA a) ^ k * r} f g · rw [pow_succ', mul_assoc] exact (mul_le_mul_iff_right₀ zero_lt_two).mpr ih · convert le_cdist (ball_subset_ball _) using 1 - · exact dist_congr rfl (by rw [← mul_assoc, pow_succ']) + · exact cdist_congr rfl (by rw [← mul_assoc, pow_succ']) · nth_rw 1 [← one_mul ((defaultA a) ^ k * r)]; gcongr rw [← Nat.cast_one, Nat.cast_le]; exact Nat.one_le_two_pow lemma cdist_le_iterate {x : X} {r : ℝ} (hr : 0 < r) (f g : Θ X) (k : ℕ) : dist_{x, 2 ^ k * r} f g ≤ (defaultA a) ^ k * dist_{x, r} f g := by induction k with - | zero => simp_rw [pow_zero, one_mul]; congr! <;> simp + | zero => + rw [pow_zero, one_mul, pow_zero, one_mul] | succ k ih => trans defaultA a * dist_{x, 2 ^ k * r} f g - · convert cdist_le _ using 1 - · exact dist_congr rfl (by ring) - · rw [dist_self]; positivity + · convert cdist_le (x₁ := x) (x₂ := x) (f := f) (g := g) + (r := 2 ^ k * r) (by rw [dist_self]; positivity) using 1 + exact cdist_congr rfl (by ring) · replace ih := (mul_le_mul_iff_right₀ (show 0 < (defaultA a : ℝ) by positivity)).mpr ih rwa [← mul_assoc, ← pow_succ'] at ih diff --git a/Carleson/LipschitzNorm.lean b/Carleson/LipschitzNorm.lean index 7c1a823..39c29c5 100644 --- a/Carleson/LipschitzNorm.lean +++ b/Carleson/LipschitzNorm.lean @@ -2,9 +2,6 @@ import Mathlib.Analysis.Normed.Field.Basic import Mathlib.Topology.EMetricSpace.Lipschitz import Carleson.Defs -open Metric Function ENNReal -open scoped NNReal - /-! # Inhomogeneous Lipschitz norm @@ -14,6 +11,9 @@ Lemmas about this norm that are proven in Carleson are collected here. TODO: Assess Mathlib-readiness, complete basic results, optimize imports. -/ +open Metric Function ENNReal +open scoped NNReal + noncomputable section section Def @@ -54,7 +54,7 @@ lemma iLipENorm_le_add (h : ∀ x ∈ ball z R, ‖φ x‖ ≤ C) have W := h' x hx x' hx' hne rw [ENNReal.div_le_iff (by simpa only [ne_eq, edist_eq_zero] using hne) (edist_ne_top x x')] convert ENNReal.ofReal_le_ofReal W - · exact (ofReal_norm_eq_enorm (φ x - φ x')).symm + · exact (ofReal_norm (φ x - φ x')).symm · rw [ENNReal.ofReal_div_of_pos hR, ENNReal.ofReal_mul NNReal.zero_le_coe, edist_dist, ENNReal.mul_div_right_comm, ENNReal.ofReal_coe_nnreal] diff --git a/Carleson/ProofData.lean b/Carleson/ProofData.lean index 0046632..1582b2d 100644 --- a/Carleson/ProofData.lean +++ b/Carleson/ProofData.lean @@ -1,10 +1,5 @@ import Carleson.DoublingMeasure -open MeasureTheory Measure Metric Complex Set TopologicalSpace Bornology Function -open ENNReal hiding one_lt_two -open scoped NNReal -noncomputable section - /-! # ProofData. This file introduces the class `ProofData`, used to bundle data common through most of @@ -12,6 +7,11 @@ chapters 2-7 (except 3), and provides API for it. -/ +open MeasureTheory Measure Metric Complex Set TopologicalSpace Bornology Function +open ENNReal hiding one_lt_two +open scoped NNReal +noncomputable section + /-- Data common through most of chapters 2-7 (except 3). -/ class ProofData {X : Type*} (a : outParam ℕ) (q : outParam ℝ) (K : outParam (X → X → ℂ)) (σ₁ σ₂ : outParam (X → ℤ)) (F G : outParam (Set X)) [PseudoMetricSpace X] extends @@ -180,7 +180,6 @@ lemma DκZ_le_two_rpow_100 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F _ ≤ 1 * 4 ^ 2 * 2 ^ (2 * 4) := by norm_num _ ≤ _ := by gcongr - norm_num lemma four_le_Z [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] : 4 ≤ Z := by rw [defaultZ, show 4 = 2 ^ 2 by rfl] diff --git a/Carleson/ToMathlib/Annulus.lean b/Carleson/ToMathlib/Annulus.lean index 207eb52..09d38d0 100644 --- a/Carleson/ToMathlib/Annulus.lean +++ b/Carleson/ToMathlib/Annulus.lean @@ -183,67 +183,67 @@ lemma cc_subset_closedBall {x : X} {r R : ℝ} : cc x r R ⊆ closedBall x R := lemma oc_union_oo {x : X} {r r' R : ℝ} (h₁ : r ≤ r') (h₂ : r' < R) : oc x r r' ∪ oo x r' R = oo x r R := by -- XXX: should this proof be written as `ext; grind [oc, oo]` instead? Same question below. - ext; simp_rw [oc, oo, mem_union, mem_setOf_eq, ← mem_union, Ioc_union_Ioo_eq_Ioo h₁ h₂] + ext; simp_rw [oc, oo, mem_union, mem_ofPred_eq, ← mem_union, Ioc_union_Ioo_eq_Ioo h₁ h₂] @[simp] lemma oc_union_oc {x : X} {r r' R : ℝ} (h₁ : r ≤ r') (h₂ : r' ≤ R) : oc x r r' ∪ oc x r' R = oc x r R := by - ext; simp_rw [oc, mem_union, mem_setOf_eq, ← mem_union, Ioc_union_Ioc_eq_Ioc h₁ h₂] + ext; simp_rw [oc, mem_union, mem_ofPred_eq, ← mem_union, Ioc_union_Ioc_eq_Ioc h₁ h₂] @[simp] lemma oo_union_co {x : X} {r r' R : ℝ} (h₁ : r < r') (h₂ : r' ≤ R) : oo x r r' ∪ co x r' R = oo x r R := by - ext; simp_rw [oo, co, mem_union, mem_setOf_eq, ← mem_union, Ioo_union_Ico_eq_Ioo h₁ h₂] + ext; simp_rw [oo, co, mem_union, mem_ofPred_eq, ← mem_union, Ioo_union_Ico_eq_Ioo h₁ h₂] @[simp] lemma oo_union_cc {x : X} {r r' R : ℝ} (h₁ : r < r') (h₂ : r' ≤ R) : oo x r r' ∪ cc x r' R = oc x r R := by - ext; simp_rw [oo, cc, oc, mem_union, mem_setOf_eq, ← mem_union, Ioo_union_Icc_eq_Ioc h₁ h₂] + ext; simp_rw [oo, cc, oc, mem_union, mem_ofPred_eq, ← mem_union, Ioo_union_Icc_eq_Ioc h₁ h₂] @[simp] lemma cc_union_oo {x : X} {r r' R : ℝ} (h₁ : r ≤ r') (h₂ : r' < R) : cc x r r' ∪ oo x r' R = co x r R := by - ext; simp_rw [cc, oo, co, mem_union, mem_setOf_eq, ← mem_union, Icc_union_Ioo_eq_Ico h₁ h₂] + ext; simp_rw [cc, oo, co, mem_union, mem_ofPred_eq, ← mem_union, Icc_union_Ioo_eq_Ico h₁ h₂] @[simp] lemma cc_union_oc {x : X} {r r' R : ℝ} (h₁ : r ≤ r') (h₂ : r' ≤ R) : cc x r r' ∪ oc x r' R = cc x r R := by - ext; simp_rw [cc, oc, mem_union, mem_setOf_eq, ← mem_union, Icc_union_Ioc_eq_Icc h₁ h₂] + ext; simp_rw [cc, oc, mem_union, mem_ofPred_eq, ← mem_union, Icc_union_Ioc_eq_Icc h₁ h₂] @[simp] lemma co_union_co {x : X} {r r' R : ℝ} (h₁ : r ≤ r') (h₂ : r' ≤ R) : co x r r' ∪ co x r' R = co x r R := by - ext; simp_rw [co, mem_union, mem_setOf_eq, ← mem_union, Ico_union_Ico_eq_Ico h₁ h₂] + ext; simp_rw [co, mem_union, mem_ofPred_eq, ← mem_union, Ico_union_Ico_eq_Ico h₁ h₂] @[simp] lemma co_union_cc {x : X} {r r' R : ℝ} (h₁ : r ≤ r') (h₂ : r' ≤ R) : co x r r' ∪ cc x r' R = cc x r R := by - ext; simp_rw [co, cc, mem_union, mem_setOf_eq, ← mem_union, Ico_union_Icc_eq_Icc h₁ h₂] + ext; simp_rw [co, cc, mem_union, mem_ofPred_eq, ← mem_union, Ico_union_Icc_eq_Icc h₁ h₂] @[simp] lemma oc_union_oi {x : X} {r R : ℝ} (h : r ≤ R) : oc x r R ∪ oi x R = oi x r := by - ext; simp_rw [oc, oi, mem_union, mem_setOf_eq, ← mem_union, Ioc_union_Ioi_eq_Ioi h] + ext; simp_rw [oc, oi, mem_union, mem_ofPred_eq, ← mem_union, Ioc_union_Ioi_eq_Ioi h] @[simp] lemma oo_union_ci {x : X} {r R : ℝ} (h : r < R) : oo x r R ∪ ci x R = oi x r := by - ext; simp_rw [oo, ci, oi, mem_union, mem_setOf_eq, ← mem_union, Ioo_union_Ici_eq_Ioi h] + ext; simp_rw [oo, ci, oi, mem_union, mem_ofPred_eq, ← mem_union, Ioo_union_Ici_eq_Ioi h] @[simp] lemma cc_union_oi {x : X} {r R : ℝ} (h : r ≤ R) : cc x r R ∪ oi x R = ci x r := by - ext; simp_rw [cc, oi, ci, mem_union, mem_setOf_eq, ← mem_union, Icc_union_Ioi_eq_Ici h] + ext; simp_rw [cc, oi, ci, mem_union, mem_ofPred_eq, ← mem_union, Icc_union_Ioi_eq_Ici h] @[simp] lemma co_union_ci {x : X} {r R : ℝ} (h : r ≤ R) : co x r R ∪ ci x R = ci x r := by - ext; simp_rw [co, ci, mem_union, mem_setOf_eq, ← mem_union, Ico_union_Ici_eq_Ici h] + ext; simp_rw [co, ci, mem_union, mem_ofPred_eq, ← mem_union, Ico_union_Ici_eq_Ici h] theorem iUnion_co_eq_ci {x : X} {f : ℕ → ℝ} (hf : ∀ n, f 0 ≤ f n) (h2f : ¬BddAbove (range f)) : ⋃ (i : Nat), co x (f i) (f (i+1)) = ci x (f 0) := by - simp [co, ci, iUnion_setOf, ← iUnion_Ico_eq_Ici hf h2f] + simp [co, ci, iUnion_ofPred, ← iUnion_Ico_eq_Ici hf h2f] theorem iUnion_oc_eq_oi {x : X} {f : ℕ → ℝ} (hf : ∀ n, f 0 ≤ f n) (h2f : ¬BddAbove (range f)) : ⋃ (i : Nat), oc x (f i) (f (i+1)) = oi x (f 0) := by - simp [oc, oi, iUnion_setOf, ← iUnion_Ioc_eq_Ioi hf h2f] + simp [oc, oi, iUnion_ofPred, ← iUnion_Ioc_eq_Ioi hf h2f] variable {ι : Type*} [LinearOrder ι] [SuccOrder ι] @@ -501,59 +501,59 @@ lemma cc_subset_ci {x : X} {r₁ R₁ r₂ : ℝ≥0∞} (hr : r₂ ≤ r₁) : @[simp] lemma oc_union_oo {x : X} {r r' R : ℝ≥0∞} (h₁ : r ≤ r') (h₂ : r' < R) : oc x r r' ∪ oo x r' R = oo x r R := by - ext; simp_rw [oc, oo, mem_union, mem_setOf_eq, ← mem_union, Ioc_union_Ioo_eq_Ioo h₁ h₂] + ext; simp_rw [oc, oo, mem_union, mem_ofPred_eq, ← mem_union, Ioc_union_Ioo_eq_Ioo h₁ h₂] @[simp] lemma oc_union_oc {x : X} {r r' R : ℝ≥0∞} (h₁ : r ≤ r') (h₂ : r' ≤ R) : oc x r r' ∪ oc x r' R = oc x r R := by - ext; simp_rw [oc, mem_union, mem_setOf_eq, ← mem_union, Ioc_union_Ioc_eq_Ioc h₁ h₂] + ext; simp_rw [oc, mem_union, mem_ofPred_eq, ← mem_union, Ioc_union_Ioc_eq_Ioc h₁ h₂] @[simp] lemma oo_union_co {x : X} {r r' R : ℝ≥0∞} (h₁ : r < r') (h₂ : r' ≤ R) : oo x r r' ∪ co x r' R = oo x r R := by - ext; simp_rw [oo, co, mem_union, mem_setOf_eq, ← mem_union, Ioo_union_Ico_eq_Ioo h₁ h₂] + ext; simp_rw [oo, co, mem_union, mem_ofPred_eq, ← mem_union, Ioo_union_Ico_eq_Ioo h₁ h₂] @[simp] lemma oo_union_cc {x : X} {r r' R : ℝ≥0∞} (h₁ : r < r') (h₂ : r' ≤ R) : oo x r r' ∪ cc x r' R = oc x r R := by - ext; simp_rw [oo, cc, oc, mem_union, mem_setOf_eq, ← mem_union, Ioo_union_Icc_eq_Ioc h₁ h₂] + ext; simp_rw [oo, cc, oc, mem_union, mem_ofPred_eq, ← mem_union, Ioo_union_Icc_eq_Ioc h₁ h₂] @[simp] lemma cc_union_oo {x : X} {r r' R : ℝ≥0∞} (h₁ : r ≤ r') (h₂ : r' < R) : cc x r r' ∪ oo x r' R = co x r R := by - ext; simp_rw [cc, oo, co, mem_union, mem_setOf_eq, ← mem_union, Icc_union_Ioo_eq_Ico h₁ h₂] + ext; simp_rw [cc, oo, co, mem_union, mem_ofPred_eq, ← mem_union, Icc_union_Ioo_eq_Ico h₁ h₂] @[simp] lemma cc_union_oc {x : X} {r r' R : ℝ≥0∞} (h₁ : r ≤ r') (h₂ : r' ≤ R) : cc x r r' ∪ oc x r' R = cc x r R := by - ext; simp_rw [cc, oc, mem_union, mem_setOf_eq, ← mem_union, Icc_union_Ioc_eq_Icc h₁ h₂] + ext; simp_rw [cc, oc, mem_union, mem_ofPred_eq, ← mem_union, Icc_union_Ioc_eq_Icc h₁ h₂] @[simp] lemma co_union_co {x : X} {r r' R : ℝ≥0∞} (h₁ : r ≤ r') (h₂ : r' ≤ R) : co x r r' ∪ co x r' R = co x r R := by - ext; simp_rw [co, mem_union, mem_setOf_eq, ← mem_union, Ico_union_Ico_eq_Ico h₁ h₂] + ext; simp_rw [co, mem_union, mem_ofPred_eq, ← mem_union, Ico_union_Ico_eq_Ico h₁ h₂] @[simp] lemma co_union_cc {x : X} {r r' R : ℝ≥0∞} (h₁ : r ≤ r') (h₂ : r' ≤ R) : co x r r' ∪ cc x r' R = cc x r R := by - ext; simp_rw [co, cc, mem_union, mem_setOf_eq, ← mem_union, Ico_union_Icc_eq_Icc h₁ h₂] + ext; simp_rw [co, cc, mem_union, mem_ofPred_eq, ← mem_union, Ico_union_Icc_eq_Icc h₁ h₂] @[simp] lemma oc_union_oi {x : X} {r R : ℝ≥0∞} (h : r ≤ R) : oc x r R ∪ oi x R = oi x r := by - ext; simp_rw [oc, oi, mem_union, mem_setOf_eq, ← mem_union, Ioc_union_Ioi_eq_Ioi h] + ext; simp_rw [oc, oi, mem_union, mem_ofPred_eq, ← mem_union, Ioc_union_Ioi_eq_Ioi h] @[simp] lemma oo_union_ci {x : X} {r R : ℝ≥0∞} (h : r < R) : oo x r R ∪ ci x R = oi x r := by - ext; simp_rw [oo, ci, oi, mem_union, mem_setOf_eq, ← mem_union, Ioo_union_Ici_eq_Ioi h] + ext; simp_rw [oo, ci, oi, mem_union, mem_ofPred_eq, ← mem_union, Ioo_union_Ici_eq_Ioi h] @[simp] lemma cc_union_oi {x : X} {r R : ℝ≥0∞} (h : r ≤ R) : cc x r R ∪ oi x R = ci x r := by - ext; simp_rw [cc, oi, ci, mem_union, mem_setOf_eq, ← mem_union, Icc_union_Ioi_eq_Ici h] + ext; simp_rw [cc, oi, ci, mem_union, mem_ofPred_eq, ← mem_union, Icc_union_Ioi_eq_Ici h] @[simp] lemma co_union_ci {x : X} {r R : ℝ≥0∞} (h : r ≤ R) : co x r R ∪ ci x R = ci x r := by - ext; simp_rw [co, ci, mem_union, mem_setOf_eq, ← mem_union, Ico_union_Ici_eq_Ici h] + ext; simp_rw [co, ci, mem_union, mem_ofPred_eq, ← mem_union, Ico_union_Ici_eq_Ici h] variable [MeasurableSpace X] [OpensMeasurableSpace X] diff --git a/Carleson/ToMathlib/BoundedFiniteSupport.lean b/Carleson/ToMathlib/BoundedFiniteSupport.lean index 0d70eec..13329c5 100644 --- a/Carleson/ToMathlib/BoundedFiniteSupport.lean +++ b/Carleson/ToMathlib/BoundedFiniteSupport.lean @@ -1,5 +1,7 @@ import Mathlib.MeasureTheory.Function.L1Space.Integrable +/-! # Bounded functions with support of finite measure -/ + /- This file defines BoundedFiniteSupport. diff --git a/Carleson/ToMathlib/CoveredByBalls.lean b/Carleson/ToMathlib/CoveredByBalls.lean index f763c0c..ad367d9 100644 --- a/Carleson/ToMathlib/CoveredByBalls.lean +++ b/Carleson/ToMathlib/CoveredByBalls.lean @@ -1,5 +1,7 @@ import Carleson.ToMathlib.Misc +/-! Covers by finitely many metric balls. -/ + -- Upstreaming status: ready to go; two lemmas need to move to different files -- and the remainder could go into a new file @@ -8,8 +10,6 @@ open scoped NNReal variable {X : Type*} [PseudoMetricSpace X] {s t : Set X} {n m : ℕ} {r r' r₁ r₂ r₃ : ℝ} - -set_option linter.unusedVariables false in /-- `s` can be covered by at most `N` balls with radius `r`. -/ @[mk_iff] class inductive CoveredByBalls (s : Set X) (n : ℕ) (r : ℝ) : Prop where @@ -123,7 +123,7 @@ lemma pow {a : ℝ} {k : ℕ} (h : AllBallsCoverBalls X a n) : AllBallsCoverBalls X (a ^ k) (n ^ k) := by intro r induction k with - | zero => simpa using fun x ↦ .ball x r + | zero => simpa [BallsCoverBalls] using fun x ↦ CoveredByBalls.ball x r | succ m h2 => specialize h (r * a^m) rw [← mul_assoc, mul_comm, ← mul_assoc] at h diff --git a/Carleson/ToMathlib/Data/ENNReal.lean b/Carleson/ToMathlib/Data/ENNReal.lean index 9884494..ede2520 100644 --- a/Carleson/ToMathlib/Data/ENNReal.lean +++ b/Carleson/ToMathlib/Data/ENNReal.lean @@ -20,15 +20,6 @@ namespace ENNReal attribute [simp] ofReal_of_nonpos -- protect ENNReal.mul_le_mul_left -theorem ofReal_inv_le {x : ℝ} : ENNReal.ofReal x⁻¹ ≤ (ENNReal.ofReal x)⁻¹ := by - obtain hx|hx := lt_or_ge 0 x <;> simp [ofReal_inv_of_pos, hx] - -theorem ofReal_div_le {x y : ℝ} (hy : 0 ≤ y) : - ENNReal.ofReal (x / y) ≤ ENNReal.ofReal x / ENNReal.ofReal y := by - simp_rw [div_eq_mul_inv, ofReal_mul' (inv_nonneg.2 hy)] - gcongr - exact ofReal_inv_le - theorem coe_lt_iff_lt_toNNReal {a : ℝ≥0∞} {t : ℝ≥0} (ha : a ≠ ⊤) : t < a ↔ t < a.toNNReal := by rw [← ENNReal.toNNReal_coe t, ENNReal.toNNReal_lt_toNNReal ENNReal.coe_ne_top ha] @@ -110,7 +101,8 @@ lemma enorm_sum_eq_sum_enorm {f : α → ℝ} (hf : ∀ i ∈ t, 0 ≤ f i) : /-- The reverse triangle inequality for `enorm`. -/ -- TODO: does a seminormed abelian additive group also have an ENormedAddMonoid structure? -lemma enorm_enorm_sub_enorm_le {E} [NormedAddCommGroup E] {x y : E} : ‖‖x‖ₑ - ‖y‖ₑ‖ₑ ≤ ‖x - y‖ₑ := by +lemma enorm_enorm_sub_enorm_le {E} [NormedAddCommGroup E] {x y : E} : + ‖‖x‖ₑ - ‖y‖ₑ‖ₑ ≤ ‖x - y‖ₑ := by rw [enorm_eq_self, tsub_le_iff_right] nth_rw 1 [← sub_add_cancel x y] exact enorm_add_le (x - y) y diff --git a/Carleson/ToMathlib/ENorm.lean b/Carleson/ToMathlib/ENorm.lean index 92cb8f3..71b852b 100644 --- a/Carleson/ToMathlib/ENorm.lean +++ b/Carleson/ToMathlib/ENorm.lean @@ -1,6 +1,8 @@ import Mathlib.MeasureTheory.Function.LpSeminorm.Monotonicity import Carleson.ToMathlib.Data.ENNReal +/-! # Extended norms and scalar multiplication of Lebesgue seminorms -/ + -- Upstreaming status: can be upstreamed/being worked on -- Many remaining declarations require PRing a new enorm class to mathlib first, -- i.e. are not a good first target. @@ -11,10 +13,11 @@ open ENNReal NNReal Function Set variable {α α' E E₁ E₂ : Type*} -@[simp] lemma enorm_toReal_le {x : ℝ≥0∞} : ‖x.toReal‖ₑ ≤ x := by simp [← ofReal_norm, ofReal_toReal_le] +@[simp] lemma enorm_toReal_le {x : ℝ≥0∞} : ‖x.toReal‖ₑ ≤ x := by + simp [← ofReal_norm, ofReal_toReal_le] @[simp] lemma enorm_toReal {x : ℝ≥0∞} (hx : x ≠ ⊤) : ‖x.toReal‖ₑ = x := by - simp [hx, ← ofReal_norm_eq_enorm] + simp [hx, ← ofReal_norm] @[simp] lemma enorm_NNReal {x : ℝ≥0} : ‖x‖ₑ = x := by rfl @@ -24,14 +27,16 @@ variable {α α' E E₁ E₂ : Type*} /-- An enormed monoid is an additive monoid endowed with a continuous enorm. Note: not sure if this is the "right" class to add to Mathlib. -/ -class ENormedAddCommSubMonoid (E : Type*) [TopologicalSpace E] extends ENormedAddCommMonoid E, Sub E where +class ENormedAddCommSubMonoid (E : Type*) [TopologicalSpace E] + extends ENormedAddCommMonoid E, Sub E where sub_add_cancel_of_enorm_le : ∀ ⦃x y : E⦄, ‖y‖ₑ ≤ ‖x‖ₑ → x - y + y = x add_right_cancel_of_enorm_lt_top : ∀ ⦃x : E⦄, ‖x‖ₑ < ⊤ → ∀ {y z : E}, y + x = z + x → y = z esub_self : ∀ x : E, x - x = 0 /-- An enormed space is an additive monoid endowed with a continuous enorm. Note: not sure if this is the "right" class to add to Mathlib. -/ -class ENormedSpace (E : Type*) [TopologicalSpace E] extends ENormedAddCommMonoid E, Module ℝ≥0 E where +class ENormedSpace (E : Type*) [TopologicalSpace E] + extends ENormedAddCommMonoid E, Module ℝ≥0 E where enorm_smul_eq_smul : ∀ (c : ℝ≥0) (x : E), ‖c • x‖ₑ = c • ‖x‖ₑ export ENormedAddCommSubMonoid @@ -96,14 +101,63 @@ instance : ContinuousConstSMul ℝ≥0 ℝ≥0∞ where open MeasureTheory +/-- The norm-formula functional, without a strong-measurability requirement. -/ +def eLpNormFormula {α ε : Type*} [MeasurableSpace α] [ENorm ε] (f : α → ε) (p : ℝ≥0∞) + (μ : Measure α) : ℝ≥0∞ := + if p = 0 then 0 else if p = ∞ then eLpNormEssSup f μ else eLpNorm' f p.toReal μ + +theorem eLpNorm_eq_eLpNormFormula {α ε : Type*} [MeasurableSpace α] [TopologicalSpace ε] + [ENorm ε] {f : α → ε} + {p : ℝ≥0∞} {μ : Measure α} (hf : AEStronglyMeasurable f μ) : + eLpNorm f p μ = eLpNormFormula f p μ := by + simp [eLpNorm, eLpNormFormula, hf] + +theorem eLpNormFormula_const_nnreal_smul_le {α : Type*} [MeasurableSpace α] + {p : ℝ≥0∞} {μ : Measure α} {c : ℝ≥0} {f : α → ε} : + eLpNormFormula (c • f) p μ ≤ ‖c‖ₑ * eLpNormFormula f p μ := by + have hbound : ∀ᵐ x ∂μ, ‖(c • f) x‖ₑ ≤ c * ‖f x‖ₑ := by + filter_upwards with point using by simp [ENNReal.smul_def] + by_cases hp : p = 0 + · simp [eLpNormFormula, hp] + by_cases htop : p = ∞ + · simpa [eLpNormFormula, hp, htop, ENNReal.smul_def] using + eLpNormEssSup_le_nnreal_smul_eLpNormEssSup_of_ae_le_mul' hbound + simpa [eLpNormFormula, hp, htop, ENNReal.smul_def] using + eLpNorm'_le_nnreal_smul_eLpNorm'_of_ae_le_mul' hbound (ENNReal.toReal_pos hp htop) + +theorem eLpNormFormula_const_nnreal_smul {α : Type*} [MeasurableSpace α] + {p : ℝ≥0∞} {μ : Measure α} {c : ℝ≥0} {f : α → ε} : + eLpNormFormula (c • f) p μ = ‖c‖ₑ * eLpNormFormula f p μ := by + obtain rfl | hc := eq_or_ne c 0 + · rw [zero_smul, ← eLpNorm_eq_eLpNormFormula aestronglyMeasurable_zero] + simp + refine le_antisymm eLpNormFormula_const_nnreal_smul_le <| ENNReal.mul_le_of_le_div' ?_ + simpa [ENNReal.div_eq_inv_mul, hc] using + eLpNormFormula_const_nnreal_smul_le (c := c⁻¹) (f := c • f) + +theorem eLpNorm_const_nnreal_smul_of_aestronglyMeasurable + {α : Type*} [MeasurableSpace α] {p : ℝ≥0∞} {μ : Measure α} {c : ℝ≥0} {f : α → ε} + (hf : AEStronglyMeasurable f μ) (hcf : AEStronglyMeasurable (c • f) μ) : + eLpNorm (c • f) p μ = ‖c‖ₑ * eLpNorm f p μ := by + rw [eLpNorm_eq_eLpNormFormula hf, eLpNorm_eq_eLpNormFormula hcf] + exact eLpNormFormula_const_nnreal_smul + -- TODO: put next to MeasureTheory.eLpNorm_const_smul_le (which perhaps can stay) -theorem eLpNorm_const_nnreal_smul_le {α : Type*} {m0 : MeasurableSpace α} {p : ℝ≥0∞} - {μ : Measure α} {c : ℝ≥0} {f : α → ε} : eLpNorm (c • f) p μ ≤ ‖c‖ₑ * eLpNorm f p μ := by - apply eLpNorm_le_nnreal_smul_eLpNorm_of_ae_le_mul' (p := p) ?_ - filter_upwards with x using by simp [ENNReal.smul_def] +theorem eLpNorm_const_nnreal_smul_le [ContinuousConstSMul ℝ≥0 ε] + {α : Type*} {m0 : MeasurableSpace α} {p : ℝ≥0∞} + {μ : Measure α} {c : ℝ≥0} {f : α → ε} : + eLpNorm (c • f) p μ ≤ ‖c‖ₑ * eLpNorm f p μ := by + by_cases hf : AEStronglyMeasurable f μ + · exact (eLpNorm_const_nnreal_smul_of_aestronglyMeasurable hf (hf.const_smul c)).le + rw [eLpNorm_of_not_aestronglyMeasurable hf] + obtain rfl | hc := eq_or_ne c 0 + · simp + · rw [ENNReal.mul_top (by simpa)] + exact le_top -- TODO: put next to eLpNorm_const_smul -theorem eLpNorm_const_smul' {α : Type*} {m0 : MeasurableSpace α} {p : ℝ≥0∞} +theorem eLpNorm_const_smul' [ContinuousConstSMul ℝ≥0 ε] + {α : Type*} {m0 : MeasurableSpace α} {p : ℝ≥0∞} {μ : Measure α} {c : ℝ≥0} {f : α → ε} : eLpNorm (c • f) p μ = ‖c‖ₑ * eLpNorm f p μ := by obtain rfl | hc := eq_or_ne c 0 @@ -113,21 +167,24 @@ theorem eLpNorm_const_smul' {α : Type*} {m0 : MeasurableSpace α} {p : ℝ≥0 set_option backward.isDefEq.respectTransparency false in theorem eLpNorm_top_smul {α : Type*} {m0 : MeasurableSpace α} {p : ℝ≥0∞} - {μ : Measure α} {f : α → ℝ≥0∞} (hf : AEStronglyMeasurable f μ) : eLpNorm (∞ • f) p μ = ⊤ * eLpNorm f p μ := by + {μ : Measure α} {f : α → ℝ≥0∞} (hf : AEStronglyMeasurable f μ) : + eLpNorm (∞ • f) p μ = ⊤ * eLpNorm f p μ := by + have htop : AEStronglyMeasurable (∞ • f) μ := + (hf.aemeasurable.const_mul ∞).aestronglyMeasurable by_cases hp : p = 0 - · simp [hp] + · simp [hp, hf, htop] by_cases h : f =ᶠ[ae μ] 0 · rw [eLpNorm_eq_zero_of_ae_zero h, mul_zero] apply eLpNorm_eq_zero_of_ae_zero filter_upwards [h] with x hx simpa · have : ¬ eLpNorm f p μ = 0 := by - rwa [eLpNorm_eq_zero_iff hf hp] + rwa [eLpNorm_eq_zero_iff hp] by_cases h' : eLpNorm f p μ = ⊤ · simp only [h', ne_eq, top_ne_zero, not_false_eq_true, mul_top] rw [eq_top_iff] at * apply h'.trans - apply eLpNorm_mono_enorm + apply eLpNorm_mono_enorm hf intro x simp only [enorm_eq_self, Pi.smul_apply, smul_eq_mul] exact ENNReal.le_mul_top_self @@ -145,7 +202,7 @@ theorem eLpNorm_top_smul {α : Type*} {m0 : MeasurableSpace α} {p : ℝ≥0∞} congr exact Eq.symm (coe_toNNReal h') _ ≤ eLpNorm (∞ • f) p μ := by - apply eLpNorm_mono_enorm + apply eLpNorm_mono_enorm (hf.const_smul _) intro x simp only [toNNReal_div, toNNReal_coe, Pi.smul_apply, enorm_smul_eq_smul, enorm_eq_self, smul_eq_mul] diff --git a/Carleson/ToMathlib/HardyLittlewood.lean b/Carleson/ToMathlib/HardyLittlewood.lean index 5982df5..e3d46e3 100644 --- a/Carleson/ToMathlib/HardyLittlewood.lean +++ b/Carleson/ToMathlib/HardyLittlewood.lean @@ -5,13 +5,13 @@ import Carleson.ToMathlib.Order.ConditionallyCompleteLattice.Indexed import Mathlib.MeasureTheory.Covering.Vitali import Mathlib.Tactic.Field +/-! This should roughly contain the contents of chapter 9. -/ + open MeasureTheory Metric Bornology Set TopologicalSpace Vitali Filter Pointwise open ENNReal hiding one_lt_two open scoped NNReal noncomputable section -/-! This should roughly contain the contents of chapter 9. -/ - -- Upstreaming status: aside from getting the real interpolation theorem merged, -- this file needs a bunch of clean-up before it can be upstreamed: -- moving preliminary lemmas to their appropriate homes (some of these lemmas do not belong in @@ -46,7 +46,8 @@ lemma exists_ball_subset_ball_two (c : X) {r : ℝ} (hr : 0 < r) : exact (Real.rpow_intCast 2 m).symm _ = _ := Real.rpow_logb zero_lt_two (OfNat.one_ne_ofNat 2).symm hr have hm' : r < 2 ^ (m + 1) := by - calc _ = (2 : ℝ) ^ Real.logb 2 r := (Real.rpow_logb zero_lt_two (OfNat.one_ne_ofNat 2).symm hr).symm + calc _ = (2 : ℝ) ^ Real.logb 2 r := + (Real.rpow_logb zero_lt_two (OfNat.one_ne_ofNat 2).symm hr).symm _ < _ := by rw [← Real.rpow_intCast 2 (m + 1)] refine Real.strictMono_rpow_of_base_gt_one one_lt_two ?_ @@ -87,7 +88,8 @@ variable {X E : Type*} {A : ℝ≥0} [MetricSpace X] [MeasurableSpace X] open scoped Topology in -- unused in Carleson -- move to separate file (not sure where) -lemma lowerSemiContinuousOn_integral_ball [OpensMeasurableSpace X] (hf2 : AEStronglyMeasurable f μ) : +lemma lowerSemiContinuousOn_integral_ball [OpensMeasurableSpace X] + (hf2 : AEStronglyMeasurable f μ) : LowerSemicontinuousOn (fun x : X × ℝ ↦ ∫⁻ y in ball x.1 x.2, ‖f y‖ₑ ∂μ) (univ ×ˢ Ioi 0) := by refine lowerSemicontinuousOn_iff_le_liminf.mpr fun x hx ↦ _root_.le_of_forall_pos_le_add ?_ intro δ hδ @@ -98,7 +100,7 @@ lemma lowerSemiContinuousOn_integral_ball [OpensMeasurableSpace X] (hf2 : AEStro (𝓝[univ ×ˢ Ioi 0] x) < M := lt_add_right htop hδ.ne' have : ∃ᶠ (z : X × ℝ) in 𝓝[univ ×ˢ Ioi 0] x, ∫⁻ (y : X) in ball z.1 z.2, ‖f y‖ₑ ∂μ < M := by refine frequently_lt_of_liminf_lt ?_ hM - simp only [IsCoboundedUnder, Filter.IsCobounded, ge_iff_le, eventually_map] + simp only [IsCoboundedUnder, Filter.IsCobounded, eventually_map] use ∫⁻ (y : X) in ball x.1 x.2, ‖f y‖ₑ ∂μ intro a ha; apply Eventually.self_of_nhdsWithin ha hx obtain ⟨ns, hns₀, hns₁⟩ := @@ -117,7 +119,8 @@ lemma lowerSemiContinuousOn_integral_ball [OpensMeasurableSpace X] (hf2 : AEStro have : ∀ᶠ (n : ℕ) in atTop, dist z (ns n).1 - (ns n).2 < 0 := by rw [mem_ball, ← sub_lt_zero] at hz; exact Tendsto.eventually_lt_const hz this filter_upwards [this]; simp - filter_upwards [hz2]; intro a ha; split_ifs; rfl + filter_upwards [hz2] with index hindex + simp only [hindex, ↓reduceIte, le_refl] · simp calc ∫⁻ (y : X) in ball x.1 x.2, ‖f y‖ₑ ∂μ @@ -129,7 +132,7 @@ lemma lowerSemiContinuousOn_integral_ball [OpensMeasurableSpace X] (hf2 : AEStro _ ≤ M := by apply liminf_le_of_le (f := atTop) intro b hb - simp only [eventually_atTop, ge_iff_le] at hb + simp only [eventually_atTop] at hb obtain ⟨a, ha⟩ := hb exact le_of_lt <| lt_of_le_of_lt (ha a le_rfl) <| by unfold g; rw [lintegral_indicator measurableSet_ball]; exact hns₁ a @@ -199,11 +202,11 @@ lemma continuous_integral_ball [OpensMeasurableSpace X] have hz' : Tendsto z atTop (𝓝 x) := tendsto_nhds_of_tendsto_nhdsWithin hz have := isBounded_range_of_tendsto z hz' obtain ⟨r, hr⟩ := Bornology.IsBounded.subset_ball this x - simp only [range, ball, setOf_subset_setOf, forall_exists_index, forall_apply_eq_imp_iff] at hr + simp only [range, ball, ofPred_subset_ofPred, forall_exists_index, forall_apply_eq_imp_iff] at hr simp_rw [Prod.dist_eq] at hr have hsub (n : ℕ) : ball (z n).1 (z n).2 ⊆ ball x.1 (x.2 + 2 * r) := by intro y hy - simp only [ball, mem_setOf_eq] at hy ⊢ + simp only [ball, mem_ofPred_eq] at hy ⊢ calc dist y x.1 _ ≤ dist y (z n).1 + dist (z n).1 x.1 := dist_triangle y (z n).1 x.1 _ ≤ (z n).2 + dist (z n).1 x.1 := by gcongr @@ -246,11 +249,10 @@ lemma continuous_integral_ball [OpensMeasurableSpace X] linarith · have : ∀ᵐ z : X ∂μ, dist z x.1 ≠ x.2 := by change (μ ({z | ¬ (dist z x.1 ≠ x.2)}) = 0) - simpa only [ne_eq, Decidable.not_not] using hμ x.1 x.2 hx_pos + simpa only [sphere, ne_eq, Decidable.not_not] using hμ x.1 x.2 hx_pos filter_upwards [this] with y hy by_cases hy2 : dist y x.1 < x.2 - · simp only [indicator, ball, mem_setOf_eq] - split_ifs + · simp only [indicator, ball, mem_ofPred_eq] apply tendsto_nhds_of_eventually_eq have hz2 : ∀ᶠ n : ℕ in atTop, dist y (z n).1 < (z n).2 := by let dist_sub (a : X × ℝ) := dist y a.1 - a.2 @@ -259,24 +261,27 @@ lemma continuous_integral_ball [OpensMeasurableSpace X] have : ∀ᶠ (n : ℕ) in atTop, dist y (z n).1 - (z n).2 < 0 := by rw [← sub_lt_zero] at hy2; exact Tendsto.eventually_lt_const hy2 this filter_upwards [this]; simp - filter_upwards [hz2]; intro a ha; split_ifs; rfl + filter_upwards [hz2] with index hindex + simp only [hindex, hy2, ↓reduceIte] · have hz2 : ∀ᶠ n : ℕ in atTop, dist y (z n).1 > (z n).2 := by let dist_sub (a : X × ℝ) := dist y a.1 - a.2 have : ContinuousOn dist_sub (univ ×ˢ Ioi 0) := by fun_prop have hcmp : Tendsto (dist_sub ∘ z) atTop (𝓝 (dist_sub x)) := Tendsto.comp (this x hx) hz have hy2 : dist y x.1 > x.2 := by order have hy2 : 0 < dist y x.1 - x.2 := sub_pos.mpr hy2 - have : ∀ᶠ (n : ℕ) in atTop, 0 < dist y (z n).1 - (z n).2 := Tendsto.eventually_const_lt hy2 hcmp + have : ∀ᶠ (n : ℕ) in atTop, 0 < dist y (z n).1 - (z n).2 := + Tendsto.eventually_const_lt hy2 hcmp filter_upwards [this]; simp - simp only [indicator, ball, mem_setOf_eq] + simp only [indicator, ball, mem_ofPred_eq] apply tendsto_nhds_of_eventually_eq filter_upwards [hz2] with n hn have : ¬ (dist y (z n).1 < (z n).2) := by linarith - split_ifs; rfl + simp only [this, hy2, ↓reduceIte] -- unused in Carleson -- move to separate file (not sure where) -lemma continuous_average_ball [μ.IsOpenPosMeasure] [IsFiniteMeasureOnCompacts μ] [OpensMeasurableSpace X] +lemma continuous_average_ball [μ.IsOpenPosMeasure] [IsFiniteMeasureOnCompacts μ] + [OpensMeasurableSpace X] [ProperSpace X] (hf : LocallyIntegrable f μ) (hμ : ∀ z : X, ∀ r > (0 : ℝ), μ (sphere z r) = 0) : ContinuousOn (fun x : X × ℝ ↦ ⨍⁻ y in ball x.1 x.2, ‖f y‖ₑ ∂μ) (univ ×ˢ Ioi 0) := by @@ -368,7 +373,7 @@ theorem exists_disjoint_subfamily_covering_enlargement_closedBall' {α} [MetricS exact h'a.le.trans <| by positivity -- move to Vitali -theorem Vitali.exists_disjoint_subfamily_covering_enlargement_ball {α} [MetricSpace α] (t : Set ι) +theorem Vitali.exists_disjoint_subfamily_covering_enlargement_ball' {α} [MetricSpace α] (t : Set ι) (x : ι → α) (r : ι → ℝ) (R : ℝ) (hr : ∀ a ∈ t, r a ≤ R) (τ : ℝ) (hτ : 3 < τ) : ∃ u ⊆ t, (u.PairwiseDisjoint fun a => ball (x a) (r a)) ∧ @@ -402,7 +407,7 @@ theorem Set.Countable.measure_biUnion_le_lintegral [OpensMeasurableSpace X] (h (l : ℝ≥0∞) (u : X → ℝ≥0∞) (R : ℝ) (hR : ∀ a ∈ 𝓑, r a ≤ R) (h2u : ∀ i ∈ 𝓑, l * μ (ball (c i) (r i)) ≤ ∫⁻ x in ball (c i) (r i), u x ∂μ) : l * μ (⋃ i ∈ 𝓑, ball (c i) (r i)) ≤ A ^ 2 * ∫⁻ x, u x ∂μ := by - obtain ⟨B, hB𝓑, hB, h2B⟩ := Vitali.exists_disjoint_subfamily_covering_enlargement_ball + obtain ⟨B, hB𝓑, hB, h2B⟩ := Vitali.exists_disjoint_subfamily_covering_enlargement_ball' 𝓑 c r R hR (2 ^ 2) (by norm_num) have : Countable B := h𝓑.mono hB𝓑 have disj := fun i j hij ↦ @@ -473,20 +478,22 @@ theorem MB_le_eLpNormEssSup {u : X → E} {x : X} : MB μ 𝓑 c r u x ≤ eLpNo protected theorem HasStrongType.MB_top [BorelSpace X] : HasStrongType (fun (u : X → E) (x : X) ↦ MB μ 𝓑 c r u x) ⊤ ⊤ μ μ 1 := by - intro f _ + intro f hf use Measurable.maximalFunction.aestronglyMeasurable - simp only [one_mul, eLpNorm_exponent_top] + rw [one_mul, eLpNorm_exponent_top Measurable.maximalFunction.aestronglyMeasurable, + eLpNorm_exponent_top hf.aestronglyMeasurable] exact essSup_le_of_ae_le _ (Eventually.of_forall fun x ↦ MB_le_eLpNormEssSup) /- The proof is roughly between (9.0.12)-(9.0.22). -/ protected theorem HasWeakType.MB_one [BorelSpace X] (h𝓑 : 𝓑.Countable) {R : ℝ} (hR : ∀ i ∈ 𝓑, r i ≤ R) : HasWeakType (MB (E := E) μ 𝓑 c r) 1 1 μ μ (A ^ 2) := by - intro f _ + intro f hf use Measurable.maximalFunction.aestronglyMeasurable let Bₗ (ℓ : ℝ≥0∞) := { i ∈ 𝓑 | ∫⁻ y in (ball (c i) (r i)), ‖f y‖ₑ ∂μ ≥ ℓ * μ (ball (c i) (r i)) } - simp only [wnorm, one_ne_top, wnorm', toReal_one, inv_one, ENNReal.rpow_one, reduceIte, eLpNorm, - one_ne_zero, eLpNorm', ne_eq, not_false_eq_true, div_self, iSup_le_iff] + rw [eLpNorm_one_eq_lintegral_enorm hf.aestronglyMeasurable] + simp only [wnorm, one_ne_top, wnorm', toReal_one, inv_one, ENNReal.rpow_one, reduceIte, + iSup_le_iff] intro t by_cases ht : t = 0 · simp [ht] @@ -495,17 +502,19 @@ protected theorem HasWeakType.MB_one [BorelSpace X] (h𝓑 : 𝓑.Countable) (u := fun x ↦ ‖f x‖ₑ) (R := R) ?_ ?_) · refine mul_right_mono <| μ.mono (fun x hx ↦ mem_iUnion₂.mpr ?_) -- We need a ball in `Bₗ t` containing `x`. Since `MB μ 𝓑 c r f x` is large, such a ball exists - simp only [mem_setOf_eq] at hx + simp only [mem_ofPred_eq] at hx -- replace hx := lt_of_lt_of_le hx coe_toNNReal_le_self simp only [MB, maximalFunction, ENNReal.rpow_one, inv_one] at hx obtain ⟨i, ht⟩ := lt_iSup_iff.mp hx - replace hx : x ∈ ball (c i) (r i) := - by_contradiction <| fun h ↦ not_lt_of_ge (zero_le t) (ENNReal.coe_lt_coe.mp <| by simp [h] at ht) + replace hx : x ∈ ball (c i) (r i) := by + by_contra hball + simp [hball] at ht refine ⟨i, ?_, hx⟩ -- It remains only to confirm that the chosen ball is actually in `Bₗ t` - simp only [ge_iff_le, mem_setOf_eq, Bₗ] - have hi : i ∈ 𝓑 := - by_contradiction <| fun h ↦ not_lt_of_ge (zero_le t) (ENNReal.coe_lt_coe.mp <| by simp [h] at ht) + simp only [ge_iff_le, mem_ofPred_eq, Bₗ] + have hi : i ∈ 𝓑 := by + by_contra hindex + simp [hindex] at ht exact ⟨hi, mul_le_of_le_div <| le_of_lt (by simpa [setLAverage_eq, hi, hx] using ht)⟩ · exact fun i hi ↦ hR i (mem_of_mem_inter_left hi) · exact fun i hi ↦ hi.2.trans (setLIntegral_mono' measurableSet_ball fun x _ ↦ by simp) @@ -519,8 +528,8 @@ theorem MB_ae_ne_top [BorelSpace X] (h𝓑 : 𝓑.Countable) -- move lemma MeasureTheory.MemLp.eLpNormEssSup_lt_top {α} [MeasurableSpace α] {μ : Measure α} {u : α → E} (hu : MemLp u ⊤ μ) : eLpNormEssSup u μ < ⊤ := by - simp_rw [MemLp, eLpNorm_exponent_top] at hu - exact hu.2 + rw [← eLpNorm_exponent_top hu.aestronglyMeasurable] + exact hu include A in theorem MB_ae_ne_top' [BorelSpace X] (h𝓑 : 𝓑.Countable) @@ -626,7 +635,8 @@ This is a special case of `hasStrongType_maximalFunction` below, which doesn't h `hR` (but uses this result in its proof). -/ theorem hasStrongType_maximalFunction_aux [BorelSpace X] [IsFiniteMeasureOnCompacts μ] [ProperSpace X] [Nonempty X] [μ.IsOpenPosMeasure] - {p₁ p₂ : ℝ≥0} (h𝓑 : 𝓑.Countable) {R : ℝ} (hR : ∀ i ∈ 𝓑, r i ≤ R) (hp₁ : 0 < p₁) (hp₁₂ : p₁ < p₂) : + {p₁ p₂ : ℝ≥0} (h𝓑 : 𝓑.Countable) {R : ℝ} (hR : ∀ i ∈ 𝓑, r i ≤ R) + (hp₁ : 0 < p₁) (hp₁₂ : p₁ < p₂) : HasStrongType (fun (u : X → E) (x : X) ↦ maximalFunction μ 𝓑 c r p₁ u x) p₂ p₂ μ μ (C2_0_6 A p₁ p₂) := fun v mlpv ↦ by refine ⟨Measurable.maximalFunction.aestronglyMeasurable, ?_⟩; dsimp only @@ -635,7 +645,8 @@ theorem hasStrongType_maximalFunction_aux conv_lhs => enter [1, x] rw [maximalFunction_eq_MB cp₁p, ← enorm_eq_self (MB ..)] - rw [eLpNorm_enorm_rpow _ (by positivity), ENNReal.ofReal_inv_of_pos cp₁p, + rw [eLpNorm_enorm_rpow _ Measurable.maximalFunction.aestronglyMeasurable (by positivity), + ENNReal.ofReal_inv_of_pos cp₁p, ENNReal.ofReal_coe_nnreal, ← div_eq_mul_inv, ← ENNReal.coe_div p₁n] calc _ ≤ (CMB A (p₂ / p₁) * eLpNorm (fun y ↦ ‖v y‖ ^ (p₁ : ℝ)) (p₂ / p₁) μ) ^ p₁.toReal⁻¹ := by @@ -645,7 +656,8 @@ theorem hasStrongType_maximalFunction_aux · rwa [lt_div_iff₀, one_mul]; exact cp₁p · rw [ENNReal.coe_div p₁n]; exact mlpv.norm_rpow_div p₁ _ = _ := by - rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity), eLpNorm_norm_rpow _ cp₁p, + rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity), + eLpNorm_norm_rpow _ mlpv.aestronglyMeasurable cp₁p, ENNReal.ofReal_coe_nnreal, ENNReal.div_mul_cancel (by positivity) (by simp), ENNReal.rpow_rpow_inv (by positivity), ← ENNReal.coe_rpow_of_nonneg _ (by positivity), C2_0_6] @@ -680,7 +692,8 @@ lemma maximalFunction_seq_mono {𝓑 : Set ι} (h𝓑 : 𝓑.Countable) {p : ℝ obtain ⟨w, hw⟩ := Hi exact ⟨w, hw.1.trans hmn, hw.2⟩ -lemma maximalFunction_seq_eq {𝓑 : Set ι} (h𝓑 : 𝓑.Countable) {p : ℝ≥0} (hp : 0 < p) (u : X → E) (x : X) : +lemma maximalFunction_seq_eq {𝓑 : Set ι} (h𝓑 : 𝓑.Countable) {p : ℝ≥0} + (hp : 0 < p) (u : X → E) (x : X) : maximalFunction μ 𝓑 c r (↑p) u x = ⨆ k : ℕ, maximalFunction_seq μ h𝓑 c r (↑p) u k x := by let g := Classical.choose (Set.countable_iff_exists_injective.mp h𝓑) @@ -694,7 +707,7 @@ lemma maximalFunction_seq_eq {𝓑 : Set ι} (h𝓑 : 𝓑.Countable) {p : ℝ let k₀ := g ⟨i, Hi⟩ have k₀large : i ∈ 𝓑' k₀ := by unfold 𝓑' - simp only [preimage_setOf_eq, mem_image, mem_setOf_eq, Subtype.exists, exists_and_right, + simp only [preimage_ofPred_eq, mem_image, mem_ofPred_eq, Subtype.exists, exists_and_right, exists_eq_right] use Hi calc @@ -733,13 +746,10 @@ theorem hasStrongType_maximalFunction obtain ⟨R, hR⟩ := Finite.exists_image_le (tr_finite h𝓑 k) r exact (hasStrongType_maximalFunction_aux (c := c) (Finite.countable (tr_finite h𝓑 k)) hR hp₁ hp₁₂ v mlpv).2 - unfold eLpNorm - split_ifs with h₀ - · simp - · have h : ENNReal.ofNNReal p₂ = ⊤ := by assumption - simp at h - · unfold eLpNorm' - calc + rw [eLpNorm_eq_eLpNorm' (coe_ne_zero.mpr (ne_zero_of_lt hp₁₂)) coe_ne_top + Measurable.maximalFunction.aestronglyMeasurable] + unfold eLpNorm' + calc _ = (∫⁻ (a : X), (⨆ k, maximalFunction_seq μ h𝓑 c r (↑p₁) v k a) ^ (ofNNReal p₂).toReal ∂μ) ^ (1 / (ofNNReal p₂).toReal) := by congr; ext x; congr; exact maximalFunction_seq_eq h𝓑 hp₁ v x @@ -771,11 +781,11 @@ theorem hasStrongType_maximalFunction intro k apply (rpow_le_rpow_iff hp₂inv_pos).mp rw [ENNReal.rpow_rpow_inv hp₂neq_zero] - unfold eLpNorm at hestfin - split_ifs at hestfin - unfold eLpNorm' at hestfin - rw [one_div] at hestfin - exact hestfin k + have hest := hestfin k + simp only [maximalFunction_seq] at hest + rw [eLpNorm_eq_eLpNorm' (coe_ne_zero.mpr (ne_zero_of_lt hp₁₂)) coe_ne_top + Measurable.maximalFunction.aestronglyMeasurable, eLpNorm', one_div] at hest + simpa only [maximalFunction_seq, enorm_eq_self] using hest theorem hasWeakType_maximalFunction_equal_exponents₀ [BorelSpace X] {p : ℝ≥0} (h𝓑 : 𝓑.Countable) {R : ℝ} (hR : ∀ i ∈ 𝓑, r i ≤ R) (hp : 0 < p) : @@ -789,11 +799,12 @@ theorem hasWeakType_maximalFunction_equal_exponents₀ [BorelSpace X] conv_lhs => enter [1, x] rw [maximalFunction_eq_MB cp] - have hmb_one : wnorm (MB μ 𝓑 c r fun x ↦ ‖v x‖ ^ (p : ℝ)) 1 μ ≤ ↑A ^ 2 * eLpNorm (fun x ↦ ‖v x‖ ^ (p : ℝ)) 1 μ := by + have hmb_one : wnorm (MB μ 𝓑 c r fun x ↦ ‖v x‖ ^ (p : ℝ)) 1 μ ≤ + ↑A ^ 2 * eLpNorm (fun x ↦ ‖v x‖ ^ (p : ℝ)) 1 μ := by apply (HasWeakType.MB_one h𝓑 hR (fun x : X ↦ ‖v x‖ ^ (p : ℝ)) _).2 - convert MemLp.norm_rpow_div mlpv p - exact Eq.symm (ENNReal.div_self (coe_ne_zero.mpr p₁n) coe_ne_top) + simpa only [coe_toReal, ENNReal.div_self (coe_ne_zero.mpr p₁n) coe_ne_top] + using mlpv.norm_rpow_div p unfold wnorm wnorm' distribution at hmb_one ⊢ simp only [one_ne_top, ↓reduceIte, enorm_eq_self, toReal_one, inv_one, rpow_one, iSup_le_iff, coe_ne_top, coe_toReal] at hmb_one ⊢ @@ -806,7 +817,8 @@ theorem hasWeakType_maximalFunction_equal_exponents₀ [BorelSpace X] · exact Eq.symm (coe_rpow_of_ne_zero ht ↑p) · rw [rpow_inv_rpow (NNReal.coe_ne_zero.mpr p₁n)] congr; ext x; rw [coe_rpow_of_ne_zero ht ↑p]; exact (lt_rpow_inv_iff cp) - · rw [eLpNorm_norm_rpow v cp, ENNReal.mul_rpow_of_nonneg _ _ NNReal.zero_le_coe, + · rw [eLpNorm_norm_rpow v mlpv.aestronglyMeasurable cp, + ENNReal.mul_rpow_of_nonneg _ _ NNReal.zero_le_coe, div_eq_mul_inv, rpow_mul, rpow_inv_rpow (NNReal.coe_ne_zero.mpr p₁n), rpow_two]; simp theorem hasWeakType_maximalFunction_equal_exponents @@ -839,13 +851,14 @@ theorem hasWeakType_maximalFunction_equal_exponents have f_mon : Monotone f := by refine fun a b hab x ↦ iSup₂_le fun i Hi ↦ ?_ apply le_iSup₂ (f := fun j _ ↦ (ball (c j) (r j)).indicator - (fun x ↦ (⨍⁻ (y : X) in ball (c j) (r j), ‖v y‖ₑ ^ (ofNNReal p).toReal ∂μ) ^ (ofNNReal p).toReal⁻¹) x) + (fun x ↦ (⨍⁻ (y : X) in ball (c j) (r j), ‖v y‖ₑ ^ (ofNNReal p).toReal ∂μ) ^ + (ofNNReal p).toReal⁻¹) x) obtain ⟨w, hw⟩ := Hi; use w; exact ⟨hw.1.trans hab, hw.2⟩ intro t have hm : Monotone (fun k ↦ {x | (t : ℝ≥0∞) < ‖maximalFunction μ (tr h𝓑 k) c r p v x‖ₑ}) := by intro m n hmn x - simp only [enorm_eq_self, mem_setOf_eq] + simp only [enorm_eq_self, mem_ofPred_eq] exact fun ht ↦ ht.trans_le (f_mon hmn x) apply (rpow_le_rpow_iff p_pos).mp rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity), rpow_inv_rpow p_pos.ne'] @@ -884,7 +897,7 @@ theorem hasWeakType_maximalFunction split_ifs with hps · rw [← hps] exact hasWeakType_maximalFunction_equal_exponents (A := A) h𝓑 hp₁ - · apply HasStrongType.hasWeakType (coe_lt_coe_of_lt (hp₁.trans_le hp₁₂)) + · apply HasStrongType.hasWeakType (coe_lt_coe.mpr (hp₁.trans_le hp₁₂)) exact hasStrongType_maximalFunction h𝓑 hp₁ (lt_of_le_of_ne hp₁₂ hps) section GMF @@ -894,8 +907,8 @@ variable [ProperSpace X] variable (μ) in /-- The transformation `M` characterized in Proposition 2.0.6. `p` is `1` in the blueprint, and `globalMaximalFunction μ p u = (M (u ^ p)) ^ p⁻¹ ` -/ -@[nolint unusedArguments] -def globalMaximalFunction [μ.IsDoubling A] (p : ℝ) (u : X → E) (x : X) : ℝ≥0∞ := +def globalMaximalFunction (p : ℝ) (u : X → E) (x : X) : ℝ≥0∞ := + let _ := ‹μ.IsDoubling A› A ^ 2 * maximalFunction μ ((covering_separable_space X).choose ×ˢ (univ : Set ℤ)) (·.1) (fun x ↦ 2 ^ (x.2)) p u x @@ -930,7 +943,8 @@ theorem laverage_le_globalMaximalFunction [IsFiniteMeasureOnCompacts μ] [μ.IsO refine (le_iSup₂ (c, m) hc).trans_eq' ?_ simp [laverage, indicator_of_mem (h_subset h)] -theorem lintegral_ball_le_volume_globalMaximalFunction [IsFiniteMeasureOnCompacts μ] [μ.IsOpenPosMeasure] +theorem lintegral_ball_le_volume_globalMaximalFunction [IsFiniteMeasureOnCompacts μ] + [μ.IsOpenPosMeasure] {u : X → E} {z x : X} {r : ℝ} (h : dist x z < r) : ∫⁻ y in (ball z r), ‖u y‖ₑ ∂μ ≤ μ (ball z r) * globalMaximalFunction μ 1 u x := by have : IsFiniteMeasure (μ.restrict (ball z r)) := isFiniteMeasure_restrict.mpr (by finiteness) @@ -942,7 +956,8 @@ theorem lintegral_ball_le_volume_globalMaximalFunction [IsFiniteMeasureOnCompact /-- The constant factor in the statement that `M` has strong type. -/ def C2_0_6' (A p₁ p₂ : ℝ≥0) : ℝ≥0 := A ^ 2 * C2_0_6 A p₁ p₂ -lemma C2_0_6'_defaultA_one_two_eq {a : ℕ} : C2_0_6' (defaultA a) 1 2 = 2 ^ (3 * a + 3 / (2 : ℝ)) := by +lemma C2_0_6'_defaultA_one_two_eq {a : ℕ} : + C2_0_6' (defaultA a) 1 2 = 2 ^ (3 * a + 3 / (2 : ℝ)) := by simp_rw [C2_0_6', C2_0_6, div_one, CMB_defaultA_two_eq, defaultA, Nat.cast_pow, Nat.cast_ofNat, NNReal.coe_one, inv_one, NNReal.rpow_one, ← pow_mul, ← NNReal.rpow_natCast] rw [← NNReal.rpow_add (by simp)] @@ -984,9 +999,12 @@ theorem hasWeakType_globalMaximalFunction [BorelSpace X] [IsFiniteMeasureOnCompa [μ.IsOpenPosMeasure] {p₁ p₂ : ℝ≥0} (hp₁ : 0 < p₁) (hp₁₂ : p₁ ≤ p₂) : HasWeakType (globalMaximalFunction μ p₁ (E := E)) p₂ p₂ μ μ (C_weakType_globalMaximalFunction A p₁ p₂) := by - convert HasWeakType.const_mul (c := C_weakType_maximalFunction A p₁ p₂) (e := A ^ 2) - (coe_ne_zero.mpr (hp₁.trans_le hp₁₂).ne') _ - exact hasWeakType_maximalFunction countable_globalMaximalFunction hp₁ hp₁₂ + convert + (hasWeakType_maximalFunction (μ := μ) (E := E) (c := (·.1)) (r := fun x ↦ 2 ^ x.2) + countable_globalMaximalFunction hp₁ hp₁₂).const_mul + (coe_ne_zero.mpr (hp₁.trans_le hp₁₂).ne') (A ^ 2) using 1 <;> + simp only [C_weakType_globalMaximalFunction, ENNReal.coe_pow] + rfl /-- Use `lowerSemiContinuous_MB` -/ lemma lowerSemiContinuous_globalMaximalFunction : diff --git a/Carleson/ToMathlib/Interval.lean b/Carleson/ToMathlib/Interval.lean index 948f0cd..a07c341 100644 --- a/Carleson/ToMathlib/Interval.lean +++ b/Carleson/ToMathlib/Interval.lean @@ -1,7 +1,13 @@ -import Mathlib.Data.Set.Lattice +import Mathlib.Data.Set.Lattice.Bounded +import Mathlib.Data.Set.Lattice.Disjoint +import Mathlib.Data.Set.Lattice.Image +import Mathlib.Data.Set.Lattice.Indexed +import Mathlib.Data.Set.Lattice.Order import Mathlib.Order.SuccPred.Basic import Mathlib.Tactic.Common +/-! # Interval inclusions, unions, and disjointness -/ + -- Upstreaming status: results seem useful in general, some should be generalised open Function Order Set diff --git a/Carleson/ToMathlib/MeasureTheory/Integral/Average.lean b/Carleson/ToMathlib/MeasureTheory/Integral/Average.lean index 2e68964..0188672 100644 --- a/Carleson/ToMathlib/MeasureTheory/Integral/Average.lean +++ b/Carleson/ToMathlib/MeasureTheory/Integral/Average.lean @@ -1,5 +1,7 @@ import Mathlib.MeasureTheory.Integral.Average +/-! # Monotonicity and essential supremum bounds for lower averages -/ + -- Upstreaming status: upstreamed in https://github.com/leanprover-community/mathlib4/pull/37551 open MeasureTheory MeasureTheory.Measure Filter Set @@ -12,22 +14,23 @@ lemma laverage_mono_ae {f g : α → ℝ≥0∞} (h : ∀ᵐ a ∂μ, f a ≤ g ⨍⁻ a, f a ∂μ ≤ ⨍⁻ a, g a ∂μ := lintegral_mono_ae <| h.filter_mono <| Measure.ae_mono' Measure.smul_absolutelyContinuous -@[gcongr] +@[gcongr only] lemma setLAverage_mono_ae {f g : α → ℝ≥0∞} (h : ∀ᵐ a ∂μ, f a ≤ g a) : ⨍⁻ a in s, f a ∂μ ≤ ⨍⁻ a in s, g a ∂μ := - laverage_mono_ae <| h.filter_mono <| ae_mono Measure.restrict_le_self + _root_.laverage_mono_ae <| h.filter_mono <| ae_mono Measure.restrict_le_self lemma setLAverage_le_essSup (f : α → ℝ≥0∞) : ⨍⁻ x in s, f x ∂μ ≤ essSup f μ := by by_cases hμ : IsFiniteMeasure (μ.restrict s); swap · simp [laverage, not_isFiniteMeasure_iff.mp hμ] by_cases hμ0 : μ s = 0 · rw [laverage, ← setLIntegral_univ] - exact le_of_eq_of_le (setLIntegral_measure_zero univ f <| by simp [hμ0]) (zero_le (essSup f μ)) - apply le_of_le_of_eq (laverage_mono_ae <| Eventually.filter_mono ae_restrict_le ae_le_essSup) + exact le_of_eq_of_le (setLIntegral_measure_zero univ f <| by simp [hμ0]) zero_le + apply le_of_le_of_eq (_root_.laverage_mono_ae <| + Eventually.filter_mono ae_restrict_le ae_le_essSup) have : NeZero (μ.restrict s) := have : NeZero (μ s) := { out := hμ0 } restrict.neZero exact laverage_const (μ.restrict s) _ lemma laverage_le_essSup (f : α → ℝ≥0∞) : ⨍⁻ x, f x ∂μ ≤ essSup f μ := by - simpa using setLAverage_le_essSup (s := univ) f + simpa using _root_.setLAverage_le_essSup (s := univ) f diff --git a/Carleson/ToMathlib/MeasureTheory/Integral/IntegrableOn.lean b/Carleson/ToMathlib/MeasureTheory/Integral/IntegrableOn.lean index 09f5019..6cadf14 100644 --- a/Carleson/ToMathlib/MeasureTheory/Integral/IntegrableOn.lean +++ b/Carleson/ToMathlib/MeasureTheory/Integral/IntegrableOn.lean @@ -1,5 +1,7 @@ import Mathlib.MeasureTheory.Integral.IntegrableOn +/-! # Integrability on a set from integrability on the support -/ + open Set Filter TopologicalSpace MeasureTheory Function open scoped Topology Interval Filter ENNReal MeasureTheory @@ -11,18 +13,6 @@ open scoped Topology Interval Filter ENNReal MeasureTheory variable {α β ε ε' E F : Type*} [MeasurableSpace α] -namespace MeasureTheory - -protected theorem IntegrableAtFilter.congr'_enorm {μ : Measure α} [TopologicalSpace ε] - [TopologicalSpace ε'] [ContinuousENorm ε] [ContinuousENorm ε'] - {l : Filter α} {f : α → ε} {g : α → ε'} - (hf : IntegrableAtFilter f l μ) (hg : AEStronglyMeasurable g μ) - (h : ∀ᵐ a ∂μ, ‖f a‖ₑ = ‖g a‖ₑ) : - IntegrableAtFilter g l μ := - Exists.casesOn hf fun s hs ↦ ⟨s, hs.1, hs.2.congr'_enorm hg.restrict (ae_restrict_le h)⟩ - -end MeasureTheory - section NormedAddCommGroup variable [NormedAddCommGroup E] {f g : α → ε'} {s t : Set α} {μ ν : Measure α} @@ -31,7 +21,7 @@ variable [TopologicalSpace ε'] [ENormedAddMonoid ε'] theorem integrableOn_of_integrableOn_inter_support [PseudoMetrizableSpace ε'] {f : α → ε'} (hs : MeasurableSet s) (hf : IntegrableOn f (s ∩ support f) μ) : IntegrableOn f s μ := by - apply IntegrableOn.of_forall_diff_eq_zero hf hs + apply IntegrableOn.of_forall_sdiff_eq_zero hf hs simp end NormedAddCommGroup diff --git a/Carleson/ToMathlib/MeasureTheory/Integral/Lebesgue.lean b/Carleson/ToMathlib/MeasureTheory/Integral/Lebesgue.lean index 58ff6bf..48fca65 100644 --- a/Carleson/ToMathlib/MeasureTheory/Integral/Lebesgue.lean +++ b/Carleson/ToMathlib/MeasureTheory/Integral/Lebesgue.lean @@ -1,5 +1,7 @@ import Mathlib.MeasureTheory.Measure.Lebesgue.Basic +/-! # Changes of variables and monotonicity for lower integrals -/ + -- Upstreaming status: `lintegral_eq_iSup_eapprox_lintegral'` and `lintegral_comp'` -- upstreamed in https://github.com/leanprover-community/mathlib4/pull/37558 -- Remaining lemmas: shift/scaling aliases, `lintegral_set_mono_fn` @@ -73,33 +75,6 @@ lemma lintegral_scale_constant' {f : ℝ → ENNReal} {a : ℝ} (h : a ≠ 0) : simp -open SimpleFunc - -/-- Generalization of `MeasureTheory.lintegral_eq_iSup_eapprox_lintegral` assuming a.e. -measurability of `f` -/ -theorem lintegral_eq_iSup_eapprox_lintegral' {α : Type*} {m : MeasurableSpace α} {μ : Measure α} - {f : α → ENNReal} (hf : AEMeasurable f μ) : - ∫⁻ (a : α), f a ∂μ = ⨆ (n : ℕ), (eapprox (hf.mk f) n).lintegral μ := - calc - _ = ∫⁻ a, hf.mk f a ∂μ := lintegral_congr_ae hf.ae_eq_mk - _ = ∫⁻ a, ⨆ n, (eapprox (hf.mk f) n : α → ℝ≥0∞) a ∂μ := by - simp [iSup_eapprox_apply hf.measurable_mk] - _ = ⨆ n, ∫⁻ a, eapprox (hf.mk f) n a ∂μ := - lintegral_iSup (fun _ ↦ SimpleFunc.measurable _) (fun _ _ h ↦ monotone_eapprox (hf.mk f) h) - _ = ⨆ n, (eapprox (hf.mk f) n).lintegral μ := by simp [lintegral_eq_lintegral] - -/-- Generalization of `MeasureTheory.lintegral_comp` assuming a.e. measurability of `f` and `g` -/ -theorem lintegral_comp' {α : Type*} {β : Type*} {m : MeasurableSpace α} {μ : Measure α} - [MeasurableSpace β] {f : β → ENNReal} {g : α → β} (hf : AEMeasurable f (μ.map g)) - (hg : AEMeasurable g μ) : lintegral μ (f ∘ g) = ∫⁻ a, f a ∂μ.map g := by - rw [μ.map_congr hg.ae_eq_mk] at hf ⊢ - calc ∫⁻ a, (f ∘ g) a ∂μ - _ = ∫⁻ a, (hf.mk f ∘ hg.mk g) a ∂μ := by - rw [lintegral_congr_ae (hg.ae_eq_mk.fun_comp f)] - exact lintegral_congr_ae (ae_of_ae_map hg.measurable_mk.aemeasurable hf.ae_eq_mk) - _ = ∫⁻ a, hf.mk f a ∂μ.map (hg.mk g) := lintegral_comp hf.measurable_mk hg.measurable_mk - _ = ∫⁻ a, f a ∂μ.map (hg.mk g) := lintegral_congr_ae hf.ae_eq_mk.symm - lemma lintegral_set_mono_fn {α : Type*} {m : MeasurableSpace α} {μ : Measure α} {s : Set α} (hs : MeasurableSet s) ⦃f g : α → ℝ≥0∞⦄ (hfg : ∀ x ∈ s, f x ≤ g x) : ∫⁻ (a : α) in s, f a ∂μ ≤ ∫⁻ (a : α) in s, g a ∂μ := by diff --git a/Carleson/ToMathlib/MeasureTheory/Measure/IsDoubling.lean b/Carleson/ToMathlib/MeasureTheory/Measure/IsDoubling.lean index 06a6caa..2a9f2fd 100644 --- a/Carleson/ToMathlib/MeasureTheory/Measure/IsDoubling.lean +++ b/Carleson/ToMathlib/MeasureTheory/Measure/IsDoubling.lean @@ -1,9 +1,12 @@ import Carleson.ToMathlib.Misc import Carleson.ToMathlib.CoveredByBalls -import Mathlib.Data.Real.StarOrdered +import Mathlib.Analysis.Real.Sqrt +import Mathlib.Tactic.ContinuousFunctionalCalculus import Mathlib.MeasureTheory.Measure.Lebesgue.VolumeOfBalls import Mathlib.Order.CompletePartialOrder +/-! # Doubling measures and uniform local doubling -/ + open MeasureTheory Measure NNReal Metric Filter Topology TopologicalSpace open ENNReal hiding one_lt_two noncomputable section @@ -151,9 +154,9 @@ instance : IsUnifLocDoublingMeasure (μ : Measure X) where use max 1 A^2, Set.univ, by simp, Set.univ simp only [mem_principal, Set.subset_univ, Set.inter_self, true_and] ext r - simp only [ENNReal.coe_pow, Set.mem_setOf_eq, Set.mem_univ, iff_true] + simp only [ENNReal.coe_pow, Set.mem_ofPred_eq, Set.mem_univ, iff_true] intro x - letI : Nonempty X := ⟨x⟩ + let : Nonempty X := ⟨x⟩ by_cases hr : r ≤ 0 · have cball_eq : closedBall x (2 * r) = closedBall x r:= by by_cases! hr' : r < 0 diff --git a/Carleson/ToMathlib/MeasureTheory/Measure/NNReal.lean b/Carleson/ToMathlib/MeasureTheory/Measure/NNReal.lean index 1c0dd1c..4c7cfd2 100644 --- a/Carleson/ToMathlib/MeasureTheory/Measure/NNReal.lean +++ b/Carleson/ToMathlib/MeasureTheory/Measure/NNReal.lean @@ -2,6 +2,8 @@ import Mathlib.MeasureTheory.Measure.Haar.OfBasis import Mathlib.MeasureTheory.Measure.Lebesgue.Basic import Carleson.ToMathlib.MeasureTheory.Integral.Lebesgue +/-! # Lebesgue measure on nonnegative and extended nonnegative reals -/ + open MeasureTheory NNReal ENNReal Set noncomputable @@ -29,7 +31,7 @@ instance : MeasureSpace ℝ≥0∞ where lemma ENNReal.ofNNReal_preimage {s : Set ℝ≥0∞} : ENNReal.ofNNReal ⁻¹' s = ENNReal.toNNReal '' (s \ {⊤}) := by ext x - simp only [mem_image, mem_diff, mem_singleton_iff, mem_preimage] + simp only [mem_image, mem_sdiff, mem_singleton_iff, mem_preimage] constructor · intro h use ENNReal.ofNNReal x @@ -41,7 +43,7 @@ lemma ENNReal.ofNNReal_preimage {s : Set ℝ≥0∞} : --TODO: move these lemmas somewhere else? lemma ENNReal.map_toReal_eq_map_toReal_comap_ofReal {s : Set ℝ≥0∞} (h : ∞ ∉ s) : ENNReal.toReal '' s = NNReal.toReal '' (ENNReal.ofNNReal ⁻¹' s) := by - rw [ofNNReal_preimage, image_image, diff_singleton_eq_self h] + rw [ofNNReal_preimage, image_image, sdiff_singleton_eq_self h] congr lemma ENNReal.map_toReal_eq_map_toReal_comap_ofReal' {s : Set ℝ≥0∞} (h : ∞ ∈ s) : @@ -77,7 +79,8 @@ lemma ENNReal.volume_val {s : Set ℝ≥0∞} (hs : MeasurableSet s) : _ = volume (ENNReal.ofNNReal ⁻¹' s) := MeasureTheory.Measure.map_apply_of_aemeasurable (by fun_prop) hs _ = volume (NNReal.toReal '' (ENNReal.ofNNReal ⁻¹' s)) := NNReal.volume_val - _ = volume (ENNReal.toReal '' s) := Eq.symm (measure_congr ENNReal.map_toReal_ae_eq_map_toReal_comap_ofReal) + _ = volume (ENNReal.toReal '' s) := + Eq.symm (measure_congr ENNReal.map_toReal_ae_eq_map_toReal_comap_ofReal) lemma NNReal.volume_eq_volume_ennreal {s : Set ℝ≥0} (hs : MeasurableSet (ofNNReal '' s)) : volume s = volume (ENNReal.ofNNReal '' s) := by @@ -227,7 +230,6 @@ lemma ENNReal.toReal_Icc_eq_Icc {a b : ℝ≥0∞} (ha : a ≠ ∞) (hb : b ≠ rw [← hxy] constructor <;> gcongr · exact ne_top_of_le_ne_top hb hy₂ - · assumption · rintro hx use ENNReal.ofReal x constructor @@ -245,7 +247,6 @@ lemma ENNReal.toReal_Ioo_eq_Ioo {a b : ℝ≥0∞} (ha : a ≠ ∞) (hb : b ≠ rw [← hyx] constructor <;> gcongr · finiteness - · assumption · rintro hx use ENNReal.ofReal x constructor @@ -280,7 +281,7 @@ lemma ENNReal.toReal_Ioi_eq_Ioi {a : ℝ≥0∞} (ha : a ≠ ∞) : rw [← hyx, h, ENNReal.toReal_top] right rw [← hyx] - gcongr; assumption + gcongr · rintro (x_zero | hxa) · exact ⟨⊤, by finiteness, by simp [x_zero]⟩ use ENNReal.ofReal x @@ -355,7 +356,8 @@ lemma ENNReal.volume_Ioo {a b : ℝ≥0∞} (ha : a ≠ ∞) : · have : ⊤ - ⊤ = (0 : ENNReal) := by simp only [tsub_self] rw [hb, ENNReal.top_sub ha, ENNReal.toReal_Ioo_top_eq_Ioi ha] apply Real.volume_Ioi - rw [toReal_Ioo_eq_Ioo ha hb, Real.volume_Ioo, ofReal_sub _ (by simp), ofReal_toReal hb, ofReal_toReal ha] + rw [toReal_Ioo_eq_Ioo ha hb, Real.volume_Ioo, ofReal_sub _ (by simp), ofReal_toReal hb, + ofReal_toReal ha] -- sanity check: this measure is what you expect example : volume (Set.Icc (3 : ℝ≥0∞) 42) = 39 := by @@ -382,7 +384,7 @@ instance : Measure.IsOpenPosMeasure (@volume ℝ≥0 _) where rw [NNReal.volume_Ioo] simpa -instance : NoAtoms (@volume ℝ≥0∞ _) where +instance : NullSingletonClass (@volume ℝ≥0∞ _) where measure_singleton := by intro x rw [ENNReal.volume_val (measurableSet_singleton _), image_singleton] @@ -390,8 +392,9 @@ instance : NoAtoms (@volume ℝ≥0∞ _) where -- TODO: move this general result to an appropriate place -- TODO: maybe generalize further to general measures restricted to a subtype -lemma Measure.Subtype.noAtoms {δ : Type*} [MeasureSpace δ] [NoAtoms (volume : Measure δ)] {p : δ → Prop} (hp : MeasurableSet p) : - NoAtoms (Measure.Subtype.measureSpace.volume : Measure (Subtype p)) where +lemma Measure.Subtype.noAtoms {δ : Type*} [MeasureSpace δ] + [NullSingletonClass (volume : Measure δ)] {p : δ → Prop} (hp : MeasurableSet p) : + NullSingletonClass (Measure.Subtype.measureSpace.volume : Measure (Subtype p)) where measure_singleton := by intro x calc _ @@ -400,11 +403,12 @@ lemma Measure.Subtype.noAtoms {δ : Type*} [MeasureSpace δ] [NoAtoms (volume : _ = 0 := by simp -instance : NoAtoms (@volume ℝ≥0 _) := Measure.Subtype.noAtoms measurableSet_Ici +instance : NullSingletonClass (@volume ℝ≥0 _) := Measure.Subtype.noAtoms measurableSet_Ici --TODO: move this general result to an appropriate place --TODO: maybe generalize further to general measures restricted to a subtype -lemma Measure.Subtype.sigmaFinite {δ : Type*} [MeasureSpace δ] [sf : SigmaFinite (@volume δ _)] {p : δ → Prop} (hp : MeasurableSet p) : +lemma Measure.Subtype.sigmaFinite {δ : Type*} [MeasureSpace δ] + [sf : SigmaFinite (@volume δ _)] {p : δ → Prop} (hp : MeasurableSet p) : SigmaFinite (Measure.Subtype.measureSpace.volume : Measure (Subtype p)) where out' := by refine Nonempty.intro ?_ @@ -431,11 +435,12 @@ lemma Measure.Subtype.sigmaFinite {δ : Type*} [MeasureSpace δ] [sf : SigmaFini instance : SigmaFinite (@volume ℝ≥0 _) := Measure.Subtype.sigmaFinite measurableSet_Ici -lemma lintegral_nnreal_eq_lintegral_Ici_ofReal {f : ℝ≥0 → ℝ≥0∞} : ∫⁻ x : ℝ≥0, f x = ∫⁻ x in Ici (0 : ℝ), f x.toNNReal := by +lemma lintegral_nnreal_eq_lintegral_Ici_ofReal {f : ℝ≥0 → ℝ≥0∞} : + ∫⁻ x : ℝ≥0, f x = ∫⁻ x in Ici (0 : ℝ), f x.toNNReal := by change ∫⁻ (x : ℝ≥0), f x = ∫⁻ (x : ℝ) in Ici 0, (f ∘ Real.toNNReal) x rw [← lintegral_subtype_comap measurableSet_Ici] - simp - rfl + change ∫⁻ x : ℝ≥0, f x = ∫⁻ x : ℝ≥0, f (x : ℝ).toNNReal + simp only [Real.toNNReal_coe] lemma lintegral_nnreal_Ici_eq_lintegral_Ici_ofReal {f : ℝ≥0 → ℝ≥0∞} {a : ℝ≥0} : ∫⁻ x in Ici a, f x = ∫⁻ x in Ici (a : ℝ), f x.toNNReal := by @@ -446,7 +451,8 @@ lemma lintegral_nnreal_Ici_eq_lintegral_Ici_ofReal {f : ℝ≥0 → ℝ≥0∞} apply setLIntegral_congr rw [NNReal.Ici_eq] -lemma lintegral_nnreal_eq_lintegral_Ioi_ofReal {f : ℝ≥0∞ → ℝ≥0∞} : ∫⁻ x : ℝ≥0, f x = ∫⁻ x in Ioi (0 : ℝ), f (.ofReal x) := by +lemma lintegral_nnreal_eq_lintegral_Ioi_ofReal {f : ℝ≥0∞ → ℝ≥0∞} : + ∫⁻ x : ℝ≥0, f x = ∫⁻ x in Ioi (0 : ℝ), f (.ofReal x) := by rw [lintegral_nnreal_eq_lintegral_Ici_ofReal] exact setLIntegral_congr Ioi_ae_eq_Ici.symm @@ -500,7 +506,8 @@ lemma lintegral_nnreal_scale_constant' {f : ℝ≥0 → ℝ≥0∞} {a : ℝ≥0 a * ∫⁻ x : ℝ≥0, f (a*x) = ∫⁻ x, f x := by rw [lintegral_nnreal_eq_lintegral_toNNReal_Ioi, lintegral_nnreal_eq_lintegral_toNNReal_Ioi] symm - rw [← lintegral_scale_constant_halfspace' (a:=a) (by rw [NNReal.coe_pos, pos_iff_ne_zero]; exact h)] + rw [← lintegral_scale_constant_halfspace' (a := a) + (by rw [NNReal.coe_pos, pos_iff_ne_zero]; exact h)] congr 1 · simp apply setLIntegral_congr_fun measurableSet_Ioi diff --git a/Carleson/ToMathlib/Misc.lean b/Carleson/ToMathlib/Misc.lean index a58676b..75f2ec6 100644 --- a/Carleson/ToMathlib/Misc.lean +++ b/Carleson/ToMathlib/Misc.lean @@ -4,7 +4,7 @@ import Mathlib.Analysis.SpecialFunctions.Trigonometric.Bounds import Mathlib.MeasureTheory.Integral.Average import Mathlib.MeasureTheory.Measure.Haar.OfBasis -/- +/-! * This file can import all ToMathlib files. * If adding more than a few results, please put them in a more appropriate file in ToMathlib. @@ -130,21 +130,19 @@ end support end Function namespace MeasureTheory - -set_option linter.style.refine false in variable {α : Type*} {β : Type*} {s : Set α} {f g : α → β} {m : MeasurableSpace α} {mβ : MeasurableSpace β} {μ : Measure α} in -@[measurability, fun_prop] +@[fun_prop] protected theorem _root_.AEMeasurable.piecewise {d : DecidablePred (· ∈ s)} (hs : MeasurableSet s) (hf : AEMeasurable f μ) (hg : AEMeasurable g μ) : AEMeasurable (piecewise s f g) μ := by - refine' ⟨_, hf.measurable_mk.piecewise hs hg.measurable_mk, ?_⟩ - · assumption + refine ⟨s.piecewise (hf.mk f) (hg.mk g), hf.measurable_mk.piecewise hs hg.measurable_mk, + ?_⟩ filter_upwards [hf.ae_eq_mk, hg.ae_eq_mk] with x hfx hgx simp_rw [Set.piecewise, ← hfx, ← hgx] variable {α : Type*} {β : Type*} {p : α → Prop} {f g : α → β} {m : MeasurableSpace α} {mβ : MeasurableSpace β} {μ : Measure α} in -@[measurability, fun_prop] +@[fun_prop] protected theorem _root_.AEMeasurable.ite {d : DecidablePred p} (hp : MeasurableSet {a | p a}) (hf : AEMeasurable f μ) (hg : AEMeasurable g μ) : AEMeasurable (fun x => ite (p x) (f x) (g x)) μ := @@ -253,7 +251,7 @@ theorem eLpNormEssSup_lt_top_of_ae_ennnorm_bound {f : α → F} {C : ℝ≥0∞} (hfC : ∀ᵐ x ∂μ, ‖f x‖₊ ≤ C) : eLpNormEssSup f μ ≤ C := essSup_le_of_ae_le C hfC theorem restrict_absolutelyContinuous : μ.restrict s ≪ μ := - fun s hs ↦ Measure.restrict_le_self s |>.trans hs.le |>.antisymm <| zero_le _ + fun s hs ↦ Measure.restrict_le_self s |>.trans hs.le |>.antisymm <| zero_le section eLpNorm @@ -290,7 +288,12 @@ lemma eLpNorm'_toReal_eq {f : α → ℝ≥0∞} {p : ℝ} (hf : ∀ᵐ x ∂μ, lemma eLpNorm_toReal_le {f : α → ℝ≥0∞} : eLpNorm (ENNReal.toReal ∘ f) p μ ≤ eLpNorm f p μ := by - simp_rw [eLpNorm] + by_cases hmeas : AEStronglyMeasurable f μ + swap + · simp [eLpNorm_of_not_aestronglyMeasurable hmeas] + have hreal : AEStronglyMeasurable (ENNReal.toReal ∘ f) μ := hmeas.ennreal_toReal + rw [eLpNorm_eq_eLpNormFormula hreal, eLpNorm_eq_eLpNormFormula hmeas] + simp_rw [eLpNormFormula] split_ifs · rfl · exact eLpNormEssSup_toReal_le @@ -298,15 +301,31 @@ lemma eLpNorm_toReal_le {f : α → ℝ≥0∞} : lemma eLpNorm_toReal_eq {f : α → ℝ≥0∞} (hf : ∀ᵐ x ∂μ, f x ≠ ∞) : eLpNorm (ENNReal.toReal ∘ f) p μ = eLpNorm f p μ := by - simp_rw [eLpNorm] + have hmeas : AEStronglyMeasurable (ENNReal.toReal ∘ f) μ ↔ + AEStronglyMeasurable f μ := by + refine ⟨fun hreal ↦ ?_, fun hfun ↦ hfun.ennreal_toReal⟩ + apply hreal.aemeasurable.ennreal_ofReal.aestronglyMeasurable.congr + filter_upwards [hf] with point hpoint + simp [ENNReal.ofReal_toReal hpoint] + by_cases hfun : AEStronglyMeasurable f μ + swap + · simp [eLpNorm, hfun, hmeas] + rw [eLpNorm_eq_eLpNormFormula (hmeas.mpr hfun), eLpNorm_eq_eLpNormFormula hfun] + simp_rw [eLpNormFormula] split_ifs · rfl · exact eLpNormEssSup_toReal_eq hf · exact eLpNorm'_toReal_eq hf -lemma sq_eLpNorm_two {ε : Type*} [ENorm ε] {f : α → ε} : +lemma sq_eLpNormFormula_two {ε : Type*} [ENorm ε] {f : α → ε} : + eLpNormFormula f 2 μ ^ 2 = ∫⁻ x, ‖f x‖ₑ ^ 2 ∂μ := by + simpa [eLpNormFormula] using + (lintegral_rpow_enorm_eq_rpow_eLpNorm' (f := f) (μ := μ) (by norm_num : (0 : ℝ) < 2)).symm + +lemma sq_eLpNorm_two {ε : Type*} [TopologicalSpace ε] [ENorm ε] {f : α → ε} + (hf : AEStronglyMeasurable f μ) : eLpNorm f 2 μ ^ 2 = ∫⁻ x, ‖f x‖ₑ ^ 2 ∂μ := by - simpa using eLpNorm_nnreal_pow_eq_lintegral (f := f) two_ne_zero + rw [eLpNorm_eq_eLpNormFormula hf, sq_eLpNormFormula_two] open ComplexConjugate in /-- One of the very few cases where a norm can be moved _out of_ an integral. -/ @@ -317,7 +336,7 @@ lemma eLpNorm_two_eq_enorm_integral_mul_conj {f : α → ℂ} (lpf : MemLp f 2 rw [integral_eq_lintegral_of_nonneg_ae (.of_forall fun _ ↦ by simp)]; swap · exact lpf.aestronglyMeasurable.norm.pow 2 conv_rhs => enter [1, 1, 1, 2, x]; rw [ENNReal.ofReal_pow (norm_nonneg _), ofReal_norm] - rw [← sq_eLpNorm_two, ← enorm_norm] + rw [← sq_eLpNorm_two lpf.aestronglyMeasurable, ← enorm_norm] simp_rw [Complex.coe_algebraMap, Complex.norm_real, enorm_norm] rw [toReal_pow, enorm_pow, enorm_toReal lpf.eLpNorm_ne_top] @@ -327,8 +346,7 @@ namespace MemLp variable {p : ℝ≥0∞} theorem toReal {f : α → ℝ≥0∞} (hf : MemLp f p μ) : MemLp (f · |>.toReal) p μ := - ⟨hf.aestronglyMeasurable.aemeasurable.ennreal_toReal.aestronglyMeasurable, - eLpNorm_toReal_le.trans_lt hf.eLpNorm_lt_top⟩ + eLpNorm_toReal_le.trans_lt hf.eLpNorm_lt_top end MemLp @@ -389,24 +407,24 @@ protected noncomputable def out (x : α) : α := if hx : x ∈ s then (Quotient.out (s := hr.setoid) ⟦⟨x, hx⟩⟧ : s) else x lemma out_mem (hx : x ∈ s) : hr.out x ∈ s := by - rw [EquivalenceOn.out, dif_pos hx] + rw [EquivalenceOn.out, dite_eq_left hx] apply Subtype.prop @[simp] lemma out_mem_iff : hr.out x ∈ s ↔ x ∈ s := by refine ⟨fun h ↦ ?_, out_mem⟩ by_contra hx - rw [EquivalenceOn.out, dif_neg hx] at h + rw [EquivalenceOn.out, dite_eq_right hx] at h exact hx h lemma out_rel (hx : x ∈ s) : r (hr.out x) x := by - rw [EquivalenceOn.out, dif_pos hx] + rw [EquivalenceOn.out, dite_eq_left hx] exact @Quotient.mk_out _ (hr.setoid) ⟨x, hx⟩ lemma rel_out (hx : x ∈ s) : r x (hr.out x) := hr.symm (out_mem hx) hx (out_rel hx) lemma out_inj (hx : x ∈ s) (hy : y ∈ s) (h : r x y) : hr.out x = hr.out y := by - simp_rw [EquivalenceOn.out, dif_pos hx, dif_pos hy] + simp_rw [EquivalenceOn.out, dite_eq_left hx, dite_eq_left hy] congr 1 simp_rw [Quotient.out_inj, Quotient.eq] exact h @@ -488,9 +506,10 @@ section Indicator open ComplexConjugate -attribute [gcongr] Set.indicator_le_indicator mulIndicator_le_mulIndicator_of_subset +attribute [gcongr only] Set.indicator_le_indicator mulIndicator_le_mulIndicator_of_subset -lemma indicator_eq_indicator' {α : Type*} {M : Type*} [Zero M] {s : Set α} {f g : α → M} (h : ∀ x ∈ s, f x = g x) : +lemma indicator_eq_indicator' {α : Type*} {M : Type*} [Zero M] {s : Set α} {f g : α → M} + (h : ∀ x ∈ s, f x = g x) : s.indicator f = s.indicator g := by ext x unfold indicator @@ -669,16 +688,16 @@ theorem setIntegral_biUnion_le_sum_setIntegral {X : Type*} {ι : Type*} [Measura have meas : MeasurableSet {x | 0 ≤ g x} := have : {x | 0 ≤ g x} = g ⁻¹' (Ici 0) := by simp [preimage, mem_Ici] this ▸ (AEMeasurable.measurable_mk int_f.aemeasurable) measurableSet_Ici - rw [← integral_finset_sum_measure int_g] + rw [← integral_finsetSum_measure int_g] set μ₀ : ι → Measure X := fun i ↦ ite (i ∈ s) (μ.restrict (S i)) 0 - refine integral_mono_measure ?_ ?_ (integrable_finset_sum_measure.mpr int_g) + refine integral_mono_measure ?_ ?_ (integrable_finsetSum_measure.mpr int_g) · refine Measure.le_iff.mpr (fun T hT ↦ ?_) - simp_rw [μ.restrict_apply hT, Measure.coe_finset_sum, s.sum_apply, inter_iUnion] + simp_rw [μ.restrict_apply hT, Measure.coe_finsetSum, s.sum_apply, inter_iUnion] apply le_trans <| measure_biUnion_finset_le s (T ∩ S ·) exact s.sum_le_sum (fun _ _ ↦ ge_of_eq (μ.restrict_apply hT)) · have : ∑ i ∈ s, μ.restrict (S i) = Measure.sum μ₀ := by ext T hT - simp only [Measure.sum_apply (hs := hT), Measure.coe_finset_sum, s.sum_apply, μ₀] + simp only [Measure.sum_apply (hs := hT), Measure.coe_finsetSum, s.sum_apply, μ₀] rw [tsum_eq_sum (s := s) (fun b hb ↦ by simp [hb])] exact Finset.sum_congr rfl (fun i hi ↦ by simp [hi]) rw [Filter.EventuallyLE, this, Measure.ae_sum_iff' (by exact meas)] @@ -689,7 +708,7 @@ theorem setIntegral_biUnion_le_sum_setIntegral {X : Type*} {ι : Type*} [Measura · simp [hi, μ₀] -- Analogous to `MeasureTheory.integral_smul_const` in Mathlib -theorem average_smul_const {X : Type*} {E : Type*} [MeasurableSpace X] +theorem average_smul_const_carleson {X : Type*} {E : Type*} [MeasurableSpace X] {μ : MeasureTheory.Measure X} [NormedAddCommGroup E] [NormedSpace ℝ E] {𝕜 : Type*} [RCLike 𝕜] [NormedSpace 𝕜 E] [CompleteSpace E] (f : X → 𝕜) (c : E) : ⨍ (x : X), f x • c ∂μ = (⨍ (x : X), f x ∂μ) • c := @@ -770,12 +789,12 @@ lemma Finset.pow_sum_comm {ι R : Type*} [Semiring R] {s : Finset ι} {f : ι namespace MeasureTheory -lemma sum_sq_eLpNorm_indicator_le_of_pairwiseDisjoint +lemma sum_sq_eLpNormFormula_indicator_le_of_pairwiseDisjoint {α ι F : Type*} [MeasurableSpace α] [NormedAddCommGroup F] {μ : Measure α} {s : Finset ι} {f : α → F} {t : ι → Set α} (meast : ∀ i, MeasurableSet (t i)) (hpd : PairwiseDisjoint s t) : - ∑ i ∈ s, eLpNorm ((t i).indicator f) 2 μ ^ 2 ≤ eLpNorm f 2 μ ^ 2 := by - simp_rw [sq_eLpNorm_two] + ∑ i ∈ s, eLpNormFormula ((t i).indicator f) 2 μ ^ 2 ≤ eLpNormFormula f 2 μ ^ 2 := by + simp_rw [sq_eLpNormFormula_two] conv_lhs => enter [2, i, 2, x] rw [enorm_indicator_eq_indicator_enorm, sq, ← inter_indicator_mul, inter_self] @@ -784,13 +803,24 @@ lemma sum_sq_eLpNorm_indicator_le_of_pairwiseDisjoint rw [← lintegral_biUnion_finset hpd fun _ _ ↦ meast _] exact setLIntegral_le_lintegral _ _ +lemma sum_sq_eLpNorm_indicator_le_of_pairwiseDisjoint + {α ι F : Type*} [MeasurableSpace α] [NormedAddCommGroup F] {μ : Measure α} + {s : Finset ι} {f : α → F} {t : ι → Set α} (meast : ∀ i, MeasurableSet (t i)) + (hpd : PairwiseDisjoint s t) : + ∑ i ∈ s, eLpNorm ((t i).indicator f) 2 μ ^ 2 ≤ eLpNorm f 2 μ ^ 2 := by + by_cases hf : AEStronglyMeasurable f μ + · simp_rw [eLpNorm_eq_eLpNormFormula (hf.indicator (meast _)), + eLpNorm_eq_eLpNormFormula hf] + exact sum_sq_eLpNormFormula_indicator_le_of_pairwiseDisjoint meast hpd + · simp [eLpNorm_of_not_aestronglyMeasurable hf] + theorem measurable_measure_ball {α : Type*} [PseudoMetricSpace α] [SecondCountableTopology α] [MeasurableSpace α] [OpensMeasurableSpace α] {μ : Measure α} [SFinite μ] : Measurable fun (a, r) ↦ μ (Metric.ball a r) := by - let s : Set (α × α × ℝ) := setOf fun (b, a, r) ↦ b ∈ Metric.ball a r + let s : Set (α × α × ℝ) := {point | point.1 ∈ Metric.ball point.2.1 point.2.2} apply measurable_measure_prodMk_right (s := s) unfold s Metric.ball - simp_rw [mem_setOf] + simp_rw [mem_ofPred] apply measurableSet_lt · fun_prop · fun_prop diff --git a/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Basic.lean b/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Basic.lean index 28c0164..1e50b97 100644 --- a/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Basic.lean +++ b/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Basic.lean @@ -1,6 +1,8 @@ import Mathlib.Order.ConditionallyCompleteLattice.Basic import Mathlib.Order.ConditionallyCompleteLattice.Indexed +/-! # Comparison of conditionally complete suprema -/ + -- Upstreaming status: under active development by @ldiedering -- Wait for the file to stabilise first. @@ -57,7 +59,8 @@ theorem ciSup_eq_ciSup {α : Type*} {ι ι' : Sort*} [ConditionallyCompleteLinea rw [iSup_of_empty', iSup_of_empty'] @[simp] -theorem WithTop.iSup_coe_eq_top' {α : Type*} [ConditionallyCompleteLinearOrderBot α] [NoTopOrder α] : +theorem WithTop.iSup_coe_eq_top' {α : Type*} [ConditionallyCompleteLinearOrderBot α] + [NoTopOrder α] : ⨆ (i : α), ↑i = (⊤ : WithTop α) := by rw [WithTop.iSup_coe_eq_top] simp diff --git a/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Indexed.lean b/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Indexed.lean index fdec970..6d9b0cf 100644 --- a/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Indexed.lean +++ b/Carleson/ToMathlib/Order/ConditionallyCompleteLattice/Indexed.lean @@ -1,16 +1,6 @@ import Mathlib.Order.ConditionallyCompleteLattice.Indexed -section ConditionallyCompleteLinearOrderBot +/-! # Indexed suprema in conditionally complete lattices -variable {α : Type*} {ι : Sort*} {κ : ι → Sort*} -variable [ConditionallyCompleteLinearOrderBot α] {a : α} - -theorem ciSup₂_le' {f : ∀ i, κ i → α} (h : ∀ i j, f i j ≤ a) : ⨆ (i) (j), f i j ≤ a := - ciSup_le' fun i => ciSup_le' <| h i - -theorem exists_lt_of_lt_ciSup₂' {f : ∀ i, κ i → α} (h : a < ⨆ (i) (j), f i j) : - ∃ i j, a < f i j := by - contrapose! h - exact ciSup₂_le' h - -end ConditionallyCompleteLinearOrderBot +The bounds `ciSup₂_le'` and `exists_lt_of_lt_ciSup₂'` are supplied by Mathlib. +-/ diff --git a/Carleson/ToMathlib/RealInterpolation/InterpolatedExponents.lean b/Carleson/ToMathlib/RealInterpolation/InterpolatedExponents.lean index 9f25cc1..5f8bbb2 100644 --- a/Carleson/ToMathlib/RealInterpolation/InterpolatedExponents.lean +++ b/Carleson/ToMathlib/RealInterpolation/InterpolatedExponents.lean @@ -77,7 +77,7 @@ lemma ne_top_of_Ioc {p q r : ℝ≥0∞} (hq : q ∈ Ioc p r) (hr : r < ⊤) : q hq.2.trans_lt hr |>.ne_top lemma pos_of_rb_Ioc {p q r : ℝ≥0∞} (hr : q ∈ Ioc p r) : 0 < r := - zero_le p |>.trans_lt hr.1 |>.trans_le hr.2 + zero_le.trans_lt hr.1 |>.trans_le hr.2 lemma pos_of_Ioo {p q r : ℝ≥0∞} (hq : q ∈ Ioo p r) : 0 < q := pos_of_gt hq.1 @@ -113,8 +113,8 @@ lemma preservation_positivity₀ (ht : t ∈ Ioo 0 1) (hpq : p ≠ ⊤ ∨ q ≠ 0 < (1 - t) * p⁻¹ + t * q⁻¹ := by obtain dir|dir := hpq · exact Left.add_pos_of_pos_of_nonneg (mul_pos ((tsub_pos_of_lt ht.2).ne') - (ENNReal.inv_ne_zero.mpr dir)) (zero_le _) - · exact Right.add_pos_of_nonneg_of_pos (zero_le _) + (ENNReal.inv_ne_zero.mpr dir)) zero_le + · exact Right.add_pos_of_nonneg_of_pos zero_le <| ENNReal.mul_pos ht.1.ne' (ENNReal.inv_ne_zero.mpr dir) lemma preservation_positivity (ht : t ∈ Ioo 0 1) (hpq : p ≠ q) : @@ -156,7 +156,8 @@ lemma rpow_apply_coe' {x : ℝ≥0∞} {y : ℝ} (hx : x ≠ ⊤) : · rw [ENNReal.toNNReal_eq_zero_iff] simp [hx] -lemma rpow_lt_rpow_iff_neg {x y : ℝ≥0∞} (hx : x ≠ 0) (hy : y ≠ ∞) (hxy : x < y) {z : ℝ} (hz : z < 0) : +lemma rpow_lt_rpow_iff_neg {x y : ℝ≥0∞} (hx : x ≠ 0) (hy : y ≠ ∞) (hxy : x < y) + {z : ℝ} (hz : z < 0) : y ^ z < x ^ z := by rw [ENNReal.rpow_apply_coe' hy, ENNReal.rpow_apply_coe' hxy.ne_top] simpa [(pos_of_gt hxy).ne', hx] using @@ -216,12 +217,13 @@ lemma rpow_le_rpow_of_exponent_le_base_le {a b t γ : ℝ} (ht : 0 < t) (htγ : -- Note: this lemma is false if t = γ = ∞ and a < 0 ≤ b, as then t ^ a = ∞ ^ a = 0 and -- the statement becomes ∞ ≤ 0 * ∞ = 0. -lemma rpow_le_rpow_of_exponent_le_base_le_enorm {a b : ℝ} {t γ : ℝ≥0∞} (ht : 0 < t) (ht' : t ≠ ∞) (htγ : t ≤ γ) (hab : a ≤ b) : +lemma rpow_le_rpow_of_exponent_le_base_le_enorm {a b : ℝ} {t γ : ℝ≥0∞} + (ht : 0 < t) (ht' : t ≠ ∞) (htγ : t ≤ γ) (hab : a ≤ b) : t ^ b ≤ t ^ a * γ ^ (b - a) := by calc _ = t ^ (a + (b - a)) := by ring_nf _ = t ^ a * t ^ (b - a) := by rw [ENNReal.rpow_add _ _ ht.ne' ht'] - _ ≤ t ^ a * γ ^ (b - a) := by gcongr; linarith + _ ≤ t ^ a * γ ^ (b - a) := by gcongr -- TODO: there is a lot of overlap between above proof and below lemma rpow_le_rpow_of_exponent_le_base_ge {a b t γ : ℝ} (hγ : 0 < γ) (htγ : γ ≤ t) (hab : a ≤ b) : @@ -242,7 +244,8 @@ lemma rpow_le_rpow_of_exponent_le_base_ge {a b t γ : ℝ} (hγ : 0 < γ) (htγ rw [Real.rpow_mul, Real.rpow_neg_one, ← Real.mul_rpow, ← div_eq_mul_inv] <;> try positivity exact ofReal_le_ofReal (Real.rpow_le_rpow_of_exponent_le ((one_le_div hγ).mpr htγ) hab) -lemma rpow_le_rpow_of_exponent_le_base_ge_enorm {a b : ℝ} {t γ : ℝ≥0∞} (hγ : 0 < γ) (hγ' : γ ≠ ∞) (htγ : γ ≤ t) (hab : a ≤ b) : +lemma rpow_le_rpow_of_exponent_le_base_ge_enorm {a b : ℝ} {t γ : ℝ≥0∞} + (hγ : 0 < γ) (hγ' : γ ≠ ∞) (htγ : γ ≤ t) (hab : a ≤ b) : t ^ a ≤ (t ^ b) * (γ ^ (a - b)) := by by_cases ht' : t = ∞ · simp_all only [le_top, top_rpow_def, ite_mul, sub_zero, one_mul, zero_mul] @@ -254,7 +257,7 @@ lemma rpow_le_rpow_of_exponent_le_base_ge_enorm {a b : ℝ} {t γ : ℝ≥0∞} · simp_all · simpa using by order · rw [ENNReal.top_mul] - · exact zero_le ⊤ + · exact zero_le simp_all · positivity · simp @@ -318,7 +321,6 @@ lemma interp_exp_between (hp₀ : 0 < p₀) (hp₁ : 0 < p₁) gcongr · finiteness · exact ht.1.ne' - · exact ht' · rw [hp] have : p₁⁻¹ = (1 - t) * p₁⁻¹ + t * p₁⁻¹ := by rw [← add_mul, tsub_add_eq_max, max_eq_left_of_lt, one_mul] @@ -433,7 +435,8 @@ lemma ne_inv_toReal_exponents (hp₀ : 0 < p₀) (hp₁ : 0 < p₁) (hp₀p₁ : ← ofReal_toReal_eq_iff.mpr (inv_ne_top.mpr hp₁.ne')] exact congrArg ENNReal.ofReal h -lemma ne_inv_toReal_exp_interp_exp (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hp₁ : 0 < p₁) (hp₀p₁ : p₀ ≠ p₁) +lemma ne_inv_toReal_exp_interp_exp (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hp₁ : 0 < p₁) + (hp₀p₁ : p₀ ≠ p₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) : p₀⁻¹.toReal ≠ p⁻¹.toReal := by rw [preservation_interpolation ht hp₀ hp₁ hp, ← sub_ne_zero] convert mul_ne_zero (toReal_ne_zero_of_Ioo ht) @@ -461,7 +464,8 @@ lemma ne_toReal_exp_interp_exp (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hp₁ : lemma ne_toReal_exp_interp_exp₁ (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hp₁ : 0 < p₁) (hp₀p₁ : p₀ ≠ p₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) : p.toReal ≠ p₁.toReal := - (ne_toReal_exp_interp_exp (mem_sub_Ioo one_ne_top ht) hp₁ hp₀ hp₀p₁.symm (switch_exponents ht hp)).symm + (ne_toReal_exp_interp_exp (mem_sub_Ioo one_ne_top ht) hp₁ hp₀ hp₀p₁.symm + (switch_exponents ht hp)).symm lemma ofReal_inv_interp_sub_exp_pos₁ (ht : t ∈ Ioo 0 1) (hq₀ : 0 < q₀) (hq₁ : 0 < q₁) (hq₀q₁ : q₀ ≠ q₁) @@ -482,7 +486,8 @@ lemma exp_lt_iff (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hp₁ : 0 < p₁) (hp · exact ⟨fun h ↦ (not_le_of_gt h (le_of_lt (interp_exp_between hp₀ hp₁ p₀lt_p₁ ht hp).1)).elim, fun h ↦ (not_le_of_gt h p₀lt_p₁.le).elim⟩ · exact ⟨fun _ ↦ p₁lt_p₀, - fun _ ↦ (interp_exp_between hp₁ hp₀ p₁lt_p₀ (mem_sub_Ioo one_ne_top ht) (switch_exponents ht hp)).2⟩ + fun _ ↦ (interp_exp_between hp₁ hp₀ p₁lt_p₀ (mem_sub_Ioo one_ne_top ht) + (switch_exponents ht hp)).2⟩ lemma exp_gt_iff (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hp₁ : 0 < p₁) (hp₀p₁ : p₀ ≠ p₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) : @@ -568,21 +573,21 @@ lemma ζ_equality₂ (ht : t ∈ Ioo 0 1) : lemma ζ_symm (ht : t ∈ Ioo 0 1) : ζ p₀ q₀ p₁ q₁ t.toReal = ζ p₁ q₁ p₀ q₀ (1 - t).toReal := by unfold ζ - rw [← mul_div_mul_right (c := - 1), mul_assoc _ _ (-1), mul_assoc _ _ (-1)]; on_goal 2 => positivity + rw [← mul_div_mul_right (c := - 1), mul_assoc _ _ (-1), mul_assoc _ _ (-1)] + on_goal 2 => positivity simp only [mul_neg, mul_one, neg_sub] nth_rewrite 1 [add_comm]; nth_rw 2 [add_comm] rw [sub_toReal_of_le ht.2.le, sub_sub_toReal_of_le ht.2.le, sub_sub_toReal_of_le (mem_sub_Ioo (by finiteness) ht).2.le] - -set_option linter.style.multiGoal false in -set_option linter.flexible false in lemma ζ_equality₃ (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) (hp₁ : 0 < p₁) (hq₁ : 0 < q₁) (hp₀p₁ : p₀ ≠ p₁) (hq₀q₁ : q₀ ≠ q₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) (hq : q⁻¹ = (1 - t) * q₀⁻¹ + t * q₁⁻¹) (hp₀' : p₀ ≠ ⊤) (hq₀' : q₀ ≠ ⊤) : - ζ p₀ q₀ p₁ q₁ t.toReal = (p₀.toReal * (q₀.toReal - q.toReal)) / (q₀.toReal * (p₀.toReal - p.toReal)) := by - rw [ζ_equality₁ ht, ← preservation_interpolation, ← preservation_interpolation] + ζ p₀ q₀ p₁ q₁ t.toReal = (p₀.toReal * (q₀.toReal - q.toReal)) / + (q₀.toReal * (p₀.toReal - p.toReal)) := by + rw [ζ_equality₁ ht, ← preservation_interpolation ht hp₀ hp₁ hp, + ← preservation_interpolation ht hq₀ hq₁ hq] have q_pos : 0 < q := interpolated_pos' hq₀ hq₁ (ne_top_of_Ioo ht) hq have p_pos : 0 < p := interpolated_pos' hp₀ hp₁ (ne_top_of_Ioo ht) hp have aux := mul_pos (interp_exp_toReal_pos ht hp₀ hp₁ hp₀p₁ hp) @@ -600,12 +605,10 @@ lemma ζ_equality₃ (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) (p₀⁻¹.toReal * p₀.toReal) * p.toReal) := by ring rw [eq₁, eq₂, ← @toReal_mul q⁻¹ q, ← @toReal_mul p⁻¹ p, ← @toReal_mul p₀⁻¹ p₀, ← @toReal_mul q₀⁻¹ q₀] - all_goals try assumption - -- TODO: why can below goals not be discharged? - repeat rw [ENNReal.inv_mul_cancel] <;> try positivity - all_goals simp <;> try assumption - · apply interp_exp_ne_top hq₀q₁ ht hq - · apply interp_exp_ne_top hp₀p₁ ht hp + rw [ENNReal.inv_mul_cancel q_pos.ne' (interp_exp_ne_top hq₀q₁ ht hq), + ENNReal.inv_mul_cancel p_pos.ne' (interp_exp_ne_top hp₀p₁ ht hp), + ENNReal.inv_mul_cancel hp₀.ne' hp₀', ENNReal.inv_mul_cancel hq₀.ne' hq₀'] + simp lemma ζ_equality₄ (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) (hp₁ : 0 < p₁) (hq₁ : 0 < q₁) (hp₀p₁ : p₀ ≠ p₁) (hq₀q₁ : q₀ ≠ q₁) @@ -620,12 +623,14 @@ lemma ζ_equality₄ (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) · rw [hp, add_comm, ENNReal.sub_sub_cancel one_ne_top ht.2.le] · rw [hq, add_comm, ENNReal.sub_sub_cancel one_ne_top ht.2.le] -lemma ζ_equality₅ {t : ℝ≥0∞} (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) (hp₁ : 0 < p₁) (hq₁ : 0 < q₁) +lemma ζ_equality₅ {t : ℝ≥0∞} (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) + (hp₁ : 0 < p₁) (hq₁ : 0 < q₁) (hp₀p₁ : p₀ ≠ p₁) (hq₀q₁ : q₀ ≠ q₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) (hq : q⁻¹ = (1 - t) * q₀⁻¹ + t * q₁⁻¹) (hp₀' : p₀ ≠ ⊤) (hq₀' : q₀ ≠ ⊤) : - p₀.toReal + (ζ p₀ q₀ p₁ q₁ t.toReal)⁻¹ * (q.toReal - q₀.toReal) * (p₀.toReal / q₀.toReal) = p.toReal := by + p₀.toReal + (ζ p₀ q₀ p₁ q₁ t.toReal)⁻¹ * (q.toReal - q₀.toReal) * + (p₀.toReal / q₀.toReal) = p.toReal := by rw [ζ_equality₃ ht] <;> try assumption simp only [inv_div] rw [div_eq_mul_inv, div_eq_mul_inv, mul_inv] @@ -639,12 +644,14 @@ lemma ζ_equality₅ {t : ℝ≥0∞} (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (h · exact (exp_toReal_pos hp₀ hp₀').ne' · exact (exp_toReal_pos hq₀ hq₀').ne' -lemma ζ_equality₆ {t : ℝ≥0∞} (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) (hp₁ : 0 < p₁) (hq₁ : 0 < q₁) +lemma ζ_equality₆ {t : ℝ≥0∞} (ht : t ∈ Ioo 0 1) (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) + (hp₁ : 0 < p₁) (hq₁ : 0 < q₁) (hp₀p₁ : p₀ ≠ p₁) (hq₀q₁ : q₀ ≠ q₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) (hq : q⁻¹ = (1 - t) * q₀⁻¹ + t * q₁⁻¹) (hp₁' : p₁ ≠ ⊤) (hq₁' : q₁ ≠ ⊤) : - p₁.toReal + (ζ p₀ q₀ p₁ q₁ t.toReal)⁻¹ * (q.toReal - q₁.toReal) * (p₁.toReal / q₁.toReal) = p.toReal := by + p₁.toReal + (ζ p₀ q₀ p₁ q₁ t.toReal)⁻¹ * (q.toReal - q₁.toReal) * + (p₁.toReal / q₁.toReal) = p.toReal := by rw [ζ_symm ht] apply ζ_equality₅ (mem_sub_Ioo one_ne_top ht) hp₁ hq₁ hp₀ hq₀ hp₀p₁.symm hq₀q₁.symm _ _ hp₁' hq₁' · rw [add_comm, one_sub_one_sub_eq ht]; apply hp @@ -1010,9 +1017,11 @@ lemma eq_exponents₂ (ht : t ∈ Ioo 0 1) (hq₀ : 0 < q₀) (hq₁ : 0 < q₁) lemma eq_exponents₁ (ht : t ∈ Ioo 0 1) (hq₀ : 0 < q₀) (hq₁ : 0 < q₁) (hq₀q₁ : q₀ ≠ q₁) (hq : q⁻¹ = (1 - t) * q₀⁻¹ + t * q₁⁻¹) (hq₀' : q₀ ≠ ⊤) : - (q₀⁻¹.toReal / (q₁⁻¹.toReal - q₀⁻¹.toReal)) * (q.toReal - q₀.toReal) = - t.toReal * q.toReal := by + (q₀⁻¹.toReal / (q₁⁻¹.toReal - q₀⁻¹.toReal)) * (q.toReal - q₀.toReal) = + - t.toReal * q.toReal := by rw [mul_comm_div, ← mul_div_assoc] - have : q₀⁻¹.toReal * (q.toReal - q₀.toReal) = - t.toReal * q.toReal * (q₁⁻¹.toReal - q₀⁻¹.toReal) := by + have : q₀⁻¹.toReal * (q.toReal - q₀.toReal) = + - t.toReal * q.toReal * (q₁⁻¹.toReal - q₀⁻¹.toReal) := by calc _ = (q₀⁻¹.toReal * q.toReal - q₀⁻¹.toReal * q₀.toReal) := by ring _ = (q₀⁻¹.toReal * q.toReal - 1) := by @@ -1052,7 +1061,8 @@ lemma eq_exponents₃ (ht : t ∈ Ioo 0 1) (hq₀ : 0 < q₀) (hq₁ : 0 < q₁) exact ne_sub_toReal_exp hq₀ hq₁ hq₀q₁ lemma eq_exponents₄ : - q₀⁻¹.toReal / (q₁⁻¹.toReal - q₀⁻¹.toReal) = - (q₀⁻¹.toReal / (q₀⁻¹.toReal - q₁⁻¹.toReal)) := calc + q₀⁻¹.toReal / (q₁⁻¹.toReal - q₀⁻¹.toReal) = + - (q₀⁻¹.toReal / (q₀⁻¹.toReal - q₁⁻¹.toReal)) := calc _ = - (q₀⁻¹.toReal * (-(q₁⁻¹.toReal - q₀⁻¹.toReal)⁻¹)) := by rw [div_eq_mul_inv]; ring _ = _ := by congr; rw [neg_inv, neg_sub] @@ -1066,7 +1076,8 @@ lemma eq_exponents₅ (ht : t ∈ Ioo 0 1) (hq₀ : 0 < q₀) (hq₁ : 0 < q₁) lemma eq_exponents₆ (ht : t ∈ Ioo 0 1) (hq₀ : 0 < q₀) (hq₁ : 0 < q₁) (hq₀q₁ : q₀ ≠ q₁) (hq : q⁻¹ = (1 - t) * q₀⁻¹ + t * q₁⁻¹) (hq₁' : q₁ ≠ ⊤) : - q₁⁻¹.toReal / (q₁⁻¹.toReal - q₀⁻¹.toReal) * (q.toReal - q₁.toReal) = (1 - t).toReal * q.toReal := by + q₁⁻¹.toReal / (q₁⁻¹.toReal - q₀⁻¹.toReal) * (q.toReal - q₁.toReal) = + (1 - t).toReal * q.toReal := by rw [← neg_neg (a := q₁⁻¹.toReal / (q₁⁻¹.toReal - q₀⁻¹.toReal)), ← eq_exponents₄, neg_mul, eq_exponents₁ (mem_sub_Ioo one_ne_top ht) hq₁ hq₀ hq₀q₁.symm (switch_exponents ht hq) hq₁', neg_mul, neg_neg] diff --git a/Carleson/ToMathlib/RealInterpolation/Main.lean b/Carleson/ToMathlib/RealInterpolation/Main.lean index 9bff6d4..3dce337 100644 --- a/Carleson/ToMathlib/RealInterpolation/Main.lean +++ b/Carleson/ToMathlib/RealInterpolation/Main.lean @@ -50,7 +50,8 @@ variable {α α' ε E E₁ E₂ E₃ : Type*} {m : MeasurableSpace α} {m' : Mea ## Definitions -/ namespace MeasureTheory -variable {ε₁ ε₂ : Type*} [TopologicalSpace ε₁] [ESeminormedAddMonoid ε₁] [TopologicalSpace ε₂] [ESeminormedAddMonoid ε₂] +variable {ε₁ ε₂ : Type*} [TopologicalSpace ε₁] [ESeminormedAddMonoid ε₁] + [TopologicalSpace ε₂] [ESeminormedAddMonoid ε₂] def Subadditive [ENorm ε] (T : (α → ε₁) → α' → ε) : Prop := ∃ A ≠ ⊤, ∀ (f g : α → ε₁) (x : α'), ‖T (f + g) x‖ₑ ≤ A * (‖T f x‖ₑ + ‖T g x‖ₑ) @@ -116,7 +117,8 @@ lemma biSup {ι : Type*} {𝓑 : Set ι} (h𝓑 : 𝓑.Countable) {T : ι → ( specialize h f hf g hg simp_rw [enorm_eq_self] at h ⊢ filter_upwards [hT f hf, hT g hg, (ae_ball_iff h𝓑).mpr h, (ae_ball_iff h𝓑).mpr (hT' f hf), - (ae_ball_iff h𝓑).mpr (hT' g hg), (ae_ball_iff h𝓑).mpr (hT' (f + g) (hP hf hg))] with x hTfx hTgx hx hT'fx hT'gx hT'fgx + (ae_ball_iff h𝓑).mpr (hT' g hg), (ae_ball_iff h𝓑).mpr (hT' (f + g) (hP hf hg))] + with x hTfx hTgx hx hT'fx hT'gx hT'fgx simp_rw [iSup_le_iff] intro i hi specialize hx i hi @@ -173,7 +175,8 @@ lemma biSup {ι : Type*} {𝓑 : Set ι} (h𝓑 : 𝓑.Countable) {T : ι → ( conv at hT' => enter [i]; rw [forall_comm] rw [forall_comm] at hT'; simp_rw [imp.swap, ← imp_forall_iff] at hT' filter_upwards [(ae_ball_iff h𝓑).mpr (fun i hi ↦ (h i hi).2 f c hf), - (ae_ball_iff h𝓑).mpr (hT' f hf), (ae_ball_iff h𝓑).mpr (hT' (c • f) (h_smul hf))] with x hx hT'fx hT'cfx + (ae_ball_iff h𝓑).mpr (hT' f hf), (ae_ball_iff h𝓑).mpr (hT' (c • f) (h_smul hf))] + with x hx hT'fx hT'cfx simp_rw [Pi.smul_apply, ENNReal.smul_iSup] refine biSup_congr (fun i hi ↦ ?_) specialize hx i hi @@ -272,7 +275,8 @@ variable {α α' E E₁ E₂ E₃ : Type*} {m : MeasurableSpace α} {m' : Measur -/ namespace MeasureTheory -variable {ε₁ ε₂ : Type*} [TopologicalSpace ε₁] [ESeminormedAddMonoid ε₁] [TopologicalSpace ε₂] [ESeminormedAddMonoid ε₂] +variable {ε₁ ε₂ : Type*} [TopologicalSpace ε₁] [ESeminormedAddMonoid ε₁] + [TopologicalSpace ε₂] [ESeminormedAddMonoid ε₂] /-- Proposition that expresses that the map `T` map between function spaces preserves AE strong measurability on L^p. -/ @@ -322,7 +326,8 @@ lemma rewrite_norm_func {q : ℝ} {g : α' → E} rw [ENNReal.ofReal_rpow_of_pos ha, ENNReal.ofReal_mul (by positivity)] lemma estimate_norm_rpow_range_operator {q : ℝ} {f : α → E₁} - [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] [TopologicalSpace E₂] [ESeminormedAddCommMonoid E₂] + [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] + [TopologicalSpace E₂] [ESeminormedAddCommMonoid E₂] (hq : 0 < q) (tc : StrictRangeToneCouple) {A : ℝ≥0} (hA : 0 < A) (ht : Subadditive_trunc T A f ν) (hTf : AEStronglyMeasurable (T f) ν) : ∫⁻ x : α', ‖T f x‖ₑ ^ q ∂ν ≤ @@ -336,8 +341,9 @@ lemma estimate_norm_rpow_range_operator {q : ℝ} {f : α → E₁} convert estimate_distribution_Subadditive_trunc (tc.ran_ton a ha).1 ht <;> simp -- TODO: the infrastructure can perhaps be improved here -@[measurability, fun_prop] -theorem ton_measurable_eLpNorm_trunc [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] (tc : ToneCouple) : +@[fun_prop] +theorem ton_measurable_eLpNorm_trunc [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] + (tc : ToneCouple) : Measurable (fun x ↦ eLpNorm (trunc f (tc.ton x)) p₁ μ) := by change Measurable ((fun t : ℝ≥0∞ ↦ eLpNorm (trunc f t) p₁ μ) ∘ (tc.ton)) have tone := tc.ton_is_ton @@ -405,7 +411,8 @@ lemma estimate_norm_rpow_range_operator' apply lintegral_congr_ae filter_upwards [ae_in_Ioo_zero_top] with s ⟨s_pos, s_lt_top⟩ have is_q₀top : ¬ q₀ < ⊤ := by assumption - rw [hq₀' (not_lt_top.mp is_q₀top) s s_pos, hq₁' (not_lt_top.mp is_q₁top) s s_pos, zero_mul, add_zero] + rw [hq₀' (not_lt_top.mp is_q₀top) s s_pos, hq₁' (not_lt_top.mp is_q₁top) s s_pos, + zero_mul, add_zero] lemma simplify_factor_rw_aux₀ (a b c d e f : ℝ≥0∞) : a * b * c * d * e * f = a * c * e * (b * d * f) := by ring @@ -561,7 +568,7 @@ def finite_spanning_sets_from_lintegrable {g : α → ℝ≥0∞} (hg : AEMeasur simp only [one_div] split_ifs with is_n_zero · simp [is_n_zero] at wn - · simp only [mem_setOf_eq] + · simp only [mem_ofPred_eq] refine inv_le_iff_inv_le.mpr ?_ apply le_of_lt refine lt_trans wn ?_ @@ -584,7 +591,7 @@ lemma support_sigma_finite_from_MemLp unfold Function.support g ext x simp only [ne_eq, ENNReal.rpow_eq_zero_iff, enorm_eq_zero, not_or, not_and, not_lt, - toReal_nonneg, implies_true, and_true, mem_setOf_eq] + toReal_nonneg, implies_true, and_true, mem_ofPred_eq] constructor · contrapose simp [Classical.not_imp, not_le, toReal_pos hp' hp] @@ -592,13 +599,11 @@ lemma support_sigma_finite_from_MemLp contradiction rw [← this] apply support_sigma_finite_of_lintegrable - · exact hf.1.enorm.pow_const _ + · exact hf.aestronglyMeasurable.enorm.pow_const _ · unfold g - have obs := hf.2 - unfold eLpNorm eLpNorm' at obs - split_ifs at obs - · contradiction - · exact lintegral_rpow_enorm_lt_top_of_eLpNorm'_lt_top (toReal_pos hp' hp) obs + apply lintegral_rpow_enorm_lt_top_of_eLpNorm'_lt_top (toReal_pos hp' hp) + rw [← eLpNorm_eq_eLpNorm' hp' hp hf.aestronglyMeasurable] + exact hf -- lemma support_sfinite_from_MemLp -- [MeasurableSpace E₁] [NormedAddCommGroup E₁] [BorelSpace E₁] (hf : MemLp f p μ) @@ -656,7 +661,8 @@ lemma combine_estimates₀ {A : ℝ≥0} (hA : 0 < A) eLpNorm (truncCompl f (tc.ton s)) p₀ μ ^ q₀.toReal * s ^ (q.toReal - q₀.toReal - 1))) := by gcongr - apply estimate_norm_rpow_range_operator' (p := p) (tc := tc) p₀pos q₀pos q₁pos <;> try assumption + apply estimate_norm_rpow_range_operator' (p := p) (tc := tc) p₀pos q₀pos q₁pos <;> + try assumption · exact (interp_exp_between p₀pos p₁pos hp₀p₁ ht hp).2 · exact (interp_exp_between p₀pos p₁pos hp₀p₁ ht hp).1 · intro q₀top s (hs : 0 < s) @@ -709,7 +715,7 @@ lemma combine_estimates₀ {A : ℝ≥0} (hA : 0 < A) · exact hp₁.2 · exact ne_top_of_Ioc hp₁ is_q₁top · exact is_q₁top.ne_top - · exact hf.1 + · exact hf.aestronglyMeasurable · rw [hspf]; rfl · simp · split_ifs with is_q₀top @@ -719,7 +725,7 @@ lemma combine_estimates₀ {A : ℝ≥0} (hA : 0 < A) · exact hp₀.2 · exact ne_top_of_Ioc hp₀ is_q₀top · exact is_q₀top.ne_top - · exact hf.1 + · exact hf.aestronglyMeasurable · rw [hspf]; rfl · simp _ = (if q₁ < ⊤ then 1 else 0) * @@ -784,8 +790,8 @@ lemma combine_estimates₁ {A : ℝ≥0} (hA : 0 < A) refine le_of_rpow_le q'pos ?_ calc _ = ∫⁻ x , ‖T f x‖ₑ ^ q.toReal ∂ν := by - unfold eLpNorm eLpNorm' - split_ifs <;> [contradiction; rw [one_div, ENNReal.rpow_inv_rpow q'pos.ne']] + rw [eLpNorm_eq_eLpNorm' q_ne_zero q_ne_top (h₂T hf), eLpNorm', one_div, + ENNReal.rpow_inv_rpow q'pos.ne'] _ ≤ _ := by apply combine_estimates₀ (hT := hT) (p := p) <;> try assumption _ = _ := by @@ -798,7 +804,8 @@ lemma combine_estimates₁ {A : ℝ≥0} (hA : 0 < A) exact ofReal_toReal_eq_iff.mpr q_ne_top · rw [toReal_inv, ENNReal.rpow_inv_rpow q'pos.ne'] -lemma simplify_factor₃ [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] (hp₀ : 0 < p₀) (hp₀' : p₀ ≠ ⊤) (ht : t ∈ Ioo 0 1) +lemma simplify_factor₃ [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] + (hp₀ : 0 < p₀) (hp₀' : p₀ ≠ ⊤) (ht : t ∈ Ioo 0 1) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) (hp₀p₁ : p₀ = p₁) : C₀ ^ q₀.toReal * (eLpNorm f p μ ^ p.toReal) ^ (q₀.toReal / p₀.toReal) = (↑C₀ * eLpNorm f p μ) ^ q₀.toReal := by @@ -811,9 +818,11 @@ lemma simplify_factor_aux₄ [TopologicalSpace E₁] [ESeminormedAddCommMonoid E (hp₀ : p₀ ∈ Ioc 0 q₀) (ht : t ∈ Ioo 0 1) (hp₀p₁ : p₀ = p₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) (hF : eLpNorm f p μ ∈ Ioo 0 ⊤) : - ↑C₀ ^ ((1 - t).toReal * q.toReal) * (eLpNorm f p μ ^ p.toReal) ^ ((1 - t).toReal * p₀⁻¹.toReal * q.toReal) * + ↑C₀ ^ ((1 - t).toReal * q.toReal) * + (eLpNorm f p μ ^ p.toReal) ^ ((1 - t).toReal * p₀⁻¹.toReal * q.toReal) * ↑C₁ ^ (t.toReal * q.toReal) * - (eLpNorm f p μ ^ p.toReal) ^ (t.toReal * p₁⁻¹.toReal * q.toReal) = C₀ ^ ((1 - t).toReal * q.toReal) * + (eLpNorm f p μ ^ p.toReal) ^ (t.toReal * p₁⁻¹.toReal * q.toReal) = + C₀ ^ ((1 - t).toReal * q.toReal) * C₁ ^ (t.toReal * q.toReal) * eLpNorm f p μ ^ q.toReal := by have hp' : p₀ = p := (interp_exp_eq hp₀p₁ ht hp) have p₀ne_top : p₀ ≠ ⊤ := ne_top_of_le_ne_top hq₀' hp₀.2 @@ -835,7 +844,8 @@ lemma simplify_factor_aux₄ [TopologicalSpace E₁] [ESeminormedAddCommMonoid E · exact hp' ▸ d_pos_aux₀ hF |>.ne' · exact hp' ▸ d_ne_top_aux₀ hF -lemma simplify_factor₄ {D : ℝ≥0∞} [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] (hq₀' : q₀ ≠ ⊤) +lemma simplify_factor₄ {D : ℝ≥0∞} [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] + (hq₀' : q₀ ≠ ⊤) (hp₀ : p₀ ∈ Ioc 0 q₀) (hp₁ : p₁ ∈ Ioc 0 q₁) (ht : t ∈ Ioo 0 1) (hp₀p₁ : p₀ = p₁) (hq₀q₁ : q₀ ≠ q₁) (hp : p⁻¹ = (1 - t) * p₀⁻¹ + t * p₁⁻¹) @@ -851,7 +861,8 @@ lemma simplify_factor₄ {D : ℝ≥0∞} [TopologicalSpace E₁] [ESeminormedAd rw [simplify_factor₀ (ht := ht) (hD := hD)] <;> assumption -lemma simplify_factor₅ {D : ℝ≥0∞} [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] (hq₁' : q₁ ≠ ⊤) +lemma simplify_factor₅ {D : ℝ≥0∞} [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] + (hq₁' : q₁ ≠ ⊤) (hp₀ : p₀ ∈ Ioc 0 q₀) (hp₁ : p₁ ∈ Ioc 0 q₁) (ht : t ∈ Ioo 0 1) (hp₀p₁ : p₀ = p₁) @@ -864,7 +875,8 @@ lemma simplify_factor₅ {D : ℝ≥0∞} [TopologicalSpace E₁] [ESeminormedAd C₀ ^ ((1 - t).toReal * q.toReal) * C₁ ^ (t.toReal * q.toReal) * eLpNorm f p μ ^ q.toReal := by have p₁pos : 0 < p₁ := hp₁.1 have p₁ne_top : p₁ ≠ ⊤ := ne_top_of_le_ne_top hq₁' hp₁.2 - rw [← simplify_factor₃ p₁pos p₁ne_top (mem_sub_Ioo one_ne_top ht) (switch_exponents ht hp) hp₀p₁.symm, + rw [← simplify_factor₃ p₁pos p₁ne_top (mem_sub_Ioo one_ne_top ht) + (switch_exponents ht hp) hp₀p₁.symm, simplify_factor₁ hq₁' hp₀ hp₁ ht hq₀q₁ hp hq hC₀ hC₁ hF hD] /-- The trivial case for the estimate in the real interpolation theorem @@ -876,7 +888,7 @@ lemma exists_hasStrongType_real_interpolation_aux₀ {p₀ p₁ q₀ q₁ p q : (hp : p⁻¹ = (1 - t) / p₀ + t / p₁) (hq : q⁻¹ = (1 - t) / q₀ + t / q₁) (h₀T : HasWeakType T p₀ q₀ μ ν C₀) - (h₂T : PreservesAEStrongMeasurability (μ := μ) (ν := ν) T p) (hf : MemLp f p μ) + (_h₂T : PreservesAEStrongMeasurability (μ := μ) (ν := ν) T p) (_hf : MemLp f p μ) (hF : eLpNorm f p μ = 0) : eLpNorm (T f) q ν = 0 := by unfold HasWeakType at h₀T @@ -884,14 +896,14 @@ lemma exists_hasStrongType_real_interpolation_aux₀ {p₀ p₁ q₀ q₁ p q : have q₀pos : 0 < q₀ := pos_of_rb_Ioc hp₀ have q₁pos : 0 < q₁ := pos_of_rb_Ioc hp₁ have q_pos : 0 < q := interpolated_pos' q₀pos q₁pos (ne_top_of_Ioo ht) hq - have f_ae_0 : f =ᵐ[μ] 0 := (eLpNorm_eq_zero_iff hf.1 p_pos.ne').mp hF - have hf₂ : eLpNorm f p₀ μ = 0 := (eLpNorm_eq_zero_iff hf.1 hp₀.1.ne').mpr f_ae_0 - have hf₁ : MemLp f p₀ μ := ⟨hf.1, by rw [hf₂]; exact zero_lt_top⟩ + have f_ae_0 : f =ᵐ[μ] 0 := (eLpNorm_eq_zero_iff p_pos.ne').mp hF + have hf₂ : eLpNorm f p₀ μ = 0 := (eLpNorm_eq_zero_iff hp₀.1.ne').mpr f_ae_0 + have hf₁ : MemLp f p₀ μ := by rw [MemLp, hf₂]; exact zero_lt_top have := (h₀T f hf₁).2 rw [hf₂, mul_zero] at this have wnorm_0 : wnorm (T f) q₀ ν = 0 := nonpos_iff_eq_zero.mp this have : (T f) =ᵐ[ν] 0 := (wnorm_eq_zero_iff q₀pos.ne').mp wnorm_0 - exact (eLpNorm_eq_zero_iff (h₂T hf) q_pos.ne').mpr this + exact (eLpNorm_eq_zero_iff q_pos.ne').mpr this /-- The estimate for the real interpolation theorem in case `p₀ < p₁`. -/ lemma exists_hasStrongType_real_interpolation_aux {p₀ p₁ q₀ q₁ p q : ℝ≥0∞} {A : ℝ≥0} @@ -913,9 +925,9 @@ lemma exists_hasStrongType_real_interpolation_aux {p₀ p₁ q₀ q₁ p q : ℝ have hq₀ : 0 < q₀ := pos_of_rb_Ioc hp₀ have hq₁ : 0 < q₁ := pos_of_rb_Ioc hp₁ rcases (eq_zero_or_pos (eLpNorm f p μ)) with hF | hF - · refine le_of_eq_of_le ?_ (zero_le _) + · refine le_of_eq_of_le ?_ zero_le apply exists_hasStrongType_real_interpolation_aux₀ (hp := hp) (hq := hq) <;> try assumption - · let spf := spf_ch (toReal_mem_Ioo ht) hq₀q₁ hp₀.1 hq₀ hp₁.1 hq₁ hp₀p₁.ne hC₀ hC₁ ⟨hF, hf.2⟩ + · let spf := spf_ch (toReal_mem_Ioo ht) hq₀q₁ hp₀.1 hq₀ hp₁.1 hq₁ hp₀p₁.ne hC₀ hC₁ ⟨hF, hf⟩ apply combine_estimates₁ <;> try assumption on_goal 1 => unfold spf rfl @@ -966,9 +978,11 @@ lemma exists_hasStrongType_real_interpolation_aux₁ {f : α → E₁} ENNReal.ofReal (t ^ (q.toReal - q₁.toReal - 1))) * if q₁ = ⊤ then 0 else 1)) ^ q.toReal⁻¹ = (ENNReal.ofReal q.toReal * - (↑C₀ ^ ((1 - t).toReal * q.toReal) * ↑C₁ ^ (t.toReal * q.toReal) * eLpNorm f p μ ^ q.toReal * + (↑C₀ ^ ((1 - t).toReal * q.toReal) * ↑C₁ ^ (t.toReal * q.toReal) * + eLpNorm f p μ ^ q.toReal * ENNReal.ofReal |q.toReal - q₀.toReal|⁻¹ * (if q₀ = ⊤ then 0 else 1) + - ↑C₀ ^ ((1 - t).toReal * q.toReal) * ↑C₁ ^ (t.toReal * q.toReal) * eLpNorm f p μ ^ q.toReal * + ↑C₀ ^ ((1 - t).toReal * q.toReal) * ↑C₁ ^ (t.toReal * q.toReal) * + eLpNorm f p μ ^ q.toReal * ENNReal.ofReal |q.toReal - q₁.toReal|⁻¹ * if q₁ = ⊤ then 0 else 1)) ^ q.toReal⁻¹ := by congr 3 @@ -976,9 +990,7 @@ lemma exists_hasStrongType_real_interpolation_aux₁ {f : α → E₁} div_eq_mul_inv, ← ofReal_inv_of_pos, ← ENNReal.ofReal_rpow_of_pos] <;> try positivity rw [← mul_assoc, simplify_factor₄ (ht := ht) (hC₁ := hC₁) (hq₀' := hq₀q₁.ne_top)] <;> try assumption - · rw [abs_of_pos] <;> linarith - · rw [abs_of_pos] <;> linarith - · linarith + linarith · split_ifs with is_q₁top · rw [mul_zero, mul_zero] · have q_lt_q₁toReal : q.toReal < q₁.toReal := @@ -1025,9 +1037,9 @@ lemma exists_hasStrongType_real_interpolation_aux₂ {f : α → E₁} (interp_exp_toReal_pos' ht q₀pos q₁pos hq (Or.inl hq₀q₁.ne_top)).ne' have p_eq_p₀ : p = p₀ := (interp_exp_eq hp₀p₁ ht hp).symm rcases (eq_zero_or_pos (eLpNorm f p μ)) with hF | snorm_pos - · refine le_of_eq_of_le ?_ (zero_le _) + · refine le_of_eq_of_le ?_ zero_le apply exists_hasStrongType_real_interpolation_aux₀ (hp := hp) (hq := hq) <;> try assumption - · have hF : eLpNorm f p μ ∈ Ioo 0 ⊤ := ⟨snorm_pos, hf.2⟩ + · have hF : eLpNorm f p μ ∈ Ioo 0 ⊤ := ⟨snorm_pos, hf⟩ have M_pos : 0 < M := toReal_pos (d_pos hC₀ hC₁ hF).ne' (d_ne_top hC₀ hC₁ hF) have coe_q : ENNReal.ofReal q.toReal = q := ofReal_toReal_eq_iff.mpr (interp_exp_ne_top hq₀q₁.ne ht hq) @@ -1036,10 +1048,13 @@ lemma exists_hasStrongType_real_interpolation_aux₂ {f : α → E₁} (interp_exp_toReal_pos ht q₀pos q₁pos hq₀q₁.ne hq)] calc (ENNReal.ofReal q.toReal * - ∫⁻ (t : ℝ) in Ioi 0, distribution (T f) (ENNReal.ofReal t) ν * ENNReal.ofReal (t ^ (q.toReal - 1))) ^ q.toReal⁻¹ + ∫⁻ (t : ℝ) in Ioi 0, distribution (T f) (ENNReal.ofReal t) ν * + ENNReal.ofReal (t ^ (q.toReal - 1))) ^ q.toReal⁻¹ ≤ (ENNReal.ofReal q.toReal * ( - (∫⁻ (t : ℝ) in Ioo 0 M, distribution (T f) (ENNReal.ofReal t) ν * ENNReal.ofReal (t ^ (q.toReal - 1))) + - (∫⁻ (t : ℝ) in Ici M, distribution (T f) (ENNReal.ofReal t) ν * ENNReal.ofReal (t ^ (q.toReal - 1)))) + (∫⁻ (t : ℝ) in Ioo 0 M, distribution (T f) (ENNReal.ofReal t) ν * + ENNReal.ofReal (t ^ (q.toReal - 1))) + + (∫⁻ (t : ℝ) in Ici M, distribution (T f) (ENNReal.ofReal t) ν * + ENNReal.ofReal (t ^ (q.toReal - 1)))) ) ^ q.toReal⁻¹ := by gcongr rw [← Ioo_union_Ici_eq_Ioi (M_pos)] @@ -1325,7 +1340,8 @@ lemma Subadditive_trunc_from_SubadditiveOn_Lp₀p₁ {p₀ p₁ p : ℝ≥0∞} apply hT · rcases lt_trichotomy p₀ p₁ with p₀lt_p₁ | (p₀eq_p₁ | p₁lt_p₀) · refine Or.inr (trunc_Lp_Lq_higher (p := p) ?_ hf ha) - exact ⟨interpolated_pos' hp₀ hp₁ (ne_top_of_Ioo ht) hp, (interp_exp_between hp₀ hp₁ p₀lt_p₁ ht hp).2.le⟩ + exact ⟨interpolated_pos' hp₀ hp₁ (ne_top_of_Ioo ht) hp, + (interp_exp_between hp₀ hp₁ p₀lt_p₁ ht hp).2.le⟩ · exact Or.inl <| interp_exp_eq p₀eq_p₁ ht hp ▸ hf.trunc · refine Or.inl (trunc_Lp_Lq_higher (p := p) ?_ hf ha) exact ⟨interpolated_pos' hp₀ hp₁ (ne_top_of_Ioo ht) hp, diff --git a/Carleson/ToMathlib/RealInterpolation/Minkowski.lean b/Carleson/ToMathlib/RealInterpolation/Minkowski.lean index 43184f4..632342e 100644 --- a/Carleson/ToMathlib/RealInterpolation/Minkowski.lean +++ b/Carleson/ToMathlib/RealInterpolation/Minkowski.lean @@ -42,8 +42,8 @@ lemma truncCut_mono {μ : Measure α} [SigmaFinite μ] {f : α → ℝ≥0∞} ( · exact min_le_min_left (f x) (Nat.cast_le.mpr hmn) · contrapose! is_fx_le_n exact monotone_spanningSets _ hmn is_fx_le_m - · exact zero_le _ - · exact zero_le _ + · exact zero_le + · exact zero_le lemma truncCut_mono₀ {μ : Measure α} [SigmaFinite μ] {f : α → ℝ≥0∞} : Monotone (truncCut f μ) := by @@ -57,7 +57,7 @@ lemma truncCut_sup {μ : Measure α} [SigmaFinite μ] {f : α → ℝ≥0∞} (x · intro n; unfold truncCut indicator split_ifs · exact min_le_left (f x) ↑n - · exact zero_le _ + · exact zero_le · intro w hw unfold truncCut have : ∃ m : ℕ, x ∈ spanningSets μ m := by @@ -77,8 +77,6 @@ lemma truncCut_sup {μ : Measure α} [SigmaFinite μ] {f : α → ℝ≥0∞} (x _ = _ := (Nat.cast_add m n).symm · contrapose! is_x_in_Ampn exact monotone_spanningSets _ (Nat.le_add_right m n) wm - -set_option linter.flexible false in /-- Characterization of `∫⁻ x : α, f x ^ p ∂μ` by a duality argument. -/ lemma representationLp {μ : Measure α} [SigmaFinite μ] {f : α → ℝ≥0∞} (hf : AEMeasurable f μ) {p q : ℝ} (hp : p > 1) (hq : q ≥ 1) @@ -140,7 +138,7 @@ lemma representationLp {μ : Measure α} [SigmaFinite μ] {f : α → ℝ≥0∞ intro n rcases eq_or_ne (∫⁻ x : α, (g n x) ^ p ∂μ) 0 with int_eq_zero | int_ne_zero · rw [int_eq_zero, ENNReal.zero_rpow_of_pos] - · exact zero_le _ + · exact zero_le · exact inv_pos_of_pos (by positivity) · calc _ = (∫⁻ x : α, (f x) * (g n x) ^ (p - 1) ∂μ) * ( @@ -173,7 +171,9 @@ lemma representationLp {μ : Measure α} [SigmaFinite μ] {f : α → ℝ≥0∞ apply Monotone.map_iSup_of_continuousAt (f := fun (x : ℝ≥0∞) ↦ x ^ (1 / p)) · fun_prop · apply ENNReal.monotone_rpow_of_nonneg (by positivity) - · simp; positivity + · simp only [bot_eq_zero', one_div, ENNReal.rpow_eq_zero_iff, inv_pos, true_and, + zero_ne_top, inv_neg'', false_and, or_false] + positivity let h := fun n : ℕ ↦ (fun x ↦ g n x ^ (p - 1) / (∫⁻ y : α, ((g n y) ^ (p - 1)) ^ q ∂μ) ^ q⁻¹) have comp_sup : (⨆ n : ℕ, ∫⁻ (x : α), f x * h n x ∂μ) ≤ ⨆ g ∈ {g' : α → ℝ≥0∞ | AEMeasurable g' μ ∧ ∫⁻ (z : α), (g' z) ^ q ∂μ ≤ 1}, @@ -250,9 +250,9 @@ lemma aemeasurability_prod₂ {α : Type u_1} {β : Type u_3} ∀ᵐ y : β ∂ν, AEMeasurable (f ∘ (fun x ↦ Prod.mk x y)) μ := by have : AEMeasurable (f ∘ Prod.swap) (ν.prod μ) := by refine AEMeasurable.comp_measurable ?_ measurable_swap - rw [Measure.prod_swap] - assumption + rwa [Measure.prod_swap] convert aemeasurability_prod₁ this -- perf: convert is faster than exact + rfl -- TODO: better name! @[fun_prop] @@ -324,7 +324,7 @@ lemma lintegral_lintegral_pow_swap_rpow {α : Type u_1} {β : Type u_3} {p : ℝ /-! ## Apply Minkowski's integral inequality to truncations -/ -@[measurability, fun_prop] +@[fun_prop] theorem aemeasurable_ton (tc : ToneCouple) : AEMeasurable tc.ton (volume.restrict (Ioi 0)) := by -- ton is either increasing or decreasing have tone := tc.ton_is_ton @@ -336,8 +336,10 @@ theorem aemeasurable_ton (tc : ToneCouple) : AEMeasurable tc.ton (volume.restric @[measurability] lemma indicator_ton_measurable {g : α → E₁} [MeasurableSpace E₁] [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] [BorelSpace E₁] + [SFinite μ] (hg : AEMeasurable g μ) (tc : ToneCouple) : - NullMeasurableSet {(s, x) : ℝ≥0∞ × α | ‖g x‖ₑ ≤ tc.ton s } ((volume.restrict (Ioi 0)).prod μ) := by + NullMeasurableSet {(s, x) : ℝ≥0∞ × α | ‖g x‖ₑ ≤ tc.ton s } + ((volume.restrict (Ioi 0)).prod μ) := by apply nullMeasurableSet_le hg.comp_snd.enorm apply AEMeasurable.comp_fst (f := fun a ↦ tc.ton a) refine AEMeasurable.comp_aemeasurable ?_ aemeasurable_id' @@ -347,7 +349,7 @@ lemma indicator_ton_measurable {g : α → E₁} [MeasurableSpace E₁] @[measurability] lemma indicator_ton_measurable_lt {g : α → E₁} [MeasurableSpace E₁] [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] - [BorelSpace E₁] (hg : AEMeasurable g μ) (tc : ToneCouple) : + [BorelSpace E₁] [SFinite μ] (hg : AEMeasurable g μ) (tc : ToneCouple) : NullMeasurableSet {(s, x) : ℝ≥0∞ × α | tc.ton s < ‖g x‖ₑ } ((volume.restrict (Ioi 0)).prod μ) := by refine nullMeasurableSet_lt ?_ hg.comp_snd.enorm @@ -355,9 +357,10 @@ lemma indicator_ton_measurable_lt {g : α → E₁} [MeasurableSpace E₁] refine AEMeasurable.comp_aemeasurable ?_ aemeasurable_id' simp only [Measure.map_id', aemeasurable_ton] -@[measurability, fun_prop] +@[fun_prop] lemma AEMeasurable.trunc_ton {f : α → E₁} [MeasurableSpace E₁] [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] [BorelSpace E₁] + [SFinite (μ.restrict f.support)] (hf : AEMeasurable f μ) (tc : ToneCouple) : AEMeasurable (fun a : ℝ≥0∞ × α ↦ (trunc f (tc.ton a.1)) a.2) ((volume.restrict (Ioi 0)).prod (μ.restrict f.support)) := by @@ -369,49 +372,54 @@ lemma AEMeasurable.trunc_ton {f : α → E₁} exact (aemeasurable_indicator_iff₀ (indicator_ton_measurable (AEMeasurable.restrict hf) _)).mpr hf.restrict.comp_snd.restrict -@[measurability, fun_prop] +@[fun_prop] lemma AEMeasurable.truncCompl_ton {f : α → E₁} [MeasurableSpace E₁] [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] [BorelSpace E₁] + [SFinite (μ.restrict f.support)] (hf : AEMeasurable f μ) (tc : ToneCouple) : AEMeasurable (fun a : ℝ≥0∞ × α ↦ ((truncCompl f (tc.ton a.1))) a.2) ((volume.restrict (Ioi 0)).prod (μ.restrict f.support )) := by let A := {(s, x) : ℝ≥0∞ × α | tc.ton s < ‖f x‖ₑ} - have : (fun z : ℝ≥0∞ × α ↦ (truncCompl f (tc.ton z.1)) z.2) = Set.indicator A (fun z : ℝ≥0∞ × α ↦ f z.2) := by + have : (fun z : ℝ≥0∞ × α ↦ (truncCompl f (tc.ton z.1)) z.2) = + Set.indicator A (fun z : ℝ≥0∞ × α ↦ f z.2) := by ext z; rw [truncCompl_eq]; simp [A, indicator] rw [this] exact (aemeasurable_indicator_iff₀ (indicator_ton_measurable_lt hf.restrict _)).mpr hf.restrict.comp_snd.restrict -- TODO: better name! -lemma restrict_to_support {p : ℝ} (hp : 0 < p) [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] (f : α → E₁) : +lemma restrict_to_support {p : ℝ} (hp : 0 < p) [TopologicalSpace E₁] + [ESeminormedAddCommMonoid E₁] (f : α → E₁) : ∫⁻ x : α in f.support, ‖trunc f t x‖ₑ ^ p ∂ μ = ∫⁻ x : α, ‖trunc f t x‖ₑ ^ p ∂μ := by apply setLIntegral_eq_of_support_subset unfold Function.support trunc - rw [setOf_subset_setOf] + rw [ofPred_subset_ofPred] intro x contrapose! intro f_zero simp_rw [f_zero]; simp [hp] -- TODO: better name! -lemma restrict_to_support_truncCompl {p : ℝ} [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] (hp : 0 < p) (f : α → E₁) : +lemma restrict_to_support_truncCompl {p : ℝ} [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] + (hp : 0 < p) (f : α → E₁) : ∫⁻ x : α in f.support, ‖(truncCompl f t) x‖ₑ ^ p ∂μ = ∫⁻ x : α, ‖(truncCompl f t) x‖ₑ ^ p ∂μ := by apply setLIntegral_eq_of_support_subset unfold Function.support - rw [truncCompl_eq, setOf_subset_setOf] + rw [truncCompl_eq, ofPred_subset_ofPred] intro x contrapose! intro f_zero simp [hp, f_zero] -- TODO: better name! -lemma restrict_to_support_trnc {p : ℝ} {j : Bool} [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] (hp : 0 < p) (f : α → E₁) : +lemma restrict_to_support_trnc {p : ℝ} {j : Bool} [TopologicalSpace E₁] + [ESeminormedAddCommMonoid E₁] (hp : 0 < p) (f : α → E₁) : ∫⁻ x : α in f.support, ‖trnc j f t x‖ₑ ^ p ∂μ = ∫⁻ x : α, ‖trnc j f t x‖ₑ ^ p ∂μ := by apply setLIntegral_eq_of_support_subset unfold Function.support trnc trunc truncCompl - rw [setOf_subset_setOf] + rw [ofPred_subset_ofPred] intro x contrapose! intro f_zero @@ -420,7 +428,9 @@ lemma restrict_to_support_trnc {p : ℝ} {j : Bool} [TopologicalSpace E₁] [ESe @[fun_prop] theorem AEMeasurable.trnc_restrict - [MeasurableSpace E₁] [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] [BorelSpace E₁] {j : Bool} + [MeasurableSpace E₁] [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] [BorelSpace E₁] + {j : Bool} + [SFinite (μ.restrict f.support)] (hf : AEMeasurable f μ) (tc : ToneCouple) : AEMeasurable (fun a ↦ trnc j f (tc.ton a.1) a.2) ((volume.restrict (Ioi 0)).prod (μ.restrict f.support)) := by @@ -442,14 +452,15 @@ lemma lintegral_lintegral_pow_swap_truncCompl {q q₀ p₀ : ℝ} [MeasurableSpa (∫⁻ a : α in f.support, (∫⁻ (s : ℝ) in Ioi 0, (ENNReal.ofReal (s ^ (q - q₀ - 1)) ^ (p₀⁻¹ * q₀)⁻¹ * - ‖trnc j f (tc.ton (ENNReal.ofReal s)) a‖ₑ ^ p₀) ^ (p₀⁻¹ * q₀)) ^ (p₀⁻¹ * q₀)⁻¹ ∂μ) ^ (p₀⁻¹ * q₀) := by + ‖trnc j f (tc.ton (ENNReal.ofReal s)) a‖ₑ ^ p₀) ^ (p₀⁻¹ * q₀)) ^ + (p₀⁻¹ * q₀)⁻¹ ∂μ) ^ (p₀⁻¹ * q₀) := by apply lintegral_lintegral_pow_swap_rpow · apply le_of_mul_le_mul_left _ hp₀ field_simp exact hp₀q₀ · unfold Function.uncurry -- TODO: this is quite some effort, somehow the infrastructure may need to be better - apply AEMeasurable.mul' + apply AEMeasurable.mul · fun_prop · have : (fun a ↦ ‖trnc j f (tc.ton (ENNReal.ofReal a.1)) a.2‖ₑ ^ p₀) = (fun a ↦ ‖trnc j f (tc.ton a.1) a.2‖ₑ ^ p₀ ) ∘ @@ -458,10 +469,13 @@ lemma lintegral_lintegral_pow_swap_truncCompl {q q₀ p₀ : ℝ} [MeasurableSpa apply AEMeasurable.comp_aemeasurable · rw [← Measure.map_prod_map] · simp only [Measure.map_id'] - have : Measure.map (fun a ↦ ENNReal.ofReal a) (volume.restrict (Ioi 0)) = volume.restrict (Ioi 0) := by + have : Measure.map (fun a ↦ ENNReal.ofReal a) (volume.restrict (Ioi 0)) = + volume.restrict (Ioi 0) := by simp [map_restrict_Ioi_eq_restrict_Ioi] rw [this] - have : (fun a ↦ ‖trnc j f (tc.ton a.1) a.2‖ₑ ^ p₀) = (fun z : E₁ ↦ ‖ z ‖ₑ ^ p₀) ∘ (fun a : ℝ≥0∞ × α ↦ trnc j f (tc.ton a.1) a.2) := rfl + have : (fun a ↦ ‖trnc j f (tc.ton a.1) a.2‖ₑ ^ p₀) = + (fun z : E₁ ↦ ‖z‖ₑ ^ p₀) ∘ + (fun a : ℝ≥0∞ × α ↦ trnc j f (tc.ton a.1) a.2) := rfl rw [this] apply AEMeasurable.comp_aemeasurable · fun_prop @@ -478,13 +492,13 @@ lemma lintegral_congr_support {f : α → E₁} {g h : α → ENNReal} rw [Measure.restrict_apply₀'] · refine measure_mono_null (fun x h₀ ↦ ?_) measure_empty have : g x = h x := hgh _ (mem_of_mem_inter_right h₀) - have : x ∈ {a | ¬g a = h a} := mem_of_mem_diff h₀ + have : x ∈ {a | ¬g a = h a} := mem_of_mem_sdiff h₀ change ¬ (g x = h x) at this contradiction · have : f.support = (fun x ↦ ‖f x‖ₑ).support := by unfold Function.support ext x - simp only [ne_eq, mem_setOf_eq, enorm_eq_zero] + simp only [ne_eq, mem_ofPred_eq, enorm_eq_zero] rw [this] exact (aestronglyMeasurable_iff_aemeasurable.mpr hf.enorm).nullMeasurableSet_support @@ -504,24 +518,21 @@ lemma estimate_trnc {p₀ q₀ q : ℝ} {spf : ScaledPowerFunction} {j : Bool} (∫⁻ (a : α) in f.support, ‖f a‖ₑ ^ (p₀ + spf.σ⁻¹ * (q - q₀) * (p₀ / q₀)) ∂μ) ^ (p₀⁻¹ * q₀) := by have := spf.hd - unfold eLpNorm eLpNorm' + simp_rw [eLpNorm_eq_eLpNorm' (ofReal_pos.mpr hp₀).ne' coe_ne_top + (aestronglyMeasurable_trnc hf), eLpNorm', toReal_ofReal hp₀.le] set tc := (spf_to_tc spf).toToneCouple - split_ifs with is_p₀pos is_p₀top - · have : p₀ ≤ 0 := ofReal_eq_zero.mp is_p₀pos - contrapose! this; exact hp₀ - · contrapose! is_p₀top; exact coe_ne_top - · rw [toReal_ofReal hp₀.le] - calc + calc _ = ∫⁻ s : ℝ in Ioi 0, ENNReal.ofReal (s ^ (q - q₀ - 1)) * - ((∫⁻ (a : α), ↑‖trnc j f ((spf_to_tc spf).ton (ENNReal.ofReal s)) a‖ₑ ^ p₀ ∂μ) ^ (1 / p₀)) ^ q₀ := by + ((∫⁻ (a : α), ↑‖trnc j f ((spf_to_tc spf).ton (ENNReal.ofReal s)) a‖ₑ ^ p₀ ∂μ) ^ + (1 / p₀)) ^ q₀ := by congr 1 ext x rw [mul_comm] _ = ∫⁻ (s : ℝ) in Ioi 0, (ENNReal.ofReal (s ^ (q - q₀ - 1)) ^ (p₀⁻¹ * q₀)⁻¹) ^ (p₀⁻¹ * q₀) * - (∫⁻ (a : α) in f.support, ↑‖trnc j f (tc.ton (ENNReal.ofReal s)) a‖ₑ ^ p₀ ∂μ) ^ (p₀⁻¹ * q₀) := by + (∫⁻ (a : α) in f.support, ↑‖trnc j f (tc.ton (ENNReal.ofReal s)) a‖ₑ ^ p₀ ∂μ) ^ + (p₀⁻¹ * q₀) := by refine setLIntegral_congr_fun measurableSet_Ioi fun s hs ↦ ?_ - dsimp rw [ENNReal.rpow_inv_rpow] · rw [one_div, ← ENNReal.rpow_mul, restrict_to_support_trnc hp₀] · positivity @@ -530,14 +541,14 @@ lemma estimate_trnc {p₀ q₀ q : ℝ} {spf : ScaledPowerFunction} {j : Bool} ENNReal.ofReal (s ^ (q - q₀ - 1)) ^ (p₀⁻¹ * q₀)⁻¹ * ‖trnc j f (tc.ton (ENNReal.ofReal s)) a‖ₑ ^ p₀ ∂μ) ^ (p₀⁻¹ * q₀) := by refine setLIntegral_congr_fun measurableSet_Ioi fun s hs ↦ ?_ - dsimp rw [lintegral_const_mul', ENNReal.mul_rpow_of_nonneg] · positivity · exact (ENNReal.rpow_lt_top_of_nonneg (by positivity) coe_ne_top).ne _ ≤ (∫⁻ a : α in f.support, (∫⁻ (s : ℝ) in Ioi 0, (ENNReal.ofReal (s ^ (q - q₀ - 1)) ^ (p₀⁻¹ * q₀)⁻¹ * - ‖trnc j f (tc.ton (ENNReal.ofReal s)) a‖ₑ ^ p₀) ^ (p₀⁻¹ * q₀)) ^ (p₀⁻¹ * q₀)⁻¹ ∂μ) ^ (p₀⁻¹ * q₀) := by + ‖trnc j f (tc.ton (ENNReal.ofReal s)) a‖ₑ ^ p₀) ^ (p₀⁻¹ * q₀)) ^ + (p₀⁻¹ * q₀)⁻¹ ∂μ) ^ (p₀⁻¹ * q₀) := by -- This is a consequence of Minkowski's integral inequality apply lintegral_lintegral_pow_swap_truncCompl hp₀ hp₀q₀ hf tc; assumption _ = (∫⁻ a : α in f.support, @@ -549,7 +560,6 @@ lemma estimate_trnc {p₀ q₀ q : ℝ} {spf : ScaledPowerFunction} {j : Bool} intro x _ congr 1 refine setLIntegral_congr_fun measurableSet_Ioi fun s hs ↦ ?_ - dsimp rw [ENNReal.mul_rpow_of_nonneg, ENNReal.rpow_inv_rpow, ← ENNReal.rpow_mul] <;> try positivity congr field_simp @@ -636,7 +646,8 @@ lemma estimate_trnc₁ {spf : ScaledPowerFunction} {j : Bool} (hf : AEStronglyMeasurable f μ) (hf₂ : SigmaFinite (μ.restrict f.support)) (hspf : spf.σ = ζ p₀ q₀ p₁ q₁ t.toReal) : ∫⁻ s : ℝ in Ioi 0, - eLpNorm (trnc j f ((spf_to_tc spf).ton (ENNReal.ofReal s))) (sel j p₀ p₁) μ ^ (sel j q₀ q₁).toReal * + eLpNorm (trnc j f ((spf_to_tc spf).ton (ENNReal.ofReal s))) (sel j p₀ p₁) μ ^ + (sel j q₀ q₁).toReal * ENNReal.ofReal (s ^ (q.toReal - (sel j q₀ q₁).toReal - 1)) ≤ (spf.d ^ (q.toReal - (sel j q₀ q₁).toReal)) * ENNReal.ofReal |q.toReal - (sel j q₀ q₁).toReal|⁻¹ * @@ -670,7 +681,8 @@ lemma estimate_trnc₁ {spf : ScaledPowerFunction} {j : Bool} ‖f a‖ₑ ^ ((sel j p₀ p₁).toReal + spf.σ⁻¹ * (q.toReal - (sel j q₀ q₁).toReal) * ((sel j p₀ p₁).toReal / (sel j q₀ q₁).toReal)) ∂μ) ^ ((sel j p₀ p₁).toReal ⁻¹ * (sel j q₀ q₁).toReal) := by - have coe_p' : ENNReal.ofReal (sel j p₀ p₁).toReal = (sel j p₀ p₁) := ofReal_toReal_eq_iff.mpr hp' + have coe_p' : ENNReal.ofReal (sel j p₀ p₁).toReal = (sel j p₀ p₁) := + ofReal_toReal_eq_iff.mpr hp' nth_rw 1 [← coe_p'] apply estimate_trnc · apply toReal_pos @@ -690,7 +702,7 @@ lemma estimate_trnc₁ {spf : ScaledPowerFunction} {j : Bool} cases j · unfold sel dsimp only - simp only [hspf, Bool.if_false_right, Bool.and_true, Bool.false_bne, decide_eq_true_eq] + simp only [hspf, Bool.ite_false_right, Bool.and_true, Bool.false_bne, decide_eq_true_eq] split_ifs with is_ζ_pos · apply toReal_strict_mono · exact interp_exp_ne_top hq₀q₁ ht hq @@ -700,7 +712,7 @@ lemma estimate_trnc₁ {spf : ScaledPowerFunction} {j : Bool} (le_of_not_gt is_ζ_pos) · unfold sel dsimp only - simp only [hspf, Bool.if_false_right, Bool.and_true, Bool.true_bne, Bool.not_eq_true', + simp only [hspf, Bool.ite_false_right, Bool.and_true, Bool.true_bne, Bool.not_eq_true', decide_eq_false_iff_not] split_ifs with is_ζ_pos · apply toReal_strict_mono hq' @@ -737,7 +749,7 @@ lemma estimate_trnc₁ {spf : ScaledPowerFunction} {j : Bool} ((sel j p₀ p₁).toReal ⁻¹ * (sel j q₀ q₁).toReal) := by congr rw [← one_div] - refine (eLpNorm_eq_lintegral_rpow_enorm_toReal (ε := E₁) ?_ ?_).symm + refine (eLpNorm_eq_lintegral_rpow_enorm_toReal (ε := E₁) ?_ ?_ hf).symm · exact (interpolated_pos' hp₀ hp₁ (ne_top_of_Ioo ht) hp).ne' · exact interp_exp_ne_top hp₀p₁.ne ht hp @@ -774,20 +786,27 @@ lemma wnorm_eq_zero_iff [ENormedAddMonoid ε] {f : α → ε} {p : ℝ≥0∞} ( exact iSup_wnorm b.toNNReal exact meas_ne_zero this · refine iSup_eq_zero.mpr fun t ↦ mul_eq_zero.mpr - (Or.inr ((rpow_eq_zero_iff_of_pos (inv_pos_of_pos (toReal_pos hp h₀))).mpr (nonpos_iff_eq_zero.mp ?_))) + (Or.inr ((rpow_eq_zero_iff_of_pos (inv_pos_of_pos (toReal_pos hp h₀))).mpr + (nonpos_iff_eq_zero.mp ?_))) calc - _ ≤ distribution f 0 μ := by gcongr; exact zero_le _ + _ ≤ distribution f 0 μ := by gcongr; exact zero_le _ = distribution f (eLpNormEssSup f μ) μ := by congr; exact h.symm _ = 0 := distribution_snormEssSup /-! ## Weaktype estimates applied to truncations -/ -variable [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] [TopologicalSpace E₂] [ESeminormedAddCommMonoid E₂] - {E₁' E₂' : Type*} [TopologicalSpace E₁'] [ENormedAddCommMonoid E₁'] [TopologicalSpace E₂'] [ENormedAddCommMonoid E₂'] +variable [TopologicalSpace E₁] [ESeminormedAddCommMonoid E₁] + [TopologicalSpace E₂] [ESeminormedAddCommMonoid E₂] + {E₁' E₂' : Type*} [TopologicalSpace E₁'] [ENormedAddCommMonoid E₁'] + [TopologicalSpace E₂'] [ENormedAddCommMonoid E₂'] lemma eLpNorm_trnc_est {f : α → E₁} {j : Bool} : - eLpNorm (trnc j f t) p μ ≤ eLpNorm f p μ := eLpNorm_mono_enorm fun _x ↦ trnc_le_func + eLpNorm (trnc j f t) p μ ≤ eLpNorm f p μ := by + by_cases hf : AEStronglyMeasurable f μ + · exact eLpNorm_mono_enorm (aestronglyMeasurable_trnc hf) fun _x ↦ trnc_le_func + · rw [eLpNorm_of_not_aestronglyMeasurable hf] + exact le_top variable [ContinuousENorm ε₁] [ContinuousENorm ε₂] {T : (α → ε₁) → (α' → ε₂)} in lemma weaktype_estimate {C₀ : ℝ≥0} {p : ℝ≥0∞} {q : ℝ≥0∞} {f : α → ε₁} @@ -826,15 +845,18 @@ variable [ENormedAddMonoid ε₁] [ENormedAddMonoid ε₂] in lemma weaktype_aux₀ {f : α → ε₁} {T : (α → ε₁) → (α' → ε₂)} {p₀ q₀ p q : ℝ≥0∞} (hp₀ : 0 < p₀) (hq₀ : 0 < q₀) (hp : 0 < p) (hq : 0 < q) {C₀ : ℝ≥0} (h₀T : HasWeakType T p₀ q₀ μ ν C₀) - (hf : AEStronglyMeasurable f μ) (hF : eLpNorm f p μ = 0) : eLpNorm (T f) q ν = 0 := by - have f_ae_0 : f =ᵐ[μ] 0 := (eLpNorm_eq_zero_iff hf hp.ne').mp hF - have hf₂ : eLpNorm f p₀ μ = 0 := (eLpNorm_eq_zero_iff hf hp₀.ne').mpr f_ae_0 - have hf₁ : MemLp f p₀ μ := ⟨hf, by rw [hf₂]; exact zero_lt_top⟩ + (_hf : AEStronglyMeasurable f μ) (hF : eLpNorm f p μ = 0) : eLpNorm (T f) q ν = 0 := by + have f_ae_0 : f =ᵐ[μ] 0 := (eLpNorm_eq_zero_iff hp.ne').mp hF + have hf₂ : eLpNorm f p₀ μ = 0 := (eLpNorm_eq_zero_iff hp₀.ne').mpr f_ae_0 + have hf₁ : MemLp f p₀ μ := by + change eLpNorm f p₀ μ < ∞ + rw [hf₂] + exact zero_lt_top have := (h₀T f hf₁).2 rw [hf₂, mul_zero] at this have wnorm_0 : wnorm (T f) q₀ ν = 0 := nonpos_iff_eq_zero.mp this have : (T f) =ᵐ[ν] 0 := (wnorm_eq_zero_iff hq₀.ne').mp wnorm_0 - exact (eLpNorm_eq_zero_iff (h₀T _ hf₁).1 hq.ne').mpr this + exact (eLpNorm_eq_zero_iff hq.ne').mpr this -- for the remaining lemmas we use too much measure theory that is just for normed spaces -- try to generalize to ENorm-classes after Mathlib refactor @@ -867,7 +889,8 @@ lemma weaktype_estimate_trunc_top_top {a : ℝ≥0∞} {C₁ : ℝ≥0} rw [ha] have obs : MemLp (trunc f (t / C₁)) p₁ μ := trunc_Lp_Lq_higher ⟨hp, hp₁p⟩ hf (by finiteness) have wt_est := (h₁T (trunc f (t / C₁)) obs).2 - simp only [wnorm, eLpNorm, hq₁, ↓reduceIte, hp₁, top_ne_zero] at wt_est + simp only [wnorm, hq₁, ↓reduceIte, hp₁, + eLpNorm_exponent_top obs.aestronglyMeasurable] at wt_est apply nonpos_iff_eq_zero.mp have ineq : eLpNormEssSup (T' (trunc f (t / C₁))) ν ≤ t := calc _ ≤ C₁ * eLpNormEssSup (trunc f (t / C₁)) μ := wt_est @@ -875,7 +898,7 @@ lemma weaktype_estimate_trunc_top_top {a : ℝ≥0∞} {C₁ : ℝ≥0} gcongr exact trunc_eLpNormEssSup_le _ _ ≤ _ := by - rw [max_eq_right (zero_le _), + rw [max_eq_right zero_le, ENNReal.mul_div_cancel (ENNReal.coe_ne_zero.mpr hC₁.ne') (by finiteness)] calc _ ≤ distribution (T' (trunc f (t / C₁))) (eLpNormEssSup (T' (trunc f (t / C₁))) ν) ν := @@ -893,15 +916,16 @@ lemma weaktype_estimate_truncCompl_top {C₀ : ℝ≥0} (hC₀ : 0 < C₀) {p p rcases (eq_zero_or_pos (eLpNormEssSup f μ)) with snorm_zero | snorm_pos · have : eLpNorm (trnc ⊥ f a) ⊤ μ = 0 := by apply nonpos_iff_eq_zero.mp - rw [← snorm_zero] + rw [← snorm_zero, ← eLpNorm_exponent_top hf.aestronglyMeasurable] exact eLpNorm_trnc_est (p := ⊤) have obs : eLpNorm (T' (trnc ⊥ f a)) ⊤ ν = 0 := - weaktype_aux₀ hp₀ (hq₀ ▸ zero_lt_top) zero_lt_top zero_lt_top h₀T hf.1.truncCompl this - exact nonpos_iff_eq_zero.mp (Trans.trans (distribution_mono_right (Trans.trans obs - (zero_le t))) meas_eLpNormEssSup_lt) + weaktype_aux₀ hp₀ (hq₀ ▸ zero_lt_top) zero_lt_top zero_lt_top h₀T + hf.aestronglyMeasurable.truncCompl this + exact nonpos_iff_eq_zero.mp ((distribution_mono_right + (eLpNormEssSup_le_eLpNorm_top.trans (obs ▸ zero_le))).trans meas_eLpNormEssSup_lt.le) · have p_pos : 0 < p := hp₀.trans hp₀p have snorm_p_pos : eLpNorm f p μ ≠ 0 := fun snorm_0 ↦ snorm_pos.ne' <| - eLpNormEssSup_eq_zero_iff.mpr <| (eLpNorm_eq_zero_iff hf.1 p_pos.ne').mp snorm_0 + eLpNormEssSup_eq_zero_iff.mpr <| (eLpNorm_eq_zero_iff p_pos.ne').mp snorm_0 have term_pos : (ENNReal.ofNNReal C₀) ^ p₀.toReal * eLpNorm f p μ ^ p.toReal > 0 := by apply ENNReal.mul_pos <;> exact (rpow_pos_of_nonneg (by positivity) (by positivity)).ne' have d_pos : 0 < d := hdeq ▸ ENNReal.rpow_pos term_pos (by finiteness) @@ -919,7 +943,7 @@ lemma weaktype_estimate_truncCompl_top {C₀ : ℝ≥0} (hC₀ : 0 < C₀) {p p eLpNorm f p μ ^ p.toReal) := by rw [ENNReal.mul_rpow_of_nonneg _ _ toReal_nonneg] gcongr - exact estimate_eLpNorm_truncCompl hp ⟨hp₀, hp₀p.le⟩ hf.1 a_pos + exact estimate_eLpNorm_truncCompl hp ⟨hp₀, hp₀p.le⟩ hf.aestronglyMeasurable a_pos _ = (↑C₀) ^ p₀.toReal * eLpNorm f p μ ^ p.toReal * (d ^ p₀.toReal)⁻¹ * (t ^ p₀.toReal) := by rw [ha, ← ENNReal.rpow_mul, div_mul_cancel₀] · -- FIXME: can/should this be shared with the lemma below? @@ -968,7 +992,7 @@ lemma weaktype_estimate_trunc_top {C₁ : ℝ≥0} (hC₁ : 0 < C₁) {p p₁ q calc _ ≤ (ENNReal.ofNNReal C₁) * eLpNorm f p₁ μ := by gcongr - apply eLpNorm_mono_enorm (fun x ↦ trunc_le_func) + exact eLpNorm_mono_enorm obs.aestronglyMeasurable (fun _x ↦ trunc_le_func) _ ≤ _ := by have : eLpNorm f p₁ μ = 0 := Trans.trans (eLpNorm_congr_ae (eLpNormEssSup_eq_zero_iff.mp snorm_zero)) eLpNorm_zero @@ -977,7 +1001,7 @@ lemma weaktype_estimate_trunc_top {C₁ : ℝ≥0} (hC₁ : 0 < C₁) {p p₁ q intro snorm_0 apply snorm_pos.ne' apply eLpNormEssSup_eq_zero_iff.mpr - exact (eLpNorm_eq_zero_iff hf.1 hp.ne').mp snorm_0 + exact (eLpNorm_eq_zero_iff hp.ne').mp snorm_0 -- XXX: these lines are the same as in the lemma above have term_pos : (ENNReal.ofNNReal C₁) ^ p₁.toReal * eLpNorm f p μ ^ p.toReal > 0 := by apply ENNReal.mul_pos <;> exact (rpow_pos_of_nonneg (by positivity) (by positivity)).ne' @@ -985,7 +1009,7 @@ lemma weaktype_estimate_trunc_top {C₁ : ℝ≥0} (hC₁ : 0 < C₁) {p p₁ q _ ≤ ↑C₁ ^ p₁.toReal * (((a ^ (p₁.toReal - p.toReal))) * eLpNorm f p μ ^ p.toReal) := by rw [ENNReal.mul_rpow_of_nonneg _ _ (by positivity)] gcongr - exact estimate_eLpNorm_trunc hp₁.ne_top ⟨hp, hp₁p.le⟩ hf.1 + exact estimate_eLpNorm_trunc hp₁.ne_top ⟨hp, hp₁p.le⟩ hf.aestronglyMeasurable _ = ↑C₁ ^ p₁.toReal * eLpNorm f p μ ^ p.toReal * (d ^ p₁.toReal)⁻¹ * (t ^ p₁.toReal) := by rw [ha, ← ENNReal.rpow_mul, div_mul_cancel₀] · rw [ENNReal.div_rpow_of_nonneg, div_eq_mul_inv] <;> try positivity @@ -994,7 +1018,8 @@ lemma weaktype_estimate_trunc_top {C₁ : ℝ≥0} (hC₁ : 0 < C₁) {p p₁ q _ = _ := by nth_rw 2 [← one_mul (t ^ p₁.toReal)] congr - rw [hdeq, ENNReal.rpow_inv_rpow hp₁' _, ENNReal.mul_inv_cancel term_pos.ne' (by finiteness)] + rw [hdeq, ENNReal.rpow_inv_rpow hp₁' _, + ENNReal.mul_inv_cancel term_pos.ne' (by finiteness)] apply nonpos_iff_eq_zero.mp calc _ ≤ distribution (T' (trunc f a)) (eLpNormEssSup (T' (trunc f a)) ν) ν := by gcongr diff --git a/Carleson/ToMathlib/RealInterpolation/Misc.lean b/Carleson/ToMathlib/RealInterpolation/Misc.lean index d72de05..d2ea11e 100644 --- a/Carleson/ToMathlib/RealInterpolation/Misc.lean +++ b/Carleson/ToMathlib/RealInterpolation/Misc.lean @@ -90,7 +90,6 @@ def spf_to_tc (spf : ScaledPowerFunction) : StrictRangeToneCouple where intro s t hst beta_reduce gcongr - exact this · simp only [Bool.false_eq_true, ↓reduceIte] intro s t hst rcases spf.hσ with σ_pos | σ_neg @@ -196,7 +195,8 @@ lemma d_ne_top_aux₃ {C : ℝ≥0} {b c : ℝ} (hC : 0 < C) C ^ c * (eLpNorm f p μ ^ p.toReal) ^ b ≠ ⊤ := mul_ne_top (d_ne_top_aux₁ hC) (d_ne_top_aux₂ hF) -lemma d_ne_zero_aux₃ {b₀ c₀ b₁ c₁ : ℝ} (hC₀ : 0 < C₀) (hC₁ : 0 < C₁) (hF : eLpNorm f p μ ∈ Ioo 0 ⊤) : +lemma d_ne_zero_aux₃ {b₀ c₀ b₁ c₁ : ℝ} (hC₀ : 0 < C₀) (hC₁ : 0 < C₁) + (hF : eLpNorm f p μ ∈ Ioo 0 ⊤) : (C₀ ^ c₀ * (eLpNorm f p μ ^ p.toReal) ^ b₀) / (C₁ ^ c₁ * (eLpNorm f p μ ^ p.toReal) ^ b₁) ≠ 0 := by refine ENNReal.div_ne_zero.mpr ⟨?_, ?_⟩ @@ -312,7 +312,7 @@ lemma lintegral_double_restrict_set {A B : Set α} {f : α → ℝ≥0∞} (hA : (hB : MeasurableSet B) (hf : ∀ᵐ (x : α) ∂μ, x ∈ A \ B → f x ≤ 0) : ∫⁻ x in A, f x ∂μ = ∫⁻ x in A ∩ B, f x ∂μ := by have h₀ := setLIntegral_mono_ae' (MeasurableSet.diff hA hB) hf; rw [lintegral_zero] at h₀ - rw [← lintegral_inter_add_diff (hB := hB), nonpos_iff_eq_zero.mp h₀, add_zero] + rw [← lintegral_inter_add_sdiff (hB := hB), nonpos_iff_eq_zero.mp h₀, add_zero] -- local convenience function lemma lintegral_rw_aux {g : ℝ → ℝ≥0∞} {f₁ f₂ : ℝ → ℝ≥0∞} {A : Set ℝ} @@ -336,10 +336,10 @@ lemma power_aux_2 {p q : ℝ} : lemma power_aux_3 {p q : ℝ} : (fun s : ℝ≥0∞ ↦ s ^ (p + q)) =ᶠ[ae volume] (fun s ↦ s ^ p * s ^ q ) := by filter_upwards [Ioo_zero_top_ae_eq_univ] with a ha - unfold Ioo at ha + have ha' : a ∈ Ioo 0 ∞ := ha.mpr (mem_univ a) refine ENNReal.rpow_add p q ?_ ?_ - · simp [pos_iff_ne_zero] at ha; by_contra; have := (ha.mpr trivial).1; tauto - · simp [lt_top_iff_ne_top] at ha; by_contra; have := (ha.mpr trivial).2; tauto + · exact ha'.1.ne' + · exact ha'.2.ne lemma power_aux_4 {p : ℝ} : (fun s ↦ ENNReal.ofReal (s ^ p)) =ᶠ[ae (volume.restrict (Ioi (0 : ℝ)))] @@ -402,7 +402,9 @@ namespace MeasureTheory def trunc (f : α → ε) (t : ℝ≥0∞) (x : α) : ε := if ‖f x‖ₑ ≤ t then f x else 0 lemma trunc_eq_indicator : trunc f t = {x | ‖f x‖ₑ ≤ t}.indicator f := by - ext x; simp_rw [trunc, Set.indicator, mem_setOf_eq, ite_eq_ite] + funext x + simp only [trunc, Set.indicator, mem_ofPred_eq] + split_ifs <;> rfl @[simp] lemma trunc_top : trunc f ∞ = f := by simp [trunc_eq_indicator] @@ -412,7 +414,7 @@ def truncCompl (f : α → ε) (t : ℝ≥0∞) (x : α) : ε := if ‖f x‖ₑ lemma truncCompl_eq_indicator : truncCompl f t = {x | ‖f x‖ₑ ≤ t}ᶜ.indicator f := by ext x - simp only [truncCompl, Set.indicator, mem_compl_iff, mem_setOf_eq, ite_not] + simp only [truncCompl, Set.indicator, mem_compl_iff, mem_ofPred_eq, ite_not] @[simp] lemma truncCompl_top : truncCompl f ∞ = (fun _ ↦ 0) := by simp [truncCompl_eq_indicator] @@ -462,7 +464,6 @@ function itself. -/ lemma truncCompl_of_nonpos {f : α → ε'} (ht : t ≤ 0) : truncCompl f t = f := by rw [truncCompl_eq] ext x - dsimp only [Pi.zero_apply] split_ifs · rfl · apply (enorm_eq_zero.mp ?_).symm @@ -485,17 +486,18 @@ lemma truncCompl_of_nonpos {f : α → ε'} (ht : t ≤ 0) : truncCompl f t = f -- apply Measurable.ite ?_ hf measurable_const -- exact measurableSet_lt measurable_const hf.norm -@[measurability] +@[fun_prop] protected lemma StronglyMeasurable.trunc (hf : StronglyMeasurable f) : StronglyMeasurable (trunc f t) := StronglyMeasurable.ite (measurableSet_le hf.enorm.stronglyMeasurable stronglyMeasurable_const) hf stronglyMeasurable_const -@[measurability] +@[fun_prop] protected lemma StronglyMeasurable.truncCompl (hf : StronglyMeasurable f) : StronglyMeasurable (truncCompl f t) := by rw [truncCompl_eq] - exact hf.ite (measurableSet_lt stronglyMeasurable_const hf.enorm.stronglyMeasurable) stronglyMeasurable_const + exact hf.ite (measurableSet_lt stronglyMeasurable_const hf.enorm.stronglyMeasurable) + stronglyMeasurable_const -- @[measurability, fun_prop] -- lemma AEMeasurable.trunc [MeasurableSpace E₁] [NormedAddCommGroup E₁] [BorelSpace E₁] @@ -528,7 +530,7 @@ protected lemma StronglyMeasurable.truncCompl (hf : StronglyMeasurable f) : -- simp only [mem_compl_iff, mem_setOf_eq, not_not] -- intro f_eq_g; unfold truncCompl; unfold trunc; dsimp only [Pi.sub_apply]; rw [f_eq_g] -@[measurability] +@[fun_prop] nonrec lemma AEStronglyMeasurable.trunc (hf : AEStronglyMeasurable f μ) : AEStronglyMeasurable (trunc f t) μ := by rcases hf with ⟨g, ⟨wg1, wg2⟩⟩ @@ -538,7 +540,7 @@ nonrec lemma AEStronglyMeasurable.trunc (hf : AEStronglyMeasurable f μ) : exact wg1.indicator (s := {x | ‖g x‖ₑ ≤ t}) (measurableSet_le wg1.enorm (by fun_prop)) · exact measure_mono_null (fun x ↦ by contrapose!; simp_all [trunc]) wg2 -@[measurability] +@[fun_prop] nonrec lemma AEStronglyMeasurable.truncCompl (hf : AEStronglyMeasurable f μ) : AEStronglyMeasurable (truncCompl f t) μ := by rcases hf with ⟨g, ⟨wg1, wg2⟩⟩ @@ -551,7 +553,7 @@ nonrec lemma AEStronglyMeasurable.truncCompl · exact measure_mono_null (fun x ↦ by contrapose!; simp_all [truncCompl]) wg2 -@[measurability] +@[fun_prop] lemma aestronglyMeasurable_trnc {j : Bool} (hf : AEStronglyMeasurable f μ) : AEStronglyMeasurable (trnc j f t) μ := j.rec (.truncCompl hf) (.trunc hf) @@ -571,7 +573,8 @@ lemma trunc_eLpNormEssSup_le {f : α → ε} (a : ℝ≥0∞) : eLpNormEssSup (trunc f a) μ ≤ (max 0 a) := essSup_le_of_ae_le _ (ae_of_all _ fun x ↦ trunc_le x) -lemma trunc_mono {f : α → ε} {a b : ℝ≥0∞} (hab : a ≤ b) {x : α} : ‖trunc f a x‖ₑ ≤ ‖trunc f b x‖ₑ := by +lemma trunc_mono {f : α → ε} {a b : ℝ≥0∞} (hab : a ≤ b) {x : α} : + ‖trunc f a x‖ₑ ≤ ‖trunc f b x‖ₑ := by unfold trunc split_ifs · rfl @@ -579,10 +582,28 @@ lemma trunc_mono {f : α → ε} {a b : ℝ≥0∞} (hab : a ≤ b) {x : α} : · rw [enorm_zero]; positivity · exact le_rfl +lemma eLpNormFormula_trunc_mono : + Monotone fun s ↦ eLpNormFormula (trunc f s) p μ := by + intro lower upper hle + unfold eLpNormFormula + split_ifs + · exact le_rfl + · exact eLpNormEssSup_mono_enorm_ae (ae_of_all _ fun _ ↦ trunc_mono hle) + · exact eLpNorm'_mono_enorm_ae toReal_nonneg (ae_of_all _ fun _ ↦ trunc_mono hle) + /-- The norm of the truncation is monotone in the truncation parameter -/ lemma eLpNorm_trunc_mono : - Monotone fun s ↦ eLpNorm (trunc f s) p μ := - fun _a _b hab ↦ eLpNorm_mono_enorm fun _x ↦ trunc_mono hab + Monotone fun s ↦ eLpNorm (trunc f s) p μ := by + intro lower upper hle + by_cases hupper : AEStronglyMeasurable (trunc f upper) μ + · have heq : trunc (trunc f upper) lower = trunc f lower := by + ext point + by_cases hpoint : ‖f point‖ₑ ≤ upper + · simp [trunc, hpoint] + · have hlower : ¬‖f point‖ₑ ≤ lower := fun hbound ↦ hpoint (hbound.trans hle) + simp [trunc, hpoint, hlower] + exact eLpNorm_mono_enorm (heq ▸ hupper.trunc) fun _ ↦ trunc_mono hle + · simp [eLpNorm, hupper] lemma trunc_buildup_enorm {x : α} : ‖trunc f t x‖ₑ + ‖truncCompl f t x‖ₑ = ‖f x‖ₑ := by @@ -613,22 +634,22 @@ lemma eLpNorm_truncCompl_anti (hf : eLpNorm f 1 μ ≠ ⊤) (mf : AEStronglyMeas Antitone (fun s ↦ eLpNorm (truncCompl f s) p μ) := by intro a _b hab have : ∀ᵐ x ∂μ, ‖f x‖ₑ ≠ ⊤ := by - rw [eLpNorm_one_eq_lintegral_enorm] at hf + rw [eLpNorm_one_eq_lintegral_enorm mf] at hf simp_rw [ae_iff, not_ne_iff]; exact measure_eq_top_of_lintegral_ne_top mf.enorm hf have : ∀ᵐ x ∂μ, ‖trunc f a x‖ₑ ≠ ⊤ := by refine this.mono fun x hx ↦ ?_ rw [trunc] split_ifs; exacts [hx, by simp] - exact eLpNorm_mono_enorm_ae <| this.mono fun x hx ↦ truncCompl_anti hab hx + exact eLpNorm_mono_enorm_ae mf.truncCompl <| this.mono fun x hx ↦ truncCompl_anti hab hx /-- The norm of the truncation is meaurable in the truncation parameter -/ -@[measurability, fun_prop] +@[fun_prop] lemma eLpNorm_trunc_measurable : Measurable (fun s ↦ eLpNorm (trunc f s) p μ) := eLpNorm_trunc_mono.measurable /-- The norm of the complement of the truncation is measurable in the truncation parameter -/ -@[measurability, fun_prop] +@[fun_prop] lemma eLpNorm_truncCompl_measurable (hf : eLpNorm f 1 μ ≠ ⊤) (mf : AEStronglyMeasurable f μ) : Measurable (fun s ↦ eLpNorm (truncCompl f s) p μ) := eLpNorm_truncCompl_anti hf mf |>.measurable @@ -655,10 +676,7 @@ lemma trnc_le_func {j : Bool} {a : ℝ≥0∞} {x : α} : /-! ## Truncations and L-p spaces -/ lemma MemLp.trunc {p : ℝ≥0∞} (hf : MemLp f p μ) : MemLp (trunc f t) p μ := by - refine ⟨hf.1.trunc, lt_of_le_of_lt (eLpNorm_mono_ae' (ae_of_all _ ?_)) hf.2⟩ - intro x - unfold MeasureTheory.trunc - split_ifs with is_fx_le_a <;> simp + exact (eLpNorm_mono_enorm hf.aestronglyMeasurable.trunc fun _ ↦ trunc_le_func).trans_lt hf -- lemma eLpNorm_truncCompl_le {p : ℝ≥0∞} : -- eLpNorm (truncCompl f t) p μ ≤ eLpNorm f p μ := @@ -666,26 +684,24 @@ lemma MemLp.trunc {p : ℝ≥0∞} (hf : MemLp f p μ) : MemLp (trunc f t) p μ lemma MemLp.truncCompl {p : ℝ≥0∞} (hf : MemLp f p μ) : MemLp (truncCompl f t) p μ := by - refine ⟨hf.1.truncCompl, lt_of_le_of_lt (eLpNorm_mono_ae' (ae_of_all _ ?_)) hf.2⟩ - intro x - unfold MeasureTheory.truncCompl - split_ifs with is_fx_le_a <;> simp + exact (eLpNorm_mono_enorm hf.aestronglyMeasurable.truncCompl + fun _ ↦ truncCompl_le_func).trans_lt hf -lemma eLpNorm_truncCompl_le {q : ℝ≥0∞} +lemma eLpNormFormula_truncCompl_le {q : ℝ≥0∞} (q_ne_zero : ¬ q = 0) (q_ne_top : q ≠ ⊤) : - eLpNorm (truncCompl f t) q μ ^ q.toReal ≤ + eLpNormFormula (truncCompl f t) q μ ^ q.toReal ≤ ∫⁻ x : α in {x | t < ‖f x‖ₑ}, ‖f x‖ₑ ^ q.toReal ∂μ := by - unfold eLpNorm eLpNorm' + simp only [eLpNormFormula, q_ne_zero, q_ne_top, ↓reduceIte, eLpNorm'] have q_toReal_pos : 0 < q.toReal := toReal_pos q_ne_zero q_ne_top - split_ifs calc _ = ∫⁻ x : α in {x | t < ‖f x‖ₑ}, ‖(truncCompl f t) x‖ₑ ^ q.toReal ∂μ := by rw [one_div, ENNReal.rpow_inv_rpow] · apply (setLIntegral_eq_of_support_subset _).symm unfold Function.support intro x - rw [truncCompl_eq, mem_setOf_eq] - dsimp only [Pi.sub_apply] + change ‖truncCompl f t x‖ₑ ^ q.toReal ≠ 0 → t < ‖f x‖ₑ + rw [truncCompl_eq] + dsimp only split_ifs with is_a_lt_fx · exact fun _ ↦ is_a_lt_fx · contrapose; intro _; simpa [enorm_eq_nnnorm] @@ -694,6 +710,13 @@ lemma eLpNorm_truncCompl_le {q : ℝ≥0∞} gcongr with x exact trnc_le_func (j := ⊥) +lemma eLpNorm_truncCompl_le {q : ℝ≥0∞} + (q_ne_zero : q ≠ 0) (q_ne_top : q ≠ ⊤) (hf : AEStronglyMeasurable f μ) : + eLpNorm (truncCompl f t) q μ ^ q.toReal ≤ + ∫⁻ x : α in {x | t < ‖f x‖ₑ}, ‖f x‖ₑ ^ q.toReal ∂μ := by + rw [eLpNorm_eq_eLpNormFormula hf.truncCompl] + exact eLpNormFormula_truncCompl_le q_ne_zero q_ne_top + -- TODO: better name! lemma estimate_eLpNorm_truncCompl {p q : ℝ≥0∞} (p_ne_top : p ≠ ⊤) (hpq : q ∈ Ioc 0 p) (hf : AEStronglyMeasurable f μ) (ht : 0 < t) : @@ -701,7 +724,7 @@ lemma estimate_eLpNorm_truncCompl {p q : ℝ≥0∞} (t ^ (q.toReal - p.toReal)) * eLpNorm f p μ ^ p.toReal := by have q_ne_top: q ≠ ⊤ := ne_top_of_le_ne_top p_ne_top hpq.2 have p_ne_zero : p ≠ 0 := (hpq.1.trans_le hpq.2).ne' - apply le_trans (eLpNorm_truncCompl_le hpq.1.ne' (ne_top_of_le_ne_top p_ne_top hpq.2)) + apply le_trans (eLpNorm_truncCompl_le hpq.1.ne' (ne_top_of_le_ne_top p_ne_top hpq.2) hf) calc _ ≤ (t ^ (q.toReal - p.toReal)) * ∫⁻ x : α in {x | t < ‖f x‖ₑ}, ‖f x‖ₑ ^ p.toReal ∂μ := by @@ -709,7 +732,8 @@ lemma estimate_eLpNorm_truncCompl {p q : ℝ≥0∞} · apply setLIntegral_mono_ae (AEMeasurable.restrict (by fun_prop)) filter_upwards with x hx rw [mul_comm] - exact rpow_le_rpow_of_exponent_le_base_ge_enorm ht hx.ne_top hx.le (toReal_mono p_ne_top hpq.2) + exact rpow_le_rpow_of_exponent_le_base_ge_enorm ht hx.ne_top hx.le + (toReal_mono p_ne_top hpq.2) · by_cases ht' : t = ⊤ · simp_all · finiteness @@ -718,7 +742,8 @@ lemma estimate_eLpNorm_truncCompl {p q : ℝ≥0∞} exact Measure.restrict_le_self _ = _ := by congr - rw [eLpNorm_eq_lintegral_rpow_enorm_toReal p_ne_zero p_ne_top, one_div, ENNReal.rpow_inv_rpow] + rw [eLpNorm_eq_lintegral_rpow_enorm_toReal p_ne_zero p_ne_top hf, one_div, + ENNReal.rpow_inv_rpow] exact (toReal_pos p_ne_zero p_ne_top).ne' -- TODO: better name! @@ -731,17 +756,15 @@ lemma estimate_eLpNorm_trunc {p q : ℝ≥0∞} by_cases ht : t = ⊤ · by_cases hf' : eLpNorm f p μ ^ p.toReal = 0 · have : f =ᵐ[μ] 0 := by - rw [← eLpNorm_eq_zero_iff hf] + rw [← eLpNorm_eq_zero_iff hpq.1.ne'] · rwa [← ENNReal.rpow_eq_zero_iff_of_pos (toReal_pos hpq.1.ne' p_ne_top)] - exact hpq.1.ne' -- Thus, the left hand side vanishes and conclusion is trivially true. - refine le_of_eq_of_le ?_ (zero_le _) + refine le_of_eq_of_le ?_ zero_le rw [rpow_eq_zero_iff_of_pos] - · rw [eLpNorm_eq_zero_iff _ hq'.ne'] + · rw [eLpNorm_eq_zero_iff hq'.ne'] · -- TODO: missing API lemma rw [trunc_eq_indicator] exact Filter.EventuallyEq.indicator_zero this - · fun_prop · rw [toReal_pos_iff] exact ⟨hq', hq.lt_top⟩ · -- The right hand side is `∞`, hence the statement is always true. @@ -752,19 +775,17 @@ lemma estimate_eLpNorm_trunc {p q : ℝ≥0∞} · apply le_top rw [sub_pos, toReal_lt_toReal p_ne_top hq] exact lt_of_le_of_ne hpq.2 p_eq_q - unfold eLpNorm eLpNorm' - have : p ≠ 0 := hpq.1.ne' - split_ifs with h - · exfalso - exact hq'.ne' h - · calc + rw [eLpNorm_eq_eLpNorm' hq'.ne' hq hf.trunc, + eLpNorm_eq_eLpNorm' hpq.1.ne' p_ne_top hf] + unfold eLpNorm' + calc _ = ∫⁻ (x : α) in {x | 0 < ‖f x‖ₑ ∧ ‖f x‖ₑ ≤ t}, ‖trunc f t x‖ₑ ^ q.toReal ∂μ := by rw [one_div, ENNReal.rpow_inv_rpow] · apply Eq.symm apply setLIntegral_eq_of_support_subset unfold Function.support intro x - dsimp only [Pi.sub_apply, mem_setOf_eq] + change ‖trunc f t x‖ₑ ^ q.toReal ≠ 0 → 0 < ‖f x‖ₑ ∧ ‖f x‖ₑ ≤ t unfold trunc split_ifs with is_fx_le_a · intro fx_rpow_ne_zero @@ -783,7 +804,8 @@ lemma estimate_eLpNorm_trunc {p q : ℝ≥0∞} · apply setLIntegral_mono_ae (AEMeasurable.restrict (by fun_prop)) · filter_upwards with x hx rw [mul_comm] - exact rpow_le_rpow_of_exponent_le_base_le_enorm hx.1 (ne_top_of_le_ne_top ht hx.2) hx.2 <| toReal_mono hq hpq.2 + exact rpow_le_rpow_of_exponent_le_base_le_enorm hx.1 + (ne_top_of_le_ne_top ht hx.2) hx.2 <| toReal_mono hq hpq.2 · simp_all _ ≤ _ := by gcongr @@ -795,16 +817,16 @@ lemma estimate_eLpNorm_trunc {p q : ℝ≥0∞} /-- If `f` is in `Lp`, the truncation is element of `Lq` for `q ≥ p`. -/ lemma trunc_Lp_Lq_higher (hpq : p ∈ Ioc 0 q) {f : α → ε'} (hf : MemLp f p μ) (ht : t ≠ ∞) : MemLp (trnc ⊤ f t) q μ := by - refine ⟨aestronglyMeasurable_trnc hf.1, ?_⟩ + change eLpNorm (trnc ⊤ f t) q μ < ∞ rcases (eq_or_ne q ⊤) with q_eq_top | q_ne_top - · rw [q_eq_top, eLpNorm_exponent_top] + · rw [q_eq_top, eLpNorm_exponent_top (aestronglyMeasurable_trnc hf.aestronglyMeasurable)] simp only [trnc] calc _ _ ≤ max 0 t := trunc_eLpNormEssSup_le t _ < ∞ := by finiteness · have p_ne_top := ne_top_of_le_ne_top q_ne_top hpq.2 rw [← rpow_lt_top_iff_of_pos (toReal_pos (hpq.1.trans_le hpq.2).ne' q_ne_top)] - apply lt_of_le_of_lt (estimate_eLpNorm_trunc q_ne_top hpq hf.1) + apply lt_of_le_of_lt (estimate_eLpNorm_trunc q_ne_top hpq hf.aestronglyMeasurable) apply mul_lt_top ?_ ?_ · by_cases ht'' : t = 0 · rw [ht''] @@ -813,7 +835,7 @@ lemma trunc_Lp_Lq_higher (hpq : p ∈ Ioc 0 q) {f : α → ε'} (hf : MemLp f p rw [toReal_le_toReal p_ne_top q_ne_top] exact hpq.2 · finiteness - · exact (rpow_lt_top_iff_of_pos (toReal_pos hpq.1.ne' p_ne_top)).mpr hf.2 + · exact (rpow_lt_top_iff_of_pos (toReal_pos hpq.1.ne' p_ne_top)).mpr hf lemma memLp_truncCompl_of_memLp_top (hf : MemLp f ⊤ μ) (h : μ {x | t < ‖f x‖ₑ} < ⊤) : MemLp (trnc ⊥ f t) p μ := by @@ -821,7 +843,7 @@ lemma memLp_truncCompl_of_memLp_top (hf : MemLp f ⊤ μ) (h : μ {x | t < ‖f · rw [hp_top] simp only [bot_eq_false, trnc_false] exact hf.truncCompl - obtain ⟨hf_m, hf_lt_top⟩ := hf + have hf_m := hf.aestronglyMeasurable by_cases hp0 : p = 0 · rw [hp0, memLp_zero_iff_aestronglyMeasurable] exact aestronglyMeasurable_trnc hf_m @@ -843,34 +865,33 @@ lemma memLp_truncCompl_of_memLp_top (hf : MemLp f ⊤ μ) (h : μ {x | t < ‖f split_ifs with hx hx' hx'' · exact hfgs hs · exfalso - simp only [mem_compl_iff, mem_setOf_eq, not_le, not_lt, hfgs hs] at hx hx' + simp only [mem_compl_iff, mem_ofPred_eq, not_le, not_lt, hfgs hs] at hx hx' order · exfalso - simp only [mem_compl_iff, mem_setOf_eq, not_le, not_lt, hfgs hs] at hx hx'' + simp only [mem_compl_iff, mem_ofPred_eq, not_le, not_lt, hfgs hs] at hx hx'' order · rfl apply MemLp.ae_eq ae_eq_trunc.symm - use aestronglyMeasurable_trnc wg1.aestronglyMeasurable + change eLpNorm (trnc ⊥ g t) p μ < ∞ simp only [bot_eq_false, trnc_false] rw [truncCompl_eq_indicator, eLpNorm_indicator_eq_eLpNorm_restrict - (by rw [compl_setOf]; simp only [not_le]; exact measurableSet_lt measurable_const (by fun_prop))] - rw [eLpNorm_eq_eLpNorm' hp0 hp_top] + (by rw [compl_ofPred]; simp only [not_le] + exact measurableSet_lt measurable_const (by fun_prop))] + rw [eLpNorm_eq_eLpNorm' hp0 hp_top wg1.aestronglyMeasurable.restrict] apply (eLpNorm'_le_eLpNormEssSup_mul_rpow_measure_univ hp_pos).trans_lt apply ENNReal.mul_lt_top - · rw [← eLpNorm_exponent_top] + · rw [← eLpNorm_exponent_top wg1.aestronglyMeasurable.restrict] apply (eLpNorm_restrict_le _ _ _ _).trans_lt rwa [eLpNorm_congr_ae wg2.symm] apply ENNReal.rpow_lt_top_of_nonneg (by simp [hp_pos.le]) simp only [MeasurableSet.univ, Measure.restrict_apply, univ_inter] - rw [← lt_top_iff_ne_top, compl_setOf] + rw [← lt_top_iff_ne_top, compl_ofPred] calc _ = μ {a | t < ‖f a‖ₑ} := by apply measure_congr - rw [Filter.eventuallyEq_iff_exists_mem] at wg2 - rcases wg2 with ⟨s, hs, hfgs⟩ - rw [Filter.eventuallyEq_iff_exists_mem] - exact ⟨s, hs, fun a ha ↦ by simp [setOf, hfgs.symm ha]⟩ + filter_upwards [wg2] with a ha + simp only [not_le, ha] _ < ∞ := h -- is there a better name? @@ -881,14 +902,14 @@ lemma truncCompl_Lp_Lq_lower have q_ne_top : q ≠ ∞ := ne_top_of_le_ne_top hp hpq.2 by_cases ht' : t = ∞ · simp [trnc, ht'] - refine ⟨aestronglyMeasurable_trnc hf.1, ?_⟩ + change eLpNorm (trnc ⊥ f t) q μ < ∞ have : 0 < q.toReal := toReal_pos hpq.left.ne' q_ne_top refine (rpow_lt_top_iff_of_pos this).mp ?_ - refine lt_of_le_of_lt (estimate_eLpNorm_truncCompl hp hpq hf.1 ht) ?_ + refine lt_of_le_of_lt (estimate_eLpNorm_truncCompl hp hpq hf.aestronglyMeasurable ht) ?_ apply mul_lt_top · push Not at ht' finiteness - refine (rpow_lt_top_iff_of_pos ?_).mpr hf.2 + refine (rpow_lt_top_iff_of_pos ?_).mpr hf exact toReal_pos (hpq.1.trans_le hpq.2).ne' hp -- Lemma 6.10 in Folland @@ -906,7 +927,8 @@ lemma memLp_of_memLp_le_of_memLp_ge {f : α → ε'} [ContinuousAdd ε'] have h : MemLp (trnc ⊤ f C) q μ := trunc_Lp_Lq_higher ⟨hp, hr'.1⟩ hf (by norm_num) have h' : MemLp (trnc ⊥ f C) q μ := by by_cases hr : r = ⊤ - · exact memLp_truncCompl_of_memLp_top (hr ▸ hf') <| distribution_lt_top hf hp p_ne_top (by norm_num) + · exact memLp_truncCompl_of_memLp_top (hr ▸ hf') <| + distribution_lt_top hf hp p_ne_top (by norm_num) exact truncCompl_Lp_Lq_lower hr ⟨hp.trans_le hr'.1, hr'.2⟩ (by norm_num) hf' have : f = (trnc ⊤ f C) + (trnc ⊥ f C) := trunc_add_truncCompl.symm rw [this] @@ -950,7 +972,7 @@ lemma res_subset_Ioi {j : Bool} {β : ℝ≥0∞} : res j β ⊆ Ioi 0 := by · simp · simp only [Ioi] intro s hs - rw [mem_setOf] + rw [mem_ofPred] exact hs.1 · exact Ioi_subset_Ioi toReal_nonneg @@ -968,7 +990,7 @@ lemma res'comp₀ (j : Bool) (β : ℝ≥0∞) (hβ : 0 < β) : split_ifs with h₀ h₁ h₂ on_goal 6 => ext x - simp only [mem_diff, mem_Ioi, mem_Ioc, not_and, not_le] + simp only [Set.mem_sdiff, mem_Ioi, mem_Ioc, not_and, not_le] exact ⟨by tauto, fun h ↦ ⟨(toReal_pos (hβ.ne') h₀).trans h, fun x ↦ h⟩⟩ all_goals simp_all @@ -978,7 +1000,7 @@ lemma res'comp (j : Bool) (β : ℝ≥0∞) : split_ifs with h₀ h₁ h₂ on_goal 6 => ext x - simp only [mem_diff, mem_Ioi, mem_Ioc, not_and, not_le] + simp only [Set.mem_sdiff, mem_Ioi, mem_Ioc, not_and, not_le] refine ⟨by tauto, fun hβ ↦ ?_⟩ have : 0 ≤ β.toReal := toReal_nonneg exact ⟨by order, fun _ ↦ hβ⟩ @@ -1056,8 +1078,10 @@ lemma lintegral_trunc_mul₀ {g : ℝ → ℝ≥0∞} {j : Bool} {x : α} {tc : · simp [hp] lemma lintegral_trunc_mul₁ {g : ℝ → ℝ≥0∞} {j : Bool} {x : α} {p : ℝ} {tc : ToneCouple} : - ∫⁻ s : ℝ in res' (xor j tc.mon) (tc.inv ‖f x‖ₑ), (g s) * ‖trnc j f (tc.ton (ENNReal.ofReal s)) x‖ₑ ^ p = - ∫⁻ s : ℝ in res (xor j tc.mon) (tc.inv ‖f x‖ₑ), (g s) * ‖trnc j f (tc.ton (ENNReal.ofReal s)) x‖ₑ ^ p := by + ∫⁻ s : ℝ in res' (xor j tc.mon) (tc.inv ‖f x‖ₑ), + (g s) * ‖trnc j f (tc.ton (ENNReal.ofReal s)) x‖ₑ ^ p = + ∫⁻ s : ℝ in res (xor j tc.mon) (tc.inv ‖f x‖ₑ), + (g s) * ‖trnc j f (tc.ton (ENNReal.ofReal s)) x‖ₑ ^ p := by apply setLIntegral_congr unfold res res' split_ifs @@ -1071,7 +1095,8 @@ lemma lintegral_trunc_mul₁ {g : ℝ → ℝ≥0∞} {j : Bool} {x : α} {p : exact Ne.symm (ne_of_apply_ne ENNReal.toReal fun a ↦ h (id (Eq.symm a))) lemma lintegral_trunc_mul₂ {g : ℝ → ℝ≥0∞} {j : Bool} {x : α} {p : ℝ} {tc : ToneCouple} : - ∫⁻ s : ℝ in res (xor j tc.mon) (tc.inv ‖f x‖ₑ), (g s) * ‖trnc j f (tc.ton (ENNReal.ofReal s)) x‖ₑ ^ p = + ∫⁻ s : ℝ in res (xor j tc.mon) (tc.inv ‖f x‖ₑ), + (g s) * ‖trnc j f (tc.ton (ENNReal.ofReal s)) x‖ₑ ^ p = ∫⁻ s : ℝ in res (xor j tc.mon) (tc.inv ‖f x‖ₑ), (g s) * ‖f x‖ₑ ^ p := by apply setLIntegral_congr_fun measurableSet_res unfold res trnc trunc truncCompl @@ -1114,7 +1139,8 @@ lemma lintegral_trunc_mul₂ {g : ℝ → ℝ≥0∞} {j : Bool} {x : α} {p : · have := (mon_pf (.ofReal s) ‖f x‖ₑ).2.mpr <| (ofReal_lt_iff_lt_toReal hs.1.le h).mpr hs.2 order -lemma lintegral_trunc_mul {g : ℝ → ℝ≥0∞} (hg : AEMeasurable g) {j : Bool} {x : α} {tc : ToneCouple} {p : ℝ} +lemma lintegral_trunc_mul {g : ℝ → ℝ≥0∞} (hg : AEMeasurable g) + {j : Bool} {x : α} {tc : ToneCouple} {p : ℝ} (hp : 0 < p) : ∫⁻ s : ℝ in Ioi 0, (g s) * ‖trnc j f (tc.ton (ENNReal.ofReal s)) x‖ₑ ^ p = (∫⁻ s : ℝ in res (xor j tc.mon) (tc.inv ‖f x‖ₑ), (g s)) * ‖f x‖ₑ ^ p := by @@ -1172,7 +1198,7 @@ lemma value_lintegral_res₀ {j : Bool} {β : ℝ≥0∞} {γ : ℝ} (hγ : if j rw [lintegral_rpow_of_gt_abs htcinv.le hγ, ENNReal.ofReal_div_of_pos (by rw [abs_pos]; linarith), ← ENNReal.ofReal_rpow_of_pos htcinv, ofReal_toReal_eq_iff.mpr htop] - · simp only [eq_false_of_ne_true xor_split, Bool.false_eq_true, ↓reduceIte] + · simp only [Bool.eq_false_of_ne_true xor_split, Bool.false_eq_true, ↓reduceIte] split_ifs with htop · rw [htop, top_rpow_of_neg (by linarith)]; simp · by_cases hzero : β = 0 @@ -1209,9 +1235,11 @@ lemma value_lintegral_res₂ {γ p' : ℝ} {spf : ScaledPowerFunction} (ht : 0 < top_div_of_lt_top ofReal_lt_top] -- TODO: move to a lower-level file! -lemma AEStronglyMeasurable.induction {α : Type*} {β : Type*} {mα : MeasurableSpace α} [TopologicalSpace β] +lemma AEStronglyMeasurable.induction {α : Type*} {β : Type*} + {mα : MeasurableSpace α} [TopologicalSpace β] {μ : Measure α} {motive : (α → β) → Prop} - (ae_eq_implies : ∀ ⦃f g : α → β⦄ (_ : StronglyMeasurable f) (_ : f =ᶠ[ae μ] g), motive f → motive g) + (ae_eq_implies : ∀ ⦃f g : α → β⦄ (_ : StronglyMeasurable f) (_ : f =ᶠ[ae μ] g), + motive f → motive g) (measurable : ∀ ⦃f : α → β⦄ (_ : StronglyMeasurable f), motive f) ⦃f : α → β⦄ (hf : AEStronglyMeasurable f μ) : motive f := by have hg := hf.choose_spec diff --git a/Carleson/ToMathlib/WeakType.lean b/Carleson/ToMathlib/WeakType.lean index 2e6b4bc..29f925a 100644 --- a/Carleson/ToMathlib/WeakType.lean +++ b/Carleson/ToMathlib/WeakType.lean @@ -4,6 +4,8 @@ import Carleson.ToMathlib.Order.ConditionallyCompleteLattice.Basic import Mathlib.Analysis.SpecialFunctions.ImproperIntegrals import Mathlib.Analysis.SpecialFunctions.Pow.Integral +/-! # Distribution functions and weak-type operator estimates -/ + -- Upstreaming status: all of this should go into mathlib, eventually. -- Most lemmas have the right form, but proofs can often be golfed. -- Some enorm lemmas require some mathlib refactoring first, so they can be unified with their @@ -45,11 +47,11 @@ lemma distribution_mono_right (h : t ≤ s) : distribution f s μ ≤ distributi lemma distribution_mono_right' : Antitone (fun t ↦ distribution f t μ) := fun _ _ h ↦ distribution_mono_right h -@[measurability, fun_prop] +@[fun_prop] lemma distribution_measurable₀ : Measurable (fun t ↦ distribution f t μ) := Antitone.measurable (distribution_mono_right' (f := f) (μ := μ)) -@[measurability, fun_prop] +@[fun_prop] lemma distribution_measurable {g : α' → ℝ≥0∞} (hg : Measurable g) : Measurable (fun y : α' ↦ distribution f (g y) μ) := by fun_prop @@ -147,14 +149,15 @@ lemma continuousWithinAt_distribution (t₀ : ℝ≥0∞) : rw [db_zero] at h₂ change Icc 0 ε (distribution f z μ) rw [nonpos_iff_eq_zero.mp h₂] - exact ⟨zero_le 0, zero_le ε⟩ + exact ⟨zero_le, zero_le⟩ -- Case: 0 < distribution f t₀ μ · obtain ⟨n, wn⟩ := select_neighborhood_distribution t₀ _ (ENNReal.sub_lt_self db_not_top.ne_top db_not_zero.ne' ε_gt_0.ne') use Iio (t₀ + (↑n)⁻¹) constructor - · exact Iio_mem_nhds (lt_add_right t₀nottop.ne_top (ENNReal.inv_ne_zero.mpr (by finiteness))) + · exact Iio_mem_nhds + (lt_add_right t₀nottop.ne_top (ENNReal.inv_ne_zero.mpr (by finiteness))) · refine ⟨Ioi t₀, by simp, fun z h ↦ ⟨?_, ?_⟩⟩ · calc distribution f t₀ μ - ε @@ -172,27 +175,27 @@ lemma distribution_pow (ε : Type*) [SeminormedRing ε] [NormOneClass ε] [NormM distribution (f ^ n) (t ^ n) μ = distribution f t μ := by simp_rw [distribution, Pi.pow_apply] refine congrArg μ <| ext fun x ↦ ⟨fun hx ↦ ?_, fun hx ↦ ?_⟩ - · rw [mem_setOf_eq, enorm_pow (f x) n] at hx; simpa using lt_of_pow_lt_pow_left' n hx - · rw [mem_setOf_eq, enorm_pow (f x) n]; exact ENNReal.pow_right_strictMono hn hx + · rw [mem_ofPred_eq, enorm_pow (f x) n] at hx; simpa using lt_of_pow_lt_pow_left' n hx + · rw [mem_ofPred_eq, enorm_pow (f x) n]; exact ENNReal.pow_right_strictMono hn hx section distribution variable {ε' : Type*} [ENorm ε'] {f : α → ε} {g : α → ε'} -@[gcongr] +@[gcongr only] lemma distribution_mono_left (h : ∀ᵐ x ∂μ, ‖f x‖ₑ ≤ ‖g x‖ₑ) : distribution f t μ ≤ distribution g t μ := by have h₀ : {x | t < ‖f x‖ₑ} \ {x | t < ‖g x‖ₑ} ⊆ {x | ¬‖f x‖ₑ ≤ ‖g x‖ₑ} := fun x ↦ by - simp_rw [mem_diff, mem_setOf_eq, not_lt, not_le, and_imp] + simp_rw [Set.mem_sdiff, mem_ofPred_eq, not_lt, not_le, and_imp] intro i₁ i₂; simpa using i₂.trans_lt i₁ calc _ ≤ μ ({x | t < ‖f x‖ₑ} ∩ {x | t < ‖g x‖ₑ}) - + μ ({x | t < ‖f x‖ₑ} \ {x | t < ‖g x‖ₑ}) := measure_le_inter_add_diff μ _ _ + + μ ({x | t < ‖f x‖ₑ} \ {x | t < ‖g x‖ₑ}) := measure_le_inter_add_sdiff μ _ _ _ = μ ({x | t < ‖f x‖ₑ} ∩ {x | t < ‖g x‖ₑ}) := by rw [measure_mono_null h₀ h, add_zero] _ ≤ _ := by apply measure_mono; simp -@[gcongr] +@[gcongr only] lemma distribution_mono (h₁ : ∀ᵐ x ∂μ, ‖f x‖ₑ ≤ ‖g x‖ₑ) (h₂ : t ≤ s) : distribution f s μ ≤ distribution g t μ := (distribution_mono_left h₁).trans (distribution_mono_right h₂) @@ -211,7 +214,7 @@ lemma distribution_add_le {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε] { calc _ ≤ μ ({x | t < ‖f x‖ₑ} ∪ {x | s < ‖g x‖ₑ}) := by refine measure_mono fun x h ↦ ?_ - simp only [mem_union, mem_setOf_eq, Pi.add_apply] at h ⊢ + simp only [mem_union, mem_ofPred_eq, Pi.add_apply] at h ⊢ contrapose! h exact (enorm_add_le _ _).trans (add_le_add h.1 h.2) _ ≤ _ := measure_union_le _ _ @@ -225,7 +228,7 @@ lemma distribution_zero_enorm {f : α → ε} (h : enorm ∘ f =ᵐ[μ] 0) : _ ≤ μ {x | 0 < ‖f x‖ₑ} := by apply measure_mono intro x hx - simp only [Set.mem_setOf_eq] at hx + simp only [Set.mem_ofPred_eq] at hx exact pos_of_gt hx _ = μ {x | ‖f x‖ₑ ≠ 0} := by congr @@ -234,14 +237,17 @@ lemma distribution_zero_enorm {f : α → ε} (h : enorm ∘ f =ᵐ[μ] 0) : _ = 0 := by exact ae_iff.mp h -lemma distribution_zero {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε] {f : α → ε} (h : f =ᵐ[μ] 0) : +lemma distribution_zero {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε] {f : α → ε} + (h : f =ᵐ[μ] 0) : distribution f t μ = 0 := by apply distribution_zero_enorm simp only [EventuallyEq, comp_apply, Pi.ofNat_apply] filter_upwards [h] with x hx using (by simp [hx]) -lemma distribution_indicator_const {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε] {s : Set α} {a : ε} : - distribution (s.indicator (Function.const α a)) t μ = (Set.Iio ‖a‖ₑ).indicator (fun _ ↦ μ s) t := by +lemma distribution_indicator_const {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε] + {s : Set α} {a : ε} : + distribution (s.indicator (Function.const α a)) t μ = + (Set.Iio ‖a‖ₑ).indicator (fun _ ↦ μ s) t := by unfold distribution indicator split_ifs with h · simp only [const_apply] @@ -257,12 +263,12 @@ lemma distribution_indicator_const {ε} [TopologicalSpace ε] [ESeminormedAddMon exfalso exact ENNReal.not_lt_zero h'' · intro hx - rwa [ite_cond_eq_true] + rwa [ite_eq_left_of_eq_true] simpa only [eq_iff_iff, iff_true] · convert measure_empty (μ := μ) apply eq_empty_of_subset_empty intro x - simp only [const_apply, mem_setOf_eq, mem_empty_iff_false, imp_false, not_lt] + simp only [const_apply, mem_ofPred_eq, mem_empty_iff_false, imp_false, not_lt] split_ifs · simp only [mem_Iio, not_lt] at h exact h @@ -272,12 +278,10 @@ lemma distribution_eq_zero_iff {ε} [TopologicalSpace ε] [ESeminormedAddMonoid distribution f t μ = 0 ↔ eLpNormEssSup f μ ≤ t := by rw [distribution, eLpNormEssSup] rw [← compl_compl {x | t < ‖f x‖ₑ}, ← mem_ae_iff, compl_def] - simp only [mem_setOf_eq, not_lt] + simp only [mem_ofPred_eq, not_lt] constructor · intro h - apply essSup_le_of_ae_le - filter_upwards [h] - simp + exact essSup_le_of_ae_le t h · rw [essSup] intro h rw [← Filter.Eventually] @@ -301,7 +305,7 @@ lemma distribution_add {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε] {f g rw [← measure_union₀] · congr 1 ext x - simp only [Pi.add_apply, mem_setOf_eq, mem_union] + simp only [Pi.add_apply, mem_ofPred_eq, mem_union] rcases (@or_not (x ∈ support f)) with hxf | hxf · have := disjoint_left.mp h hxf simp only [mem_support, ne_eq, not_not] at this @@ -314,14 +318,14 @@ lemma distribution_add {ε} [TopologicalSpace ε] [ESeminormedAddMonoid ε] {f g · apply Disjoint.aedisjoint apply disjoint_of_subset _ _ h · intro x - simp only [mem_setOf_eq, mem_support, ne_eq] + simp only [mem_ofPred_eq, mem_support, ne_eq] intro h' have := LT.lt.ne_bot h' rw [ENNReal.bot_eq_zero] at this contrapose! this rw [this, enorm_zero] · intro x - simp only [mem_setOf_eq, mem_support, ne_eq] + simp only [mem_ofPred_eq, mem_support, ne_eq] intro h' have := LT.lt.ne_bot h' rw [ENNReal.bot_eq_zero] at this @@ -342,11 +346,12 @@ lemma distribution_indicator_add_of_support_subset {ε} [TopologicalSpace ε] [E (enorm_add : ∀ a b : ε, ‖a + b‖ₑ = ‖a‖ₑ + ‖b‖ₑ) --TODO: new type class for this property? {f : α → ε} {c : ε} (hc : ‖c‖ₑ ≠ ⊤) {s : Set α} (hfs : Function.support f ⊆ s) : - distribution (f + s.indicator (Function.const α c)) t μ = if t < ‖c‖ₑ then μ s else distribution f (t - ‖c‖ₑ) μ := by + distribution (f + s.indicator (Function.const α c)) t μ = + if t < ‖c‖ₑ then μ s else distribution f (t - ‖c‖ₑ) μ := by unfold distribution split_ifs with ht · congr 1 with x - simp only [Pi.add_apply, mem_setOf_eq] + simp only [Pi.add_apply, mem_ofPred_eq] constructor · intro h contrapose! h @@ -357,11 +362,11 @@ lemma distribution_indicator_add_of_support_subset {ε} [TopologicalSpace ε] [E unfold indicator rw [enorm_add, add_comm] split_ifs - apply lt_add_of_lt_of_nonneg _ (zero_le _) + apply lt_add_of_lt_of_nonneg _ (zero_le) simpa [h] · push Not at ht congr 1 with x - simp only [Pi.add_apply, mem_setOf_eq] + simp only [Pi.add_apply, mem_ofPred_eq] rw [enorm_add, ENNReal.sub_lt_iff_lt_right hc ht] constructor · intro h @@ -411,9 +416,9 @@ lemma wnorm'_zero (f : α → ε) (μ : Measure α) : wnorm' f 0 μ = ∞ := by lemma wnorm'_toReal_le {f : α → ℝ≥0∞} {p : ℝ} (hp : 0 ≤ p) : wnorm' (ENNReal.toReal ∘ f) p μ ≤ wnorm' f p μ := by - refine iSup_mono fun x ↦ ?_ - gcongr - simp + refine iSup_mono fun threshold ↦ ?_ + exact mul_le_mul_right + (ENNReal.rpow_le_rpow distribution_toReal_le (inv_nonneg.mpr hp)) _ lemma wnorm'_toReal_eq {f : α → ℝ≥0∞} {p : ℝ} (hf : ∀ᵐ x ∂μ, f x ≠ ∞) : wnorm' (ENNReal.toReal ∘ f) p μ = wnorm' f p μ := by @@ -455,8 +460,8 @@ lemma wnorm'_mono_enorm_ae {ε' : Type*} [ENorm ε'] {f : α → ε} {g : α → intro t calc _ _ ≤ ↑t * distribution g (↑t) μ ^ p⁻¹ := by - gcongr - assumption + exact mul_le_mul_right + (ENNReal.rpow_le_rpow (distribution_mono_left h) (inv_nonneg.mpr hp)) _ apply le_iSup _ t lemma wnorm_mono_enorm_ae {ε' : Type*} [ENorm ε'] {f : α → ε} {g : α → ε'} @@ -511,14 +516,14 @@ theorem wnorm_indicator_const {ε} [TopologicalSpace ε] [ESeminormedAddMonoid intro b hb use ‖a‖ₑ.toNNReal / 2 simp only [ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true, coe_div, coe_ofNat] - rwa [ENNReal.coe_toNNReal ha', indicator, ite_cond_eq_true, ENNReal.top_rpow_of_pos hp, ENNReal.mul_top] + rwa [ENNReal.coe_toNNReal ha', indicator, ite_eq_left_of_eq_true, + ENNReal.top_rpow_of_pos hp, ENNReal.mul_top] · simpa · simp only [mem_Iio, eq_iff_iff, iff_true] apply ENNReal.div_lt_of_lt_mul' nth_rw 1 [← one_mul ‖a‖ₑ] gcongr - · exact ha' - · norm_num + norm_num apply le_of_forall_lt_imp_le_of_dense intro c hc apply le_iSup_of_le (c / (μ s ^ p.toReal⁻¹)).toNNReal @@ -530,7 +535,7 @@ theorem wnorm_indicator_const {ε} [TopologicalSpace ε] [ESeminormedAddMonoid contradiction · rw [hc.1] exact le_top - rw [indicator_apply, ite_cond_eq_true, ENNReal.coe_toNNReal hc', ENNReal.div_mul_cancel] + rw [indicator_apply, ite_eq_left_of_eq_true, ENNReal.coe_toNNReal hc', ENNReal.div_mul_cancel] · simp only [ne_eq, ENNReal.rpow_eq_zero_iff, inv_pos, inv_neg'', not_or, not_and, not_lt, toReal_nonneg, implies_true, and_true] intro h @@ -551,7 +556,8 @@ def MemWLp [TopologicalSpace ε] (f : α → ε) (p : ℝ≥0∞) (μ : Measure lemma MemWLp_zero [TopologicalSpace ε] : ¬ MemWLp f 0 μ := by simp [MemWLp, wnorm_zero] -lemma MemWLp.aeStronglyMeasurable [TopologicalSpace ε] (hf : MemWLp f p μ) : AEStronglyMeasurable f μ := hf.1 +lemma MemWLp.aeStronglyMeasurable [TopologicalSpace ε] (hf : MemWLp f p μ) : + AEStronglyMeasurable f μ := hf.1 lemma MemWLp.wnorm_lt_top [TopologicalSpace ε] (hf : MemWLp f p μ) : wnorm f p μ < ⊤ := hf.2 @@ -572,18 +578,18 @@ theorem MemWLp.ae_ne_top [TopologicalSpace ε] (hf : MemWLp f p μ) : ∀ᵐ x set A := {x | ‖f x‖ₑ = ∞} with hA simp only [MemWLp, wnorm, wnorm', hp_inf] at hf rw [Filter.eventually_iff, mem_ae_iff] - simp only [ne_eq, compl_def, mem_setOf_eq, Decidable.not_not, ← hA] + simp only [ne_eq, compl_def, mem_ofPred_eq, Decidable.not_not, ← hA] have hp_toReal_zero := toReal_ne_zero.mpr ⟨hp_zero, hp_inf⟩ have h1 (t : ℝ≥0) : μ A ≤ distribution f t μ := by refine μ.mono ?_ - simp_all only [setOf_subset_setOf, coe_lt_top, implies_true, A] + simp_all only [ofPred_subset_ofPred, coe_lt_top, implies_true, A] set C := ⨆ t : ℝ≥0, t * distribution f t μ ^ p.toReal⁻¹ by_cases hC_zero : C = 0 · simp only [ENNReal.iSup_eq_zero, mul_eq_zero, ENNReal.rpow_eq_zero_iff, inv_neg'', C] at hC_zero specialize hC_zero 1 simp only [one_ne_zero, ENNReal.coe_one, toReal_nonneg.not_gt, and_false, or_false, false_or] at hC_zero - exact measure_mono_null (setOf_subset_setOf.mpr fun x hx => hx ▸ one_lt_top) hC_zero.1 + exact measure_mono_null (ofPred_subset_ofPred.mpr fun x hx => hx ▸ one_lt_top) hC_zero.1 by_contra h have h2 : C < ∞ := by aesop have h3 (t : ℝ≥0) : distribution f t μ ≤ (C / t) ^ p.toReal := by @@ -620,10 +626,9 @@ lemma distribution_le [MeasurableSpace ε] [OpensMeasurableSpace ε] apply (mul_le_iff_le_inv hc hc_top).mp simp_rw [distribution, ← setLIntegral_one, ← lintegral_const_mul' _ _ hc_top, mul_one] refine le_trans (lintegral_mono_ae ?_) (setLIntegral_le_lintegral _ _) - simp only [Filter.Eventually, ae, mem_ofCountableUnion] - rw [Measure.restrict_apply₀'] - · convert measure_empty (μ := μ); ext; simpa using le_of_lt - · exact hf.enorm.nullMeasurableSet_preimage measurableSet_Ioi + filter_upwards [ae_restrict_mem₀ + (hf.enorm.nullMeasurableSet_preimage measurableSet_Ioi)] with point hpoint + exact le_of_lt hpoint lemma wnorm'_le_eLpNorm' (hf : AEStronglyMeasurable f μ) {p : ℝ} (p0 : 0 < p) : wnorm' f p μ ≤ eLpNorm' f p μ := by @@ -642,9 +647,9 @@ lemma wnorm'_le_eLpNorm' (hf : AEStronglyMeasurable f μ) {p : ℝ} (p0 : 0 < p) lemma distribution_lt_top (hf : MemLp f p μ) (p_pos : 0 < p) (p_ne_top : p ≠ ∞) {t : ℝ≥0} (ht : 0 < t) : distribution f t μ < ∞ := by - have := wnorm'_le_eLpNorm' hf.1 (toReal_pos p_pos.ne' p_ne_top) - rw [← eLpNorm_eq_eLpNorm' p_pos.ne' p_ne_top] at this - have := this.trans_lt hf.2 + have := wnorm'_le_eLpNorm' hf.aestronglyMeasurable (toReal_pos p_pos.ne' p_ne_top) + rw [← eLpNorm_eq_eLpNorm' p_pos.ne' p_ne_top hf.aestronglyMeasurable] at this + have := this.trans_lt hf rw [wnorm', iSup_lt_iff] at this rcases this with ⟨b,b_lt_top, h⟩ have := (h t).trans_lt b_lt_top @@ -656,18 +661,19 @@ lemma distribution_lt_top (hf : MemLp f p μ) (p_pos : 0 < p) (p_ne_top : p ≠ · rw [ENNReal.coe_eq_zero] at t_zero exfalso exact ht.ne' t_zero - · rw [ENNReal.rpow_eq_zero_iff_of_pos (by simp only [inv_pos]; exact toReal_pos p_pos.ne' p_ne_top)] at h + · rw [ENNReal.rpow_eq_zero_iff_of_pos + (by simp only [inv_pos]; exact toReal_pos p_pos.ne' p_ne_top)] at h rw [h] simp only [zero_lt_top] lemma wnorm_le_eLpNorm (hf : AEStronglyMeasurable f μ) {p : ℝ≥0∞} (hp : 0 < p) : wnorm f p μ ≤ eLpNorm f p μ := by by_cases h : p = ⊤ - · simp [h, wnorm, eLpNorm] - · simpa [h, wnorm, eLpNorm, hp.ne'] using wnorm'_le_eLpNorm' hf (toReal_pos hp.ne' h) + · simp [h, wnorm, eLpNorm, hf] + · simpa [h, wnorm, eLpNorm, hp.ne', hf] using wnorm'_le_eLpNorm' hf (toReal_pos hp.ne' h) lemma MemLp.memWLp (hp : 0 < p) (hf : MemLp f p μ) : MemWLp f p μ := - ⟨hf.1, wnorm_le_eLpNorm hf.1 hp |>.trans_lt hf.2⟩ + ⟨hf.aestronglyMeasurable, wnorm_le_eLpNorm hf.aestronglyMeasurable hp |>.trans_lt hf⟩ end ContinuousENorm @@ -717,7 +723,7 @@ variable [TopologicalSpace ε₁] [ContinuousENorm ε₁] [TopologicalSpace ε lemma HasWeakType.memWLp (h : HasWeakType T p p' μ ν c) (hf₁ : MemLp f₁ p μ) (hc : c < ⊤ := by finiteness) : MemWLp (T f₁) p' ν := - ⟨(h f₁ hf₁).1, h f₁ hf₁ |>.2.trans_lt <| mul_lt_top hc hf₁.2⟩ + ⟨(h f₁ hf₁).1, h f₁ hf₁ |>.2.trans_lt <| mul_lt_top hc hf₁⟩ lemma HasWeakType.toReal {T : (α → ε₁) → (α' → ℝ≥0∞)} (h : HasWeakType T p p' μ ν c) : HasWeakType (T · · |>.toReal) p p' μ ν c := @@ -746,7 +752,7 @@ lemma aestronglyMeasurable_ennreal_toReal_iff {f : α → ℝ≥0∞} rw [toReal_ofReal_preimage (s := s)] split_ifs · exact this - · simp_rw [preimage_diff] + · simp_rw [preimage_sdiff] exact this.diff hf · simp_rw [preimage_union] exact this.union hf @@ -762,7 +768,8 @@ lemma hasWeakType_toReal_iff {T : (α → ε₁) → (α' → ℝ≥0∞)} filter_upwards [hT f hf] with x hx simp [hx] --- lemma comp_left [MeasurableSpace ε₂] {ν' : Measure ε₂} {f : ε₂ → ε₃} (h : HasWeakType T p p' μ ν c) +-- lemma comp_left [MeasurableSpace ε₂] {ν' : Measure ε₂} {f : ε₂ → ε₃} +-- (h : HasWeakType T p p' μ ν c) -- (hf : MemLp f p' ν') : -- HasWeakType (f ∘ T ·) p p' μ ν c := by -- intro u hu @@ -780,7 +787,7 @@ variable [TopologicalSpace ε₁] [ESeminormedAddMonoid ε₁] [TopologicalSpace lemma HasBoundedWeakType.memWLp (h : HasBoundedWeakType T p p' μ ν c) (hf₁ : BoundedFiniteSupport f₁ μ) (hc : c < ⊤ := by finiteness) : MemWLp (T f₁) p' ν := - ⟨(h f₁ hf₁).1, h f₁ hf₁ |>.2.trans_lt <| mul_lt_top hc (hf₁.memLp p).2⟩ + ⟨(h f₁ hf₁).1, h f₁ hf₁ |>.2.trans_lt <| mul_lt_top hc (hf₁.memLp p)⟩ lemma HasWeakType.hasBoundedWeakType (h : HasWeakType T p p' μ ν c) : HasBoundedWeakType T p p' μ ν c := @@ -797,7 +804,7 @@ variable [TopologicalSpace ε₁] [ContinuousENorm ε₁] [TopologicalSpace ε lemma HasStrongType.memLp (h : HasStrongType T p p' μ ν c) (hf₁ : MemLp f₁ p μ) (hc : c < ⊤ := by finiteness) : MemLp (T f₁) p' ν := - ⟨(h f₁ hf₁).1, h f₁ hf₁ |>.2.trans_lt <| mul_lt_top hc hf₁.2⟩ + (h f₁ hf₁).2.trans_lt <| mul_lt_top hc hf₁ lemma HasStrongType.hasWeakType (hp' : 0 < p') (h : HasStrongType T p p' μ ν c) : HasWeakType T p p' μ ν c := @@ -830,7 +837,7 @@ variable [TopologicalSpace ε₁] [ESeminormedAddMonoid ε₁] [TopologicalSpace lemma HasBoundedStrongType.memLp (h : HasBoundedStrongType T p p' μ ν c) (hf₁ : BoundedFiniteSupport f₁ μ) (hc : c < ⊤ := by finiteness) : MemLp (T f₁) p' ν := - ⟨(h f₁ hf₁).1, h f₁ hf₁ |>.2.trans_lt <| mul_lt_top hc (hf₁.memLp _).2⟩ + (h f₁ hf₁).2.trans_lt <| mul_lt_top hc (hf₁.memLp _) lemma HasStrongType.hasBoundedStrongType (h : HasStrongType T p p' μ ν c) : HasBoundedStrongType T p p' μ ν c := @@ -897,7 +904,8 @@ lemma HasStrongType.const_smul [ContinuousConstSMul ℝ≥0 ε'] -- TODO: do we want to unify this lemma with its unprimed version, perhaps using an -- `ENormedSemiring` class? -variable {𝕜 E' : Type*} [NormedRing 𝕜] [NormedAddCommGroup E'] [MulActionWithZero 𝕜 E'] [IsBoundedSMul 𝕜 E'] in +variable {𝕜 E' : Type*} [NormedRing 𝕜] [NormedAddCommGroup E'] [MulActionWithZero 𝕜 E'] + [IsBoundedSMul 𝕜 E'] in lemma HasStrongType.const_smul' {T : (α → ε) → (α' → E')} {c : ℝ≥0∞} (h : HasStrongType T p p' μ ν c) (k : 𝕜) : HasStrongType (k • T) p p' μ ν (‖k‖ₑ * c) := by @@ -1009,12 +1017,13 @@ section NormedGroup variable [NormedAddCommGroup E₁] [NormedSpace 𝕜 E₁] [NormedAddCommGroup E₂] [NormedSpace 𝕜 E₂] [NormedAddCommGroup E₃] [NormedSpace 𝕜 E₃] -lemma _root_.ContinuousLinearMap.distribution_le {f : α → E₁} {g : α → E₂} (L : E₁ →L[𝕜] E₂ →L[𝕜] E₃) : +lemma _root_.ContinuousLinearMap.distribution_le {f : α → E₁} {g : α → E₂} + (L : E₁ →L[𝕜] E₂ →L[𝕜] E₃) : distribution (fun x ↦ L (f x) (g x)) (‖L‖ₑ * t * s) μ ≤ distribution f t μ + distribution g s μ := by have h₀ : {x | ‖L‖ₑ * t * s < ‖(fun x ↦ (L (f x)) (g x)) x‖ₑ} ⊆ {x | t < ‖f x‖ₑ} ∪ {x | s < ‖g x‖ₑ} := fun z hz ↦ by - simp only [mem_union, mem_setOf_eq] at hz ⊢ + simp only [mem_union, mem_ofPred_eq] at hz ⊢ contrapose! hz calc ‖(L (f z)) (g z)‖ₑ ≤ ‖L‖ₑ * ‖f z‖ₑ * ‖g z‖ₑ := by calc @@ -1034,7 +1043,8 @@ variable [TopologicalSpace ε] [ContinuousENorm ε] /-- The layer-cake theorem, or Cavalieri's principle for functions into a space with a continuous enorm. -/ -lemma lintegral_norm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasurable f μ) {p : ℝ} (hp : 0 < p) : +lemma lintegral_norm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasurable f μ) {p : ℝ} + (hp : 0 < p) : ∫⁻ x, ‖f x‖ₑ ^ p ∂μ = ∫⁻ t in Ioi (0 : ℝ), ENNReal.ofReal (p * t ^ (p - 1)) * distribution f (.ofReal t) μ := by have := lintegral_rpow_eq_lintegral_meas_lt_mul μ (f := fun x ↦ ENNReal.toReal ‖f x‖ₑ) @@ -1048,7 +1058,7 @@ lemma lintegral_norm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasura · apply lintegral_congr_ae rw [Filter.eventuallyEq_iff_exists_mem] use {x | ‖f x‖ₑ ≠ ∞} - rw [mem_ae_iff, compl_setOf] + rw [mem_ae_iff, compl_ofPred] simp only [ne_eq, Decidable.not_not] use ae_finite intro x hx @@ -1059,9 +1069,9 @@ lemma lintegral_norm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasura dsimp only congr 1 symm - apply measure_eq_measure_of_null_diff + apply measure_eq_measure_of_null_sdiff · intro x hx - simp only [mem_setOf_eq] at * + simp only [mem_ofPred_eq] at * rwa [ofReal_lt_iff_lt_toReal ht.le] by_contra hfx rw [hfx] at hx @@ -1070,10 +1080,8 @@ lemma lintegral_norm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasura dsimp [sdiff, Set.diff] apply measure_mono_null _ ae_finite intro x hx - dsimp only [mem_setOf_eq] at * by_contra hf_top - rw [ofReal_lt_iff_lt_toReal ht.le hf_top] at hx - exact hx.2 hx.1 + exact hx.2 ((ofReal_lt_iff_lt_toReal ht.le hf_top).mp hx.1) · rw [lintegral_eq_top_of_measure_eq_top_ne_zero] · symm rw [← enorm_pos] at ae_finite @@ -1101,11 +1109,12 @@ lemma lintegral_norm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasura exact ae_finite /-- The layer-cake theorem, or Cavalieri's principle, written using `eLpNorm`. -/ -lemma eLpNorm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasurable f μ) {p : ℝ≥0} (hp : 0 < p) : +lemma eLpNorm_pow_eq_distribution {f : α → ε} (hf : AEStronglyMeasurable f μ) {p : ℝ≥0} + (hp : 0 < p) : eLpNorm f p μ ^ (p : ℝ) = ∫⁻ t in Ioi (0 : ℝ), p * ENNReal.ofReal (t ^ ((p : ℝ) - 1)) * distribution f (.ofReal t) μ := by have h2p : 0 < (p : ℝ) := hp - simp_rw [eLpNorm_nnreal_eq_eLpNorm' hp.ne', eLpNorm', one_div, ← ENNReal.rpow_mul, + simp_rw [eLpNorm_nnreal_eq_eLpNorm' hp.ne' hf, eLpNorm', one_div, ← ENNReal.rpow_mul, inv_mul_cancel₀ h2p.ne', ENNReal.rpow_one, lintegral_norm_pow_eq_distribution hf h2p, ENNReal.ofReal_mul zero_le_coe, ofReal_coe_nnreal] @@ -1115,17 +1124,15 @@ lemma eLpNorm_eq_distribution {f : α → ε} (hf : AEStronglyMeasurable f μ) { eLpNorm f (.ofReal p) μ = (ENNReal.ofReal p * ∫⁻ t in Ioi (0 : ℝ), distribution f (.ofReal t) μ * ENNReal.ofReal (t ^ (p - 1)) ) ^ p⁻¹ := by - unfold eLpNorm - split_ifs with sgn_p sz_p - · exact False.elim (not_le_of_gt hp (ofReal_eq_zero.mp sgn_p)) - · exact False.elim (coe_ne_top sz_p) - · unfold eLpNorm' - rw [toReal_ofReal hp.le, one_div] - congr 1 - rw [← lintegral_const_mul' _ _ (by finiteness), lintegral_norm_pow_eq_distribution hf hp] - congr 1 with x; rw [ofReal_mul] <;> [ring; positivity] - -lemma lintegral_pow_mul_distribution {f : α → ε} (hf : AEStronglyMeasurable f μ) {p : ℝ} (hp : -1 < p) : + rw [eLpNorm_eq_eLpNorm' (ENNReal.ofReal_pos.mpr hp).ne' ENNReal.ofReal_ne_top hf] + unfold eLpNorm' + rw [toReal_ofReal hp.le, one_div] + congr 1 + rw [← lintegral_const_mul' _ _ (by finiteness), lintegral_norm_pow_eq_distribution hf hp] + congr 1 with point; rw [ofReal_mul] <;> [ring; positivity] + +lemma lintegral_pow_mul_distribution {f : α → ε} (hf : AEStronglyMeasurable f μ) {p : ℝ} + (hp : -1 < p) : ∫⁻ t in Ioi (0 : ℝ), ENNReal.ofReal (t ^ p) * distribution f (.ofReal t) μ = ENNReal.ofReal (p + 1)⁻¹ * ∫⁻ x, ‖f x‖ₑ ^ (p + 1) ∂μ := by have h2p : 0 < p + 1 := by linarith diff --git a/Carleson/TwoSidedCarleson/Basic.lean b/Carleson/TwoSidedCarleson/Basic.lean index 13df8e0..e1d1620 100644 --- a/Carleson/TwoSidedCarleson/Basic.lean +++ b/Carleson/TwoSidedCarleson/Basic.lean @@ -1,6 +1,8 @@ import Carleson.Calculations import Carleson.ToMathlib.MeasureTheory.Integral.IntegrableOn +/-! # The two-sided Calderon–Zygmund operator -/ + open MeasureTheory Set Metric Function Topology NNReal ENNReal variable {X : Type*} {a : ℕ} [MetricSpace X] [DoublingMeasure X (defaultA a : ℕ)] @@ -20,7 +22,7 @@ lemma czOperator_bound {g : X → ℂ} (hg : BoundedFiniteSupport g) (hr : 0 < r · let M1 := (C_K a / volume (ball x r)).toNNReal let M2 := (eLpNorm g ∞).toNNReal have : { y | ¬‖K x y * g y‖ ≤ M0} ⊆ { y | ¬‖K x y‖ ≤ M1 ∨ ¬‖g y‖ ≤ M2} := by - rw [setOf_subset_setOf] + rw [ofPred_subset_ofPred] intro y contrapose! intro hy @@ -33,7 +35,8 @@ lemma czOperator_bound {g : X → ℂ} (hg : BoundedFiniteSupport g) (hr : 0 < r rw [← toNNReal_mul] rw [← Measure.restrict_apply₀'] · apply measure_mono_null_ae this.eventuallyLE - rw [setOf_or] + change (volume.restrict (ball x r)ᶜ) + ({y | ¬‖K x y‖ ≤ M1} ∪ {y | ¬‖g y‖ ≤ M2}) = 0 apply measure_union_null · rw [← ae_iff] apply ae_restrict_of_forall_mem measurableSet_ball.compl @@ -43,7 +46,8 @@ lemma czOperator_bound {g : X → ℂ} (hg : BoundedFiniteSupport g) (hr : 0 < r · apply enorm_K_le_ball_complement hy · exact (div_lt_top coe_ne_top ((measure_ball_pos volume x hr).ne.symm)).ne · simp_rw [← ae_iff, M2, ← ENNReal.toReal.eq_1, ← toReal_enorm, - (ENNReal.toReal_le_toReal enorm_lt_top.ne (hg.eLpNorm_lt_top).ne), eLpNorm_exponent_top] + (ENNReal.toReal_le_toReal enorm_lt_top.ne (hg.eLpNorm_lt_top).ne), + eLpNorm_exponent_top hg.aestronglyMeasurable] apply ae_restrict_of_ae ae_le_eLpNormEssSup · exact measurableSet_ball.compl.nullMeasurableSet · exact measurableSet_ball.compl.nullMeasurableSet @@ -101,7 +105,7 @@ lemma czOperator_welldefined {g : X → ℂ} (hg : BoundedFiniteSupport g) (hr : rw [← inter_assoc] refine Eq.symm (left_eq_inter.mpr ?_) · apply inter_subset_left.trans - apply setOf_subset.mpr + apply ofPred_subset.mpr apply tmp_Kxg rw [← Measure.restrict_apply₀' (by measurability), ← ae_iff] exact hM @@ -118,7 +122,8 @@ lemma czOperator_welldefined {g : X → ℂ} (hg : BoundedFiniteSupport g) (hr : · exact support_mul_subset_right (K x) g -- This could be adapted to state T_r is a linear operator but maybe it's not worth the effort -lemma czOperator_sub {f g : X → ℂ} (hf : BoundedFiniteSupport f) (hg : BoundedFiniteSupport g) (hr : 0 < r) : +lemma czOperator_sub {f g : X → ℂ} (hf : BoundedFiniteSupport f) + (hg : BoundedFiniteSupport g) (hr : 0 < r) : czOperator K r (f - g) = czOperator K r f - czOperator K r g := by ext x unfold czOperator diff --git a/Carleson/TwoSidedCarleson/WeakCalderonZygmund.lean b/Carleson/TwoSidedCarleson/WeakCalderonZygmund.lean index 50aab7b..b9ec606 100644 --- a/Carleson/TwoSidedCarleson/WeakCalderonZygmund.lean +++ b/Carleson/TwoSidedCarleson/WeakCalderonZygmund.lean @@ -2,6 +2,10 @@ import Mathlib.Analysis.Normed.Group.Basic import Carleson.ToMathlib.HardyLittlewood import Carleson.TwoSidedCarleson.Basic +/-! ## Section 10.2 and Lemma 10.0.3 + +Question: -/ + open MeasureTheory Set Bornology Function Metric Filter Topology open ENNReal hiding one_lt_two open scoped NNReal @@ -24,10 +28,6 @@ variable {F G : Set X} variable {K : X → X → ℂ} {x x' : X} [IsTwoSidedKernel a K] variable {f : X → ℂ} {α : ℝ≥0∞} -/-! ## Section 10.2 and Lemma 10.0.3 - -Question: -/ - /-- The constant used in `nontangential_from_simple`. I(F) think the constant needs to be fixed in the blueprint. -/ irreducible_def C10_2_1 (a : ℕ) : ℝ≥0 := 2 ^ (4 * a) @@ -150,7 +150,7 @@ lemma depth_lt_iff_not_disjoint {d : ℝ} : simp_rw [depth, iSup_lt_iff, iSup_le_iff] at hd; obtain ⟨d', ld', hd'⟩ := hd have ns := (hd' d.toNNReal).mt; rw [not_le] at ns; specialize ns ld' rw [not_subset_iff_exists_mem_notMem] at ns; obtain ⟨y, my, ny⟩ := ns - have pd := (zero_le _).trans_lt ld' + have pd := zero_le.trans_lt ld' rw [ofReal_pos] at pd; replace pd := Real.coe_toNNReal d pd.le rw [pd] at my; exact not_disjoint_iff.mpr ⟨y, my, ny⟩ mpr hd := by @@ -185,7 +185,7 @@ lemma depth_lt_top_iff_ne_univ : depth O x < ⊤ ↔ O ≠ univ := by constructor <;> intro h · contrapose! h; simp_rw [top_le_iff, depth, iSup₂_eq_top, h, subset_univ, exists_const] intro r rlt; lift r to ℝ≥0 using rlt.ne - use r + 1; exact coe_lt_coe_of_lt (lt_add_one r) + use r + 1; exact coe_lt_coe.mpr (lt_add_one r) · obtain ⟨p, np⟩ := (ne_univ_iff_exists_notMem _).mp h calc _ ≤ edist x p := by @@ -271,8 +271,10 @@ lemma depth_bound_3 (hO : O ≠ univ) (h : x ∈ ball y (3 * ((depth O y).toReal gcongr; rw [edist_dist]; apply ofReal_le_of_le_toReal rw [toReal_div, toReal_ofNat]; linarith calc - _ ≤ (2 * depth O x).toReal / 6 + 3 * ((depth O y).toReal / 6) := by gcongr; have := @dnt x; finiteness - _ ≤ (2 * depth O x).toReal / 6 + 3 * ((2 * depth O x).toReal / 6) := by gcongr; have := @dnt x; finiteness + _ ≤ (2 * depth O x).toReal / 6 + 3 * ((depth O y).toReal / 6) := by + gcongr; have := @dnt x; finiteness + _ ≤ (2 * depth O x).toReal / 6 + 3 * ((2 * depth O x).toReal / 6) := by + gcongr; have := @dnt x; finiteness _ = _ := by rw [toReal_mul, toReal_ofNat]; ring lemma ball_covering_bounded_intersection @@ -299,7 +301,7 @@ lemma ball_covering_bounded_intersection apply measure_ball_two_le_same_iterate _ = 2 ^ (3 * a) * volume (⋃ v : V, ball v.1 ((depth O v.1).toReal / 6)) := by have VsU : V ⊆ U := sep_subset .. - haveI : Countable V := by rw [countable_coe_iff]; exact countU.mono VsU + have : Countable V := by rw [countable_coe_iff]; exact countU.mono VsU congr 1 refine (measure_iUnion (fun ⟨v₁, mv₁⟩ ⟨v₂, mv₂⟩ hn ↦ ?_) (fun _ ↦ measurableSet_ball)).symm rw [ne_eq, Subtype.mk.injEq] at hn @@ -320,7 +322,7 @@ lemma ball_covering' (hO : IsOpen O ∧ O ≠ univ) : let W : Set (Set X) := {U | U ⊆ O ∧ U.PairwiseDisjoint fun c ↦ ball c ((depth O c).toReal / 6)} obtain ⟨U, maxU⟩ : ∃ U, Maximal (· ∈ W) U := by refine zorn_subset _ fun U sU cU ↦ ⟨⋃₀ U, ?_, fun _ ↦ subset_sUnion_of_mem⟩ - simp only [W, sUnion_subset_iff, mem_setOf_eq] + simp only [W, sUnion_subset_iff, mem_ofPred_eq] exact ⟨fun u hu ↦ (sU hu).1, (pairwiseDisjoint_sUnion cU.directedOn).2 fun u hu ↦ (sU hu).2⟩ have countU : U.Countable := by refine maxU.1.2.countable_of_isOpen (fun _ _ ↦ isOpen_ball) (fun u mu ↦ ?_) @@ -408,7 +410,7 @@ lemma ball_covering_finite (hO : IsOpen O ∧ O ≠ univ) {U : Set X} {r' : X · exact disjoint_left.mpr fun i mi₁ mi₂ ↦ mi₁.1 mi₂.1 _ = 0 + {u ∈ SetLike.coe U | x ∈ ball u (3 * r' u)}.encard := by congr - · simp_rw [encard_eq_zero, eq_empty_iff_forall_notMem, mem_setOf_eq, not_and]; intro i hi + · simp_rw [encard_eq_zero, eq_empty_iff_forall_notMem, mem_ofPred_eq, not_and]; intro i hi simp [r, hi] · set A := {i | i < U.card ∧ x ∈ ball (c i) (3 * r i)} set B := {u ∈ SetLike.coe U | x ∈ ball u (3 * r' u)} @@ -416,7 +418,7 @@ lemma ball_covering_finite (hO : IsOpen O ∧ O ≠ univ) {U : Set X} {r' : X refine ⟨Subtype.coe_prop _, ?_⟩ have := i.2.2; simp_rw [r, c, i.2.1, dite_true] at this; exact this⟩ let g (u : B) : A := ⟨e ⟨u.1, u.2.1⟩, by - simp_rw [A, r, c, mem_setOf_eq, Fin.is_lt, dite_true, Fin.eta, Equiv.symm_apply_apply, + simp_rw [A, r, c, mem_ofPred_eq, Fin.is_lt, dite_true, Fin.eta, Equiv.symm_apply_apply, u.2.2, true_and]⟩ let eqv : A ≃ B := ⟨f, g, fun i ↦ by simp [f, g], fun u ↦ by simp [f, g]⟩ exact encard_congr eqv @@ -455,9 +457,9 @@ theorem ball_covering (hO : IsOpen O ∧ O ≠ univ) : set B := {u ∈ U | x ∈ ball u (3 * r' u)} let f (i : A) : B := ⟨e.symm i, by refine ⟨Subtype.coe_prop _, ?_⟩ - have := i.2; simp_rw [A, mem_setOf_eq, r, c] at this; exact this⟩ + have := i.2; simp_rw [A, mem_ofPred_eq, r, c] at this; exact this⟩ let g (u : B) : A := ⟨e ⟨u.1, u.2.1⟩, by - simp_rw [A, r, c, mem_setOf_eq, Equiv.symm_apply_apply, u.2.2]⟩ + simp_rw [A, r, c, mem_ofPred_eq, Equiv.symm_apply_apply, u.2.2]⟩ let eqv : A ≃ B := ⟨f, g, fun i ↦ by simp [f, g], fun u ↦ by simp [f, g]⟩ exact encard_congr eqv _ ≤ _ := Ubi x mx @@ -573,17 +575,17 @@ lemma czBall_subset_czPartition {hX : GeneralCase f α} {i : ℕ} : intro r hr rw [mem_ball] at hr unfold czPartition - apply mem_diff_of_mem (by rw [mem_ball]; linarith [dist_nonneg.trans_lt hr]) + apply mem_sdiff_of_mem (by rw [mem_ball]; linarith [dist_nonneg.trans_lt hr]) simp only [mem_union, mem_iUnion, mem_ball, not_or, not_exists, not_lt] refine ⟨?_, fun j hj ↦ by refine le_of_not_gt (disjoint_left.mp (czBall_pairwiseDisjoint ?_ ?_ hj.ne) hr) <;> tauto⟩ unfold czPartition - simp only [mem_diff, mem_ball, mem_union, mem_iUnion, not_or, not_and, not_not] + simp only [Set.mem_sdiff, mem_ball, mem_union, mem_iUnion, not_or, not_and, not_not] exact fun _ _ _ _ ↦ by use i lemma czPartition_subset_czBall3 {hX : GeneralCase f α} {i : ℕ} : czPartition hX i ⊆ czBall3 hX i := by - rw [czPartition]; exact diff_subset + rw [czPartition]; exact sdiff_subset private lemma czPartition_subset_czBall7 {hX : GeneralCase f α} {i : ℕ} : czPartition hX i ⊆ czBall7 hX i := @@ -597,7 +599,7 @@ lemma czPartition_pairwiseDisjoint {hX : GeneralCase f α} : have (t d) (hx : x ∈ czPartition hX t) (hd : t < d) : x ∉ czPartition hX d := by have : czPartition hX t ⊆ ⋃ j < d, czPartition hX j := subset_biUnion_of_mem hd rw [czPartition] - exact notMem_diff_of_mem <| mem_union_left _ (this hx) + exact notMem_sdiff_of_mem <| mem_union_left _ (this hx) have : _ ∧ _ := ⟨this i k hxi |>.mt (· hxk), this k i hxk |>.mt (· hxi)⟩ lia @@ -626,7 +628,7 @@ lemma iUnion_czPartition {hX : GeneralCase f α} : have ⟨t, ht⟩ : ∃ i, x ∈ (⋃ j < i, czPartition hX j) ∪ ⋃ j > i, czBall hX j := by by_contra! hb absurd hp g - rw [czPartition, mem_diff] + rw [czPartition, Set.mem_sdiff] exact ⟨hg, hb g⟩ have : ⋃ j > t, czBall hX j ⊆ ⋃ j > t, czPartition hX j := iUnion₂_mono fun i j ↦ czBall_subset_czPartition (i := i) @@ -647,7 +649,8 @@ private lemma globalMaximalFunction_preimage_finite refine le_trans (setLIntegral_mono_ae ?_ ?_) (setLIntegral_le_lintegral s _) · exact AEStronglyMeasurable.globalMaximalFunction.aemeasurable.pow_const 2 |>.restrict · exact Eventually.of_forall fun x hx ↦ pow_le_pow_left' (le_of_lt <| by simpa [s] using hx) 2 - _ = eLpNorm (globalMaximalFunction volume 1 f) 2 volume := by simp [eLpNorm, eLpNorm'] + _ = eLpNorm (globalMaximalFunction volume 1 f) 2 volume := by + simp [eLpNorm, eLpNorm', AEStronglyMeasurable.globalMaximalFunction] private lemma volume_czPartition_lt_top (hX : GeneralCase f α) (i : ℕ) : volume (czPartition hX i) < ∞ := @@ -760,7 +763,7 @@ lemma aemeasurable_czApproximation {hf : AEMeasurable f} : AEMeasurable (czAppro simpa [czA, hx] using h · exact Or.inl ⟨hx, by simpa [czA, hx, hX] using h⟩ · cases h with - | inl h => simpa [czA, mem_setOf_eq ▸ mem_setOf_eq ▸ h.1] using h.2 + | inl h => simpa [czA, mem_ofPred_eq ▸ mem_ofPred_eq ▸ h.1] using h.2 | inr h => obtain ⟨_, ⟨⟨i, ⟨hi, rfl⟩⟩, hxi⟩⟩ := h have hx : ∃ j, x ∈ czPartition hX j := ⟨i, hxi⟩ simpa [czA, hx, czPartition_pairwiseDisjoint' hx.choose_spec hxi] using hi @@ -782,8 +785,10 @@ protected lemma BoundedFiniteSupport.czApproximation {α : ℝ≥0∞} (hα : 0 by_cases h : Nonempty X; swap · have := not_nonempty_iff.mp h; constructor <;> simp constructor - · use (aemeasurable_czApproximation (hf := aemeasurable hf)).aestronglyMeasurable + · rw [MemLp, eLpNorm_exponent_top + (aemeasurable_czApproximation (hf := hf.aemeasurable)).aestronglyMeasurable] refine lt_of_le_of_lt ?_ hf.eLpNorm_lt_top + rw [eLpNorm_exponent_top hf.aestronglyMeasurable] apply essSup_le_of_ae_le _ <| (ENNReal.ae_le_essSup (‖f ·‖ₑ)).mono (fun x h ↦ ?_) by_cases hX : GeneralCase f α · by_cases hx : ∃ j, x ∈ czPartition hX j @@ -792,7 +797,7 @@ protected lemma BoundedFiniteSupport.czApproximation {α : ℝ≥0∞} (hα : 0 exact (enorm_integral_le_lintegral_enorm _).trans (setLAverage_le_essSup _) · simp [czApproximation, eLpNormEssSup, hX, hx, h] · simp only [czApproximation, hX, reduceDIte] - exact (enorm_integral_le_lintegral_enorm _).trans (laverage_le_essSup _) + exact (enorm_integral_le_lintegral_enorm _).trans (MeasureTheory.laverage_le_essSup _) · by_cases hX : GeneralCase f α; swap · exact lt_of_le_of_lt (measure_mono (subset_univ _)) <| volume_lt_of_not_GeneralCase hf hX hα calc volume (support (czApproximation f α)) @@ -883,16 +888,17 @@ private lemma eLpNorm_czApproximation_le_finite _ ≤ (⨍⁻ x, ‖f x‖ₑ ∂volume) * volume (univ : Set X) := mul_le_mul_left (enorm_integral_le_lintegral_enorm f) _ _ = eLpNorm f 1 volume := by - simp [mul_comm _ (volume univ), eLpNorm, eLpNorm', laverage, ← mul_assoc, + simp [mul_comm _ (volume univ), eLpNorm_one_eq_lintegral_enorm hf.aestronglyMeasurable, + laverage, ← mul_assoc, ENNReal.mul_inv_cancel (NeZero.ne (volume univ)) (volume_lt_of_not_GeneralCase hf hX hα).ne] -- Equation (10.2.18), infinite case -private lemma eLpNorm_czApproximation_le_infinite (hX : GeneralCase f α) : - eLpNorm (czApproximation f α) 1 volume ≤ eLpNorm f 1 volume := by - simp only [eLpNorm, one_ne_zero, reduceIte, one_ne_top, eLpNorm', toReal_one, rpow_one, +private lemma eLpNormFormula_czApproximation_le_infinite (hX : GeneralCase f α) : + eLpNormFormula (czApproximation f α) 1 volume ≤ eLpNormFormula f 1 volume := by + simp only [eLpNormFormula, one_ne_zero, reduceIte, one_ne_top, eLpNorm', toReal_one, rpow_one, ne_eq, not_false_eq_true, div_self] have hmeas : MeasurableSet (univ \ ⋃ i, czPartition hX i) := by measurability - have := union_univ _ ▸ @union_diff_self X (⋃ i, czPartition hX i) univ + have := union_univ _ ▸ @union_sdiff_self X (⋃ i, czPartition hX i) univ repeat rw [← setLIntegral_univ (μ := volume), ← this, lintegral_union hmeas disjoint_sdiff_right, lintegral_iUnion (MeasurableSet.czPartition hX) <| czPartition_pairwise_disjoint_on] -- gcongr tsum ?_ + ?_ @@ -900,10 +906,19 @@ private lemma eLpNorm_czApproximation_le_infinite (hX : GeneralCase f α) : · apply ENNReal.tsum_le_tsum intro _ apply lintegral_czPartition_le - · simp only [union_diff_self, union_univ] + · simp only [union_sdiff_self, union_univ] apply le_of_eq ∘ setLIntegral_congr_fun_ae (by measurability) exact Eventually.of_forall (fun x hx ↦ by simp_all [czApproximation]) +private lemma eLpNorm_czApproximation_le_infinite (hX : GeneralCase f α) : + eLpNorm (czApproximation f α) 1 volume ≤ eLpNorm f 1 volume := by + by_cases hf : AEStronglyMeasurable f volume + · rw [eLpNorm_eq_eLpNormFormula hf, eLpNorm_eq_eLpNormFormula + (aemeasurable_czApproximation (hf := hf.aemeasurable)).aestronglyMeasurable] + exact eLpNormFormula_czApproximation_le_infinite hX + · rw [eLpNorm_of_not_aestronglyMeasurable hf] + exact le_top + /-- Part of Lemma 10.2.5, equation (10.2.18) (both cases). -/ lemma eLpNorm_czApproximation_le {hf : BoundedFiniteSupport f} (hα : 0 < α) : @@ -938,7 +953,9 @@ private lemma ineq_10_2_32 (hf : BoundedFiniteSupport f) {hX : GeneralCase f α} {i : ℕ} : eLpNorm (czRemainder' hX i) 1 volume ≤ 2 * (∫⁻ x in czPartition hX i, ‖f x‖ₑ) := calc _ = ∫⁻ x in czPartition hX i, ‖f x - czApproximation f α x‖ₑ := by - simp [czRemainder', eLpNorm, eLpNorm', enorm_indicator_eq_indicator_enorm, + rw [eLpNorm_one_eq_lintegral_enorm + (AEMeasurable.czRemainder' (hf := hf.aemeasurable) hX i).aestronglyMeasurable] + simp [czRemainder', enorm_indicator_eq_indicator_enorm, lintegral_indicator <| MeasurableSet.czPartition hX i] _ ≤ ∫⁻ x in czPartition hX i, ‖f x‖ₑ + ‖czApproximation f α x‖ₑ := lintegral_mono (fun x ↦ enorm_sub_le) @@ -971,16 +988,22 @@ private lemma eLpNorm_restrict_czRemainder'_le {hf : BoundedFiniteSupport f} {hX {i : ℕ} : ∫⁻ y in czBall3 hX i, ‖czRemainder' hX i y‖ₑ ≤ 2 ^ (2 * a + 1) * α * volume (czBall3 hX i) := by apply le_trans (setLIntegral_le_lintegral _ _) - rw [← eLpNorm_one_eq_lintegral_enorm] + rw [← eLpNorm_one_eq_lintegral_enorm + (AEMeasurable.czRemainder' (hf := hf.aemeasurable) hX i).aestronglyMeasurable] exact eLpNorm_czRemainder'_le (hf := hf) -- Used to prove `eLpNorm_czRemainder_le` and `tsum_eLpNorm_czRemainder_le` private lemma eLpNorm_czRemainder_le' (hf : BoundedFiniteSupport f) (hX : ¬ GeneralCase f α) (hα : ⨍⁻ x, ‖f x‖ₑ < α) : eLpNorm (czRemainder f α) 1 volume ≤ 2 * ∫⁻ x, ‖f x‖ₑ := - have := isFiniteMeasure_of_not_generalCase hf hX (lt_of_le_of_lt (zero_le _) hα) + have := isFiniteMeasure_of_not_generalCase hf hX (lt_of_le_of_lt zero_le hα) calc - _ = ∫⁻ x, ‖f x - ⨍ y, f y‖ₑ := by simp [czRemainder, eLpNorm, eLpNorm', czApproximation, hX] + _ = ∫⁻ x, ‖f x - ⨍ y, f y‖ₑ := by + change eLpNorm (f - czApproximation f α) 1 volume = _ + rw [eLpNorm_one_eq_lintegral_enorm + (hf.aestronglyMeasurable.sub + (aemeasurable_czApproximation (hf := hf.aemeasurable)).aestronglyMeasurable)] + simp [czApproximation, hX] _ ≤ ∫⁻ x, (‖f x‖ₑ + ‖⨍ y, f y‖ₑ) := lintegral_mono (fun x ↦ enorm_sub_le) _ = (∫⁻ x, ‖f x‖ₑ) + ∫⁻ (x : X), ‖⨍ y, f y‖ₑ := lintegral_add_right' _ aemeasurable_const _ ≤ (∫⁻ x, ‖f x‖ₑ) + ∫⁻ (x : X), ⨍⁻ y, ‖f y‖ₑ := by @@ -993,7 +1016,7 @@ lemma eLpNorm_czRemainder_le {hf : BoundedFiniteSupport f} eLpNorm (czRemainder f α) 1 volume ≤ 2 ^ (2 * a + 1) * α * volume (univ : Set X) := by by_cases h : Nonempty X; swap · have := not_nonempty_iff.mp h; simp - have := isFiniteMeasure_of_not_generalCase hf hX (lt_of_le_of_lt (zero_le _) hα) + have := isFiniteMeasure_of_not_generalCase hf hX (lt_of_le_of_lt zero_le hα) calc _ ≤ 2 * ∫⁻ x, ‖f x‖ₑ := eLpNorm_czRemainder_le' hf hX hα _ ≤ 2 * (α * volume (univ : Set X)) := by @@ -1034,13 +1057,15 @@ lemma tsum_eLpNorm_czRemainder'_le {hf : BoundedFiniteSupport f} (hX : GeneralCa simp_rw [← smul_eq_mul, ENNReal.tsum_const_smul] gcongr rw [← lintegral_iUnion (MeasurableSet.czPartition hX) czPartition_pairwise_disjoint_on] - simpa [eLpNorm, eLpNorm'] using (lintegral_mono_set (subset_univ _)) + simpa [eLpNorm_one_eq_lintegral_enorm hf.aestronglyMeasurable] using + (lintegral_mono_set (subset_univ _)) /-- Part of Lemma 10.2.5, equation (10.2.23) (finite case). -/ lemma tsum_eLpNorm_czRemainder_le {hf : BoundedFiniteSupport f} (hX : ¬ GeneralCase f α) (hα : ⨍⁻ x, ‖f x‖ₑ < α) : eLpNorm (czRemainder f α) 1 volume ≤ 2 * eLpNorm f 1 volume := by - simpa [eLpNorm, eLpNorm'] using (eLpNorm_czRemainder_le' hf hX hα) + simpa [eLpNorm_one_eq_lintegral_enorm hf.aestronglyMeasurable] using + (eLpNorm_czRemainder_le' hf hX hα) /- ### Lemmas 10.2.6 - 10.2.9 -/ @@ -1092,7 +1117,7 @@ lemma estimate_good (hf : BoundedFiniteSupport f) (hα : ⨍⁻ x, ‖f x‖ₑ · simp [hα_top, top_div_of_lt_top ENNReal.ofNat_lt_top] have ne0 : (c10_0_3 a : ℝ≥0∞) ≠ 0 := by simp [c10_0_3] have hα' : 0 < α' a α := α'_pos (pos_of_gt hα) - have hα'' := ((zero_le _).trans_lt hα).ne' + have hα'' := (zero_le.trans_lt hα).ne' calc distribution ((czOperator K r (czApproximation f (α' a α)))) (α / 2) volume _ = distribution ((czOperator K r (czApproximation f (α' a α))) ^ 2) ((α / 2) ^ 2) volume := (distribution_pow _ _ _ _ two_pos.ne').symm @@ -1112,8 +1137,11 @@ lemma estimate_good (hf : BoundedFiniteSupport f) (hα : ⨍⁻ x, ‖f x‖ₑ have half_pos : 0 < (2 : ℝ)⁻¹ := by norm_num refine mul_le_mul_right (ENNReal.le_of_rpow_le half_pos ?_) (2 ^ 2 / α ^ 2) rw [ENNReal.mul_rpow_of_nonneg _ _ half_pos.le, ← ENNReal.rpow_natCast_mul] - convert hT _ (hf.czApproximation hα') |>.2 - all_goals simp [eLpNorm, eLpNorm', α'] + have hstrong := (hT _ (hf.czApproximation hα')).2 + rw [eLpNorm_eq_eLpNorm' (by norm_num) (by norm_num) (hT _ (hf.czApproximation hα')).1, + eLpNorm_eq_eLpNorm' (by norm_num) (by norm_num) + (hf.czApproximation hα').aestronglyMeasurable] at hstrong + convert hstrong using 1 <;> simp [eLpNorm', α'] _ ≤ 2^2/α^2 * ((C_Ts a) ^ 2 * ∫⁻ y, 2^(3*a) * c10_0_3 a * α * ‖czApproximation f _ y‖ₑ) := by gcongr _ * (_ * ?_) suffices ∀ᵐ x, ‖czApproximation f (α' a α) x‖ₑ ≤ 2 ^ (3 * a) * c10_0_3 a * α by @@ -1125,7 +1153,9 @@ lemma estimate_good (hf : BoundedFiniteSupport f) (hα : ⨍⁻ x, ‖f x‖ₑ _ = 2^2/α^2 * ((C_Ts a)^2 * (2^(3*a) * c10_0_3 a * α * ∫⁻ y, ‖czApproximation f _ y‖ₑ)) := by rw [lintegral_const_mul' _ _ (by finiteness)] _ ≤ 2 ^ 2 / α ^ 2 * ((C_Ts a) ^ 2 * (2 ^ (3 * a) * c10_0_3 a * α * eLpNorm f 1 volume)) := by - gcongr; simpa [eLpNorm, eLpNorm'] using eLpNorm_czApproximation_le (hf := hf) hα' + gcongr + simpa only [eLpNorm_one_eq_lintegral_enorm (hf.czApproximation hα').aestronglyMeasurable] + using eLpNorm_czApproximation_le (hf := hf) hα' _ = 2 ^ 2 / α^2 * ((C_Ts a) ^ 2 * (2 ^ (3 * a) * c10_0_3 a * α)) * eLpNorm f 1 volume := by ring _ = (2 ^ 2 * (C_Ts a) ^ 2 * 2 ^ (3 * a) * c10_0_3 a * α) / α ^ 2 * eLpNorm f 1 volume := by rw [ENNReal.mul_comm_div, mul_div]; ring_nf @@ -1220,12 +1250,12 @@ private lemma 𝒥₁_bound (hf : BoundedFiniteSupport f) (hα : 0 < α) (hx : x ‖czOperator K r (czRemainder' hX j) x‖ₑ ≤ czOperatorBoundSummand hX j x := calc _ = ‖∫ y in czBall3 hX j, K x y * (czRemainder' hX j y)‖ₑ := by apply congrArg - apply setIntegral_eq_of_subset_of_ae_diff_eq_zero measurableSet_ball.compl.nullMeasurableSet + apply setIntegral_eq_of_subset_of_ae_sdiff_eq_zero measurableSet_ball.compl.nullMeasurableSet · intro y hy - simp only [𝒥₁, mem_setOf_eq, mem_ball, mem_compl_iff] at hj hy ⊢ + simp only [𝒥₁, mem_ofPred_eq, mem_ball, mem_compl_iff] at hj hy ⊢ linarith [dist_triangle_left x (czCenter hX j) y] · refine Eventually.of_forall (fun y hy ↦ mul_eq_zero_of_right (K x y) ?_) - exact notMem_support.mp <| notMem_subset support_czRemainder'_subset (notMem_of_mem_diff hy) + exact notMem_support.mp <| notMem_subset support_czRemainder'_subset (notMem_of_mem_sdiff hy) _ ≤ _ := by apply lemma_10_2_7_bound hx hX j (hf.czRemainder' (α'_pos hα) hX j).integrable.restrict · rw [setIntegral_eq_integral_of_forall_compl_eq_zero, integral_czRemainder'] @@ -1299,7 +1329,9 @@ private lemma integral_g (hf : BoundedFiniteSupport f) (hα : 0 < α) (hX : Gene by_cases! hj : czRadius hX j ≤ 0 · simp [Metric.ball_eq_empty.mpr <| mul_nonpos_of_nonneg_of_nonpos three_pos.le hj] rw [integral_sub (integrableOn_g₀ hf hα hX j) (integrableOn_d hX j)] - simp [d, setAverage_eq, smul_smul, mul_inv_cancel₀ (measureReal_ball_pos (czCenter hX j) (mul_pos three_pos hj)).ne'] + have hmeasure : (volume.real (czBall3 hX j) : ℂ) ≠ 0 := by + exact_mod_cast (measureReal_ball_pos (czCenter hX j) (mul_pos three_pos hj)).ne' + simp [d, setAverage_eq, hmeasure] private lemma lintegral_enorm_half_g (hf : BoundedFiniteSupport f) (hα : 0 < α) (hX : GeneralCase f (α' a α)) (j : ℕ) : @@ -1307,7 +1339,7 @@ private lemma lintegral_enorm_half_g (hf : BoundedFiniteSupport f) (hα : 0 < α 2 ^ (2 * a + 1) * α' a α * volume (czBall3 hX j) := calc _ = 2⁻¹ * ∫⁻ y in czBall3 hX j, ‖g r x hX j y‖ₑ := by simp_rw [enorm_mul] - rw [lintegral_const_mul' _ _ enorm_ne_top, enorm_inv (NeZero.ne 2), ← ofReal_norm_eq_enorm] + rw [lintegral_const_mul' _ _ enorm_ne_top, enorm_inv (NeZero.ne 2), ← ofReal_norm] simp _ ≤ 2⁻¹ * ∫⁻ y in czBall3 hX j, ‖g₀ r x hX j y‖ₑ + ‖d r x hX j‖ₑ := by gcongr; exact enorm_sub_le _ = _ := by rw [lintegral_add_left' (integrableOn_g₀ hf hα hX j).aemeasurable.enorm] @@ -1362,7 +1394,7 @@ private lemma 𝒥₂_bound (hf : BoundedFiniteSupport f) (hα : 0 < α) (hx : x rw [← enorm_mul] _ ≤ _ := by gcongr - · simp [← ofReal_norm_eq_enorm] + · simp [← ofReal_norm] · apply lemma_10_2_7_bound hx hX j ((integrableOn_g r x hα hf hX j).const_mul 2⁻¹) · have h : ∫ (y : X) in czBall3 hX j, 2⁻¹ * g r x hX j y = @@ -1385,7 +1417,7 @@ private lemma A_subset (hx : x ∈ (Ω f (α' a α))ᶜ) (hX : GeneralCase f (α rw [mem_ball'] at hy have : 6 * czRadius hX j ≤ dist x (czCenter hX j) := six_mul_czRadius_le_of_mem_Ω hx hX j have hj := Subtype.coe_prop j - simp only [𝒥₂, tsub_le_iff_right, mem_setOf_eq] at hj + simp only [𝒥₂, tsub_le_iff_right, mem_ofPred_eq] at hj constructor · linarith [dist_triangle_right x (czCenter hX j) y] · linarith [dist_triangle x (czCenter hX j) y] @@ -1507,7 +1539,7 @@ lemma czOperatorBound_inner_le (ha : 4 ≤ a) (hX : GeneralCase f (α' a α)) {i rcases le_or_gt r 0 with hr | hr · simp_rw [Real.toNNReal_of_nonpos hr, coe_zero, ENNReal.zero_div] rw [ENNReal.zero_rpow_of_pos (by rw [inv_pos, Nat.cast_pos]; exact zero_lt_four.trans_le ha)] - simp_rw [ENNReal.zero_div, lintegral_zero]; exact zero_le _ + simp_rw [ENNReal.zero_div, lintegral_zero]; exact zero_le calc _ ≤ ∫⁻ x in (czBall6 hX i)ᶜ, (r.toNNReal / edist x c) ^ (a : ℝ)⁻¹ / volume (ball x (dist x c)) := by @@ -1534,7 +1566,7 @@ lemma czOperatorBound_inner_le (ha : 4 ≤ a) (hX : GeneralCase f (α' a α)) {i rw [czBall6, mem_compl_iff, mem_ball, not_lt, show (6 : ℝ) = 2 * 3 by norm_num, mul_assoc] at mx change 2 * r ≤ dist x c at mx - rw [mem_iUnion]; use ⌊Real.logb 2 (dist x c / r)⌋₊; simp_rw [mem_diff, mem_ball, not_lt] + rw [mem_iUnion]; use ⌊Real.logb 2 (dist x c / r)⌋₊; simp_rw [Set.mem_sdiff, mem_ball, not_lt] have dxcpos : 0 < dist x c := lt_of_lt_of_le (by positivity) mx have dxceq : dist x c = 2 ^ (Real.logb 2 (dist x c / r)) * r := by rw [Real.rpow_logb zero_lt_two (by norm_num) (by positivity), div_mul_cancel₀ _ hr.ne'] @@ -1552,7 +1584,7 @@ lemma czOperatorBound_inner_le (ha : 4 ≤ a) (hX : GeneralCase f (α' a α)) {i (2 ^ n)⁻¹ ^ (a : ℝ)⁻¹ / volume (ball c (2 ^ n * r)) := by gcongr 2 ^ a * ∑' n, ?_ with n refine setLIntegral_mono' (measurableSet_ball.diff measurableSet_ball) fun x mx ↦ ?_ - simp_rw [mem_diff, mem_ball, not_lt] at mx + simp_rw [Set.mem_sdiff, mem_ball, not_lt] at mx gcongr · change ENNReal.ofReal r / _ ≤ _ have dxcpos : 0 < dist x c := lt_of_lt_of_le (by positivity) mx.2 @@ -1569,7 +1601,7 @@ lemma czOperatorBound_inner_le (ha : 4 ≤ a) (hX : GeneralCase f (α' a α)) {i gcongr with n; apply div_le_of_le_mul calc _ ≤ volume (ball c (2 * (2 ^ n * r))) := by - rw [← mul_assoc 2, ← pow_succ']; exact measure_mono diff_subset + rw [← mul_assoc 2, ← pow_succ']; exact measure_mono sdiff_subset _ ≤ _ := by convert measure_ball_two_le_same (μ := volume) c (2 ^ n * r) unfold defaultA; norm_cast @@ -1590,16 +1622,16 @@ lemma distribution_czOperatorBound (ha : 4 ≤ a) (hf : BoundedFiniteSupport f) rcases eq_top_or_lt_top α with rfl | αlt · have : czOperatorBound hX ⁻¹' Ioi (⊤ / 8) = ∅ := by rw [top_div_of_ne_top (by norm_num), isMax_top.Ioi_eq, preimage_empty] - rw [this, inter_empty, measure_empty]; exact zero_le _ + rw [this, inter_empty, measure_empty]; exact zero_le calc _ ≤ (volume.restrict (Ω f (α' a α))ᶜ) {x | α / 8 ≤ czOperatorBound hX x} := by rw [inter_comm, ← Measure.restrict_apply']; swap · apply MeasurableSet.compl; simp_rw [Ω, hX, dite_true] exact MeasurableSet.iUnion fun _ ↦ measurableSet_ball - gcongr; intro x mx; simp only [mem_preimage, mem_Ioi, mem_setOf_eq] at mx ⊢; exact mx.le + gcongr; intro x mx; simp only [mem_preimage, mem_Ioi, mem_ofPred_eq] at mx ⊢; exact mx.le _ ≤ (∫⁻ x in (Ω f (α' a α))ᶜ, czOperatorBound hX x) / (α / 8) := by apply meas_ge_le_lintegral_div - · refine ((AEMeasurable.ennreal_tsum fun i ↦ ?_).const_mul _).restrict + · refine ((AEMeasurable.tsum fun i ↦ ?_).const_mul _).restrict refine AEMeasurable.div ?_ measurable_vol₁.aemeasurable refine ((AEMeasurable.const_div ?_ _).pow_const _).mul_const _ simp only [coe_nnreal_ennreal_nndist] @@ -1647,8 +1679,8 @@ lemma estimate_bad (ha : 4 ≤ a) (hr : 0 < r) _ ≤ volume (Ω f (α' a α) ∪ {x ∈ (Ω f (α' a α))ᶜ | α / 2 < ‖czOperator K r (czRemainder f (α' a α)) x‖ₑ}) := by refine measure_mono fun x mx ↦ ?_ - rw [mem_setOf_eq] at mx - simp_rw [mem_union, mem_setOf_eq, mx, and_true, mem_compl_iff]; tauto + rw [mem_ofPred_eq] at mx + simp_rw [mem_union, mem_ofPred_eq, mx, and_true, mem_compl_iff]; tauto _ ≤ volume (Ω f (α' a α)) + volume {x ∈ (Ω f (α' a α))ᶜ | α / 2 < ‖czOperator K r (czRemainder f (α' a α)) x‖ₑ} := measure_union_le _ _ @@ -1656,7 +1688,7 @@ lemma estimate_bad (ha : 4 ≤ a) (hr : 0 < r) volume ((Ω f (α' a α))ᶜ ∩ czOperatorBound hX ⁻¹' Ioi (α / 8)) := by gcongr · simp_rw [Ω, hX, dite_true]; exact measure_iUnion_le _ - · intro x mx; simp_rw [mem_setOf_eq, mem_inter_iff, mem_preimage, mem_Ioi] at mx ⊢ + · intro x mx; simp_rw [mem_ofPred_eq, mem_inter_iff, mem_preimage, mem_Ioi] at mx ⊢ obtain ⟨mx₁, mx₂⟩ := mx; refine ⟨mx₁, ?_⟩; contrapose! mx₂ calc _ ≤ 3 * czOperatorBound hX x + α / 8 := estimate_bad_partial hf hr hα mx₁ hX @@ -1698,17 +1730,18 @@ lemma estimate_czOperator (ha : 4 ≤ a) (hr : 0 < r) (hf : BoundedFiniteSupport rcases le_or_gt α (⨍⁻ x, ‖f x‖ₑ / c10_0_3 a) with hα | hα · rw [laverage_eq] at hα rcases eq_zero_or_pos (eLpNorm f 1) with hf₂ | hf₂ - · rw [eLpNorm_eq_zero_iff hf.aestronglyMeasurable one_ne_zero] at hf₂ + · rw [eLpNorm_eq_zero_iff one_ne_zero] at hf₂ have op0 : czOperator K r f = 0 := by ext x; rw [czOperator, integral_eq_zero_of_ae]; swap · have := (EventuallyEq.rfl (f := (K x ·))).mul hf₂ simp only [mul_zero] at this; exact this.restrict simp - simp_rw [op0, distribution, Pi.zero_apply, enorm_zero, not_lt_zero, setOf_false, + simp_rw [op0, distribution, Pi.zero_apply, enorm_zero, not_lt_zero, ofPred_false, measure_empty, zero_le] conv_rhs at hα => enter [1, 2, x]; rw [div_eq_mul_inv, c10_0_3, coe_inv (by positivity), inv_inv] - rw [lintegral_mul_const' _ _ (by finiteness), ← eLpNorm_one_eq_lintegral_enorm] at hα + rw [lintegral_mul_const' _ _ (by finiteness), + ← eLpNorm_one_eq_lintegral_enorm hf.aestronglyMeasurable] at hα replace hα := mul_le_of_le_div' hα rw [← ENNReal.le_div_iff_mul_le] at hα; rotate_left · right; positivity @@ -1723,7 +1756,7 @@ lemma estimate_czOperator (ha : 4 ≤ a) (hr : 0 < r) (hf : BoundedFiniteSupport _ ≤ distribution (czOperator K r (czApproximation f (α' a α))) (α / 2) volume + distribution (czOperator K r (czRemainder f (α' a α))) (α / 2) volume := by refine le_trans (measure_mono fun x mx ↦ ?_) (measure_union_le _ _) - simp only [mem_union, mem_setOf_eq] at mx ⊢; contrapose! mx + simp only [mem_union, mem_ofPred_eq] at mx ⊢; contrapose! mx calc _ = ‖czOperator K r (czApproximation f (α' a α)) x + czOperator K r (czRemainder f (α' a α)) x‖ₑ := by @@ -1768,4 +1801,27 @@ theorem czOperator_weak_1_1 (ha : 4 ≤ a) (hr : 0 < r) intro α; apply mul_le_of_le_div'; rw [ENNReal.mul_div_right_comm] exact estimate_czOperator ha hr hf hT +/-! Public access to three already-proved decomposition/cancellation helpers. +Added by the LeanBlast port; no upstream declaration or proof is changed. -/ + +abbrev carlesonCzOperatorBoundSummand + (hX : GeneralCase f (c10_0_3 a * α)) (j : ℕ) (x : X) : ℝ≥0∞ := + czOperatorBoundSummand hX j x + +theorem carlesonCzOperatorBound_eq + (hX : GeneralCase f (c10_0_3 a * α)) (x : X) : + czOperatorBound hX x = ∑' j, carlesonCzOperatorBoundSummand hX j x := + czOperatorBound_eq hX x + +theorem carlesonCzCancellation_bound + (hx : x ∈ (Ω f (c10_0_3 a * α))ᶜ) + (hX : GeneralCase f (c10_0_3 a * α)) (j : ℕ) + {g : X → ℂ} (g_int : IntegrableOn g (czBall3 hX j)) + (hg0 : ∫ y in czBall3 hX j, g y = 0) + (hg : ∫⁻ y in czBall3 hX j, ‖g y‖ₑ ≤ + 2 ^ (2 * a + 1) * (c10_0_3 a * α) * volume (czBall3 hX j)) : + ‖∫ y in czBall3 hX j, K x y * g y‖ₑ ≤ carlesonCzOperatorBoundSummand hX j x := + lemma_10_2_7_bound hx hX j g_int hg0 hg + + end diff --git a/lakefile.toml b/lakefile.toml index a6d2c69..b16709c 100644 --- a/lakefile.toml +++ b/lakefile.toml @@ -9,12 +9,11 @@ autoImplicit = false weak.linter.flexible = true # no rigid tactic (e.g. `exact`) after a flexible tactic (e.g. `simp`) # Enable all mathlib linters: automatically matches what mathlib uses. weak.linter.mathlibStandardSet = true -# Disable the long line linter, for now. -weak.linter.style.longLine = false [[require]] name = "mathlib" git = "https://github.com/leanprover-community/mathlib4.git" +rev = "d13f23b723b8a846827a245b89c10fc7d3f11612" [[require]] name = "checkdecls" diff --git a/lean-toolchain b/lean-toolchain index d324cad..ba8ebf2 100644 --- a/lean-toolchain +++ b/lean-toolchain @@ -1 +1 @@ -leanprover/lean4:v4.29.0 \ No newline at end of file +leanprover/lean4:v4.34.1