@@ -94,6 +94,7 @@ theorem tangentCone_univ : tangentConeAt 𝕜 univ x = univ :=
9494 eq_univ_of_forall fun _ ↦ mem_tangentConeAt_of_pow_smul (norm_pos_iff.1 hr₀) hr <|
9595 Eventually.of_forall fun _ ↦ mem_univ _
9696
97+ @[gcongr]
9798theorem tangentCone_mono (h : s ⊆ t) : tangentConeAt 𝕜 s x ⊆ tangentConeAt 𝕜 t x := by
9899 rintro y ⟨c, d, ds, ctop, clim⟩
99100 exact ⟨c, d, mem_of_superset ds fun n hn => h hn, ctop, clim⟩
@@ -106,6 +107,23 @@ variable [NormedAddCommGroup F] [NormedSpace 𝕜 F]
106107variable [NormedAddCommGroup G] [NormedSpace ℝ G]
107108variable {x y : E} {s t : Set E}
108109
110+ @[simp]
111+ theorem tangentConeAt_closure : tangentConeAt 𝕜 (closure s) x = tangentConeAt 𝕜 s x := by
112+ refine Subset.antisymm ?_ (tangentCone_mono subset_closure)
113+ rintro y ⟨c, d, ds, ctop, clim⟩
114+ obtain ⟨u, -, u_pos, u_lim⟩ :
115+ ∃ u, StrictAnti u ∧ (∀ (n : ℕ), 0 < u n) ∧ Tendsto u atTop (𝓝 (0 : ℝ)) :=
116+ exists_seq_strictAnti_tendsto (0 : ℝ)
117+ have : ∀ᶠ n in atTop, ∃ d', x + d' ∈ s ∧ dist (c n • d n) (c n • d') < u n := by
118+ filter_upwards [ctop.eventually_gt_atTop 0 , ds] with n hn hns
119+ rcases Metric.mem_closure_iff.mp hns (u n / ‖c n‖) (div_pos (u_pos n) hn) with ⟨y, hys, hy⟩
120+ refine ⟨y - x, by simpa, ?_⟩
121+ rwa [dist_smul₀, ← dist_add_left x, add_sub_cancel, ← lt_div_iff₀' hn]
122+ simp only [Filter.skolem, eventually_and] at this
123+ rcases this with ⟨d', hd's, hd'⟩
124+ exact ⟨c, d', hd's, ctop, clim.congr_dist
125+ (squeeze_zero' (.of_forall fun _ ↦ dist_nonneg) (hd'.mono fun _ ↦ le_of_lt) u_lim)⟩
126+
109127/-- Auxiliary lemma ensuring that, under the assumptions defining the tangent cone,
110128the sequence `d` tends to 0 at infinity. -/
111129theorem tangentConeAt.lim_zero {α : Type *} (l : Filter α) {c : α → 𝕜} {d : α → E}
@@ -386,6 +404,14 @@ variable [NormedAddCommGroup E] [NormedSpace 𝕜 E]
386404variable [NormedAddCommGroup F] [NormedSpace 𝕜 F]
387405variable {x y : E} {s t : Set E}
388406
407+ @[simp]
408+ theorem uniqueDiffWithinAt_closure :
409+ UniqueDiffWithinAt 𝕜 (closure s) x ↔ UniqueDiffWithinAt 𝕜 s x := by
410+ simp [uniqueDiffWithinAt_iff]
411+
412+ protected alias ⟨UniqueDiffWithinAt.of_closure, UniqueDiffWithinAt.closure⟩ :=
413+ uniqueDiffWithinAt_closure
414+
389415theorem UniqueDiffWithinAt.mono_nhds (h : UniqueDiffWithinAt 𝕜 s x) (st : 𝓝[s] x ≤ 𝓝[t] x) :
390416 UniqueDiffWithinAt 𝕜 t x := by
391417 simp only [uniqueDiffWithinAt_iff] at *
@@ -396,6 +422,10 @@ theorem UniqueDiffWithinAt.mono (h : UniqueDiffWithinAt 𝕜 s x) (st : s ⊆ t)
396422 UniqueDiffWithinAt 𝕜 t x :=
397423 h.mono_nhds <| nhdsWithin_mono _ st
398424
425+ theorem UniqueDiffWithinAt.mono_closure (h : UniqueDiffWithinAt 𝕜 s x) (st : s ⊆ closure t) :
426+ UniqueDiffWithinAt 𝕜 t x :=
427+ (h.mono st).of_closure
428+
399429theorem uniqueDiffWithinAt_congr (st : 𝓝[s] x = 𝓝[t] x) :
400430 UniqueDiffWithinAt 𝕜 s x ↔ UniqueDiffWithinAt 𝕜 t x :=
401431 ⟨fun h => h.mono_nhds <| le_of_eq st, fun h => h.mono_nhds <| le_of_eq st.symm⟩
0 commit comments