Skip to content

Commit f23e0ba

Browse files
Merge master into nightly-testing
2 parents 2ec0697 + 0d83798 commit f23e0ba

File tree

7 files changed

+40
-39
lines changed

7 files changed

+40
-39
lines changed

Mathlib/Algebra/Module/NatInt.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ variable {R S M M₂ : Type*}
3535

3636
section AddCommMonoid
3737

38-
variable [Semiring R] [AddCommMonoid M] [Module R M] (r s : R) (x : M)
38+
variable [AddCommMonoid M]
3939

4040
instance AddCommMonoid.toNatModule : Module ℕ M where
4141
one_smul := one_nsmul
@@ -49,7 +49,7 @@ end AddCommMonoid
4949

5050
section AddCommGroup
5151

52-
variable (R M) [Semiring R] [AddCommGroup M]
52+
variable (M) [AddCommGroup M]
5353

5454
instance AddCommGroup.toIntModule : Module ℤ M where
5555
one_smul := one_zsmul

Mathlib/Analysis/Convex/Combination.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ theorem Finset.centerMass_filter_ne_zero [∀ i, Decidable (w i ≠ 0)] :
127127

128128
namespace Finset
129129

130-
variable [LinearOrder R] [IsStrictOrderedRing R] [IsOrderedAddMonoid α] [PosSMulMono R α]
130+
variable [LinearOrder R] [IsOrderedAddMonoid α] [PosSMulMono R α]
131131

132132
theorem centerMass_le_sup {s : Finset ι} {f : ι → α} {w : ι → R} (hw₀ : ∀ i ∈ s, 0 ≤ w i)
133133
(hw₁ : 0 < ∑ i ∈ s, w i) :

Mathlib/Analysis/InnerProductSpace/Laplacian.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ The Laplacian equals the Laplacian with respect to `Set.univ`.
144144
-/
145145
@[simp]
146146
theorem laplacianWithin_univ :
147-
Δ[(Set.univ: Set E)] f = Δ f := by
147+
Δ[(Set.univ : Set E)] f = Δ f := by
148148
ext x
149149
simp [laplacian, tensorIteratedFDerivTwo, bilinearIteratedFDerivTwo,
150150
laplacianWithin, tensorIteratedFDerivWithinTwo, bilinearIteratedFDerivWithinTwo]
@@ -274,7 +274,7 @@ theorem _root_.ContDiffAt.laplacian_add (h₁ : ContDiffAt ℝ 2 f₁ x) (h₂ :
274274
/-- The Laplacian commutes with addition. -/
275275
theorem _root_.ContDiffAt.laplacianWithin_add_nhdsWithin (h₁ : ContDiffWithinAt ℝ 2 f₁ s x)
276276
(h₂ : ContDiffWithinAt ℝ 2 f₂ s x) (hs : UniqueDiffOn ℝ s) (hx : x ∈ s) :
277-
Δ[s] (f₁ + f₂) =ᶠ[𝓝[s] x] (Δ[s] f₁) + Δ[s] f₂:= by
277+
Δ[s] (f₁ + f₂) =ᶠ[𝓝[s] x] (Δ[s] f₁) + Δ[s] f₂ := by
278278
nth_rw 1 [← s.insert_eq_of_mem hx]
279279
filter_upwards [h₁.eventually (by simp), h₂.eventually (by simp),
280280
eventually_mem_nhdsWithin] with y h₁y h₂y h₃y

Mathlib/Analysis/Seminorm.lean

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,9 +1190,9 @@ If there is a scalar `c` with `‖c‖>1`, then any `x` such that `p x ≠ 0` ca
11901190
moved by scalar multiplication to any `p`-shell of width `‖c‖`. Also recap information on the
11911191
value of `p` on the rescaling element that shows up in applications. -/
11921192
lemma rescale_to_shell_zpow (p : Seminorm 𝕜 E) {c : 𝕜} (hc : 1 < ‖c‖) {ε : ℝ}
1193-
(εpos : 0 < ε) {x : E} (hx : p x ≠ 0) : ∃ n : ℤ, c^n ≠ 0
1194-
p (c^n • x) < ε ∧ (ε / ‖c‖ ≤ p (c^n • x)) ∧ (‖c^n‖⁻¹ ≤ ε⁻¹ * ‖c‖ * p x) := by
1195-
have xεpos : 0 < (p x)/ε := by positivity
1193+
(εpos : 0 < ε) {x : E} (hx : p x ≠ 0) : ∃ n : ℤ, c ^ n ≠ 0
1194+
p (c ^ n • x) < ε ∧ (ε / ‖c‖ ≤ p (c ^ n • x)) ∧ (‖c ^ n‖⁻¹ ≤ ε⁻¹ * ‖c‖ * p x) := by
1195+
have xεpos : 0 < (p x) / ε := by positivity
11961196
rcases exists_mem_Ico_zpow xεpos hc with ⟨n, hn⟩
11971197
have cpos : 0 < ‖c‖ := by positivity
11981198
have cnpos : 0 < ‖c^(n + 1)‖ := by rw [norm_zpow]; exact xεpos.trans hn.2
@@ -1219,7 +1219,7 @@ moved by scalar multiplication to any `p`-shell of width `‖c‖`. Also recap i
12191219
value of `p` on the rescaling element that shows up in applications. -/
12201220
lemma rescale_to_shell (p : Seminorm 𝕜 E) {c : 𝕜} (hc : 1 < ‖c‖) {ε : ℝ} (εpos : 0 < ε) {x : E}
12211221
(hx : p x ≠ 0) :
1222-
∃ d : 𝕜, d ≠ 0 ∧ p (d • x) < ε ∧ (ε/‖c‖ ≤ p (d • x)) ∧ (‖d‖⁻¹ ≤ ε⁻¹ * ‖c‖ * p x) :=
1222+
∃ d : 𝕜, d ≠ 0 ∧ p (d • x) < ε ∧ (ε / ‖c‖ ≤ p (d • x)) ∧ (‖d‖⁻¹ ≤ ε⁻¹ * ‖c‖ * p x) :=
12231223
let ⟨_, hn⟩ := p.rescale_to_shell_zpow hc εpos hx; ⟨_, hn⟩
12241224

12251225
/-- Let `p` and `q` be two seminorms on a vector space over a `NontriviallyNormedField`.
@@ -1329,28 +1329,30 @@ moved by scalar multiplication to any shell of width `‖c‖`. Also recap infor
13291329
the rescaling element that shows up in applications. -/
13301330
lemma rescale_to_shell_semi_normed_zpow {c : 𝕜} (hc : 1 < ‖c‖) {ε : ℝ} (εpos : 0 < ε) {x : E}
13311331
(hx : ‖x‖ ≠ 0) :
1332-
∃ n : ℤ, c^n ≠ 0 ∧ ‖c^n • x‖ < ε ∧ (ε / ‖c‖ ≤ ‖c^n • x‖) ∧ (‖c^n‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
1332+
∃ n : ℤ, c ^ n ≠ 0 ∧ ‖c ^ n • x‖ < ε ∧ (ε / ‖c‖ ≤ ‖c ^ n • x‖) ∧
1333+
(‖c ^ n‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
13331334
(normSeminorm 𝕜 E).rescale_to_shell_zpow hc εpos hx
13341335

13351336
/-- If there is a scalar `c` with `‖c‖>1`, then any element with nonzero norm can be
13361337
moved by scalar multiplication to any shell of width `‖c‖`. Also recap information on the norm of
13371338
the rescaling element that shows up in applications. -/
13381339
lemma rescale_to_shell_semi_normed {c : 𝕜} (hc : 1 < ‖c‖) {ε : ℝ} (εpos : 0 < ε)
13391340
{x : E} (hx : ‖x‖ ≠ 0) :
1340-
∃ d : 𝕜, d ≠ 0 ∧ ‖d • x‖ < ε ∧ (ε/‖c‖ ≤ ‖d • x‖) ∧ (‖d‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
1341+
∃ d : 𝕜, d ≠ 0 ∧ ‖d • x‖ < ε ∧ (ε / ‖c‖ ≤ ‖d • x‖) ∧ (‖d‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
13411342
(normSeminorm 𝕜 E).rescale_to_shell hc εpos hx
13421343

13431344
lemma rescale_to_shell_zpow [NormedAddCommGroup F] [NormedSpace 𝕜 F] {c : 𝕜} (hc : 1 < ‖c‖)
13441345
{ε : ℝ} (εpos : 0 < ε) {x : F} (hx : x ≠ 0) :
1345-
∃ n : ℤ, c^n ≠ 0 ∧ ‖c^n • x‖ < ε ∧ (ε / ‖c‖ ≤ ‖c^n • x‖) ∧ (‖c^n‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
1346+
∃ n : ℤ, c ^ n ≠ 0 ∧ ‖c ^ n • x‖ < ε ∧ (ε / ‖c‖ ≤ ‖c ^ n • x‖) ∧
1347+
(‖c ^ n‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
13461348
rescale_to_shell_semi_normed_zpow hc εpos (norm_ne_zero_iff.mpr hx)
13471349

13481350
/-- If there is a scalar `c` with `‖c‖>1`, then any element can be moved by scalar multiplication to
13491351
any shell of width `‖c‖`. Also recap information on the norm of the rescaling element that shows
13501352
up in applications. -/
13511353
lemma rescale_to_shell [NormedAddCommGroup F] [NormedSpace 𝕜 F] {c : 𝕜} (hc : 1 < ‖c‖)
13521354
{ε : ℝ} (εpos : 0 < ε) {x : F} (hx : x ≠ 0) :
1353-
∃ d : 𝕜, d ≠ 0 ∧ ‖d • x‖ < ε ∧ (ε/‖c‖ ≤ ‖d • x‖) ∧ (‖d‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
1355+
∃ d : 𝕜, d ≠ 0 ∧ ‖d • x‖ < ε ∧ (ε / ‖c‖ ≤ ‖d • x‖) ∧ (‖d‖⁻¹ ≤ ε⁻¹ * ‖c‖ * ‖x‖) :=
13541356
rescale_to_shell_semi_normed hc εpos (norm_ne_zero_iff.mpr hx)
13551357

13561358
end normSeminorm

Mathlib/Analysis/SpecialFunctions/Gaussian/FourierTransform.lean

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ theorem verticalIntegral_norm_le (hb : 0 < b.re) (c : ℝ) {T : ℝ} (hT : 0 ≤
7575
exp (-(b.re * T ^ 2 - (2 : ℝ) * |b.im| * |c| * T - b.re * c ^ 2)) := by
7676
intro T hT c y hy
7777
rw [norm_cexp_neg_mul_sq_add_mul_I b]
78-
gcongr exp (- (_ - ?_ * _ - _ * ?_))
78+
gcongr exp (-(_ - ?_ * _ - _ * ?_))
7979
· (conv_lhs => rw [mul_assoc]); (conv_rhs => rw [mul_assoc])
8080
gcongr _ * ?_
8181
refine (le_abs_self _).trans ?_
@@ -177,7 +177,8 @@ theorem integral_cexp_neg_mul_sq_add_real_mul_I (hb : 0 < b.re) (c : ℝ) :
177177
tendsto_id
178178

179179
theorem _root_.integral_cexp_quadratic (hb : b.re < 0) (c d : ℂ) :
180-
∫ x : ℝ, cexp (b * x ^ 2 + c * x + d) = (π / -b) ^ (1 / 2 : ℂ) * cexp (d - c^2 / (4 * b)) := by
180+
∫ x : ℝ,
181+
cexp (b * x ^ 2 + c * x + d) = (π / -b) ^ (1 / 2 : ℂ) * cexp (d - c ^ 2 / (4 * b)) := by
181182
have hb' : b ≠ 0 := by contrapose! hb; rw [hb, zero_re]
182183
have h (x : ℝ) : cexp (b * x ^ 2 + c * x + d) =
183184
cexp (- -b * (x + c / (2 * b)) ^ 2) * cexp (d - c ^ 2 / (4 * b)) := by
@@ -242,20 +243,20 @@ variable {V : Type*} [NormedAddCommGroup V] [InnerProductSpace ℝ V] [FiniteDim
242243

243244
theorem integrable_cexp_neg_sum_mul_add {ι : Type*} [Fintype ι] {b : ι → ℂ}
244245
(hb : ∀ i, 0 < (b i).re) (c : ι → ℂ) :
245-
Integrable (fun (v : ι → ℝ) ↦ cexp (- ∑ i, b i * (v i : ℂ) ^ 2 + ∑ i, c i * v i)) := by
246+
Integrable (fun (v : ι → ℝ) ↦ cexp (-∑ i, b i * (v i : ℂ) ^ 2 + ∑ i, c i * v i)) := by
246247
simp_rw [← Finset.sum_neg_distrib, ← Finset.sum_add_distrib, Complex.exp_sum, ← neg_mul]
247-
apply Integrable.fintype_prod (f := fun i (v : ℝ) ↦ cexp (-b i * v^2 + c i * v)) (fun i ↦ ?_)
248+
apply Integrable.fintype_prod (f := fun i (v : ℝ) ↦ cexp (-b i * v ^ 2 + c i * v)) (fun i ↦ ?_)
248249
convert integrable_cexp_quadratic (hb i) (c i) 0 using 3 with x
249250
simp only [add_zero]
250251

251252
theorem integrable_cexp_neg_mul_sum_add {ι : Type*} [Fintype ι] (hb : 0 < b.re) (c : ι → ℂ) :
252-
Integrable (fun (v : ι → ℝ) ↦ cexp (- b * ∑ i, (v i : ℂ) ^ 2 + ∑ i, c i * v i)) := by
253+
Integrable (fun (v : ι → ℝ) ↦ cexp (-b * ∑ i, (v i : ℂ) ^ 2 + ∑ i, c i * v i)) := by
253254
simp_rw [neg_mul, Finset.mul_sum]
254255
exact integrable_cexp_neg_sum_mul_add (fun _ ↦ hb) c
255256

256257
theorem integrable_cexp_neg_mul_sq_norm_add_of_euclideanSpace
257258
{ι : Type*} [Fintype ι] (hb : 0 < b.re) (c : ℂ) (w : EuclideanSpace ℝ ι) :
258-
Integrable (fun (v : EuclideanSpace ℝ ι) ↦ cexp (- b * ‖v‖^2 + c * ⟪w, v⟫)) := by
259+
Integrable (fun (v : EuclideanSpace ℝ ι) ↦ cexp (-b * ‖v‖ ^ 2 + c * ⟪w, v⟫)) := by
259260
have := EuclideanSpace.volume_preserving_measurableEquiv ι
260261
rw [← MeasurePreserving.integrable_comp_emb this.symm (MeasurableEquiv.measurableEmbedding _)]
261262
simp only [neg_mul, Function.comp_def]
@@ -272,7 +273,7 @@ theorem integrable_cexp_neg_mul_sq_norm_add_of_euclideanSpace
272273
/-- In a real inner product space, the complex exponential of minus the square of the norm plus
273274
a scalar product is integrable. Useful when discussing the Fourier transform of a Gaussian. -/
274275
theorem integrable_cexp_neg_mul_sq_norm_add (hb : 0 < b.re) (c : ℂ) (w : V) :
275-
Integrable (fun (v : V) ↦ cexp (-b * ‖v‖^2 + c * ⟪w, v⟫)) := by
276+
Integrable (fun (v : V) ↦ cexp (-b * ‖v‖ ^ 2 + c * ⟪w, v⟫)) := by
276277
let e := (stdOrthonormalBasis ℝ V).repr.symm
277278
rw [← e.measurePreserving.integrable_comp_emb e.toHomeomorph.measurableEmbedding]
278279
convert integrable_cexp_neg_mul_sq_norm_add_of_euclideanSpace
@@ -283,7 +284,7 @@ theorem integrable_cexp_neg_mul_sq_norm_add (hb : 0 < b.re) (c : ℂ) (w : V) :
283284

284285
theorem integral_cexp_neg_sum_mul_add {ι : Type*} [Fintype ι] {b : ι → ℂ}
285286
(hb : ∀ i, 0 < (b i).re) (c : ι → ℂ) :
286-
∫ v : ι → ℝ, cexp (- ∑ i, b i * (v i : ℂ) ^ 2 + ∑ i, c i * v i)
287+
∫ v : ι → ℝ, cexp (-∑ i, b i * (v i : ℂ) ^ 2 + ∑ i, c i * v i)
287288
= ∏ i, (π / b i) ^ (1 / 2 : ℂ) * cexp (c i ^ 2 / (4 * b i)) := by
288289
simp_rw [← Finset.sum_neg_distrib, ← Finset.sum_add_distrib, Complex.exp_sum, ← neg_mul]
289290
rw [integral_fintype_prod_volume_eq_prod (f := fun i (v : ℝ) ↦ cexp (-b i * v ^ 2 + c i * v))]
@@ -292,16 +293,16 @@ theorem integral_cexp_neg_sum_mul_add {ι : Type*} [Fintype ι] {b : ι → ℂ}
292293
convert integral_cexp_quadratic this (c i) 0 using 1 <;> simp [div_neg]
293294

294295
theorem integral_cexp_neg_mul_sum_add {ι : Type*} [Fintype ι] (hb : 0 < b.re) (c : ι → ℂ) :
295-
∫ v : ι → ℝ, cexp (- b * ∑ i, (v i : ℂ) ^ 2 + ∑ i, c i * v i)
296+
∫ v : ι → ℝ, cexp (-b * ∑ i, (v i : ℂ) ^ 2 + ∑ i, c i * v i)
296297
= (π / b) ^ (Fintype.card ι / 2 : ℂ) * cexp ((∑ i, c i ^ 2) / (4 * b)) := by
297298
simp_rw [neg_mul, Finset.mul_sum, integral_cexp_neg_sum_mul_add (fun _ ↦ hb) c, one_div,
298299
Finset.prod_mul_distrib, Finset.prod_const, ← cpow_nat_mul, ← Complex.exp_sum, Fintype.card,
299300
Finset.sum_div, div_eq_mul_inv]
300301

301302
theorem integral_cexp_neg_mul_sq_norm_add_of_euclideanSpace
302303
{ι : Type*} [Fintype ι] (hb : 0 < b.re) (c : ℂ) (w : EuclideanSpace ℝ ι) :
303-
∫ v : EuclideanSpace ℝ ι, cexp (- b * ‖v‖^2 + c * ⟪w, v⟫) =
304-
(π / b) ^ (Fintype.card ι / 2 : ℂ) * cexp (c ^ 2 * ‖w‖^2 / (4 * b)) := by
304+
∫ v : EuclideanSpace ℝ ι, cexp (-b * ‖v‖ ^ 2 + c * ⟪w, v⟫) =
305+
(π / b) ^ (Fintype.card ι / 2 : ℂ) * cexp (c ^ 2 * ‖w‖ ^ 2 / (4 * b)) := by
305306
have := (EuclideanSpace.volume_preserving_measurableEquiv ι).symm
306307
rw [← this.integral_comp (MeasurableEquiv.measurableEmbedding _)]
307308
simp only [neg_mul]
@@ -322,19 +323,19 @@ theorem integral_cexp_neg_mul_sq_norm_add_of_euclideanSpace
322323

323324
theorem integral_cexp_neg_mul_sq_norm_add
324325
(hb : 0 < b.re) (c : ℂ) (w : V) :
325-
∫ v : V, cexp (- b * ‖v‖^2 + c * ⟪w, v⟫) =
326-
(π / b) ^ (Module.finrank ℝ V / 2 : ℂ) * cexp (c ^ 2 * ‖w‖^2 / (4 * b)) := by
326+
∫ v : V, cexp (-b * ‖v‖ ^ 2 + c * ⟪w, v⟫) =
327+
(π / b) ^ (Module.finrank ℝ V / 2 : ℂ) * cexp (c ^ 2 * ‖w‖ ^ 2 / (4 * b)) := by
327328
let e := (stdOrthonormalBasis ℝ V).repr.symm
328329
rw [← e.measurePreserving.integral_comp e.toHomeomorph.measurableEmbedding]
329330
convert integral_cexp_neg_mul_sq_norm_add_of_euclideanSpace
330331
hb c (e.symm w) <;> simp [LinearIsometryEquiv.inner_map_eq_flip]
331332

332333
theorem integral_cexp_neg_mul_sq_norm (hb : 0 < b.re) :
333-
∫ v : V, cexp (- b * ‖v‖^2) = (π / b) ^ (Module.finrank ℝ V / 2 : ℂ) := by
334+
∫ v : V, cexp (-b * ‖v‖ ^ 2) = (π / b) ^ (Module.finrank ℝ V / 2 : ℂ) := by
334335
simpa using integral_cexp_neg_mul_sq_norm_add hb 0 (0 : V)
335336

336337
theorem integral_rexp_neg_mul_sq_norm {b : ℝ} (hb : 0 < b) :
337-
∫ v : V, rexp (- b * ‖v‖^2) = (π / b) ^ (Module.finrank ℝ V / 2 : ℝ) := by
338+
∫ v : V, rexp (-b * ‖v‖ ^ 2) = (π / b) ^ (Module.finrank ℝ V / 2 : ℝ) := by
338339
rw [← ofReal_inj]
339340
convert integral_cexp_neg_mul_sq_norm (show 0 < (b : ℂ).re from hb) (V := V)
340341
· change ofRealLI (∫ (v : V), rexp (-b * ‖v‖ ^ 2)) = ∫ (v : V), cexp (-↑b * ↑‖v‖ ^ 2)
@@ -344,7 +345,7 @@ theorem integral_rexp_neg_mul_sq_norm {b : ℝ} (hb : 0 < b) :
344345
simp
345346

346347
theorem _root_.fourierIntegral_gaussian_innerProductSpace' (hb : 0 < b.re) (x w : V) :
347-
𝓕 (fun v ↦ cexp (- b * ‖v‖^2 + 2 * π * Complex.I * ⟪x, v⟫)) w =
348+
𝓕 (fun v ↦ cexp (-b * ‖v‖ ^ 2 + 2 * π * Complex.I * ⟪x, v⟫)) w =
348349
(π / b) ^ (Module.finrank ℝ V / 2 : ℂ) * cexp (-π ^ 2 * ‖x - w‖ ^ 2 / b) := by
349350
simp only [neg_mul, fourierIntegral_eq', ofReal_neg, ofReal_mul, ofReal_ofNat,
350351
smul_eq_mul, ← Complex.exp_add, real_inner_comm w]
@@ -357,8 +358,8 @@ theorem _root_.fourierIntegral_gaussian_innerProductSpace' (hb : 0 < b.re) (x w
357358
ring
358359

359360
theorem _root_.fourierIntegral_gaussian_innerProductSpace (hb : 0 < b.re) (w : V) :
360-
𝓕 (fun v ↦ cexp (- b * ‖v‖^2)) w =
361-
(π / b) ^ (Module.finrank ℝ V / 2 : ℂ) * cexp (-π ^ 2 * ‖w‖^2 / b) := by
361+
𝓕 (fun v ↦ cexp (-b * ‖v‖ ^ 2)) w =
362+
(π / b) ^ (Module.finrank ℝ V / 2 : ℂ) * cexp (-π ^ 2 * ‖w‖ ^ 2 / b) := by
362363
simpa using fourierIntegral_gaussian_innerProductSpace' hb 0 w
363364

364365
end InnerProductSpace

Mathlib/Analysis/SpecialFunctions/Log/PosLog.lean

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ theorem monotoneOn_posLog : MonotoneOn log⁺ (Set.Ici 0) := by
9191
simp only [this, and_true, ge_iff_le]
9292
linarith
9393

94+
@[gcongr]
95+
lemma posLog_le_posLog {x y : ℝ} (hx : 0 ≤ x) (hxy : x ≤ y) : log⁺ x ≤ log⁺ y :=
96+
monotoneOn_posLog hx (hx.trans hxy) hxy
97+
9498
/-!
9599
## Estimates for Products
96100
-/
@@ -169,12 +173,6 @@ monotonicity of `log⁺` and the triangle inequality.
169173
-/
170174
lemma posLog_norm_add_le {E : Type*} [NormedAddCommGroup E] (a b : E) :
171175
log⁺ ‖a + b‖ ≤ log⁺ ‖a‖ + log⁺ ‖b‖ + log 2 := by
172-
calc log⁺ ‖a + b‖
173-
_ ≤ log⁺ (‖a‖ + ‖b‖) := by
174-
apply monotoneOn_posLog _ _ (norm_add_le a b)
175-
<;> simp [add_nonneg (norm_nonneg a) (norm_nonneg b)]
176-
_ ≤ log⁺ ‖a‖ + log⁺ ‖b‖ + log 2 := by
177-
convert posLog_add using 1
178-
ring
176+
grw [norm_add_le, posLog_add, add_rotate]
179177

180178
end Real

lake-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
"type": "git",
5656
"subDir": null,
5757
"scope": "leanprover-community",
58-
"rev": "07d6ac02ebdf6ef77651c9e1750c179d0f609ee6",
58+
"rev": "85cc6389e0566786b2966da9512d1e8cf2402d96",
5959
"name": "Qq",
6060
"manifestFile": "lake-manifest.json",
6161
"inputRev": "nightly-testing",

0 commit comments

Comments
 (0)