# mathlibdocumentation

analysis.calculus.local_extr

# Local extrema of smooth functions #

## Main definitions #

In a real normed space E we define pos_tangent_cone_at (s : set E) (x : E). This would be the same as tangent_cone_at ℝ≥0 s x if we had a theory of normed semifields. This set is used in the proof of Fermat's Theorem (see below), and can be used to formalize Lagrange multipliers and/or Karush–Kuhn–Tucker conditions.

## Main statements #

For each theorem name listed below, we also prove similar theorems for min, extr (if applicable), and(f)derivinstead ofhas_fderiv.

• is_local_max_on.has_fderiv_within_at_nonpos : f' y ≤ 0 whenever a is a local maximum of f on s, f has derivative f' at a within s, and y belongs to the positive tangent cone of s at a.

• is_local_max_on.has_fderiv_within_at_eq_zero : In the settings of the previous theorem, if both y and -y belong to the positive tangent cone, then f' y = 0.

• is_local_max.has_fderiv_at_eq_zero : Fermat's Theorem, the derivative of a differentiable function at a local extremum point equals zero.

• exists_has_deriv_at_eq_zero : Rolle's Theorem: given a function f continuous on [a, b] and differentiable on (a, b), there exists c ∈ (a, b) such that f' c = 0.

## Implementation notes #

For each mathematical fact we prove several versions of its formalization:

• for maxima and minima;
• using has_fderiv*/has_deriv* or fderiv*/deriv*.

For the fderiv*/deriv* versions we omit the differentiability condition whenever it is possible due to the fact that fderiv and deriv are defined to be zero for non-differentiable functions.

## Tags #

local extremum, Fermat's Theorem, Rolle's Theorem

def pos_tangent_cone_at {E : Type u} [ E] (s : set E) (x : E) :
set E

"Positive" tangent cone to s at x; the only difference from tangent_cone_at is that we require c n → ∞ instead of ∥c n∥ → ∞. One can think about pos_tangent_cone_at as tangent_cone_at nnreal but we have no theory of normed semifields yet.

Equations
theorem pos_tangent_cone_at_mono {E : Type u} [ E] {a : E} :
monotone (λ (s : set E),
theorem mem_pos_tangent_cone_at_of_segment_subset {E : Type u} [ E] {s : set E} {x y : E} (h : x y s) :
y - x
theorem mem_pos_tangent_cone_at_of_segment_subset' {E : Type u} [ E] {s : set E} {x y : E} (h : x (x + y) s) :
y
theorem pos_tangent_cone_at_univ {E : Type u} [ E] {a : E} :
theorem is_local_max_on.has_fderiv_within_at_nonpos {E : Type u} [ E] {f : E → } {a : E} {f' : E →L[] } {s : set E} (h : a) (hf : s a) {y : E} (hy : y ) :
f' y 0

If f has a local max on s at a, f' is the derivative of f at a within s, and y belongs to the positive tangent cone of s at a, then f' y ≤ 0.

theorem is_local_max_on.fderiv_within_nonpos {E : Type u} [ E] {f : E → } {a : E} {s : set E} (h : a) {y : E} (hy : y ) :
s a) y 0

If f has a local max on s at a and y belongs to the positive tangent cone of s at a, then f' y ≤ 0.

theorem is_local_max_on.has_fderiv_within_at_eq_zero {E : Type u} [ E] {f : E → } {a : E} {f' : E →L[] } {s : set E} (h : a) (hf : s a) {y : E} (hy : y ) (hy' : -y ) :
f' y = 0

If f has a local max on s at a, f' is a derivative of f at a within s, and both y and -y belong to the positive tangent cone of s at a, then f' y ≤ 0.

theorem is_local_max_on.fderiv_within_eq_zero {E : Type u} [ E] {f : E → } {a : E} {s : set E} (h : a) {y : E} (hy : y ) (hy' : -y ) :
s a) y = 0

If f has a local max on s at a and both y and -y belong to the positive tangent cone of s at a, then f' y = 0.

theorem is_local_min_on.has_fderiv_within_at_nonneg {E : Type u} [ E] {f : E → } {a : E} {f' : E →L[] } {s : set E} (h : a) (hf : s a) {y : E} (hy : y ) :
0 f' y

If f has a local min on s at a, f' is the derivative of f at a within s, and y belongs to the positive tangent cone of s at a, then 0 ≤ f' y.

theorem is_local_min_on.fderiv_within_nonneg {E : Type u} [ E] {f : E → } {a : E} {s : set E} (h : a) {y : E} (hy : y ) :
0 s a) y

If f has a local min on s at a and y belongs to the positive tangent cone of s at a, then 0 ≤ f' y.

theorem is_local_min_on.has_fderiv_within_at_eq_zero {E : Type u} [ E] {f : E → } {a : E} {f' : E →L[] } {s : set E} (h : a) (hf : s a) {y : E} (hy : y ) (hy' : -y ) :
f' y = 0

If f has a local max on s at a, f' is a derivative of f at a within s, and both y and -y belong to the positive tangent cone of s at a, then f' y ≤ 0.

theorem is_local_min_on.fderiv_within_eq_zero {E : Type u} [ E] {f : E → } {a : E} {s : set E} (h : a) {y : E} (hy : y ) (hy' : -y ) :
s a) y = 0

If f has a local min on s at a and both y and -y belong to the positive tangent cone of s at a, then f' y = 0.

theorem is_local_min.has_fderiv_at_eq_zero {E : Type u} [ E] {f : E → } {a : E} {f' : E →L[] } (h : a) (hf : f' a) :
f' = 0

Fermat's Theorem: the derivative of a function at a local minimum equals zero.

theorem is_local_min.fderiv_eq_zero {E : Type u} [ E] {f : E → } {a : E} (h : a) :
f a = 0

Fermat's Theorem: the derivative of a function at a local minimum equals zero.

theorem is_local_max.has_fderiv_at_eq_zero {E : Type u} [ E] {f : E → } {a : E} {f' : E →L[] } (h : a) (hf : f' a) :
f' = 0

Fermat's Theorem: the derivative of a function at a local maximum equals zero.

theorem is_local_max.fderiv_eq_zero {E : Type u} [ E] {f : E → } {a : E} (h : a) :
f a = 0

Fermat's Theorem: the derivative of a function at a local maximum equals zero.

theorem is_local_extr.has_fderiv_at_eq_zero {E : Type u} [ E] {f : E → } {a : E} {f' : E →L[] } (h : a) :
f' af' = 0

Fermat's Theorem: the derivative of a function at a local extremum equals zero.

theorem is_local_extr.fderiv_eq_zero {E : Type u} [ E] {f : E → } {a : E} (h : a) :
f a = 0

Fermat's Theorem: the derivative of a function at a local extremum equals zero.

theorem is_local_min.has_deriv_at_eq_zero {f : } {f' a : } (h : a) (hf : f' a) :
f' = 0

Fermat's Theorem: the derivative of a function at a local minimum equals zero.

theorem is_local_min.deriv_eq_zero {f : } {a : } (h : a) :
a = 0

Fermat's Theorem: the derivative of a function at a local minimum equals zero.

theorem is_local_max.has_deriv_at_eq_zero {f : } {f' a : } (h : a) (hf : f' a) :
f' = 0

Fermat's Theorem: the derivative of a function at a local maximum equals zero.

theorem is_local_max.deriv_eq_zero {f : } {a : } (h : a) :
a = 0

Fermat's Theorem: the derivative of a function at a local maximum equals zero.

theorem is_local_extr.has_deriv_at_eq_zero {f : } {f' a : } (h : a) :
f' af' = 0

Fermat's Theorem: the derivative of a function at a local extremum equals zero.

theorem is_local_extr.deriv_eq_zero {f : } {a : } (h : a) :
a = 0

Fermat's Theorem: the derivative of a function at a local extremum equals zero.

theorem exists_Ioo_extr_on_Icc (f : ) {a b : } (hab : a < b) (hfc : (set.Icc a b)) (hfI : f a = f b) :
∃ (c : ) (H : c b), (set.Icc a b) c

A continuous function on a closed interval with f a = f b takes either its maximum or its minimum value at a point in the interior of the interval.

theorem exists_local_extr_Ioo (f : ) {a b : } (hab : a < b) (hfc : (set.Icc a b)) (hfI : f a = f b) :
∃ (c : ) (H : c b),

A continuous function on a closed interval with f a = f b has a local extremum at some point of the corresponding open interval.

theorem exists_has_deriv_at_eq_zero (f f' : ) {a b : } (hab : a < b) (hfc : (set.Icc a b)) (hfI : f a = f b) (hff' : ∀ (x : ), x b (f' x) x) :
∃ (c : ) (H : c b), f' c = 0

Rolle's Theorem has_deriv_at version

theorem exists_deriv_eq_zero (f : ) {a b : } (hab : a < b) (hfc : (set.Icc a b)) (hfI : f a = f b) :
∃ (c : ) (H : c b), c = 0

Rolle's Theorem deriv version

theorem exists_has_deriv_at_eq_zero' {f f' : } {a b l : } (hab : a < b) (hfa : (set.Ioi a)) (nhds l)) (hfb : (set.Iio b)) (nhds l)) (hff' : ∀ (x : ), x b (f' x) x) :
∃ (c : ) (H : c b), f' c = 0

Rolle's Theorem, a version for a function on an open interval: if f has derivative f' on (a, b) and has the same limit l at 𝓝[>] a and 𝓝[<] b, then f' c = 0 for some c ∈ (a, b).

theorem exists_deriv_eq_zero' {f : } {a b l : } (hab : a < b) (hfa : (set.Ioi a)) (nhds l)) (hfb : (set.Iio b)) (nhds l)) :
∃ (c : ) (H : c b), c = 0

Rolle's Theorem, a version for a function on an open interval: if f has the same limit l at 𝓝[>] a and 𝓝[<] b, then deriv f c = 0 for some c ∈ (a, b). This version does not require differentiability of f because we define deriv f c = 0 whenever f is not differentiable at c`.

theorem polynomial.card_root_set_le_derivative {F : Type u_1} [field F] [ ] (p : polynomial F) :