Skip to content

Commit 89b7100

Browse files
committed
chore: rename IsIntegralCurve to IsMIntegralCurve (leanprover-community#26563)
I rename all the existing `IsIntegralCurve` series of definitions and lemmas for manifolds to `IsMIntegralCurve` in preparation for reusing `IsIntegralCurve` for the vector space version. - [x] depends on: leanprover-community#26533
1 parent 2320ef6 commit 89b7100

5 files changed

Lines changed: 322 additions & 167 deletions

File tree

Mathlib/Geometry/Manifold/IntegralCurve/Basic.lean

Lines changed: 109 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,20 @@ This is the first of a series of files, organised as follows:
2323
## Main definitions
2424
2525
Let `v : M → TM` be a vector field on `M`, and let `γ : ℝ → M`.
26-
* `IsIntegralCurve γ v`: `γ t` is tangent to `v (γ t)` for all `t : ℝ`. That is, `γ` is a global
26+
* `IsMIntegralCurve γ v`: `γ t` is tangent to `v (γ t)` for all `t : ℝ`. That is, `γ` is a global
2727
integral curve of `v`.
28-
* `IsIntegralCurveOn γ v s`: `γ t` is tangent to `v (γ t)` for all `t ∈ s`, where `s : Set ℝ`.
29-
* `IsIntegralCurveAt γ v t₀`: `γ t` is tangent to `v (γ t)` for all `t` in some open interval
28+
* `IsMIntegralCurveOn γ v s`: `γ t` is tangent to `v (γ t)` for all `t ∈ s`, where `s : Set ℝ`.
29+
* `IsMIntegralCurveAt γ v t₀`: `γ t` is tangent to `v (γ t)` for all `t` in some open interval
3030
around `t₀`. That is, `γ` is a local integral curve of `v`.
3131
32-
For `IsIntegralCurveOn γ v s` and `IsIntegralCurveAt γ v t₀`, even though `γ` is defined for all
32+
For `IsMIntegralCurveOn γ v s` and `IsMIntegralCurveAt γ v t₀`, even though `γ` is defined for all
3333
time, its value outside of the set `s` or a small interval around `t₀` is irrelevant and considered
3434
junk.
3535
36+
## TODO
37+
38+
* Implement `IsMIntegralCurveWithinAt`.
39+
3640
## Reference
3741
3842
* [Lee, J. M. (2012). _Introduction to Smooth Manifolds_. Springer New York.][lee2012]
@@ -52,51 +56,66 @@ variable
5256
{M : Type*} [TopologicalSpace M] [ChartedSpace H M]
5357

5458
/-- If `γ : ℝ → M` is $C^1$ on `s : Set ℝ` and `v` is a vector field on `M`,
55-
`IsIntegralCurveOn γ v s` means `γ t` is tangent to `v (γ t)` within `s` for all `t ∈ s`. The value
56-
of `γ` outside of `s` is irrelevant and considered junk. -/
57-
def IsIntegralCurveOn (γ : ℝ → M) (v : (x : M) → TangentSpace I x) (s : Set ℝ) : Prop :=
59+
`IsMIntegralCurveOn γ v s` means `γ t` is tangent to `v (γ t)` for all `t ∈ s`. The value of `γ`
60+
outside of `s` is irrelevant and considered junk. -/
61+
def IsMIntegralCurveOn (γ : ℝ → M) (v : (x : M) → TangentSpace I x) (s : Set ℝ) : Prop :=
5862
∀ t ∈ s, HasMFDerivWithinAt 𝓘(ℝ, ℝ) I γ s t ((1 : ℝ →L[ℝ] ℝ).smulRight <| v (γ t))
5963

60-
/-- If `v` is a vector field on `M` and `t₀ : ℝ`, `IsIntegralCurveAt γ v t₀` means `γ : ℝ → M` is a
64+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveOn := IsMIntegralCurveOn
65+
66+
/-- If `v` is a vector field on `M` and `t₀ : ℝ`, `IsMIntegralCurveAt γ v t₀` means `γ : ℝ → M` is a
6167
local integral curve of `v` in a neighbourhood containing `t₀`. The value of `γ` outside of this
62-
neighbourhood is irrelevant and considered junk. -/
63-
def IsIntegralCurveAt (γ : ℝ → M) (v : (x : M) → TangentSpace I x) (t₀ : ℝ) : Prop :=
68+
interval is irrelevant and considered junk. -/
69+
def IsMIntegralCurveAt (γ : ℝ → M) (v : (x : M) → TangentSpace I x) (t₀ : ℝ) : Prop :=
6470
∀ᶠ t in 𝓝 t₀, HasMFDerivAt 𝓘(ℝ, ℝ) I γ t ((1 : ℝ →L[ℝ] ℝ).smulRight <| v (γ t))
6571

66-
/-- If `v : M → TM` is a vector field on `M`, `IsIntegralCurve γ v` means `γ : ℝ → M` is a global
72+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveAt := IsMIntegralCurveAt
73+
74+
/-- If `v : M → TM` is a vector field on `M`, `IsMIntegralCurve γ v` means `γ : ℝ → M` is a global
6775
integral curve of `v`. That is, `γ t` is tangent to `v (γ t)` for all `t : ℝ`. -/
68-
def IsIntegralCurve (γ : ℝ → M) (v : (x : M) → TangentSpace I x) : Prop :=
76+
def IsMIntegralCurve (γ : ℝ → M) (v : (x : M) → TangentSpace I x) : Prop :=
6977
∀ t : ℝ, HasMFDerivAt 𝓘(ℝ, ℝ) I γ t ((1 : ℝ →L[ℝ] ℝ).smulRight (v (γ t)))
7078

79+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurve := IsMIntegralCurve
80+
7181
variable {γ γ' : ℝ → M} {v : (x : M) → TangentSpace I x} {s s' : Set ℝ} {t₀ : ℝ}
7282

73-
lemma IsIntegralCurve.isIntegralCurveOn (h : IsIntegralCurve γ v) (s : Set ℝ) :
74-
IsIntegralCurveOn γ v s := fun t _ ↦ (h t).hasMFDerivWithinAt
83+
lemma IsMIntegralCurve.isMIntegralCurveOn (h : IsMIntegralCurve γ v) (s : Set ℝ) :
84+
IsMIntegralCurveOn γ v s := fun t _ ↦ (h t).hasMFDerivWithinAt
7585

76-
lemma isIntegralCurve_iff_isIntegralCurveOn : IsIntegralCurve γ v ↔ IsIntegralCurveOn γ v univ :=
77-
fun h ↦ h.isIntegralCurveOn _, fun h t ↦ (h t (mem_univ _)).hasMFDerivAt Filter.univ_mem⟩
86+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurve.isIntegralCurveOn :=
87+
IsMIntegralCurve.isMIntegralCurveOn
7888

79-
lemma isIntegralCurveAt_iff :
80-
IsIntegralCurveAt γ v t₀ ↔ ∃ s ∈ 𝓝 t₀, IsIntegralCurveOn γ v s := by
89+
lemma isMIntegralCurve_iff_isMIntegralCurveOn :
90+
IsMIntegralCurve γ v ↔ IsMIntegralCurveOn γ v univ :=
91+
fun h ↦ h.isMIntegralCurveOn _, fun h t ↦ (h t (mem_univ _)).hasMFDerivAt Filter.univ_mem⟩
92+
93+
@[deprecated (since := "2025-08-12")] alias isIntegralCurve_iff_isIntegralCurveOn :=
94+
isMIntegralCurve_iff_isMIntegralCurveOn
95+
96+
lemma isMIntegralCurveAt_iff :
97+
IsMIntegralCurveAt γ v t₀ ↔ ∃ s ∈ 𝓝 t₀, IsMIntegralCurveOn γ v s := by
8198
constructor
8299
· intro h
83-
rw [IsIntegralCurveAt, Filter.eventually_iff_exists_mem] at h
100+
rw [IsMIntegralCurveAt, Filter.eventually_iff_exists_mem] at h
84101
obtain ⟨s, hs, h⟩ := h
85102
exact ⟨s, hs, fun t ht ↦ (h t ht).hasMFDerivWithinAt⟩
86103
· rintro ⟨s, hs, h⟩
87-
rw [IsIntegralCurveAt, Filter.eventually_iff_exists_mem]
104+
rw [IsMIntegralCurveAt, Filter.eventually_iff_exists_mem]
88105
obtain ⟨s', h1, h2, h3⟩ := mem_nhds_iff.mp hs
89106
refine ⟨s', h2.mem_nhds h3, ?_⟩
90107
intro t ht
91108
apply (h t (h1 ht)).hasMFDerivAt
92109
rw [mem_nhds_iff]
93110
exact ⟨s', h1, h2, ht⟩
94111

112+
@[deprecated (since := "2025-08-12")] alias isIntegralCurveAt_iff := isMIntegralCurveAt_iff
113+
95114
/-- `γ` is an integral curve for `v` at `t₀` iff `γ` is an integral curve on some interval
96115
containing `t₀`. -/
97-
lemma isIntegralCurveAt_iff' :
98-
IsIntegralCurveAt γ v t₀ ↔ ∃ ε > 0, IsIntegralCurveOn γ v (Metric.ball t₀ ε) := by
99-
rw [isIntegralCurveAt_iff]
116+
lemma isMIntegralCurveAt_iff' :
117+
IsMIntegralCurveAt γ v t₀ ↔ ∃ ε > 0, IsMIntegralCurveOn γ v (Metric.ball t₀ ε) := by
118+
rw [isMIntegralCurveAt_iff]
100119
constructor
101120
· intro ⟨s, hs, h⟩
102121
rw [Metric.mem_nhds_iff] at hs
@@ -105,61 +124,95 @@ lemma isIntegralCurveAt_iff' :
105124
· intro ⟨ε, hε, h⟩
106125
exact ⟨Metric.ball t₀ ε, Metric.ball_mem_nhds _ hε, h⟩
107126

108-
lemma IsIntegralCurve.isIntegralCurveAt (h : IsIntegralCurve γ v) (t : ℝ) :
109-
IsIntegralCurveAt γ v t :=
110-
isIntegralCurveAt_iff.mpr ⟨univ, Filter.univ_mem, fun t _ ↦ (h t).hasMFDerivWithinAt⟩
127+
@[deprecated (since := "2025-08-12")] alias isIntegralCurveAt_iff' := isMIntegralCurveAt_iff'
128+
129+
lemma IsMIntegralCurve.isMIntegralCurveAt (h : IsMIntegralCurve γ v) (t : ℝ) :
130+
IsMIntegralCurveAt γ v t :=
131+
isMIntegralCurveAt_iff.mpr ⟨univ, Filter.univ_mem, fun t _ ↦ (h t).hasMFDerivWithinAt⟩
132+
133+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurve.isIntegralCurveAt :=
134+
IsMIntegralCurve.isMIntegralCurveAt
111135

112-
lemma isIntegralCurve_iff_isIntegralCurveAt :
113-
IsIntegralCurve γ v ↔ ∀ t : ℝ, IsIntegralCurveAt γ v t :=
114-
fun h ↦ h.isIntegralCurveAt, fun h t ↦ by
115-
obtain ⟨s, hs, h⟩ := isIntegralCurveAt_iff.mp (h t)
136+
lemma isMIntegralCurve_iff_isMIntegralCurveAt :
137+
IsMIntegralCurve γ v ↔ ∀ t : ℝ, IsMIntegralCurveAt γ v t :=
138+
fun h ↦ h.isMIntegralCurveAt, fun h t ↦ by
139+
obtain ⟨s, hs, h⟩ := isMIntegralCurveAt_iff.mp (h t)
116140
exact h t (mem_of_mem_nhds hs) |>.hasMFDerivAt hs⟩
117141

118-
lemma IsIntegralCurveOn.mono (h : IsIntegralCurveOn γ v s) (hs : s' ⊆ s) :
119-
IsIntegralCurveOn γ v s' := fun t ht ↦ (h t (hs ht)).mono hs
142+
@[deprecated (since := "2025-08-12")] alias isIntegralCurve_iff_isIntegralCurveAt :=
143+
isMIntegralCurve_iff_isMIntegralCurveAt
120144

121-
lemma IsIntegralCurveAt.hasMFDerivAt (h : IsIntegralCurveAt γ v t₀) :
145+
lemma IsMIntegralCurveOn.mono (h : IsMIntegralCurveOn γ v s) (hs : s' ⊆ s) :
146+
IsMIntegralCurveOn γ v s' := fun t ht ↦ (h t (hs ht)).mono hs
147+
148+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveOn.mono :=
149+
IsMIntegralCurveOn.mono
150+
151+
lemma IsMIntegralCurveAt.hasMFDerivAt (h : IsMIntegralCurveAt γ v t₀) :
122152
HasMFDerivAt 𝓘(ℝ, ℝ) I γ t₀ ((1 : ℝ →L[ℝ] ℝ).smulRight (v (γ t₀))) :=
123-
have ⟨_, hs, h⟩ := isIntegralCurveAt_iff.mp h
153+
have ⟨_, hs, h⟩ := isMIntegralCurveAt_iff.mp h
124154
h t₀ (mem_of_mem_nhds hs) |>.hasMFDerivAt hs
125155

126-
lemma IsIntegralCurveOn.isIntegralCurveAt (h : IsIntegralCurveOn γ v s) (hs : s ∈ 𝓝 t₀) :
127-
IsIntegralCurveAt γ v t₀ := isIntegralCurveAt_iff.mpr ⟨s, hs, h⟩
156+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveAt.hasMFDerivAt :=
157+
IsMIntegralCurveAt.hasMFDerivAt
158+
159+
lemma IsMIntegralCurveOn.isMIntegralCurveAt (h : IsMIntegralCurveOn γ v s) (hs : s ∈ 𝓝 t₀) :
160+
IsMIntegralCurveAt γ v t₀ := isMIntegralCurveAt_iff.mpr ⟨s, hs, h⟩
161+
162+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveOn.isIntegralCurveAt :=
163+
IsMIntegralCurveOn.isMIntegralCurveAt
128164

129165
/-- If `γ` is an integral curve at each `t ∈ s`, it is an integral curve on `s`. -/
130-
lemma IsIntegralCurveAt.isIntegralCurveOn (h : ∀ t ∈ s, IsIntegralCurveAt γ v t) :
131-
IsIntegralCurveOn γ v s := by
166+
lemma IsMIntegralCurveAt.isMIntegralCurveOn (h : ∀ t ∈ s, IsMIntegralCurveAt γ v t) :
167+
IsMIntegralCurveOn γ v s := by
132168
intros t ht
133169
apply HasMFDerivAt.hasMFDerivWithinAt
134170
obtain ⟨s', hs', h⟩ := Filter.eventually_iff_exists_mem.mp (h t ht)
135171
exact h _ (mem_of_mem_nhds hs')
136172

137-
lemma isIntegralCurveOn_iff_isIntegralCurveAt (hs : IsOpen s) :
138-
IsIntegralCurveOn γ v s ↔ ∀ t ∈ s, IsIntegralCurveAt γ v t :=
139-
fun h _ ht ↦ h.isIntegralCurveAt (hs.mem_nhds ht), IsIntegralCurveAt.isIntegralCurveOn⟩
173+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveAt.isIntegralCurveOn :=
174+
IsMIntegralCurveAt.isMIntegralCurveOn
175+
176+
lemma isMIntegralCurveOn_iff_isMIntegralCurveAt (hs : IsOpen s) :
177+
IsMIntegralCurveOn γ v s ↔ ∀ t ∈ s, IsMIntegralCurveAt γ v t :=
178+
fun h _ ht ↦ h.isMIntegralCurveAt (hs.mem_nhds ht), IsMIntegralCurveAt.isMIntegralCurveOn⟩
140179

141-
lemma IsIntegralCurveOn.continuousWithinAt (hγ : IsIntegralCurveOn γ v s) (ht : t₀ ∈ s) :
180+
@[deprecated (since := "2025-08-12")] alias isIntegralCurveOn_iff_isIntegralCurveAt :=
181+
isMIntegralCurveOn_iff_isMIntegralCurveAt
182+
183+
lemma IsMIntegralCurveOn.continuousWithinAt (hγ : IsMIntegralCurveOn γ v s) (ht : t₀ ∈ s) :
142184
ContinuousWithinAt γ s t₀ := (hγ t₀ ht).1
143185

144-
@[deprecated (since := "2025-06-29")] alias IsIntegralCurveOn.continuousAt :=
145-
IsIntegralCurveOn.continuousWithinAt
186+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveOn.continuousAt :=
187+
IsMIntegralCurveOn.continuousWithinAt
188+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveOn.continuousWithinAt :=
189+
IsMIntegralCurveOn.continuousWithinAt
146190

147-
lemma IsIntegralCurveOn.continuousOn (hγ : IsIntegralCurveOn γ v s) :
191+
lemma IsMIntegralCurveOn.continuousOn (hγ : IsMIntegralCurveOn γ v s) :
148192
ContinuousOn γ s := fun t ht ↦ (hγ t ht).continuousWithinAt
149193

150-
lemma IsIntegralCurveAt.continuousAt (hγ : IsIntegralCurveAt γ v t₀) :
194+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveOn.continuousOn :=
195+
IsMIntegralCurveOn.continuousOn
196+
197+
lemma IsMIntegralCurveAt.continuousAt (hγ : IsMIntegralCurveAt γ v t₀) :
151198
ContinuousAt γ t₀ :=
152-
have ⟨_, hs, hγ⟩ := isIntegralCurveAt_iff.mp hγ
199+
have ⟨_, hs, hγ⟩ := isMIntegralCurveAt_iff.mp hγ
153200
hγ.continuousWithinAt (mem_of_mem_nhds hs) |>.continuousAt hs
154201

155-
lemma IsIntegralCurve.continuous (hγ : IsIntegralCurve γ v) : Continuous γ :=
156-
continuous_iff_continuousAt.mpr fun t ↦ (hγ.isIntegralCurveAt t).continuousAt
202+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveAt.continuousAt :=
203+
IsMIntegralCurveAt.continuousAt
204+
205+
lemma IsMIntegralCurve.continuous (hγ : IsMIntegralCurve γ v) : Continuous γ :=
206+
continuous_iff_continuousAt.mpr fun t ↦ (hγ.isMIntegralCurveAt t).continuousAt
207+
208+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurve.continuous :=
209+
IsMIntegralCurve.continuous
157210

158211
variable [IsManifold I 1 M]
159212

160213
/-- If `γ` is an integral curve of a vector field `v`, then `γ t` is tangent to `v (γ t)` when
161214
expressed in the local chart around the initial point `γ t₀`. -/
162-
lemma IsIntegralCurveOn.hasDerivWithinAt (hγ : IsIntegralCurveOn γ v s) {t : ℝ} (ht : t ∈ s)
215+
lemma IsMIntegralCurveOn.hasDerivWithinAt (hγ : IsMIntegralCurveOn γ v s) {t : ℝ} (ht : t ∈ s)
163216
(hsrc : γ t ∈ (extChartAt I (γ t₀)).source) :
164217
HasDerivWithinAt ((extChartAt I (γ t₀)) ∘ γ)
165218
(tangentCoordChange I (γ t) (γ t₀) (γ t) (v (γ t))) s t := by
@@ -175,10 +228,10 @@ lemma IsIntegralCurveOn.hasDerivWithinAt (hγ : IsIntegralCurveOn γ v s) {t :
175228
mfderiv_chartAt_eq_tangentCoordChange hsrc]
176229
rfl
177230

178-
@[deprecated (since := "2025-06-29")] alias IsIntegralCurveOn.hasDerivAt :=
179-
IsIntegralCurveOn.hasDerivWithinAt
231+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveOn.hasDerivWithinAt :=
232+
IsMIntegralCurveOn.hasDerivWithinAt
180233

181-
lemma IsIntegralCurveAt.eventually_hasDerivAt (hγ : IsIntegralCurveAt γ v t₀) :
234+
lemma IsMIntegralCurveAt.eventually_hasDerivAt (hγ : IsMIntegralCurveAt γ v t₀) :
182235
∀ᶠ t in 𝓝 t₀, HasDerivAt ((extChartAt I (γ t₀)) ∘ γ)
183236
(tangentCoordChange I (γ t) (γ t₀) (γ t) (v (γ t))) t := by
184237
apply eventually_mem_nhds_iff.mpr
@@ -194,3 +247,6 @@ lemma IsIntegralCurveAt.eventually_hasDerivAt (hγ : IsIntegralCurveAt γ v t₀
194247
← ContinuousLinearMap.one_apply (R₁ := ℝ) a, ← ContinuousLinearMap.smulRight_apply,
195248
mfderiv_chartAt_eq_tangentCoordChange hsrc]
196249
rfl
250+
251+
@[deprecated (since := "2025-08-12")] alias IsIntegralCurveAt.eventually_hasDerivAt :=
252+
IsMIntegralCurveAt.eventually_hasDerivAt

0 commit comments

Comments
 (0)