Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions Mathlib/Geometry/Manifold/ContMDiffMFDeriv.lean
Original file line number Diff line number Diff line change
Expand Up @@ -274,18 +274,18 @@ variable [Is : IsManifold I 1 M] [I's : IsManifold I' 1 M']
is `C^m` when `m+1 ≤ n`. -/
theorem ContMDiffOn.contMDiffOn_tangentMapWithin
(hf : CMDiff[s] n f) (hmn : m + 1 ≤ n) (hs : UniqueMDiffOn I s) :
CMDiff[(π E (TangentSpace I) ⁻¹' s)] m (tangentMapWithin I I' f s) := by
CMDiff[(π E (TangentSpace I) ⁻¹' s)] m (tangentMap[s] f) := by
intro x₀ hx₀
let s' : Set (TangentBundle I M) := (π E (TangentSpace I) ⁻¹' s)
let b₁ : TangentBundle I M → M := fun p ↦ p.1
let v : Π (y : TangentBundle I M), TangentSpace I (b₁ y) := fun y ↦ y.2
let v : Π (y : TangentBundle I M), TangentSpace% (b₁ y) := fun y ↦ y.2
have hv : ContMDiffWithinAt I.tangent I.tangent m (fun y ↦ (v y : TangentBundle I M)) s' x₀ :=
contMDiffWithinAt_id
let b₂ : TangentBundle I M → M' := f ∘ b₁
have hb₂ : CMDiffAt[s'] m b₂ x₀ :=
((hf (b₁ x₀) hx₀).of_le (le_self_add.trans hmn)).comp _
(contMDiffWithinAt_proj (TangentSpace I)) (fun x h ↦ h)
let ϕ : Π (y : TangentBundle I M), TangentSpace I (b₁ y) →L[𝕜] TangentSpace I' (b₂ y) :=
let ϕ : Π (y : TangentBundle I M), TangentSpace% (b₁ y) →L[𝕜] TangentSpace% (b₂ y) :=
fun y ↦ mfderiv[s] f (b₁ y)
have hϕ : CMDiffAt[s'] m (fun y ↦ ContinuousLinearMap.inCoordinates E (TangentSpace I (M := M)) E'
(TangentSpace I' (M := M')) (b₁ x₀) (b₁ y) (b₂ x₀) (b₂ y) (ϕ y)) x₀ := by
Expand All @@ -299,21 +299,21 @@ theorem ContMDiffOn.contMDiffOn_tangentMapWithin
derivative is continuous there. -/
theorem ContMDiffOn.continuousOn_tangentMapWithin (hf : CMDiff[s] n f) (hmn : 1 ≤ n)
(hs : UniqueMDiffOn I s) :
ContinuousOn (tangentMapWithin I I' f s) (π E (TangentSpace I) ⁻¹' s) := by
have : CMDiff[π E (TangentSpace I) ⁻¹' s] 0 (tangentMapWithin I I' f s) :=
ContinuousOn (tangentMap[s] f) (π E (TangentSpace I) ⁻¹' s) := by
have : CMDiff[π E (TangentSpace I) ⁻¹' s] 0 (tangentMap[s] f) :=
hf.contMDiffOn_tangentMapWithin hmn hs
exact this.continuousOn

/-- If a function is `C^n`, then its bundled derivative is `C^m` when `m+1 ≤ n`. -/
theorem ContMDiff.contMDiff_tangentMap (hf : CMDiff n f) (hmn : m + 1 ≤ n) :
CMDiff m (tangentMap I I' f) := by
CMDiff m (tangentMap% f) := by
rw [← contMDiffOn_univ] at hf ⊢
convert! hf.contMDiffOn_tangentMapWithin hmn uniqueMDiffOn_univ
rw [tangentMapWithin_univ]

/-- If a function is `C^n`, with `1 ≤ n`, then its bundled derivative is continuous. -/
theorem ContMDiff.continuous_tangentMap (hf : CMDiff n f) (hmn : 1 ≤ n) :
Continuous (tangentMap I I' f) := by
Continuous (tangentMap% f) := by
rw [← contMDiffOn_univ] at hf
rw [← continuousOn_univ]
convert! hf.continuousOn_tangentMapWithin hmn uniqueMDiffOn_univ
Expand Down Expand Up @@ -342,7 +342,7 @@ may seem.
TODO define splittings of vector bundles; state this result invariantly. -/
theorem tangentMap_tangentBundle_pure [Is : IsManifold I 1 M]
(p : TangentBundle I M) :
tangentMap I I.tangent (zeroSection E (TangentSpace I)) p = ⟨⟨p.proj, 0⟩, ⟨p.2, 0⟩⟩ := by
tangentMap% (zeroSection (B := M) E (TangentSpace I)) p = ⟨⟨p.proj, 0⟩, ⟨p.2, 0⟩⟩ := by
rcases p with ⟨x, v⟩
have N : I.symm ⁻¹' (chartAt H x).target ∈ 𝓝 (I ((chartAt H x) x)) := by
apply IsOpen.mem_nhds
Expand Down Expand Up @@ -404,7 +404,7 @@ bundles. -/

lemma equivTangentBundleProd_eq_tangentMap_prod_tangentMap :
equivTangentBundleProd I M I' M' = fun (p : TangentBundle (I.prod I') (M × M')) ↦
(tangentMap (I.prod I') I Prod.fst p, tangentMap (I.prod I') I' Prod.snd p) := by
(tangentMap% (@Prod.fst M M') p, tangentMap% (@Prod.snd M M') p) := by
simp only [tangentMap_prodFst, tangentMap_prodSnd]; rfl

variable [IsManifold I 1 M] [IsManifold I' 1 M']
Expand Down
8 changes: 4 additions & 4 deletions Mathlib/Geometry/Manifold/GroupLieAlgebra.lean
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ variable (I G) in
`GroupLieAlgebra` instead of `LieAlgebra` as the latter is taken as a generic class. -/
@[to_additive /-- The Lie algebra of an additive Lie group, i.e., its tangent space at zero. We use
the word `AddGroupLieAlgebra` instead of `LieAlgebra` as the latter is taken as a generic class. -/]
abbrev GroupLieAlgebra : Type _ := TangentSpace I (1 : G)
abbrev GroupLieAlgebra : Type _ := TangentSpace% (1 : G)

/-- The invariant vector field associated to a vector `v` in the Lie algebra. At a point `g`, it
is given by the image of `v` under left-multiplication by `g`. -/
@[to_additive /-- The invariant vector field associated to a vector `v` in the Lie algebra. At a
point `g`, it is given by the image of `v` under left-addition by `g`. -/]
noncomputable def mulInvariantVectorField (v : GroupLieAlgebra I G) (g : G) : TangentSpace I g :=
noncomputable def mulInvariantVectorField (v : GroupLieAlgebra I G) (g : G) : TangentSpace% g :=
mfderiv% (g * ·) (1 : G) v

set_option backward.isDefEq.respectTransparency false in
Expand Down Expand Up @@ -134,7 +134,7 @@ lemma mpullback_mulInvariantVectorField (g : G) (v : GroupLieAlgebra I G) :

set_option backward.isDefEq.respectTransparency false in
@[to_additive]
lemma mulInvariantVectorField_eq_mpullback (g : G) (V : Π (g : G), TangentSpace I g) :
lemma mulInvariantVectorField_eq_mpullback (g : G) (V : Π (g : G), TangentSpace% g) :
mulInvariantVectorField (V 1) g = mpullback I I (g⁻¹ * ·) V g := by
have A : 1 = g⁻¹ * g := by simp
simp only [mulInvariantVectorField, mpullback, inverse_mfderiv_mul_left]
Expand Down Expand Up @@ -171,7 +171,7 @@ theorem contMDiff_mulInvariantVectorField (v : GroupLieAlgebra I G) :
(equivTangentBundleProd I G I G).symm
have S₂ : CMDiff (minSmoothness 𝕜 2) F₂ := contMDiff_equivTangentBundleProd_symm
let F₃ : TangentBundle (I.prod I) (G × G) → TangentBundle I G :=
tangentMap (I.prod I) I (fun (p : G × G) ↦ p.1 * p.2)
tangentMap% (fun (p : G × G) ↦ p.1 * p.2)
have S₃ : CMDiff (minSmoothness 𝕜 2) F₃ := by
apply ContMDiff.contMDiff_tangentMap _ (m := minSmoothness 𝕜 2) le_rfl
rw [A]
Expand Down
9 changes: 5 additions & 4 deletions Mathlib/Geometry/Manifold/IntegralCurve/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Authors: Winston Yin
module

public import Mathlib.Geometry.Manifold.MFDeriv.Tangent
public import Mathlib.Geometry.Manifold.Notation

/-!
# Integral curves of vector fields on a manifold
Expand Down Expand Up @@ -62,21 +63,21 @@ variable
/-- If `γ : ℝ → M` is $C^1$ on `s : Set ℝ` and `v` is a vector field on `M`,
`IsMIntegralCurveOn γ v s` means `γ t` is tangent to `v (γ t)` for all `t ∈ s`. The value of `γ`
outside of `s` is irrelevant and considered junk. -/
def IsMIntegralCurveOn (γ : ℝ → M) (v : (x : M) → TangentSpace I x) (s : Set ℝ) : Prop :=
def IsMIntegralCurveOn (γ : ℝ → M) (v : (x : M) → TangentSpace% x) (s : Set ℝ) : Prop :=
∀ t ∈ s, HasMFDerivAt[s] γ t ((1 : ℝ →L[ℝ] ℝ).smulRight <| v (γ t))

/-- If `v` is a vector field on `M` and `t₀ : ℝ`, `IsMIntegralCurveAt γ v t₀` means `γ : ℝ → M` is a
local integral curve of `v` in a neighbourhood containing `t₀`. The value of `γ` outside of this
interval is irrelevant and considered junk. -/
def IsMIntegralCurveAt (γ : ℝ → M) (v : (x : M) → TangentSpace I x) (t₀ : ℝ) : Prop :=
def IsMIntegralCurveAt (γ : ℝ → M) (v : (x : M) → TangentSpace% x) (t₀ : ℝ) : Prop :=
∀ᶠ t in 𝓝 t₀, HasMFDerivAt% γ t ((1 : ℝ →L[ℝ] ℝ).smulRight <| v (γ t))

/-- If `v : M → TM` is a vector field on `M`, `IsMIntegralCurve γ v` means `γ : ℝ → M` is a global
integral curve of `v`. That is, `γ t` is tangent to `v (γ t)` for all `t : ℝ`. -/
def IsMIntegralCurve (γ : ℝ → M) (v : (x : M) → TangentSpace I x) : Prop :=
def IsMIntegralCurve (γ : ℝ → M) (v : (x : M) → TangentSpace% x) : Prop :=
∀ t : ℝ, HasMFDerivAt% γ t ((1 : ℝ →L[ℝ] ℝ).smulRight (v (γ t)))

variable {γ γ' : ℝ → M} {v : (x : M) → TangentSpace I x} {s s' : Set ℝ} {t₀ : ℝ}
variable {γ γ' : ℝ → M} {v : (x : M) → TangentSpace% x} {s s' : Set ℝ} {t₀ : ℝ}

lemma IsMIntegralCurve.isMIntegralCurveOn (h : IsMIntegralCurve γ v) (s : Set ℝ) :
IsMIntegralCurveOn γ v s := fun t _ ↦ (h t).hasMFDerivWithinAt
Expand Down
14 changes: 7 additions & 7 deletions Mathlib/Geometry/Manifold/MFDeriv/NormedSpace.lean
Original file line number Diff line number Diff line change
Expand Up @@ -276,15 +276,15 @@ This lemma phrases the formula using the equiv `NormedSpace.fromTangentSpace`, w
canonical identification. (It would also be possible to phrase the formula without this equiv,
instead using casting and definitional abuse.) -/
private lemma HasMFDerivAt.smul
{f' : TangentSpace I x →L[𝕜] 𝕜}
{f' : TangentSpace% x →L[𝕜] 𝕜}
(hs : HasMFDerivAt% f x ((fromTangentSpace (f x)).symm.toContinuousLinearMap ∘L f'))
{g' : TangentSpace I x →L[𝕜] V}
{g' : TangentSpace% x →L[𝕜] V}
(hg : HasMFDerivAt% g x ((fromTangentSpace (g x)).symm.toContinuousLinearMap ∘L g')) :
-- canonically identify `g'` with a linear map into the tangent space at `(f • g) x`
letI g'_ : TangentSpace I x →L[𝕜] TangentSpace 𝓘(𝕜, V) ((f • g) x) :=
letI g'_ : TangentSpace% x →L[𝕜] TangentSpace 𝓘(𝕜, V) ((f • g) x) :=
(fromTangentSpace _).symm.toContinuousLinearMap ∘L g'
-- canonically identify `g x` with a linear map into a tangent space at `(f • g) x`
letI gx : 𝕜 →L[𝕜] TangentSpace 𝓘(𝕜, V) ((f • g) x) :=
letI gx : 𝕜 →L[𝕜] TangentSpace% ((f • g) x) :=
toSpanSingleton 𝕜 ((fromTangentSpace _).symm (g x))
-- now the main statement typechecks
HasMFDerivAt% (f • g) x (f x • g'_ + gx ∘L f') := by
Expand Down Expand Up @@ -382,7 +382,7 @@ typecheck we need a phrasing involving the canonical identification `NormedSpace
between the vector space `V` and the tangent space to this vector space at any point. This is
because two different tangent spaces (at `(f • g) x` and `g x`) appear in the equation. -/
private lemma fromTangentSpace_mfderiv_smul_apply (hf : MDiffAt f x) (hg : MDiffAt g x)
(v : TangentSpace I x) :
(v : TangentSpace% x) :
fromTangentSpace _ (mfderiv% (f • g) x v)
= f x • fromTangentSpace _ (mfderiv% g x v) + fromTangentSpace _ (mfderiv% f x v) • g x := by
simpa using congr($(fromTangentSpace_mfderiv_smul hf hg) v)
Expand All @@ -400,7 +400,7 @@ because two different tangent spaces (at `(f • g) x` and `g x`) appear in the
This is a defeq variant of the main lemma `fromTangentSpace_mfderiv_smul_apply`, in which we work in
the tangent space at `f x • g x` (the simp-normal form) rather than at `(f • g) x`. -/
private lemma fromTangentSpace_mfderiv_smul_apply' (hf : MDiffAt f x) (hg : MDiffAt g x)
(v : TangentSpace I x) :
(v : TangentSpace% x) :
fromTangentSpace (f x • g x) (mfderiv% (f • g) x v)
= f x • fromTangentSpace _ (mfderiv% g x v) + fromTangentSpace _ (mfderiv% f x v) • g x :=
fromTangentSpace_mfderiv_smul_apply hf hg v
Expand Down Expand Up @@ -428,7 +428,7 @@ Future: this could be generalised to functions into additive torsors over abelia
-/
@[expose]
noncomputable def mvfderiv (g : M → F) :
Π x : M, TangentSpace I x →L[𝕜] F :=
Π x : M, TangentSpace% x →L[𝕜] F :=
fun x ↦ (NormedSpace.fromTangentSpace <| g x).toContinuousLinearMap ∘L (mfderiv% g x)
@[deprecated (since := "2026-05-17")] alias extDerivFun := mvfderiv

Expand Down
Loading
Loading