Skip to content

Commit 7e5b707

Browse files
chore(TangentCone): split file (#30932)
It will be easier for me to generalize the definition this way. Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 574e293 commit 7e5b707

File tree

14 files changed

+804
-685
lines changed

14 files changed

+804
-685
lines changed

โ€ŽMathlib.leanโ€Ž

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1586,7 +1586,13 @@ import Mathlib.Analysis.Calculus.ParametricIntegral
15861586
import Mathlib.Analysis.Calculus.ParametricIntervalIntegral
15871587
import Mathlib.Analysis.Calculus.Rademacher
15881588
import Mathlib.Analysis.Calculus.SmoothSeries
1589-
import Mathlib.Analysis.Calculus.TangentCone
1589+
import Mathlib.Analysis.Calculus.TangentCone.Basic
1590+
import Mathlib.Analysis.Calculus.TangentCone.Defs
1591+
import Mathlib.Analysis.Calculus.TangentCone.DimOne
1592+
import Mathlib.Analysis.Calculus.TangentCone.Pi
1593+
import Mathlib.Analysis.Calculus.TangentCone.Prod
1594+
import Mathlib.Analysis.Calculus.TangentCone.ProperSpace
1595+
import Mathlib.Analysis.Calculus.TangentCone.Real
15901596
import Mathlib.Analysis.Calculus.Taylor
15911597
import Mathlib.Analysis.Calculus.UniformLimitsDeriv
15921598
import Mathlib.Analysis.Calculus.VectorField

โ€ŽMathlib/Analysis/Calculus/Deriv/Basic.leanโ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ Authors: Gabriel Ebner, Sรฉbastien Gouรซzel
55
-/
66
import Mathlib.Analysis.Calculus.FDeriv.Const
77
import Mathlib.Analysis.Normed.Operator.NormedSpace
8+
import Mathlib.Analysis.Calculus.TangentCone.DimOne
9+
import Mathlib.Analysis.Calculus.TangentCone.Real
810

911
/-!
1012

โ€ŽMathlib/Analysis/Calculus/FDeriv/Basic.leanโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ Authors: Jeremy Avigad, Sรฉbastien Gouรซzel, Yury Kudryashov
55
-/
66
import Mathlib.Analysis.Asymptotics.Lemmas
77
import Mathlib.Analysis.Calculus.FDeriv.Defs
8-
import Mathlib.Analysis.Calculus.TangentCone
98
import Mathlib.Analysis.Normed.Operator.Asymptotics
9+
import Mathlib.Analysis.Calculus.TangentCone.Basic
1010

1111
/-!
1212
# The Frรฉchet derivative: basic properties

โ€ŽMathlib/Analysis/Calculus/TangentCone.leanโ€Ž

Lines changed: 0 additions & 682 deletions
This file was deleted.
Lines changed: 306 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,306 @@
1+
/-
2+
Copyright (c) 2019 Sรฉbastien Gouรซzel. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Sรฉbastien Gouรซzel
5+
-/
6+
import Mathlib.Analysis.Calculus.TangentCone.Defs
7+
import Mathlib.Analysis.SpecificLimits.Basic
8+
import Mathlib.Analysis.Normed.Module.Basic
9+
10+
/-!
11+
# Basic properties of tangent cones and sets with unique differentiability property
12+
13+
In this file we prove basic lemmas about `tangentConeAt`, `UniqueDiffWithinAt`,
14+
and `UniqueDiffOn`.
15+
-/
16+
17+
open Filter Set Metric NormedField
18+
open scoped Topology Pointwise
19+
20+
variable {๐•œ : Type*} [NontriviallyNormedField ๐•œ]
21+
variable {E F G : Type*}
22+
23+
section TVS
24+
variable [AddCommGroup E] [Module ๐•œ E] [TopologicalSpace E]
25+
variable {x y : E} {s t : Set E}
26+
27+
theorem mem_tangentConeAt_of_pow_smul {r : ๐•œ} (hrโ‚€ : r โ‰  0) (hr : โ€–rโ€– < 1)
28+
(hs : โˆ€แถ  n : โ„• in atTop, x + r ^ n โ€ข y โˆˆ s) : y โˆˆ tangentConeAt ๐•œ s x := by
29+
refine โŸจfun n โ†ฆ (r ^ n)โปยน, fun n โ†ฆ r ^ n โ€ข y, hs, ?_, ?_โŸฉ
30+
ยท simp only [norm_inv, norm_pow, โ† inv_pow]
31+
exact tendsto_pow_atTop_atTop_of_one_lt <| (one_lt_invโ‚€ (norm_pos_iff.2 hrโ‚€)).2 hr
32+
ยท simp only [inv_smul_smulโ‚€ (pow_ne_zero _ hrโ‚€), tendsto_const_nhds]
33+
34+
@[simp]
35+
theorem tangentConeAt_univ : tangentConeAt ๐•œ univ x = univ :=
36+
let โŸจ_r, hrโ‚€, hrโŸฉ := exists_norm_lt_one ๐•œ
37+
eq_univ_of_forall fun _ โ†ฆ mem_tangentConeAt_of_pow_smul (norm_pos_iff.1 hrโ‚€) hr <|
38+
Eventually.of_forall fun _ โ†ฆ mem_univ _
39+
40+
@[deprecated (since := "2025-04-27")] alias tangentCone_univ := tangentConeAt_univ
41+
42+
@[gcongr]
43+
theorem tangentConeAt_mono (h : s โІ t) : tangentConeAt ๐•œ s x โІ tangentConeAt ๐•œ t x := by
44+
rintro y โŸจc, d, ds, ctop, climโŸฉ
45+
exact โŸจc, d, mem_of_superset ds fun n hn => h hn, ctop, climโŸฉ
46+
47+
@[deprecated (since := "2025-04-27")] alias tangentCone_mono := tangentConeAt_mono
48+
49+
/--
50+
Given `x โˆˆ s` and a field extension `๐•œ โІ ๐•œ'`, the tangent cone of `s` at `x` with
51+
respect to `๐•œ` is contained in the tangent cone of `s` at `x` with respect to `๐•œ'`.
52+
-/
53+
theorem tangentConeAt_mono_field {๐•œ' : Type*} [NontriviallyNormedField ๐•œ'] [NormedAlgebra ๐•œ ๐•œ']
54+
[Module ๐•œ' E] [IsScalarTower ๐•œ ๐•œ' E] : tangentConeAt ๐•œ s x โІ tangentConeAt ๐•œ' s x := by
55+
intro ฮฑ hฮฑ
56+
simp only [tangentConeAt, eventually_atTop, ge_iff_le, tendsto_norm_atTop_iff_cobounded,
57+
mem_setOf_eq] at hฮฑ โŠข
58+
obtain โŸจc, d, โŸจa, hโ‚aโŸฉ, hโ‚, hโ‚‚โŸฉ := hฮฑ
59+
use ((algebraMap ๐•œ ๐•œ') โˆ˜ c), d
60+
constructor
61+
ยท use a
62+
ยท constructor
63+
ยท intro ฮฒ hฮฒ
64+
rw [mem_map, mem_atTop_sets]
65+
obtain โŸจn, hnโŸฉ := mem_atTop_sets.1
66+
(mem_map.1 (hโ‚ (tendsto_algebraMap_cobounded (๐•œ := ๐•œ) (๐•œ' := ๐•œ') hฮฒ)))
67+
use n, fun _ _ โ†ฆ by simp_all
68+
ยท simpa
69+
70+
variable [ContinuousSMul ๐•œ E]
71+
72+
/-- Auxiliary lemma ensuring that, under the assumptions defining the tangent cone,
73+
the sequence `d` tends to 0 at infinity. -/
74+
theorem tangentConeAt.lim_zero {ฮฑ : Type*} (l : Filter ฮฑ) {c : ฮฑ โ†’ ๐•œ} {d : ฮฑ โ†’ E}
75+
(hc : Tendsto (fun n => โ€–c nโ€–) l atTop) (hd : Tendsto (fun n => c n โ€ข d n) l (๐“ y)) :
76+
Tendsto d l (๐“ 0) := by
77+
have : โˆ€แถ  n in l, (c n)โปยน โ€ข c n โ€ข d n = d n :=
78+
(eventually_ne_of_tendsto_norm_atTop hc 0).mono fun n hn โ†ฆ inv_smul_smulโ‚€ hn (d n)
79+
rw [tendsto_norm_atTop_iff_cobounded] at hc
80+
simpa using Tendsto.congr' this <| (tendsto_invโ‚€_cobounded.comp hc).smul hd
81+
82+
variable [ContinuousAdd E]
83+
84+
theorem tangentConeAt_mono_nhds (h : ๐“[s] x โ‰ค ๐“[t] x) :
85+
tangentConeAt ๐•œ s x โІ tangentConeAt ๐•œ t x := by
86+
rintro y โŸจc, d, ds, ctop, climโŸฉ
87+
refine โŸจc, d, ?_, ctop, climโŸฉ
88+
suffices Tendsto (fun n => x + d n) atTop (๐“[t] x) from
89+
tendsto_principal.1 (tendsto_inf.1 this).2
90+
refine (tendsto_inf.2 โŸจ?_, tendsto_principal.2 dsโŸฉ).mono_right h
91+
simpa only [add_zero] using tendsto_const_nhds.add (tangentConeAt.lim_zero atTop ctop clim)
92+
93+
@[deprecated (since := "2025-04-27")] alias tangentCone_mono_nhds := tangentConeAt_mono_nhds
94+
95+
/-- Tangent cone of `s` at `x` depends only on `๐“[s] x`. -/
96+
theorem tangentConeAt_congr (h : ๐“[s] x = ๐“[t] x) : tangentConeAt ๐•œ s x = tangentConeAt ๐•œ t x :=
97+
Subset.antisymm (tangentConeAt_mono_nhds h.le) (tangentConeAt_mono_nhds h.ge)
98+
99+
@[deprecated (since := "2025-04-27")] alias tangentCone_congr := tangentConeAt_congr
100+
101+
/-- Intersecting with a neighborhood of the point does not change the tangent cone. -/
102+
theorem tangentConeAt_inter_nhds (ht : t โˆˆ ๐“ x) : tangentConeAt ๐•œ (s โˆฉ t) x = tangentConeAt ๐•œ s x :=
103+
tangentConeAt_congr (nhdsWithin_restrict' _ ht).symm
104+
105+
@[deprecated (since := "2025-04-27")] alias tangentCone_inter_nhds := tangentConeAt_inter_nhds
106+
107+
end TVS
108+
109+
section Normed
110+
variable [NormedAddCommGroup E] [NormedSpace ๐•œ E]
111+
variable [NormedAddCommGroup F] [NormedSpace ๐•œ F]
112+
variable {x y : E} {s t : Set E}
113+
114+
@[simp]
115+
theorem tangentConeAt_closure : tangentConeAt ๐•œ (closure s) x = tangentConeAt ๐•œ s x := by
116+
refine Subset.antisymm ?_ (tangentConeAt_mono subset_closure)
117+
rintro y โŸจc, d, ds, ctop, climโŸฉ
118+
obtain โŸจu, -, u_pos, u_limโŸฉ :
119+
โˆƒ u, StrictAnti u โˆง (โˆ€ (n : โ„•), 0 < u n) โˆง Tendsto u atTop (๐“ (0 : โ„)) :=
120+
exists_seq_strictAnti_tendsto (0 : โ„)
121+
have : โˆ€แถ  n in atTop, โˆƒ d', x + d' โˆˆ s โˆง dist (c n โ€ข d n) (c n โ€ข d') < u n := by
122+
filter_upwards [ctop.eventually_gt_atTop 0, ds] with n hn hns
123+
rcases Metric.mem_closure_iff.mp hns (u n / โ€–c nโ€–) (div_pos (u_pos n) hn) with โŸจy, hys, hyโŸฉ
124+
refine โŸจy - x, by simpa, ?_โŸฉ
125+
rwa [dist_smulโ‚€, โ† dist_add_left x, add_sub_cancel, โ† lt_div_iffโ‚€' hn]
126+
simp only [Filter.skolem, eventually_and] at this
127+
rcases this with โŸจd', hd's, hd'โŸฉ
128+
exact โŸจc, d', hd's, ctop, clim.congr_dist
129+
(squeeze_zero' (.of_forall fun _ โ†ฆ dist_nonneg) (hd'.mono fun _ โ†ฆ le_of_lt) u_lim)โŸฉ
130+
131+
/-- The tangent cone at a non-isolated point contains `0`. -/
132+
theorem zero_mem_tangentCone {s : Set E} {x : E} (hx : x โˆˆ closure s) :
133+
0 โˆˆ tangentConeAt ๐•œ s x := by
134+
/- Take a sequence `d n` tending to `0` such that `x + d n โˆˆ s`. Taking `c n` of the order
135+
of `1 / (d n) ^ (1/2)`, then `c n` tends to infinity, but `c n โ€ข d n` tends to `0`. By definition,
136+
this shows that `0` belongs to the tangent cone. -/
137+
obtain โŸจu, -, hu, u_limโŸฉ :
138+
โˆƒ u, StrictAnti u โˆง (โˆ€ (n : โ„•), 0 < u n โˆง u n < 1) โˆง Tendsto u atTop (๐“ (0 : โ„)) :=
139+
exists_seq_strictAnti_tendsto' one_pos
140+
choose u_pos u_lt_one using hu
141+
choose v hvs hvu using fun n โ†ฆ Metric.mem_closure_iff.mp hx _ (mul_pos (u_pos n) (u_pos n))
142+
let d n := v n - x
143+
let โŸจr, hrโŸฉ := exists_one_lt_norm ๐•œ
144+
have A n := exists_nat_pow_near (one_le_inv_iffโ‚€.mpr โŸจu_pos n, (u_lt_one n).leโŸฉ) hr
145+
choose m hm_le hlt_m using A
146+
set c := fun n โ†ฆ r ^ (m n + 1)
147+
have c_lim : Tendsto (fun n โ†ฆ โ€–c nโ€–) atTop atTop := by
148+
simp only [c, norm_pow]
149+
refine tendsto_atTop_mono (fun n โ†ฆ (hlt_m n).le) <| .inv_tendsto_nhdsGT_zero ?_
150+
exact tendsto_nhdsWithin_iff.mpr โŸจu_lim, .of_forall u_posโŸฉ
151+
refine โŸจc, d, .of_forall <| by simpa [d], c_lim, ?_โŸฉ
152+
have Hle n : โ€–c n โ€ข d nโ€– โ‰ค โ€–rโ€– * u n := by
153+
specialize u_pos n
154+
calc
155+
โ€–c n โ€ข d nโ€– โ‰ค (u n)โปยน * โ€–rโ€– * (u n * u n) := by
156+
simp only [c, norm_smul, norm_pow, pow_succ, norm_mul, d, โ† dist_eq_norm']
157+
gcongr
158+
exacts [hm_le n, (hvu n).le]
159+
_ = โ€–rโ€– * u n := by field
160+
refine squeeze_zero_norm Hle ?_
161+
simpa using tendsto_const_nhds.mul u_lim
162+
163+
/-- If `x` is not an accumulation point of `s, then the tangent cone of `s` at `x`
164+
is a subset of `{0}`. -/
165+
theorem tangentConeAt_subset_zero (hx : ยฌAccPt x (๐“Ÿ s)) : tangentConeAt ๐•œ s x โІ 0 := by
166+
rintro y โŸจc, d, hds, hc, hcdโŸฉ
167+
suffices โˆ€แถ  n in .atTop, d n = 0 from
168+
tendsto_nhds_unique hcd <| tendsto_const_nhds.congr' <| this.mono fun n hn โ†ฆ by simp [hn]
169+
simp only [accPt_iff_frequently, not_frequently, not_and', ne_eq, not_not] at hx
170+
have : Tendsto (x + d ยท) atTop (๐“ x) := by
171+
simpa using tendsto_const_nhds.add (tangentConeAt.lim_zero _ hc hcd)
172+
filter_upwards [this.eventually hx, hds] with n hโ‚ hโ‚‚
173+
simpa using hโ‚ hโ‚‚
174+
175+
theorem UniqueDiffWithinAt.accPt [Nontrivial E] (h : UniqueDiffWithinAt ๐•œ s x) : AccPt x (๐“Ÿ s) := by
176+
by_contra! h'
177+
have : Dense (Submodule.span ๐•œ (0 : Set E) : Set E) :=
178+
h.1.mono <| by gcongr; exact tangentConeAt_subset_zero h'
179+
simp [dense_iff_closure_eq] at this
180+
181+
end Normed
182+
183+
section UniqueDiff
184+
185+
/-!
186+
### Properties of `UniqueDiffWithinAt` and `UniqueDiffOn`
187+
188+
This section is devoted to properties of the predicates `UniqueDiffWithinAt` and `UniqueDiffOn`. -/
189+
190+
section Module
191+
variable [AddCommGroup E] [Module ๐•œ E] [TopologicalSpace E]
192+
variable {x y : E} {s t : Set E}
193+
194+
theorem UniqueDiffOn.uniqueDiffWithinAt {s : Set E} {x} (hs : UniqueDiffOn ๐•œ s) (h : x โˆˆ s) :
195+
UniqueDiffWithinAt ๐•œ s x :=
196+
hs x h
197+
198+
@[simp]
199+
theorem uniqueDiffWithinAt_univ : UniqueDiffWithinAt ๐•œ univ x := by
200+
rw [uniqueDiffWithinAt_iff, tangentConeAt_univ]
201+
simp
202+
203+
@[simp]
204+
theorem uniqueDiffOn_univ : UniqueDiffOn ๐•œ (univ : Set E) :=
205+
fun _ _ => uniqueDiffWithinAt_univ
206+
207+
theorem uniqueDiffOn_empty : UniqueDiffOn ๐•œ (โˆ… : Set E) :=
208+
fun _ hx => hx.elim
209+
210+
theorem UniqueDiffWithinAt.congr_pt (h : UniqueDiffWithinAt ๐•œ s x) (hy : x = y) :
211+
UniqueDiffWithinAt ๐•œ s y := hy โ–ธ h
212+
213+
variable {๐•œ' : Type*} [NontriviallyNormedField ๐•œ'] [NormedAlgebra ๐•œ ๐•œ']
214+
[Module ๐•œ' E] [IsScalarTower ๐•œ ๐•œ' E]
215+
216+
/--
217+
Assume that `E` is a normed vector space over normed fields `๐•œ โІ ๐•œ'` and that `x โˆˆ s` is a point
218+
of unique differentiability with respect to the set `s` and the smaller field `๐•œ`, then `x` is also
219+
a point of unique differentiability with respect to the set `s` and the larger field `๐•œ'`.
220+
-/
221+
theorem UniqueDiffWithinAt.mono_field (hโ‚‚s : UniqueDiffWithinAt ๐•œ s x) :
222+
UniqueDiffWithinAt ๐•œ' s x := by
223+
simp_all only [uniqueDiffWithinAt_iff, and_true]
224+
apply Dense.mono _ hโ‚‚s.1
225+
trans โ†‘(Submodule.span ๐•œ (tangentConeAt ๐•œ' s x))
226+
<;> simp [Submodule.span_mono tangentConeAt_mono_field]
227+
228+
/--
229+
Assume that `E` is a normed vector space over normed fields `๐•œ โІ ๐•œ'` and all points of `s` are
230+
points of unique differentiability with respect to the smaller field `๐•œ`, then they are also points
231+
of unique differentiability with respect to the larger field `๐•œ`.
232+
-/
233+
theorem UniqueDiffOn.mono_field (hโ‚‚s : UniqueDiffOn ๐•œ s) :
234+
UniqueDiffOn ๐•œ' s := fun x hx โ†ฆ (hโ‚‚s x hx).mono_field
235+
236+
end Module
237+
238+
section TVS
239+
variable [AddCommGroup E] [Module ๐•œ E] [TopologicalSpace E]
240+
variable {x y : E} {s t : Set E}
241+
variable [ContinuousAdd E] [ContinuousSMul ๐•œ E]
242+
243+
theorem UniqueDiffWithinAt.mono_nhds (h : UniqueDiffWithinAt ๐•œ s x) (st : ๐“[s] x โ‰ค ๐“[t] x) :
244+
UniqueDiffWithinAt ๐•œ t x := by
245+
simp only [uniqueDiffWithinAt_iff] at *
246+
rw [mem_closure_iff_nhdsWithin_neBot] at h โŠข
247+
exact โŸจh.1.mono <| Submodule.span_mono <| tangentConeAt_mono_nhds st, h.2.mono stโŸฉ
248+
249+
theorem UniqueDiffWithinAt.mono (h : UniqueDiffWithinAt ๐•œ s x) (st : s โІ t) :
250+
UniqueDiffWithinAt ๐•œ t x :=
251+
h.mono_nhds <| nhdsWithin_mono _ st
252+
253+
theorem uniqueDiffWithinAt_congr (st : ๐“[s] x = ๐“[t] x) :
254+
UniqueDiffWithinAt ๐•œ s x โ†” UniqueDiffWithinAt ๐•œ t x :=
255+
โŸจfun h => h.mono_nhds <| le_of_eq st, fun h => h.mono_nhds <| le_of_eq st.symmโŸฉ
256+
257+
theorem uniqueDiffWithinAt_inter (ht : t โˆˆ ๐“ x) :
258+
UniqueDiffWithinAt ๐•œ (s โˆฉ t) x โ†” UniqueDiffWithinAt ๐•œ s x :=
259+
uniqueDiffWithinAt_congr <| (nhdsWithin_restrict' _ ht).symm
260+
261+
theorem UniqueDiffWithinAt.inter (hs : UniqueDiffWithinAt ๐•œ s x) (ht : t โˆˆ ๐“ x) :
262+
UniqueDiffWithinAt ๐•œ (s โˆฉ t) x :=
263+
(uniqueDiffWithinAt_inter ht).2 hs
264+
265+
theorem uniqueDiffWithinAt_inter' (ht : t โˆˆ ๐“[s] x) :
266+
UniqueDiffWithinAt ๐•œ (s โˆฉ t) x โ†” UniqueDiffWithinAt ๐•œ s x :=
267+
uniqueDiffWithinAt_congr <| (nhdsWithin_restrict'' _ ht).symm
268+
269+
theorem UniqueDiffWithinAt.inter' (hs : UniqueDiffWithinAt ๐•œ s x) (ht : t โˆˆ ๐“[s] x) :
270+
UniqueDiffWithinAt ๐•œ (s โˆฉ t) x :=
271+
(uniqueDiffWithinAt_inter' ht).2 hs
272+
273+
theorem uniqueDiffWithinAt_of_mem_nhds (h : s โˆˆ ๐“ x) : UniqueDiffWithinAt ๐•œ s x := by
274+
simpa only [univ_inter] using uniqueDiffWithinAt_univ.inter h
275+
276+
theorem IsOpen.uniqueDiffWithinAt (hs : IsOpen s) (xs : x โˆˆ s) : UniqueDiffWithinAt ๐•œ s x :=
277+
uniqueDiffWithinAt_of_mem_nhds (IsOpen.mem_nhds hs xs)
278+
279+
theorem UniqueDiffOn.inter (hs : UniqueDiffOn ๐•œ s) (ht : IsOpen t) : UniqueDiffOn ๐•œ (s โˆฉ t) :=
280+
fun x hx => (hs x hx.1).inter (IsOpen.mem_nhds ht hx.2)
281+
282+
theorem IsOpen.uniqueDiffOn (hs : IsOpen s) : UniqueDiffOn ๐•œ s :=
283+
fun _ hx => IsOpen.uniqueDiffWithinAt hs hx
284+
285+
end TVS
286+
287+
section Normed
288+
variable [NormedAddCommGroup E] [NormedSpace ๐•œ E]
289+
variable [NormedAddCommGroup F] [NormedSpace ๐•œ F]
290+
variable {x y : E} {s t : Set E}
291+
292+
@[simp]
293+
theorem uniqueDiffWithinAt_closure :
294+
UniqueDiffWithinAt ๐•œ (closure s) x โ†” UniqueDiffWithinAt ๐•œ s x := by
295+
simp [uniqueDiffWithinAt_iff]
296+
297+
protected alias โŸจUniqueDiffWithinAt.of_closure, UniqueDiffWithinAt.closureโŸฉ :=
298+
uniqueDiffWithinAt_closure
299+
300+
theorem UniqueDiffWithinAt.mono_closure (h : UniqueDiffWithinAt ๐•œ s x) (st : s โІ closure t) :
301+
UniqueDiffWithinAt ๐•œ t x :=
302+
(h.mono st).of_closure
303+
304+
end Normed
305+
306+
end UniqueDiff

0 commit comments

Comments
ย (0)