Skip to content

Commit 61b75ff

Browse files
authored
Move lemmas (#462)
Move general lemmas from the `Antichain` folder to appropriate files.
1 parent 9f718ed commit 61b75ff

File tree

10 files changed

+97
-110
lines changed

10 files changed

+97
-110
lines changed

Carleson/Antichain/AntichainOperator.lean

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -315,12 +315,6 @@ lemma dens1_antichain (h𝔄 : IsAntichain (· ≤ ·) 𝔄)
315315
-- Todo: define this recursively in terms of previous constants
316316
def C2_0_3 (a : ℕ) (q : ℝ≥0) : ℝ≥0 := 2 ^ (128 * a ^ 3) / (q - 1)
317317

318-
--TODO: PR to Mathlib
319-
theorem ENNReal.rpow_le_self_of_one_le {x : ℝ≥0∞} {y : ℝ} (hx : 1 ≤ x) (hy : y ≤ 1) :
320-
x ^ y ≤ x := by
321-
nth_rw 2 [← ENNReal.rpow_one x]
322-
exact ENNReal.rpow_le_rpow_of_exponent_le hx hy
323-
324318
variable (X) in
325319
omit [TileStructure Q D κ S o] in
326320
private lemma ineq_aux_2_0_3 :

Carleson/Antichain/AntichainTileCount.lean

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -801,19 +801,12 @@ private lemma ineq_6_3_39 (h𝔄 : IsAntichain (· ≤ ·) 𝔄) {L : Grid X}
801801
gcongr; simp only [𝔄']
802802
exact sep_subset _ _
803803

804-
-- Copied from`ForestOperator.LargeSeparation`, where it is called
805-
-- `IF_subset_THEN_distance_between_centers`.
806-
-- **TODO**: move to common import.
807-
private lemma dist_c_le_of_subset {J J' : Grid X} (subset : (J : Set X) ⊆ J') :
808-
dist (c J) (c J') < 4 * D ^ s J' :=
809-
Grid_subset_ball (subset Grid.c_mem_Grid)
810-
811804
-- Ineq. 6.3.41
812805
private lemma volume_L'_le {L : Grid X} (hL : L ∈ 𝓛' 𝔄 ϑ N) :
813806
volume (L' hL : Set X) ≤ 2 ^ (100*a^3 + 5*a) * volume (L : Set X) := by
814807
have hc : dist (c L) (c (L' hL)) + 4 * D ^ s (L' hL) ≤ 8 * D ^ s (L' hL) := by
815808
calc dist (c L) (c (L' hL)) + 4 * D ^ s (L' hL)
816-
_ ≤ 4 * ↑D ^ s (L' hL) + 4 * D ^ s (L' hL) := by grw [dist_c_le_of_subset (L_le_L' hL).1]
809+
_ ≤ 4 * ↑D ^ s (L' hL) + 4 * D ^ s (L' hL) := by grw [Grid.dist_c_le_of_subset (L_le_L' hL).1]
817810
_ ≤ 8 * ↑D ^ s (L' hL) := by linarith
818811
calc volume (L' hL : Set X)
819812
_ ≤ volume (ball (c (L' hL)) (4 * D ^ s (L' hL))) := by

Carleson/Antichain/Basic.lean

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -232,19 +232,6 @@ lemma MaximalBoundAntichain {𝔄 : Set (𝔓 X)} (h𝔄 : IsAntichain (· ≤
232232
exact hx p hp
233233
simp only [h0, enorm_zero, zero_le]
234234

235-
-- TODO: PR to Mathlib
236-
omit [MetricSpace X] in
237-
lemma _root_.Set.eq_indicator_one_mul {F : Set X} {f : X → ℂ} (hf : ∀ x, ‖f x‖ ≤ F.indicator 1 x) :
238-
f = (F.indicator 1) * f := by
239-
ext y
240-
simp only [Pi.mul_apply, indicator, Pi.one_apply, ite_mul, one_mul, zero_mul]
241-
split_ifs with hy
242-
· rfl
243-
· specialize hf y
244-
simp only [indicator, hy, ↓reduceIte] at hf
245-
rw [← norm_eq_zero]
246-
exact le_antisymm hf (norm_nonneg _)
247-
248235
-- Note: Proof shows that `111` can be replaced by `108`
249236
/-- Constant appearing in Lemma 6.1.3. -/
250237
noncomputable def C6_1_3 (a : ℕ) (q : ℝ≥0) : ℝ≥0 := 2 ^ (111 * a ^ 3) * (q - 1)⁻¹
@@ -315,7 +302,7 @@ lemma eLpNorm_𝓜_le_eLpNorm_𝓜p_mul (hf : Measurable f)
315302
have : ENNReal.ofReal p' ≠ ⊤ := ofReal_ne_top
316303
have hp_coe : p.toNNReal.toReal = p := Real.coe_toNNReal _ (by positivity)
317304

318-
conv_lhs => rw [eq_indicator_one_mul hfF]
305+
conv_lhs => rw [eq_indicator_one_mul_of_norm_le hfF]
319306
apply eLpNorm_le_mul_eLpNorm_of_ae_le_mul''
320307
· exact AEStronglyMeasurable.maximalFunction 𝔄.to_countable
321308
· refine ae_of_all _ <| fun x ↦ ?_

Carleson/Antichain/TileCorrelation.lean

Lines changed: 7 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Carleson.HolderVanDerCorput
22
import Carleson.Operators
3+
import Carleson.ToMathlib.MeasureTheory.Integral.Bochner.ContinuousLinearMap
34

45
macro_rules | `(tactic |gcongr_discharger) => `(tactic | with_reducible assumption)
56

@@ -21,11 +22,6 @@ section FunProp
2122

2223
attribute [fun_prop] Complex.measurable_exp Complex.measurable_ofReal
2324

24-
-- TODO: PR to Mathlib
25-
@[fun_prop]
26-
lemma Complex.measurable_starRingEnd : Measurable (starRingEnd ℂ) :=
27-
Complex.continuous_conj.measurable
28-
2925
@[fun_prop]
3026
lemma measurable_correlation :
3127
Measurable (fun (s₁ s₂ : ℤ) (x y z : X) ↦ correlation s₁ s₂ x y z) := by
@@ -68,12 +64,6 @@ lemma mem_ball_of_mem_tsupport_correlation {s₁ s₂ : ℤ} {x₁ x₂ y : X}
6864
/-- The constant from lemma 6.2.1. -/
6965
def C6_2_1 (a : ℕ) : ℝ≥0 := 2 ^ (254 * a ^ 3)
7066

71-
--TODO: PR to Mathlib
72-
lemma ENNReal.mul_div_mul_comm {a b c d : ℝ≥0∞} (hc : c ≠ ⊤) (hd : d ≠ ⊤) :
73-
a * b / (c * d) = a / c * (b / d) := by
74-
simp only [div_eq_mul_inv, ENNReal.mul_inv (Or.inr hd) (Or.inl hc)]
75-
ring
76-
7767
lemma aux_6_2_3 (s₁ s₂ : ℤ) (x₁ x₂ y y' : X) :
7868
‖Ks s₂ x₂ y‖ₑ * ‖Ks s₁ x₁ y - Ks s₁ x₁ y'‖ₑ ≤
7969
C2_1_3 a / volume (ball x₂ (D ^ s₂)) *
@@ -110,11 +100,13 @@ lemma e625 {s₁ s₂ : ℤ} {x₁ x₂ y y' : X} (hy' : y ≠ y') (hs : s₁
110100
norm_cast
111101
ring
112102
rw [mul_comm, mul_add, h2, mul_comm (volume _)]
113-
rw [ENNReal.mul_div_mul_comm measure_ball_ne_top measure_ball_ne_top, mul_assoc]
103+
rw [ENNReal.mul_div_mul_comm (Or.inr measure_ball_ne_top)
104+
(Or.inl measure_ball_ne_top), mul_assoc]
114105
apply add_le_add (aux_6_2_3 s₁ s₂ x₁ x₂ y y')
115106
rw [← neg_sub, enorm_neg]
116107
convert aux_6_2_3 s₂ s₁ x₂ x₁ y' y using 1
117-
simp only [← mul_assoc, ← ENNReal.mul_div_mul_comm measure_ball_ne_top measure_ball_ne_top]
108+
simp only [← mul_assoc, ← ENNReal.mul_div_mul_comm (Or.inr measure_ball_ne_top)
109+
(Or.inl measure_ball_ne_top)]
118110
rw [mul_comm (volume _), edist_comm]
119111
_ ≤ 2 ^ (252 * a ^ 3) / (volume (ball x₁ (D ^ s₁)) * volume (ball x₂ (D ^ s₂))) *
120112
(2 * (edist y y' ^ τ / (D ^ s₁) ^ τ)) := by
@@ -156,7 +148,8 @@ lemma correlation_kernel_bound {s₁ s₂ : ℤ} {x₁ x₂ : X} (hs : s₁ ≤
156148
have hφ' (y : X) : ‖correlation s₁ s₂ x₁ x₂ y‖ₑ ≤
157149
(C2_1_3 a) ^ 2 / (volume (ball x₁ (D ^ s₁)) * volume (ball x₂ (D ^ s₂))):= by
158150
simp only [correlation, enorm_mul, RCLike.enorm_conj, pow_two,
159-
ENNReal.mul_div_mul_comm measure_ball_ne_top measure_ball_ne_top]
151+
ENNReal.mul_div_mul_comm (Or.inr measure_ball_ne_top)
152+
(Or.inl measure_ball_ne_top)]
160153
exact mul_le_mul enorm_Ks_le enorm_Ks_le (zero_le _) (zero_le _)
161154
-- 6.2.6 + 6.2.7
162155
calc
@@ -184,19 +177,6 @@ lemma correlation_kernel_bound {s₁ s₂ : ℤ} {x₁ x₂ : X} (hs : s₁ ≤
184177

185178
variable [TileStructure Q D κ S o]
186179

187-
-- TODO: PR both versions to Mathlib
188-
theorem MeasureTheory.exists_ne_zero_of_setIntegral_ne_zero {α E : Type*} [NormedAddCommGroup E]
189-
[NormedSpace ℝ E] [MeasurableSpace α] {μ : MeasureTheory.Measure α} {f : α → E} {U : Set α}
190-
(hU : ∫ (u : α) in U, f u ∂μ ≠ 0) : ∃ u : α, u ∈ U ∧ f u ≠ 0 := by
191-
contrapose! hU
192-
exact setIntegral_eq_zero_of_forall_eq_zero hU
193-
194-
theorem MeasureTheory.exists_ne_zero_of_integral_ne_zero {α E : Type*} [NormedAddCommGroup E]
195-
[NormedSpace ℝ E] [MeasurableSpace α] {μ : MeasureTheory.Measure α} {f : α → E}
196-
(h : ∫ (u : α), f u ∂μ ≠ 0) : ∃ u : α, f u ≠ 0 := by
197-
contrapose! h
198-
exact integral_eq_zero_of_ae ((eqOn_univ f 0).mp fun ⦃x⦄ a ↦ h x).eventuallyEq
199-
200180
-- Lemma 6.2.2
201181
lemma range_support {p : 𝔓 X} {g : X → ℂ} {y : X} (hpy : adjointCarleson p g y ≠ 0) :
202182
y ∈ (ball (𝔠 p) (5 * D ^𝔰 p)) := by
@@ -432,23 +412,6 @@ lemma exp_ineq (ha : 4 ≤ a) : 0 < ((8 * a : ℕ) : ℝ) * -(2 * (a : ℝ) ^ 2
432412
norm_cast
433413
nlinarith
434414

435-
-- TODO: PR to Mathlib
436-
lemma _root_.ENNReal.rpow_lt_rpow_of_neg {x y : ℝ≥0∞} {z : ℝ} (hz : z < 0) (h : x < y) :
437-
y ^ z < x ^ z := by
438-
rw [← neg_neg z, ENNReal.rpow_neg y, ENNReal.rpow_neg x, ← ENNReal.inv_rpow, ← ENNReal.inv_rpow]
439-
exact ENNReal.rpow_lt_rpow (ENNReal.inv_lt_inv.mpr h) (neg_pos.mpr hz)
440-
441-
-- TODO: PR to Mathlib
442-
443-
lemma _root_.ENNReal.rpow_lt_rpow_iff_of_neg {x y : ℝ≥0∞} {z : ℝ} (hz : z < 0) :
444-
x ^ z < y ^ z ↔ y < x :=
445-
⟨lt_imp_lt_of_le_imp_le (fun h ↦ ENNReal.rpow_le_rpow_of_nonpos (le_of_lt hz) h),
446-
fun h ↦ ENNReal.rpow_lt_rpow_of_neg hz h⟩
447-
448-
lemma _root_.ENNReal.rpow_le_rpow_iff_of_neg {x y : ℝ≥0∞} {z : ℝ} (hz : z < 0) :
449-
x ^ z ≤ y ^ z ↔ y ≤ x :=
450-
le_iff_le_iff_lt_iff_lt.2 <| ENNReal.rpow_lt_rpow_iff_of_neg hz
451-
452415
/-- Inequality 6.2.29. -/ -- TODO: add ‖g ↑x1‖ₑ * ‖g ↑x2‖ₑ in blueprint's RHS
453416
lemma I12_le (ha : 4 ≤ a) (p p' : 𝔓 X) (hle : 𝔰 p' ≤ 𝔰 p) (g : X → ℂ)
454417
(hinter : (ball (𝔠 p') (5 * D ^ 𝔰 p') ∩ ball (𝔠 p) (5 * D ^ 𝔰 p)).Nonempty)
@@ -728,12 +691,6 @@ lemma bound_6_2_29' (ha : 4 ≤ a) (p p' : 𝔓 X) (x2 : E p) : 2 ^ (254 * a^3 +
728691
_ ≤ (C6_1_5 a) * ((1 + dist_(p') (𝒬 p') (𝒬 p))^(-(2 * a^2 + a^3 : ℝ)⁻¹)) /
729692
(volume (coeGrid (𝓘 p))).toNNReal := by gcongr; exact hvol x2
730693

731-
-- TODO: PR to Mathlib
732-
omit [MetricSpace X] in
733-
lemma _root_.Set.indicator_one_le_one (x : X) : G.indicator (1 : X → ℝ) x ≤ 1 := by
734-
classical
735-
exact le_trans (ite_le_sup _ _ _) (by simp)
736-
737694
omit [TileStructure Q D κ S o] in
738695
lemma enorm_eq_zero_of_notMem_closedBall {g : X → ℂ} (hg1 : ∀ x, ‖g x‖ ≤ G.indicator 1 x)
739696
{x : X} (hx : x ∉ (closedBall (cancelPt X) (defaultD a ^ defaultS X / 4))) :
@@ -850,12 +807,6 @@ lemma boundedCompactSupport_Ks_mul_star_g (p : 𝔓 X) {g : X → ℂ}
850807
_ ≤ C + C := by gcongr; exact hC x.1 x.2 hx
851808
_ = 2 * C := by ring
852809

853-
854-
-- This was deleted from `BoundedCompactSupport.lean`, but I need it.
855-
open Bornology in
856-
lemma _root_.isBounded_range_iff_forall_norm_le {α β} [SeminormedAddCommGroup α] {f : β → α} :
857-
IsBounded (range f) ↔ ∃ C, ∀ x, ‖f x‖ ≤ C := by convert isBounded_iff_forall_norm_le; simp
858-
859810
-- memLp_top_of_bound
860811
lemma boundedCompactSupport_aux_6_2_26 (p p' : 𝔓 X) {g : X → ℂ}
861812
(hg : Measurable g) (hg1 : ∀ x, ‖g x‖ ≤ G.indicator 1 x) :
@@ -1067,7 +1018,6 @@ lemma integrableOn_I12 (ha : 4 ≤ a) {p p' : 𝔓 X} (hle : 𝔰 p' ≤ 𝔰 p)
10671018
exact MeasureTheory.IntegrableOn.congr_fun hf (fun _ hx ↦ by simp only [f, if_pos hx])
10681019
(measurableSet_E.prod measurableSet_E)
10691020

1070-
/- TODO: it should be way easier to deduce this from `integrableOn_I12`, right? -/
10711021
lemma integrableOn_I12' (ha : 4 ≤ a) {p p' : 𝔓 X} (hle : 𝔰 p' ≤ 𝔰 p) {g : X → ℂ} (hg : Measurable g)
10721022
(hg1 : ∀ x, ‖g x‖ ≤ G.indicator 1 x)
10731023
(hinter : (ball (𝔠 p') (5 * D ^ 𝔰 p') ∩ ball (𝔠 p) (5 * D ^ 𝔰 p)).Nonempty) :

Carleson/ForestOperator/LargeSeparation.lean

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,6 @@ def holderFunction (f₁ f₂ : X → ℂ) (J : Grid X) (x : X) : ℂ :=
8383

8484
/- AUXILIARY LEMMAS:START -/
8585

86-
lemma IF_subset_THEN_distance_between_centers (subset : (J : Set X) ⊆ J') :
87-
dist (c J) (c J') < 4 * D ^ s J' :=
88-
Grid_subset_ball (subset Grid.c_mem_Grid)
89-
9086
lemma IF_subset_THEN_not_disjoint {A B : Grid X} (h : (A : Set X) ⊆ B) :
9187
¬ Disjoint (B : Set X) (A : Set X) := by
9288
rw [disjoint_comm]
@@ -928,7 +924,7 @@ lemma limited_scale_impact_second_estimate (hp : p ∈ t u₂ \ 𝔖₀ t u₁ u
928924
apply cdist_mono
929925
simp only [not_disjoint_iff] at h
930926
rcases h with ⟨middleX, lt_2, lt_3⟩
931-
have lt_4 := IF_subset_THEN_distance_between_centers belongs.left
927+
have lt_4 := Grid.dist_c_le_of_subset belongs.left
932928
intros x lt_1
933929
calc dist x (𝔠 p)
934930
_ ≤ dist x (c J') + dist (c J') (c J) + dist (c J) middleX + dist middleX (𝔠 p) := by
@@ -1890,7 +1886,7 @@ lemma lower_oscillation_bound (hu₁ : u₁ ∈ t) (hu₂ : u₂ ∈ t) (hu : u
18901886
gcongr
18911887
_ ≤ 100 * D ^ (s J' + 1) + 4 * D ^ (s J') := by
18921888
have : dist (c J) (c J') < 4 * D ^ (s J') :=
1893-
IF_subset_THEN_distance_between_centers (subset := JleJ'.1)
1889+
Grid.dist_c_le_of_subset (subset := JleJ'.1)
18941890
rw [dist_comm] at this
18951891
gcongr
18961892
_ = 100 * D ^ (s J + 2) + 4 * D ^ (s J + 1) := by

Carleson/GridStructure.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,4 +457,8 @@ lemma dist_strictMono_iterate' {I J : Grid X} {d : ℤ} (hd : d ≥ 0) (hij : I
457457
rw [← Int.toNat_of_nonneg hd] at hs ⊢
458458
exact dist_strictMono_iterate hij hs
459459

460+
lemma dist_c_le_of_subset {J J' : Grid X} (subset : (J : Set X) ⊆ J') :
461+
dist (c J) (c J') < 4 * D ^ s J' :=
462+
Grid_subset_ball (subset Grid.c_mem_Grid)
463+
460464
end Grid

Carleson/TileStructure.lean

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -368,11 +368,6 @@ lemma dens₂_eq_biSup_dens₂ (𝔓' : Set (𝔓 X)) :
368368
dens₂ (𝔓') = ⨆ (p ∈ 𝔓'), dens₂ ({p}) := by
369369
simp [dens₂]
370370

371-
lemma ENNReal.rpow_le_rpow_of_nonpos {x y : ℝ≥0∞} {z : ℝ} (hz : z ≤ 0) (h : x ≤ y) :
372-
y ^ z ≤ x ^ z := by
373-
rw [← neg_neg z, rpow_neg y, rpow_neg x, ← inv_rpow, ← inv_rpow]
374-
exact rpow_le_rpow (ENNReal.inv_le_inv.mpr h) (neg_nonneg.mpr hz)
375-
376371
/- A rough estimate. It's also less than 2 ^ (-a) -/
377372
lemma dens₁_le_one {𝔓' : Set (𝔓 X)} : dens₁ 𝔓' ≤ 1 := by
378373
conv_rhs => rw [← mul_one 1]

Carleson/ToMathlib/BoundedCompactSupport.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ namespace BoundedCompactSupport
7676

7777
section General
7878

79+
open Bornology in
80+
lemma _root_.isBounded_range_iff_forall_norm_le {α β} [SeminormedAddCommGroup α] {f : β → α} :
81+
IsBounded (range f) ↔ ∃ C, ∀ x, ‖f x‖ ≤ C := by convert isBounded_iff_forall_norm_le; simp
82+
7983
variable [TopologicalSpace E] [ENorm E] [Zero E]
8084

8185
theorem aestronglyMeasurable (hf : BoundedCompactSupport f μ) : AEStronglyMeasurable f μ :=

Carleson/ToMathlib/MeasureTheory/Integral/Bochner/ContinuousLinearMap.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,17 @@ theorem MeasureTheory.setIntegral_union_2 (hst : Disjoint s t) (ht : MeasurableS
5151
setIntegral_union hst ht hfst.left_of_union hfst.right_of_union
5252

5353
end SetIntegral_Union_2
54+
55+
-- [Mathlib.MeasureTheory.Integral.Bochner.Set]
56+
theorem MeasureTheory.exists_ne_zero_of_setIntegral_ne_zero {α E : Type*} [NormedAddCommGroup E]
57+
[NormedSpace ℝ E] [MeasurableSpace α] {μ : MeasureTheory.Measure α} {f : α → E} {U : Set α}
58+
(hU : ∫ (u : α) in U, f u ∂μ ≠ 0) : ∃ u : α, u ∈ U ∧ f u ≠ 0 := by
59+
contrapose! hU
60+
exact setIntegral_eq_zero_of_forall_eq_zero hU
61+
62+
-- [Mathlib.MeasureTheory.Integral.Bochner.Basic]
63+
theorem MeasureTheory.exists_ne_zero_of_integral_ne_zero {α E : Type*} [NormedAddCommGroup E]
64+
[NormedSpace ℝ E] [MeasurableSpace α] {μ : MeasureTheory.Measure α} {f : α → E}
65+
(h : ∫ (u : α), f u ∂μ ≠ 0) : ∃ u : α, f u ≠ 0 := by
66+
contrapose! h
67+
exact integral_eq_zero_of_ae ((Set.eqOn_univ f 0).mp fun ⦃x⦄ a ↦ h x).eventuallyEq

Carleson/ToMathlib/Misc.lean

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,6 @@ lemma ENNReal.toReal_zpow (x : ℝ≥0∞) (z : ℤ) : x.toReal ^ z = (x ^ z).to
106106

107107
end ENNReal
108108

109-
section Indicator
110-
attribute [gcongr] Set.indicator_le_indicator mulIndicator_le_mulIndicator_of_subset
111-
112-
lemma Set.indicator_eq_indicator' {α : Type*} {M : Type*} [Zero M] {s : Set α} {f g : α → M} (h : ∀ x ∈ s, f x = g x) :
113-
s.indicator f = s.indicator g := by
114-
ext x
115-
unfold indicator
116-
split
117-
· rename_i hxs
118-
exact h x hxs
119-
· rfl
120-
121-
end Indicator
122-
123109
section NNReal
124110

125111

@@ -448,10 +434,55 @@ lemma Real.self_lt_two_rpow (x : ℝ) : x < 2 ^ x := by
448434
_ ≤ 2 ^ (⌊x⌋₊ : ℝ) := by exact_mod_cast Nat.lt_pow_self one_lt_two
449435
_ ≤ _ := rpow_le_rpow_of_exponent_le one_le_two (Nat.floor_le h)
450436

437+
@[fun_prop]
438+
lemma Complex.measurable_starRingEnd : Measurable (starRingEnd ℂ) :=
439+
Complex.continuous_conj.measurable
440+
441+
namespace ENNReal
442+
443+
lemma rpow_le_rpow_of_nonpos {x y : ℝ≥0∞} {z : ℝ} (hz : z ≤ 0) (h : x ≤ y) :
444+
y ^ z ≤ x ^ z := by
445+
rw [← neg_neg z, rpow_neg y, rpow_neg x, ← inv_rpow, ← inv_rpow]
446+
exact rpow_le_rpow (ENNReal.inv_le_inv.mpr h) (neg_nonneg.mpr hz)
447+
448+
lemma rpow_lt_rpow_of_neg {x y : ℝ≥0∞} {z : ℝ} (hz : z < 0) (h : x < y) :
449+
y ^ z < x ^ z := by
450+
rw [← neg_neg z, ENNReal.rpow_neg y, ENNReal.rpow_neg x, ← ENNReal.inv_rpow, ← ENNReal.inv_rpow]
451+
exact ENNReal.rpow_lt_rpow (ENNReal.inv_lt_inv.mpr h) (neg_pos.mpr hz)
452+
453+
lemma rpow_lt_rpow_iff_of_neg {x y : ℝ≥0∞} {z : ℝ} (hz : z < 0) :
454+
x ^ z < y ^ z ↔ y < x :=
455+
⟨lt_imp_lt_of_le_imp_le (fun h ↦ ENNReal.rpow_le_rpow_of_nonpos (le_of_lt hz) h),
456+
fun h ↦ ENNReal.rpow_lt_rpow_of_neg hz h⟩
457+
458+
lemma rpow_le_rpow_iff_of_neg {x y : ℝ≥0∞} {z : ℝ} (hz : z < 0) :
459+
x ^ z ≤ y ^ z ↔ y ≤ x :=
460+
le_iff_le_iff_lt_iff_lt.2 <| ENNReal.rpow_lt_rpow_iff_of_neg hz
461+
462+
theorem rpow_le_self_of_one_le {x : ℝ≥0∞} {y : ℝ} (hx : 1 ≤ x) (hy : y ≤ 1) :
463+
x ^ y ≤ x := by
464+
nth_rw 2 [← ENNReal.rpow_one x]
465+
exact ENNReal.rpow_le_rpow_of_exponent_le hx hy
466+
467+
end ENNReal
468+
451469
namespace Set
452470

471+
section Indicator
472+
453473
open ComplexConjugate
454474

475+
attribute [gcongr] Set.indicator_le_indicator mulIndicator_le_mulIndicator_of_subset
476+
477+
lemma indicator_eq_indicator' {α : Type*} {M : Type*} [Zero M] {s : Set α} {f g : α → M} (h : ∀ x ∈ s, f x = g x) :
478+
s.indicator f = s.indicator g := by
479+
ext x
480+
unfold indicator
481+
split
482+
· rename_i hxs
483+
exact h x hxs
484+
· rfl
485+
455486
lemma indicator_eq_indicator_one_mul {ι M : Type*} [MulZeroOneClass M]
456487
(s : Set ι) (f : ι → M) (x : ι) : s.indicator f x = s.indicator 1 x * f x := by
457488
simp only [indicator]; split_ifs <;> simp
@@ -460,6 +491,25 @@ lemma conj_indicator {α 𝕜 : Type*} [RCLike 𝕜] {f : α → 𝕜} (s : Set
460491
conj (s.indicator f x) = s.indicator (conj f) x := by
461492
simp only [indicator]; split_ifs <;> simp
462493

494+
lemma eq_indicator_one_mul_of_norm_le {X : Type*} {F : Set X} {f : X → ℂ}
495+
(hf : ∀ x, ‖f x‖ ≤ F.indicator 1 x) :
496+
f = (F.indicator 1) * f := by
497+
ext y
498+
simp only [Pi.mul_apply, indicator, Pi.one_apply, ite_mul, one_mul, zero_mul]
499+
split_ifs with hy
500+
· rfl
501+
· specialize hf y
502+
simp only [indicator, hy, ↓reduceIte] at hf
503+
rw [← norm_eq_zero]
504+
exact le_antisymm hf (norm_nonneg _)
505+
506+
lemma indicator_one_le_one {X : Type*} {G : Set X} (x : X) :
507+
G.indicator (1 : X → ℝ) x ≤ 1 := by
508+
classical
509+
exact le_trans (ite_le_sup _ _ _) (by simp)
510+
511+
end Indicator
512+
463513
end Set
464514

465515
section Norm

0 commit comments

Comments
 (0)