mathlib documentation

analysis.calculus.tangent_cone

Tangent cone

In this file, we define two predicates unique_diff_within_at π•œ s x and unique_diff_on π•œ s ensuring that, if a function has two derivatives, then they have to coincide. As a direct definition of this fact (quantifying on all target types and all functions) would depend on universes, we use a more intrinsic definition: if all the possible tangent directions to the set s at the point x span a dense subset of the whole subset, it is easy to check that the derivative has to be unique.

Therefore, we introduce the set of all tangent directions, named tangent_cone_at, and express unique_diff_within_at and unique_diff_on in terms of it. One should however think of this definition as an implementation detail: the only reason to introduce the predicates unique_diff_within_at and unique_diff_on is to ensure the uniqueness of the derivative. This is why their names reflect their uses, and not how they are defined.

Implementation details

Note that this file is imported by fderiv.lean. Hence, derivatives are not defined yet. The property of uniqueness of the derivative is therefore proved in fderiv.lean, but based on the properties of the tangent cone we prove here.

def tangent_cone_at (π•œ : Type u_1) [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] :
set E β†’ E β†’ set E

The set of all tangent directions to the set s at the point x.

Equations
def unique_diff_within_at (π•œ : Type u_1) [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] :
set E β†’ E β†’ Prop

A property ensuring that the tangent cone to s at x spans a dense subset of the whole space. The main role of this property is to ensure that the differential within s at x is unique, hence this name. The uniqueness it asserts is proved in unique_diff_within_at.eq in fderiv.lean. To avoid pathologies in dimension 0, we also require that x belongs to the closure of s (which is automatic when E is not 0-dimensional).

Equations
def unique_diff_on (π•œ : Type u_1) [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] :
set E β†’ Prop

A property ensuring that the tangent cone to s at any of its points spans a dense subset of the whole space. The main role of this property is to ensure that the differential along s is unique, hence this name. The uniqueness it asserts is proved in unique_diff_on.eq in fderiv.lean.

Equations
theorem tangent_cone_univ {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} :

theorem tangent_cone_mono {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
s βŠ† t β†’ tangent_cone_at π•œ s x βŠ† tangent_cone_at π•œ t x

theorem tangent_cone_at.lim_zero {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {y : E} {Ξ± : Type u_3} (l : filter Ξ±) {c : Ξ± β†’ π•œ} {d : Ξ± β†’ E} :
filter.tendsto (Ξ» (n : Ξ±), βˆ₯c nβˆ₯) l filter.at_top β†’ filter.tendsto (Ξ» (n : Ξ±), c n β€’ d n) l (𝓝 y) β†’ filter.tendsto d l (𝓝 0)

Auxiliary lemma ensuring that, under the assumptions defining the tangent cone, the sequence d tends to 0 at infinity.

theorem tangent_cone_mono_nhds {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
𝓝[s] x ≀ 𝓝[t] x β†’ tangent_cone_at π•œ s x βŠ† tangent_cone_at π•œ t x

theorem tangent_cone_congr {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
𝓝[s] x = 𝓝[t] x β†’ tangent_cone_at π•œ s x = tangent_cone_at π•œ t x

Tangent cone of s at x depends only on 𝓝[s] x.

theorem tangent_cone_inter_nhds {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
t ∈ 𝓝 x β†’ tangent_cone_at π•œ (s ∩ t) x = tangent_cone_at π•œ s x

Intersecting with a neighborhood of the point does not change the tangent cone.

theorem subset_tangent_cone_prod_left {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {F : Type u_3} [normed_group F] [normed_space π•œ F] {x : E} {s : set E} {t : set F} {y : F} :
y ∈ closure t β†’ ⇑(linear_map.inl π•œ E F) '' tangent_cone_at π•œ s x βŠ† tangent_cone_at π•œ (s.prod t) (x, y)

The tangent cone of a product contains the tangent cone of its left factor.

theorem subset_tangent_cone_prod_right {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {F : Type u_3} [normed_group F] [normed_space π•œ F] {x : E} {s : set E} {t : set F} {y : F} :
x ∈ closure s β†’ ⇑(linear_map.inr π•œ E F) '' tangent_cone_at π•œ t y βŠ† tangent_cone_at π•œ (s.prod t) (x, y)

The tangent cone of a product contains the tangent cone of its right factor.

theorem mem_tangent_cone_of_segment_subset {G : Type u_4} [normed_group G] [normed_space ℝ G] {s : set G} {x y : G} :

If a subset of a real vector space contains a segment, then the direction of this segment belongs to the tangent cone at its endpoints.

Properties of unique_diff_within_at and unique_diff_on

This section is devoted to properties of the predicates unique_diff_within_at and unique_diff_on.

theorem unique_diff_on.unique_diff_within_at {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {s : set E} {x : E} :
unique_diff_on π•œ s β†’ x ∈ s β†’ unique_diff_within_at π•œ s x

theorem unique_diff_within_at_univ {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} :

theorem unique_diff_on_univ {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] :

theorem unique_diff_on_empty {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] :

theorem unique_diff_within_at.mono_nhds {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
unique_diff_within_at π•œ s x β†’ 𝓝[s] x ≀ 𝓝[t] x β†’ unique_diff_within_at π•œ t x

theorem unique_diff_within_at.mono {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
unique_diff_within_at π•œ s x β†’ s βŠ† t β†’ unique_diff_within_at π•œ t x

theorem unique_diff_within_at_congr {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
𝓝[s] x = 𝓝[t] x β†’ (unique_diff_within_at π•œ s x ↔ unique_diff_within_at π•œ t x)

theorem unique_diff_within_at_inter {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
t ∈ 𝓝 x β†’ (unique_diff_within_at π•œ (s ∩ t) x ↔ unique_diff_within_at π•œ s x)

theorem unique_diff_within_at.inter {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
unique_diff_within_at π•œ s x β†’ t ∈ 𝓝 x β†’ unique_diff_within_at π•œ (s ∩ t) x

theorem unique_diff_within_at_inter' {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
t ∈ 𝓝[s] x β†’ (unique_diff_within_at π•œ (s ∩ t) x ↔ unique_diff_within_at π•œ s x)

theorem unique_diff_within_at.inter' {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s t : set E} :
unique_diff_within_at π•œ s x β†’ t ∈ 𝓝[s] x β†’ unique_diff_within_at π•œ (s ∩ t) x

theorem is_open.unique_diff_within_at {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {x : E} {s : set E} :
is_open s β†’ x ∈ s β†’ unique_diff_within_at π•œ s x

theorem unique_diff_on.inter {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {s t : set E} :
unique_diff_on π•œ s β†’ is_open t β†’ unique_diff_on π•œ (s ∩ t)

theorem is_open.unique_diff_on {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {s : set E} :
is_open s β†’ unique_diff_on π•œ s

theorem unique_diff_within_at.prod {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {F : Type u_3} [normed_group F] [normed_space π•œ F] {x : E} {s : set E} {t : set F} {y : F} :
unique_diff_within_at π•œ s x β†’ unique_diff_within_at π•œ t y β†’ unique_diff_within_at π•œ (s.prod t) (x, y)

The product of two sets of unique differentiability at points x and y has unique differentiability at (x, y).

theorem unique_diff_on.prod {π•œ : Type u_1} [nondiscrete_normed_field π•œ] {E : Type u_2} [normed_group E] [normed_space π•œ E] {F : Type u_3} [normed_group F] [normed_space π•œ F] {s : set E} {t : set F} :
unique_diff_on π•œ s β†’ unique_diff_on π•œ t β†’ unique_diff_on π•œ (s.prod t)

The product of two sets of unique differentiability is a set of unique differentiability.

theorem unique_diff_on_convex {G : Type u_4} [normed_group G] [normed_space ℝ G] {s : set G} :

In a real vector space, a convex set with nonempty interior is a set of unique differentiability.

theorem unique_diff_on_Icc {a b : ℝ} :
a < b β†’ unique_diff_on ℝ (set.Icc a b)

The real interval [0, 1] is a set of unique differentiability.