analysis.fourier.poisson_summation
⟷
Mathlib.Analysis.Fourier.PoissonSummation
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -6,7 +6,7 @@ Authors: David Loeffler
import Analysis.Fourier.AddCircle
import Analysis.Fourier.FourierTransform
import Analysis.PSeries
-import Analysis.SchwartzSpace
+import Analysis.Distribution.SchwartzSpace
import MeasureTheory.Measure.Lebesgue.Integral
#align_import analysis.fourier.poisson_summation from "leanprover-community/mathlib"@"e8e130de9dba4ed6897183c3193c752ffadbcc77"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -163,7 +163,7 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
∀ x : ℝ, max 0 (-2 * R) < x → ∀ y : ℝ, x + R ≤ y → y ^ (-b) ≤ (1 / 2) ^ (-b) * x ^ (-b) :=
by
intro x hx y hy
- rw [max_lt_iff] at hx
+ rw [max_lt_iff] at hx
have hxR : 0 < x + R := by
rcases le_or_lt 0 R with (h | h)
· exact add_pos_of_pos_of_nonneg hx.1 h
@@ -186,9 +186,9 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
simp only [is_O, is_O_with, eventually_at_top] at hc' ⊢
obtain ⟨d, hd⟩ := hc'
refine' ⟨c * (1 / 2) ^ (-b), ⟨max (1 + max 0 (-2 * R)) (d - R), fun x hx => _⟩⟩
- rw [ge_iff_le, max_le_iff] at hx
+ rw [ge_iff_le, max_le_iff] at hx
have hx' : max 0 (-2 * R) < x := by linarith
- rw [max_lt_iff] at hx'
+ rw [max_lt_iff] at hx'
rw [norm_norm,
ContinuousMap.norm_le _
(mul_nonneg (mul_nonneg hc.le <| rpow_nonneg_of_nonneg one_half_pos.le _) (norm_nonneg _))]
@@ -213,7 +213,7 @@ theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
have h2 := (isBigO_norm_Icc_restrict_atTop hb h1 (-S) (-R)).comp_tendsto tendsto_neg_at_bot_at_top
have : (fun x : ℝ => |x| ^ (-b)) ∘ Neg.neg = fun x : ℝ => |x| ^ (-b) := by ext1 x;
simp only [Function.comp_apply, abs_neg]
- rw [this] at h2
+ rw [this] at h2
refine' (is_O_of_le _ fun x => _).trans h2
-- equality holds, but less work to prove `≤` alone
rw [norm_norm, Function.comp_apply, norm_norm, ContinuousMap.norm_le _ (norm_nonneg _)]
@@ -232,7 +232,7 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
|x| ^ (-b) :=
by
obtain ⟨r, hr⟩ := K.is_compact.bounded.subset_ball 0
- rw [closed_ball_eq_Icc, zero_add, zero_sub] at hr
+ rw [closed_ball_eq_Icc, zero_add, zero_sub] at hr
have :
∀ x : ℝ,
‖(f.comp (ContinuousMap.addRight x)).restrict K‖ ≤ ‖f.restrict (Icc (x - r) (x + r))‖ :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2023 David Loeffler. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
-/
-import Mathbin.Analysis.Fourier.AddCircle
-import Mathbin.Analysis.Fourier.FourierTransform
-import Mathbin.Analysis.PSeries
-import Mathbin.Analysis.SchwartzSpace
-import Mathbin.MeasureTheory.Measure.Lebesgue.Integral
+import Analysis.Fourier.AddCircle
+import Analysis.Fourier.FourierTransform
+import Analysis.PSeries
+import Analysis.SchwartzSpace
+import MeasureTheory.Measure.Lebesgue.Integral
#align_import analysis.fourier.poisson_summation from "leanprover-community/mathlib"@"e8e130de9dba4ed6897183c3193c752ffadbcc77"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2023 David Loeffler. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
-
-! This file was ported from Lean 3 source module analysis.fourier.poisson_summation
-! leanprover-community/mathlib commit e8e130de9dba4ed6897183c3193c752ffadbcc77
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Fourier.AddCircle
import Mathbin.Analysis.Fourier.FourierTransform
@@ -14,6 +9,8 @@ import Mathbin.Analysis.PSeries
import Mathbin.Analysis.SchwartzSpace
import Mathbin.MeasureTheory.Measure.Lebesgue.Integral
+#align_import analysis.fourier.poisson_summation from "leanprover-community/mathlib"@"e8e130de9dba4ed6897183c3193c752ffadbcc77"
+
/-!
# Poisson's summation formula
mathlib commit https://github.com/leanprover-community/mathlib/commit/6285167a053ad0990fc88e56c48ccd9fae6550eb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
! This file was ported from Lean 3 source module analysis.fourier.poisson_summation
-! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
+! leanprover-community/mathlib commit e8e130de9dba4ed6897183c3193c752ffadbcc77
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -17,6 +17,9 @@ import Mathbin.MeasureTheory.Measure.Lebesgue.Integral
/-!
# Poisson's summation formula
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We prove Poisson's summation formula `∑ (n : ℤ), f n = ∑ (n : ℤ), 𝓕 f n`, where `𝓕 f` is the
Fourier transform of `f`, under the following hypotheses:
* `f` is a continuous function `ℝ → ℂ`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/f2ad3645af9effcdb587637dc28a6074edc813f9
@@ -56,6 +56,7 @@ attribute [local instance] Real.fact_zero_lt_one
open ContinuousMap
+#print Real.fourierCoeff_tsum_comp_add /-
/-- The key lemma for Poisson summation: the `m`-th Fourier coefficient of the periodic function
`∑' n : ℤ, f (x + n)` is the value at `m` of the Fourier transform of `f`. -/
theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
@@ -120,7 +121,9 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
push_cast
ring
#align real.fourier_coeff_tsum_comp_add Real.fourierCoeff_tsum_comp_add
+-/
+#print Real.tsum_eq_tsum_fourierIntegral /-
/-- **Poisson's summation formula**, most general form. -/
theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
(h_norm :
@@ -140,11 +143,13 @@ theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
rw [← Real.fourierCoeff_tsum_comp_add h_norm n, fourier_eval_zero, smul_eq_mul, mul_one]
rfl
#align real.tsum_eq_tsum_fourier_integral Real.tsum_eq_tsum_fourierIntegral
+-/
section RpowDecay
variable {E : Type _} [NormedAddCommGroup E]
+#print isBigO_norm_Icc_restrict_atTop /-
/-- If `f` is `O(x ^ (-b))` at infinity, then so is the function
`λ x, ‖f.restrict (Icc (x + R) (x + S))‖` for any fixed `R` and `S`. -/
theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
@@ -194,7 +199,9 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
· apply abs_of_nonneg; linarith [y.2.1]
· exact abs_of_pos hx'.1
#align is_O_norm_Icc_restrict_at_top isBigO_norm_Icc_restrict_atTop
+-/
+#print isBigO_norm_Icc_restrict_atBot /-
theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
(hf : IsBigO atBot f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
IsBigO atBot (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) :=
@@ -216,7 +223,9 @@ theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
· exact ⟨by linarith [hx.2], by linarith [hx.1]⟩
· rw [ContinuousMap.restrict_apply_mk, ContinuousMap.comp_apply, ContinuousMap.coe_mk, neg_neg]
#align is_O_norm_Icc_restrict_at_bot isBigO_norm_Icc_restrict_atBot
+-/
+#print isBigO_norm_restrict_cocompact /-
theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
(hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b)) (K : Compacts ℝ) :
IsBigO (cocompact ℝ) (fun x => ‖(f.comp (ContinuousMap.addRight x)).restrict K‖) fun x =>
@@ -242,7 +251,9 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
· refine' (is_O_of_le at_top _).trans (isBigO_norm_Icc_restrict_atTop hb hf.2 (-r) r)
simp_rw [norm_norm]; exact this
#align is_O_norm_restrict_cocompact isBigO_norm_restrict_cocompact
+-/
+#print Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable /-
/-- **Poisson's summation formula**, assuming that `f` decays as
`|x| ^ (-b)` for some `1 < b` and its Fourier transform is summable. -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ → ℂ} (hc : Continuous f)
@@ -256,7 +267,9 @@ theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ →
Int.tendsto_coe_cofinite))
hFf
#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay_of_summable Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable
+-/
+#print Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay /-
/-- **Poisson's summation formula**, assuming that both `f` and its Fourier transform decay as
`|x| ^ (-b)` for some `1 < b`. (This is the one-dimensional case of Corollary VII.2.6 of Stein and
Weiss, *Introduction to Fourier analysis on Euclidean spaces*.) -/
@@ -266,11 +279,13 @@ theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay {f : ℝ → ℂ} (hc :
Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf
(summable_of_isBigO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay
+-/
end RpowDecay
section Schwartz
+#print SchwartzMap.tsum_eq_tsum_fourierIntegral /-
/-- **Poisson's summation formula** for Schwartz functions. -/
theorem SchwartzMap.tsum_eq_tsum_fourierIntegral (f g : SchwartzMap ℝ ℂ) (hfg : 𝓕 f = g) :
∑' n : ℤ, f n = ∑' n : ℤ, g n :=
@@ -282,6 +297,7 @@ theorem SchwartzMap.tsum_eq_tsum_fourierIntegral (f g : SchwartzMap ℝ ℂ) (hf
Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay f.continuous one_lt_two
(f.is_O_cocompact_rpow (-2)) (by simpa only [hfg] using g.is_O_cocompact_rpow (-2))
#align schwartz_map.tsum_eq_tsum_fourier_integral SchwartzMap.tsum_eq_tsum_fourierIntegral
+-/
end Schwartz
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -125,7 +125,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
(h_norm :
∀ K : Compacts ℝ, Summable fun n : ℤ => ‖(f.comp <| ContinuousMap.addRight n).restrict K‖)
- (h_sum : Summable fun n : ℤ => 𝓕 f n) : (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
+ (h_sum : Summable fun n : ℤ => 𝓕 f n) : ∑' n : ℤ, f n = ∑' n : ℤ, 𝓕 f n :=
by
let F : C(UnitAddCircle, ℂ) :=
⟨(f.periodic_tsum_comp_add_zsmul 1).lift, continuous_coinduced_dom.mpr (map_continuous _)⟩
@@ -247,7 +247,7 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
`|x| ^ (-b)` for some `1 < b` and its Fourier transform is summable. -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ → ℂ} (hc : Continuous f)
{b : ℝ} (hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
- (hFf : Summable fun n : ℤ => 𝓕 f n) : (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
+ (hFf : Summable fun n : ℤ => 𝓕 f n) : ∑' n : ℤ, f n = ∑' n : ℤ, 𝓕 f n :=
Real.tsum_eq_tsum_fourierIntegral
(fun K =>
summable_of_isBigO (Real.summable_abs_int_rpow hb)
@@ -262,8 +262,7 @@ theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ →
Weiss, *Introduction to Fourier analysis on Euclidean spaces*.) -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay {f : ℝ → ℂ} (hc : Continuous f) {b : ℝ}
(hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
- (hFf : IsBigO (cocompact ℝ) (𝓕 f) fun x : ℝ => |x| ^ (-b)) :
- (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
+ (hFf : IsBigO (cocompact ℝ) (𝓕 f) fun x : ℝ => |x| ^ (-b)) : ∑' n : ℤ, f n = ∑' n : ℤ, 𝓕 f n :=
Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf
(summable_of_isBigO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay
@@ -274,7 +273,7 @@ section Schwartz
/-- **Poisson's summation formula** for Schwartz functions. -/
theorem SchwartzMap.tsum_eq_tsum_fourierIntegral (f g : SchwartzMap ℝ ℂ) (hfg : 𝓕 f = g) :
- (∑' n : ℤ, f n) = ∑' n : ℤ, g n :=
+ ∑' n : ℤ, f n = ∑' n : ℤ, g n :=
by
-- We know that Schwartz functions are `O(‖x ^ (-b)‖)` for *every* `b`; for this argument we take
-- `b = 2` and work with that.
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -119,7 +119,6 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
congr 2
push_cast
ring
-
#align real.fourier_coeff_tsum_comp_add Real.fourierCoeff_tsum_comp_add
/-- **Poisson's summation formula**, most general form. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -133,7 +133,7 @@ theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
have : Summable (fourierCoeff F) := by
convert h_sum
exact funext fun n => Real.fourierCoeff_tsum_comp_add h_norm n
- convert(has_pointwise_sum_fourier_series_of_summable this 0).tsum_eq.symm using 1
+ convert (has_pointwise_sum_fourier_series_of_summable this 0).tsum_eq.symm using 1
· have := (has_sum_apply (summable_of_locally_summable_norm h_norm).HasSum 0).tsum_eq
simpa only [coe_mk, ← QuotientAddGroup.mk_zero, periodic.lift_coe, zsmul_one, comp_apply,
coe_add_right, zero_add] using this
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -97,7 +97,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
exact funext fun n => neK _ _
_ = ∑' n : ℤ, ∫ x in 0 ..1, (e * f).comp (ContinuousMap.addRight n) x :=
by
- simp only [ContinuousMap.comp_apply, mul_comp] at eadd⊢
+ simp only [ContinuousMap.comp_apply, mul_comp] at eadd ⊢
simp_rw [eadd]
-- Rearrange sum of interval integrals into an integral over `ℝ`.
_ =
@@ -106,7 +106,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
suffices : integrable ⇑(e * f); exact this.has_sum_interval_integral_comp_add_int.tsum_eq
apply integrable_of_summable_norm_Icc
convert hf ⟨Icc 0 1, is_compact_Icc⟩
- simp_rw [ContinuousMap.comp_apply, mul_comp] at eadd⊢
+ simp_rw [ContinuousMap.comp_apply, mul_comp] at eadd ⊢
simp_rw [eadd]
exact funext fun n => neK ⟨Icc 0 1, is_compact_Icc⟩ _
-- Minor tidying to finish
@@ -159,7 +159,7 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
∀ x : ℝ, max 0 (-2 * R) < x → ∀ y : ℝ, x + R ≤ y → y ^ (-b) ≤ (1 / 2) ^ (-b) * x ^ (-b) :=
by
intro x hx y hy
- rw [max_lt_iff] at hx
+ rw [max_lt_iff] at hx
have hxR : 0 < x + R := by
rcases le_or_lt 0 R with (h | h)
· exact add_pos_of_pos_of_nonneg hx.1 h
@@ -179,12 +179,12 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
exact rpow_le_rpow (mul_pos one_half_pos hx.1).le (by linarith) hb.le
-- Now the main proof.
obtain ⟨c, hc, hc'⟩ := hf.exists_pos
- simp only [is_O, is_O_with, eventually_at_top] at hc'⊢
+ simp only [is_O, is_O_with, eventually_at_top] at hc' ⊢
obtain ⟨d, hd⟩ := hc'
refine' ⟨c * (1 / 2) ^ (-b), ⟨max (1 + max 0 (-2 * R)) (d - R), fun x hx => _⟩⟩
- rw [ge_iff_le, max_le_iff] at hx
+ rw [ge_iff_le, max_le_iff] at hx
have hx' : max 0 (-2 * R) < x := by linarith
- rw [max_lt_iff] at hx'
+ rw [max_lt_iff] at hx'
rw [norm_norm,
ContinuousMap.norm_le _
(mul_nonneg (mul_nonneg hc.le <| rpow_nonneg_of_nonneg one_half_pos.le _) (norm_nonneg _))]
@@ -207,7 +207,7 @@ theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
have h2 := (isBigO_norm_Icc_restrict_atTop hb h1 (-S) (-R)).comp_tendsto tendsto_neg_at_bot_at_top
have : (fun x : ℝ => |x| ^ (-b)) ∘ Neg.neg = fun x : ℝ => |x| ^ (-b) := by ext1 x;
simp only [Function.comp_apply, abs_neg]
- rw [this] at h2
+ rw [this] at h2
refine' (is_O_of_le _ fun x => _).trans h2
-- equality holds, but less work to prove `≤` alone
rw [norm_norm, Function.comp_apply, norm_norm, ContinuousMap.norm_le _ (norm_nonneg _)]
@@ -224,7 +224,7 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
|x| ^ (-b) :=
by
obtain ⟨r, hr⟩ := K.is_compact.bounded.subset_ball 0
- rw [closed_ball_eq_Icc, zero_add, zero_sub] at hr
+ rw [closed_ball_eq_Icc, zero_add, zero_sub] at hr
have :
∀ x : ℝ,
‖(f.comp (ContinuousMap.addRight x)).restrict K‖ ≤ ‖f.restrict (Icc (x - r) (x + r))‖ :=
@@ -236,7 +236,7 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
exact ⟨by linarith [(hr hy).1], by linarith [(hr hy).2]⟩
simp_rw [ContinuousMap.restrict_apply, ContinuousMap.comp_apply, ContinuousMap.coe_addRight,
Subtype.coe_mk]
- simp_rw [cocompact_eq, is_O_sup] at hf⊢
+ simp_rw [cocompact_eq, is_O_sup] at hf ⊢
constructor
· refine' (is_O_of_le at_bot _).trans (isBigO_norm_Icc_restrict_atBot hb hf.1 (-r) r)
simp_rw [norm_norm]; exact this
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -50,7 +50,7 @@ open Set hiding restrict_apply
open TopologicalSpace Filter MeasureTheory Asymptotics
-open Real BigOperators Filter FourierTransform
+open scoped Real BigOperators Filter FourierTransform
attribute [local instance] Real.fact_zero_lt_one
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -72,8 +72,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
simp_rw [norm_eq_supr_norm, restrict_apply, mul_apply, norm_mul, this, one_mul]
have eadd : ∀ n : ℤ, e.comp (ContinuousMap.addRight n) = e :=
by
- intro n
- ext1 x
+ intro n; ext1 x
have : periodic e 1 := periodic.comp (fun x => AddCircle.coe_add_period 1 x) _
simpa only [mul_one] using this.int_mul n x
-- Now the main argument. First unwind some definitions.
@@ -193,8 +192,7 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
have A : ∀ x : ℝ, 0 ≤ |x| ^ (-b) := fun x => by positivity
rwa [mul_assoc, mul_le_mul_left hc, norm_of_nonneg (A _), norm_of_nonneg (A _)]
convert claim x (by linarith only [hx.1]) y.1 y.2.1
- · apply abs_of_nonneg
- linarith [y.2.1]
+ · apply abs_of_nonneg; linarith [y.2.1]
· exact abs_of_pos hx'.1
#align is_O_norm_Icc_restrict_at_top isBigO_norm_Icc_restrict_atTop
@@ -205,12 +203,9 @@ theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
have h1 : is_O at_top (f.comp (ContinuousMap.mk _ continuous_neg)) fun x : ℝ => |x| ^ (-b) :=
by
convert hf.comp_tendsto tendsto_neg_at_top_at_bot
- ext1 x
- simp only [Function.comp_apply, abs_neg]
+ ext1 x; simp only [Function.comp_apply, abs_neg]
have h2 := (isBigO_norm_Icc_restrict_atTop hb h1 (-S) (-R)).comp_tendsto tendsto_neg_at_bot_at_top
- have : (fun x : ℝ => |x| ^ (-b)) ∘ Neg.neg = fun x : ℝ => |x| ^ (-b) :=
- by
- ext1 x
+ have : (fun x : ℝ => |x| ^ (-b)) ∘ Neg.neg = fun x : ℝ => |x| ^ (-b) := by ext1 x;
simp only [Function.comp_apply, abs_neg]
rw [this] at h2
refine' (is_O_of_le _ fun x => _).trans h2
@@ -244,11 +239,9 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
simp_rw [cocompact_eq, is_O_sup] at hf⊢
constructor
· refine' (is_O_of_le at_bot _).trans (isBigO_norm_Icc_restrict_atBot hb hf.1 (-r) r)
- simp_rw [norm_norm]
- exact this
+ simp_rw [norm_norm]; exact this
· refine' (is_O_of_le at_top _).trans (isBigO_norm_Icc_restrict_atTop hb hf.2 (-r) r)
- simp_rw [norm_norm]
- exact this
+ simp_rw [norm_norm]; exact this
#align is_O_norm_restrict_cocompact isBigO_norm_restrict_cocompact
/-- **Poisson's summation formula**, assuming that `f` decays as
mathlib commit https://github.com/leanprover-community/mathlib/commit/f51de8769c34652d82d1c8e5f8f18f8374782bed
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
! This file was ported from Lean 3 source module analysis.fourier.poisson_summation
-! leanprover-community/mathlib commit 4fa54b337f7d52805480306db1b1439c741848c8
+! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -12,6 +12,7 @@ import Mathbin.Analysis.Fourier.AddCircle
import Mathbin.Analysis.Fourier.FourierTransform
import Mathbin.Analysis.PSeries
import Mathbin.Analysis.SchwartzSpace
+import Mathbin.MeasureTheory.Measure.Lebesgue.Integral
/-!
# Poisson's summation formula
mathlib commit https://github.com/leanprover-community/mathlib/commit/f8c79b0a623404854a2902b836eac32156fd7712
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
! This file was ported from Lean 3 source module analysis.fourier.poisson_summation
-! leanprover-community/mathlib commit 0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
+! leanprover-community/mathlib commit 4fa54b337f7d52805480306db1b1439c741848c8
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -12,7 +12,6 @@ import Mathbin.Analysis.Fourier.AddCircle
import Mathbin.Analysis.Fourier.FourierTransform
import Mathbin.Analysis.PSeries
import Mathbin.Analysis.SchwartzSpace
-import Mathbin.Analysis.SpecialFunctions.Pow.Tactic
/-!
# Poisson's summation formula
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
! This file was ported from Lean 3 source module analysis.fourier.poisson_summation
-! leanprover-community/mathlib commit 38f16f960f5006c6c0c2bac7b0aba5273188f4e5
+! leanprover-community/mathlib commit 0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -12,6 +12,7 @@ import Mathbin.Analysis.Fourier.AddCircle
import Mathbin.Analysis.Fourier.FourierTransform
import Mathbin.Analysis.PSeries
import Mathbin.Analysis.SchwartzSpace
+import Mathbin.Analysis.SpecialFunctions.Pow.Tactic
/-!
# Poisson's summation formula
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -148,9 +148,9 @@ variable {E : Type _} [NormedAddCommGroup E]
/-- If `f` is `O(x ^ (-b))` at infinity, then so is the function
`λ x, ‖f.restrict (Icc (x + R) (x + S))‖` for any fixed `R` and `S`. -/
-theorem isO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
- (hf : IsO atTop f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
- IsO atTop (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) :=
+theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
+ (hf : IsBigO atTop f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
+ IsBigO atTop (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) :=
by
-- First establish an explicit estimate on decay of inverse powers.
-- This is logically independent of the rest of the proof, but of no mathematical interest in
@@ -195,18 +195,18 @@ theorem isO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
· apply abs_of_nonneg
linarith [y.2.1]
· exact abs_of_pos hx'.1
-#align is_O_norm_Icc_restrict_at_top isO_norm_Icc_restrict_atTop
+#align is_O_norm_Icc_restrict_at_top isBigO_norm_Icc_restrict_atTop
-theorem isO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
- (hf : IsO atBot f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
- IsO atBot (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) :=
+theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
+ (hf : IsBigO atBot f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
+ IsBigO atBot (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) :=
by
have h1 : is_O at_top (f.comp (ContinuousMap.mk _ continuous_neg)) fun x : ℝ => |x| ^ (-b) :=
by
convert hf.comp_tendsto tendsto_neg_at_top_at_bot
ext1 x
simp only [Function.comp_apply, abs_neg]
- have h2 := (isO_norm_Icc_restrict_atTop hb h1 (-S) (-R)).comp_tendsto tendsto_neg_at_bot_at_top
+ have h2 := (isBigO_norm_Icc_restrict_atTop hb h1 (-S) (-R)).comp_tendsto tendsto_neg_at_bot_at_top
have : (fun x : ℝ => |x| ^ (-b)) ∘ Neg.neg = fun x : ℝ => |x| ^ (-b) :=
by
ext1 x
@@ -220,11 +220,11 @@ theorem isO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
refine' (le_of_eq _).trans (ContinuousMap.norm_coe_le_norm _ ⟨-x, _⟩)
· exact ⟨by linarith [hx.2], by linarith [hx.1]⟩
· rw [ContinuousMap.restrict_apply_mk, ContinuousMap.comp_apply, ContinuousMap.coe_mk, neg_neg]
-#align is_O_norm_Icc_restrict_at_bot isO_norm_Icc_restrict_atBot
+#align is_O_norm_Icc_restrict_at_bot isBigO_norm_Icc_restrict_atBot
-theorem isO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
- (hf : IsO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b)) (K : Compacts ℝ) :
- IsO (cocompact ℝ) (fun x => ‖(f.comp (ContinuousMap.addRight x)).restrict K‖) fun x =>
+theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
+ (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b)) (K : Compacts ℝ) :
+ IsBigO (cocompact ℝ) (fun x => ‖(f.comp (ContinuousMap.addRight x)).restrict K‖) fun x =>
|x| ^ (-b) :=
by
obtain ⟨r, hr⟩ := K.is_compact.bounded.subset_ball 0
@@ -242,23 +242,23 @@ theorem isO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
Subtype.coe_mk]
simp_rw [cocompact_eq, is_O_sup] at hf⊢
constructor
- · refine' (is_O_of_le at_bot _).trans (isO_norm_Icc_restrict_atBot hb hf.1 (-r) r)
+ · refine' (is_O_of_le at_bot _).trans (isBigO_norm_Icc_restrict_atBot hb hf.1 (-r) r)
simp_rw [norm_norm]
exact this
- · refine' (is_O_of_le at_top _).trans (isO_norm_Icc_restrict_atTop hb hf.2 (-r) r)
+ · refine' (is_O_of_le at_top _).trans (isBigO_norm_Icc_restrict_atTop hb hf.2 (-r) r)
simp_rw [norm_norm]
exact this
-#align is_O_norm_restrict_cocompact isO_norm_restrict_cocompact
+#align is_O_norm_restrict_cocompact isBigO_norm_restrict_cocompact
/-- **Poisson's summation formula**, assuming that `f` decays as
`|x| ^ (-b)` for some `1 < b` and its Fourier transform is summable. -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ → ℂ} (hc : Continuous f)
- {b : ℝ} (hb : 1 < b) (hf : IsO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
+ {b : ℝ} (hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
(hFf : Summable fun n : ℤ => 𝓕 f n) : (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
Real.tsum_eq_tsum_fourierIntegral
(fun K =>
- summable_of_isO (Real.summable_abs_int_rpow hb)
- ((isO_norm_restrict_cocompact (ContinuousMap.mk _ hc) (zero_lt_one.trans hb) hf
+ summable_of_isBigO (Real.summable_abs_int_rpow hb)
+ ((isBigO_norm_restrict_cocompact (ContinuousMap.mk _ hc) (zero_lt_one.trans hb) hf
K).comp_tendsto
Int.tendsto_coe_cofinite))
hFf
@@ -268,10 +268,11 @@ theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ →
`|x| ^ (-b)` for some `1 < b`. (This is the one-dimensional case of Corollary VII.2.6 of Stein and
Weiss, *Introduction to Fourier analysis on Euclidean spaces*.) -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay {f : ℝ → ℂ} (hc : Continuous f) {b : ℝ}
- (hb : 1 < b) (hf : IsO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
- (hFf : IsO (cocompact ℝ) (𝓕 f) fun x : ℝ => |x| ^ (-b)) : (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
+ (hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
+ (hFf : IsBigO (cocompact ℝ) (𝓕 f) fun x : ℝ => |x| ^ (-b)) :
+ (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf
- (summable_of_isO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
+ (summable_of_isBigO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay
end RpowDecay
mathlib commit https://github.com/leanprover-community/mathlib/commit/290a7ba01fbcab1b64757bdaa270d28f4dcede35
@@ -238,7 +238,7 @@ theorem isO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
rintro ⟨y, hy⟩
refine' (le_of_eq _).trans (ContinuousMap.norm_coe_le_norm _ ⟨y + x, _⟩)
exact ⟨by linarith [(hr hy).1], by linarith [(hr hy).2]⟩
- simp_rw [ContinuousMap.restrict_apply, ContinuousMap.comp_apply, ContinuousMap.coe_add_right,
+ simp_rw [ContinuousMap.restrict_apply, ContinuousMap.comp_apply, ContinuousMap.coe_addRight,
Subtype.coe_mk]
simp_rw [cocompact_eq, is_O_sup] at hf⊢
constructor
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -133,7 +133,7 @@ theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
have : Summable (fourierCoeff F) := by
convert h_sum
exact funext fun n => Real.fourierCoeff_tsum_comp_add h_norm n
- convert (has_pointwise_sum_fourier_series_of_summable this 0).tsum_eq.symm using 1
+ convert(has_pointwise_sum_fourier_series_of_summable this 0).tsum_eq.symm using 1
· have := (has_sum_apply (summable_of_locally_summable_norm h_norm).HasSum 0).tsum_eq
simpa only [coe_mk, ← QuotientAddGroup.mk_zero, periodic.lift_coe, zsmul_one, comp_apply,
coe_add_right, zero_add] using this
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -4,12 +4,14 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
! This file was ported from Lean 3 source module analysis.fourier.poisson_summation
-! leanprover-community/mathlib commit 3353f3371120058977ce1e20bf7fc8986c0fb042
+! leanprover-community/mathlib commit 38f16f960f5006c6c0c2bac7b0aba5273188f4e5
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.Fourier.AddCircle
import Mathbin.Analysis.Fourier.FourierTransform
+import Mathbin.Analysis.PSeries
+import Mathbin.Analysis.SchwartzSpace
/-!
# Poisson's summation formula
@@ -19,10 +21,19 @@ Fourier transform of `f`, under the following hypotheses:
* `f` is a continuous function `ℝ → ℂ`.
* The sum `∑ (n : ℤ), 𝓕 f n` is convergent.
* For all compacts `K ⊂ ℝ`, the sum `∑ (n : ℤ), sup { ‖f(x + n)‖ | x ∈ K }` is convergent.
+See `real.tsum_eq_tsum_fourier_integral` for this formulation.
+
+These hypotheses are potentially a little awkward to apply, so we also provide the less general but
+easier-to-use result `real.tsum_eq_tsum_fourier_integral_of_rpow_decay`, in which we assume `f` and
+`𝓕 f` both decay as `|x| ^ (-b)` for some `b > 1`, and the even more specific result
+`schwartz_map.tsum_eq_tsum_fourier_integral`, where we assume that both `f` and `𝓕 f` are Schwartz
+functions.
## TODO
-* Show that the conditions on `f` are automatically satisfied for Schwartz functions.
+At the moment `schwartz_map.tsum_eq_tsum_fourier_integral` requires separate proofs that both `f`
+and `𝓕 f` are Schwartz functions. In fact, `𝓕 f` is automatically Schwartz if `f` is; and once
+we have this lemma in the library, we should adjust the hypotheses here accordingly.
-/
@@ -30,11 +41,13 @@ noncomputable section
open Function hiding comp_apply
-open Complex Real
+open Complex hiding abs_of_nonneg
+
+open Real
open Set hiding restrict_apply
-open TopologicalSpace Filter MeasureTheory
+open TopologicalSpace Filter MeasureTheory Asymptotics
open Real BigOperators Filter FourierTransform
@@ -109,7 +122,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
#align real.fourier_coeff_tsum_comp_add Real.fourierCoeff_tsum_comp_add
-/-- **Poisson's summation formula**. -/
+/-- **Poisson's summation formula**, most general form. -/
theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
(h_norm :
∀ K : Compacts ℝ, Summable fun n : ℤ => ‖(f.comp <| ContinuousMap.addRight n).restrict K‖)
@@ -129,3 +142,153 @@ theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
rfl
#align real.tsum_eq_tsum_fourier_integral Real.tsum_eq_tsum_fourierIntegral
+section RpowDecay
+
+variable {E : Type _} [NormedAddCommGroup E]
+
+/-- If `f` is `O(x ^ (-b))` at infinity, then so is the function
+`λ x, ‖f.restrict (Icc (x + R) (x + S))‖` for any fixed `R` and `S`. -/
+theorem isO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
+ (hf : IsO atTop f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
+ IsO atTop (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) :=
+ by
+ -- First establish an explicit estimate on decay of inverse powers.
+ -- This is logically independent of the rest of the proof, but of no mathematical interest in
+ -- itself, so it is proved using `async` rather than being formulated as a separate lemma.
+ have claim :
+ ∀ x : ℝ, max 0 (-2 * R) < x → ∀ y : ℝ, x + R ≤ y → y ^ (-b) ≤ (1 / 2) ^ (-b) * x ^ (-b) :=
+ by
+ intro x hx y hy
+ rw [max_lt_iff] at hx
+ have hxR : 0 < x + R := by
+ rcases le_or_lt 0 R with (h | h)
+ · exact add_pos_of_pos_of_nonneg hx.1 h
+ · rw [← sub_lt_iff_lt_add, zero_sub]
+ refine' lt_trans _ hx.2
+ rwa [neg_mul, neg_lt_neg_iff, two_mul, add_lt_iff_neg_left]
+ have hy' : 0 < y := hxR.trans_le hy
+ have : y ^ (-b) ≤ (x + R) ^ (-b) :=
+ by
+ rw [rpow_neg hy'.le, rpow_neg hxR.le,
+ inv_le_inv (rpow_pos_of_pos hy' _) (rpow_pos_of_pos hxR _)]
+ exact rpow_le_rpow hxR.le hy hb.le
+ refine' this.trans _
+ rw [← mul_rpow one_half_pos.le hx.1.le, rpow_neg (mul_pos one_half_pos hx.1).le,
+ rpow_neg hxR.le]
+ refine' inv_le_inv_of_le (rpow_pos_of_pos (mul_pos one_half_pos hx.1) _) _
+ exact rpow_le_rpow (mul_pos one_half_pos hx.1).le (by linarith) hb.le
+ -- Now the main proof.
+ obtain ⟨c, hc, hc'⟩ := hf.exists_pos
+ simp only [is_O, is_O_with, eventually_at_top] at hc'⊢
+ obtain ⟨d, hd⟩ := hc'
+ refine' ⟨c * (1 / 2) ^ (-b), ⟨max (1 + max 0 (-2 * R)) (d - R), fun x hx => _⟩⟩
+ rw [ge_iff_le, max_le_iff] at hx
+ have hx' : max 0 (-2 * R) < x := by linarith
+ rw [max_lt_iff] at hx'
+ rw [norm_norm,
+ ContinuousMap.norm_le _
+ (mul_nonneg (mul_nonneg hc.le <| rpow_nonneg_of_nonneg one_half_pos.le _) (norm_nonneg _))]
+ refine' fun y => (hd y.1 (by linarith [hx.1, y.2.1])).trans _
+ have A : ∀ x : ℝ, 0 ≤ |x| ^ (-b) := fun x => by positivity
+ rwa [mul_assoc, mul_le_mul_left hc, norm_of_nonneg (A _), norm_of_nonneg (A _)]
+ convert claim x (by linarith only [hx.1]) y.1 y.2.1
+ · apply abs_of_nonneg
+ linarith [y.2.1]
+ · exact abs_of_pos hx'.1
+#align is_O_norm_Icc_restrict_at_top isO_norm_Icc_restrict_atTop
+
+theorem isO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
+ (hf : IsO atBot f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
+ IsO atBot (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) :=
+ by
+ have h1 : is_O at_top (f.comp (ContinuousMap.mk _ continuous_neg)) fun x : ℝ => |x| ^ (-b) :=
+ by
+ convert hf.comp_tendsto tendsto_neg_at_top_at_bot
+ ext1 x
+ simp only [Function.comp_apply, abs_neg]
+ have h2 := (isO_norm_Icc_restrict_atTop hb h1 (-S) (-R)).comp_tendsto tendsto_neg_at_bot_at_top
+ have : (fun x : ℝ => |x| ^ (-b)) ∘ Neg.neg = fun x : ℝ => |x| ^ (-b) :=
+ by
+ ext1 x
+ simp only [Function.comp_apply, abs_neg]
+ rw [this] at h2
+ refine' (is_O_of_le _ fun x => _).trans h2
+ -- equality holds, but less work to prove `≤` alone
+ rw [norm_norm, Function.comp_apply, norm_norm, ContinuousMap.norm_le _ (norm_nonneg _)]
+ rintro ⟨x, hx⟩
+ rw [ContinuousMap.restrict_apply_mk]
+ refine' (le_of_eq _).trans (ContinuousMap.norm_coe_le_norm _ ⟨-x, _⟩)
+ · exact ⟨by linarith [hx.2], by linarith [hx.1]⟩
+ · rw [ContinuousMap.restrict_apply_mk, ContinuousMap.comp_apply, ContinuousMap.coe_mk, neg_neg]
+#align is_O_norm_Icc_restrict_at_bot isO_norm_Icc_restrict_atBot
+
+theorem isO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
+ (hf : IsO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b)) (K : Compacts ℝ) :
+ IsO (cocompact ℝ) (fun x => ‖(f.comp (ContinuousMap.addRight x)).restrict K‖) fun x =>
+ |x| ^ (-b) :=
+ by
+ obtain ⟨r, hr⟩ := K.is_compact.bounded.subset_ball 0
+ rw [closed_ball_eq_Icc, zero_add, zero_sub] at hr
+ have :
+ ∀ x : ℝ,
+ ‖(f.comp (ContinuousMap.addRight x)).restrict K‖ ≤ ‖f.restrict (Icc (x - r) (x + r))‖ :=
+ by
+ intro x
+ rw [ContinuousMap.norm_le _ (norm_nonneg _)]
+ rintro ⟨y, hy⟩
+ refine' (le_of_eq _).trans (ContinuousMap.norm_coe_le_norm _ ⟨y + x, _⟩)
+ exact ⟨by linarith [(hr hy).1], by linarith [(hr hy).2]⟩
+ simp_rw [ContinuousMap.restrict_apply, ContinuousMap.comp_apply, ContinuousMap.coe_add_right,
+ Subtype.coe_mk]
+ simp_rw [cocompact_eq, is_O_sup] at hf⊢
+ constructor
+ · refine' (is_O_of_le at_bot _).trans (isO_norm_Icc_restrict_atBot hb hf.1 (-r) r)
+ simp_rw [norm_norm]
+ exact this
+ · refine' (is_O_of_le at_top _).trans (isO_norm_Icc_restrict_atTop hb hf.2 (-r) r)
+ simp_rw [norm_norm]
+ exact this
+#align is_O_norm_restrict_cocompact isO_norm_restrict_cocompact
+
+/-- **Poisson's summation formula**, assuming that `f` decays as
+`|x| ^ (-b)` for some `1 < b` and its Fourier transform is summable. -/
+theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ → ℂ} (hc : Continuous f)
+ {b : ℝ} (hb : 1 < b) (hf : IsO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
+ (hFf : Summable fun n : ℤ => 𝓕 f n) : (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
+ Real.tsum_eq_tsum_fourierIntegral
+ (fun K =>
+ summable_of_isO (Real.summable_abs_int_rpow hb)
+ ((isO_norm_restrict_cocompact (ContinuousMap.mk _ hc) (zero_lt_one.trans hb) hf
+ K).comp_tendsto
+ Int.tendsto_coe_cofinite))
+ hFf
+#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay_of_summable Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable
+
+/-- **Poisson's summation formula**, assuming that both `f` and its Fourier transform decay as
+`|x| ^ (-b)` for some `1 < b`. (This is the one-dimensional case of Corollary VII.2.6 of Stein and
+Weiss, *Introduction to Fourier analysis on Euclidean spaces*.) -/
+theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay {f : ℝ → ℂ} (hc : Continuous f) {b : ℝ}
+ (hb : 1 < b) (hf : IsO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
+ (hFf : IsO (cocompact ℝ) (𝓕 f) fun x : ℝ => |x| ^ (-b)) : (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
+ Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf
+ (summable_of_isO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
+#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay
+
+end RpowDecay
+
+section Schwartz
+
+/-- **Poisson's summation formula** for Schwartz functions. -/
+theorem SchwartzMap.tsum_eq_tsum_fourierIntegral (f g : SchwartzMap ℝ ℂ) (hfg : 𝓕 f = g) :
+ (∑' n : ℤ, f n) = ∑' n : ℤ, g n :=
+ by
+ -- We know that Schwartz functions are `O(‖x ^ (-b)‖)` for *every* `b`; for this argument we take
+ -- `b = 2` and work with that.
+ simp_rw [← hfg]
+ exact
+ Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay f.continuous one_lt_two
+ (f.is_O_cocompact_rpow (-2)) (by simpa only [hfg] using g.is_O_cocompact_rpow (-2))
+#align schwartz_map.tsum_eq_tsum_fourier_integral SchwartzMap.tsum_eq_tsum_fourierIntegral
+
+end Schwartz
+
mathlib commit https://github.com/leanprover-community/mathlib/commit/c23aca359d4be6975b2a577d5cdb9d77b82c7407
@@ -174,9 +174,9 @@ theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
rintro ⟨x, hx⟩
rw [ContinuousMap.restrict_apply_mk]
refine' (le_of_eq _).trans (ContinuousMap.norm_coe_le_norm _ ⟨-x, _⟩)
- rw [ContinuousMap.restrict_apply_mk, ContinuousMap.comp_apply, ContinuousMap.coe_mk,
- ContinuousMap.coe_mk, neg_neg]
- exact ⟨by linarith [hx.2], by linarith [hx.1]⟩
+ · rw [ContinuousMap.restrict_apply_mk, ContinuousMap.comp_apply, ContinuousMap.coe_mk,
+ ContinuousMap.coe_mk, neg_neg]
+ exact ⟨by linarith [hx.2], by linarith [hx.1]⟩
set_option linter.uppercaseLean3 false in
#align is_O_norm_Icc_restrict_at_bot isBigO_norm_Icc_restrict_atBot
This is a (rather boring) technical step in developing the theory of Hurwitz zeta functions: one needs to show that certain
sums related to Jacobi theta series decay exponentially for large t
.
@@ -49,8 +49,6 @@ open TopologicalSpace Filter MeasureTheory Asymptotics
open scoped Real BigOperators Filter FourierTransform
-attribute [local instance] Real.fact_zero_lt_one
-
open ContinuousMap
/-- The key lemma for Poisson summation: the `m`-th Fourier coefficient of the periodic function
AddChar
machinery in FourierTransform
(#11417)
The file Analysis/Fourier/FourierTransform.lean
predates the general approach to additive characters elsewhere in the library; this merges the two (getting rid of the rather kludgy notation e [x]
in the process). I also rejigged some slow proofs, to make them compile slightly faster.
@@ -62,7 +62,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
-- block, but I think it's more legible this way. We start with preliminaries about the integrand.
let e : C(ℝ, ℂ) := (fourier (-m)).comp ⟨((↑) : ℝ → UnitAddCircle), continuous_quotient_mk'⟩
have neK : ∀ (K : Compacts ℝ) (g : C(ℝ, ℂ)), ‖(e * g).restrict K‖ = ‖g.restrict K‖ := by
- have : ∀ x : ℝ, ‖e x‖ = 1 := fun x => abs_coe_circle (AddCircle.toCircle (-m • x))
+ have (x : ℝ) : ‖e x‖ = 1 := abs_coe_circle (AddCircle.toCircle (-m • x))
intro K g
simp_rw [norm_eq_iSup_norm, restrict_apply, mul_apply, norm_mul, this, one_mul]
have eadd : ∀ (n : ℤ), e.comp (ContinuousMap.addRight n) = e := by
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -73,7 +73,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
calc
fourierCoeff (Periodic.lift <| f.periodic_tsum_comp_add_zsmul 1) m =
∫ x in (0 : ℝ)..1, e x * (∑' n : ℤ, f.comp (ContinuousMap.addRight n)) x := by
- simp_rw [fourierCoeff_eq_intervalIntegral _ m 0, div_one, one_smul, zero_add, comp_apply,
+ simp_rw [fourierCoeff_eq_intervalIntegral _ m 0, div_one, one_smul, zero_add, e, comp_apply,
coe_mk, Periodic.lift_coe, zsmul_one, smul_eq_mul]
-- Transform sum in C(ℝ, ℂ) evaluated at x into pointwise sum of values.
_ = ∫ x in (0:ℝ)..1, ∑' n : ℤ, (e * f.comp (ContinuousMap.addRight n)) x := by
@@ -120,7 +120,7 @@ theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
· simpa only [F, coe_mk, ← QuotientAddGroup.mk_zero, Periodic.lift_coe, zsmul_one, comp_apply,
coe_addRight, zero_add]
using (hasSum_apply (summable_of_locally_summable_norm h_norm).hasSum x).tsum_eq
- · simp_rw [← Real.fourierCoeff_tsum_comp_add h_norm, smul_eq_mul, coe_mk]
+ · simp_rw [← Real.fourierCoeff_tsum_comp_add h_norm, smul_eq_mul, F, coe_mk]
#align real.tsum_eq_tsum_fourier_integral Real.tsum_eq_tsum_fourierIntegral
Also extend the notation 𝓕
for the Fourier transform to inner product spaces, introduce a notation 𝓕⁻
for the inverse Fourier transform, and generalize a few results from the real line to inner product spaces.
@@ -97,7 +97,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
exact funext fun n => neK ⟨Icc 0 1, isCompact_Icc⟩ _
-- Minor tidying to finish
_ = 𝓕 f m := by
- rw [fourierIntegral_eq_integral_exp_smul]
+ rw [fourierIntegral_real_eq_integral_exp_smul]
congr 1 with x : 1
rw [smul_eq_mul, comp_apply, coe_mk, coe_mk, ContinuousMap.toFun_eq_coe, fourier_coe_apply]
congr 2
@@ -117,7 +117,7 @@ theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
convert h_sum
exact Real.fourierCoeff_tsum_comp_add h_norm _
convert (has_pointwise_sum_fourier_series_of_summable this x).tsum_eq.symm using 1
- · simpa only [coe_mk, ← QuotientAddGroup.mk_zero, Periodic.lift_coe, zsmul_one, comp_apply,
+ · simpa only [F, coe_mk, ← QuotientAddGroup.mk_zero, Periodic.lift_coe, zsmul_one, comp_apply,
coe_addRight, zero_add]
using (hasSum_apply (summable_of_locally_summable_norm h_norm).hasSum x).tsum_eq
· simp_rw [← Real.fourierCoeff_tsum_comp_add h_norm, smul_eq_mul, coe_mk]
λ x,
in doc comments (#10727)
Use Lean 4 syntax fun x ↦
instead, matching the style guide.
This is close to exhaustive for doc comments; mathlib has about 460 remaining uses of λ (not all in Lean 3 syntax).
@@ -129,7 +129,7 @@ section RpowDecay
variable {E : Type*} [NormedAddCommGroup E]
/-- If `f` is `O(x ^ (-b))` at infinity, then so is the function
-`λ x, ‖f.restrict (Icc (x + R) (x + S))‖` for any fixed `R` and `S`. -/
+`fun x ↦ ‖f.restrict (Icc (x + R) (x + S))‖` for any fixed `R` and `S`. -/
theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
(hf : f =O[atTop] fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
(fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) =O[atTop] fun x : ℝ => |x| ^ (-b) := by
@@ -195,7 +195,7 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
refine' (le_of_eq _).trans (ContinuousMap.norm_coe_le_norm _ ⟨y + x, _⟩)
· simp_rw [ContinuousMap.restrict_apply, ContinuousMap.comp_apply, ContinuousMap.coe_addRight]
· exact ⟨by linarith [(hr hy).1], by linarith [(hr hy).2]⟩
- simp_rw [cocompact_eq, isBigO_sup] at hf ⊢
+ simp_rw [cocompact_eq_atBot_atTop, isBigO_sup] at hf ⊢
constructor
· refine' (isBigO_of_le atBot _).trans (isBigO_norm_Icc_restrict_atBot hb hf.1 (-r) r)
simp_rw [norm_norm]; exact this
Add a more general version of the Jacobi theta function with a second variable, and prove the transformation law for this more general function rather than just for the one-variable version. Preparatory to functional equations for Dirichlet L-functions.
@@ -109,19 +109,19 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
(h_norm :
∀ K : Compacts ℝ, Summable fun n : ℤ => ‖(f.comp <| ContinuousMap.addRight n).restrict K‖)
- (h_sum : Summable fun n : ℤ => 𝓕 f n) : ∑' n : ℤ, f n = (∑' n : ℤ, 𝓕 f n) := by
+ (h_sum : Summable fun n : ℤ => 𝓕 f n) (x : ℝ) :
+ ∑' n : ℤ, f (x + n) = ∑' n : ℤ, 𝓕 f n * fourier n (x : UnitAddCircle) := by
let F : C(UnitAddCircle, ℂ) :=
⟨(f.periodic_tsum_comp_add_zsmul 1).lift, continuous_coinduced_dom.mpr (map_continuous _)⟩
have : Summable (fourierCoeff F) := by
convert h_sum
exact Real.fourierCoeff_tsum_comp_add h_norm _
- convert (has_pointwise_sum_fourier_series_of_summable this 0).tsum_eq.symm using 1
- · have := (hasSum_apply (summable_of_locally_summable_norm h_norm).hasSum 0).tsum_eq
- simpa only [coe_mk, ← QuotientAddGroup.mk_zero, Periodic.lift_coe, zsmul_one, comp_apply,
- coe_addRight, zero_add] using this
- · congr 1 with n : 1
- rw [← Real.fourierCoeff_tsum_comp_add h_norm n, fourier_eval_zero, smul_eq_mul, mul_one]
- rfl
+ convert (has_pointwise_sum_fourier_series_of_summable this x).tsum_eq.symm using 1
+ · simpa only [coe_mk, ← QuotientAddGroup.mk_zero, Periodic.lift_coe, zsmul_one, comp_apply,
+ coe_addRight, zero_add]
+ using (hasSum_apply (summable_of_locally_summable_norm h_norm).hasSum x).tsum_eq
+ · simp_rw [← Real.fourierCoeff_tsum_comp_add h_norm, smul_eq_mul, coe_mk]
+
#align real.tsum_eq_tsum_fourier_integral Real.tsum_eq_tsum_fourierIntegral
section RpowDecay
@@ -135,7 +135,7 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
(fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) =O[atTop] fun x : ℝ => |x| ^ (-b) := by
-- First establish an explicit estimate on decay of inverse powers.
-- This is logically independent of the rest of the proof, but of no mathematical interest in
- -- itself, so it is proved using `async` rather than being formulated as a separate lemma.
+ -- itself, so it is proved in-line rather than being formulated as a separate lemma.
have claim : ∀ x : ℝ, max 0 (-2 * R) < x → ∀ y : ℝ, x + R ≤ y →
y ^ (-b) ≤ (1 / 2) ^ (-b) * x ^ (-b) := fun x hx y hy ↦ by
rw [max_lt_iff] at hx
@@ -207,15 +207,12 @@ set_option linter.uppercaseLean3 false in
/-- **Poisson's summation formula**, assuming that `f` decays as
`|x| ^ (-b)` for some `1 < b` and its Fourier transform is summable. -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ → ℂ} (hc : Continuous f)
- {b : ℝ} (hb : 1 < b) (hf : f =O[cocompact ℝ] fun x : ℝ => |x| ^ (-b))
- (hFf : Summable fun n : ℤ => 𝓕 f n) : ∑' n : ℤ, f n = (∑' n : ℤ, 𝓕 f n) :=
- Real.tsum_eq_tsum_fourierIntegral
- (fun K =>
- summable_of_isBigO (Real.summable_abs_int_rpow hb)
- ((isBigO_norm_restrict_cocompact (ContinuousMap.mk _ hc) (zero_lt_one.trans hb) hf
- K).comp_tendsto
- Int.tendsto_coe_cofinite))
- hFf
+ {b : ℝ} (hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
+ (hFf : Summable fun n : ℤ => 𝓕 f n) (x : ℝ) :
+ ∑' n : ℤ, f (x + n) = ∑' n : ℤ, 𝓕 f n * fourier n (x : UnitAddCircle) :=
+ Real.tsum_eq_tsum_fourierIntegral (fun K => summable_of_isBigO (Real.summable_abs_int_rpow hb)
+ ((isBigO_norm_restrict_cocompact ⟨_, hc⟩ (zero_lt_one.trans hb) hf K).comp_tendsto
+ Int.tendsto_coe_cofinite)) hFf x
#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay_of_summable Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable
/-- **Poisson's summation formula**, assuming that both `f` and its Fourier transform decay as
@@ -223,10 +220,10 @@ theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ →
Weiss, *Introduction to Fourier analysis on Euclidean spaces*.) -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay {f : ℝ → ℂ} (hc : Continuous f) {b : ℝ}
(hb : 1 < b) (hf : f =O[cocompact ℝ] (|·| ^ (-b)))
- (hFf : (𝓕 f) =O[cocompact ℝ] (|·| ^ (-b))) :
- ∑' n : ℤ, f n = ∑' n : ℤ, 𝓕 f n :=
- Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf
- (summable_of_isBigO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
+ (hFf : (𝓕 f) =O[cocompact ℝ] (|·| ^ (-b))) (x : ℝ) :
+ ∑' n : ℤ, f (x + n) = ∑' n : ℤ, 𝓕 f n * fourier n (x : UnitAddCircle) :=
+ Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf (summable_of_isBigO
+ (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite)) x
#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay
end RpowDecay
@@ -234,15 +231,13 @@ end RpowDecay
section Schwartz
/-- **Poisson's summation formula** for Schwartz functions. -/
-theorem SchwartzMap.tsum_eq_tsum_fourierIntegral (f g : SchwartzMap ℝ ℂ) (hfg : 𝓕 f = g) :
- ∑' n : ℤ, f n = (∑' n : ℤ, g n) := by
+theorem SchwartzMap.tsum_eq_tsum_fourierIntegral (f g : SchwartzMap ℝ ℂ) (hfg : 𝓕 ⇑f = ⇑g) (x : ℝ) :
+ ∑' n : ℤ, f (x + n) = (∑' n : ℤ, g n * fourier n (x : UnitAddCircle)) := by
-- We know that Schwartz functions are `O(‖x ^ (-b)‖)` for *every* `b`; for this argument we take
-- `b = 2` and work with that.
- simp_rw [← hfg]
- rw [Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay f.continuous one_lt_two
- (f.isBigO_cocompact_rpow (-2))]
- rw [hfg]
- exact g.isBigO_cocompact_rpow (-2)
+ simp only [← hfg, Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay f.continuous one_lt_two
+ (f.isBigO_cocompact_rpow (-2)) (hfg ▸ g.isBigO_cocompact_rpow (-2))]
+
#align schwartz_map.tsum_eq_tsum_fourier_integral SchwartzMap.tsum_eq_tsum_fourierIntegral
end Schwartz
@@ -131,30 +131,17 @@ variable {E : Type*} [NormedAddCommGroup E]
/-- If `f` is `O(x ^ (-b))` at infinity, then so is the function
`λ x, ‖f.restrict (Icc (x + R) (x + S))‖` for any fixed `R` and `S`. -/
theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
- (hf : IsBigO atTop f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
- IsBigO atTop (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) := by
+ (hf : f =O[atTop] fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
+ (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) =O[atTop] fun x : ℝ => |x| ^ (-b) := by
-- First establish an explicit estimate on decay of inverse powers.
-- This is logically independent of the rest of the proof, but of no mathematical interest in
-- itself, so it is proved using `async` rather than being formulated as a separate lemma.
- have claim :
- ∀ x : ℝ, max 0 (-2 * R) < x → ∀ y : ℝ, x + R ≤ y → y ^ (-b) ≤ (1 / 2) ^ (-b) * x ^ (-b) := by
- intro x hx y hy
+ have claim : ∀ x : ℝ, max 0 (-2 * R) < x → ∀ y : ℝ, x + R ≤ y →
+ y ^ (-b) ≤ (1 / 2) ^ (-b) * x ^ (-b) := fun x hx y hy ↦ by
rw [max_lt_iff] at hx
obtain ⟨hx1, hx2⟩ := hx
- have hxR : 0 < x + R := by
- rcases le_or_lt 0 R with (h | _)
- · positivity
- · linarith
- have hy' : 0 < y := hxR.trans_le hy
- have : y ^ (-b) ≤ (x + R) ^ (-b) := by
- rw [rpow_neg, rpow_neg, inv_le_inv]
- · gcongr
- all_goals positivity
- refine' this.trans _
- rw [← mul_rpow, rpow_neg, rpow_neg]
- · gcongr
- linarith
- all_goals positivity
+ rw [← mul_rpow] <;> try positivity
+ apply rpow_le_rpow_of_nonpos <;> linarith
-- Now the main proof.
obtain ⟨c, hc, hc'⟩ := hf.exists_pos
simp only [IsBigO, IsBigOWith, eventually_atTop] at hc' ⊢
@@ -163,9 +150,7 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
rw [ge_iff_le, max_le_iff] at hx
have hx' : max 0 (-2 * R) < x := by linarith
rw [max_lt_iff] at hx'
- rw [norm_norm,
- ContinuousMap.norm_le _
- (mul_nonneg (mul_nonneg hc.le <| rpow_nonneg one_half_pos.le _) (norm_nonneg _))]
+ rw [norm_norm, ContinuousMap.norm_le _ (by positivity)]
refine' fun y => (hd y.1 (by linarith [hx.1, y.2.1])).trans _
have A : ∀ x : ℝ, 0 ≤ |x| ^ (-b) := fun x => by positivity
rw [mul_assoc, mul_le_mul_left hc, norm_of_nonneg (A _), norm_of_nonneg (A _)]
@@ -176,9 +161,9 @@ set_option linter.uppercaseLean3 false in
#align is_O_norm_Icc_restrict_at_top isBigO_norm_Icc_restrict_atTop
theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
- (hf : IsBigO atBot f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
- IsBigO atBot (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) := by
- have h1 : IsBigO atTop (f.comp (ContinuousMap.mk _ continuous_neg)) fun x : ℝ => |x| ^ (-b) := by
+ (hf : f =O[atBot] fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
+ (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) =O[atBot] fun x : ℝ => |x| ^ (-b) := by
+ have h1 : (f.comp (ContinuousMap.mk _ continuous_neg)) =O[atTop] fun x : ℝ => |x| ^ (-b) := by
convert hf.comp_tendsto tendsto_neg_atTop_atBot using 1
ext1 x; simp only [Function.comp_apply, abs_neg]
have h2 := (isBigO_norm_Icc_restrict_atTop hb h1 (-S) (-R)).comp_tendsto tendsto_neg_atBot_atTop
@@ -198,13 +183,11 @@ set_option linter.uppercaseLean3 false in
#align is_O_norm_Icc_restrict_at_bot isBigO_norm_Icc_restrict_atBot
theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
- (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b)) (K : Compacts ℝ) :
- IsBigO (cocompact ℝ) (fun x => ‖(f.comp (ContinuousMap.addRight x)).restrict K‖) fun x =>
- |x| ^ (-b) := by
+ (hf : f =O[cocompact ℝ] fun x : ℝ => |x| ^ (-b)) (K : Compacts ℝ) :
+ (fun x => ‖(f.comp (ContinuousMap.addRight x)).restrict K‖) =O[cocompact ℝ] (|·| ^ (-b)) := by
obtain ⟨r, hr⟩ := K.isCompact.isBounded.subset_closedBall 0
rw [closedBall_eq_Icc, zero_add, zero_sub] at hr
- have :
- ∀ x : ℝ,
+ have : ∀ x : ℝ,
‖(f.comp (ContinuousMap.addRight x)).restrict K‖ ≤ ‖f.restrict (Icc (x - r) (x + r))‖ := by
intro x
rw [ContinuousMap.norm_le _ (norm_nonneg _)]
@@ -224,7 +207,7 @@ set_option linter.uppercaseLean3 false in
/-- **Poisson's summation formula**, assuming that `f` decays as
`|x| ^ (-b)` for some `1 < b` and its Fourier transform is summable. -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ → ℂ} (hc : Continuous f)
- {b : ℝ} (hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
+ {b : ℝ} (hb : 1 < b) (hf : f =O[cocompact ℝ] fun x : ℝ => |x| ^ (-b))
(hFf : Summable fun n : ℤ => 𝓕 f n) : ∑' n : ℤ, f n = (∑' n : ℤ, 𝓕 f n) :=
Real.tsum_eq_tsum_fourierIntegral
(fun K =>
@@ -239,8 +222,8 @@ theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ →
`|x| ^ (-b)` for some `1 < b`. (This is the one-dimensional case of Corollary VII.2.6 of Stein and
Weiss, *Introduction to Fourier analysis on Euclidean spaces*.) -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay {f : ℝ → ℂ} (hc : Continuous f) {b : ℝ}
- (hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
- (hFf : IsBigO (cocompact ℝ) (𝓕 f) fun x : ℝ => |x| ^ (-b)) :
+ (hb : 1 < b) (hf : f =O[cocompact ℝ] (|·| ^ (-b)))
+ (hFf : (𝓕 f) =O[cocompact ℝ] (|·| ^ (-b))) :
∑' n : ℤ, f n = ∑' n : ℤ, 𝓕 f n :=
Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf
(summable_of_isBigO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
rpow_nonneg_of_nonneg
to rpow_nonneg
(#9518)
This better matches other lemma names.
From LeanAPAP
@@ -165,7 +165,7 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
rw [max_lt_iff] at hx'
rw [norm_norm,
ContinuousMap.norm_le _
- (mul_nonneg (mul_nonneg hc.le <| rpow_nonneg_of_nonneg one_half_pos.le _) (norm_nonneg _))]
+ (mul_nonneg (mul_nonneg hc.le <| rpow_nonneg one_half_pos.le _) (norm_nonneg _))]
refine' fun y => (hd y.1 (by linarith [hx.1, y.2.1])).trans _
have A : ∀ x : ℝ, 0 ≤ |x| ^ (-b) := fun x => by positivity
rw [mul_assoc, mul_le_mul_left hc, norm_of_nonneg (A _), norm_of_nonneg (A _)]
Following on from previous gcongr
golfing PRs #4702 and #4784.
This is a replacement for #7901: this round of golfs, first introduced there, there exposed some performance issues in gcongr
, hopefully fixed by #8731, and I am opening a new PR so that the performance can be checked against current master rather than master at the time of #7901.
@@ -140,22 +140,21 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
∀ x : ℝ, max 0 (-2 * R) < x → ∀ y : ℝ, x + R ≤ y → y ^ (-b) ≤ (1 / 2) ^ (-b) * x ^ (-b) := by
intro x hx y hy
rw [max_lt_iff] at hx
+ obtain ⟨hx1, hx2⟩ := hx
have hxR : 0 < x + R := by
- rcases le_or_lt 0 R with (h | h)
- · exact add_pos_of_pos_of_nonneg hx.1 h
- · rw [← sub_lt_iff_lt_add, zero_sub]
- refine' lt_trans _ hx.2
- rwa [neg_mul, neg_lt_neg_iff, two_mul, add_lt_iff_neg_left]
+ rcases le_or_lt 0 R with (h | _)
+ · positivity
+ · linarith
have hy' : 0 < y := hxR.trans_le hy
have : y ^ (-b) ≤ (x + R) ^ (-b) := by
- rw [rpow_neg hy'.le, rpow_neg hxR.le,
- inv_le_inv (rpow_pos_of_pos hy' _) (rpow_pos_of_pos hxR _)]
- exact rpow_le_rpow hxR.le hy hb.le
+ rw [rpow_neg, rpow_neg, inv_le_inv]
+ · gcongr
+ all_goals positivity
refine' this.trans _
- rw [← mul_rpow one_half_pos.le hx.1.le, rpow_neg (mul_pos one_half_pos hx.1).le,
- rpow_neg hxR.le]
- refine' inv_le_inv_of_le (rpow_pos_of_pos (mul_pos one_half_pos hx.1) _) _
- exact rpow_le_rpow (mul_pos one_half_pos hx.1).le (by linarith) hb.le
+ rw [← mul_rpow, rpow_neg, rpow_neg]
+ · gcongr
+ linarith
+ all_goals positivity
-- Now the main proof.
obtain ⟨c, hc, hc'⟩ := hf.exists_pos
simp only [IsBigO, IsBigOWith, eventually_atTop] at hc' ⊢
Metric.Bounded
(#7240)
Use Bornology.IsBounded
instead.
@@ -202,7 +202,7 @@ theorem isBigO_norm_restrict_cocompact (f : C(ℝ, E)) {b : ℝ} (hb : 0 < b)
(hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b)) (K : Compacts ℝ) :
IsBigO (cocompact ℝ) (fun x => ‖(f.comp (ContinuousMap.addRight x)).restrict K‖) fun x =>
|x| ^ (-b) := by
- obtain ⟨r, hr⟩ := K.isCompact.bounded.subset_ball 0
+ obtain ⟨r, hr⟩ := K.isCompact.isBounded.subset_closedBall 0
rw [closedBall_eq_Icc, zero_add, zero_sub] at hr
have :
∀ x : ℝ,
@@ -92,7 +92,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
suffices Integrable (e * f) from this.hasSum_intervalIntegral_comp_add_int.tsum_eq
apply integrable_of_summable_norm_Icc
convert hf ⟨Icc 0 1, isCompact_Icc⟩ using 1
- simp_rw [ContinuousMap.comp_apply, mul_comp] at eadd ⊢
+ simp_rw [mul_comp] at eadd ⊢
simp_rw [eadd]
exact funext fun n => neK ⟨Icc 0 1, isCompact_Icc⟩ _
-- Minor tidying to finish
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -126,7 +126,7 @@ theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
section RpowDecay
-variable {E : Type _} [NormedAddCommGroup E]
+variable {E : Type*} [NormedAddCommGroup E]
/-- If `f` is `O(x ^ (-b))` at infinity, then so is the function
`λ x, ‖f.restrict (Icc (x + R) (x + S))‖` for any fixed `R` and `S`. -/
@@ -2,11 +2,6 @@
Copyright (c) 2023 David Loeffler. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: David Loeffler
-
-! This file was ported from Lean 3 source module analysis.fourier.poisson_summation
-! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Fourier.AddCircle
import Mathlib.Analysis.Fourier.FourierTransform
@@ -14,6 +9,8 @@ import Mathlib.Analysis.PSeries
import Mathlib.Analysis.Distribution.SchwartzSpace
import Mathlib.MeasureTheory.Measure.Lebesgue.Integral
+#align_import analysis.fourier.poisson_summation from "leanprover-community/mathlib"@"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
+
/-!
# Poisson's summation formula
@@ -83,7 +83,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
simp_rw [coe_mul, Pi.mul_apply,
← ContinuousMap.tsum_apply (summable_of_locally_summable_norm hf), tsum_mul_left]
-- Swap sum and integral.
- _ = ∑' n : ℤ, ∫ x in (0:ℝ)..1, (e * f.comp (ContinuousMap.addRight n)) x := by
+ _ = ∑' n : ℤ, ∫ x in (0:ℝ)..1, (e * f.comp (ContinuousMap.addRight n)) x := by
refine' (intervalIntegral.tsum_intervalIntegral_eq_of_summable_norm _).symm
convert hf ⟨uIcc 0 1, isCompact_uIcc⟩ using 1
exact funext fun n => neK _ _
@@ -11,7 +11,7 @@ Authors: David Loeffler
import Mathlib.Analysis.Fourier.AddCircle
import Mathlib.Analysis.Fourier.FourierTransform
import Mathlib.Analysis.PSeries
-import Mathlib.Analysis.SchwartzSpace
+import Mathlib.Analysis.Distribution.SchwartzSpace
import Mathlib.MeasureTheory.Measure.Lebesgue.Integral
/-!
∑'
precedence (#5615)
∑
, ∏
and variants).([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤])
replaced by $1 $2 $3
@@ -112,7 +112,7 @@ theorem Real.fourierCoeff_tsum_comp_add {f : C(ℝ, ℂ)}
theorem Real.tsum_eq_tsum_fourierIntegral {f : C(ℝ, ℂ)}
(h_norm :
∀ K : Compacts ℝ, Summable fun n : ℤ => ‖(f.comp <| ContinuousMap.addRight n).restrict K‖)
- (h_sum : Summable fun n : ℤ => 𝓕 f n) : (∑' n : ℤ, f n) = (∑' n : ℤ, 𝓕 f n) := by
+ (h_sum : Summable fun n : ℤ => 𝓕 f n) : ∑' n : ℤ, f n = (∑' n : ℤ, 𝓕 f n) := by
let F : C(UnitAddCircle, ℂ) :=
⟨(f.periodic_tsum_comp_add_zsmul 1).lift, continuous_coinduced_dom.mpr (map_continuous _)⟩
have : Summable (fourierCoeff F) := by
@@ -229,7 +229,7 @@ set_option linter.uppercaseLean3 false in
`|x| ^ (-b)` for some `1 < b` and its Fourier transform is summable. -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable {f : ℝ → ℂ} (hc : Continuous f)
{b : ℝ} (hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
- (hFf : Summable fun n : ℤ => 𝓕 f n) : (∑' n : ℤ, f n) = (∑' n : ℤ, 𝓕 f n) :=
+ (hFf : Summable fun n : ℤ => 𝓕 f n) : ∑' n : ℤ, f n = (∑' n : ℤ, 𝓕 f n) :=
Real.tsum_eq_tsum_fourierIntegral
(fun K =>
summable_of_isBigO (Real.summable_abs_int_rpow hb)
@@ -245,7 +245,7 @@ Weiss, *Introduction to Fourier analysis on Euclidean spaces*.) -/
theorem Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay {f : ℝ → ℂ} (hc : Continuous f) {b : ℝ}
(hb : 1 < b) (hf : IsBigO (cocompact ℝ) f fun x : ℝ => |x| ^ (-b))
(hFf : IsBigO (cocompact ℝ) (𝓕 f) fun x : ℝ => |x| ^ (-b)) :
- (∑' n : ℤ, f n) = ∑' n : ℤ, 𝓕 f n :=
+ ∑' n : ℤ, f n = ∑' n : ℤ, 𝓕 f n :=
Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay_of_summable hc hb hf
(summable_of_isBigO (Real.summable_abs_int_rpow hb) (hFf.comp_tendsto Int.tendsto_coe_cofinite))
#align real.tsum_eq_tsum_fourier_integral_of_rpow_decay Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay
@@ -256,7 +256,7 @@ section Schwartz
/-- **Poisson's summation formula** for Schwartz functions. -/
theorem SchwartzMap.tsum_eq_tsum_fourierIntegral (f g : SchwartzMap ℝ ℂ) (hfg : 𝓕 f = g) :
- (∑' n : ℤ, f n) = (∑' n : ℤ, g n) := by
+ ∑' n : ℤ, f n = (∑' n : ℤ, g n) := by
-- We know that Schwartz functions are `O(‖x ^ (-b)‖)` for *every* `b`; for this argument we take
-- `b = 2` and work with that.
simp_rw [← hfg]
@@ -22,17 +22,17 @@ Fourier transform of `f`, under the following hypotheses:
* `f` is a continuous function `ℝ → ℂ`.
* The sum `∑ (n : ℤ), 𝓕 f n` is convergent.
* For all compacts `K ⊂ ℝ`, the sum `∑ (n : ℤ), sup { ‖f(x + n)‖ | x ∈ K }` is convergent.
-See `real.tsum_eq_tsum_fourier_integral` for this formulation.
+See `Real.tsum_eq_tsum_fourierIntegral` for this formulation.
These hypotheses are potentially a little awkward to apply, so we also provide the less general but
-easier-to-use result `real.tsum_eq_tsum_fourier_integral_of_rpow_decay`, in which we assume `f` and
+easier-to-use result `Real.tsum_eq_tsum_fourierIntegral_of_rpow_decay`, in which we assume `f` and
`𝓕 f` both decay as `|x| ^ (-b)` for some `b > 1`, and the even more specific result
-`schwartz_map.tsum_eq_tsum_fourier_integral`, where we assume that both `f` and `𝓕 f` are Schwartz
+`SchwartzMap.tsum_eq_tsum_fourierIntegral`, where we assume that both `f` and `𝓕 f` are Schwartz
functions.
## TODO
-At the moment `schwartz_map.tsum_eq_tsum_fourier_integral` requires separate proofs that both `f`
+At the moment `SchwartzMap.tsum_eq_tsum_fourierIntegral` requires separate proofs that both `f`
and `𝓕 f` are Schwartz functions. In fact, `𝓕 f` is automatically Schwartz if `f` is; and once
we have this lemma in the library, we should adjust the hypotheses here accordingly.
-/
@@ -179,7 +179,6 @@ theorem isBigO_norm_Icc_restrict_atTop {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
set_option linter.uppercaseLean3 false in
#align is_O_norm_Icc_restrict_at_top isBigO_norm_Icc_restrict_atTop
-set_option autoImplicit false in
theorem isBigO_norm_Icc_restrict_atBot {f : C(ℝ, E)} {b : ℝ} (hb : 0 < b)
(hf : IsBigO atBot f fun x : ℝ => |x| ^ (-b)) (R S : ℝ) :
IsBigO atBot (fun x : ℝ => ‖f.restrict (Icc (x + R) (x + S))‖) fun x : ℝ => |x| ^ (-b) := by
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file