analysis.mellin_transform ⟷ Mathlib.Analysis.MellinTransform

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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
 -/
 
Diff
@@ -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
 -/
Diff
@@ -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]
Diff
@@ -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"
 
Diff
@@ -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.
Diff
@@ -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
Diff
@@ -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.
 
Diff
@@ -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
 
Diff
@@ -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)
Diff
@@ -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
 
Diff
@@ -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) :=
Diff
@@ -48,7 +48,7 @@ open Real
 
 open Complex hiding exp log abs_of_nonneg
 
-open Topology
+open scoped Topology
 
 noncomputable section
 
Diff
@@ -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,
Diff
@@ -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
+
Diff
@@ -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) :=

Changes in mathlib4

mathlib3
mathlib4
chore: replace 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.

Diff
@@ -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,
feat: drop completeness assumptions in theorems involving integrals (#11840)

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.

Diff
@@ -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 :=
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11801)
Diff
@@ -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,
chore: Rename 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 | |

Diff
@@ -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
 
feat: relationship between Mellin transform/inverse and Fourier transform/inverse (#10944)

Co-authored-by: L Lllvvuu <git@llllvvuu.dev> Co-authored-by: L <git@llllvvuu.dev>

Diff
@@ -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
chore: move Mathlib to v4.7.0-rc1 (#11162)

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>

Diff
@@ -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 _ _)
chore(IntegralEqImproper): remove unnecessary abs (#11096)

Co-authored-by: L Lllvvuu <git@llllvvuu.dev>

Diff
@@ -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
 
chore: prepare Lean version bump with explicit simp (#10999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
 
chore: remove stream-of-consciousness uses of 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>

Diff
@@ -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 _)
refactor: Multiplicativise abs (#9553)

The current design for abs is flawed:

  • The Abs notation typeclass has exactly two instances: one for [Neg Ξ±] [Sup Ξ±], one for [Inv Ξ±] [Sup Ξ±]. This means that:
    • We can't write a meaningful hover for Abs.abs
    • Fields have two Abs instances!
  • We have the multiplicative definition but:
    • All the lemmas in Algebra.Order.Group.Abs are about the additive version.
    • The only lemmas about the multiplicative version are in 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>

Diff
@@ -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]
chore: Rename rpow_nonneg_of_nonneg to rpow_nonneg (#9518)

This better matches other lemma names.

From LeanAPAP

Diff
@@ -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
feat: non-integrability results of derivatives on [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.

Diff
@@ -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]
feat: golf using gcongr throughout the library (#8752)

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.

Diff
@@ -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 _)
chore: bump to v4.3.0-rc2 (#8366)

PR contents

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.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

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).

leanprover/lean4#2722

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}).

leanprover/lean4#2783

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:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[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>

Diff
@@ -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
chore: fix some cases in names (#7469)

And fix some names in comments where this revealed issues

Diff
@@ -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]
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
fix: precedence of ⁺, ⁻ and abs (#5619)
Diff
@@ -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]
feat: port Analysis.MellinTransform (#4932)

Dependencies 12 + 1106

1107 files ported (98.9%)
501234 lines ported (98.9%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file