@@ -48,6 +48,7 @@ the addition and negation operations are smooth. -/
48
48
class LieAddGroup {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
49
49
{E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
50
50
[AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothAdd I G : Prop where
51
+ /-- Negation is smooth in an additive Lie group. -/
51
52
smooth_neg : Smooth I I fun a : G => -a
52
53
#align lie_add_group LieAddGroup
53
54
@@ -58,6 +59,7 @@ the multiplication and inverse operations are smooth. -/
58
59
class LieGroup {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
59
60
{E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
60
61
[Group G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothMul I G : Prop where
62
+ /-- Inversion is smooth in a Lie group. -/
61
63
smooth_inv : Smooth I I fun a : G => a⁻¹
62
64
#align lie_group LieGroup
63
65
@@ -226,3 +228,118 @@ instance normedSpaceLieAddGroup {𝕜 : Type _} [NontriviallyNormedField 𝕜] {
226
228
[NormedAddCommGroup E] [NormedSpace 𝕜 E] : LieAddGroup 𝓘(𝕜, E) E where
227
229
smooth_neg := contDiff_neg.contMDiff
228
230
#align normed_space_lie_add_group normedSpaceLieAddGroup
231
+
232
+ section HasSmoothInv
233
+
234
+ -- See note [Design choices about smooth algebraic structures]
235
+ /-- A smooth manifold with `0` and `Inv` such that `fun x ↦ x⁻¹` is smooth at all nonzero points.
236
+ Any complete normed (semi)field has this property. -/
237
+ class SmoothInv₀ {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
238
+ {E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
239
+ [Inv G] [Zero G] [TopologicalSpace G] [ChartedSpace H G] : Prop where
240
+ /-- Inversion is smooth away from `0`. -/
241
+ smoothAt_inv₀ : ∀ ⦃x : G⦄, x ≠ 0 → SmoothAt I I (fun y ↦ y⁻¹) x
242
+
243
+ instance {𝕜 : Type _} [NontriviallyNormedField 𝕜] [CompleteSpace 𝕜] : SmoothInv₀ 𝓘(𝕜) 𝕜 :=
244
+ { smoothAt_inv₀ := by
245
+ intro x hx
246
+ change ContMDiffAt 𝓘(𝕜) 𝓘(𝕜) ⊤ Inv.inv x
247
+ rw [contMDiffAt_iff_contDiffAt]
248
+ exact contDiffAt_inv 𝕜 hx }
249
+
250
+ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
251
+ [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) {G : Type _}
252
+ [TopologicalSpace G] [ChartedSpace H G] [Inv G] [Zero G] [SmoothInv₀ I G] {E' : Type _}
253
+ [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type _} [TopologicalSpace H']
254
+ {I' : ModelWithCorners 𝕜 E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
255
+ {n : ℕ∞} {f g : M → G}
256
+
257
+ theorem smoothAt_inv₀ {x : G} (hx : x ≠ 0 ) : SmoothAt I I (fun y ↦ y⁻¹) x :=
258
+ SmoothInv₀.smoothAt_inv₀ hx
259
+
260
+ /-- In a manifold with smooth inverse away from `0`, the inverse is continuous away from `0`.
261
+ This is not an instance for technical reasons, see
262
+ note [Design choices about smooth algebraic structures]. -/
263
+ theorem hasContinuousInv₀_of_hasSmoothInv₀ : HasContinuousInv₀ G :=
264
+ { continuousAt_inv₀ := fun _ hx ↦ (smoothAt_inv₀ I hx).continuousAt }
265
+
266
+ theorem SmoothOn_inv₀ : SmoothOn I I (Inv.inv : G → G) {0 }ᶜ := fun _x hx =>
267
+ (smoothAt_inv₀ I hx).smoothWithinAt
268
+
269
+ variable {I}
270
+
271
+ theorem ContMDiffWithinAt.inv₀ (hf : ContMDiffWithinAt I' I n f s a) (ha : f a ≠ 0 ) :
272
+ ContMDiffWithinAt I' I n (fun x => (f x)⁻¹) s a :=
273
+ (smoothAt_inv₀ I ha).contMDiffAt.comp_contMDiffWithinAt a hf
274
+
275
+ theorem ContMDiffAt.inv₀ (hf : ContMDiffAt I' I n f a) (ha : f a ≠ 0 ) :
276
+ ContMDiffAt I' I n (fun x ↦ (f x)⁻¹) a :=
277
+ (smoothAt_inv₀ I ha).contMDiffAt.comp a hf
278
+
279
+ theorem ContMDiff.inv₀ (hf : ContMDiff I' I n f) (h0 : ∀ x, f x ≠ 0 ) :
280
+ ContMDiff I' I n (fun x ↦ (f x)⁻¹) :=
281
+ fun x ↦ ContMDiffAt.inv₀ (hf x) (h0 x)
282
+
283
+ theorem ContMDiffOn.inv₀ (hf : ContMDiffOn I' I n f s) (h0 : ∀ x ∈ s, f x ≠ 0 ) :
284
+ ContMDiffOn I' I n (fun x => (f x)⁻¹) s :=
285
+ fun x hx ↦ ContMDiffWithinAt.inv₀ (hf x hx) (h0 x hx)
286
+
287
+ theorem SmoothWithinAt.inv₀ (hf : SmoothWithinAt I' I f s a) (ha : f a ≠ 0 ) :
288
+ SmoothWithinAt I' I (fun x => (f x)⁻¹) s a :=
289
+ ContMDiffWithinAt.inv₀ hf ha
290
+
291
+ theorem SmoothAt.inv₀ (hf : SmoothAt I' I f a) (ha : f a ≠ 0 ) :
292
+ SmoothAt I' I (fun x => (f x)⁻¹) a :=
293
+ ContMDiffAt.inv₀ hf ha
294
+
295
+ theorem Smooth.inv₀ (hf : Smooth I' I f) (h0 : ∀ x, f x ≠ 0 ) : Smooth I' I fun x => (f x)⁻¹ :=
296
+ ContMDiff.inv₀ hf h0
297
+
298
+ theorem SmoothOn.inv₀ (hf : SmoothOn I' I f s) (h0 : ∀ x ∈ s, f x ≠ 0 ) :
299
+ SmoothOn I' I (fun x => (f x)⁻¹) s :=
300
+ ContMDiffOn.inv₀ hf h0
301
+
302
+ end HasSmoothInv
303
+
304
+ section Div
305
+
306
+ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
307
+ [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _}
308
+ [TopologicalSpace G] [ChartedSpace H G] [GroupWithZero G] [SmoothInv₀ I G] [SmoothMul I G]
309
+ {E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type _} [TopologicalSpace H']
310
+ {I' : ModelWithCorners 𝕜 E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
311
+ {f g : M → G}
312
+
313
+ theorem ContMDiffWithinAt.div₀
314
+ (hf : ContMDiffWithinAt I' I n f s a) (hg : ContMDiffWithinAt I' I n g s a) (h₀ : g a ≠ 0 ) :
315
+ ContMDiffWithinAt I' I n (f / g) s a := by
316
+ simpa [div_eq_mul_inv] using hf.mul (hg.inv₀ h₀)
317
+
318
+ theorem ContMDiffOn.div₀ (hf : ContMDiffOn I' I n f s) (hg : ContMDiffOn I' I n g s)
319
+ (h₀ : ∀ x ∈ s, g x ≠ 0 ) : ContMDiffOn I' I n (f / g) s := by
320
+ simpa [div_eq_mul_inv] using hf.mul (hg.inv₀ h₀)
321
+
322
+ theorem ContMDiffAt.div₀ (hf : ContMDiffAt I' I n f a) (hg : ContMDiffAt I' I n g a)
323
+ (h₀ : g a ≠ 0 ) : ContMDiffAt I' I n (f / g) a := by
324
+ simpa [div_eq_mul_inv] using hf.mul (hg.inv₀ h₀)
325
+
326
+ theorem ContMDiff.div₀ (hf : ContMDiff I' I n f) (hg : ContMDiff I' I n g) (h₀ : ∀ x, g x ≠ 0 ) :
327
+ ContMDiff I' I n (f / g) := by simpa only [div_eq_mul_inv] using hf.mul (hg.inv₀ h₀)
328
+
329
+ theorem SmoothWithinAt.div₀ (hf : SmoothWithinAt I' I f s a)
330
+ (hg : SmoothWithinAt I' I g s a) (h₀ : g a ≠ 0 ) : SmoothWithinAt I' I (f / g) s a :=
331
+ ContMDiffWithinAt.div₀ hf hg h₀
332
+
333
+ theorem SmoothOn.div₀ (hf : SmoothOn I' I f s) (hg : SmoothOn I' I g s) (h₀ : ∀ x ∈ s, g x ≠ 0 ) :
334
+ SmoothOn I' I (f / g) s :=
335
+ ContMDiffOn.div₀ hf hg h₀
336
+
337
+ theorem SmoothAt.div₀ (hf : SmoothAt I' I f a) (hg : SmoothAt I' I g a) (h₀ : g a ≠ 0 ) :
338
+ SmoothAt I' I (f / g) a :=
339
+ ContMDiffAt.div₀ hf hg h₀
340
+
341
+ theorem Smooth.div₀ (hf : Smooth I' I f) (hg : Smooth I' I g) (h₀ : ∀ x, g x ≠ 0 ) :
342
+ Smooth I' I (f / g) :=
343
+ ContMDiff.div₀ hf hg h₀
344
+
345
+ end Div
0 commit comments