|
| 1 | +/- |
| 2 | +Copyright (c) 2024 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.FDeriv.Symmetric |
| 7 | + |
| 8 | +/-! |
| 9 | +# Vector fields in vector spaces |
| 10 | +
|
| 11 | +We study functions of the form `V : E β E` on a vector space, thinking of these as vector fields. |
| 12 | +We define several notions in this context, with the aim to generalize them to vector fields on |
| 13 | +manifolds. |
| 14 | +
|
| 15 | +Notably, we define the pullback of a vector field under a map, as |
| 16 | +`VectorField.pullback π f V x := (fderiv π f x).inverse (V (f x))` (together with the same notion |
| 17 | +within a set). |
| 18 | +
|
| 19 | +In addition to comprehensive API on this notion, the main result is the following: |
| 20 | +* `VectorField.leibniz_identity_lieBracket` is the Leibniz |
| 21 | + identity `[U, [V, W]] = [[U, V], W] + [V, [U, W]]`. |
| 22 | +
|
| 23 | +-/ |
| 24 | + |
| 25 | +open Set |
| 26 | +open scoped Topology |
| 27 | + |
| 28 | +noncomputable section |
| 29 | + |
| 30 | +variable {π : Type*} [NontriviallyNormedField π] |
| 31 | + {E : Type*} [NormedAddCommGroup E] [NormedSpace π E] |
| 32 | + {F : Type*} [NormedAddCommGroup F] [NormedSpace π F] |
| 33 | + {G : Type*} [NormedAddCommGroup G] [NormedSpace π G] |
| 34 | + {V W Vβ Wβ : E β E} {s t : Set E} {x : E} |
| 35 | + |
| 36 | +/-! |
| 37 | +### The Lie bracket of vector fields in a vector space |
| 38 | +
|
| 39 | +We define the Lie bracket of two vector fields, and call it `lieBracket π V W x`. We also define |
| 40 | +a version localized to sets, `lieBracketWithin π V W s x`. We copy the relevant API |
| 41 | +of `fderivWithin` and `fderiv` for these notions to get a comprehensive API. |
| 42 | +-/ |
| 43 | + |
| 44 | +namespace VectorField |
| 45 | + |
| 46 | +variable (π) in |
| 47 | +/-- The Lie bracket `[V, W] (x)` of two vector fields at a point, defined as |
| 48 | +`DW(x) (V x) - DV(x) (W x)`. -/ |
| 49 | +def lieBracket (V W : E β E) (x : E) : E := |
| 50 | + fderiv π W x (V x) - fderiv π V x (W x) |
| 51 | + |
| 52 | +variable (π) in |
| 53 | +/-- The Lie bracket `[V, W] (x)` of two vector fields within a set at a point, defined as |
| 54 | +`DW(x) (V x) - DV(x) (W x)` where the derivatives are taken inside `s`. -/ |
| 55 | +def lieBracketWithin (V W : E β E) (s : Set E) (x : E) : E := |
| 56 | + fderivWithin π W s x (V x) - fderivWithin π V s x (W x) |
| 57 | + |
| 58 | +lemma lieBracket_eq : |
| 59 | + lieBracket π V W = fun x β¦ fderiv π W x (V x) - fderiv π V x (W x) := rfl |
| 60 | + |
| 61 | +lemma lieBracketWithin_eq : |
| 62 | + lieBracketWithin π V W s = |
| 63 | + fun x β¦ fderivWithin π W s x (V x) - fderivWithin π V s x (W x) := rfl |
| 64 | + |
| 65 | +@[simp] |
| 66 | +theorem lieBracketWithin_univ : lieBracketWithin π V W univ = lieBracket π V W := by |
| 67 | + ext1 x |
| 68 | + simp [lieBracketWithin, lieBracket] |
| 69 | + |
| 70 | +lemma lieBracketWithin_eq_zero_of_eq_zero (hV : V x = 0) (hW : W x = 0) : |
| 71 | + lieBracketWithin π V W s x = 0 := by |
| 72 | + simp [lieBracketWithin, hV, hW] |
| 73 | + |
| 74 | +lemma lieBracket_eq_zero_of_eq_zero (hV : V x = 0) (hW : W x = 0) : |
| 75 | + lieBracket π V W x = 0 := by |
| 76 | + simp [lieBracket, hV, hW] |
| 77 | + |
| 78 | +lemma lieBracketWithin_smul_left {c : π} (hV : DifferentiableWithinAt π V s x) |
| 79 | + (hs : UniqueDiffWithinAt π s x) : |
| 80 | + lieBracketWithin π (c β’ V) W s x = |
| 81 | + c β’ lieBracketWithin π V W s x := by |
| 82 | + simp only [lieBracketWithin, Pi.add_apply, map_add, Pi.smul_apply, map_smul, smul_sub] |
| 83 | + rw [fderivWithin_const_smul' hs hV] |
| 84 | + rfl |
| 85 | + |
| 86 | +lemma lieBracket_smul_left {c : π} (hV : DifferentiableAt π V x) : |
| 87 | + lieBracket π (c β’ V) W x = c β’ lieBracket π V W x := by |
| 88 | + simp only [β differentiableWithinAt_univ, β lieBracketWithin_univ] at hV β’ |
| 89 | + exact lieBracketWithin_smul_left hV uniqueDiffWithinAt_univ |
| 90 | + |
| 91 | +lemma lieBracketWithin_smul_right {c : π} (hW : DifferentiableWithinAt π W s x) |
| 92 | + (hs : UniqueDiffWithinAt π s x) : |
| 93 | + lieBracketWithin π V (c β’ W) s x = |
| 94 | + c β’ lieBracketWithin π V W s x := by |
| 95 | + simp only [lieBracketWithin, Pi.add_apply, map_add, Pi.smul_apply, map_smul, smul_sub] |
| 96 | + rw [fderivWithin_const_smul' hs hW] |
| 97 | + rfl |
| 98 | + |
| 99 | +lemma lieBracket_smul_right {c : π} (hW : DifferentiableAt π W x) : |
| 100 | + lieBracket π V (c β’ W) x = c β’ lieBracket π V W x := by |
| 101 | + simp only [β differentiableWithinAt_univ, β lieBracketWithin_univ] at hW β’ |
| 102 | + exact lieBracketWithin_smul_right hW uniqueDiffWithinAt_univ |
| 103 | + |
| 104 | +lemma lieBracketWithin_add_left (hV : DifferentiableWithinAt π V s x) |
| 105 | + (hVβ : DifferentiableWithinAt π Vβ s x) (hs : UniqueDiffWithinAt π s x) : |
| 106 | + lieBracketWithin π (V + Vβ) W s x = |
| 107 | + lieBracketWithin π V W s x + lieBracketWithin π Vβ W s x := by |
| 108 | + simp only [lieBracketWithin, Pi.add_apply, map_add] |
| 109 | + rw [fderivWithin_add' hs hV hVβ, ContinuousLinearMap.add_apply] |
| 110 | + abel |
| 111 | + |
| 112 | +lemma lieBracket_add_left (hV : DifferentiableAt π V x) (hVβ : DifferentiableAt π Vβ x) : |
| 113 | + lieBracket π (V + Vβ) W x = |
| 114 | + lieBracket π V W x + lieBracket π Vβ W x := by |
| 115 | + simp only [lieBracket, Pi.add_apply, map_add] |
| 116 | + rw [fderiv_add' hV hVβ, ContinuousLinearMap.add_apply] |
| 117 | + abel |
| 118 | + |
| 119 | +lemma lieBracketWithin_add_right (hW : DifferentiableWithinAt π W s x) |
| 120 | + (hWβ : DifferentiableWithinAt π Wβ s x) (hs : UniqueDiffWithinAt π s x) : |
| 121 | + lieBracketWithin π V (W + Wβ) s x = |
| 122 | + lieBracketWithin π V W s x + lieBracketWithin π V Wβ s x := by |
| 123 | + simp only [lieBracketWithin, Pi.add_apply, map_add] |
| 124 | + rw [fderivWithin_add' hs hW hWβ, ContinuousLinearMap.add_apply] |
| 125 | + abel |
| 126 | + |
| 127 | +lemma lieBracket_add_right (hW : DifferentiableAt π W x) (hWβ : DifferentiableAt π Wβ x) : |
| 128 | + lieBracket π V (W + Wβ) x = |
| 129 | + lieBracket π V W x + lieBracket π V Wβ x := by |
| 130 | + simp only [lieBracket, Pi.add_apply, map_add] |
| 131 | + rw [fderiv_add' hW hWβ, ContinuousLinearMap.add_apply] |
| 132 | + abel |
| 133 | + |
| 134 | +lemma lieBracketWithin_swap : lieBracketWithin π V W s = - lieBracketWithin π W V s := by |
| 135 | + ext x; simp [lieBracketWithin] |
| 136 | + |
| 137 | +lemma lieBracket_swap : lieBracket π V W x = - lieBracket π W V x := by |
| 138 | + simp [lieBracket] |
| 139 | + |
| 140 | +@[simp] lemma lieBracketWithin_self : lieBracketWithin π V V s = 0 := by |
| 141 | + ext x; simp [lieBracketWithin] |
| 142 | + |
| 143 | +@[simp] lemma lieBracket_self : lieBracket π V V = 0 := by |
| 144 | + ext x; simp [lieBracket] |
| 145 | + |
| 146 | +lemma _root_.ContDiffWithinAt.lieBracketWithin_vectorField |
| 147 | + {m n : ββ} (hV : ContDiffWithinAt π n V s x) |
| 148 | + (hW : ContDiffWithinAt π n W s x) (hs : UniqueDiffOn π s) (hmn : m + 1 β€ n) (hx : x β s) : |
| 149 | + ContDiffWithinAt π m (lieBracketWithin π V W s) s x := by |
| 150 | + apply ContDiffWithinAt.sub |
| 151 | + Β· exact ContDiffWithinAt.clm_apply (hW.fderivWithin_right hs hmn hx) |
| 152 | + (hV.of_le (le_trans le_self_add hmn)) |
| 153 | + Β· exact ContDiffWithinAt.clm_apply (hV.fderivWithin_right hs hmn hx) |
| 154 | + (hW.of_le (le_trans le_self_add hmn)) |
| 155 | + |
| 156 | +lemma _root_.ContDiffAt.lieBracket_vectorField {m n : ββ} (hV : ContDiffAt π n V x) |
| 157 | + (hW : ContDiffAt π n W x) (hmn : m + 1 β€ n) : |
| 158 | + ContDiffAt π m (lieBracket π V W) x := by |
| 159 | + rw [β contDiffWithinAt_univ] at hV hW β’ |
| 160 | + simp_rw [β lieBracketWithin_univ] |
| 161 | + exact hV.lieBracketWithin_vectorField hW uniqueDiffOn_univ hmn (mem_univ _) |
| 162 | + |
| 163 | +lemma _root_.ContDiffOn.lieBracketWithin_vectorField {m n : ββ} (hV : ContDiffOn π n V s) |
| 164 | + (hW : ContDiffOn π n W s) (hs : UniqueDiffOn π s) (hmn : m + 1 β€ n) : |
| 165 | + ContDiffOn π m (lieBracketWithin π V W s) s := |
| 166 | + fun x hx β¦ (hV x hx).lieBracketWithin_vectorField (hW x hx) hs hmn hx |
| 167 | + |
| 168 | +lemma _root_.ContDiff.lieBracket_vectorField {m n : ββ} (hV : ContDiff π n V) |
| 169 | + (hW : ContDiff π n W) (hmn : m + 1 β€ n) : |
| 170 | + ContDiff π m (lieBracket π V W) := |
| 171 | + contDiff_iff_contDiffAt.2 (fun _ β¦ hV.contDiffAt.lieBracket_vectorField hW.contDiffAt hmn) |
| 172 | + |
| 173 | +theorem lieBracketWithin_of_mem_nhdsWithin (st : t β π[s] x) (hs : UniqueDiffWithinAt π s x) |
| 174 | + (hV : DifferentiableWithinAt π V t x) (hW : DifferentiableWithinAt π W t x) : |
| 175 | + lieBracketWithin π V W s x = lieBracketWithin π V W t x := by |
| 176 | + simp [lieBracketWithin, fderivWithin_of_mem_nhdsWithin st hs hV, |
| 177 | + fderivWithin_of_mem_nhdsWithin st hs hW] |
| 178 | + |
| 179 | +theorem lieBracketWithin_subset (st : s β t) (ht : UniqueDiffWithinAt π s x) |
| 180 | + (hV : DifferentiableWithinAt π V t x) (hW : DifferentiableWithinAt π W t x) : |
| 181 | + lieBracketWithin π V W s x = lieBracketWithin π V W t x := |
| 182 | + lieBracketWithin_of_mem_nhdsWithin (nhdsWithin_mono _ st self_mem_nhdsWithin) ht hV hW |
| 183 | + |
| 184 | +theorem lieBracketWithin_inter (ht : t β π x) : |
| 185 | + lieBracketWithin π V W (s β© t) x = lieBracketWithin π V W s x := by |
| 186 | + simp [lieBracketWithin, fderivWithin_inter, ht] |
| 187 | + |
| 188 | +theorem lieBracketWithin_of_mem_nhds (h : s β π x) : |
| 189 | + lieBracketWithin π V W s x = lieBracket π V W x := by |
| 190 | + rw [β lieBracketWithin_univ, β univ_inter s, lieBracketWithin_inter h] |
| 191 | + |
| 192 | +theorem lieBracketWithin_of_isOpen (hs : IsOpen s) (hx : x β s) : |
| 193 | + lieBracketWithin π V W s x = lieBracket π V W x := |
| 194 | + lieBracketWithin_of_mem_nhds (hs.mem_nhds hx) |
| 195 | + |
| 196 | +theorem lieBracketWithin_eq_lieBracket (hs : UniqueDiffWithinAt π s x) |
| 197 | + (hV : DifferentiableAt π V x) (hW : DifferentiableAt π W x) : |
| 198 | + lieBracketWithin π V W s x = lieBracket π V W x := by |
| 199 | + simp [lieBracketWithin, lieBracket, fderivWithin_eq_fderiv, hs, hV, hW] |
| 200 | + |
| 201 | +/-- Variant of `lieBracketWithin_congr_set` where one requires the sets to coincide only in |
| 202 | +the complement of a point. -/ |
| 203 | +theorem lieBracketWithin_congr_set' (y : E) (h : s =αΆ [π[{y}αΆ] x] t) : |
| 204 | + lieBracketWithin π V W s x = lieBracketWithin π V W t x := by |
| 205 | + simp [lieBracketWithin, fderivWithin_congr_set' _ h] |
| 206 | + |
| 207 | +theorem lieBracketWithin_congr_set (h : s =αΆ [π x] t) : |
| 208 | + lieBracketWithin π V W s x = lieBracketWithin π V W t x := |
| 209 | + lieBracketWithin_congr_set' x <| h.filter_mono inf_le_left |
| 210 | + |
| 211 | +/-- Variant of `lieBracketWithin_eventually_congr_set` where one requires the sets to coincide only |
| 212 | +in the complement of a point. -/ |
| 213 | +theorem lieBracketWithin_eventually_congr_set' (y : E) (h : s =αΆ [π[{y}αΆ] x] t) : |
| 214 | + lieBracketWithin π V W s =αΆ [π x] lieBracketWithin π V W t := |
| 215 | + (eventually_nhds_nhdsWithin.2 h).mono fun _ => lieBracketWithin_congr_set' y |
| 216 | + |
| 217 | +theorem lieBracketWithin_eventually_congr_set (h : s =αΆ [π x] t) : |
| 218 | + lieBracketWithin π V W s =αΆ [π x] lieBracketWithin π V W t := |
| 219 | + lieBracketWithin_eventually_congr_set' x <| h.filter_mono inf_le_left |
| 220 | + |
| 221 | +theorem _root_.DifferentiableWithinAt.lieBracketWithin_congr_mono |
| 222 | + (hV : DifferentiableWithinAt π V s x) (hVs : EqOn Vβ V t) (hVx : Vβ x = V x) |
| 223 | + (hW : DifferentiableWithinAt π W s x) (hWs : EqOn Wβ W t) (hWx : Wβ x = W x) |
| 224 | + (hxt : UniqueDiffWithinAt π t x) (hβ : t β s) : |
| 225 | + lieBracketWithin π Vβ Wβ t x = lieBracketWithin π V W s x := by |
| 226 | + simp [lieBracketWithin, hV.fderivWithin_congr_mono, hW.fderivWithin_congr_mono, hVs, hVx, |
| 227 | + hWs, hWx, hxt, hβ] |
| 228 | + |
| 229 | +theorem _root_.Filter.EventuallyEq.lieBracketWithin_vectorField_eq |
| 230 | + (hV : Vβ =αΆ [π[s] x] V) (hxV : Vβ x = V x) (hW : Wβ =αΆ [π[s] x] W) (hxW : Wβ x = W x) : |
| 231 | + lieBracketWithin π Vβ Wβ s x = lieBracketWithin π V W s x := by |
| 232 | + simp only [lieBracketWithin, hV.fderivWithin_eq hxV, hW.fderivWithin_eq hxW, hxV, hxW] |
| 233 | + |
| 234 | +theorem _root_.Filter.EventuallyEq.lieBracketWithin_vectorField_eq_of_mem |
| 235 | + (hV : Vβ =αΆ [π[s] x] V) (hW : Wβ =αΆ [π[s] x] W) (hx : x β s) : |
| 236 | + lieBracketWithin π Vβ Wβ s x = lieBracketWithin π V W s x := |
| 237 | + hV.lieBracketWithin_vectorField_eq (mem_of_mem_nhdsWithin hx hV :) |
| 238 | + hW (mem_of_mem_nhdsWithin hx hW :) |
| 239 | + |
| 240 | +/-- If vector fields coincide on a neighborhood of a point within a set, then the Lie brackets |
| 241 | +also coincide on a neighborhood of this point within this set. Version where one considers the Lie |
| 242 | +bracket within a subset. -/ |
| 243 | +theorem _root_.Filter.EventuallyEq.lieBracketWithin_vectorField' |
| 244 | + (hV : Vβ =αΆ [π[s] x] V) (hW : Wβ =αΆ [π[s] x] W) (ht : t β s) : |
| 245 | + lieBracketWithin π Vβ Wβ t =αΆ [π[s] x] lieBracketWithin π V W t := by |
| 246 | + filter_upwards [hV.fderivWithin' ht (π := π), hW.fderivWithin' ht (π := π), hV, hW] |
| 247 | + with x hV' hW' hV hW |
| 248 | + simp [lieBracketWithin, hV', hW', hV, hW] |
| 249 | + |
| 250 | +protected theorem _root_.Filter.EventuallyEq.lieBracketWithin_vectorField |
| 251 | + (hV : Vβ =αΆ [π[s] x] V) (hW : Wβ =αΆ [π[s] x] W) : |
| 252 | + lieBracketWithin π Vβ Wβ s =αΆ [π[s] x] lieBracketWithin π V W s := |
| 253 | + hV.lieBracketWithin_vectorField' hW Subset.rfl |
| 254 | + |
| 255 | +protected theorem _root_.Filter.EventuallyEq.lieBracketWithin_vectorField_eq_of_insert |
| 256 | + (hV : Vβ =αΆ [π[insert x s] x] V) (hW : Wβ =αΆ [π[insert x s] x] W) : |
| 257 | + lieBracketWithin π Vβ Wβ s x = lieBracketWithin π V W s x := by |
| 258 | + apply mem_of_mem_nhdsWithin (mem_insert x s) (hV.lieBracketWithin_vectorField' hW |
| 259 | + (subset_insert x s)) |
| 260 | + |
| 261 | +theorem _root_.Filter.EventuallyEq.lieBracketWithin_vectorField_eq_nhds |
| 262 | + (hV : Vβ =αΆ [π x] V) (hW : Wβ =αΆ [π x] W) : |
| 263 | + lieBracketWithin π Vβ Wβ s x = lieBracketWithin π V W s x := |
| 264 | + (hV.filter_mono nhdsWithin_le_nhds).lieBracketWithin_vectorField_eq hV.self_of_nhds |
| 265 | + (hW.filter_mono nhdsWithin_le_nhds) hW.self_of_nhds |
| 266 | + |
| 267 | +theorem lieBracketWithin_congr |
| 268 | + (hV : EqOn Vβ V s) (hVx : Vβ x = V x) (hW : EqOn Wβ W s) (hWx : Wβ x = W x) : |
| 269 | + lieBracketWithin π Vβ Wβ s x = lieBracketWithin π V W s x := |
| 270 | + (hV.eventuallyEq.filter_mono inf_le_right).lieBracketWithin_vectorField_eq hVx |
| 271 | + (hW.eventuallyEq.filter_mono inf_le_right) hWx |
| 272 | + |
| 273 | +/-- Version of `lieBracketWithin_congr` in which one assumes that the point belongs to the |
| 274 | +given set. -/ |
| 275 | +theorem lieBracketWithin_congr' (hV : EqOn Vβ V s) (hW : EqOn Wβ W s) (hx : x β s) : |
| 276 | + lieBracketWithin π Vβ Wβ s x = lieBracketWithin π V W s x := |
| 277 | + lieBracketWithin_congr hV (hV hx) hW (hW hx) |
| 278 | + |
| 279 | +theorem _root_.Filter.EventuallyEq.lieBracket_vectorField_eq |
| 280 | + (hV : Vβ =αΆ [π x] V) (hW : Wβ =αΆ [π x] W) : |
| 281 | + lieBracket π Vβ Wβ x = lieBracket π V W x := by |
| 282 | + rw [β lieBracketWithin_univ, β lieBracketWithin_univ, hV.lieBracketWithin_vectorField_eq_nhds hW] |
| 283 | + |
| 284 | +protected theorem _root_.Filter.EventuallyEq.lieBracket_vectorField |
| 285 | + (hV : Vβ =αΆ [π x] V) (hW : Wβ =αΆ [π x] W) : lieBracket π Vβ Wβ =αΆ [π x] lieBracket π V W := by |
| 286 | + filter_upwards [hV.eventuallyEq_nhds, hW.eventuallyEq_nhds] with y hVy hWy |
| 287 | + exact hVy.lieBracket_vectorField_eq hWy |
| 288 | + |
| 289 | +/-- The Lie bracket of vector fields in vector spaces satisfies the Leibniz identity |
| 290 | +`[U, [V, W]] = [[U, V], W] + [V, [U, W]]`. -/ |
| 291 | +lemma leibniz_identity_lieBracketWithin_of_isSymmSndFDerivWithinAt |
| 292 | + {U V W : E β E} {s : Set E} {x : E} (hs : UniqueDiffOn π s) (hx : x β s) |
| 293 | + (hU : ContDiffWithinAt π 2 U s x) (hV : ContDiffWithinAt π 2 V s x) |
| 294 | + (hW : ContDiffWithinAt π 2 W s x) |
| 295 | + (h'U : IsSymmSndFDerivWithinAt π U s x) (h'V : IsSymmSndFDerivWithinAt π V s x) |
| 296 | + (h'W : IsSymmSndFDerivWithinAt π W s x) : |
| 297 | + lieBracketWithin π U (lieBracketWithin π V W s) s x = |
| 298 | + lieBracketWithin π (lieBracketWithin π U V s) W s x |
| 299 | + + lieBracketWithin π V (lieBracketWithin π U W s) s x := by |
| 300 | + simp only [lieBracketWithin_eq, map_sub] |
| 301 | + have auxβ {U V : E β E} (hU : ContDiffWithinAt π 2 U s x) (hV : ContDiffWithinAt π 2 V s x) : |
| 302 | + DifferentiableWithinAt π (fun x β¦ (fderivWithin π V s x) (U x)) s x := |
| 303 | + have := hV.fderivWithin_right_apply (hU.of_le one_le_two) hs le_rfl hx |
| 304 | + this.differentiableWithinAt le_rfl |
| 305 | + have auxβ {U V : E β E} (hU : ContDiffWithinAt π 2 U s x) (hV : ContDiffWithinAt π 2 V s x) : |
| 306 | + fderivWithin π (fun y β¦ (fderivWithin π U s y) (V y)) s x = |
| 307 | + (fderivWithin π U s x).comp (fderivWithin π V s x) + |
| 308 | + (fderivWithin π (fderivWithin π U s) s x).flip (V x) := by |
| 309 | + refine fderivWithin_clm_apply (hs x hx) ?_ (hV.differentiableWithinAt one_le_two) |
| 310 | + exact (hU.fderivWithin_right hs le_rfl hx).differentiableWithinAt le_rfl |
| 311 | + rw [fderivWithin_sub (hs x hx) (auxβ hV hW) (auxβ hW hV)] |
| 312 | + rw [fderivWithin_sub (hs x hx) (auxβ hU hV) (auxβ hV hU)] |
| 313 | + rw [fderivWithin_sub (hs x hx) (auxβ hU hW) (auxβ hW hU)] |
| 314 | + rw [auxβ hW hV, auxβ hV hW, auxβ hV hU, auxβ hU hV, auxβ hW hU, auxβ hU hW] |
| 315 | + simp only [ContinuousLinearMap.coe_sub', Pi.sub_apply, ContinuousLinearMap.add_apply, |
| 316 | + ContinuousLinearMap.coe_comp', Function.comp_apply, ContinuousLinearMap.flip_apply, h'V.eq, |
| 317 | + h'U.eq, h'W.eq] |
| 318 | + abel |
| 319 | + |
| 320 | +/-- The Lie bracket of vector fields in vector spaces satisfies the Leibniz identity |
| 321 | +`[U, [V, W]] = [[U, V], W] + [V, [U, W]]`. -/ |
| 322 | +lemma leibniz_identity_lieBracketWithin [IsRCLikeNormedField π] {U V W : E β E} {s : Set E} {x : E} |
| 323 | + (hs : UniqueDiffOn π s) (h'x : x β closure (interior s)) (hx : x β s) |
| 324 | + (hU : ContDiffWithinAt π 2 U s x) (hV : ContDiffWithinAt π 2 V s x) |
| 325 | + (hW : ContDiffWithinAt π 2 W s x) : |
| 326 | + lieBracketWithin π U (lieBracketWithin π V W s) s x = |
| 327 | + lieBracketWithin π (lieBracketWithin π U V s) W s x |
| 328 | + + lieBracketWithin π V (lieBracketWithin π U W s) s x := by |
| 329 | + apply leibniz_identity_lieBracketWithin_of_isSymmSndFDerivWithinAt hs hx hU hV hW |
| 330 | + Β· exact hU.isSymmSndFDerivWithinAt le_rfl hs h'x hx |
| 331 | + Β· exact hV.isSymmSndFDerivWithinAt le_rfl hs h'x hx |
| 332 | + Β· exact hW.isSymmSndFDerivWithinAt le_rfl hs h'x hx |
| 333 | + |
| 334 | +/-- The Lie bracket of vector fields in vector spaces satisfies the Leibniz identity |
| 335 | +`[U, [V, W]] = [[U, V], W] + [V, [U, W]]`. -/ |
| 336 | +lemma leibniz_identity_lieBracket [IsRCLikeNormedField π] {U V W : E β E} {x : E} |
| 337 | + (hU : ContDiffAt π 2 U x) (hV : ContDiffAt π 2 V x) (hW : ContDiffAt π 2 W x) : |
| 338 | + lieBracket π U (lieBracket π V W) x = |
| 339 | + lieBracket π (lieBracket π U V) W x + lieBracket π V (lieBracket π U W) x := by |
| 340 | + simp only [β lieBracketWithin_univ, β contDiffWithinAt_univ] at hU hV hW β’ |
| 341 | + exact leibniz_identity_lieBracketWithin uniqueDiffOn_univ (by simp) (mem_univ _) hU hV hW |
| 342 | + |
| 343 | +end VectorField |
0 commit comments