geometry.manifold.algebra.lie_group
โท
Mathlib.Geometry.Manifold.Algebra.LieGroup
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright ยฉ 2020 Nicolรฒ Cavalleri. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Nicolรฒ Cavalleri
-/
-import Mathbin.Geometry.Manifold.Algebra.Monoid
+import Geometry.Manifold.Algebra.Monoid
#align_import geometry.manifold.algebra.lie_group from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright ยฉ 2020 Nicolรฒ Cavalleri. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Nicolรฒ Cavalleri
-
-! This file was ported from Lean 3 source module geometry.manifold.algebra.lie_group
-! leanprover-community/mathlib commit 30faa0c3618ce1472bf6305ae0e3fa56affa3f95
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Geometry.Manifold.Algebra.Monoid
+#align_import geometry.manifold.algebra.lie_group from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
+
/-!
# Lie groups
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Nicolรฒ Cavalleri
! This file was ported from Lean 3 source module geometry.manifold.algebra.lie_group
-! leanprover-community/mathlib commit f9ec187127cc5b381dfcf5f4a22dacca4c20b63d
+! leanprover-community/mathlib commit 30faa0c3618ce1472bf6305ae0e3fa56affa3f95
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.Geometry.Manifold.Algebra.Monoid
/-!
# Lie groups
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
A Lie group is a group that is also a smooth manifold, in which the group operations of
multiplication and inversion are smooth maps. Smoothness of the group multiplication means that
multiplication is a smooth mapping of the product manifold `G` ร `G` into `G`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/fdc286cc6967a012f41b87f76dcd2797b53152af
@@ -51,7 +51,7 @@ open scoped Manifold
the addition and negation operations are smooth. -/
class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
- [AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothAdd I G : Prop where
+ [AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothAdd I G : Prop where
smooth_neg : Smooth I I fun a : G => -a
#align lie_add_group LieAddGroup
-/
@@ -63,7 +63,7 @@ the multiplication and inverse operations are smooth. -/
@[to_additive]
class LieGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
- [Group G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothMul I G : Prop where
+ [Group G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothMul I G : Prop where
smooth_inv : Smooth I I fun a : G => aโปยน
#align lie_group LieGroup
#align lie_add_group LieAddGroup
@@ -258,7 +258,7 @@ instance {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [Topologica
[NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
{I' : ModelWithCorners ๐ E' H'} {G' : Type _} [TopologicalSpace G'] [ChartedSpace H' G']
[Group G'] [LieGroup I' G'] : LieGroup (I.Prod I') (G ร G') :=
- { HasSmoothMul.prod _ _ _ _ with smooth_inv := smooth_fst.inv.prod_mk smooth_snd.inv }
+ { SmoothMul.prod _ _ _ _ with smooth_inv := smooth_fst.inv.prod_mk smooth_snd.inv }
end ProdLieGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -45,6 +45,7 @@ noncomputable section
open scoped Manifold
+#print LieAddGroup /-
-- See note [Design choices about smooth algebraic structures]
/-- A Lie (additive) group is a group and a smooth manifold at the same time in which
the addition and negation operations are smooth. -/
@@ -53,7 +54,9 @@ class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [T
[AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothAdd I G : Prop where
smooth_neg : Smooth I I fun a : G => -a
#align lie_add_group LieAddGroup
+-/
+#print LieGroup /-
-- See note [Design choices about smooth algebraic structures]
/-- A Lie group is a group and a smooth manifold at the same time in which
the multiplication and inverse operations are smooth. -/
@@ -64,6 +67,7 @@ class LieGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [Topo
smooth_inv : Smooth I I fun a : G => aโปยน
#align lie_group LieGroup
#align lie_add_group LieAddGroup
+-/
section LieGroup
@@ -81,12 +85,15 @@ section
variable (I)
+#print smooth_inv /-
@[to_additive]
theorem smooth_inv : Smooth I I fun x : G => xโปยน :=
LieGroup.smooth_inv
#align smooth_inv smooth_inv
#align smooth_neg smooth_neg
+-/
+#print topologicalGroup_of_lieGroup /-
/-- A Lie group is a topological group. This is not an instance for technical reasons,
see note [Design choices about smooth algebraic structures]. -/
@[to_additive
@@ -94,63 +101,81 @@ see note [Design choices about smooth algebraic structures]. -/
theorem topologicalGroup_of_lieGroup : TopologicalGroup G :=
{ continuousMul_of_smooth I with continuous_inv := (smooth_inv I).Continuous }
#align topological_group_of_lie_group topologicalGroup_of_lieGroup
-#align topological_add_group_of_lie_add_group topological_add_group_of_lie_add_group
+#align topological_add_group_of_lie_add_group topologicalAddGroup_of_lieAddGroup
+-/
end
+#print ContMDiffWithinAt.inv /-
@[to_additive]
theorem ContMDiffWithinAt.inv {f : M โ G} {s : Set M} {xโ : M}
(hf : ContMDiffWithinAt I' I n f s xโ) : ContMDiffWithinAt I' I n (fun x => (f x)โปยน) s xโ :=
((smooth_inv I).of_le le_top).ContMDiffAt.ContMDiffWithinAt.comp xโ hf <| Set.mapsTo_univ _ _
#align cont_mdiff_within_at.inv ContMDiffWithinAt.inv
#align cont_mdiff_within_at.neg ContMDiffWithinAt.neg
+-/
+#print ContMDiffAt.inv /-
@[to_additive]
theorem ContMDiffAt.inv {f : M โ G} {xโ : M} (hf : ContMDiffAt I' I n f xโ) :
ContMDiffAt I' I n (fun x => (f x)โปยน) xโ :=
((smooth_inv I).of_le le_top).ContMDiffAt.comp xโ hf
#align cont_mdiff_at.inv ContMDiffAt.inv
#align cont_mdiff_at.neg ContMDiffAt.neg
+-/
+#print ContMDiffOn.inv /-
@[to_additive]
theorem ContMDiffOn.inv {f : M โ G} {s : Set M} (hf : ContMDiffOn I' I n f s) :
ContMDiffOn I' I n (fun x => (f x)โปยน) s := fun x hx => (hf x hx).inv
#align cont_mdiff_on.inv ContMDiffOn.inv
#align cont_mdiff_on.neg ContMDiffOn.neg
+-/
+#print ContMDiff.inv /-
@[to_additive]
theorem ContMDiff.inv {f : M โ G} (hf : ContMDiff I' I n f) : ContMDiff I' I n fun x => (f x)โปยน :=
fun x => (hf x).inv
#align cont_mdiff.inv ContMDiff.inv
#align cont_mdiff.neg ContMDiff.neg
+-/
+#print SmoothWithinAt.inv /-
@[to_additive]
theorem SmoothWithinAt.inv {f : M โ G} {s : Set M} {xโ : M} (hf : SmoothWithinAt I' I f s xโ) :
SmoothWithinAt I' I (fun x => (f x)โปยน) s xโ :=
hf.inv
#align smooth_within_at.inv SmoothWithinAt.inv
#align smooth_within_at.neg SmoothWithinAt.neg
+-/
+#print SmoothAt.inv /-
@[to_additive]
theorem SmoothAt.inv {f : M โ G} {xโ : M} (hf : SmoothAt I' I f xโ) :
SmoothAt I' I (fun x => (f x)โปยน) xโ :=
hf.inv
#align smooth_at.inv SmoothAt.inv
#align smooth_at.neg SmoothAt.neg
+-/
+#print SmoothOn.inv /-
@[to_additive]
theorem SmoothOn.inv {f : M โ G} {s : Set M} (hf : SmoothOn I' I f s) :
SmoothOn I' I (fun x => (f x)โปยน) s :=
hf.inv
#align smooth_on.inv SmoothOn.inv
#align smooth_on.neg SmoothOn.neg
+-/
+#print Smooth.inv /-
@[to_additive]
theorem Smooth.inv {f : M โ G} (hf : Smooth I' I f) : Smooth I' I fun x => (f x)โปยน :=
hf.inv
#align smooth.inv Smooth.inv
#align smooth.neg Smooth.neg
+-/
+#print ContMDiffWithinAt.div /-
@[to_additive]
theorem ContMDiffWithinAt.div {f g : M โ G} {s : Set M} {xโ : M}
(hf : ContMDiffWithinAt I' I n f s xโ) (hg : ContMDiffWithinAt I' I n g s xโ) :
@@ -158,53 +183,68 @@ theorem ContMDiffWithinAt.div {f g : M โ G} {s : Set M} {xโ : M}
exact hf.mul hg.inv
#align cont_mdiff_within_at.div ContMDiffWithinAt.div
#align cont_mdiff_within_at.sub ContMDiffWithinAt.sub
+-/
+#print ContMDiffAt.div /-
@[to_additive]
theorem ContMDiffAt.div {f g : M โ G} {xโ : M} (hf : ContMDiffAt I' I n f xโ)
(hg : ContMDiffAt I' I n g xโ) : ContMDiffAt I' I n (fun x => f x / g x) xโ := by
simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
#align cont_mdiff_at.div ContMDiffAt.div
#align cont_mdiff_at.sub ContMDiffAt.sub
+-/
+#print ContMDiffOn.div /-
@[to_additive]
theorem ContMDiffOn.div {f g : M โ G} {s : Set M} (hf : ContMDiffOn I' I n f s)
(hg : ContMDiffOn I' I n g s) : ContMDiffOn I' I n (fun x => f x / g x) s := by
simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
#align cont_mdiff_on.div ContMDiffOn.div
#align cont_mdiff_on.sub ContMDiffOn.sub
+-/
+#print ContMDiff.div /-
@[to_additive]
theorem ContMDiff.div {f g : M โ G} (hf : ContMDiff I' I n f) (hg : ContMDiff I' I n g) :
ContMDiff I' I n fun x => f x / g x := by simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
#align cont_mdiff.div ContMDiff.div
#align cont_mdiff.sub ContMDiff.sub
+-/
+#print SmoothWithinAt.div /-
@[to_additive]
theorem SmoothWithinAt.div {f g : M โ G} {s : Set M} {xโ : M} (hf : SmoothWithinAt I' I f s xโ)
(hg : SmoothWithinAt I' I g s xโ) : SmoothWithinAt I' I (fun x => f x / g x) s xโ :=
hf.div hg
#align smooth_within_at.div SmoothWithinAt.div
#align smooth_within_at.sub SmoothWithinAt.sub
+-/
+#print SmoothAt.div /-
@[to_additive]
theorem SmoothAt.div {f g : M โ G} {xโ : M} (hf : SmoothAt I' I f xโ) (hg : SmoothAt I' I g xโ) :
SmoothAt I' I (fun x => f x / g x) xโ :=
hf.div hg
#align smooth_at.div SmoothAt.div
#align smooth_at.sub SmoothAt.sub
+-/
+#print SmoothOn.div /-
@[to_additive]
theorem SmoothOn.div {f g : M โ G} {s : Set M} (hf : SmoothOn I' I f s) (hg : SmoothOn I' I g s) :
SmoothOn I' I (f / g) s :=
hf.div hg
#align smooth_on.div SmoothOn.div
#align smooth_on.sub SmoothOn.sub
+-/
+#print Smooth.div /-
@[to_additive]
theorem Smooth.div {f g : M โ G} (hf : Smooth I' I f) (hg : Smooth I' I g) : Smooth I' I (f / g) :=
hf.div hg
#align smooth.div Smooth.div
#align smooth.sub Smooth.sub
+-/
end LieGroup
@@ -225,11 +265,13 @@ end ProdLieGroup
/-! ### Normed spaces are Lie groups -/
-instance normedSpace_lieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
+#print normedSpaceLieAddGroup /-
+instance normedSpaceLieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
[NormedAddCommGroup E] [NormedSpace ๐ E] : LieAddGroup ๐(๐, E) E :=
{
model_space_smooth with
smooth_add := smooth_iff.2 โจcontinuous_add, fun x y => contDiff_add.ContDiffOnโฉ
smooth_neg := smooth_iff.2 โจcontinuous_neg, fun x y => contDiff_neg.ContDiffOnโฉ }
-#align normed_space_lie_add_group normedSpace_lieAddGroup
+#align normed_space_lie_add_group normedSpaceLieAddGroup
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -225,11 +225,11 @@ end ProdLieGroup
/-! ### Normed spaces are Lie groups -/
-instance normedSpaceLieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
+instance normedSpace_lieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
[NormedAddCommGroup E] [NormedSpace ๐ E] : LieAddGroup ๐(๐, E) E :=
{
model_space_smooth with
smooth_add := smooth_iff.2 โจcontinuous_add, fun x y => contDiff_add.ContDiffOnโฉ
smooth_neg := smooth_iff.2 โจcontinuous_neg, fun x y => contDiff_neg.ContDiffOnโฉ }
-#align normed_space_lie_add_group normedSpaceLieAddGroup
+#align normed_space_lie_add_group normedSpace_lieAddGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -99,30 +99,30 @@ theorem topologicalGroup_of_lieGroup : TopologicalGroup G :=
end
@[to_additive]
-theorem ContMdiffWithinAt.inv {f : M โ G} {s : Set M} {xโ : M}
- (hf : ContMdiffWithinAt I' I n f s xโ) : ContMdiffWithinAt I' I n (fun x => (f x)โปยน) s xโ :=
- ((smooth_inv I).of_le le_top).ContMdiffAt.ContMdiffWithinAt.comp xโ hf <| Set.mapsTo_univ _ _
-#align cont_mdiff_within_at.inv ContMdiffWithinAt.inv
-#align cont_mdiff_within_at.neg ContMdiffWithinAt.neg
+theorem ContMDiffWithinAt.inv {f : M โ G} {s : Set M} {xโ : M}
+ (hf : ContMDiffWithinAt I' I n f s xโ) : ContMDiffWithinAt I' I n (fun x => (f x)โปยน) s xโ :=
+ ((smooth_inv I).of_le le_top).ContMDiffAt.ContMDiffWithinAt.comp xโ hf <| Set.mapsTo_univ _ _
+#align cont_mdiff_within_at.inv ContMDiffWithinAt.inv
+#align cont_mdiff_within_at.neg ContMDiffWithinAt.neg
@[to_additive]
-theorem ContMdiffAt.inv {f : M โ G} {xโ : M} (hf : ContMdiffAt I' I n f xโ) :
- ContMdiffAt I' I n (fun x => (f x)โปยน) xโ :=
- ((smooth_inv I).of_le le_top).ContMdiffAt.comp xโ hf
-#align cont_mdiff_at.inv ContMdiffAt.inv
-#align cont_mdiff_at.neg ContMdiffAt.neg
+theorem ContMDiffAt.inv {f : M โ G} {xโ : M} (hf : ContMDiffAt I' I n f xโ) :
+ ContMDiffAt I' I n (fun x => (f x)โปยน) xโ :=
+ ((smooth_inv I).of_le le_top).ContMDiffAt.comp xโ hf
+#align cont_mdiff_at.inv ContMDiffAt.inv
+#align cont_mdiff_at.neg ContMDiffAt.neg
@[to_additive]
-theorem ContMdiffOn.inv {f : M โ G} {s : Set M} (hf : ContMdiffOn I' I n f s) :
- ContMdiffOn I' I n (fun x => (f x)โปยน) s := fun x hx => (hf x hx).inv
-#align cont_mdiff_on.inv ContMdiffOn.inv
-#align cont_mdiff_on.neg ContMdiffOn.neg
+theorem ContMDiffOn.inv {f : M โ G} {s : Set M} (hf : ContMDiffOn I' I n f s) :
+ ContMDiffOn I' I n (fun x => (f x)โปยน) s := fun x hx => (hf x hx).inv
+#align cont_mdiff_on.inv ContMDiffOn.inv
+#align cont_mdiff_on.neg ContMDiffOn.neg
@[to_additive]
-theorem ContMdiff.inv {f : M โ G} (hf : ContMdiff I' I n f) : ContMdiff I' I n fun x => (f x)โปยน :=
+theorem ContMDiff.inv {f : M โ G} (hf : ContMDiff I' I n f) : ContMDiff I' I n fun x => (f x)โปยน :=
fun x => (hf x).inv
-#align cont_mdiff.inv ContMdiff.inv
-#align cont_mdiff.neg ContMdiff.neg
+#align cont_mdiff.inv ContMDiff.inv
+#align cont_mdiff.neg ContMDiff.neg
@[to_additive]
theorem SmoothWithinAt.inv {f : M โ G} {s : Set M} {xโ : M} (hf : SmoothWithinAt I' I f s xโ) :
@@ -152,32 +152,32 @@ theorem Smooth.inv {f : M โ G} (hf : Smooth I' I f) : Smooth I' I fun x => (f
#align smooth.neg Smooth.neg
@[to_additive]
-theorem ContMdiffWithinAt.div {f g : M โ G} {s : Set M} {xโ : M}
- (hf : ContMdiffWithinAt I' I n f s xโ) (hg : ContMdiffWithinAt I' I n g s xโ) :
- ContMdiffWithinAt I' I n (fun x => f x / g x) s xโ := by simp_rw [div_eq_mul_inv];
+theorem ContMDiffWithinAt.div {f g : M โ G} {s : Set M} {xโ : M}
+ (hf : ContMDiffWithinAt I' I n f s xโ) (hg : ContMDiffWithinAt I' I n g s xโ) :
+ ContMDiffWithinAt I' I n (fun x => f x / g x) s xโ := by simp_rw [div_eq_mul_inv];
exact hf.mul hg.inv
-#align cont_mdiff_within_at.div ContMdiffWithinAt.div
-#align cont_mdiff_within_at.sub ContMdiffWithinAt.sub
+#align cont_mdiff_within_at.div ContMDiffWithinAt.div
+#align cont_mdiff_within_at.sub ContMDiffWithinAt.sub
@[to_additive]
-theorem ContMdiffAt.div {f g : M โ G} {xโ : M} (hf : ContMdiffAt I' I n f xโ)
- (hg : ContMdiffAt I' I n g xโ) : ContMdiffAt I' I n (fun x => f x / g x) xโ := by
+theorem ContMDiffAt.div {f g : M โ G} {xโ : M} (hf : ContMDiffAt I' I n f xโ)
+ (hg : ContMDiffAt I' I n g xโ) : ContMDiffAt I' I n (fun x => f x / g x) xโ := by
simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
-#align cont_mdiff_at.div ContMdiffAt.div
-#align cont_mdiff_at.sub ContMdiffAt.sub
+#align cont_mdiff_at.div ContMDiffAt.div
+#align cont_mdiff_at.sub ContMDiffAt.sub
@[to_additive]
-theorem ContMdiffOn.div {f g : M โ G} {s : Set M} (hf : ContMdiffOn I' I n f s)
- (hg : ContMdiffOn I' I n g s) : ContMdiffOn I' I n (fun x => f x / g x) s := by
+theorem ContMDiffOn.div {f g : M โ G} {s : Set M} (hf : ContMDiffOn I' I n f s)
+ (hg : ContMDiffOn I' I n g s) : ContMDiffOn I' I n (fun x => f x / g x) s := by
simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
-#align cont_mdiff_on.div ContMdiffOn.div
-#align cont_mdiff_on.sub ContMdiffOn.sub
+#align cont_mdiff_on.div ContMDiffOn.div
+#align cont_mdiff_on.sub ContMDiffOn.sub
@[to_additive]
-theorem ContMdiff.div {f g : M โ G} (hf : ContMdiff I' I n f) (hg : ContMdiff I' I n g) :
- ContMdiff I' I n fun x => f x / g x := by simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
-#align cont_mdiff.div ContMdiff.div
-#align cont_mdiff.sub ContMdiff.sub
+theorem ContMDiff.div {f g : M โ G} (hf : ContMDiff I' I n f) (hg : ContMDiff I' I n g) :
+ ContMDiff I' I n fun x => f x / g x := by simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
+#align cont_mdiff.div ContMDiff.div
+#align cont_mdiff.sub ContMDiff.sub
@[to_additive]
theorem SmoothWithinAt.div {f g : M โ G} {s : Set M} {xโ : M} (hf : SmoothWithinAt I' I f s xโ)
mathlib commit https://github.com/leanprover-community/mathlib/commit/9f55d0d4363ae59948c33864cbc52e0b12e0e8ce
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Nicolรฒ Cavalleri
! This file was ported from Lean 3 source module geometry.manifold.algebra.lie_group
-! leanprover-community/mathlib commit d1bd9c5df2867c1cb463bc6364446d57bdd9f7f1
+! leanprover-community/mathlib commit f9ec187127cc5b381dfcf5f4a22dacca4c20b63d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -75,6 +75,7 @@ variable {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [Topologica
{I' : ModelWithCorners ๐ E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
{E'' : Type _} [NormedAddCommGroup E''] [NormedSpace ๐ E''] {H'' : Type _} [TopologicalSpace H'']
{I'' : ModelWithCorners ๐ E'' H''} {M' : Type _} [TopologicalSpace M'] [ChartedSpace H'' M']
+ {n : โโ}
section
@@ -98,31 +99,113 @@ theorem topologicalGroup_of_lieGroup : TopologicalGroup G :=
end
@[to_additive]
-theorem Smooth.inv {f : M โ G} (hf : Smooth I' I f) : Smooth I' I fun x => (f x)โปยน :=
- (smooth_inv I).comp hf
-#align smooth.inv Smooth.inv
-#align smooth.neg Smooth.neg
+theorem ContMdiffWithinAt.inv {f : M โ G} {s : Set M} {xโ : M}
+ (hf : ContMdiffWithinAt I' I n f s xโ) : ContMdiffWithinAt I' I n (fun x => (f x)โปยน) s xโ :=
+ ((smooth_inv I).of_le le_top).ContMdiffAt.ContMdiffWithinAt.comp xโ hf <| Set.mapsTo_univ _ _
+#align cont_mdiff_within_at.inv ContMdiffWithinAt.inv
+#align cont_mdiff_within_at.neg ContMdiffWithinAt.neg
+
+@[to_additive]
+theorem ContMdiffAt.inv {f : M โ G} {xโ : M} (hf : ContMdiffAt I' I n f xโ) :
+ ContMdiffAt I' I n (fun x => (f x)โปยน) xโ :=
+ ((smooth_inv I).of_le le_top).ContMdiffAt.comp xโ hf
+#align cont_mdiff_at.inv ContMdiffAt.inv
+#align cont_mdiff_at.neg ContMdiffAt.neg
+
+@[to_additive]
+theorem ContMdiffOn.inv {f : M โ G} {s : Set M} (hf : ContMdiffOn I' I n f s) :
+ ContMdiffOn I' I n (fun x => (f x)โปยน) s := fun x hx => (hf x hx).inv
+#align cont_mdiff_on.inv ContMdiffOn.inv
+#align cont_mdiff_on.neg ContMdiffOn.neg
+
+@[to_additive]
+theorem ContMdiff.inv {f : M โ G} (hf : ContMdiff I' I n f) : ContMdiff I' I n fun x => (f x)โปยน :=
+ fun x => (hf x).inv
+#align cont_mdiff.inv ContMdiff.inv
+#align cont_mdiff.neg ContMdiff.neg
+
+@[to_additive]
+theorem SmoothWithinAt.inv {f : M โ G} {s : Set M} {xโ : M} (hf : SmoothWithinAt I' I f s xโ) :
+ SmoothWithinAt I' I (fun x => (f x)โปยน) s xโ :=
+ hf.inv
+#align smooth_within_at.inv SmoothWithinAt.inv
+#align smooth_within_at.neg SmoothWithinAt.neg
+
+@[to_additive]
+theorem SmoothAt.inv {f : M โ G} {xโ : M} (hf : SmoothAt I' I f xโ) :
+ SmoothAt I' I (fun x => (f x)โปยน) xโ :=
+ hf.inv
+#align smooth_at.inv SmoothAt.inv
+#align smooth_at.neg SmoothAt.neg
@[to_additive]
theorem SmoothOn.inv {f : M โ G} {s : Set M} (hf : SmoothOn I' I f s) :
SmoothOn I' I (fun x => (f x)โปยน) s :=
- (smooth_inv I).comp_smoothOn hf
+ hf.inv
#align smooth_on.inv SmoothOn.inv
#align smooth_on.neg SmoothOn.neg
@[to_additive]
-theorem Smooth.div {f g : M โ G} (hf : Smooth I' I f) (hg : Smooth I' I g) : Smooth I' I (f / g) :=
- by rw [div_eq_mul_inv]; exact ((smooth_mul I).comp (hf.prod_mk hg.inv) : _)
-#align smooth.div Smooth.div
-#align smooth.sub Smooth.sub
+theorem Smooth.inv {f : M โ G} (hf : Smooth I' I f) : Smooth I' I fun x => (f x)โปยน :=
+ hf.inv
+#align smooth.inv Smooth.inv
+#align smooth.neg Smooth.neg
+
+@[to_additive]
+theorem ContMdiffWithinAt.div {f g : M โ G} {s : Set M} {xโ : M}
+ (hf : ContMdiffWithinAt I' I n f s xโ) (hg : ContMdiffWithinAt I' I n g s xโ) :
+ ContMdiffWithinAt I' I n (fun x => f x / g x) s xโ := by simp_rw [div_eq_mul_inv];
+ exact hf.mul hg.inv
+#align cont_mdiff_within_at.div ContMdiffWithinAt.div
+#align cont_mdiff_within_at.sub ContMdiffWithinAt.sub
+
+@[to_additive]
+theorem ContMdiffAt.div {f g : M โ G} {xโ : M} (hf : ContMdiffAt I' I n f xโ)
+ (hg : ContMdiffAt I' I n g xโ) : ContMdiffAt I' I n (fun x => f x / g x) xโ := by
+ simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
+#align cont_mdiff_at.div ContMdiffAt.div
+#align cont_mdiff_at.sub ContMdiffAt.sub
+
+@[to_additive]
+theorem ContMdiffOn.div {f g : M โ G} {s : Set M} (hf : ContMdiffOn I' I n f s)
+ (hg : ContMdiffOn I' I n g s) : ContMdiffOn I' I n (fun x => f x / g x) s := by
+ simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
+#align cont_mdiff_on.div ContMdiffOn.div
+#align cont_mdiff_on.sub ContMdiffOn.sub
+
+@[to_additive]
+theorem ContMdiff.div {f g : M โ G} (hf : ContMdiff I' I n f) (hg : ContMdiff I' I n g) :
+ ContMdiff I' I n fun x => f x / g x := by simp_rw [div_eq_mul_inv]; exact hf.mul hg.inv
+#align cont_mdiff.div ContMdiff.div
+#align cont_mdiff.sub ContMdiff.sub
+
+@[to_additive]
+theorem SmoothWithinAt.div {f g : M โ G} {s : Set M} {xโ : M} (hf : SmoothWithinAt I' I f s xโ)
+ (hg : SmoothWithinAt I' I g s xโ) : SmoothWithinAt I' I (fun x => f x / g x) s xโ :=
+ hf.div hg
+#align smooth_within_at.div SmoothWithinAt.div
+#align smooth_within_at.sub SmoothWithinAt.sub
+
+@[to_additive]
+theorem SmoothAt.div {f g : M โ G} {xโ : M} (hf : SmoothAt I' I f xโ) (hg : SmoothAt I' I g xโ) :
+ SmoothAt I' I (fun x => f x / g x) xโ :=
+ hf.div hg
+#align smooth_at.div SmoothAt.div
+#align smooth_at.sub SmoothAt.sub
@[to_additive]
theorem SmoothOn.div {f g : M โ G} {s : Set M} (hf : SmoothOn I' I f s) (hg : SmoothOn I' I g s) :
- SmoothOn I' I (f / g) s := by rw [div_eq_mul_inv];
- exact ((smooth_mul I).comp_smoothOn (hf.prod_mk hg.inv) : _)
+ SmoothOn I' I (f / g) s :=
+ hf.div hg
#align smooth_on.div SmoothOn.div
#align smooth_on.sub SmoothOn.sub
+@[to_additive]
+theorem Smooth.div {f g : M โ G} (hf : Smooth I' I f) (hg : Smooth I' I g) : Smooth I' I (f / g) :=
+ hf.div hg
+#align smooth.div Smooth.div
+#align smooth.sub Smooth.sub
+
end LieGroup
section ProdLieGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -49,8 +49,8 @@ open scoped Manifold
/-- A Lie (additive) group is a group and a smooth manifold at the same time in which
the addition and negation operations are smooth. -/
class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
- [AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothAdd I G : Prop where
+ {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
+ [AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothAdd I G : Prop where
smooth_neg : Smooth I I fun a : G => -a
#align lie_add_group LieAddGroup
@@ -59,8 +59,8 @@ class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [T
the multiplication and inverse operations are smooth. -/
@[to_additive]
class LieGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
- [Group G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothMul I G : Prop where
+ {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
+ [Group G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothMul I G : Prop where
smooth_inv : Smooth I I fun a : G => aโปยน
#align lie_group LieGroup
#align lie_add_group LieAddGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -43,7 +43,7 @@ so the definition does not apply. Hence the definition should be more general, a
noncomputable section
-open Manifold
+open scoped Manifold
-- See note [Design choices about smooth algebraic structures]
/-- A Lie (additive) group is a group and a smooth manifold at the same time in which
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -112,16 +112,13 @@ theorem SmoothOn.inv {f : M โ G} {s : Set M} (hf : SmoothOn I' I f s) :
@[to_additive]
theorem Smooth.div {f g : M โ G} (hf : Smooth I' I f) (hg : Smooth I' I g) : Smooth I' I (f / g) :=
- by
- rw [div_eq_mul_inv]
- exact ((smooth_mul I).comp (hf.prod_mk hg.inv) : _)
+ by rw [div_eq_mul_inv]; exact ((smooth_mul I).comp (hf.prod_mk hg.inv) : _)
#align smooth.div Smooth.div
#align smooth.sub Smooth.sub
@[to_additive]
theorem SmoothOn.div {f g : M โ G} {s : Set M} (hf : SmoothOn I' I f s) (hg : SmoothOn I' I g s) :
- SmoothOn I' I (f / g) s := by
- rw [div_eq_mul_inv]
+ SmoothOn I' I (f / g) s := by rw [div_eq_mul_inv];
exact ((smooth_mul I).comp_smoothOn (hf.prod_mk hg.inv) : _)
#align smooth_on.div SmoothOn.div
#align smooth_on.sub SmoothOn.sub
mathlib commit https://github.com/leanprover-community/mathlib/commit/c9236f47f5b9df573443aa499c0d3968769628b7
@@ -145,11 +145,11 @@ end ProdLieGroup
/-! ### Normed spaces are Lie groups -/
-instance normedSpace_lieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
+instance normedSpaceLieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
[NormedAddCommGroup E] [NormedSpace ๐ E] : LieAddGroup ๐(๐, E) E :=
{
model_space_smooth with
smooth_add := smooth_iff.2 โจcontinuous_add, fun x y => contDiff_add.ContDiffOnโฉ
smooth_neg := smooth_iff.2 โจcontinuous_neg, fun x y => contDiff_neg.ContDiffOnโฉ }
-#align normed_space_lie_add_group normedSpace_lieAddGroup
+#align normed_space_lie_add_group normedSpaceLieAddGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -145,11 +145,11 @@ end ProdLieGroup
/-! ### Normed spaces are Lie groups -/
-instance normedSpaceLieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
+instance normedSpace_lieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
[NormedAddCommGroup E] [NormedSpace ๐ E] : LieAddGroup ๐(๐, E) E :=
{
model_space_smooth with
smooth_add := smooth_iff.2 โจcontinuous_add, fun x y => contDiff_add.ContDiffOnโฉ
smooth_neg := smooth_iff.2 โจcontinuous_neg, fun x y => contDiff_neg.ContDiffOnโฉ }
-#align normed_space_lie_add_group normedSpaceLieAddGroup
+#align normed_space_lie_add_group normedSpace_lieAddGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -31,7 +31,7 @@ groups here are not necessarily finite dimensional.
is smooth
* `ContMDiff.invโ` and variants: if `SmoothInvโ N`, point-wise inversion of smooth maps `f : M โ N`
is smooth at all points at which `f` doesn't vanish.
- ``ContMDiff.divโ` and variants: if also `SmoothMul N` (i.e., `N` is a Lie group except possibly
+* `ContMDiff.divโ` and variants: if also `SmoothMul N` (i.e., `N` is a Lie group except possibly
for smoothness of inversion at `0`), similar results hold for point-wise division.
* `normedSpaceLieAddGroup` : a normed vector space over a nontrivially normed field
is an additive Lie group.
@@ -18,13 +18,25 @@ Note that, since a manifold here is not second-countable and Hausdorff a Lie gro
guaranteed to be second-countable (even though it can be proved it is Hausdorff). Note also that Lie
groups here are not necessarily finite dimensional.
-## Main definitions and statements
+## Main definitions
* `LieAddGroup I G` : a Lie additive group where `G` is a manifold on the model with corners `I`.
-* `LieGroup I G` : a Lie multiplicative group where `G` is a manifold on the model with
- corners `I`.
+* `LieGroup I G` : a Lie multiplicative group where `G` is a manifold on the model with corners `I`.
+* `SmoothInvโ`: typeclass for smooth manifolds with `0` and `Inv` such that inversion is a smooth
+ map at each non-zero point. This includes complete normed fields and (multiplicative) Lie groups.
+
+
+## Main results
+* `ContMDiff.inv`, `ContMDiff.div` and variants: point-wise inversion and division of maps `M โ G`
+ is smooth
+* `ContMDiff.invโ` and variants: if `SmoothInvโ N`, point-wise inversion of smooth maps `f : M โ N`
+ is smooth at all points at which `f` doesn't vanish.
+ ``ContMDiff.divโ` and variants: if also `SmoothMul N` (i.e., `N` is a Lie group except possibly
+ for smoothness of inversion at `0`), similar results hold for point-wise division.
* `normedSpaceLieAddGroup` : a normed vector space over a nontrivially normed field
- is an additive Lie group.
+ is an additive Lie group.
+* `Instances/UnitsOfNormedAlgebra` shows that the group of units of a complete normed `๐`-algebra
+ is a multiplicative Lie group.
## Implementation notes
@@ -42,7 +54,7 @@ noncomputable section
open scoped Manifold
-- See note [Design choices about smooth algebraic structures]
-/-- A Lie (additive) group is a group and a smooth manifold at the same time in which
+/-- An additive Lie group is a group and a smooth manifold at the same time in which
the addition and negation operations are smooth. -/
class LieAddGroup {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H]
{E : Type*} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type*)
@@ -52,7 +64,7 @@ class LieAddGroup {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [Top
#align lie_add_group LieAddGroup
-- See note [Design choices about smooth algebraic structures]
-/-- A Lie group is a group and a smooth manifold at the same time in which
+/-- A (multiplicative) Lie group is a group and a smooth manifold at the same time in which
the multiplication and inverse operations are smooth. -/
@[to_additive]
class LieGroup {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H]
@@ -62,7 +74,13 @@ class LieGroup {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [Topolo
smooth_inv : Smooth I I fun a : G => aโปยน
#align lie_group LieGroup
-section LieGroup
+/-!
+ ### Smoothness of inversion, negation, division and subtraction
+
+ Let `f : M โ G` be a `C^n` or smooth functions into a Lie group, then `f` is point-wise
+ invertible with smooth inverse `f`. If `f` and `g` are two such functions, the quotient
+ `f / g` (i.e., the point-wise product of `f` and the point-wise inverse of `g`) is also smooth. -/
+section PointwiseDivision
variable {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H] {E : Type*}
[NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {F : Type*}
@@ -78,7 +96,8 @@ section
variable (I)
-@[to_additive]
+/-- In a Lie group, inversion is a smooth map. -/
+@[to_additive "In an additive Lie group, inversion is a smooth map."]
theorem smooth_inv : Smooth I I fun x : G => xโปยน :=
LieGroup.smooth_inv
#align smooth_inv smooth_inv
@@ -205,9 +224,10 @@ nonrec theorem Smooth.div {f g : M โ G} (hf : Smooth I' I f) (hg : Smooth I' I
#align smooth.div Smooth.div
#align smooth.sub Smooth.sub
-end LieGroup
+end PointwiseDivision
-section ProdLieGroup
+/-! Binary product of Lie groups -/
+section Product
-- Instance of product group
@[to_additive]
@@ -219,7 +239,7 @@ instance {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalS
[Group G'] [LieGroup I' G'] : LieGroup (I.prod I') (G ร G') :=
{ SmoothMul.prod _ _ _ _ with smooth_inv := smooth_fst.inv.prod_mk smooth_snd.inv }
-end ProdLieGroup
+end Product
/-! ### Normed spaces are Lie groups -/
@@ -228,7 +248,12 @@ instance normedSpaceLieAddGroup {๐ : Type*} [NontriviallyNormedField ๐] {E
smooth_neg := contDiff_neg.contMDiff
#align normed_space_lie_add_group normedSpaceLieAddGroup
-section HasSmoothInv
+/-! ## Smooth manifolds with smooth inversion away from zero
+
+Typeclass for smooth manifolds with `0` and `Inv` such that inversion is smooth at all non-zero
+points. (This includes multiplicative Lie groups, but also complete normed semifields.)
+Point-wise inversion is smooth when the function/denominator is non-zero. -/
+section SmoothInvโ
-- See note [Design choices about smooth algebraic structures]
/-- A smooth manifold with `0` and `Inv` such that `fun x โฆ xโปยน` is smooth at all nonzero points.
@@ -298,8 +323,13 @@ theorem SmoothOn.invโ (hf : SmoothOn I' I f s) (h0 : โ x โ s, f x โ 0) :
SmoothOn I' I (fun x => (f x)โปยน) s :=
ContMDiffOn.invโ hf h0
-end HasSmoothInv
+end SmoothInvโ
+
+/-! ### Point-wise division of smooth functions
+If `[SmoothMul I N]` and `[SmoothInvโ I N]`, point-wise division of smooth functions `f : M โ N`
+is smooth whenever the denominator is non-zero. (This includes `N` being a completely normed field.)
+-/
section Div
variable {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H] {E : Type*}
After this PR, no file in Geometry
uses autoImplicit, and in Analysis
it's scoped to six declarations.
@@ -37,9 +37,6 @@ so the definition does not apply. Hence the definition should be more general, a
`I : ModelWithCorners ๐ E H`.
-/
-set_option autoImplicit true
-
-
noncomputable section
open scoped Manifold
@@ -268,7 +265,7 @@ theorem hasContinuousInvโ_of_hasSmoothInvโ : HasContinuousInvโ G :=
theorem SmoothOn_invโ : SmoothOn I I (Inv.inv : G โ G) {0}แถ := fun _x hx =>
(smoothAt_invโ I hx).smoothWithinAt
-variable {I}
+variable {I} {s : Set M} {a : M}
theorem ContMDiffWithinAt.invโ (hf : ContMDiffWithinAt I' I n f s a) (ha : f a โ 0) :
ContMDiffWithinAt I' I n (fun x => (f x)โปยน) s a :=
@@ -310,7 +307,7 @@ variable {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalS
[TopologicalSpace G] [ChartedSpace H G] [GroupWithZero G] [SmoothInvโ I G] [SmoothMul I G]
{E' : Type*} [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type*} [TopologicalSpace H']
{I' : ModelWithCorners ๐ E' H'} {M : Type*} [TopologicalSpace M] [ChartedSpace H' M]
- {f g : M โ G}
+ {f g : M โ G} {s : Set M} {a : M} {n : โโ}
theorem ContMDiffWithinAt.divโ
(hf : ContMDiffWithinAt I' I n f s a) (hg : ContMDiffWithinAt I' I n g s a) (hโ : g a โ 0) :
Autoimplicits are highly controversial and also defeat the performance-improving work in #6474.
The intent of this PR is to make autoImplicit
opt-in on a per-file basis, by disabling it in the lakefile and enabling it again with set_option autoImplicit true
in the few files that rely on it.
That also keeps this PR small, as opposed to attempting to "fix" files to not need it any more.
I claim that many of the uses of autoImplicit
in these files are accidental; situations such as:
variables
are in scope, but pasting the lemma in the wrong sectionHaving set_option autoImplicit false
as the default prevents these types of mistake being made in the 90% of files where autoImplicit
s are not used at all, and causes them to be caught by CI during review.
I think there were various points during the port where we encouraged porters to delete the universes u v
lines; I think having autoparams for universe variables only would cover a lot of the cases we actually use them, while avoiding any real shortcomings.
A Zulip poll (after combining overlapping votes accordingly) was in favor of this change with 5:5:18
as the no:dontcare:yes
vote ratio.
While this PR was being reviewed, a handful of files gained some more likely-accidental autoImplicits. In these places, set_option autoImplicit true
has been placed locally within a section, rather than at the top of the file.
@@ -37,6 +37,8 @@ so the definition does not apply. Hence the definition should be more general, a
`I : ModelWithCorners ๐ E H`.
-/
+set_option autoImplicit true
+
noncomputable section
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -45,8 +45,8 @@ open scoped Manifold
-- See note [Design choices about smooth algebraic structures]
/-- A Lie (additive) group is a group and a smooth manifold at the same time in which
the addition and negation operations are smooth. -/
-class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
+class LieAddGroup {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H]
+ {E : Type*} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type*)
[AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothAdd I G : Prop where
/-- Negation is smooth in an additive Lie group. -/
smooth_neg : Smooth I I fun a : G => -a
@@ -56,8 +56,8 @@ class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [T
/-- A Lie group is a group and a smooth manifold at the same time in which
the multiplication and inverse operations are smooth. -/
@[to_additive]
-class LieGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
+class LieGroup {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H]
+ {E : Type*} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type*)
[Group G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothMul I G : Prop where
/-- Inversion is smooth in a Lie group. -/
smooth_inv : Smooth I I fun a : G => aโปยน
@@ -65,14 +65,14 @@ class LieGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [Topo
section LieGroup
-variable {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {F : Type _}
- [NormedAddCommGroup F] [NormedSpace ๐ F] {J : ModelWithCorners ๐ F F} {G : Type _}
- [TopologicalSpace G] [ChartedSpace H G] [Group G] [LieGroup I G] {E' : Type _}
- [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
- {I' : ModelWithCorners ๐ E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
- {E'' : Type _} [NormedAddCommGroup E''] [NormedSpace ๐ E''] {H'' : Type _} [TopologicalSpace H'']
- {I'' : ModelWithCorners ๐ E'' H''} {M' : Type _} [TopologicalSpace M'] [ChartedSpace H'' M']
+variable {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {F : Type*}
+ [NormedAddCommGroup F] [NormedSpace ๐ F] {J : ModelWithCorners ๐ F F} {G : Type*}
+ [TopologicalSpace G] [ChartedSpace H G] [Group G] [LieGroup I G] {E' : Type*}
+ [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type*} [TopologicalSpace H']
+ {I' : ModelWithCorners ๐ E' H'} {M : Type*} [TopologicalSpace M] [ChartedSpace H' M]
+ {E'' : Type*} [NormedAddCommGroup E''] [NormedSpace ๐ E''] {H'' : Type*} [TopologicalSpace H'']
+ {I'' : ModelWithCorners ๐ E'' H''} {M' : Type*} [TopologicalSpace M'] [ChartedSpace H'' M']
{n : โโ}
section
@@ -212,11 +212,11 @@ section ProdLieGroup
-- Instance of product group
@[to_additive]
-instance {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {G : Type _}
- [TopologicalSpace G] [ChartedSpace H G] [Group G] [LieGroup I G] {E' : Type _}
- [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
- {I' : ModelWithCorners ๐ E' H'} {G' : Type _} [TopologicalSpace G'] [ChartedSpace H' G']
+instance {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {G : Type*}
+ [TopologicalSpace G] [ChartedSpace H G] [Group G] [LieGroup I G] {E' : Type*}
+ [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type*} [TopologicalSpace H']
+ {I' : ModelWithCorners ๐ E' H'} {G' : Type*} [TopologicalSpace G'] [ChartedSpace H' G']
[Group G'] [LieGroup I' G'] : LieGroup (I.prod I') (G ร G') :=
{ SmoothMul.prod _ _ _ _ with smooth_inv := smooth_fst.inv.prod_mk smooth_snd.inv }
@@ -224,7 +224,7 @@ end ProdLieGroup
/-! ### Normed spaces are Lie groups -/
-instance normedSpaceLieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {E : Type _}
+instance normedSpaceLieAddGroup {๐ : Type*} [NontriviallyNormedField ๐] {E : Type*}
[NormedAddCommGroup E] [NormedSpace ๐ E] : LieAddGroup ๐(๐, E) E where
smooth_neg := contDiff_neg.contMDiff
#align normed_space_lie_add_group normedSpaceLieAddGroup
@@ -234,24 +234,24 @@ section HasSmoothInv
-- See note [Design choices about smooth algebraic structures]
/-- A smooth manifold with `0` and `Inv` such that `fun x โฆ xโปยน` is smooth at all nonzero points.
Any complete normed (semi)field has this property. -/
-class SmoothInvโ {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
+class SmoothInvโ {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H]
+ {E : Type*} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type*)
[Inv G] [Zero G] [TopologicalSpace G] [ChartedSpace H G] : Prop where
/-- Inversion is smooth away from `0`. -/
smoothAt_invโ : โ โฆx : Gโฆ, x โ 0 โ SmoothAt I I (fun y โฆ yโปยน) x
-instance {๐ : Type _} [NontriviallyNormedField ๐] [CompleteSpace ๐] : SmoothInvโ ๐(๐) ๐ :=
+instance {๐ : Type*} [NontriviallyNormedField ๐] [CompleteSpace ๐] : SmoothInvโ ๐(๐) ๐ :=
{ smoothAt_invโ := by
intro x hx
change ContMDiffAt ๐(๐) ๐(๐) โค Inv.inv x
rw [contMDiffAt_iff_contDiffAt]
exact contDiffAt_inv ๐ hx }
-variable {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) {G : Type _}
- [TopologicalSpace G] [ChartedSpace H G] [Inv G] [Zero G] [SmoothInvโ I G] {E' : Type _}
- [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
- {I' : ModelWithCorners ๐ E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
+variable {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) {G : Type*}
+ [TopologicalSpace G] [ChartedSpace H G] [Inv G] [Zero G] [SmoothInvโ I G] {E' : Type*}
+ [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type*} [TopologicalSpace H']
+ {I' : ModelWithCorners ๐ E' H'} {M : Type*} [TopologicalSpace M] [ChartedSpace H' M]
{n : โโ} {f g : M โ G}
theorem smoothAt_invโ {x : G} (hx : x โ 0) : SmoothAt I I (fun y โฆ yโปยน) x :=
@@ -303,11 +303,11 @@ end HasSmoothInv
section Div
-variable {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {G : Type _}
+variable {๐ : Type*} [NontriviallyNormedField ๐] {H : Type*} [TopologicalSpace H] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {G : Type*}
[TopologicalSpace G] [ChartedSpace H G] [GroupWithZero G] [SmoothInvโ I G] [SmoothMul I G]
- {E' : Type _} [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
- {I' : ModelWithCorners ๐ E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
+ {E' : Type*} [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type*} [TopologicalSpace H']
+ {I' : ModelWithCorners ๐ E' H'} {M : Type*} [TopologicalSpace M] [ChartedSpace H' M]
{f g : M โ G}
theorem ContMDiffWithinAt.divโ
We have currently (additive or multiplicative) Lie groups but no typeclass to express that division is smooth away from zero in fields. This PR adds such a typeclass, modelled on the one we already have in topological spaces.
@@ -48,6 +48,7 @@ the addition and negation operations are smooth. -/
class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
[AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothAdd I G : Prop where
+ /-- Negation is smooth in an additive Lie group. -/
smooth_neg : Smooth I I fun a : G => -a
#align lie_add_group LieAddGroup
@@ -58,6 +59,7 @@ the multiplication and inverse operations are smooth. -/
class LieGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
[Group G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothMul I G : Prop where
+ /-- Inversion is smooth in a Lie group. -/
smooth_inv : Smooth I I fun a : G => aโปยน
#align lie_group LieGroup
@@ -226,3 +228,118 @@ instance normedSpaceLieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {
[NormedAddCommGroup E] [NormedSpace ๐ E] : LieAddGroup ๐(๐, E) E where
smooth_neg := contDiff_neg.contMDiff
#align normed_space_lie_add_group normedSpaceLieAddGroup
+
+section HasSmoothInv
+
+-- See note [Design choices about smooth algebraic structures]
+/-- A smooth manifold with `0` and `Inv` such that `fun x โฆ xโปยน` is smooth at all nonzero points.
+Any complete normed (semi)field has this property. -/
+class SmoothInvโ {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
+ {E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
+ [Inv G] [Zero G] [TopologicalSpace G] [ChartedSpace H G] : Prop where
+ /-- Inversion is smooth away from `0`. -/
+ smoothAt_invโ : โ โฆx : Gโฆ, x โ 0 โ SmoothAt I I (fun y โฆ yโปยน) x
+
+instance {๐ : Type _} [NontriviallyNormedField ๐] [CompleteSpace ๐] : SmoothInvโ ๐(๐) ๐ :=
+ { smoothAt_invโ := by
+ intro x hx
+ change ContMDiffAt ๐(๐) ๐(๐) โค Inv.inv x
+ rw [contMDiffAt_iff_contDiffAt]
+ exact contDiffAt_inv ๐ hx }
+
+variable {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H] {E : Type _}
+ [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) {G : Type _}
+ [TopologicalSpace G] [ChartedSpace H G] [Inv G] [Zero G] [SmoothInvโ I G] {E' : Type _}
+ [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
+ {I' : ModelWithCorners ๐ E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
+ {n : โโ} {f g : M โ G}
+
+theorem smoothAt_invโ {x : G} (hx : x โ 0) : SmoothAt I I (fun y โฆ yโปยน) x :=
+ SmoothInvโ.smoothAt_invโ hx
+
+/-- In a manifold with smooth inverse away from `0`, the inverse is continuous away from `0`.
+This is not an instance for technical reasons, see
+note [Design choices about smooth algebraic structures]. -/
+theorem hasContinuousInvโ_of_hasSmoothInvโ : HasContinuousInvโ G :=
+ { continuousAt_invโ := fun _ hx โฆ (smoothAt_invโ I hx).continuousAt }
+
+theorem SmoothOn_invโ : SmoothOn I I (Inv.inv : G โ G) {0}แถ := fun _x hx =>
+ (smoothAt_invโ I hx).smoothWithinAt
+
+variable {I}
+
+theorem ContMDiffWithinAt.invโ (hf : ContMDiffWithinAt I' I n f s a) (ha : f a โ 0) :
+ ContMDiffWithinAt I' I n (fun x => (f x)โปยน) s a :=
+ (smoothAt_invโ I ha).contMDiffAt.comp_contMDiffWithinAt a hf
+
+theorem ContMDiffAt.invโ (hf : ContMDiffAt I' I n f a) (ha : f a โ 0) :
+ ContMDiffAt I' I n (fun x โฆ (f x)โปยน) a :=
+ (smoothAt_invโ I ha).contMDiffAt.comp a hf
+
+theorem ContMDiff.invโ (hf : ContMDiff I' I n f) (h0 : โ x, f x โ 0) :
+ ContMDiff I' I n (fun x โฆ (f x)โปยน) :=
+ fun x โฆ ContMDiffAt.invโ (hf x) (h0 x)
+
+theorem ContMDiffOn.invโ (hf : ContMDiffOn I' I n f s) (h0 : โ x โ s, f x โ 0) :
+ ContMDiffOn I' I n (fun x => (f x)โปยน) s :=
+ fun x hx โฆ ContMDiffWithinAt.invโ (hf x hx) (h0 x hx)
+
+theorem SmoothWithinAt.invโ (hf : SmoothWithinAt I' I f s a) (ha : f a โ 0) :
+ SmoothWithinAt I' I (fun x => (f x)โปยน) s a :=
+ ContMDiffWithinAt.invโ hf ha
+
+theorem SmoothAt.invโ (hf : SmoothAt I' I f a) (ha : f a โ 0) :
+ SmoothAt I' I (fun x => (f x)โปยน) a :=
+ ContMDiffAt.invโ hf ha
+
+theorem Smooth.invโ (hf : Smooth I' I f) (h0 : โ x, f x โ 0) : Smooth I' I fun x => (f x)โปยน :=
+ ContMDiff.invโ hf h0
+
+theorem SmoothOn.invโ (hf : SmoothOn I' I f s) (h0 : โ x โ s, f x โ 0) :
+ SmoothOn I' I (fun x => (f x)โปยน) s :=
+ ContMDiffOn.invโ hf h0
+
+end HasSmoothInv
+
+section Div
+
+variable {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H] {E : Type _}
+ [NormedAddCommGroup E] [NormedSpace ๐ E] {I : ModelWithCorners ๐ E H} {G : Type _}
+ [TopologicalSpace G] [ChartedSpace H G] [GroupWithZero G] [SmoothInvโ I G] [SmoothMul I G]
+ {E' : Type _} [NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
+ {I' : ModelWithCorners ๐ E' H'} {M : Type _} [TopologicalSpace M] [ChartedSpace H' M]
+ {f g : M โ G}
+
+theorem ContMDiffWithinAt.divโ
+ (hf : ContMDiffWithinAt I' I n f s a) (hg : ContMDiffWithinAt I' I n g s a) (hโ : g a โ 0) :
+ ContMDiffWithinAt I' I n (f / g) s a := by
+ simpa [div_eq_mul_inv] using hf.mul (hg.invโ hโ)
+
+theorem ContMDiffOn.divโ (hf : ContMDiffOn I' I n f s) (hg : ContMDiffOn I' I n g s)
+ (hโ : โ x โ s, g x โ 0) : ContMDiffOn I' I n (f / g) s := by
+ simpa [div_eq_mul_inv] using hf.mul (hg.invโ hโ)
+
+theorem ContMDiffAt.divโ (hf : ContMDiffAt I' I n f a) (hg : ContMDiffAt I' I n g a)
+ (hโ : g a โ 0) : ContMDiffAt I' I n (f / g) a := by
+ simpa [div_eq_mul_inv] using hf.mul (hg.invโ hโ)
+
+theorem ContMDiff.divโ (hf : ContMDiff I' I n f) (hg : ContMDiff I' I n g) (hโ : โ x, g x โ 0) :
+ ContMDiff I' I n (f / g) := by simpa only [div_eq_mul_inv] using hf.mul (hg.invโ hโ)
+
+theorem SmoothWithinAt.divโ (hf : SmoothWithinAt I' I f s a)
+ (hg : SmoothWithinAt I' I g s a) (hโ : g a โ 0) : SmoothWithinAt I' I (f / g) s a :=
+ ContMDiffWithinAt.divโ hf hg hโ
+
+theorem SmoothOn.divโ (hf : SmoothOn I' I f s) (hg : SmoothOn I' I g s) (hโ : โ x โ s, g x โ 0) :
+ SmoothOn I' I (f / g) s :=
+ ContMDiffOn.divโ hf hg hโ
+
+theorem SmoothAt.divโ (hf : SmoothAt I' I f a) (hg : SmoothAt I' I g a) (hโ : g a โ 0) :
+ SmoothAt I' I (f / g) a :=
+ ContMDiffAt.divโ hf hg hโ
+
+theorem Smooth.divโ (hf : Smooth I' I f) (hg : Smooth I' I g) (hโ : โ x, g x โ 0) :
+ Smooth I' I (f / g) :=
+ ContMDiff.divโ hf hg hโ
+
+end Div
@@ -2,14 +2,11 @@
Copyright ยฉ 2020 Nicolรฒ Cavalleri. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Nicolรฒ Cavalleri
-
-! This file was ported from Lean 3 source module geometry.manifold.algebra.lie_group
-! leanprover-community/mathlib commit f9ec187127cc5b381dfcf5f4a22dacca4c20b63d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Geometry.Manifold.Algebra.Monoid
+#align_import geometry.manifold.algebra.lie_group from "leanprover-community/mathlib"@"f9ec187127cc5b381dfcf5f4a22dacca4c20b63d"
+
/-!
# Lie groups
@@ -50,7 +50,7 @@ open scoped Manifold
the addition and negation operations are smooth. -/
class LieAddGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
- [AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothAdd I G : Prop where
+ [AddGroup G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothAdd I G : Prop where
smooth_neg : Smooth I I fun a : G => -a
#align lie_add_group LieAddGroup
@@ -60,7 +60,7 @@ the multiplication and inverse operations are smooth. -/
@[to_additive]
class LieGroup {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace ๐ E] (I : ModelWithCorners ๐ E H) (G : Type _)
- [Group G] [TopologicalSpace G] [ChartedSpace H G] extends HasSmoothMul I G : Prop where
+ [Group G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothMul I G : Prop where
smooth_inv : Smooth I I fun a : G => aโปยน
#align lie_group LieGroup
@@ -219,7 +219,7 @@ instance {๐ : Type _} [NontriviallyNormedField ๐] {H : Type _} [Topologica
[NormedAddCommGroup E'] [NormedSpace ๐ E'] {H' : Type _} [TopologicalSpace H']
{I' : ModelWithCorners ๐ E' H'} {G' : Type _} [TopologicalSpace G'] [ChartedSpace H' G']
[Group G'] [LieGroup I' G'] : LieGroup (I.prod I') (G ร G') :=
- { HasSmoothMul.prod _ _ _ _ with smooth_inv := smooth_fst.inv.prod_mk smooth_snd.inv }
+ { SmoothMul.prod _ _ _ _ with smooth_inv := smooth_fst.inv.prod_mk smooth_snd.inv }
end ProdLieGroup
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file