-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathAbsolutelyMonotone.lean
More file actions
83 lines (64 loc) · 3.05 KB
/
AbsolutelyMonotone.lean
File metadata and controls
83 lines (64 loc) · 3.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/-
Copyright (c) 2025 Michael R. Douglas. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Michael R. Douglas
-/
module
public import Mathlib.Analysis.Calculus.IteratedDeriv.Lemmas
/-!
# Absolutely Monotone Functions
A function `f : ℝ → ℝ` is absolutely monotone on a set `s` if it is smooth on `s` and all its
iterated derivatives within `s` are nonnegative on `s`.
## Main definitions
* `AbsolutelyMonotoneOn` — smooth on `s` with nonnegative iterated derivatives within `s`
## Main results
* Closure under `add`, `smul`, `mul`
## References
* [D. V. Widder, *The Laplace Transform*][widder1941]
-/
public section
open Set Filter
open scoped ENNReal NNReal Topology ContDiff
/-- A function `f : ℝ → ℝ` is absolutely monotone on a set `s` if it is smooth on `s` and all
iterated derivatives within `s` are nonnegative. -/
structure AbsolutelyMonotoneOn (f : ℝ → ℝ) (s : Set ℝ) : Prop where
contDiffOn : ContDiffOn ℝ ∞ f s
nonneg : ∀ n : ℕ, ∀ x ∈ s, 0 ≤ iteratedDerivWithin n f s x
namespace AbsolutelyMonotoneOn
/-- A globally smooth function all of whose iterated derivatives are nonnegative on a set `s`
satisfying `UniqueDiffOn` is absolutely monotone on `s`. Such sets `s` include open sets,
`Set.Ici`, and convex sets with nonempty interior. -/
theorem of_contDiff {f : ℝ → ℝ} {s : Set ℝ} (hs : UniqueDiffOn ℝ s)
(hf : ContDiff ℝ ∞ f) (h : ∀ n : ℕ, ∀ x ∈ s, 0 ≤ iteratedDeriv n f x) :
AbsolutelyMonotoneOn f s where
contDiffOn := hf.contDiffOn
nonneg n x hx := by
rw [iteratedDerivWithin_eq_iteratedDeriv hs (hf.contDiffAt.of_le (by exact_mod_cast le_top))
hx]
exact h n x hx
/-! ### Basic closure properties -/
theorem add {f g : ℝ → ℝ} {s : Set ℝ} (hs : UniqueDiffOn ℝ s)
(hf : AbsolutelyMonotoneOn f s) (hg : AbsolutelyMonotoneOn g s) :
AbsolutelyMonotoneOn (f + g) s where
contDiffOn := hf.contDiffOn.add hg.contDiffOn
nonneg n x hx := by
rw [iteratedDerivWithin_add hx hs ((hf.contDiffOn x hx).of_le (by exact_mod_cast le_top))
((hg.contDiffOn x hx).of_le (by exact_mod_cast le_top))]
exact add_nonneg (hf.nonneg n x hx) (hg.nonneg n x hx)
theorem smul {f : ℝ → ℝ} {s : Set ℝ} {c : ℝ}
(hf : AbsolutelyMonotoneOn f s) (hc : 0 ≤ c) :
AbsolutelyMonotoneOn (c • f) s where
contDiffOn := hf.contDiffOn.const_smul c
nonneg n x hx := by
rw [iteratedDerivWithin_const_smul_field c f]
exact smul_nonneg hc (hf.nonneg n x hx)
theorem mul {f g : ℝ → ℝ} {s : Set ℝ} (hs : UniqueDiffOn ℝ s)
(hf : AbsolutelyMonotoneOn f s) (hg : AbsolutelyMonotoneOn g s) :
AbsolutelyMonotoneOn (f * g) s where
contDiffOn := hf.contDiffOn.mul hg.contDiffOn
nonneg n x hx := by
rw [iteratedDerivWithin_mul hx hs ((hf.contDiffOn x hx).of_le (by exact_mod_cast le_top))
((hg.contDiffOn x hx).of_le (by exact_mod_cast le_top))]
exact Finset.sum_nonneg fun i _ =>
mul_nonneg (mul_nonneg (Nat.cast_nonneg _) (hf.nonneg i x hx)) (hg.nonneg (n - i) x hx)
end AbsolutelyMonotoneOn