geometry.manifold.algebra.lie_group โŸท Mathlib.Geometry.Manifold.Algebra.LieGroup

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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"
 
Diff
@@ -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
 
Diff
@@ -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`.
Diff
@@ -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
 
Diff
@@ -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
+-/
 
Diff
@@ -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
 
Diff
@@ -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โ‚€)
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
Diff
@@ -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
 
Diff
@@ -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
 

Changes in mathlib4

mathlib3
mathlib4
chore: tidy various files (#10311)
Diff
@@ -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.
doc(Geometry/Manifold/LieGroup): extend and clean up docstrings (#9766)
  • tweak section names; add comments explaining what's in them
  • add two lemma docstrings
  • revamp the module docstring to mention all results
  • in the module docstring, separate main definitions and results
Diff
@@ -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*}
chore(Analysis,Geometry): remove almost all autoImplicit (#9691)

After this PR, no file in Geometry uses autoImplicit, and in Analysis it's scoped to six declarations.

Diff
@@ -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) :
fix: disable autoImplicit globally (#6528)

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:

  • Assuming variables are in scope, but pasting the lemma in the wrong section
  • Pasting in a lemma from a scratch file without checking to see if the variable names are consistent with the rest of the file
  • Making a copy-paste error between lemmas and forgetting to add an explicit arguments.

Having set_option autoImplicit false as the default prevents these types of mistake being made in the 90% of files where autoImplicits 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.

Diff
@@ -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
 
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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โ‚€
feat: groups with zero with a smooth division away from zero (#6069)

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.

Diff
@@ -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
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
 
feat: port Geometry.Manifold.Algebra.Structures (#5453)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>

Diff
@@ -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
 
feat: port Geometry.Manifold.Algebra.LieGroup (#5439)

Dependencies 12 + 879

880 files ported (98.7%)
391925 lines ported (98.6%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file