analysis.mellin_transform
β·
Mathlib.Analysis.MellinTransform
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -120,7 +120,7 @@ theorem MellinConvergent.comp_rpow {f : β β E} {s : β} {a : β} (ha : a
dsimp only [Pi.smul_apply]
rw [β Complex.coe_smul (t ^ (a - 1)), β mul_smul, β cpow_mul_of_real_nonneg (le_of_lt ht),
of_real_cpow (le_of_lt ht), β cpow_add _ _ (of_real_ne_zero.mpr (ne_of_gt ht)), of_real_sub,
- of_real_one, mul_sub, mul_div_cancel' _ (of_real_ne_zero.mpr ha), mul_one, add_comm, β
+ of_real_one, mul_sub, mul_div_cancelβ _ (of_real_ne_zero.mpr ha), mul_one, add_comm, β
add_sub_assoc, sub_add_cancel]
#align mellin_convergent.comp_rpow MellinConvergent.comp_rpow
-/
@@ -172,7 +172,7 @@ theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
show |a| β 0; Β· contrapose! ha; exact abs_eq_zero.mp ha
rw [of_real_cpow (le_of_lt ht), β cpow_mul_of_real_nonneg (le_of_lt ht), β
cpow_add _ _ (of_real_ne_zero.mpr <| ne_of_gt ht), of_real_sub, of_real_one, mul_sub,
- mul_div_cancel' _ (of_real_ne_zero.mpr ha), add_comm, β add_sub_assoc, mul_one, sub_add_cancel]
+ mul_div_cancelβ _ (of_real_ne_zero.mpr ha), add_comm, β add_sub_assoc, mul_one, sub_add_cancel]
#align mellin_comp_rpow mellin_comp_rpow
-/
@@ -377,7 +377,7 @@ theorem isBigO_rpow_top_log_smul [NormedSpace β E] {a b : β} {f : β β E}
((isLittleO_log_rpow_atTop (sub_pos.mpr hab)).IsBigO.smul hf).congr'
(eventually_of_forall fun t => by rfl)
((eventually_gt_at_top 0).mp (eventually_of_forall fun t ht => _))
- rw [smul_eq_mul, β rpow_add ht, β sub_eq_add_neg, sub_eq_add_neg a, add_sub_cancel']
+ rw [smul_eq_mul, β rpow_add ht, β sub_eq_add_neg, sub_eq_add_neg a, add_sub_cancel_left]
#align is_O_rpow_top_log_smul isBigO_rpow_top_log_smul
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -94,7 +94,7 @@ theorem MellinConvergent.comp_mul_left {f : β β E} {s : β} {a : β} (ha :
MellinConvergent (fun t => f (a * t)) s β MellinConvergent f s :=
by
have := integrable_on_Ioi_comp_mul_left_iff (fun t : β => (t : β) ^ (s - 1) β’ f t) 0 ha
- rw [MulZeroClass.mul_zero] at this
+ rw [MulZeroClass.mul_zero] at this
have h1 :
eq_on (fun t : β => (β(a * t) : β) ^ (s - 1) β’ f (a * t))
((a : β) ^ (s - 1) β’ fun t : β => (t : β) ^ (s - 1) β’ f (a * t)) (Ioi 0) :=
@@ -272,7 +272,7 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioi c) :=
by
obtain β¨d, hd, hd'β© := hf.exists_pos
- simp_rw [is_O_with, eventually_at_top] at hd'
+ simp_rw [is_O_with, eventually_at_top] at hd'
obtain β¨e, heβ© := hd'
have he' : 0 < max e 1 := zero_lt_one.trans_le (le_max_right _ _)
refine' β¨max e 1, he', _, _β©
@@ -302,7 +302,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioc 0 c) :=
by
obtain β¨d, hd, hd'β© := hf.exists_pos
- simp_rw [is_O_with, eventually_nhdsWithin_iff, Metric.eventually_nhds_iff, gt_iff_lt] at hd'
+ simp_rw [is_O_with, eventually_nhdsWithin_iff, Metric.eventually_nhds_iff, gt_iff_lt] at hd'
obtain β¨Ξ΅, hΞ΅, hΞ΅'β© := hd'
refine' β¨Ξ΅, hΞ΅, integrable_on_Ioc_iff_integrable_on_Ioo.mpr β¨_, _β©β©
Β· refine' ae_strongly_measurable.mul _ (hfc.mono_set Ioo_subset_Ioi_self)
@@ -455,15 +455,15 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
le_add_of_le_of_nonneg (rpow_le_rpow_of_exponent_le h _)
(rpow_nonneg_of_nonneg (zero_le_one.trans h) _)
rw [sub_re, one_re, sub_le_sub_iff_right]
- rw [mem_ball_iff_norm, Complex.norm_eq_abs] at hz
+ rw [mem_ball_iff_norm, Complex.norm_eq_abs] at hz
have hz' := (re_le_abs _).trans hz.le
- rwa [sub_re, sub_le_iff_le_add'] at hz'
+ rwa [sub_re, sub_le_iff_le_add'] at hz'
Β· refine'
le_add_of_nonneg_of_le (rpow_pos_of_pos ht _).le (rpow_le_rpow_of_exponent_ge ht h.le _)
rw [sub_re, one_re, sub_le_iff_le_add, sub_add_cancel]
- rw [mem_ball_iff_norm', Complex.norm_eq_abs] at hz
+ rw [mem_ball_iff_norm', Complex.norm_eq_abs] at hz
have hz' := (re_le_abs _).trans hz.le
- rwa [sub_re, sub_le_iff_le_add, β sub_le_iff_le_add'] at hz'
+ rwa [sub_re, sub_le_iff_le_add, β sub_le_iff_le_add'] at hz'
have h5 : integrable_on bound (Ioi 0) :=
by
simp_rw [bound, add_mul, mul_assoc]
@@ -580,7 +580,7 @@ theorem hasMellin_cpow_Ioc (a : β) {s : β} (hs : 0 < re s + re a) :
by
have := hasMellin_one_Ioc (by rwa [add_re] : 0 < (s + a).re)
simp_rw [HasMellin, β MellinConvergent.cpow_smul, β mellin_cpow_smul, β indicator_smul,
- smul_eq_mul, mul_one] at this
+ smul_eq_mul, mul_one] at this
exact this
#align has_mellin_cpow_Ioc hasMellin_cpow_Ioc
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -312,7 +312,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
Β· show has_finite_integral (fun t => d * t ^ (s - b - 1)) _
refine' (integrable.has_finite_integral _).const_mul _
rw [β integrable_on, β integrableOn_Ioc_iff_integrableOn_Ioo, β
- intervalIntegrable_iff_integrable_Ioc_of_le hΞ΅.le]
+ intervalIntegrable_iff_integrableOn_Ioc_of_le hΞ΅.le]
exact intervalIntegral.intervalIntegrable_rpow' (by linarith)
Β· refine' (ae_restrict_iff' measurableSet_Ioo).mpr (eventually_of_forall fun t ht => _)
rw [mul_comm, norm_mul]
@@ -566,7 +566,7 @@ theorem hasMellin_one_Ioc {s : β} (hs : 0 < re s) :
simp_rw [HasMellin, mellin, MellinConvergent, β indicator_smul, integrable_on,
integrable_indicator_iff aux3, smul_eq_mul, integral_indicator aux3, mul_one, integrable_on,
measure.restrict_restrict_of_subset Ioc_subset_Ioi_self]
- rw [β integrable_on, β intervalIntegrable_iff_integrable_Ioc_of_le zero_le_one]
+ rw [β integrable_on, β intervalIntegrable_iff_integrableOn_Ioc_of_le zero_le_one]
refine' β¨intervalIntegral.intervalIntegrable_cpow' aux1, _β©
rw [β intervalIntegral.integral_of_le zero_le_one, integral_cpow (Or.inl aux1), sub_add_cancel,
of_real_zero, of_real_one, one_cpow, zero_cpow aux2, sub_zero]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ 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.SpecialFunctions.ImproperIntegrals
-import Mathbin.Analysis.Calculus.ParametricIntegral
-import Mathbin.MeasureTheory.Measure.Haar.NormedSpace
+import Analysis.SpecialFunctions.ImproperIntegrals
+import Analysis.Calculus.ParametricIntegral
+import MeasureTheory.Measure.Haar.NormedSpace
#align_import analysis.mellin_transform from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
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.mellin_transform
-! leanprover-community/mathlib commit 8af7091a43227e179939ba132e54e54e9f3b089a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.SpecialFunctions.ImproperIntegrals
import Mathbin.Analysis.Calculus.ParametricIntegral
import Mathbin.MeasureTheory.Measure.Haar.NormedSpace
+#align_import analysis.mellin_transform from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
+
/-! # The Mellin transform
> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9240e8be927a0955b9a82c6c85ef499ee3a626b8
@@ -163,7 +163,7 @@ theorem mellin_div_const (f : β β β) (s a : β) : mellin (fun t => f t /
#print mellin_comp_rpow /-
theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
- mellin (fun t => f (t ^ a)) s = (|a|)β»ΒΉ β’ mellin f (s / a) :=
+ mellin (fun t => f (t ^ a)) s = |a|β»ΒΉ β’ mellin f (s / a) :=
by
-- note: this is also true for a = 0 (both sides are zero), but this is mathematically
-- uninteresting and rather time-consuming to check
mathlib commit https://github.com/leanprover-community/mathlib/commit/bf9bbbcf0c1c1ead18280b0d010e417b10abb1b6
@@ -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.mellin_transform
-! leanprover-community/mathlib commit 917c3c072e487b3cccdbfeff17e75b40e45f66cb
+! leanprover-community/mathlib commit 8af7091a43227e179939ba132e54e54e9f3b089a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.MeasureTheory.Measure.Haar.NormedSpace
/-! # The Mellin transform
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We define the Mellin transform of a locally integrable function on `Ioi 0`, and show it is
differentiable in a suitable vertical strip.
mathlib commit https://github.com/leanprover-community/mathlib/commit/8efcf8022aac8e01df8d302dcebdbc25d6a886c8
@@ -33,14 +33,16 @@ open MeasureTheory Set Filter Asymptotics TopologicalSpace
namespace Complex
+#print Complex.cpow_mul_ofReal_nonneg /-
-- Porting note: move this to `analysis.special_functions.pow.complex`
-theorem cpow_mul_of_real_nonneg {x : β} (hx : 0 β€ x) (y : β) (z : β) :
+theorem cpow_mul_ofReal_nonneg {x : β} (hx : 0 β€ x) (y : β) (z : β) :
(x : β) ^ (βy * z) = (β(x ^ y) : β) ^ z :=
by
rw [cpow_mul, of_real_cpow hx]
Β· rw [β of_real_log hx, β of_real_mul, of_real_im, neg_lt_zero]; exact Real.pi_pos
Β· rw [β of_real_log hx, β of_real_mul, of_real_im]; exact real.pi_pos.le
-#align complex.cpow_mul_of_real_nonneg Complex.cpow_mul_of_real_nonneg
+#align complex.cpow_mul_of_real_nonneg Complex.cpow_mul_ofReal_nonneg
+-/
end Complex
@@ -56,29 +58,38 @@ section Defs
variable {E : Type _} [NormedAddCommGroup E] [NormedSpace β E]
+#print MellinConvergent /-
/-- Predicate on `f` and `s` asserting that the Mellin integral is well-defined. -/
def MellinConvergent (f : β β E) (s : β) : Prop :=
IntegrableOn (fun t : β => (t : β) ^ (s - 1) β’ f t) (Ioi 0)
#align mellin_convergent MellinConvergent
+-/
+#print MellinConvergent.const_smul /-
theorem MellinConvergent.const_smul {f : β β E} {s : β} (hf : MellinConvergent f s) {π : Type _}
[NontriviallyNormedField π] [NormedSpace π E] [SMulCommClass β π E] (c : π) :
MellinConvergent (fun t => c β’ f t) s := by
simpa only [MellinConvergent, smul_comm] using hf.smul c
#align mellin_convergent.const_smul MellinConvergent.const_smul
+-/
+#print MellinConvergent.cpow_smul /-
theorem MellinConvergent.cpow_smul {f : β β E} {s a : β} :
MellinConvergent (fun t => (t : β) ^ a β’ f t) s β MellinConvergent f (s + a) :=
by
refine' integrable_on_congr_fun (fun t ht => _) measurableSet_Ioi
simp_rw [β sub_add_eq_add_sub, cpow_add _ _ (of_real_ne_zero.2 <| ne_of_gt ht), mul_smul]
#align mellin_convergent.cpow_smul MellinConvergent.cpow_smul
+-/
+#print MellinConvergent.div_const /-
theorem MellinConvergent.div_const {f : β β β} {s : β} (hf : MellinConvergent f s) (a : β) :
MellinConvergent (fun t => f t / a) s := by
simpa only [MellinConvergent, smul_eq_mul, β mul_div_assoc] using hf.div_const a
#align mellin_convergent.div_const MellinConvergent.div_const
+-/
+#print MellinConvergent.comp_mul_left /-
theorem MellinConvergent.comp_mul_left {f : β β E} {s : β} {a : β} (ha : 0 < a) :
MellinConvergent (fun t => f (a * t)) s β MellinConvergent f s :=
by
@@ -95,7 +106,9 @@ theorem MellinConvergent.comp_mul_left {f : β β E} {s : β} {a : β} (ha :
simp_rw [MellinConvergent, β this, integrable_on_congr_fun h1 measurableSet_Ioi, integrable_on,
integrable_smul_iff h2]
#align mellin_convergent.comp_mul_left MellinConvergent.comp_mul_left
+-/
+#print MellinConvergent.comp_rpow /-
theorem MellinConvergent.comp_rpow {f : β β E} {s : β} {a : β} (ha : a β 0) :
MellinConvergent (fun t => f (t ^ a)) s β MellinConvergent f (s / a) :=
by
@@ -110,15 +123,19 @@ theorem MellinConvergent.comp_rpow {f : β β E} {s : β} {a : β} (ha : a
of_real_one, mul_sub, mul_div_cancel' _ (of_real_ne_zero.mpr ha), mul_one, add_comm, β
add_sub_assoc, sub_add_cancel]
#align mellin_convergent.comp_rpow MellinConvergent.comp_rpow
+-/
variable [CompleteSpace E]
+#print mellin /-
/-- The Mellin transform of a function `f` (for a complex exponent `s`), defined as the integral of
`t ^ (s - 1) β’ f` over `Ioi 0`. -/
def mellin (f : β β E) (s : β) : E :=
β« t : β in Ioi 0, (t : β) ^ (s - 1) β’ f t
#align mellin mellin
+-/
+#print mellin_cpow_smul /-
-- next few lemmas don't require convergence of the Mellin transform (they are just 0 = 0 otherwise)
theorem mellin_cpow_smul (f : β β E) (s a : β) :
mellin (fun t => (t : β) ^ a β’ f t) s = mellin f (s + a) :=
@@ -126,16 +143,22 @@ theorem mellin_cpow_smul (f : β β E) (s a : β) :
refine' set_integral_congr measurableSet_Ioi fun t ht => _
simp_rw [β sub_add_eq_add_sub, cpow_add _ _ (of_real_ne_zero.2 <| ne_of_gt ht), mul_smul]
#align mellin_cpow_smul mellin_cpow_smul
+-/
+#print mellin_const_smul /-
theorem mellin_const_smul (f : β β E) (s : β) {π : Type _} [NontriviallyNormedField π]
[NormedSpace π E] [SMulCommClass β π E] (c : π) :
mellin (fun t => c β’ f t) s = c β’ mellin f s := by simp only [mellin, smul_comm, integral_smul]
#align mellin_const_smul mellin_const_smul
+-/
+#print mellin_div_const /-
theorem mellin_div_const (f : β β β) (s a : β) : mellin (fun t => f t / a) s = mellin f s / a := by
simp_rw [mellin, smul_eq_mul, β mul_div_assoc, integral_div]
#align mellin_div_const mellin_div_const
+-/
+#print mellin_comp_rpow /-
theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
mellin (fun t => f (t ^ a)) s = (|a|)β»ΒΉ β’ mellin f (s / a) :=
by
@@ -151,7 +174,9 @@ theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
cpow_add _ _ (of_real_ne_zero.mpr <| ne_of_gt ht), of_real_sub, of_real_one, mul_sub,
mul_div_cancel' _ (of_real_ne_zero.mpr ha), add_comm, β add_sub_assoc, mul_one, sub_add_cancel]
#align mellin_comp_rpow mellin_comp_rpow
+-/
+#print mellin_comp_mul_left /-
theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
mellin (fun t => f (a * t)) s = (a : β) ^ (-s) β’ mellin f s :=
by
@@ -171,34 +196,45 @@ theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
cpow_add _ _ (of_real_ne_zero.mpr ha.ne'), cpow_one, abs_of_pos (inv_pos.mpr ha), of_real_inv,
mul_assoc, mul_comm, inv_mul_cancel_rightβ (of_real_ne_zero.mpr ha.ne')]
#align mellin_comp_mul_left mellin_comp_mul_left
+-/
+#print mellin_comp_mul_right /-
theorem mellin_comp_mul_right (f : β β E) (s : β) {a : β} (ha : 0 < a) :
mellin (fun t => f (t * a)) s = (a : β) ^ (-s) β’ mellin f s := by
simpa only [mul_comm] using mellin_comp_mul_left f s ha
#align mellin_comp_mul_right mellin_comp_mul_right
+-/
+#print mellin_comp_inv /-
theorem mellin_comp_inv (f : β β E) (s : β) : mellin (fun t => f tβ»ΒΉ) s = mellin f (-s) := by
simp_rw [β rpow_neg_one, mellin_comp_rpow _ _ (neg_ne_zero.mpr one_ne_zero), abs_neg, abs_one,
inv_one, one_smul, of_real_neg, of_real_one, div_neg, div_one]
#align mellin_comp_inv mellin_comp_inv
+-/
+#print HasMellin /-
/-- Predicate standing for "the Mellin transform of `f` is defined at `s` and equal to `m`". This
shortens some arguments. -/
def HasMellin (f : β β E) (s : β) (m : E) : Prop :=
MellinConvergent f s β§ mellin f s = m
#align has_mellin HasMellin
+-/
+#print hasMellin_add /-
theorem hasMellin_add {f g : β β E} {s : β} (hf : MellinConvergent f s)
(hg : MellinConvergent g s) : HasMellin (fun t => f t + g t) s (mellin f s + mellin g s) :=
β¨by simpa only [MellinConvergent, smul_add] using hf.add hg, by
simpa only [mellin, smul_add] using integral_add hf hgβ©
#align has_mellin_add hasMellin_add
+-/
+#print hasMellin_sub /-
theorem hasMellin_sub {f g : β β E} {s : β} (hf : MellinConvergent f s)
(hg : MellinConvergent g s) : HasMellin (fun t => f t - g t) s (mellin f s - mellin g s) :=
β¨by simpa only [MellinConvergent, smul_sub] using hf.sub hg, by
simpa only [mellin, smul_sub] using integral_sub hf hgβ©
#align has_mellin_sub hasMellin_sub
+-/
end Defs
@@ -209,6 +245,7 @@ section MellinConvergent
/-! ## Convergence of Mellin transform integrals -/
+#print mellin_convergent_iff_norm /-
/-- Auxiliary lemma to reduce convergence statements from vector-valued functions to real
scalar-valued functions. -/
theorem mellin_convergent_iff_norm [NormedSpace β E] {f : β β E} {T : Set β} (hT : T β Ioi 0)
@@ -224,7 +261,9 @@ theorem mellin_convergent_iff_norm [NormedSpace β E] {f : β β E} {T : Set
refine' integrable_on_congr_fun (fun t ht => _) hT'
simp_rw [norm_smul, Complex.norm_eq_abs, abs_cpow_eq_rpow_re_of_pos (hT ht), sub_re, one_re]
#align mellin_convergent_iff_norm mellin_convergent_iff_norm
+-/
+#print mellin_convergent_top_of_isBigO /-
/-- If `f` is a locally integrable real-valued function which is `O(x ^ (-a))` at `β`, then for any
`s < a`, its Mellin transform converges on some neighbourhood of `+β`. -/
theorem mellin_convergent_top_of_isBigO {f : β β β}
@@ -252,7 +291,9 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
refine' (has_finite_integral.mul_const _ _).mono' this
exact (integrableOn_Ioi_rpow_of_lt (by linarith) he').HasFiniteIntegral
#align mellin_convergent_top_of_is_O mellin_convergent_top_of_isBigO
+-/
+#print mellin_convergent_zero_of_isBigO /-
/-- If `f` is a locally integrable real-valued function which is `O(x ^ (-b))` at `0`, then for any
`b < s`, its Mellin transform converges on some right neighbourhood of `0`. -/
theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
@@ -285,7 +326,9 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
congr 1
abel
#align mellin_convergent_zero_of_is_O mellin_convergent_zero_of_isBigO
+-/
+#print mellin_convergent_of_isBigO_scalar /-
/-- If `f` is a locally integrable real-valued function on `Ioi 0` which is `O(x ^ (-a))` at `β`
and `O(x ^ (-b))` at `0`, then its Mellin transform integral converges for `b < s < a`. -/
theorem mellin_convergent_of_isBigO_scalar {a b : β} {f : β β β} {s : β}
@@ -306,7 +349,9 @@ theorem mellin_convergent_of_isBigO_scalar {a b : β} {f : β β β} {s :
(fun t ht => (hc2.trans_le ht.1 : 0 < t)) is_compact_Icc
exact ContinuousAt.continuousOn fun t ht => continuous_at_rpow_const _ _ <| Or.inl <| ne_of_gt ht
#align mellin_convergent_of_is_O_scalar mellin_convergent_of_isBigO_scalar
+-/
+#print mellinConvergent_of_isBigO_rpow /-
theorem mellinConvergent_of_isBigO_rpow [NormedSpace β E] {a b : β} {f : β β E} {s : β}
(hfc : LocallyIntegrableOn f <| Ioi 0) (hf_top : IsBigO atTop f fun t => t ^ (-a))
(hs_top : s.re < a) (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
@@ -316,11 +361,13 @@ theorem mellinConvergent_of_isBigO_rpow [NormedSpace β E] {a b : β} {f : β
mellin_convergent_iff_norm (subset_refl _) measurableSet_Ioi hfc.ae_strongly_measurable]
exact mellin_convergent_of_isBigO_scalar hfc.norm hf_top.norm_left hs_top hf_bot.norm_left hs_bot
#align mellin_convergent_of_is_O_rpow mellinConvergent_of_isBigO_rpow
+-/
end MellinConvergent
section MellinDiff
+#print isBigO_rpow_top_log_smul /-
/-- If `f` is `O(x ^ (-a))` as `x β +β`, then `log β’ f` is `O(x ^ (-b))` for every `b < a`. -/
theorem isBigO_rpow_top_log_smul [NormedSpace β E] {a b : β} {f : β β E} (hab : b < a)
(hf : IsBigO atTop f fun t => t ^ (-a)) :
@@ -332,7 +379,9 @@ theorem isBigO_rpow_top_log_smul [NormedSpace β E] {a b : β} {f : β β E}
((eventually_gt_at_top 0).mp (eventually_of_forall fun t ht => _))
rw [smul_eq_mul, β rpow_add ht, β sub_eq_add_neg, sub_eq_add_neg a, add_sub_cancel']
#align is_O_rpow_top_log_smul isBigO_rpow_top_log_smul
+-/
+#print isBigO_rpow_zero_log_smul /-
/-- If `f` is `O(x ^ (-a))` as `x β 0`, then `log β’ f` is `O(x ^ (-b))` for every `a < b`. -/
theorem isBigO_rpow_zero_log_smul [NormedSpace β E] {a b : β} {f : β β E} (hab : a < b)
(hf : IsBigO (π[>] 0) f fun t => t ^ (-a)) :
@@ -356,11 +405,13 @@ theorem isBigO_rpow_zero_log_smul [NormedSpace β E] {a b : β} {f : β β E
congr 1
abel
#align is_O_rpow_zero_log_smul isBigO_rpow_zero_log_smul
+-/
+#print mellin_hasDerivAt_of_isBigO_rpow /-
/-- Suppose `f` is locally integrable on `(0, β)`, is `O(x ^ (-a))` as `x β β`, and is
`O(x ^ (-b))` as `x β 0`. Then its Mellin transform is differentiable on the domain `b < re s < a`,
with derivative equal to the Mellin transform of `log β’ f`. -/
-theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a b : β} {f : β β E}
+theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a b : β} {f : β β E}
{s : β} (hfc : LocallyIntegrableOn f <| Ioi 0) (hf_top : IsBigO atTop f fun t => t ^ (-a))
(hs_top : s.re < a) (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
MellinConvergent (fun t => log t β’ f t) s β§
@@ -451,8 +502,10 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
exact u1.smul_const (f t)
have main := hasDerivAt_integral_of_dominated_loc_of_deriv_le hv0 h1 h2 h3 h4 h5 h6
exact β¨by simpa only [F', mul_smul] using main.1, by simpa only [F', mul_smul] using main.2β©
-#align mellin_has_deriv_of_is_O_rpow mellin_has_deriv_of_isBigO_rpow
+#align mellin_has_deriv_of_is_O_rpow mellin_hasDerivAt_of_isBigO_rpow
+-/
+#print mellin_differentiableAt_of_isBigO_rpow /-
/-- Suppose `f` is locally integrable on `(0, β)`, is `O(x ^ (-a))` as `x β β`, and is
`O(x ^ (-b))` as `x β 0`. Then its Mellin transform is differentiable on the domain `b < re s < a`.
-/
@@ -461,13 +514,15 @@ theorem mellin_differentiableAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace
(hf_top : IsBigO atTop f fun t => t ^ (-a)) (hs_top : s.re < a)
(hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
DifferentiableAt β (mellin f) s :=
- (mellin_has_deriv_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot).2.DifferentiableAt
+ (mellin_hasDerivAt_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot).2.DifferentiableAt
#align mellin_differentiable_at_of_is_O_rpow mellin_differentiableAt_of_isBigO_rpow
+-/
end MellinDiff
section ExpDecay
+#print mellinConvergent_of_isBigO_rpow_exp /-
/-- If `f` is locally integrable, decays exponentially at infinity, and is `O(x ^ (-b))` at 0, then
its Mellin transform converges for `b < s.re`. -/
theorem mellinConvergent_of_isBigO_rpow_exp [NormedSpace β E] {a b : β} (ha : 0 < a) {f : β β E}
@@ -476,7 +531,9 @@ theorem mellinConvergent_of_isBigO_rpow_exp [NormedSpace β E] {a b : β} (ha
mellinConvergent_of_isBigO_rpow hfc (hf_top.trans (isLittleO_exp_neg_mul_rpow_atTop ha _).IsBigO)
(lt_add_one _) hf_bot hs_bot
#align mellin_convergent_of_is_O_rpow_exp mellinConvergent_of_isBigO_rpow_exp
+-/
+#print mellin_differentiableAt_of_isBigO_rpow_exp /-
/-- If `f` is locally integrable, decays exponentially at infinity, and is `O(x ^ (-b))` at 0, then
its Mellin transform is holomorphic on `b < s.re`. -/
theorem mellin_differentiableAt_of_isBigO_rpow_exp [CompleteSpace E] [NormedSpace β E] {a b : β}
@@ -486,6 +543,7 @@ theorem mellin_differentiableAt_of_isBigO_rpow_exp [CompleteSpace E] [NormedSpac
mellin_differentiableAt_of_isBigO_rpow hfc
(hf_top.trans (isLittleO_exp_neg_mul_rpow_atTop ha _).IsBigO) (lt_add_one _) hf_bot hs_bot
#align mellin_differentiable_at_of_is_O_rpow_exp mellin_differentiableAt_of_isBigO_rpow_exp
+-/
end ExpDecay
@@ -496,6 +554,7 @@ section MellinIoc
-/
+#print hasMellin_one_Ioc /-
/-- The Mellin transform of the indicator function of `Ioc 0 1`. -/
theorem hasMellin_one_Ioc {s : β} (hs : 0 < re s) :
HasMellin (indicator (Ioc 0 1) (fun t => 1 : β β β)) s (1 / s) :=
@@ -512,7 +571,9 @@ theorem hasMellin_one_Ioc {s : β} (hs : 0 < re s) :
rw [β intervalIntegral.integral_of_le zero_le_one, integral_cpow (Or.inl aux1), sub_add_cancel,
of_real_zero, of_real_one, one_cpow, zero_cpow aux2, sub_zero]
#align has_mellin_one_Ioc hasMellin_one_Ioc
+-/
+#print hasMellin_cpow_Ioc /-
/-- The Mellin transform of a power function restricted to `Ioc 0 1`. -/
theorem hasMellin_cpow_Ioc (a : β) {s : β} (hs : 0 < re s + re a) :
HasMellin (indicator (Ioc 0 1) (fun t => βt ^ a : β β β)) s (1 / (s + a)) :=
@@ -522,6 +583,7 @@ theorem hasMellin_cpow_Ioc (a : β) {s : β} (hs : 0 < re s + re a) :
smul_eq_mul, mul_one] at this
exact this
#align has_mellin_cpow_Ioc hasMellin_cpow_Ioc
+-/
end MellinIoc
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -445,7 +445,7 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
have ht' : (t : β) β 0 := of_real_ne_zero.mpr (ne_of_gt ht)
have u1 : HasDerivAt (fun z : β => (t : β) ^ (z - 1)) (t ^ (y - 1) * log t) y :=
by
- convert((hasDerivAt_id' y).sub_const 1).const_cpow (Or.inl ht') using 1
+ convert ((hasDerivAt_id' y).sub_const 1).const_cpow (Or.inl ht') using 1
rw [of_real_log (le_of_lt ht)]
ring
exact u1.smul_const (f t)
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -83,7 +83,7 @@ theorem MellinConvergent.comp_mul_left {f : β β E} {s : β} {a : β} (ha :
MellinConvergent (fun t => f (a * t)) s β MellinConvergent f s :=
by
have := integrable_on_Ioi_comp_mul_left_iff (fun t : β => (t : β) ^ (s - 1) β’ f t) 0 ha
- rw [MulZeroClass.mul_zero] at this
+ rw [MulZeroClass.mul_zero] at this
have h1 :
eq_on (fun t : β => (β(a * t) : β) ^ (s - 1) β’ f (a * t))
((a : β) ^ (s - 1) β’ fun t : β => (t : β) ^ (s - 1) β’ f (a * t)) (Ioi 0) :=
@@ -233,7 +233,7 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioi c) :=
by
obtain β¨d, hd, hd'β© := hf.exists_pos
- simp_rw [is_O_with, eventually_at_top] at hd'
+ simp_rw [is_O_with, eventually_at_top] at hd'
obtain β¨e, heβ© := hd'
have he' : 0 < max e 1 := zero_lt_one.trans_le (le_max_right _ _)
refine' β¨max e 1, he', _, _β©
@@ -261,7 +261,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioc 0 c) :=
by
obtain β¨d, hd, hd'β© := hf.exists_pos
- simp_rw [is_O_with, eventually_nhdsWithin_iff, Metric.eventually_nhds_iff, gt_iff_lt] at hd'
+ simp_rw [is_O_with, eventually_nhdsWithin_iff, Metric.eventually_nhds_iff, gt_iff_lt] at hd'
obtain β¨Ξ΅, hΞ΅, hΞ΅'β© := hd'
refine' β¨Ξ΅, hΞ΅, integrable_on_Ioc_iff_integrable_on_Ioo.mpr β¨_, _β©β©
Β· refine' ae_strongly_measurable.mul _ (hfc.mono_set Ioo_subset_Ioi_self)
@@ -404,15 +404,15 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
le_add_of_le_of_nonneg (rpow_le_rpow_of_exponent_le h _)
(rpow_nonneg_of_nonneg (zero_le_one.trans h) _)
rw [sub_re, one_re, sub_le_sub_iff_right]
- rw [mem_ball_iff_norm, Complex.norm_eq_abs] at hz
+ rw [mem_ball_iff_norm, Complex.norm_eq_abs] at hz
have hz' := (re_le_abs _).trans hz.le
- rwa [sub_re, sub_le_iff_le_add'] at hz'
+ rwa [sub_re, sub_le_iff_le_add'] at hz'
Β· refine'
le_add_of_nonneg_of_le (rpow_pos_of_pos ht _).le (rpow_le_rpow_of_exponent_ge ht h.le _)
rw [sub_re, one_re, sub_le_iff_le_add, sub_add_cancel]
- rw [mem_ball_iff_norm', Complex.norm_eq_abs] at hz
+ rw [mem_ball_iff_norm', Complex.norm_eq_abs] at hz
have hz' := (re_le_abs _).trans hz.le
- rwa [sub_re, sub_le_iff_le_add, β sub_le_iff_le_add'] at hz'
+ rwa [sub_re, sub_le_iff_le_add, β sub_le_iff_le_add'] at hz'
have h5 : integrable_on bound (Ioi 0) :=
by
simp_rw [bound, add_mul, mul_assoc]
@@ -519,7 +519,7 @@ theorem hasMellin_cpow_Ioc (a : β) {s : β} (hs : 0 < re s + re a) :
by
have := hasMellin_one_Ioc (by rwa [add_re] : 0 < (s + a).re)
simp_rw [HasMellin, β MellinConvergent.cpow_smul, β mellin_cpow_smul, β indicator_smul,
- smul_eq_mul, mul_one] at this
+ smul_eq_mul, mul_one] at this
exact this
#align has_mellin_cpow_Ioc hasMellin_cpow_Ioc
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -380,7 +380,7 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
have h1 : βαΆ z : β in π s, ae_strongly_measurable (F z) (volume.restrict <| Ioi 0) :=
by
refine' eventually_of_forall fun z => ae_strongly_measurable.smul _ hfc.ae_strongly_measurable
- refine' ContinuousOn.aEStronglyMeasurable _ measurableSet_Ioi
+ refine' ContinuousOn.aestronglyMeasurable _ measurableSet_Ioi
refine' ContinuousAt.continuousOn fun t ht => _
exact continuous_at_of_real_cpow_const _ _ (Or.inr <| ne_of_gt ht)
have h2 : integrable_on (F s) (Ioi 0) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -48,7 +48,7 @@ open Real
open Complex hiding exp log abs_of_nonneg
-open Topology
+open scoped Topology
noncomputable section
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -38,10 +38,8 @@ theorem cpow_mul_of_real_nonneg {x : β} (hx : 0 β€ x) (y : β) (z : β) :
(x : β) ^ (βy * z) = (β(x ^ y) : β) ^ z :=
by
rw [cpow_mul, of_real_cpow hx]
- Β· rw [β of_real_log hx, β of_real_mul, of_real_im, neg_lt_zero]
- exact Real.pi_pos
- Β· rw [β of_real_log hx, β of_real_mul, of_real_im]
- exact real.pi_pos.le
+ Β· rw [β of_real_log hx, β of_real_mul, of_real_im, neg_lt_zero]; exact Real.pi_pos
+ Β· rw [β of_real_log hx, β of_real_mul, of_real_im]; exact real.pi_pos.le
#align complex.cpow_mul_of_real_nonneg Complex.cpow_mul_of_real_nonneg
end Complex
@@ -92,9 +90,7 @@ theorem MellinConvergent.comp_mul_left {f : β β E} {s : β} {a : β} (ha :
by
intro t ht
simp only [of_real_mul, mul_cpow_of_real_nonneg ha.le (le_of_lt ht), mul_smul, Pi.smul_apply]
- have h2 : (a : β) ^ (s - 1) β 0 :=
- by
- rw [Ne.def, cpow_eq_zero_iff, not_and_or, of_real_eq_zero]
+ have h2 : (a : β) ^ (s - 1) β 0 := by rw [Ne.def, cpow_eq_zero_iff, not_and_or, of_real_eq_zero];
exact Or.inl ha.ne'
simp_rw [MellinConvergent, β this, integrable_on_congr_fun h1 measurableSet_Ioi, integrable_on,
integrable_smul_iff h2]
@@ -150,9 +146,7 @@ theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
refine' set_integral_congr measurableSet_Ioi fun t ht => _
dsimp only
rw [β mul_smul, β mul_assoc, inv_mul_cancel, one_mul, β smul_assoc, real_smul]
- show |a| β 0;
- Β· contrapose! ha
- exact abs_eq_zero.mp ha
+ show |a| β 0; Β· contrapose! ha; exact abs_eq_zero.mp ha
rw [of_real_cpow (le_of_lt ht), β cpow_mul_of_real_nonneg (le_of_lt ht), β
cpow_add _ _ (of_real_ne_zero.mpr <| ne_of_gt ht), of_real_sub, of_real_one, mul_sub,
mul_div_cancel' _ (of_real_ne_zero.mpr ha), add_comm, β add_sub_assoc, mul_one, sub_add_cancel]
@@ -508,9 +502,7 @@ theorem hasMellin_one_Ioc {s : β} (hs : 0 < re s) :
by
have aux1 : -1 < (s - 1).re := by
simpa only [sub_re, one_re, sub_eq_add_neg] using lt_add_of_pos_left _ hs
- have aux2 : s β 0 := by
- contrapose! hs
- rw [hs, zero_re]
+ have aux2 : s β 0 := by contrapose! hs; rw [hs, zero_re]
have aux3 : MeasurableSet (Ioc (0 : β) 1) := measurableSet_Ioc
simp_rw [HasMellin, mellin, MellinConvergent, β indicator_smul, integrable_on,
integrable_indicator_iff aux3, smul_eq_mul, integral_indicator aux3, mul_one, integrable_on,
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,12 +4,13 @@ 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.mellin_transform
-! leanprover-community/mathlib commit 9e6d4aec88203d856eb35204b26d306896fd3399
+! leanprover-community/mathlib commit 917c3c072e487b3cccdbfeff17e75b40e45f66cb
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.SpecialFunctions.ImproperIntegrals
import Mathbin.Analysis.Calculus.ParametricIntegral
+import Mathbin.MeasureTheory.Measure.Haar.NormedSpace
/-! # The Mellin transform
@@ -20,6 +21,8 @@ differentiable in a suitable vertical strip.
- `mellin` : the Mellin transform `β« (t : β) in Ioi 0, t ^ (s - 1) β’ f t`,
where `s` is a complex number.
+- `has_mellin`: shorthand asserting that the Mellin transform exists and has a given value
+ (analogous to `has_sum`).
- `mellin_differentiable_at_of_is_O_rpow` : if `f` is `O(x ^ (-a))` at infinity, and
`O(x ^ (-b))` at 0, then `mellin f` is holomorphic on the domain `b < re s < a`.
@@ -28,25 +31,182 @@ differentiable in a suitable vertical strip.
open MeasureTheory Set Filter Asymptotics TopologicalSpace
+namespace Complex
+
+-- Porting note: move this to `analysis.special_functions.pow.complex`
+theorem cpow_mul_of_real_nonneg {x : β} (hx : 0 β€ x) (y : β) (z : β) :
+ (x : β) ^ (βy * z) = (β(x ^ y) : β) ^ z :=
+ by
+ rw [cpow_mul, of_real_cpow hx]
+ Β· rw [β of_real_log hx, β of_real_mul, of_real_im, neg_lt_zero]
+ exact Real.pi_pos
+ Β· rw [β of_real_log hx, β of_real_mul, of_real_im]
+ exact real.pi_pos.le
+#align complex.cpow_mul_of_real_nonneg Complex.cpow_mul_of_real_nonneg
+
+end Complex
+
+open Real
+
+open Complex hiding exp log abs_of_nonneg
+
open Topology
noncomputable section
section Defs
-variable {E : Type _} [NormedAddCommGroup E]
+variable {E : Type _} [NormedAddCommGroup E] [NormedSpace β E]
+
+/-- Predicate on `f` and `s` asserting that the Mellin integral is well-defined. -/
+def MellinConvergent (f : β β E) (s : β) : Prop :=
+ IntegrableOn (fun t : β => (t : β) ^ (s - 1) β’ f t) (Ioi 0)
+#align mellin_convergent MellinConvergent
+
+theorem MellinConvergent.const_smul {f : β β E} {s : β} (hf : MellinConvergent f s) {π : Type _}
+ [NontriviallyNormedField π] [NormedSpace π E] [SMulCommClass β π E] (c : π) :
+ MellinConvergent (fun t => c β’ f t) s := by
+ simpa only [MellinConvergent, smul_comm] using hf.smul c
+#align mellin_convergent.const_smul MellinConvergent.const_smul
+
+theorem MellinConvergent.cpow_smul {f : β β E} {s a : β} :
+ MellinConvergent (fun t => (t : β) ^ a β’ f t) s β MellinConvergent f (s + a) :=
+ by
+ refine' integrable_on_congr_fun (fun t ht => _) measurableSet_Ioi
+ simp_rw [β sub_add_eq_add_sub, cpow_add _ _ (of_real_ne_zero.2 <| ne_of_gt ht), mul_smul]
+#align mellin_convergent.cpow_smul MellinConvergent.cpow_smul
+
+theorem MellinConvergent.div_const {f : β β β} {s : β} (hf : MellinConvergent f s) (a : β) :
+ MellinConvergent (fun t => f t / a) s := by
+ simpa only [MellinConvergent, smul_eq_mul, β mul_div_assoc] using hf.div_const a
+#align mellin_convergent.div_const MellinConvergent.div_const
+
+theorem MellinConvergent.comp_mul_left {f : β β E} {s : β} {a : β} (ha : 0 < a) :
+ MellinConvergent (fun t => f (a * t)) s β MellinConvergent f s :=
+ by
+ have := integrable_on_Ioi_comp_mul_left_iff (fun t : β => (t : β) ^ (s - 1) β’ f t) 0 ha
+ rw [MulZeroClass.mul_zero] at this
+ have h1 :
+ eq_on (fun t : β => (β(a * t) : β) ^ (s - 1) β’ f (a * t))
+ ((a : β) ^ (s - 1) β’ fun t : β => (t : β) ^ (s - 1) β’ f (a * t)) (Ioi 0) :=
+ by
+ intro t ht
+ simp only [of_real_mul, mul_cpow_of_real_nonneg ha.le (le_of_lt ht), mul_smul, Pi.smul_apply]
+ have h2 : (a : β) ^ (s - 1) β 0 :=
+ by
+ rw [Ne.def, cpow_eq_zero_iff, not_and_or, of_real_eq_zero]
+ exact Or.inl ha.ne'
+ simp_rw [MellinConvergent, β this, integrable_on_congr_fun h1 measurableSet_Ioi, integrable_on,
+ integrable_smul_iff h2]
+#align mellin_convergent.comp_mul_left MellinConvergent.comp_mul_left
+
+theorem MellinConvergent.comp_rpow {f : β β E} {s : β} {a : β} (ha : a β 0) :
+ MellinConvergent (fun t => f (t ^ a)) s β MellinConvergent f (s / a) :=
+ by
+ simp_rw [MellinConvergent]
+ letI u : NormedSpace β E := NormedSpace.complexToReal
+ -- why isn't this automatic?
+ conv_rhs => rw [β @integrable_on_Ioi_comp_rpow_iff' _ _ u _ a ha]
+ refine' integrable_on_congr_fun (fun t ht => _) measurableSet_Ioi
+ dsimp only [Pi.smul_apply]
+ rw [β Complex.coe_smul (t ^ (a - 1)), β mul_smul, β cpow_mul_of_real_nonneg (le_of_lt ht),
+ of_real_cpow (le_of_lt ht), β cpow_add _ _ (of_real_ne_zero.mpr (ne_of_gt ht)), of_real_sub,
+ of_real_one, mul_sub, mul_div_cancel' _ (of_real_ne_zero.mpr ha), mul_one, add_comm, β
+ add_sub_assoc, sub_add_cancel]
+#align mellin_convergent.comp_rpow MellinConvergent.comp_rpow
+
+variable [CompleteSpace E]
/-- The Mellin transform of a function `f` (for a complex exponent `s`), defined as the integral of
`t ^ (s - 1) β’ f` over `Ioi 0`. -/
-def mellin [NormedSpace β E] [CompleteSpace E] (f : β β E) (s : β) : E :=
+def mellin (f : β β E) (s : β) : E :=
β« t : β in Ioi 0, (t : β) ^ (s - 1) β’ f t
#align mellin mellin
-end Defs
+-- next few lemmas don't require convergence of the Mellin transform (they are just 0 = 0 otherwise)
+theorem mellin_cpow_smul (f : β β E) (s a : β) :
+ mellin (fun t => (t : β) ^ a β’ f t) s = mellin f (s + a) :=
+ by
+ refine' set_integral_congr measurableSet_Ioi fun t ht => _
+ simp_rw [β sub_add_eq_add_sub, cpow_add _ _ (of_real_ne_zero.2 <| ne_of_gt ht), mul_smul]
+#align mellin_cpow_smul mellin_cpow_smul
-open Real
+theorem mellin_const_smul (f : β β E) (s : β) {π : Type _} [NontriviallyNormedField π]
+ [NormedSpace π E] [SMulCommClass β π E] (c : π) :
+ mellin (fun t => c β’ f t) s = c β’ mellin f s := by simp only [mellin, smul_comm, integral_smul]
+#align mellin_const_smul mellin_const_smul
-open Complex hiding exp log abs_of_nonneg
+theorem mellin_div_const (f : β β β) (s a : β) : mellin (fun t => f t / a) s = mellin f s / a := by
+ simp_rw [mellin, smul_eq_mul, β mul_div_assoc, integral_div]
+#align mellin_div_const mellin_div_const
+
+theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
+ mellin (fun t => f (t ^ a)) s = (|a|)β»ΒΉ β’ mellin f (s / a) :=
+ by
+ -- note: this is also true for a = 0 (both sides are zero), but this is mathematically
+ -- uninteresting and rather time-consuming to check
+ simp_rw [mellin]
+ conv_rhs => rw [β integral_comp_rpow_Ioi _ ha, β integral_smul]
+ refine' set_integral_congr measurableSet_Ioi fun t ht => _
+ dsimp only
+ rw [β mul_smul, β mul_assoc, inv_mul_cancel, one_mul, β smul_assoc, real_smul]
+ show |a| β 0;
+ Β· contrapose! ha
+ exact abs_eq_zero.mp ha
+ rw [of_real_cpow (le_of_lt ht), β cpow_mul_of_real_nonneg (le_of_lt ht), β
+ cpow_add _ _ (of_real_ne_zero.mpr <| ne_of_gt ht), of_real_sub, of_real_one, mul_sub,
+ mul_div_cancel' _ (of_real_ne_zero.mpr ha), add_comm, β add_sub_assoc, mul_one, sub_add_cancel]
+#align mellin_comp_rpow mellin_comp_rpow
+
+theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
+ mellin (fun t => f (a * t)) s = (a : β) ^ (-s) β’ mellin f s :=
+ by
+ simp_rw [mellin]
+ have :
+ eq_on (fun t : β => (t : β) ^ (s - 1) β’ f (a * t))
+ (fun t : β => (a : β) ^ (1 - s) β’ (fun u : β => (u : β) ^ (s - 1) β’ f u) (a * t)) (Ioi 0) :=
+ by
+ intro t ht
+ dsimp only
+ rw [of_real_mul, mul_cpow_of_real_nonneg ha.le (le_of_lt ht), β mul_smul,
+ (by ring : 1 - s = -(s - 1)), cpow_neg, inv_mul_cancel_leftβ]
+ rw [Ne.def, cpow_eq_zero_iff, of_real_eq_zero, not_and_or]
+ exact Or.inl ha.ne'
+ rw [set_integral_congr measurableSet_Ioi this, integral_smul, integral_comp_mul_left_Ioi _ _ ha,
+ MulZeroClass.mul_zero, β Complex.coe_smul, β mul_smul, sub_eq_add_neg,
+ cpow_add _ _ (of_real_ne_zero.mpr ha.ne'), cpow_one, abs_of_pos (inv_pos.mpr ha), of_real_inv,
+ mul_assoc, mul_comm, inv_mul_cancel_rightβ (of_real_ne_zero.mpr ha.ne')]
+#align mellin_comp_mul_left mellin_comp_mul_left
+
+theorem mellin_comp_mul_right (f : β β E) (s : β) {a : β} (ha : 0 < a) :
+ mellin (fun t => f (t * a)) s = (a : β) ^ (-s) β’ mellin f s := by
+ simpa only [mul_comm] using mellin_comp_mul_left f s ha
+#align mellin_comp_mul_right mellin_comp_mul_right
+
+theorem mellin_comp_inv (f : β β E) (s : β) : mellin (fun t => f tβ»ΒΉ) s = mellin f (-s) := by
+ simp_rw [β rpow_neg_one, mellin_comp_rpow _ _ (neg_ne_zero.mpr one_ne_zero), abs_neg, abs_one,
+ inv_one, one_smul, of_real_neg, of_real_one, div_neg, div_one]
+#align mellin_comp_inv mellin_comp_inv
+
+/-- Predicate standing for "the Mellin transform of `f` is defined at `s` and equal to `m`". This
+shortens some arguments. -/
+def HasMellin (f : β β E) (s : β) (m : E) : Prop :=
+ MellinConvergent f s β§ mellin f s = m
+#align has_mellin HasMellin
+
+theorem hasMellin_add {f g : β β E} {s : β} (hf : MellinConvergent f s)
+ (hg : MellinConvergent g s) : HasMellin (fun t => f t + g t) s (mellin f s + mellin g s) :=
+ β¨by simpa only [MellinConvergent, smul_add] using hf.add hg, by
+ simpa only [mellin, smul_add] using integral_add hf hgβ©
+#align has_mellin_add hasMellin_add
+
+theorem hasMellin_sub {f g : β β E} {s : β} (hf : MellinConvergent f s)
+ (hg : MellinConvergent g s) : HasMellin (fun t => f t - g t) s (mellin f s - mellin g s) :=
+ β¨by simpa only [MellinConvergent, smul_sub] using hf.sub hg, by
+ simpa only [mellin, smul_sub] using integral_sub hf hgβ©
+#align has_mellin_sub hasMellin_sub
+
+end Defs
variable {E : Type _} [NormedAddCommGroup E]
@@ -103,7 +263,7 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
`b < s`, its Mellin transform converges on some right neighbourhood of `0`. -/
theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
(hfc : AEStronglyMeasurable f <| volume.restrict (Ioi 0))
- (hf : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) {s : β} (hs : b < s) :
+ (hf : IsBigO (π[>] 0) f fun t => t ^ (-b)) {s : β} (hs : b < s) :
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioc 0 c) :=
by
obtain β¨d, hd, hd'β© := hf.exists_pos
@@ -136,7 +296,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
and `O(x ^ (-b))` at `0`, then its Mellin transform integral converges for `b < s < a`. -/
theorem mellin_convergent_of_isBigO_scalar {a b : β} {f : β β β} {s : β}
(hfc : LocallyIntegrableOn f <| Ioi 0) (hf_top : IsBigO atTop f fun t => t ^ (-a))
- (hs_top : s < a) (hf_bot : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) (hs_bot : b < s) :
+ (hs_top : s < a) (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s) :
IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioi 0) :=
by
obtain β¨c1, hc1, hc1'β© := mellin_convergent_top_of_isBigO hfc.ae_strongly_measurable hf_top hs_top
@@ -153,14 +313,15 @@ theorem mellin_convergent_of_isBigO_scalar {a b : β} {f : β β β} {s :
exact ContinuousAt.continuousOn fun t ht => continuous_at_rpow_const _ _ <| Or.inl <| ne_of_gt ht
#align mellin_convergent_of_is_O_scalar mellin_convergent_of_isBigO_scalar
-theorem mellin_convergent_of_isBigO_rpow [NormedSpace β E] {a b : β} {f : β β E} {s : β}
+theorem mellinConvergent_of_isBigO_rpow [NormedSpace β E] {a b : β} {f : β β E} {s : β}
(hfc : LocallyIntegrableOn f <| Ioi 0) (hf_top : IsBigO atTop f fun t => t ^ (-a))
- (hs_top : s.re < a) (hf_bot : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
- IntegrableOn (fun t : β => (t : β) ^ (s - 1) β’ f t) (Ioi 0) :=
+ (hs_top : s.re < a) (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
+ MellinConvergent f s :=
by
- rw [mellin_convergent_iff_norm (subset_refl _) measurableSet_Ioi hfc.ae_strongly_measurable]
+ rw [MellinConvergent,
+ mellin_convergent_iff_norm (subset_refl _) measurableSet_Ioi hfc.ae_strongly_measurable]
exact mellin_convergent_of_isBigO_scalar hfc.norm hf_top.norm_left hs_top hf_bot.norm_left hs_bot
-#align mellin_convergent_of_is_O_rpow mellin_convergent_of_isBigO_rpow
+#align mellin_convergent_of_is_O_rpow mellinConvergent_of_isBigO_rpow
end MellinConvergent
@@ -180,10 +341,10 @@ theorem isBigO_rpow_top_log_smul [NormedSpace β E] {a b : β} {f : β β E}
/-- If `f` is `O(x ^ (-a))` as `x β 0`, then `log β’ f` is `O(x ^ (-b))` for every `a < b`. -/
theorem isBigO_rpow_zero_log_smul [NormedSpace β E] {a b : β} {f : β β E} (hab : a < b)
- (hf : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-a)) :
- IsBigO (π[Ioi 0] 0) (fun t : β => log t β’ f t) fun t => t ^ (-b) :=
+ (hf : IsBigO (π[>] 0) f fun t => t ^ (-a)) :
+ IsBigO (π[>] 0) (fun t : β => log t β’ f t) fun t => t ^ (-b) :=
by
- have : is_o (π[Ioi 0] 0) log fun t : β => t ^ (a - b) :=
+ have : is_o (π[>] 0) log fun t : β => t ^ (a - b) :=
by
refine'
((isLittleO_log_rpow_atTop (sub_pos.mpr hab)).neg_left.comp_tendsto
@@ -207,8 +368,9 @@ theorem isBigO_rpow_zero_log_smul [NormedSpace β E] {a b : β} {f : β β E
with derivative equal to the Mellin transform of `log β’ f`. -/
theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a b : β} {f : β β E}
{s : β} (hfc : LocallyIntegrableOn f <| Ioi 0) (hf_top : IsBigO atTop f fun t => t ^ (-a))
- (hs_top : s.re < a) (hf_bot : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
- HasDerivAt (mellin f) (mellin (fun t => (log t : β) β’ f t) s) s :=
+ (hs_top : s.re < a) (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
+ MellinConvergent (fun t => log t β’ f t) s β§
+ HasDerivAt (mellin f) (mellin (fun t => log t β’ f t) s) s :=
by
let F : β β β β E := fun z t => (t : β) ^ (z - 1) β’ f t
let F' : β β β β E := fun z t => ((t : β) ^ (z - 1) * log t) β’ f t
@@ -228,7 +390,7 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
refine' ContinuousAt.continuousOn fun t ht => _
exact continuous_at_of_real_cpow_const _ _ (Or.inr <| ne_of_gt ht)
have h2 : integrable_on (F s) (Ioi 0) :=
- mellin_convergent_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot
+ mellinConvergent_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot
have h3 : ae_strongly_measurable (F' s) (volume.restrict <| Ioi 0) :=
by
apply locally_integrable_on.ae_strongly_measurable
@@ -293,8 +455,8 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
rw [of_real_log (le_of_lt ht)]
ring
exact u1.smul_const (f t)
- simpa only [F', mellin, mul_smul] using
- (hasDerivAt_integral_of_dominated_loc_of_deriv_le hv0 h1 h2 h3 h4 h5 h6).2
+ have main := hasDerivAt_integral_of_dominated_loc_of_deriv_le hv0 h1 h2 h3 h4 h5 h6
+ exact β¨by simpa only [F', mul_smul] using main.1, by simpa only [F', mul_smul] using main.2β©
#align mellin_has_deriv_of_is_O_rpow mellin_has_deriv_of_isBigO_rpow
/-- Suppose `f` is locally integrable on `(0, β)`, is `O(x ^ (-a))` as `x β β`, and is
@@ -303,9 +465,9 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
theorem mellin_differentiableAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a b : β}
{f : β β E} {s : β} (hfc : LocallyIntegrableOn f <| Ioi 0)
(hf_top : IsBigO atTop f fun t => t ^ (-a)) (hs_top : s.re < a)
- (hf_bot : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
+ (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
DifferentiableAt β (mellin f) s :=
- (mellin_has_deriv_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot).DifferentiableAt
+ (mellin_has_deriv_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot).2.DifferentiableAt
#align mellin_differentiable_at_of_is_O_rpow mellin_differentiableAt_of_isBigO_rpow
end MellinDiff
@@ -314,24 +476,60 @@ section ExpDecay
/-- If `f` is locally integrable, decays exponentially at infinity, and is `O(x ^ (-b))` at 0, then
its Mellin transform converges for `b < s.re`. -/
-theorem mellin_convergent_of_isBigO_rpow_exp [NormedSpace β E] {a b : β} (ha : 0 < a) {f : β β E}
+theorem mellinConvergent_of_isBigO_rpow_exp [NormedSpace β E] {a b : β} (ha : 0 < a) {f : β β E}
{s : β} (hfc : LocallyIntegrableOn f <| Ioi 0) (hf_top : IsBigO atTop f fun t => exp (-a * t))
- (hf_bot : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
- IntegrableOn (fun t : β => (t : β) ^ (s - 1) β’ f t) (Ioi 0) :=
- mellin_convergent_of_isBigO_rpow hfc (hf_top.trans (isLittleO_exp_neg_mul_rpow_atTop ha _).IsBigO)
+ (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) : MellinConvergent f s :=
+ mellinConvergent_of_isBigO_rpow hfc (hf_top.trans (isLittleO_exp_neg_mul_rpow_atTop ha _).IsBigO)
(lt_add_one _) hf_bot hs_bot
-#align mellin_convergent_of_is_O_rpow_exp mellin_convergent_of_isBigO_rpow_exp
+#align mellin_convergent_of_is_O_rpow_exp mellinConvergent_of_isBigO_rpow_exp
/-- If `f` is locally integrable, decays exponentially at infinity, and is `O(x ^ (-b))` at 0, then
its Mellin transform is holomorphic on `b < s.re`. -/
theorem mellin_differentiableAt_of_isBigO_rpow_exp [CompleteSpace E] [NormedSpace β E] {a b : β}
(ha : 0 < a) {f : β β E} {s : β} (hfc : LocallyIntegrableOn f <| Ioi 0)
- (hf_top : IsBigO atTop f fun t => exp (-a * t))
- (hf_bot : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) (hs_bot : b < s.re) :
- DifferentiableAt β (mellin f) s :=
+ (hf_top : IsBigO atTop f fun t => exp (-a * t)) (hf_bot : IsBigO (π[>] 0) f fun t => t ^ (-b))
+ (hs_bot : b < s.re) : DifferentiableAt β (mellin f) s :=
mellin_differentiableAt_of_isBigO_rpow hfc
(hf_top.trans (isLittleO_exp_neg_mul_rpow_atTop ha _).IsBigO) (lt_add_one _) hf_bot hs_bot
#align mellin_differentiable_at_of_is_O_rpow_exp mellin_differentiableAt_of_isBigO_rpow_exp
end ExpDecay
+section MellinIoc
+
+/-!
+## Mellin transforms of functions on `Ioc 0 1`
+-/
+
+
+/-- The Mellin transform of the indicator function of `Ioc 0 1`. -/
+theorem hasMellin_one_Ioc {s : β} (hs : 0 < re s) :
+ HasMellin (indicator (Ioc 0 1) (fun t => 1 : β β β)) s (1 / s) :=
+ by
+ have aux1 : -1 < (s - 1).re := by
+ simpa only [sub_re, one_re, sub_eq_add_neg] using lt_add_of_pos_left _ hs
+ have aux2 : s β 0 := by
+ contrapose! hs
+ rw [hs, zero_re]
+ have aux3 : MeasurableSet (Ioc (0 : β) 1) := measurableSet_Ioc
+ simp_rw [HasMellin, mellin, MellinConvergent, β indicator_smul, integrable_on,
+ integrable_indicator_iff aux3, smul_eq_mul, integral_indicator aux3, mul_one, integrable_on,
+ measure.restrict_restrict_of_subset Ioc_subset_Ioi_self]
+ rw [β integrable_on, β intervalIntegrable_iff_integrable_Ioc_of_le zero_le_one]
+ refine' β¨intervalIntegral.intervalIntegrable_cpow' aux1, _β©
+ rw [β intervalIntegral.integral_of_le zero_le_one, integral_cpow (Or.inl aux1), sub_add_cancel,
+ of_real_zero, of_real_one, one_cpow, zero_cpow aux2, sub_zero]
+#align has_mellin_one_Ioc hasMellin_one_Ioc
+
+/-- The Mellin transform of a power function restricted to `Ioc 0 1`. -/
+theorem hasMellin_cpow_Ioc (a : β) {s : β} (hs : 0 < re s + re a) :
+ HasMellin (indicator (Ioc 0 1) (fun t => βt ^ a : β β β)) s (1 / (s + a)) :=
+ by
+ have := hasMellin_one_Ioc (by rwa [add_re] : 0 < (s + a).re)
+ simp_rw [HasMellin, β MellinConvergent.cpow_smul, β mellin_cpow_smul, β indicator_smul,
+ smul_eq_mul, mul_one] at this
+ exact this
+#align has_mellin_cpow_Ioc hasMellin_cpow_Ioc
+
+end MellinIoc
+
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -58,13 +58,13 @@ section MellinConvergent
/-- Auxiliary lemma to reduce convergence statements from vector-valued functions to real
scalar-valued functions. -/
theorem mellin_convergent_iff_norm [NormedSpace β E] {f : β β E} {T : Set β} (hT : T β Ioi 0)
- (hT' : MeasurableSet T) (hfc : AeStronglyMeasurable f <| volume.restrict <| Ioi 0) {s : β} :
+ (hT' : MeasurableSet T) (hfc : AEStronglyMeasurable f <| volume.restrict <| Ioi 0) {s : β} :
IntegrableOn (fun t : β => (t : β) ^ (s - 1) β’ f t) T β
IntegrableOn (fun t : β => t ^ (s.re - 1) * βf tβ) T :=
by
have : ae_strongly_measurable (fun t : β => (t : β) ^ (s - 1) β’ f t) (volume.restrict T) :=
by
- refine' ((ContinuousAt.continuousOn _).AeStronglyMeasurable hT').smul (hfc.mono_set hT)
+ refine' ((ContinuousAt.continuousOn _).AEStronglyMeasurable hT').smul (hfc.mono_set hT)
exact fun t ht => continuous_at_of_real_cpow_const _ _ (Or.inr <| ne_of_gt (hT ht))
rw [integrable_on, β integrable_norm_iff this, β integrable_on]
refine' integrable_on_congr_fun (fun t ht => _) hT'
@@ -74,7 +74,7 @@ theorem mellin_convergent_iff_norm [NormedSpace β E] {f : β β E} {T : Set
/-- If `f` is a locally integrable real-valued function which is `O(x ^ (-a))` at `β`, then for any
`s < a`, its Mellin transform converges on some neighbourhood of `+β`. -/
theorem mellin_convergent_top_of_isBigO {f : β β β}
- (hfc : AeStronglyMeasurable f <| volume.restrict (Ioi 0)) {a s : β}
+ (hfc : AEStronglyMeasurable f <| volume.restrict (Ioi 0)) {a s : β}
(hf : IsBigO atTop f fun t => t ^ (-a)) (hs : s < a) :
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioi c) :=
by
@@ -84,7 +84,7 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
have he' : 0 < max e 1 := zero_lt_one.trans_le (le_max_right _ _)
refine' β¨max e 1, he', _, _β©
Β· refine' ae_strongly_measurable.mul _ (hfc.mono_set (Ioi_subset_Ioi he'.le))
- refine' (ContinuousAt.continuousOn fun t ht => _).AeStronglyMeasurable measurableSet_Ioi
+ refine' (ContinuousAt.continuousOn fun t ht => _).AEStronglyMeasurable measurableSet_Ioi
exact continuous_at_rpow_const _ _ (Or.inl <| (he'.trans ht).ne')
Β· have : βα΅ t : β βvolume.restrict (Ioi <| max e 1), βt ^ (s - 1) * f tβ β€ t ^ (s - 1 + -a) * d :=
by
@@ -102,7 +102,7 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
/-- If `f` is a locally integrable real-valued function which is `O(x ^ (-b))` at `0`, then for any
`b < s`, its Mellin transform converges on some right neighbourhood of `0`. -/
theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
- (hfc : AeStronglyMeasurable f <| volume.restrict (Ioi 0))
+ (hfc : AEStronglyMeasurable f <| volume.restrict (Ioi 0))
(hf : IsBigO (π[Ioi 0] 0) f fun t => t ^ (-b)) {s : β} (hs : b < s) :
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioc 0 c) :=
by
@@ -111,7 +111,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
obtain β¨Ξ΅, hΞ΅, hΞ΅'β© := hd'
refine' β¨Ξ΅, hΞ΅, integrable_on_Ioc_iff_integrable_on_Ioo.mpr β¨_, _β©β©
Β· refine' ae_strongly_measurable.mul _ (hfc.mono_set Ioo_subset_Ioi_self)
- refine' (ContinuousAt.continuousOn fun t ht => _).AeStronglyMeasurable measurableSet_Ioo
+ refine' (ContinuousAt.continuousOn fun t ht => _).AEStronglyMeasurable measurableSet_Ioo
exact continuous_at_rpow_const _ _ (Or.inl ht.1.ne')
Β· apply has_finite_integral.mono'
Β· show has_finite_integral (fun t => d * t ^ (s - b - 1)) _
@@ -224,7 +224,7 @@ theorem mellin_has_deriv_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a
have h1 : βαΆ z : β in π s, ae_strongly_measurable (F z) (volume.restrict <| Ioi 0) :=
by
refine' eventually_of_forall fun z => ae_strongly_measurable.smul _ hfc.ae_strongly_measurable
- refine' ContinuousOn.aeStronglyMeasurable _ measurableSet_Ioi
+ refine' ContinuousOn.aEStronglyMeasurable _ measurableSet_Ioi
refine' ContinuousAt.continuousOn fun t ht => _
exact continuous_at_of_real_cpow_const _ _ (Or.inr <| ne_of_gt ht)
have h2 : integrable_on (F s) (Ioi 0) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/403190b5419b3f03f1a2893ad9352ca7f7d8bff6
set_integral
with setIntegral
(#12215)
Done with a global search and replace, and then (to fix the #align
lines), replace (#align \S*)setIntegral
with $1set_integral
.
@@ -117,7 +117,7 @@ def mellinInv (Ο : β) (f : β β E) (x : β) : E :=
-- next few lemmas don't require convergence of the Mellin transform (they are just 0 = 0 otherwise)
theorem mellin_cpow_smul (f : β β E) (s a : β) :
mellin (fun t => (t : β) ^ a β’ f t) s = mellin f (s + a) := by
- refine' set_integral_congr measurableSet_Ioi fun t ht => _
+ refine' setIntegral_congr measurableSet_Ioi fun t ht => _
simp_rw [β sub_add_eq_add_sub, cpow_add _ _ (ofReal_ne_zero.2 <| ne_of_gt ht), mul_smul]
#align mellin_cpow_smul mellin_cpow_smul
@@ -140,7 +140,7 @@ theorem mellin_comp_rpow (f : β β E) (s : β) (a : β) :
Β· simp [integral, mellin, hE]
simp_rw [mellin]
conv_rhs => rw [β integral_comp_rpow_Ioi _ ha, β integral_smul]
- refine' set_integral_congr measurableSet_Ioi fun t ht => _
+ refine' setIntegral_congr measurableSet_Ioi fun t ht => _
dsimp only
rw [β mul_smul, β mul_assoc, inv_mul_cancel (mt abs_eq_zero.1 ha), one_mul, β smul_assoc,
real_smul]
@@ -160,7 +160,7 @@ theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
(by ring : 1 - s = -(s - 1)), cpow_neg, inv_mul_cancel_leftβ]
rw [Ne, cpow_eq_zero_iff, ofReal_eq_zero, not_and_or]
exact Or.inl ha.ne'
- rw [set_integral_congr measurableSet_Ioi this, integral_smul,
+ rw [setIntegral_congr measurableSet_Ioi this, integral_smul,
integral_comp_mul_left_Ioi (fun u β¦ (u : β) ^ (s - 1) β’ f u) _ ha,
mul_zero, β Complex.coe_smul, β mul_smul, sub_eq_add_neg,
cpow_add _ _ (ofReal_ne_zero.mpr ha.ne'), cpow_one, ofReal_inv,
When computing the integral of a function taking values in a noncomplete space, we use the junk value 0
. This means that several theorems about integrals hold without completeness assumptions for trivial reasons. We use this to drop several completeness assumptions here and there in mathlib. This involves one nontrivial mathematical fact, that E βL[π] F
is complete iff F
is complete, for which we add the missing direction (from left to right) in this PR.
@@ -348,7 +348,7 @@ set_option linter.uppercaseLean3 false in
/-- Suppose `f` is locally integrable on `(0, β)`, is `O(x ^ (-a))` as `x β β`, and is
`O(x ^ (-b))` as `x β 0`. Then its Mellin transform is differentiable on the domain `b < re s < a`,
with derivative equal to the Mellin transform of `log β’ f`. -/
-theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a b : β}
+theorem mellin_hasDerivAt_of_isBigO_rpow [NormedSpace β E] {a b : β}
{f : β β E} {s : β} (hfc : LocallyIntegrableOn f (Ioi 0)) (hf_top : f =O[atTop] (Β· ^ (-a)))
(hs_top : s.re < a) (hf_bot : f =O[π[>] 0] (Β· ^ (-b))) (hs_bot : b < s.re) :
MellinConvergent (fun t => log t β’ f t) s β§
@@ -430,7 +430,7 @@ set_option linter.uppercaseLean3 false in
/-- Suppose `f` is locally integrable on `(0, β)`, is `O(x ^ (-a))` as `x β β`, and is
`O(x ^ (-b))` as `x β 0`. Then its Mellin transform is differentiable on the domain `b < re s < a`.
-/
-theorem mellin_differentiableAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {a b : β}
+theorem mellin_differentiableAt_of_isBigO_rpow [NormedSpace β E] {a b : β}
{f : β β E} {s : β} (hfc : LocallyIntegrableOn f <| Ioi 0)
(hf_top : f =O[atTop] (Β· ^ (-a))) (hs_top : s.re < a)
(hf_bot : f =O[π[>] 0] (Β· ^ (-b))) (hs_bot : b < s.re) :
@@ -455,7 +455,7 @@ set_option linter.uppercaseLean3 false in
/-- If `f` is locally integrable, decays exponentially at infinity, and is `O(x ^ (-b))` at 0, then
its Mellin transform is holomorphic on `b < s.re`. -/
-theorem mellin_differentiableAt_of_isBigO_rpow_exp [CompleteSpace E] [NormedSpace β E] {a b : β}
+theorem mellin_differentiableAt_of_isBigO_rpow_exp [NormedSpace β E] {a b : β}
(ha : 0 < a) {f : β β E} {s : β} (hfc : LocallyIntegrableOn f <| Ioi 0)
(hf_top : f =O[atTop] fun t => exp (-a * t)) (hf_bot : f =O[π[>] 0] (Β· ^ (-b)))
(hs_bot : b < s.re) : DifferentiableAt β (mellin f) s :=
@@ -81,7 +81,7 @@ theorem MellinConvergent.comp_mul_left {f : β β E} {s : β} {a : β} (ha :
((a : β) ^ (s - 1) β’ fun t : β => (t : β) ^ (s - 1) β’ f (a * t)) (Ioi 0) := fun t ht β¦ by
simp only [ofReal_mul, mul_cpow_ofReal_nonneg ha.le (le_of_lt ht), mul_smul, Pi.smul_apply]
have h2 : (a : β) ^ (s - 1) β 0 := by
- rw [Ne.def, cpow_eq_zero_iff, not_and_or, ofReal_eq_zero]
+ rw [Ne, cpow_eq_zero_iff, not_and_or, ofReal_eq_zero]
exact Or.inl ha.ne'
rw [MellinConvergent, MellinConvergent, β this, integrableOn_congr_fun h1 measurableSet_Ioi,
IntegrableOn, IntegrableOn, integrable_smul_iff h2]
@@ -158,7 +158,7 @@ theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
dsimp only
rw [ofReal_mul, mul_cpow_ofReal_nonneg ha.le (le_of_lt ht), β mul_smul,
(by ring : 1 - s = -(s - 1)), cpow_neg, inv_mul_cancel_leftβ]
- rw [Ne.def, cpow_eq_zero_iff, ofReal_eq_zero, not_and_or]
+ rw [Ne, cpow_eq_zero_iff, ofReal_eq_zero, not_and_or]
exact Or.inl ha.ne'
rw [set_integral_congr measurableSet_Ioi this, integral_smul,
integral_comp_mul_left_Ioi (fun u β¦ (u : β) ^ (s - 1) β’ f u) _ ha,
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -95,7 +95,7 @@ theorem MellinConvergent.comp_rpow {f : β β E} {s : β} {a : β} (ha : a
dsimp only [Pi.smul_apply]
rw [β Complex.coe_smul (t ^ (a - 1)), β mul_smul, β cpow_mul_ofReal_nonneg (le_of_lt ht),
ofReal_cpow (le_of_lt ht), β cpow_add _ _ (ofReal_ne_zero.mpr (ne_of_gt ht)), ofReal_sub,
- ofReal_one, mul_sub, mul_div_cancel' _ (ofReal_ne_zero.mpr ha), mul_one, add_comm, β
+ ofReal_one, mul_sub, mul_div_cancelβ _ (ofReal_ne_zero.mpr ha), mul_one, add_comm, β
add_sub_assoc, sub_add_cancel]
#align mellin_convergent.comp_rpow MellinConvergent.comp_rpow
@@ -146,7 +146,7 @@ theorem mellin_comp_rpow (f : β β E) (s : β) (a : β) :
real_smul]
rw [ofReal_cpow (le_of_lt ht), β cpow_mul_ofReal_nonneg (le_of_lt ht), β
cpow_add _ _ (ofReal_ne_zero.mpr <| ne_of_gt ht), ofReal_sub, ofReal_one, mul_sub,
- mul_div_cancel' _ (ofReal_ne_zero.mpr ha), add_comm, β add_sub_assoc, mul_one, sub_add_cancel]
+ mul_div_cancelβ _ (ofReal_ne_zero.mpr ha), add_comm, β add_sub_assoc, mul_one, sub_add_cancel]
#align mellin_comp_rpow mellin_comp_rpow
theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
@@ -321,7 +321,7 @@ theorem isBigO_rpow_top_log_smul [NormedSpace β E] {a b : β} {f : β β E}
(eventually_of_forall fun t => by rfl)
((eventually_gt_atTop 0).mp (eventually_of_forall fun t ht => _))
simp only
- rw [smul_eq_mul, β rpow_add ht, β sub_eq_add_neg, sub_eq_add_neg a, add_sub_cancel']
+ rw [smul_eq_mul, β rpow_add ht, β sub_eq_add_neg, sub_eq_add_neg a, add_sub_cancel_left]
set_option linter.uppercaseLean3 false in
#align is_O_rpow_top_log_smul isBigO_rpow_top_log_smul
@@ -99,12 +99,21 @@ theorem MellinConvergent.comp_rpow {f : β β E} {s : β} {a : β} (ha : a
add_sub_assoc, sub_add_cancel]
#align mellin_convergent.comp_rpow MellinConvergent.comp_rpow
+/-- A function `f` is `VerticalIntegrable` at `Ο` if `y β¦ f(Ο + yi)` is integrable. -/
+def Complex.VerticalIntegrable (f : β β E) (Ο : β) (ΞΌ : Measure β := by volume_tac) : Prop :=
+ Integrable (fun (y : β) β¦ f (Ο + y * I)) ΞΌ
+
/-- The Mellin transform of a function `f` (for a complex exponent `s`), defined as the integral of
`t ^ (s - 1) β’ f` over `Ioi 0`. -/
def mellin (f : β β E) (s : β) : E :=
β« t : β in Ioi 0, (t : β) ^ (s - 1) β’ f t
#align mellin mellin
+/-- The Mellin inverse transform of a function `f`, defined as `1 / (2Ο)` times
+the integral of `y β¦ x ^ -(Ο + yi) β’ f (Ο + yi)`. -/
+def mellinInv (Ο : β) (f : β β E) (x : β) : E :=
+ (1 / (2 * Ο)) β’ β« y : β, (x : β) ^ (-(Ο + y * I)) β’ f (Ο + y * I)
+
-- next few lemmas don't require convergence of the Mellin transform (they are just 0 = 0 otherwise)
theorem mellin_cpow_smul (f : β β E) (s a : β) :
mellin (fun t => (t : β) ^ a β’ f t) s = mellin f (s + a) := 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>
@@ -369,7 +369,7 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
have h4 : βα΅ t : β βvolume.restrict (Ioi 0),
β z : β, z β Metric.ball s v β βF' z tβ β€ bound t := by
refine' (ae_restrict_mem measurableSet_Ioi).mono fun t ht z hz => _
- simp_rw [norm_smul, norm_mul, Complex.norm_eq_abs (log _), Complex.abs_ofReal,
+ simp_rw [F', bound, norm_smul, norm_mul, Complex.norm_eq_abs (log _), Complex.abs_ofReal,
mul_assoc]
gcongr
rw [Complex.norm_eq_abs, abs_cpow_eq_rpow_re_of_pos ht]
@@ -387,7 +387,7 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
have hz' := (re_le_abs _).trans hz.le
rwa [sub_re, sub_le_iff_le_add, β sub_le_iff_le_add'] at hz'
have h5 : IntegrableOn bound (Ioi 0) := by
- simp_rw [add_mul, mul_assoc]
+ simp_rw [bound, add_mul, mul_assoc]
suffices β {j : β}, b < j β j < a β
IntegrableOn (fun t : β => t ^ (j - 1) * (|log t| * βf tβ)) (Ioi 0) volume by
refine' Integrable.add (this _ _) (this _ _)
@@ -154,7 +154,7 @@ theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
rw [set_integral_congr measurableSet_Ioi this, integral_smul,
integral_comp_mul_left_Ioi (fun u β¦ (u : β) ^ (s - 1) β’ f u) _ ha,
mul_zero, β Complex.coe_smul, β mul_smul, sub_eq_add_neg,
- cpow_add _ _ (ofReal_ne_zero.mpr ha.ne'), cpow_one, abs_of_pos (inv_pos.mpr ha), ofReal_inv,
+ cpow_add _ _ (ofReal_ne_zero.mpr ha.ne'), cpow_one, ofReal_inv,
mul_assoc, mul_comm, inv_mul_cancel_rightβ (ofReal_ne_zero.mpr ha.ne')]
#align mellin_comp_mul_left mellin_comp_mul_left
@@ -414,7 +414,7 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
ring
exact u1.smul_const (f t)
have main := hasDerivAt_integral_of_dominated_loc_of_deriv_le hv0 h1 h2 h3 h4 h5 h6
- simpa only [mul_smul] using main
+ simpa only [F', mul_smul] using main
set_option linter.uppercaseLean3 false in
#align mellin_has_deriv_of_is_O_rpow mellin_hasDerivAt_of_isBigO_rpow
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -358,8 +358,8 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
refine' ContinuousOn.aestronglyMeasurable _ measurableSet_Ioi
refine' ContinuousAt.continuousOn fun t ht => _
exact continuousAt_ofReal_cpow_const _ _ (Or.inr <| ne_of_gt ht)
- have h2 : IntegrableOn (F s) (Ioi (0 : β))
- Β· exact mellinConvergent_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot
+ have h2 : IntegrableOn (F s) (Ioi (0 : β)) := by
+ exact mellinConvergent_of_isBigO_rpow hfc hf_top hs_top hf_bot hs_bot
have h3 : AEStronglyMeasurable (F' s) (volume.restrict <| Ioi 0) := by
apply LocallyIntegrableOn.aestronglyMeasurable
refine' hfc.continuousOn_smul isOpen_Ioi ((ContinuousAt.continuousOn fun t ht => _).mul _)
abs
(#9553)
The current design for abs
is flawed:
Abs
notation typeclass has exactly two instances: one for [Neg Ξ±] [Sup Ξ±]
, one for [Inv Ξ±] [Sup Ξ±]
. This means that:
Abs.abs
Abs
instances!Algebra.Order.Group.Abs
are about the additive version.Algebra.Order.Group.PosPart
, and they get additivised to duplicates of the lemmas in Algebra.Order.Group.Abs
!This PR changes the notation typeclass with two new definitions (related through to_additive
): mabs
and abs
. abs
inherits the |a|
notation and mabs
gets |a|β
instead.
The first half of Algebra.Order.Group.Abs
gets multiplicativised. A later PR will multiplicativise the second half, and another one will deduplicate the lemmas in Algebra.Order.Group.PosPart
.
Part of #9411.
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -398,7 +398,7 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
refine' mellin_convergent_of_isBigO_scalar _ _ hw1' _ hw2
Β· simp_rw [mul_comm]
refine' hfc.norm.mul_continuousOn _ isOpen_Ioi
- refine' Continuous.comp_continuousOn continuous_abs (continuousOn_log.mono _)
+ refine' Continuous.comp_continuousOn _root_.continuous_abs (continuousOn_log.mono _)
exact subset_compl_singleton_iff.mpr not_mem_Ioi_self
Β· refine (isBigO_rpow_top_log_smul hw2' hf_top).norm_left.congr_left fun t β¦ ?_
simp only [norm_smul, Real.norm_eq_abs]
rpow_nonneg_of_nonneg
to rpow_nonneg
(#9518)
This better matches other lemma names.
From LeanAPAP
@@ -226,8 +226,8 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
βt ^ (s - 1) * f tβ β€ t ^ (s - 1 + -a) * d := by
refine' (ae_restrict_mem measurableSet_Ioi).mono fun t ht => _
have ht' : 0 < t := he'.trans ht
- rw [norm_mul, rpow_add ht', β norm_of_nonneg (rpow_nonneg_of_nonneg ht'.le (-a)), mul_assoc,
- mul_comm _ d, norm_of_nonneg (rpow_nonneg_of_nonneg ht'.le _)]
+ rw [norm_mul, rpow_add ht', β norm_of_nonneg (rpow_nonneg ht'.le (-a)), mul_assoc,
+ mul_comm _ d, norm_of_nonneg (rpow_nonneg ht'.le _)]
gcongr
exact he t ((le_max_left e 1).trans_lt ht).le
refine' (HasFiniteIntegral.mul_const _ _).mono' this
@@ -261,7 +261,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
exact ht.2
Β· calc _ β€ d * βt ^ (-b)β * βt ^ (s - 1)β := by gcongr
_ = d * t ^ (s - b - 1) := ?_
- simp_rw [norm_of_nonneg (rpow_nonneg_of_nonneg (le_of_lt ht.1) _), mul_assoc]
+ simp_rw [norm_of_nonneg (rpow_nonneg (le_of_lt ht.1) _), mul_assoc]
rw [β rpow_add ht.1]
congr 2
abel
@@ -375,7 +375,7 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
rw [Complex.norm_eq_abs, abs_cpow_eq_rpow_re_of_pos ht]
rcases le_or_lt 1 t with h | h
Β· refine' le_add_of_le_of_nonneg (rpow_le_rpow_of_exponent_le h _)
- (rpow_nonneg_of_nonneg (zero_le_one.trans h) _)
+ (rpow_nonneg (zero_le_one.trans h) _)
rw [sub_re, one_re, sub_le_sub_iff_right]
rw [mem_ball_iff_norm, Complex.norm_eq_abs] at hz
have hz' := (re_le_abs _).trans hz.le
[a, +oo)
(#8712)
We have in the library the lemma not_intervalIntegrable_of_tendsto_norm_atTop_of_deriv_isBigO_filter
, saying that if a function tends to infinity at a point in an interval [a, b]
, then its derivative is not interval-integrable on [a, b]
. We generalize this result to allow for any set instead of [a, b]
, and apply it to half-infinite intervals.
In particular, we characterize integrability of x^s
on [a, +oo)
, and deduce that x^s
is never integrable on [0, +oo)
. This makes it possible to remove one assumption in Lemma mellin_comp_rpow
on the Mellin transform.
@@ -99,8 +99,6 @@ theorem MellinConvergent.comp_rpow {f : β β E} {s : β} {a : β} (ha : a
add_sub_assoc, sub_add_cancel]
#align mellin_convergent.comp_rpow MellinConvergent.comp_rpow
-variable [CompleteSpace E]
-
/-- The Mellin transform of a function `f` (for a complex exponent `s`), defined as the integral of
`t ^ (s - 1) β’ f` over `Ioi 0`. -/
def mellin (f : β β E) (s : β) : E :=
@@ -123,10 +121,14 @@ theorem mellin_div_const (f : β β β) (s a : β) : mellin (fun t => f t /
simp_rw [mellin, smul_eq_mul, β mul_div_assoc, integral_div]
#align mellin_div_const mellin_div_const
-theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
+theorem mellin_comp_rpow (f : β β E) (s : β) (a : β) :
mellin (fun t => f (t ^ a)) s = |a|β»ΒΉ β’ mellin f (s / a) := by
- -- note: this is also true for a = 0 (both sides are zero), but this is mathematically
- -- uninteresting and rather time-consuming to check
+ /- This is true for `a = 0` as all sides are undefined but turn out to vanish thanks to our
+ convention. The interesting case is `a β 0` -/
+ rcases eq_or_ne a 0 with rfl|ha
+ Β· by_cases hE : CompleteSpace E
+ Β· simp [integral_smul_const, mellin, setIntegral_Ioi_zero_cpow]
+ Β· simp [integral, mellin, hE]
simp_rw [mellin]
conv_rhs => rw [β integral_comp_rpow_Ioi _ ha, β integral_smul]
refine' set_integral_congr measurableSet_Ioi fun t ht => _
@@ -162,7 +164,7 @@ theorem mellin_comp_mul_right (f : β β E) (s : β) {a : β} (ha : 0 < a) :
#align mellin_comp_mul_right mellin_comp_mul_right
theorem mellin_comp_inv (f : β β E) (s : β) : mellin (fun t => f tβ»ΒΉ) s = mellin f (-s) := by
- simp_rw [β rpow_neg_one, mellin_comp_rpow _ _ (neg_ne_zero.mpr one_ne_zero), abs_neg, abs_one,
+ simp_rw [β rpow_neg_one, mellin_comp_rpow _ _ _, abs_neg, abs_one,
inv_one, one_smul, ofReal_neg, ofReal_one, div_neg, div_one]
#align mellin_comp_inv mellin_comp_inv
@@ -250,7 +252,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
Β· show HasFiniteIntegral (fun t => d * t ^ (s - b - 1)) _
refine' (Integrable.hasFiniteIntegral _).const_mul _
rw [β IntegrableOn, β integrableOn_Ioc_iff_integrableOn_Ioo, β
- intervalIntegrable_iff_integrable_Ioc_of_le hΞ΅.le]
+ intervalIntegrable_iff_integrableOn_Ioc_of_le hΞ΅.le]
exact intervalIntegral.intervalIntegrable_rpow' (by linarith)
Β· refine' (ae_restrict_iff' measurableSet_Ioo).mpr (eventually_of_forall fun t ht => _)
rw [mul_comm, norm_mul]
@@ -471,7 +473,7 @@ theorem hasMellin_one_Ioc {s : β} (hs : 0 < re s) :
simp_rw [HasMellin, mellin, MellinConvergent, β indicator_smul, IntegrableOn,
integrable_indicator_iff aux3, smul_eq_mul, integral_indicator aux3, mul_one, IntegrableOn,
Measure.restrict_restrict_of_subset Ioc_subset_Ioi_self]
- rw [β IntegrableOn, β intervalIntegrable_iff_integrable_Ioc_of_le zero_le_one]
+ rw [β IntegrableOn, β intervalIntegrable_iff_integrableOn_Ioc_of_le zero_le_one]
refine' β¨intervalIntegral.intervalIntegrable_cpow' aux1, _β©
rw [β intervalIntegral.integral_of_le zero_le_one, integral_cpow (Or.inl aux1), sub_add_cancel,
ofReal_zero, ofReal_one, one_cpow, zero_cpow aux2, sub_zero]
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.
@@ -226,8 +226,8 @@ theorem mellin_convergent_top_of_isBigO {f : β β β}
have ht' : 0 < t := he'.trans ht
rw [norm_mul, rpow_add ht', β norm_of_nonneg (rpow_nonneg_of_nonneg ht'.le (-a)), mul_assoc,
mul_comm _ d, norm_of_nonneg (rpow_nonneg_of_nonneg ht'.le _)]
- exact mul_le_mul_of_nonneg_left (he t ((le_max_left e 1).trans_lt ht).le)
- (rpow_pos_of_pos ht' _).le
+ gcongr
+ exact he t ((le_max_left e 1).trans_lt ht).le
refine' (HasFiniteIntegral.mul_const _ _).mono' this
exact (integrableOn_Ioi_rpow_of_lt (by linarith) he').hasFiniteIntegral
set_option linter.uppercaseLean3 false in
@@ -239,7 +239,7 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
(hfc : AEStronglyMeasurable f <| volume.restrict (Ioi 0))
(hf : f =O[π[>] 0] (Β· ^ (-b))) {s : β} (hs : b < s) :
β c : β, 0 < c β§ IntegrableOn (fun t : β => t ^ (s - 1) * f t) (Ioc 0 c) := by
- obtain β¨d, hd, hd'β© := hf.exists_pos
+ obtain β¨d, _, hd'β© := hf.exists_pos
simp_rw [IsBigOWith, eventually_nhdsWithin_iff, Metric.eventually_nhds_iff, gt_iff_lt] at hd'
obtain β¨Ξ΅, hΞ΅, hΞ΅'β© := hd'
refine' β¨Ξ΅, hΞ΅, integrableOn_Ioc_iff_integrableOn_Ioo.mpr β¨_, _β©β©
@@ -257,11 +257,11 @@ theorem mellin_convergent_zero_of_isBigO {b : β} {f : β β β}
specialize hΞ΅' _ ht.1
Β· rw [dist_eq_norm, sub_zero, norm_of_nonneg (le_of_lt ht.1)]
exact ht.2
- Β· refine' (mul_le_mul_of_nonneg_right hΞ΅' (norm_nonneg _)).trans _
+ Β· calc _ β€ d * βt ^ (-b)β * βt ^ (s - 1)β := by gcongr
+ _ = d * t ^ (s - b - 1) := ?_
simp_rw [norm_of_nonneg (rpow_nonneg_of_nonneg (le_of_lt ht.1) _), mul_assoc]
- refine' mul_le_mul_of_nonneg_left (le_of_eq _) hd.le
rw [β rpow_add ht.1]
- congr 1
+ congr 2
abel
set_option linter.uppercaseLean3 false in
#align mellin_convergent_zero_of_is_O mellin_convergent_zero_of_isBigO
@@ -369,7 +369,7 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
refine' (ae_restrict_mem measurableSet_Ioi).mono fun t ht z hz => _
simp_rw [norm_smul, norm_mul, Complex.norm_eq_abs (log _), Complex.abs_ofReal,
mul_assoc]
- refine' mul_le_mul_of_nonneg_right _ (mul_nonneg (abs_nonneg _) (norm_nonneg _))
+ gcongr
rw [Complex.norm_eq_abs, abs_cpow_eq_rpow_re_of_pos ht]
rcases le_or_lt 1 t with h | h
Β· refine' le_add_of_le_of_nonneg (rpow_le_rpow_of_exponent_le h _)
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -150,7 +150,7 @@ theorem mellin_comp_mul_left (f : β β E) (s : β) {a : β} (ha : 0 < a) :
rw [Ne.def, cpow_eq_zero_iff, ofReal_eq_zero, not_and_or]
exact Or.inl ha.ne'
rw [set_integral_congr measurableSet_Ioi this, integral_smul,
- integral_comp_mul_left_Ioi (fun u β¦ βu ^ (s - 1) β’ f u) _ ha,
+ integral_comp_mul_left_Ioi (fun u β¦ (u : β) ^ (s - 1) β’ f u) _ ha,
mul_zero, β Complex.coe_smul, β mul_smul, sub_eq_add_neg,
cpow_add _ _ (ofReal_ne_zero.mpr ha.ne'), cpow_one, abs_of_pos (inv_pos.mpr ha), ofReal_inv,
mul_assoc, mul_comm, inv_mul_cancel_rightβ (ofReal_ne_zero.mpr ha.ne')]
@@ -386,7 +386,7 @@ theorem mellin_hasDerivAt_of_isBigO_rpow [CompleteSpace E] [NormedSpace β E] {
rwa [sub_re, sub_le_iff_le_add, β sub_le_iff_le_add'] at hz'
have h5 : IntegrableOn bound (Ioi 0) := by
simp_rw [add_mul, mul_assoc]
- suffices β {j : β} (hj : b < j) (hj' : j < a),
+ suffices β {j : β}, b < j β j < a β
IntegrableOn (fun t : β => t ^ (j - 1) * (|log t| * βf tβ)) (Ioi 0) volume by
refine' Integrable.add (this _ _) (this _ _)
all_goals linarith
And fix some names in comments where this revealed issues
@@ -29,7 +29,7 @@ open MeasureTheory Set Filter Asymptotics TopologicalSpace
namespace Complex
--- Porting note: move this to `analysis.special_functions.pow.complex`
+-- Porting note: move this to `Mathlib.Analysis.SpecialFunctions.Pow.Complex`
theorem cpow_mul_ofReal_nonneg {x : β} (hx : 0 β€ x) (y : β) (z : β) :
(x : β) ^ (βy * z) = (β(x ^ y) : β) ^ z := by
rw [cpow_mul, ofReal_cpow hx]
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -49,14 +49,14 @@ noncomputable section
section Defs
-variable {E : Type _} [NormedAddCommGroup E] [NormedSpace β E]
+variable {E : Type*} [NormedAddCommGroup E] [NormedSpace β E]
/-- Predicate on `f` and `s` asserting that the Mellin integral is well-defined. -/
def MellinConvergent (f : β β E) (s : β) : Prop :=
IntegrableOn (fun t : β => (t : β) ^ (s - 1) β’ f t) (Ioi 0)
#align mellin_convergent MellinConvergent
-theorem MellinConvergent.const_smul {f : β β E} {s : β} (hf : MellinConvergent f s) {π : Type _}
+theorem MellinConvergent.const_smul {f : β β E} {s : β} (hf : MellinConvergent f s) {π : Type*}
[NontriviallyNormedField π] [NormedSpace π E] [SMulCommClass β π E] (c : π) :
MellinConvergent (fun t => c β’ f t) s := by
simpa only [MellinConvergent, smul_comm] using hf.smul c
@@ -114,7 +114,7 @@ theorem mellin_cpow_smul (f : β β E) (s a : β) :
simp_rw [β sub_add_eq_add_sub, cpow_add _ _ (ofReal_ne_zero.2 <| ne_of_gt ht), mul_smul]
#align mellin_cpow_smul mellin_cpow_smul
-theorem mellin_const_smul (f : β β E) (s : β) {π : Type _} [NontriviallyNormedField π]
+theorem mellin_const_smul (f : β β E) (s : β) {π : Type*} [NontriviallyNormedField π]
[NormedSpace π E] [SMulCommClass β π E] (c : π) :
mellin (fun t => c β’ f t) s = c β’ mellin f s := by simp only [mellin, smul_comm, integral_smul]
#align mellin_const_smul mellin_const_smul
@@ -186,7 +186,7 @@ theorem hasMellin_sub {f g : β β E} {s : β} (hf : MellinConvergent f s)
end Defs
-variable {E : Type _} [NormedAddCommGroup E]
+variable {E : Type*} [NormedAddCommGroup E]
section MellinConvergent
@@ -2,16 +2,13 @@
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.mellin_transform
-! leanprover-community/mathlib commit 917c3c072e487b3cccdbfeff17e75b40e45f66cb
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.SpecialFunctions.ImproperIntegrals
import Mathlib.Analysis.Calculus.ParametricIntegral
import Mathlib.MeasureTheory.Measure.Haar.NormedSpace
+#align_import analysis.mellin_transform from "leanprover-community/mathlib"@"917c3c072e487b3cccdbfeff17e75b40e45f66cb"
+
/-! # The Mellin transform
We define the Mellin transform of a locally integrable function on `Ioi 0`, and show it is
@@ -127,7 +127,7 @@ theorem mellin_div_const (f : β β β) (s a : β) : mellin (fun t => f t /
#align mellin_div_const mellin_div_const
theorem mellin_comp_rpow (f : β β E) (s : β) {a : β} (ha : a β 0) :
- mellin (fun t => f (t ^ a)) s = (|a|)β»ΒΉ β’ mellin f (s / a) := by
+ mellin (fun t => f (t ^ a)) s = |a|β»ΒΉ β’ mellin f (s / a) := by
-- note: this is also true for a = 0 (both sides are zero), but this is mathematically
-- uninteresting and rather time-consuming to check
simp_rw [mellin]
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