Аналіз I, Глава 10.1
I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.
Main constructions and results of this section:
-
API for Mathlib's
HasDerivWithinAt
,derivWithin
, andDifferentiableWithinAt
.
Note that the Mathlib conventions differ slightly from that in the text, in that
differentiability is defined even at points that are not limit points of the domain;
derivatives in such cases may not be unique, but derivWithin
still selects one such
derivative in such cases (or 0
, if no derivative exists).
namespace Chapter10
Визначення 10.1.1 (Differentiability at a point). For the Mathlib notion HasDerivWithinAt
, the
hypothesis that x₀
is a limit point is not needed.
theorem _root_.HasDerivWithinAt.iff (X: Set ℝ) (x₀ : ℝ) (f: ℝ → ℝ)
(L:ℝ) :
HasDerivWithinAt f L X x₀ ↔ Filter.Tendsto (fun x ↦ (f x - f x₀) / (x - x₀))
(nhds x₀ ⊓ Filter.principal (X \ {x₀})) (nhds L) := X:Set ℝx₀:ℝf:ℝ → ℝL:ℝ⊢ HasDerivWithinAt f L X x₀ ↔
Filter.Tendsto (fun x => (f x - f x₀) / (x - x₀)) (nhds x₀ ⊓ Filter.principal (X \ {x₀})) (nhds L)
All goals completed! 🐙
theorem _root_.DifferentiableWithinAt.iff (X: Set ℝ) (x₀ : ℝ) (f: ℝ → ℝ) :
DifferentiableWithinAt ℝ f X x₀ ↔ ∃ L, HasDerivWithinAt f L X x₀ := X:Set ℝx₀:ℝf:ℝ → ℝ⊢ DifferentiableWithinAt ℝ f X x₀ ↔ ∃ L, HasDerivWithinAt f L X x₀
X:Set ℝx₀:ℝf:ℝ → ℝ⊢ DifferentiableWithinAt ℝ f X x₀ → ∃ L, HasDerivWithinAt f L X x₀X:Set ℝx₀:ℝf:ℝ → ℝ⊢ (∃ L, HasDerivWithinAt f L X x₀) → DifferentiableWithinAt ℝ f X x₀
X:Set ℝx₀:ℝf:ℝ → ℝ⊢ DifferentiableWithinAt ℝ f X x₀ → ∃ L, HasDerivWithinAt f L X x₀ X:Set ℝx₀:ℝf:ℝ → ℝh:DifferentiableWithinAt ℝ f X x₀⊢ ∃ L, HasDerivWithinAt f L X x₀
X:Set ℝx₀:ℝf:ℝ → ℝh:DifferentiableWithinAt ℝ f X x₀⊢ HasDerivWithinAt f (derivWithin f X x₀) X x₀
All goals completed! 🐙
X:Set ℝx₀:ℝf:ℝ → ℝL:ℝh:HasDerivWithinAt f L X x₀⊢ DifferentiableWithinAt ℝ f X x₀
All goals completed! 🐙
theorem _root_.DifferentiableWithinAt.of_hasDeriv {X: Set ℝ} {x₀ : ℝ} {f: ℝ → ℝ} {L:ℝ}
(hL: HasDerivWithinAt f L X x₀) : DifferentiableWithinAt ℝ f X x₀ := X:Set ℝx₀:ℝf:ℝ → ℝL:ℝhL:HasDerivWithinAt f L X x₀⊢ DifferentiableWithinAt ℝ f X x₀
X:Set ℝx₀:ℝf:ℝ → ℝL:ℝhL:HasDerivWithinAt f L X x₀⊢ ∃ L, HasDerivWithinAt f L X x₀; All goals completed! 🐙
theorem derivative_unique {X: Set ℝ} {x₀ : ℝ}
(hx₀: ClusterPt x₀ (Filter.principal (X \ {x₀}))) {f: ℝ → ℝ} {L L':ℝ}
(hL: HasDerivWithinAt f L X x₀) (hL': HasDerivWithinAt f L' X x₀) :
L = L' := X:Set ℝx₀:ℝhx₀:ClusterPt x₀ (Filter.principal (X \ {x₀}))f:ℝ → ℝL:ℝL':ℝhL:HasDerivWithinAt f L X x₀hL':HasDerivWithinAt f L' X x₀⊢ L = L'
X:Set ℝx₀:ℝhx₀:ClusterPt x₀ (Filter.principal (X \ {x₀}))f:ℝ → ℝL:ℝL':ℝhL:Filter.Tendsto (fun x => (f x - f x₀) / (x - x₀)) (nhds x₀ ⊓ Filter.principal (X \ {x₀})) (nhds L)hL':Filter.Tendsto (fun x => (f x - f x₀) / (x - x₀)) (nhds x₀ ⊓ Filter.principal (X \ {x₀})) (nhds L')⊢ L = L'
X:Set ℝx₀:ℝhx₀:(nhds x₀ ⊓ Filter.principal (X \ {x₀})).NeBotf:ℝ → ℝL:ℝL':ℝhL:Filter.Tendsto (fun x => (f x - f x₀) / (x - x₀)) (nhds x₀ ⊓ Filter.principal (X \ {x₀})) (nhds L)hL':Filter.Tendsto (fun x => (f x - f x₀) / (x - x₀)) (nhds x₀ ⊓ Filter.principal (X \ {x₀})) (nhds L')⊢ L = L'
All goals completed! 🐙
#check DifferentiableWithinAt.hasDerivWithinAt
DifferentiableWithinAt.hasDerivWithinAt.{u, v} {𝕜 : Type u} [NontriviallyNormedField 𝕜] {F : Type v} [NormedAddCommGroup F] [NormedSpace 𝕜 F] {f : 𝕜 → F} {x : 𝕜} {s : Set 𝕜} (h : DifferentiableWithinAt 𝕜 f s x) : HasDerivWithinAt f (derivWithin f s x) s x
theorem derivative_unique' (X: Set ℝ) {x₀ : ℝ}
(hx₀: ClusterPt x₀ (Filter.principal (X \ {x₀}))) {f: ℝ → ℝ} {L :ℝ}
(hL: HasDerivWithinAt f L X x₀)
(hdiff : DifferentiableWithinAt ℝ f X x₀):
L = derivWithin f X x₀ :=
derivative_unique hx₀ hL (DifferentiableWithinAt.hasDerivWithinAt hdiff)
Приклад 10.1.3
example (x₀:ℝ) : HasDerivWithinAt (fun x ↦ x^2) (2 * x₀) (Set.univ) x₀ := x₀:ℝ⊢ HasDerivWithinAt (fun x => x ^ 2) (2 * x₀) Set.univ x₀
All goals completed! 🐙
example (x₀:ℝ) : DifferentiableWithinAt ℝ (fun x ↦ x^2) (Set.univ) x₀ := x₀:ℝ⊢ DifferentiableWithinAt ℝ (fun x => x ^ 2) Set.univ x₀
All goals completed! 🐙
example (x₀:ℝ) : derivWithin (fun x ↦ x^2) (Set.univ) x₀ = 2 * x₀ := x₀:ℝ⊢ derivWithin (fun x => x ^ 2) Set.univ x₀ = 2 * x₀
All goals completed! 🐙
Remark 10.1.4
example (X: Set ℝ) (x₀ : ℝ) {f g: ℝ → ℝ} (hfg: f = g):
DifferentiableWithinAt ℝ f X x₀ ↔ DifferentiableWithinAt ℝ g X x₀ := X:Set ℝx₀:ℝf:ℝ → ℝg:ℝ → ℝhfg:f = g⊢ DifferentiableWithinAt ℝ f X x₀ ↔ DifferentiableWithinAt ℝ g X x₀ All goals completed! 🐙
example (X: Set ℝ) (x₀ : ℝ) {f g: ℝ → ℝ} (L:ℝ) (hfg: f = g):
HasDerivWithinAt f L X x₀ ↔ HasDerivWithinAt g L X x₀ := X:Set ℝx₀:ℝf:ℝ → ℝg:ℝ → ℝL:ℝhfg:f = g⊢ HasDerivWithinAt f L X x₀ ↔ HasDerivWithinAt g L X x₀ All goals completed! 🐙
example : ∃ (X: Set ℝ) (x₀ :ℝ) (f g: ℝ → ℝ) (L:ℝ) (hfg: f x₀ = g x₀),
HasDerivWithinAt f L X x₀ ∧ ¬ HasDerivWithinAt g L X x₀ := ⊢ ∃ X x₀ f g L, ∃ (_ : f x₀ = g x₀), HasDerivWithinAt f L X x₀ ∧ ¬HasDerivWithinAt g L X x₀
All goals completed! 🐙
example : Filter.Tendsto (fun x ↦ (f_10_1_6 x - f_10_1_6 0) / (x - 0))
(nhds 0 ⊓ Filter.principal (Set.Ioi 0)) (nhds 1) := ⊢ Filter.Tendsto (fun x => (f_10_1_6 x - f_10_1_6 0) / (x - 0)) (nhds 0 ⊓ Filter.principal (Set.Ioi 0)) (nhds 1)
All goals completed! 🐙
example : Filter.Tendsto (fun x ↦ (f_10_1_6 x - f_10_1_6 0) / (x - 0))
(nhds 0 ⊓ Filter.principal (Set.Iio 0)) (nhds (-1)) := ⊢ Filter.Tendsto (fun x => (f_10_1_6 x - f_10_1_6 0) / (x - 0)) (nhds 0 ⊓ Filter.principal (Set.Iio 0)) (nhds (-1))
All goals completed! 🐙
example : ¬ ∃ L, Filter.Tendsto (fun x ↦ (f_10_1_6 x - f_10_1_6 0) / (x - 0))
(nhds 0 ⊓ Filter.principal (Set.univ \ {0})) (nhds L) := ⊢ ¬∃ L,
Filter.Tendsto (fun x => (f_10_1_6 x - f_10_1_6 0) / (x - 0)) (nhds 0 ⊓ Filter.principal (Set.univ \ {0})) (nhds L) All goals completed! 🐙
example : ¬ DifferentiableWithinAt ℝ f_10_1_6 (Set.univ) 0 := ⊢ ¬DifferentiableWithinAt ℝ f_10_1_6 Set.univ 0
All goals completed! 🐙
example : DifferentiableWithinAt ℝ f_10_1_6 (Set.Ioi 0) 0 := ⊢ DifferentiableWithinAt ℝ f_10_1_6 (Set.Ioi 0) 0
All goals completed! 🐙
example : derivWithin f_10_1_6 (Set.Ioi 0) 0 = 1 := ⊢ derivWithin f_10_1_6 (Set.Ioi 0) 0 = 1
All goals completed! 🐙
example : DifferentiableWithinAt ℝ f_10_1_6 (Set.Iio 0) 0 := ⊢ DifferentiableWithinAt ℝ f_10_1_6 (Set.Iio 0) 0
All goals completed! 🐙
example : derivWithin f_10_1_6 (Set.Iio 0) 0 = -1 := ⊢ derivWithin f_10_1_6 (Set.Iio 0) 0 = -1
All goals completed! 🐙
Твердження 10.1.7 (Newton's approximation) / Вправа 10.1.2
theorem _root_.HasDerivWithinAt.iff_approx_linear (X: Set ℝ) (x₀ :ℝ) (f: ℝ → ℝ) (L:ℝ) :
HasDerivWithinAt f L X x₀ ↔
∀ ε > 0, ∃ δ > 0, ∀ x ∈ X, |x - x₀| < δ → |f x - f x₀ - L * (x - x₀)| ≤ ε * |x - x₀| := X:Set ℝx₀:ℝf:ℝ → ℝL:ℝ⊢ HasDerivWithinAt f L X x₀ ↔ ∀ ε > 0, ∃ δ > 0, ∀ x ∈ X, |x - x₀| < δ → |f x - f x₀ - L * (x - x₀)| ≤ ε * |x - x₀|
All goals completed! 🐙
Твердження 10.0.1 / Вправа 10.1.3
theorem _root_.ContinuousWithinAt.of_differentiableWithinAt {X: Set ℝ} {x₀ : ℝ} {f: ℝ → ℝ}
(h: DifferentiableWithinAt ℝ f X x₀) :
ContinuousWithinAt f X x₀ := X:Set ℝx₀:ℝf:ℝ → ℝh:DifferentiableWithinAt ℝ f X x₀⊢ ContinuousWithinAt f X x₀
All goals completed! 🐙
/-Definition 10.1.11 (Differentiability on a domain)-/
#check DifferentiableOn.eq_1
DifferentiableOn.eq_1.{u_1, u_2, u_3} (𝕜 : Type u_1) [NontriviallyNormedField 𝕜] {E : Type u_2} [AddCommGroup E] [Module 𝕜 E] [TopologicalSpace E] {F : Type u_3} [AddCommGroup F] [Module 𝕜 F] [TopologicalSpace F] (f : E → F) (s : Set E) : DifferentiableOn 𝕜 f s = ∀ x ∈ s, DifferentiableWithinAt 𝕜 f s x
Наслідок 10.1.12
theorem _root_.ContinuousOn.of_differentiableOn {X: Set ℝ} {f: ℝ → ℝ}
(h: DifferentiableOn ℝ f X) :
ContinuousOn f X := X:Set ℝf:ℝ → ℝh:DifferentiableOn ℝ f X⊢ ContinuousOn f X
X:Set ℝf:ℝ → ℝh:DifferentiableOn ℝ f Xx:ℝhx:x ∈ X⊢ ContinuousWithinAt f X x
X:Set ℝf:ℝ → ℝh:DifferentiableOn ℝ f Xx:ℝhx:x ∈ Xhdiff:DifferentiableWithinAt ℝ f X x⊢ ContinuousWithinAt f X x
All goals completed! 🐙
Теорема 10.1.13 (a) (Differential calculus) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_const (X: Set ℝ) (x₀ : ℝ) (c:ℝ) :
HasDerivWithinAt (fun x ↦ c) 0 X x₀ := X:Set ℝx₀:ℝc:ℝ⊢ HasDerivWithinAt (fun x => c) 0 X x₀ All goals completed! 🐙
Теорема 10.1.13 (b) (Differential calculus) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_id (X: Set ℝ) (x₀ : ℝ) :
HasDerivWithinAt (fun x ↦ x) 1 X x₀ := X:Set ℝx₀:ℝ⊢ HasDerivWithinAt (fun x => x) 1 X x₀ All goals completed! 🐙
Теорема 10.1.13 (c) (Sum rule) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_add {X: Set ℝ} {x₀ f'x₀ g'x₀: ℝ}
{f g: ℝ → ℝ} (hf: HasDerivWithinAt f f'x₀ X x₀) (hg: HasDerivWithinAt g g'x₀ X x₀) :
HasDerivWithinAt (f + g) (f'x₀ + g'x₀) X x₀ := X:Set ℝx₀:ℝf'x₀:ℝg'x₀:ℝf:ℝ → ℝg:ℝ → ℝhf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'x₀ X x₀⊢ HasDerivWithinAt (f + g) (f'x₀ + g'x₀) X x₀
All goals completed! 🐙
Теорема 10.1.13 (d) (Product rule) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_mul {X: Set ℝ} {x₀ f'x₀ g'x₀: ℝ}
{f g: ℝ → ℝ} (hf: HasDerivWithinAt f f'x₀ X x₀) (hg: HasDerivWithinAt g g'x₀ X x₀) :
HasDerivWithinAt (f * g) (f'x₀ * (g x₀) + (f x₀) * g'x₀) X x₀ := X:Set ℝx₀:ℝf'x₀:ℝg'x₀:ℝf:ℝ → ℝg:ℝ → ℝhf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'x₀ X x₀⊢ HasDerivWithinAt (f * g) (f'x₀ * g x₀ + f x₀ * g'x₀) X x₀
All goals completed! 🐙
Теорема 10.1.13 (e) (Differential calculus) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_smul {X: Set ℝ} {x₀ f'x₀: ℝ} (c:ℝ)
{f: ℝ → ℝ} (hf: HasDerivWithinAt f f'x₀ X x₀) :
HasDerivWithinAt (c • f) (c * f'x₀) X x₀ := X:Set ℝx₀:ℝf'x₀:ℝc:ℝf:ℝ → ℝhf:HasDerivWithinAt f f'x₀ X x₀⊢ HasDerivWithinAt (c • f) (c * f'x₀) X x₀
All goals completed! 🐙
Теорема 10.1.13 (f) (Difference rule) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_sub {X: Set ℝ} {x₀ f'x₀ g'x₀: ℝ}
{f g: ℝ → ℝ} (hf: HasDerivWithinAt f f'x₀ X x₀) (hg: HasDerivWithinAt g g'x₀ X x₀) :
HasDerivWithinAt (f - g) (f'x₀ - g'x₀) X x₀ := X:Set ℝx₀:ℝf'x₀:ℝg'x₀:ℝf:ℝ → ℝg:ℝ → ℝhf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'x₀ X x₀⊢ HasDerivWithinAt (f - g) (f'x₀ - g'x₀) X x₀
All goals completed! 🐙
Теорема 10.1.13 (g) (Differential calculus) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_inv {X: Set ℝ} {x₀ g'x₀: ℝ}
{g: ℝ → ℝ} (hgx₀ : g x₀ ≠ 0) (hg: HasDerivWithinAt g g'x₀ X x₀) :
HasDerivWithinAt (1/g) (-g'x₀ / (g x₀)^2) X x₀ := X:Set ℝx₀:ℝg'x₀:ℝg:ℝ → ℝhgx₀:g x₀ ≠ 0hg:HasDerivWithinAt g g'x₀ X x₀⊢ HasDerivWithinAt (1 / g) (-g'x₀ / g x₀ ^ 2) X x₀
All goals completed! 🐙
Теорема 10.1.13 (h) (Quotient rule) / Вправа 10.1.4
theorem _root_.HasDerivWithinAt.of_div {X: Set ℝ} {x₀ f'x₀ g'x₀: ℝ}
{f g: ℝ → ℝ} (hgx₀ : g x₀ ≠ 0) (hf: HasDerivWithinAt f f'x₀ X x₀)
(hg: HasDerivWithinAt g g'x₀ X x₀) :
HasDerivWithinAt (f / g) ((f'x₀ * (g x₀) - (f x₀) * g'x₀) / (g x₀)^2) X x₀ := X:Set ℝx₀:ℝf'x₀:ℝg'x₀:ℝf:ℝ → ℝg:ℝ → ℝhgx₀:g x₀ ≠ 0hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'x₀ X x₀⊢ HasDerivWithinAt (f / g) ((f'x₀ * g x₀ - f x₀ * g'x₀) / g x₀ ^ 2) X x₀
All goals completed! 🐙
example (x₀:ℝ) (hx₀: x₀ ≠ 1): HasDerivWithinAt (fun x ↦ (x-2)/(x-1)) (1 /(x₀-1)^2) (Set.univ \ {1}) x₀ := x₀:ℝhx₀:x₀ ≠ 1⊢ HasDerivWithinAt (fun x => (x - 2) / (x - 1)) (1 / (x₀ - 1) ^ 2) (Set.univ \ {1}) x₀
All goals completed! 🐙
Теорема 10.1.15 (Chain rule) / Вправа 10.1.7
theorem _root_.HasDerivWithinAt.of_comp {X Y: Set ℝ} {x₀ y₀ f'x₀ g'y₀: ℝ}
{f g: ℝ → ℝ} (hfx₀: f x₀ = y₀) (hfX : ∀ x ∈ X, f x ∈ Y)
(hf: HasDerivWithinAt f f'x₀ X x₀) (hg: HasDerivWithinAt g g'y₀ Y y₀) :
HasDerivWithinAt (g ∘ f) (g'y₀ * f'x₀) X x₀ := X:Set ℝY:Set ℝx₀:ℝy₀:ℝf'x₀:ℝg'y₀:ℝf:ℝ → ℝg:ℝ → ℝhfx₀:f x₀ = y₀hfX:∀ x ∈ X, f x ∈ Yhf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀⊢ HasDerivWithinAt (g ∘ f) (g'y₀ * f'x₀) X x₀
All goals completed! 🐙
Вправа 10.1.5
theorem _root_.HasDerivWithinAt.of_pow (n:ℕ) (x₀:ℝ) : HasDerivWithinAt (fun x ↦ x^n)
(n * x₀^((n:ℤ)-1)) (Set.univ) x₀ := n:ℕx₀:ℝ⊢ HasDerivWithinAt (fun x => x ^ n) (↑n * x₀ ^ (↑n - 1)) Set.univ x₀
All goals completed! 🐙
Вправа 10.1.6
theorem _root_.HasDerivWithinAt.of_zpow (n:ℤ) (x₀:ℝ) (hx₀: x₀ ≠ 0) :
HasDerivWithinAt (fun x ↦ x^n) (n * x₀^(n-1)) (Set.univ \ {0}) x₀ := n:ℤx₀:ℝhx₀:x₀ ≠ 0⊢ HasDerivWithinAt (fun x => x ^ n) (↑n * x₀ ^ (n - 1)) (Set.univ \ {0}) x₀
All goals completed! 🐙
end Chapter10