geometry.manifold.algebra.monoid
⟷
Mathlib.Geometry.Manifold.Algebra.Monoid
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)
(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/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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 Geometry.Manifold.ContMdiffMap
+import Geometry.Manifold.ContMDiffMap
#align_import geometry.manifold.algebra.monoid from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
@@ -299,7 +299,7 @@ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Topologica
#print smooth_pow /-
theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
| 0 => by simp only [pow_zero]; exact smooth_const
- | k + 1 => by simpa [pow_succ] using smooth_id.mul (smooth_pow _)
+ | k + 1 => by simpa [pow_succ'] using smooth_id.mul (smooth_pow _)
#align smooth_pow smooth_pow
-/
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.ContMdiffMap
+import Geometry.Manifold.ContMdiffMap
#align_import geometry.manifold.algebra.monoid from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -65,7 +65,7 @@ class SmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Top
{E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
[Mul G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
Prop where
- smooth_mul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2
+ smooth_hMul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2
#align has_smooth_mul SmoothMul
#align has_smooth_add SmoothAdd
-/
@@ -85,7 +85,7 @@ variable (I)
#print smooth_mul /-
@[to_additive]
theorem smooth_mul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2 :=
- SmoothMul.smooth_mul
+ SmoothMul.smooth_hMul
#align smooth_mul smooth_mul
#align smooth_add smooth_add
-/
@@ -279,7 +279,7 @@ instance SmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type
(I' : ModelWithCorners 𝕜 E' H') (G' : Type _) [TopologicalSpace G'] [ChartedSpace H' G']
[Mul G'] [SmoothMul I' G'] : SmoothMul (I.Prod I') (G × G') :=
{ SmoothManifoldWithCorners.prod G G' with
- smooth_mul :=
+ smooth_hMul :=
((smooth_fst.comp smooth_fst).Smooth.mul (smooth_fst.comp smooth_snd)).prod_mk
((smooth_snd.comp smooth_fst).Smooth.mul (smooth_snd.comp smooth_snd)) }
#align has_smooth_mul.prod SmoothMul.prod
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.monoid
-! 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.ContMdiffMap
+#align_import geometry.manifold.algebra.monoid from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
+
/-!
# Smooth monoid
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.monoid
-! leanprover-community/mathlib commit e354e865255654389cc46e6032160238df2e0f40
+! leanprover-community/mathlib commit 30faa0c3618ce1472bf6305ae0e3fa56affa3f95
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -12,6 +12,9 @@ import Mathbin.Geometry.Manifold.ContMdiffMap
/-!
# Smooth monoid
+
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
A smooth monoid is a monoid that is also a smooth manifold, in which multiplication is a smooth map
of the product manifold `G` × `G` into `G`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/fdc286cc6967a012f41b87f76dcd2797b53152af
@@ -42,39 +42,39 @@ we formulate the definitions and lemmas for any model.
`[has_continuous_mul G]` as an assumption (worse) or use `haveI` in the proof (better). -/
-#print HasSmoothAdd /-
+#print SmoothAdd /-
-- See note [Design choices about smooth algebraic structures]
/-- Basic hypothesis to talk about a smooth (Lie) additive monoid or a smooth additive
semigroup. A smooth additive monoid over `α`, for example, is obtained by requiring both the
instances `add_monoid α` and `has_smooth_add α`. -/
-class HasSmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
+class SmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
[Add G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
Prop where
smooth_add : Smooth (I.Prod I) I fun p : G × G => p.1 + p.2
-#align has_smooth_add HasSmoothAdd
+#align has_smooth_add SmoothAdd
-/
-#print HasSmoothMul /-
+#print SmoothMul /-
-- See note [Design choices about smooth algebraic structures]
/-- Basic hypothesis to talk about a smooth (Lie) monoid or a smooth semigroup.
A smooth monoid over `G`, for example, is obtained by requiring both the instances `monoid G`
and `has_smooth_mul I G`. -/
@[to_additive]
-class HasSmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
+class SmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
[Mul G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
Prop where
smooth_mul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2
-#align has_smooth_mul HasSmoothMul
-#align has_smooth_add HasSmoothAdd
+#align has_smooth_mul SmoothMul
+#align has_smooth_add SmoothAdd
-/
-section HasSmoothMul
+section SmoothMul
variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [Mul G]
- [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G] {E' : Type _} [NormedAddCommGroup E']
+ [TopologicalSpace G] [ChartedSpace H 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]
@@ -85,7 +85,7 @@ variable (I)
#print smooth_mul /-
@[to_additive]
theorem smooth_mul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2 :=
- HasSmoothMul.smooth_mul
+ SmoothMul.smooth_mul
#align smooth_mul smooth_mul
#align smooth_add smooth_add
-/
@@ -236,7 +236,7 @@ theorem R_apply : (𝑹 I g) h = h * g :=
#print L_mul /-
@[simp]
-theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
+theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
(g h : G) : 𝑳 I (g * h) = (𝑳 I g).comp (𝑳 I h) := by ext;
simp only [ContMDiffMap.comp_apply, L_apply, mul_assoc]
#align L_mul L_mul
@@ -244,7 +244,7 @@ theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G]
#print R_mul /-
@[simp]
-theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
+theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
(g h : G) : 𝑹 I (g * h) = (𝑹 I h).comp (𝑹 I g) := by ext;
simp only [ContMDiffMap.comp_apply, R_apply, mul_assoc]
#align R_mul R_mul
@@ -252,7 +252,7 @@ theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G]
section
-variable {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H G'] [HasSmoothMul I G']
+variable {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H G'] [SmoothMul I G']
(g' : G')
#print smoothLeftMul_one /-
@@ -269,32 +269,32 @@ theorem smoothRightMul_one : (𝑹 I g') 1 = g' :=
end
-#print HasSmoothMul.prod /-
+#print SmoothMul.prod /-
-- Instance of product
@[to_additive]
-instance HasSmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace 𝕜 E] {H : Type _} [TopologicalSpace H]
- (I : ModelWithCorners 𝕜 E H) (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Mul G]
- [HasSmoothMul I G] {E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type _}
- [TopologicalSpace H'] (I' : ModelWithCorners 𝕜 E' H') (G' : Type _) [TopologicalSpace G']
- [ChartedSpace H' G'] [Mul G'] [HasSmoothMul I' G'] : HasSmoothMul (I.Prod I') (G × G') :=
+instance SmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddCommGroup E]
+ [NormedSpace 𝕜 E] {H : Type _} [TopologicalSpace H] (I : ModelWithCorners 𝕜 E H) (G : Type _)
+ [TopologicalSpace G] [ChartedSpace H G] [Mul G] [SmoothMul I G] {E' : Type _}
+ [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type _} [TopologicalSpace H']
+ (I' : ModelWithCorners 𝕜 E' H') (G' : Type _) [TopologicalSpace G'] [ChartedSpace H' G']
+ [Mul G'] [SmoothMul I' G'] : SmoothMul (I.Prod I') (G × G') :=
{ SmoothManifoldWithCorners.prod G G' with
smooth_mul :=
((smooth_fst.comp smooth_fst).Smooth.mul (smooth_fst.comp smooth_snd)).prod_mk
((smooth_snd.comp smooth_fst).Smooth.mul (smooth_snd.comp smooth_snd)) }
-#align has_smooth_mul.prod HasSmoothMul.prod
-#align has_smooth_add.sum HasSmoothAdd.sum
+#align has_smooth_mul.prod SmoothMul.prod
+#align has_smooth_add.sum SmoothAdd.sum
-/
-end HasSmoothMul
+end SmoothMul
section Monoid
variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [Monoid G]
- [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G] {H' : Type _} [TopologicalSpace H']
+ [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G] {H' : Type _} [TopologicalSpace H']
{E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {I' : ModelWithCorners 𝕜 E' H'}
- {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [HasSmoothMul I' G']
+ {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [SmoothMul I' G']
#print smooth_pow /-
theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
@@ -306,9 +306,9 @@ theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
#print SmoothAddMonoidMorphism /-
/-- Morphism of additive smooth monoids. -/
structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [HasSmoothAdd I G]
- (G' : Type _) [TopologicalSpace G'] [ChartedSpace H' G'] [AddMonoid G']
- [HasSmoothAdd I' G'] extends G →+ G' where
+ (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [SmoothAdd I G] (G' : Type _)
+ [TopologicalSpace G'] [ChartedSpace H' G'] [AddMonoid G'] [SmoothAdd I' G'] extends
+ G →+ G' where
smooth_toFun : Smooth I I' to_fun
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
-/
@@ -317,9 +317,8 @@ structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWit
/-- Morphism of smooth monoids. -/
@[to_additive]
structure SmoothMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [HasSmoothMul I G] (G' : Type _)
- [TopologicalSpace G'] [ChartedSpace H' G'] [Monoid G'] [HasSmoothMul I' G'] extends
- G →* G' where
+ (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [SmoothMul I G] (G' : Type _)
+ [TopologicalSpace G'] [ChartedSpace H' G'] [Monoid G'] [SmoothMul I' G'] extends G →* G' where
smooth_toFun : Smooth I I' to_fun
#align smooth_monoid_morphism SmoothMonoidMorphism
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
@@ -346,7 +345,7 @@ open scoped BigOperators
variable {ι 𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [CommMonoid G]
- [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G] {E' : Type _} [NormedAddCommGroup E']
+ [TopologicalSpace G] [ChartedSpace H 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] {s : Set M} {x : M} {t : Finset ι}
{f : ι → M → G} {n : ℕ∞} {p : ι → Prop}
@@ -547,7 +546,7 @@ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddC
[NormedSpace 𝕜 E]
#print hasSmoothAddSelf /-
-instance hasSmoothAddSelf : HasSmoothAdd 𝓘(𝕜, E) E :=
+instance hasSmoothAddSelf : SmoothAdd 𝓘(𝕜, E) E :=
⟨by
convert cont_diff_add.cont_mdiff; exact model_with_corners_self_prod.symm
exact chartedSpaceSelf_prod⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -42,6 +42,7 @@ we formulate the definitions and lemmas for any model.
`[has_continuous_mul G]` as an assumption (worse) or use `haveI` in the proof (better). -/
+#print HasSmoothAdd /-
-- See note [Design choices about smooth algebraic structures]
/-- Basic hypothesis to talk about a smooth (Lie) additive monoid or a smooth additive
semigroup. A smooth additive monoid over `α`, for example, is obtained by requiring both the
@@ -52,7 +53,9 @@ class HasSmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [
Prop where
smooth_add : Smooth (I.Prod I) I fun p : G × G => p.1 + p.2
#align has_smooth_add HasSmoothAdd
+-/
+#print HasSmoothMul /-
-- See note [Design choices about smooth algebraic structures]
/-- Basic hypothesis to talk about a smooth (Lie) monoid or a smooth semigroup.
A smooth monoid over `G`, for example, is obtained by requiring both the instances `monoid G`
@@ -65,6 +68,7 @@ class HasSmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [
smooth_mul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2
#align has_smooth_mul HasSmoothMul
#align has_smooth_add HasSmoothAdd
+-/
section HasSmoothMul
@@ -78,12 +82,15 @@ section
variable (I)
+#print smooth_mul /-
@[to_additive]
theorem smooth_mul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2 :=
HasSmoothMul.smooth_mul
#align smooth_mul smooth_mul
#align smooth_add smooth_add
+-/
+#print continuousMul_of_smooth /-
/-- If the multiplication is smooth, then it is continuous. This is not an instance for technical
reasons, see note [Design choices about smooth algebraic structures]. -/
@[to_additive
@@ -91,7 +98,8 @@ reasons, see note [Design choices about smooth algebraic structures]. -/
theorem continuousMul_of_smooth : ContinuousMul G :=
⟨(smooth_mul I).Continuous⟩
#align has_continuous_mul_of_smooth continuousMul_of_smooth
-#align has_continuous_add_of_smooth has_continuous_add_of_smooth
+#align has_continuous_add_of_smooth continuousAdd_of_smooth
+-/
end
@@ -99,86 +107,110 @@ section
variable {f g : M → G} {s : Set M} {x : M} {n : ℕ∞}
+#print ContMDiffWithinAt.mul /-
@[to_additive]
theorem ContMDiffWithinAt.mul (hf : ContMDiffWithinAt I' I n f s x)
(hg : ContMDiffWithinAt I' I n g s x) : ContMDiffWithinAt I' I n (f * g) s x :=
((smooth_mul I).SmoothAt.of_le le_top).comp_contMDiffWithinAt x (hf.prod_mk hg)
#align cont_mdiff_within_at.mul ContMDiffWithinAt.mul
#align cont_mdiff_within_at.add ContMDiffWithinAt.add
+-/
+#print ContMDiffAt.mul /-
@[to_additive]
theorem ContMDiffAt.mul (hf : ContMDiffAt I' I n f x) (hg : ContMDiffAt I' I n g x) :
ContMDiffAt I' I n (f * g) x :=
hf.mul hg
#align cont_mdiff_at.mul ContMDiffAt.mul
#align cont_mdiff_at.add ContMDiffAt.add
+-/
+#print ContMDiffOn.mul /-
@[to_additive]
theorem ContMDiffOn.mul (hf : ContMDiffOn I' I n f s) (hg : ContMDiffOn I' I n g s) :
ContMDiffOn I' I n (f * g) s := fun x hx => (hf x hx).mul (hg x hx)
#align cont_mdiff_on.mul ContMDiffOn.mul
#align cont_mdiff_on.add ContMDiffOn.add
+-/
+#print ContMDiff.mul /-
@[to_additive]
theorem ContMDiff.mul (hf : ContMDiff I' I n f) (hg : ContMDiff I' I n g) :
ContMDiff I' I n (f * g) := fun x => (hf x).mul (hg x)
#align cont_mdiff.mul ContMDiff.mul
#align cont_mdiff.add ContMDiff.add
+-/
+#print SmoothWithinAt.mul /-
@[to_additive]
theorem SmoothWithinAt.mul (hf : SmoothWithinAt I' I f s x) (hg : SmoothWithinAt I' I g s x) :
SmoothWithinAt I' I (f * g) s x :=
hf.mul hg
#align smooth_within_at.mul SmoothWithinAt.mul
#align smooth_within_at.add SmoothWithinAt.add
+-/
+#print SmoothAt.mul /-
@[to_additive]
theorem SmoothAt.mul (hf : SmoothAt I' I f x) (hg : SmoothAt I' I g x) : SmoothAt I' I (f * g) x :=
hf.mul hg
#align smooth_at.mul SmoothAt.mul
#align smooth_at.add SmoothAt.add
+-/
+#print SmoothOn.mul /-
@[to_additive]
theorem SmoothOn.mul (hf : SmoothOn I' I f s) (hg : SmoothOn I' I g s) : SmoothOn I' I (f * g) s :=
hf.mul hg
#align smooth_on.mul SmoothOn.mul
#align smooth_on.add SmoothOn.add
+-/
+#print Smooth.mul /-
@[to_additive]
theorem Smooth.mul (hf : Smooth I' I f) (hg : Smooth I' I g) : Smooth I' I (f * g) :=
hf.mul hg
#align smooth.mul Smooth.mul
#align smooth.add Smooth.add
+-/
+#print smooth_mul_left /-
@[to_additive]
theorem smooth_mul_left {a : G} : Smooth I I fun b : G => a * b :=
smooth_const.mul smooth_id
#align smooth_mul_left smooth_mul_left
#align smooth_add_left smooth_add_left
+-/
+#print smooth_mul_right /-
@[to_additive]
theorem smooth_mul_right {a : G} : Smooth I I fun b : G => b * a :=
smooth_id.mul smooth_const
#align smooth_mul_right smooth_mul_right
#align smooth_add_right smooth_add_right
+-/
end
variable (I) (g h : G)
+#print smoothLeftMul /-
/-- Left multiplication by `g`. It is meant to mimic the usual notation in Lie groups.
Lemmas involving `smooth_left_mul` with the notation `𝑳` usually use `L` instead of `𝑳` in the
names. -/
def smoothLeftMul : C^∞⟮I, G; I, G⟯ :=
⟨leftMul g, smooth_mul_left⟩
#align smooth_left_mul smoothLeftMul
+-/
+#print smoothRightMul /-
/-- Right multiplication by `g`. It is meant to mimic the usual notation in Lie groups.
Lemmas involving `smooth_right_mul` with the notation `𝑹` usually use `R` instead of `𝑹` in the
names. -/
def smoothRightMul : C^∞⟮I, G; I, G⟯ :=
⟨rightMul g, smooth_mul_right⟩
#align smooth_right_mul smoothRightMul
+-/
-- Left multiplication. The abbreviation is `MIL`.
scoped[LieGroup] notation "𝑳" => smoothLeftMul
@@ -188,43 +220,56 @@ scoped[LieGroup] notation "𝑹" => smoothRightMul
open scoped LieGroup
+#print L_apply /-
@[simp]
theorem L_apply : (𝑳 I g) h = g * h :=
rfl
#align L_apply L_apply
+-/
+#print R_apply /-
@[simp]
theorem R_apply : (𝑹 I g) h = h * g :=
rfl
#align R_apply R_apply
+-/
+#print L_mul /-
@[simp]
theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
(g h : G) : 𝑳 I (g * h) = (𝑳 I g).comp (𝑳 I h) := by ext;
simp only [ContMDiffMap.comp_apply, L_apply, mul_assoc]
#align L_mul L_mul
+-/
+#print R_mul /-
@[simp]
theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
(g h : G) : 𝑹 I (g * h) = (𝑹 I h).comp (𝑹 I g) := by ext;
simp only [ContMDiffMap.comp_apply, R_apply, mul_assoc]
#align R_mul R_mul
+-/
section
variable {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H G'] [HasSmoothMul I G']
(g' : G')
+#print smoothLeftMul_one /-
theorem smoothLeftMul_one : (𝑳 I g') 1 = g' :=
mul_one g'
#align smooth_left_mul_one smoothLeftMul_one
+-/
+#print smoothRightMul_one /-
theorem smoothRightMul_one : (𝑹 I g') 1 = g' :=
one_mul g'
#align smooth_right_mul_one smoothRightMul_one
+-/
end
+#print HasSmoothMul.prod /-
-- Instance of product
@[to_additive]
instance HasSmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _}
@@ -239,6 +284,7 @@ instance HasSmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : T
((smooth_snd.comp smooth_fst).Smooth.mul (smooth_snd.comp smooth_snd)) }
#align has_smooth_mul.prod HasSmoothMul.prod
#align has_smooth_add.sum HasSmoothAdd.sum
+-/
end HasSmoothMul
@@ -250,11 +296,14 @@ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Topologica
{E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {I' : ModelWithCorners 𝕜 E' H'}
{G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [HasSmoothMul I' G']
+#print smooth_pow /-
theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
| 0 => by simp only [pow_zero]; exact smooth_const
| k + 1 => by simpa [pow_succ] using smooth_id.mul (smooth_pow _)
#align smooth_pow smooth_pow
+-/
+#print SmoothAddMonoidMorphism /-
/-- Morphism of additive smooth monoids. -/
structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
(G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [HasSmoothAdd I G]
@@ -262,7 +311,9 @@ structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWit
[HasSmoothAdd I' G'] extends G →+ G' where
smooth_toFun : Smooth I I' to_fun
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
+-/
+#print SmoothMonoidMorphism /-
/-- Morphism of smooth monoids. -/
@[to_additive]
structure SmoothMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
@@ -272,6 +323,7 @@ structure SmoothMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCo
smooth_toFun : Smooth I I' to_fun
#align smooth_monoid_morphism SmoothMonoidMorphism
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
+-/
@[to_additive]
instance : One (SmoothMonoidMorphism I I' G G') :=
@@ -299,119 +351,152 @@ variable {ι 𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Topolog
{M : Type _} [TopologicalSpace M] [ChartedSpace H' M] {s : Set M} {x : M} {t : Finset ι}
{f : ι → M → G} {n : ℕ∞} {p : ι → Prop}
+#print contMDiffWithinAt_finset_prod' /-
@[to_additive]
theorem contMDiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x) :
ContMDiffWithinAt I' I n (∏ i in t, f i) s x :=
Finset.prod_induction f (fun f => ContMDiffWithinAt I' I n f s x) (fun f g hf hg => hf.mul hg)
contMDiffWithinAt_const h
#align cont_mdiff_within_at_finset_prod' contMDiffWithinAt_finset_prod'
-#align cont_mdiff_within_at_finset_sum' cont_mdiff_within_at_finset_sum'
+#align cont_mdiff_within_at_finset_sum' contMDiffWithinAt_finset_sum'
+-/
+#print contMDiffAt_finset_prod' /-
@[to_additive]
theorem contMDiffAt_finset_prod' (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
ContMDiffAt I' I n (∏ i in t, f i) x :=
contMDiffWithinAt_finset_prod' h
#align cont_mdiff_at_finset_prod' contMDiffAt_finset_prod'
-#align cont_mdiff_at_finset_sum' cont_mdiff_at_finset_sum'
+#align cont_mdiff_at_finset_sum' contMDiffAt_finset_sum'
+-/
+#print contMDiffOn_finset_prod' /-
@[to_additive]
theorem contMDiffOn_finset_prod' (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
ContMDiffOn I' I n (∏ i in t, f i) s := fun x hx =>
contMDiffWithinAt_finset_prod' fun i hi => h i hi x hx
#align cont_mdiff_on_finset_prod' contMDiffOn_finset_prod'
-#align cont_mdiff_on_finset_sum' cont_mdiff_on_finset_sum'
+#align cont_mdiff_on_finset_sum' contMDiffOn_finset_sum'
+-/
+#print contMDiff_finset_prod' /-
@[to_additive]
theorem contMDiff_finset_prod' (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
ContMDiff I' I n (∏ i in t, f i) := fun x => contMDiffAt_finset_prod' fun i hi => h i hi x
#align cont_mdiff_finset_prod' contMDiff_finset_prod'
-#align cont_mdiff_finset_sum' cont_mdiff_finset_sum'
+#align cont_mdiff_finset_sum' contMDiff_finset_sum'
+-/
+#print contMDiffWithinAt_finset_prod /-
@[to_additive]
theorem contMDiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x) :
ContMDiffWithinAt I' I n (fun x => ∏ i in t, f i x) s x := by simp only [← Finset.prod_apply];
exact contMDiffWithinAt_finset_prod' h
#align cont_mdiff_within_at_finset_prod contMDiffWithinAt_finset_prod
-#align cont_mdiff_within_at_finset_sum cont_mdiff_within_at_finset_sum
+#align cont_mdiff_within_at_finset_sum contMDiffWithinAt_finset_sum
+-/
+#print contMDiffAt_finset_prod /-
@[to_additive]
theorem contMDiffAt_finset_prod (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
ContMDiffAt I' I n (fun x => ∏ i in t, f i x) x :=
contMDiffWithinAt_finset_prod h
#align cont_mdiff_at_finset_prod contMDiffAt_finset_prod
-#align cont_mdiff_at_finset_sum cont_mdiff_at_finset_sum
+#align cont_mdiff_at_finset_sum contMDiffAt_finset_sum
+-/
+#print contMDiffOn_finset_prod /-
@[to_additive]
theorem contMDiffOn_finset_prod (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
ContMDiffOn I' I n (fun x => ∏ i in t, f i x) s := fun x hx =>
contMDiffWithinAt_finset_prod fun i hi => h i hi x hx
#align cont_mdiff_on_finset_prod contMDiffOn_finset_prod
-#align cont_mdiff_on_finset_sum cont_mdiff_on_finset_sum
+#align cont_mdiff_on_finset_sum contMDiffOn_finset_sum
+-/
+#print contMDiff_finset_prod /-
@[to_additive]
theorem contMDiff_finset_prod (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
ContMDiff I' I n fun x => ∏ i in t, f i x := fun x =>
contMDiffAt_finset_prod fun i hi => h i hi x
#align cont_mdiff_finset_prod contMDiff_finset_prod
-#align cont_mdiff_finset_sum cont_mdiff_finset_sum
+#align cont_mdiff_finset_sum contMDiff_finset_sum
+-/
+#print smoothWithinAt_finset_prod' /-
@[to_additive]
theorem smoothWithinAt_finset_prod' (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
SmoothWithinAt I' I (∏ i in t, f i) s x :=
contMDiffWithinAt_finset_prod' h
#align smooth_within_at_finset_prod' smoothWithinAt_finset_prod'
-#align smooth_within_at_finset_sum' smooth_within_at_finset_sum'
+#align smooth_within_at_finset_sum' smoothWithinAt_finset_sum'
+-/
+#print smoothAt_finset_prod' /-
@[to_additive]
theorem smoothAt_finset_prod' (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (∏ i in t, f i) x :=
contMDiffAt_finset_prod' h
#align smooth_at_finset_prod' smoothAt_finset_prod'
-#align smooth_at_finset_sum' smooth_at_finset_sum'
+#align smooth_at_finset_sum' smoothAt_finset_sum'
+-/
+#print smoothOn_finset_prod' /-
@[to_additive]
theorem smoothOn_finset_prod' (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (∏ i in t, f i) s :=
contMDiffOn_finset_prod' h
#align smooth_on_finset_prod' smoothOn_finset_prod'
-#align smooth_on_finset_sum' smooth_on_finset_sum'
+#align smooth_on_finset_sum' smoothOn_finset_sum'
+-/
+#print smooth_finset_prod' /-
@[to_additive]
theorem smooth_finset_prod' (h : ∀ i ∈ t, Smooth I' I (f i)) : Smooth I' I (∏ i in t, f i) :=
contMDiff_finset_prod' h
#align smooth_finset_prod' smooth_finset_prod'
#align smooth_finset_sum' smooth_finset_sum'
+-/
+#print smoothWithinAt_finset_prod /-
@[to_additive]
theorem smoothWithinAt_finset_prod (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
SmoothWithinAt I' I (fun x => ∏ i in t, f i x) s x :=
contMDiffWithinAt_finset_prod h
#align smooth_within_at_finset_prod smoothWithinAt_finset_prod
-#align smooth_within_at_finset_sum smooth_within_at_finset_sum
+#align smooth_within_at_finset_sum smoothWithinAt_finset_sum
+-/
+#print smoothAt_finset_prod /-
@[to_additive]
theorem smoothAt_finset_prod (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (fun x => ∏ i in t, f i x) x :=
contMDiffAt_finset_prod h
#align smooth_at_finset_prod smoothAt_finset_prod
-#align smooth_at_finset_sum smooth_at_finset_sum
+#align smooth_at_finset_sum smoothAt_finset_sum
+-/
+#print smoothOn_finset_prod /-
@[to_additive]
theorem smoothOn_finset_prod (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (fun x => ∏ i in t, f i x) s :=
contMDiffOn_finset_prod h
#align smooth_on_finset_prod smoothOn_finset_prod
-#align smooth_on_finset_sum smooth_on_finset_sum
+#align smooth_on_finset_sum smoothOn_finset_sum
+-/
+#print smooth_finset_prod /-
@[to_additive]
theorem smooth_finset_prod (h : ∀ i ∈ t, Smooth I' I (f i)) :
Smooth I' I fun x => ∏ i in t, f i x :=
contMDiff_finset_prod h
#align smooth_finset_prod smooth_finset_prod
#align smooth_finset_sum smooth_finset_sum
+-/
open Function Filter
+#print contMDiff_finprod /-
@[to_additive]
theorem contMDiff_finprod (h : ∀ i, ContMDiff I' I n (f i))
(hfin : LocallyFinite fun i => mulSupport (f i)) : ContMDiff I' I n fun x => ∏ᶠ i, f i x :=
@@ -420,8 +505,10 @@ theorem contMDiff_finprod (h : ∀ i, ContMDiff I' I n (f i))
rcases finprod_eventually_eq_prod hfin x with ⟨s, hs⟩
exact (contMDiff_finset_prod (fun i hi => h i) x).congr_of_eventuallyEq hs
#align cont_mdiff_finprod contMDiff_finprod
-#align cont_mdiff_finsum cont_mdiff_finsum
+#align cont_mdiff_finsum contMDiff_finsum
+-/
+#print contMDiff_finprod_cond /-
@[to_additive]
theorem contMDiff_finprod_cond (hc : ∀ i, p i → ContMDiff I' I n (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) :
@@ -430,15 +517,19 @@ theorem contMDiff_finprod_cond (hc : ∀ i, p i → ContMDiff I' I n (f i))
simp only [← finprod_subtype_eq_finprod_cond]
exact contMDiff_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
#align cont_mdiff_finprod_cond contMDiff_finprod_cond
-#align cont_mdiff_finsum_cond cont_mdiff_finsum_cond
+#align cont_mdiff_finsum_cond contMDiff_finsum_cond
+-/
+#print smooth_finprod /-
@[to_additive]
theorem smooth_finprod (h : ∀ i, Smooth I' I (f i))
(hfin : LocallyFinite fun i => mulSupport (f i)) : Smooth I' I fun x => ∏ᶠ i, f i x :=
contMDiff_finprod h hfin
#align smooth_finprod smooth_finprod
#align smooth_finsum smooth_finsum
+-/
+#print smooth_finprod_cond /-
@[to_additive]
theorem smooth_finprod_cond (hc : ∀ i, p i → Smooth I' I (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) :
@@ -446,6 +537,7 @@ theorem smooth_finprod_cond (hc : ∀ i, p i → Smooth I' I (f i))
contMDiff_finprod_cond hc hf
#align smooth_finprod_cond smooth_finprod_cond
#align smooth_finsum_cond smooth_finsum_cond
+-/
end CommMonoid
@@ -454,11 +546,13 @@ section
variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddCommGroup E]
[NormedSpace 𝕜 E]
+#print hasSmoothAddSelf /-
instance hasSmoothAddSelf : HasSmoothAdd 𝓘(𝕜, E) E :=
⟨by
convert cont_diff_add.cont_mdiff; exact model_with_corners_self_prod.symm
exact chartedSpaceSelf_prod⟩
#align has_smooth_add_self hasSmoothAddSelf
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -201,13 +201,13 @@ theorem R_apply : (𝑹 I g) h = h * g :=
@[simp]
theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
(g h : G) : 𝑳 I (g * h) = (𝑳 I g).comp (𝑳 I h) := by ext;
- simp only [ContMdiffMap.comp_apply, L_apply, mul_assoc]
+ simp only [ContMDiffMap.comp_apply, L_apply, mul_assoc]
#align L_mul L_mul
@[simp]
theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
(g h : G) : 𝑹 I (g * h) = (𝑹 I h).comp (𝑹 I g) := by ext;
- simp only [ContMdiffMap.comp_apply, R_apply, mul_assoc]
+ simp only [ContMDiffMap.comp_apply, R_apply, mul_assoc]
#align R_mul R_mul
section
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -100,30 +100,30 @@ section
variable {f g : M → G} {s : Set M} {x : M} {n : ℕ∞}
@[to_additive]
-theorem ContMdiffWithinAt.mul (hf : ContMdiffWithinAt I' I n f s x)
- (hg : ContMdiffWithinAt I' I n g s x) : ContMdiffWithinAt I' I n (f * g) s x :=
- ((smooth_mul I).SmoothAt.of_le le_top).comp_contMdiffWithinAt x (hf.prod_mk hg)
-#align cont_mdiff_within_at.mul ContMdiffWithinAt.mul
-#align cont_mdiff_within_at.add ContMdiffWithinAt.add
+theorem ContMDiffWithinAt.mul (hf : ContMDiffWithinAt I' I n f s x)
+ (hg : ContMDiffWithinAt I' I n g s x) : ContMDiffWithinAt I' I n (f * g) s x :=
+ ((smooth_mul I).SmoothAt.of_le le_top).comp_contMDiffWithinAt x (hf.prod_mk hg)
+#align cont_mdiff_within_at.mul ContMDiffWithinAt.mul
+#align cont_mdiff_within_at.add ContMDiffWithinAt.add
@[to_additive]
-theorem ContMdiffAt.mul (hf : ContMdiffAt I' I n f x) (hg : ContMdiffAt I' I n g x) :
- ContMdiffAt I' I n (f * g) x :=
+theorem ContMDiffAt.mul (hf : ContMDiffAt I' I n f x) (hg : ContMDiffAt I' I n g x) :
+ ContMDiffAt I' I n (f * g) x :=
hf.mul hg
-#align cont_mdiff_at.mul ContMdiffAt.mul
-#align cont_mdiff_at.add ContMdiffAt.add
+#align cont_mdiff_at.mul ContMDiffAt.mul
+#align cont_mdiff_at.add ContMDiffAt.add
@[to_additive]
-theorem ContMdiffOn.mul (hf : ContMdiffOn I' I n f s) (hg : ContMdiffOn I' I n g s) :
- ContMdiffOn I' I n (f * g) s := fun x hx => (hf x hx).mul (hg x hx)
-#align cont_mdiff_on.mul ContMdiffOn.mul
-#align cont_mdiff_on.add ContMdiffOn.add
+theorem ContMDiffOn.mul (hf : ContMDiffOn I' I n f s) (hg : ContMDiffOn I' I n g s) :
+ ContMDiffOn I' I n (f * g) s := fun x hx => (hf x hx).mul (hg x hx)
+#align cont_mdiff_on.mul ContMDiffOn.mul
+#align cont_mdiff_on.add ContMDiffOn.add
@[to_additive]
-theorem ContMdiff.mul (hf : ContMdiff I' I n f) (hg : ContMdiff I' I n g) :
- ContMdiff I' I n (f * g) := fun x => (hf x).mul (hg x)
-#align cont_mdiff.mul ContMdiff.mul
-#align cont_mdiff.add ContMdiff.add
+theorem ContMDiff.mul (hf : ContMDiff I' I n f) (hg : ContMDiff I' I n g) :
+ ContMDiff I' I n (f * g) := fun x => (hf x).mul (hg x)
+#align cont_mdiff.mul ContMDiff.mul
+#align cont_mdiff.add ContMDiff.add
@[to_additive]
theorem SmoothWithinAt.mul (hf : SmoothWithinAt I' I f s x) (hg : SmoothWithinAt I' I g s x) :
@@ -300,142 +300,142 @@ variable {ι 𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Topolog
{f : ι → M → G} {n : ℕ∞} {p : ι → Prop}
@[to_additive]
-theorem contMdiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMdiffWithinAt I' I n (f i) s x) :
- ContMdiffWithinAt I' I n (∏ i in t, f i) s x :=
- Finset.prod_induction f (fun f => ContMdiffWithinAt I' I n f s x) (fun f g hf hg => hf.mul hg)
- contMdiffWithinAt_const h
-#align cont_mdiff_within_at_finset_prod' contMdiffWithinAt_finset_prod'
+theorem contMDiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x) :
+ ContMDiffWithinAt I' I n (∏ i in t, f i) s x :=
+ Finset.prod_induction f (fun f => ContMDiffWithinAt I' I n f s x) (fun f g hf hg => hf.mul hg)
+ contMDiffWithinAt_const h
+#align cont_mdiff_within_at_finset_prod' contMDiffWithinAt_finset_prod'
#align cont_mdiff_within_at_finset_sum' cont_mdiff_within_at_finset_sum'
@[to_additive]
-theorem contMdiffAt_finset_prod' (h : ∀ i ∈ t, ContMdiffAt I' I n (f i) x) :
- ContMdiffAt I' I n (∏ i in t, f i) x :=
- contMdiffWithinAt_finset_prod' h
-#align cont_mdiff_at_finset_prod' contMdiffAt_finset_prod'
+theorem contMDiffAt_finset_prod' (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
+ ContMDiffAt I' I n (∏ i in t, f i) x :=
+ contMDiffWithinAt_finset_prod' h
+#align cont_mdiff_at_finset_prod' contMDiffAt_finset_prod'
#align cont_mdiff_at_finset_sum' cont_mdiff_at_finset_sum'
@[to_additive]
-theorem contMdiffOn_finset_prod' (h : ∀ i ∈ t, ContMdiffOn I' I n (f i) s) :
- ContMdiffOn I' I n (∏ i in t, f i) s := fun x hx =>
- contMdiffWithinAt_finset_prod' fun i hi => h i hi x hx
-#align cont_mdiff_on_finset_prod' contMdiffOn_finset_prod'
+theorem contMDiffOn_finset_prod' (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
+ ContMDiffOn I' I n (∏ i in t, f i) s := fun x hx =>
+ contMDiffWithinAt_finset_prod' fun i hi => h i hi x hx
+#align cont_mdiff_on_finset_prod' contMDiffOn_finset_prod'
#align cont_mdiff_on_finset_sum' cont_mdiff_on_finset_sum'
@[to_additive]
-theorem contMdiff_finset_prod' (h : ∀ i ∈ t, ContMdiff I' I n (f i)) :
- ContMdiff I' I n (∏ i in t, f i) := fun x => contMdiffAt_finset_prod' fun i hi => h i hi x
-#align cont_mdiff_finset_prod' contMdiff_finset_prod'
+theorem contMDiff_finset_prod' (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
+ ContMDiff I' I n (∏ i in t, f i) := fun x => contMDiffAt_finset_prod' fun i hi => h i hi x
+#align cont_mdiff_finset_prod' contMDiff_finset_prod'
#align cont_mdiff_finset_sum' cont_mdiff_finset_sum'
@[to_additive]
-theorem contMdiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMdiffWithinAt I' I n (f i) s x) :
- ContMdiffWithinAt I' I n (fun x => ∏ i in t, f i x) s x := by simp only [← Finset.prod_apply];
- exact contMdiffWithinAt_finset_prod' h
-#align cont_mdiff_within_at_finset_prod contMdiffWithinAt_finset_prod
+theorem contMDiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x) :
+ ContMDiffWithinAt I' I n (fun x => ∏ i in t, f i x) s x := by simp only [← Finset.prod_apply];
+ exact contMDiffWithinAt_finset_prod' h
+#align cont_mdiff_within_at_finset_prod contMDiffWithinAt_finset_prod
#align cont_mdiff_within_at_finset_sum cont_mdiff_within_at_finset_sum
@[to_additive]
-theorem contMdiffAt_finset_prod (h : ∀ i ∈ t, ContMdiffAt I' I n (f i) x) :
- ContMdiffAt I' I n (fun x => ∏ i in t, f i x) x :=
- contMdiffWithinAt_finset_prod h
-#align cont_mdiff_at_finset_prod contMdiffAt_finset_prod
+theorem contMDiffAt_finset_prod (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
+ ContMDiffAt I' I n (fun x => ∏ i in t, f i x) x :=
+ contMDiffWithinAt_finset_prod h
+#align cont_mdiff_at_finset_prod contMDiffAt_finset_prod
#align cont_mdiff_at_finset_sum cont_mdiff_at_finset_sum
@[to_additive]
-theorem contMdiffOn_finset_prod (h : ∀ i ∈ t, ContMdiffOn I' I n (f i) s) :
- ContMdiffOn I' I n (fun x => ∏ i in t, f i x) s := fun x hx =>
- contMdiffWithinAt_finset_prod fun i hi => h i hi x hx
-#align cont_mdiff_on_finset_prod contMdiffOn_finset_prod
+theorem contMDiffOn_finset_prod (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
+ ContMDiffOn I' I n (fun x => ∏ i in t, f i x) s := fun x hx =>
+ contMDiffWithinAt_finset_prod fun i hi => h i hi x hx
+#align cont_mdiff_on_finset_prod contMDiffOn_finset_prod
#align cont_mdiff_on_finset_sum cont_mdiff_on_finset_sum
@[to_additive]
-theorem contMdiff_finset_prod (h : ∀ i ∈ t, ContMdiff I' I n (f i)) :
- ContMdiff I' I n fun x => ∏ i in t, f i x := fun x =>
- contMdiffAt_finset_prod fun i hi => h i hi x
-#align cont_mdiff_finset_prod contMdiff_finset_prod
+theorem contMDiff_finset_prod (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
+ ContMDiff I' I n fun x => ∏ i in t, f i x := fun x =>
+ contMDiffAt_finset_prod fun i hi => h i hi x
+#align cont_mdiff_finset_prod contMDiff_finset_prod
#align cont_mdiff_finset_sum cont_mdiff_finset_sum
@[to_additive]
theorem smoothWithinAt_finset_prod' (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
SmoothWithinAt I' I (∏ i in t, f i) s x :=
- contMdiffWithinAt_finset_prod' h
+ contMDiffWithinAt_finset_prod' h
#align smooth_within_at_finset_prod' smoothWithinAt_finset_prod'
#align smooth_within_at_finset_sum' smooth_within_at_finset_sum'
@[to_additive]
theorem smoothAt_finset_prod' (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (∏ i in t, f i) x :=
- contMdiffAt_finset_prod' h
+ contMDiffAt_finset_prod' h
#align smooth_at_finset_prod' smoothAt_finset_prod'
#align smooth_at_finset_sum' smooth_at_finset_sum'
@[to_additive]
theorem smoothOn_finset_prod' (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (∏ i in t, f i) s :=
- contMdiffOn_finset_prod' h
+ contMDiffOn_finset_prod' h
#align smooth_on_finset_prod' smoothOn_finset_prod'
#align smooth_on_finset_sum' smooth_on_finset_sum'
@[to_additive]
theorem smooth_finset_prod' (h : ∀ i ∈ t, Smooth I' I (f i)) : Smooth I' I (∏ i in t, f i) :=
- contMdiff_finset_prod' h
+ contMDiff_finset_prod' h
#align smooth_finset_prod' smooth_finset_prod'
#align smooth_finset_sum' smooth_finset_sum'
@[to_additive]
theorem smoothWithinAt_finset_prod (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
SmoothWithinAt I' I (fun x => ∏ i in t, f i x) s x :=
- contMdiffWithinAt_finset_prod h
+ contMDiffWithinAt_finset_prod h
#align smooth_within_at_finset_prod smoothWithinAt_finset_prod
#align smooth_within_at_finset_sum smooth_within_at_finset_sum
@[to_additive]
theorem smoothAt_finset_prod (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (fun x => ∏ i in t, f i x) x :=
- contMdiffAt_finset_prod h
+ contMDiffAt_finset_prod h
#align smooth_at_finset_prod smoothAt_finset_prod
#align smooth_at_finset_sum smooth_at_finset_sum
@[to_additive]
theorem smoothOn_finset_prod (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (fun x => ∏ i in t, f i x) s :=
- contMdiffOn_finset_prod h
+ contMDiffOn_finset_prod h
#align smooth_on_finset_prod smoothOn_finset_prod
#align smooth_on_finset_sum smooth_on_finset_sum
@[to_additive]
theorem smooth_finset_prod (h : ∀ i ∈ t, Smooth I' I (f i)) :
Smooth I' I fun x => ∏ i in t, f i x :=
- contMdiff_finset_prod h
+ contMDiff_finset_prod h
#align smooth_finset_prod smooth_finset_prod
#align smooth_finset_sum smooth_finset_sum
open Function Filter
@[to_additive]
-theorem contMdiff_finprod (h : ∀ i, ContMdiff I' I n (f i))
- (hfin : LocallyFinite fun i => mulSupport (f i)) : ContMdiff I' I n fun x => ∏ᶠ i, f i x :=
+theorem contMDiff_finprod (h : ∀ i, ContMDiff I' I n (f i))
+ (hfin : LocallyFinite fun i => mulSupport (f i)) : ContMDiff I' I n fun x => ∏ᶠ i, f i x :=
by
intro x
rcases finprod_eventually_eq_prod hfin x with ⟨s, hs⟩
- exact (contMdiff_finset_prod (fun i hi => h i) x).congr_of_eventuallyEq hs
-#align cont_mdiff_finprod contMdiff_finprod
+ exact (contMDiff_finset_prod (fun i hi => h i) x).congr_of_eventuallyEq hs
+#align cont_mdiff_finprod contMDiff_finprod
#align cont_mdiff_finsum cont_mdiff_finsum
@[to_additive]
-theorem contMdiff_finprod_cond (hc : ∀ i, p i → ContMdiff I' I n (f i))
+theorem contMDiff_finprod_cond (hc : ∀ i, p i → ContMDiff I' I n (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) :
- ContMdiff I' I n fun x => ∏ᶠ (i) (hi : p i), f i x :=
+ ContMDiff I' I n fun x => ∏ᶠ (i) (hi : p i), f i x :=
by
simp only [← finprod_subtype_eq_finprod_cond]
- exact contMdiff_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
-#align cont_mdiff_finprod_cond contMdiff_finprod_cond
+ exact contMDiff_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
+#align cont_mdiff_finprod_cond contMDiff_finprod_cond
#align cont_mdiff_finsum_cond cont_mdiff_finsum_cond
@[to_additive]
theorem smooth_finprod (h : ∀ i, Smooth I' I (f i))
(hfin : LocallyFinite fun i => mulSupport (f i)) : Smooth I' I fun x => ∏ᶠ i, f i x :=
- contMdiff_finprod h hfin
+ contMDiff_finprod h hfin
#align smooth_finprod smooth_finprod
#align smooth_finsum smooth_finsum
@@ -443,7 +443,7 @@ theorem smooth_finprod (h : ∀ i, Smooth I' I (f i))
theorem smooth_finprod_cond (hc : ∀ i, p i → Smooth I' I (f i))
(hf : LocallyFinite fun i => mulSupport (f i)) :
Smooth I' I fun x => ∏ᶠ (i) (hi : p i), f i x :=
- contMdiff_finprod_cond hc hf
+ contMDiff_finprod_cond hc hf
#align smooth_finprod_cond smooth_finprod_cond
#align smooth_finsum_cond smooth_finsum_cond
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -180,11 +180,9 @@ def smoothRightMul : C^∞⟮I, G; I, G⟯ :=
⟨rightMul g, smooth_mul_right⟩
#align smooth_right_mul smoothRightMul
--- mathport name: smooth_left_mul
-- Left multiplication. The abbreviation is `MIL`.
scoped[LieGroup] notation "𝑳" => smoothLeftMul
--- mathport name: smooth_right_mul
-- Right multiplication. The abbreviation is `MIR`.
scoped[LieGroup] notation "𝑹" => smoothRightMul
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -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.monoid
-! leanprover-community/mathlib commit 3d7987cda72abc473c7cdbbb075170e9ac620042
+! leanprover-community/mathlib commit e354e865255654389cc46e6032160238df2e0f40
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -451,3 +451,16 @@ theorem smooth_finprod_cond (hc : ∀ i, p i → Smooth I' I (f i))
end CommMonoid
+section
+
+variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddCommGroup E]
+ [NormedSpace 𝕜 E]
+
+instance hasSmoothAddSelf : HasSmoothAdd 𝓘(𝕜, E) E :=
+ ⟨by
+ convert cont_diff_add.cont_mdiff; exact model_with_corners_self_prod.symm
+ exact chartedSpaceSelf_prod⟩
+#align has_smooth_add_self hasSmoothAddSelf
+
+end
+
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -47,8 +47,9 @@ we formulate the definitions and lemmas for any model.
semigroup. A smooth additive monoid over `α`, for example, is obtained by requiring both the
instances `add_monoid α` and `has_smooth_add α`. -/
class HasSmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
- [Add G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G : Prop where
+ {E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
+ [Add G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
+ Prop where
smooth_add : Smooth (I.Prod I) I fun p : G × G => p.1 + p.2
#align has_smooth_add HasSmoothAdd
@@ -58,8 +59,9 @@ A smooth monoid over `G`, for example, is obtained by requiring both the instanc
and `has_smooth_mul I G`. -/
@[to_additive]
class HasSmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
- [Mul G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G : Prop where
+ {E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
+ [Mul G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
+ Prop where
smooth_mul : Smooth (I.Prod I) I fun p : G × G => p.1 * p.2
#align has_smooth_mul HasSmoothMul
#align has_smooth_add HasSmoothAdd
@@ -257,17 +259,18 @@ theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
/-- Morphism of additive smooth monoids. -/
structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [HasSmoothAdd I G]
- (G' : Type _) [TopologicalSpace G'] [ChartedSpace H' G'] [AddMonoid G']
- [HasSmoothAdd I' G'] extends G →+ G' where
+ (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [HasSmoothAdd I G]
+ (G' : Type _) [TopologicalSpace G'] [ChartedSpace H' G'] [AddMonoid G']
+ [HasSmoothAdd I' G'] extends G →+ G' where
smooth_toFun : Smooth I I' to_fun
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
/-- Morphism of smooth monoids. -/
@[to_additive]
structure SmoothMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [HasSmoothMul I G] (G' : Type _)
- [TopologicalSpace G'] [ChartedSpace H' G'] [Monoid G'] [HasSmoothMul I' G'] extends G →* G' where
+ (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [HasSmoothMul I G] (G' : Type _)
+ [TopologicalSpace G'] [ChartedSpace H' G'] [Monoid G'] [HasSmoothMul I' G'] extends
+ G →* G' where
smooth_toFun : Smooth I I' to_fun
#align smooth_monoid_morphism SmoothMonoidMorphism
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -21,7 +21,7 @@ semigroups.
-/
-open Manifold
+open scoped Manifold
library_note "Design choices about smooth algebraic structures"/--
1. All smooth algebraic structures on `G` are `Prop`-valued classes that extend
@@ -186,7 +186,7 @@ scoped[LieGroup] notation "𝑳" => smoothLeftMul
-- Right multiplication. The abbreviation is `MIR`.
scoped[LieGroup] notation "𝑹" => smoothRightMul
-open LieGroup
+open scoped LieGroup
@[simp]
theorem L_apply : (𝑳 I g) h = g * h :=
@@ -289,7 +289,7 @@ end Monoid
section CommMonoid
-open BigOperators
+open scoped BigOperators
variable {ι 𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [CommMonoid G]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -200,17 +200,13 @@ theorem R_apply : (𝑹 I g) h = h * g :=
@[simp]
theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
- (g h : G) : 𝑳 I (g * h) = (𝑳 I g).comp (𝑳 I h) :=
- by
- ext
+ (g h : G) : 𝑳 I (g * h) = (𝑳 I g).comp (𝑳 I h) := by ext;
simp only [ContMdiffMap.comp_apply, L_apply, mul_assoc]
#align L_mul L_mul
@[simp]
theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
- (g h : G) : 𝑹 I (g * h) = (𝑹 I h).comp (𝑹 I g) :=
- by
- ext
+ (g h : G) : 𝑹 I (g * h) = (𝑹 I h).comp (𝑹 I g) := by ext;
simp only [ContMdiffMap.comp_apply, R_apply, mul_assoc]
#align R_mul R_mul
@@ -255,9 +251,7 @@ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Topologica
{G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [HasSmoothMul I' G']
theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
- | 0 => by
- simp only [pow_zero]
- exact smooth_const
+ | 0 => by simp only [pow_zero]; exact smooth_const
| k + 1 => by simpa [pow_succ] using smooth_id.mul (smooth_pow _)
#align smooth_pow smooth_pow
@@ -334,9 +328,7 @@ theorem contMdiff_finset_prod' (h : ∀ i ∈ t, ContMdiff I' I n (f i)) :
@[to_additive]
theorem contMdiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMdiffWithinAt I' I n (f i) s x) :
- ContMdiffWithinAt I' I n (fun x => ∏ i in t, f i x) s x :=
- by
- simp only [← Finset.prod_apply]
+ ContMdiffWithinAt I' I n (fun x => ∏ i in t, f i x) s x := by simp only [← Finset.prod_apply];
exact contMdiffWithinAt_finset_prod' h
#align cont_mdiff_within_at_finset_prod contMdiffWithinAt_finset_prod
#align cont_mdiff_within_at_finset_sum cont_mdiff_within_at_finset_sum
mathlib commit https://github.com/leanprover-community/mathlib/commit/c9236f47f5b9df573443aa499c0d3968769628b7
@@ -310,27 +310,27 @@ theorem contMdiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMdiffWithinAt I' I
Finset.prod_induction f (fun f => ContMdiffWithinAt I' I n f s x) (fun f g hf hg => hf.mul hg)
contMdiffWithinAt_const h
#align cont_mdiff_within_at_finset_prod' contMdiffWithinAt_finset_prod'
-#align cont_mdiff_within_at_finset_sum' contMdiffWithinAt_finset_sum'
+#align cont_mdiff_within_at_finset_sum' cont_mdiff_within_at_finset_sum'
@[to_additive]
theorem contMdiffAt_finset_prod' (h : ∀ i ∈ t, ContMdiffAt I' I n (f i) x) :
ContMdiffAt I' I n (∏ i in t, f i) x :=
contMdiffWithinAt_finset_prod' h
#align cont_mdiff_at_finset_prod' contMdiffAt_finset_prod'
-#align cont_mdiff_at_finset_sum' contMdiffAt_finset_sum'
+#align cont_mdiff_at_finset_sum' cont_mdiff_at_finset_sum'
@[to_additive]
theorem contMdiffOn_finset_prod' (h : ∀ i ∈ t, ContMdiffOn I' I n (f i) s) :
ContMdiffOn I' I n (∏ i in t, f i) s := fun x hx =>
contMdiffWithinAt_finset_prod' fun i hi => h i hi x hx
#align cont_mdiff_on_finset_prod' contMdiffOn_finset_prod'
-#align cont_mdiff_on_finset_sum' contMdiffOn_finset_sum'
+#align cont_mdiff_on_finset_sum' cont_mdiff_on_finset_sum'
@[to_additive]
theorem contMdiff_finset_prod' (h : ∀ i ∈ t, ContMdiff I' I n (f i)) :
ContMdiff I' I n (∏ i in t, f i) := fun x => contMdiffAt_finset_prod' fun i hi => h i hi x
#align cont_mdiff_finset_prod' contMdiff_finset_prod'
-#align cont_mdiff_finset_sum' contMdiff_finset_sum'
+#align cont_mdiff_finset_sum' cont_mdiff_finset_sum'
@[to_additive]
theorem contMdiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMdiffWithinAt I' I n (f i) s x) :
@@ -339,49 +339,49 @@ theorem contMdiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMdiffWithinAt I' I n
simp only [← Finset.prod_apply]
exact contMdiffWithinAt_finset_prod' h
#align cont_mdiff_within_at_finset_prod contMdiffWithinAt_finset_prod
-#align cont_mdiff_within_at_finset_sum contMdiffWithinAt_finset_sum
+#align cont_mdiff_within_at_finset_sum cont_mdiff_within_at_finset_sum
@[to_additive]
theorem contMdiffAt_finset_prod (h : ∀ i ∈ t, ContMdiffAt I' I n (f i) x) :
ContMdiffAt I' I n (fun x => ∏ i in t, f i x) x :=
contMdiffWithinAt_finset_prod h
#align cont_mdiff_at_finset_prod contMdiffAt_finset_prod
-#align cont_mdiff_at_finset_sum contMdiffAt_finset_sum
+#align cont_mdiff_at_finset_sum cont_mdiff_at_finset_sum
@[to_additive]
theorem contMdiffOn_finset_prod (h : ∀ i ∈ t, ContMdiffOn I' I n (f i) s) :
ContMdiffOn I' I n (fun x => ∏ i in t, f i x) s := fun x hx =>
contMdiffWithinAt_finset_prod fun i hi => h i hi x hx
#align cont_mdiff_on_finset_prod contMdiffOn_finset_prod
-#align cont_mdiff_on_finset_sum contMdiffOn_finset_sum
+#align cont_mdiff_on_finset_sum cont_mdiff_on_finset_sum
@[to_additive]
theorem contMdiff_finset_prod (h : ∀ i ∈ t, ContMdiff I' I n (f i)) :
ContMdiff I' I n fun x => ∏ i in t, f i x := fun x =>
contMdiffAt_finset_prod fun i hi => h i hi x
#align cont_mdiff_finset_prod contMdiff_finset_prod
-#align cont_mdiff_finset_sum contMdiff_finset_sum
+#align cont_mdiff_finset_sum cont_mdiff_finset_sum
@[to_additive]
theorem smoothWithinAt_finset_prod' (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
SmoothWithinAt I' I (∏ i in t, f i) s x :=
contMdiffWithinAt_finset_prod' h
#align smooth_within_at_finset_prod' smoothWithinAt_finset_prod'
-#align smooth_within_at_finset_sum' smoothWithinAt_finset_sum'
+#align smooth_within_at_finset_sum' smooth_within_at_finset_sum'
@[to_additive]
theorem smoothAt_finset_prod' (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (∏ i in t, f i) x :=
contMdiffAt_finset_prod' h
#align smooth_at_finset_prod' smoothAt_finset_prod'
-#align smooth_at_finset_sum' smoothAt_finset_sum'
+#align smooth_at_finset_sum' smooth_at_finset_sum'
@[to_additive]
theorem smoothOn_finset_prod' (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (∏ i in t, f i) s :=
contMdiffOn_finset_prod' h
#align smooth_on_finset_prod' smoothOn_finset_prod'
-#align smooth_on_finset_sum' smoothOn_finset_sum'
+#align smooth_on_finset_sum' smooth_on_finset_sum'
@[to_additive]
theorem smooth_finset_prod' (h : ∀ i ∈ t, Smooth I' I (f i)) : Smooth I' I (∏ i in t, f i) :=
@@ -394,21 +394,21 @@ theorem smoothWithinAt_finset_prod (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s
SmoothWithinAt I' I (fun x => ∏ i in t, f i x) s x :=
contMdiffWithinAt_finset_prod h
#align smooth_within_at_finset_prod smoothWithinAt_finset_prod
-#align smooth_within_at_finset_sum smoothWithinAt_finset_sum
+#align smooth_within_at_finset_sum smooth_within_at_finset_sum
@[to_additive]
theorem smoothAt_finset_prod (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (fun x => ∏ i in t, f i x) x :=
contMdiffAt_finset_prod h
#align smooth_at_finset_prod smoothAt_finset_prod
-#align smooth_at_finset_sum smoothAt_finset_sum
+#align smooth_at_finset_sum smooth_at_finset_sum
@[to_additive]
theorem smoothOn_finset_prod (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (fun x => ∏ i in t, f i x) s :=
contMdiffOn_finset_prod h
#align smooth_on_finset_prod smoothOn_finset_prod
-#align smooth_on_finset_sum smoothOn_finset_sum
+#align smooth_on_finset_sum smooth_on_finset_sum
@[to_additive]
theorem smooth_finset_prod (h : ∀ i ∈ t, Smooth I' I (f i)) :
@@ -427,7 +427,7 @@ theorem contMdiff_finprod (h : ∀ i, ContMdiff I' I n (f i))
rcases finprod_eventually_eq_prod hfin x with ⟨s, hs⟩
exact (contMdiff_finset_prod (fun i hi => h i) x).congr_of_eventuallyEq hs
#align cont_mdiff_finprod contMdiff_finprod
-#align cont_mdiff_finsum contMdiff_finsum
+#align cont_mdiff_finsum cont_mdiff_finsum
@[to_additive]
theorem contMdiff_finprod_cond (hc : ∀ i, p i → ContMdiff I' I n (f i))
@@ -437,7 +437,7 @@ theorem contMdiff_finprod_cond (hc : ∀ i, p i → ContMdiff I' I n (f i))
simp only [← finprod_subtype_eq_finprod_cond]
exact contMdiff_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
#align cont_mdiff_finprod_cond contMdiff_finprod_cond
-#align cont_mdiff_finsum_cond contMdiff_finsum_cond
+#align cont_mdiff_finsum_cond cont_mdiff_finsum_cond
@[to_additive]
theorem smooth_finprod (h : ∀ i, Smooth I' I (f i))
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -310,27 +310,27 @@ theorem contMdiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMdiffWithinAt I' I
Finset.prod_induction f (fun f => ContMdiffWithinAt I' I n f s x) (fun f g hf hg => hf.mul hg)
contMdiffWithinAt_const h
#align cont_mdiff_within_at_finset_prod' contMdiffWithinAt_finset_prod'
-#align cont_mdiff_within_at_finset_sum' cont_mdiff_within_at_finset_sum'
+#align cont_mdiff_within_at_finset_sum' contMdiffWithinAt_finset_sum'
@[to_additive]
theorem contMdiffAt_finset_prod' (h : ∀ i ∈ t, ContMdiffAt I' I n (f i) x) :
ContMdiffAt I' I n (∏ i in t, f i) x :=
contMdiffWithinAt_finset_prod' h
#align cont_mdiff_at_finset_prod' contMdiffAt_finset_prod'
-#align cont_mdiff_at_finset_sum' cont_mdiff_at_finset_sum'
+#align cont_mdiff_at_finset_sum' contMdiffAt_finset_sum'
@[to_additive]
theorem contMdiffOn_finset_prod' (h : ∀ i ∈ t, ContMdiffOn I' I n (f i) s) :
ContMdiffOn I' I n (∏ i in t, f i) s := fun x hx =>
contMdiffWithinAt_finset_prod' fun i hi => h i hi x hx
#align cont_mdiff_on_finset_prod' contMdiffOn_finset_prod'
-#align cont_mdiff_on_finset_sum' cont_mdiff_on_finset_sum'
+#align cont_mdiff_on_finset_sum' contMdiffOn_finset_sum'
@[to_additive]
theorem contMdiff_finset_prod' (h : ∀ i ∈ t, ContMdiff I' I n (f i)) :
ContMdiff I' I n (∏ i in t, f i) := fun x => contMdiffAt_finset_prod' fun i hi => h i hi x
#align cont_mdiff_finset_prod' contMdiff_finset_prod'
-#align cont_mdiff_finset_sum' cont_mdiff_finset_sum'
+#align cont_mdiff_finset_sum' contMdiff_finset_sum'
@[to_additive]
theorem contMdiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMdiffWithinAt I' I n (f i) s x) :
@@ -339,49 +339,49 @@ theorem contMdiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMdiffWithinAt I' I n
simp only [← Finset.prod_apply]
exact contMdiffWithinAt_finset_prod' h
#align cont_mdiff_within_at_finset_prod contMdiffWithinAt_finset_prod
-#align cont_mdiff_within_at_finset_sum cont_mdiff_within_at_finset_sum
+#align cont_mdiff_within_at_finset_sum contMdiffWithinAt_finset_sum
@[to_additive]
theorem contMdiffAt_finset_prod (h : ∀ i ∈ t, ContMdiffAt I' I n (f i) x) :
ContMdiffAt I' I n (fun x => ∏ i in t, f i x) x :=
contMdiffWithinAt_finset_prod h
#align cont_mdiff_at_finset_prod contMdiffAt_finset_prod
-#align cont_mdiff_at_finset_sum cont_mdiff_at_finset_sum
+#align cont_mdiff_at_finset_sum contMdiffAt_finset_sum
@[to_additive]
theorem contMdiffOn_finset_prod (h : ∀ i ∈ t, ContMdiffOn I' I n (f i) s) :
ContMdiffOn I' I n (fun x => ∏ i in t, f i x) s := fun x hx =>
contMdiffWithinAt_finset_prod fun i hi => h i hi x hx
#align cont_mdiff_on_finset_prod contMdiffOn_finset_prod
-#align cont_mdiff_on_finset_sum cont_mdiff_on_finset_sum
+#align cont_mdiff_on_finset_sum contMdiffOn_finset_sum
@[to_additive]
theorem contMdiff_finset_prod (h : ∀ i ∈ t, ContMdiff I' I n (f i)) :
ContMdiff I' I n fun x => ∏ i in t, f i x := fun x =>
contMdiffAt_finset_prod fun i hi => h i hi x
#align cont_mdiff_finset_prod contMdiff_finset_prod
-#align cont_mdiff_finset_sum cont_mdiff_finset_sum
+#align cont_mdiff_finset_sum contMdiff_finset_sum
@[to_additive]
theorem smoothWithinAt_finset_prod' (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
SmoothWithinAt I' I (∏ i in t, f i) s x :=
contMdiffWithinAt_finset_prod' h
#align smooth_within_at_finset_prod' smoothWithinAt_finset_prod'
-#align smooth_within_at_finset_sum' smooth_within_at_finset_sum'
+#align smooth_within_at_finset_sum' smoothWithinAt_finset_sum'
@[to_additive]
theorem smoothAt_finset_prod' (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (∏ i in t, f i) x :=
contMdiffAt_finset_prod' h
#align smooth_at_finset_prod' smoothAt_finset_prod'
-#align smooth_at_finset_sum' smooth_at_finset_sum'
+#align smooth_at_finset_sum' smoothAt_finset_sum'
@[to_additive]
theorem smoothOn_finset_prod' (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (∏ i in t, f i) s :=
contMdiffOn_finset_prod' h
#align smooth_on_finset_prod' smoothOn_finset_prod'
-#align smooth_on_finset_sum' smooth_on_finset_sum'
+#align smooth_on_finset_sum' smoothOn_finset_sum'
@[to_additive]
theorem smooth_finset_prod' (h : ∀ i ∈ t, Smooth I' I (f i)) : Smooth I' I (∏ i in t, f i) :=
@@ -394,21 +394,21 @@ theorem smoothWithinAt_finset_prod (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s
SmoothWithinAt I' I (fun x => ∏ i in t, f i x) s x :=
contMdiffWithinAt_finset_prod h
#align smooth_within_at_finset_prod smoothWithinAt_finset_prod
-#align smooth_within_at_finset_sum smooth_within_at_finset_sum
+#align smooth_within_at_finset_sum smoothWithinAt_finset_sum
@[to_additive]
theorem smoothAt_finset_prod (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (fun x => ∏ i in t, f i x) x :=
contMdiffAt_finset_prod h
#align smooth_at_finset_prod smoothAt_finset_prod
-#align smooth_at_finset_sum smooth_at_finset_sum
+#align smooth_at_finset_sum smoothAt_finset_sum
@[to_additive]
theorem smoothOn_finset_prod (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (fun x => ∏ i in t, f i x) s :=
contMdiffOn_finset_prod h
#align smooth_on_finset_prod smoothOn_finset_prod
-#align smooth_on_finset_sum smooth_on_finset_sum
+#align smooth_on_finset_sum smoothOn_finset_sum
@[to_additive]
theorem smooth_finset_prod (h : ∀ i ∈ t, Smooth I' I (f i)) :
@@ -427,7 +427,7 @@ theorem contMdiff_finprod (h : ∀ i, ContMdiff I' I n (f i))
rcases finprod_eventually_eq_prod hfin x with ⟨s, hs⟩
exact (contMdiff_finset_prod (fun i hi => h i) x).congr_of_eventuallyEq hs
#align cont_mdiff_finprod contMdiff_finprod
-#align cont_mdiff_finsum cont_mdiff_finsum
+#align cont_mdiff_finsum contMdiff_finsum
@[to_additive]
theorem contMdiff_finprod_cond (hc : ∀ i, p i → ContMdiff I' I n (f i))
@@ -437,7 +437,7 @@ theorem contMdiff_finprod_cond (hc : ∀ i, p i → ContMdiff I' I n (f i))
simp only [← finprod_subtype_eq_finprod_cond]
exact contMdiff_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
#align cont_mdiff_finprod_cond contMdiff_finprod_cond
-#align cont_mdiff_finsum_cond cont_mdiff_finsum_cond
+#align cont_mdiff_finsum_cond contMdiff_finsum_cond
@[to_additive]
theorem smooth_finprod (h : ∀ i, Smooth I' I (f i))
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
MDifferentiableWithinAt
and MDifferentiableAt
so that they are using LiftProp[Within]At
.ContMDiffWithinAt.cle_arrowCongr
by 25%.ContMDiffWithinAt.cle_arrowCongr
to speed it up by another factor of 4.hasSmoothAddSelf
) is from Lean unfolding way too many definitions to make things definitionally equal. Since LiftPropWithinAt
is now a structure, the old proofs now break, unless you rewrite with chartedSpaceSelf_prod
), causing much less defeq-abuse.MDifferentiableWithinAt.differentiableWithinAt_writtenInExtChartAt
and MDifferentiableAt.differentiableWithinAt_writtenInExtChartAt
have a bit long names. This is to avoid naming clash with the existing MDifferentiableWithinAt.differentiableWithinAt
. I'm open for other suggestions.@@ -339,7 +339,7 @@ theorem contMDiffWithinAt_finprod (lf : LocallyFinite fun i ↦ mulSupport <| f
theorem contMDiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x) :
ContMDiffWithinAt I' I n (∏ i in t, f i) s x :=
Finset.prod_induction f (fun f => ContMDiffWithinAt I' I n f s x) (fun _ _ hf hg => hf.mul hg)
- contMDiffWithinAt_const h
+ (contMDiffWithinAt_const (c := 1)) h
#align cont_mdiff_within_at_finset_prod' contMDiffWithinAt_finset_prod'
#align cont_mdiff_within_at_finset_sum' contMDiffWithinAt_finset_sum'
@@ -514,8 +514,10 @@ section
variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] {E : Type*} [NormedAddCommGroup E]
[NormedSpace 𝕜 E]
-instance hasSmoothAddSelf : SmoothAdd 𝓘(𝕜, E) E :=
- ⟨by rw [← modelWithCornersSelf_prod]; exact contDiff_add.contMDiff⟩
+instance hasSmoothAddSelf : SmoothAdd 𝓘(𝕜, E) E := by
+ constructor
+ rw [← modelWithCornersSelf_prod, chartedSpaceSelf_prod]
+ exact contDiff_add.contMDiff
#align has_smooth_add_self hasSmoothAddSelf
end
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -256,7 +256,7 @@ variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalS
@[to_additive]
theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
| 0 => by simp only [pow_zero]; exact smooth_const
- | k + 1 => by simpa [pow_succ] using smooth_id.mul (smooth_pow _)
+ | k + 1 => by simpa [pow_succ] using (smooth_pow _).mul smooth_id
#align smooth_pow smooth_pow
/-- Morphism of additive smooth monoids. -/
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -285,11 +285,13 @@ instance : One (SmoothMonoidMorphism I I' G G') :=
instance : Inhabited (SmoothMonoidMorphism I I' G G') :=
⟨1⟩
--- porting note: replaced `CoeFun` with `MonoidHomClass` and `ContinuousMapClass` instances
@[to_additive]
-instance : MonoidHomClass (SmoothMonoidMorphism I I' G G') G G' where
+instance : FunLike (SmoothMonoidMorphism I I' G G') G G' where
coe a := a.toFun
coe_injective' f g h := by cases f; cases g; congr; exact DFunLike.ext' h
+
+@[to_additive]
+instance : MonoidHomClass (SmoothMonoidMorphism I I' G G') G G' where
map_one f := f.map_one
map_mul f := f.map_mul
From sphere-eversion; I'm just upstreaming this.
Co-authored-by: Oliver Nash <github@olivernash.org>
@@ -299,16 +299,39 @@ instance : ContinuousMapClass (SmoothMonoidMorphism I I' G G') G G' where
end Monoid
+/-! ### Differentiability of finite point-wise sums and products
+
+ Finite point-wise products (resp. sums) of differentiable/smooth functions `M → G` (at `x`/on `s`)
+ into a commutative monoid `G` are differentiable/smooth at `x`/on `s`. -/
section CommMonoid
+open Function
open scoped BigOperators
-variable {ι 𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H] {E : Type*}
- [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type*} [CommMonoid G]
- [TopologicalSpace G] [ChartedSpace H 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] {s : Set M} {x : M} {t : Finset ι}
- {f : ι → M → G} {n : ℕ∞} {p : ι → Prop}
+variable {ι 𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H]
+ {E : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H}
+ {G : Type*} [CommMonoid G] [TopologicalSpace G] [ChartedSpace H 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]
+ {s : Set M} {x x₀ : M} {t : Finset ι} {f : ι → M → G} {n : ℕ∞} {p : ι → Prop}
+
+@[to_additive]
+theorem ContMDiffWithinAt.prod (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x₀) :
+ ContMDiffWithinAt I' I n (fun x ↦ ∏ i in t, f i x) s x₀ := by
+ classical
+ induction' t using Finset.induction_on with i K iK IH
+ · simp [contMDiffWithinAt_const]
+ · simp only [iK, Finset.prod_insert, not_false_iff]
+ exact (h _ (Finset.mem_insert_self i K)).mul (IH fun j hj ↦ h _ <| Finset.mem_insert_of_mem hj)
+
+@[to_additive]
+theorem contMDiffWithinAt_finprod (lf : LocallyFinite fun i ↦ mulSupport <| f i) {x₀ : M}
+ (h : ∀ i, ContMDiffWithinAt I' I n (f i) s x₀) :
+ ContMDiffWithinAt I' I n (fun x ↦ ∏ᶠ i, f i x) s x₀ :=
+ let ⟨_I, hI⟩ := finprod_eventually_eq_prod lf x₀
+ (ContMDiffWithinAt.prod fun i _hi ↦ h i).congr_of_eventuallyEq
+ (eventually_nhdsWithin_of_eventually_nhds hI) hI.self_of_nhds
@[to_additive]
theorem contMDiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x) :
@@ -318,26 +341,6 @@ theorem contMDiffWithinAt_finset_prod' (h : ∀ i ∈ t, ContMDiffWithinAt I' I
#align cont_mdiff_within_at_finset_prod' contMDiffWithinAt_finset_prod'
#align cont_mdiff_within_at_finset_sum' contMDiffWithinAt_finset_sum'
-@[to_additive]
-theorem contMDiffAt_finset_prod' (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
- ContMDiffAt I' I n (∏ i in t, f i) x :=
- contMDiffWithinAt_finset_prod' h
-#align cont_mdiff_at_finset_prod' contMDiffAt_finset_prod'
-#align cont_mdiff_at_finset_sum' contMDiffAt_finset_sum'
-
-@[to_additive]
-theorem contMDiffOn_finset_prod' (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
- ContMDiffOn I' I n (∏ i in t, f i) s := fun x hx =>
- contMDiffWithinAt_finset_prod' fun i hi => h i hi x hx
-#align cont_mdiff_on_finset_prod' contMDiffOn_finset_prod'
-#align cont_mdiff_on_finset_sum' contMDiffOn_finset_sum'
-
-@[to_additive]
-theorem contMDiff_finset_prod' (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
- ContMDiff I' I n (∏ i in t, f i) := fun x => contMDiffAt_finset_prod' fun i hi => h i hi x
-#align cont_mdiff_finset_prod' contMDiff_finset_prod'
-#align cont_mdiff_finset_sum' contMDiff_finset_sum'
-
@[to_additive]
theorem contMDiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMDiffWithinAt I' I n (f i) s x) :
ContMDiffWithinAt I' I n (fun x => ∏ i in t, f i x) s x := by
@@ -346,6 +349,25 @@ theorem contMDiffWithinAt_finset_prod (h : ∀ i ∈ t, ContMDiffWithinAt I' I n
#align cont_mdiff_within_at_finset_prod contMDiffWithinAt_finset_prod
#align cont_mdiff_within_at_finset_sum contMDiffWithinAt_finset_sum
+@[to_additive]
+theorem ContMDiffAt.prod (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x₀) :
+ ContMDiffAt I' I n (fun x ↦ ∏ i in t, f i x) x₀ := by
+ simp only [← contMDiffWithinAt_univ] at *
+ exact ContMDiffWithinAt.prod h
+
+@[to_additive]
+theorem contMDiffAt_finprod
+ (lf : LocallyFinite fun i ↦ mulSupport <| f i) (h : ∀ i, ContMDiffAt I' I n (f i) x₀) :
+ ContMDiffAt I' I n (fun x ↦ ∏ᶠ i, f i x) x₀ :=
+ contMDiffWithinAt_finprod lf h
+
+@[to_additive]
+theorem contMDiffAt_finset_prod' (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
+ ContMDiffAt I' I n (∏ i in t, f i) x :=
+ contMDiffWithinAt_finset_prod' h
+#align cont_mdiff_at_finset_prod' contMDiffAt_finset_prod'
+#align cont_mdiff_at_finset_sum' contMDiffAt_finset_sum'
+
@[to_additive]
theorem contMDiffAt_finset_prod (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
ContMDiffAt I' I n (fun x => ∏ i in t, f i x) x :=
@@ -353,6 +375,19 @@ theorem contMDiffAt_finset_prod (h : ∀ i ∈ t, ContMDiffAt I' I n (f i) x) :
#align cont_mdiff_at_finset_prod contMDiffAt_finset_prod
#align cont_mdiff_at_finset_sum contMDiffAt_finset_sum
+@[to_additive]
+theorem contMDiffOn_finprod
+ (lf : LocallyFinite fun i ↦ Function.mulSupport <| f i) (h : ∀ i, ContMDiffOn I' I n (f i) s) :
+ ContMDiffOn I' I n (fun x ↦ ∏ᶠ i, f i x) s := fun x hx ↦
+ contMDiffWithinAt_finprod lf fun i ↦ h i x hx
+
+@[to_additive]
+theorem contMDiffOn_finset_prod' (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
+ ContMDiffOn I' I n (∏ i in t, f i) s := fun x hx =>
+ contMDiffWithinAt_finset_prod' fun i hi => h i hi x hx
+#align cont_mdiff_on_finset_prod' contMDiffOn_finset_prod'
+#align cont_mdiff_on_finset_sum' contMDiffOn_finset_sum'
+
@[to_additive]
theorem contMDiffOn_finset_prod (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
ContMDiffOn I' I n (fun x => ∏ i in t, f i x) s := fun x hx =>
@@ -360,6 +395,17 @@ theorem contMDiffOn_finset_prod (h : ∀ i ∈ t, ContMDiffOn I' I n (f i) s) :
#align cont_mdiff_on_finset_prod contMDiffOn_finset_prod
#align cont_mdiff_on_finset_sum contMDiffOn_finset_sum
+@[to_additive]
+theorem ContMDiff.prod (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
+ ContMDiff I' I n fun x ↦ ∏ i in t, f i x :=
+ fun x ↦ ContMDiffAt.prod fun j hj ↦ h j hj x
+
+@[to_additive]
+theorem contMDiff_finset_prod' (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
+ ContMDiff I' I n (∏ i in t, f i) := fun x => contMDiffAt_finset_prod' fun i hi => h i hi x
+#align cont_mdiff_finset_prod' contMDiff_finset_prod'
+#align cont_mdiff_finset_sum' contMDiff_finset_sum'
+
@[to_additive]
theorem contMDiff_finset_prod (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
ContMDiff I' I n fun x => ∏ i in t, f i x := fun x =>
@@ -368,31 +414,33 @@ theorem contMDiff_finset_prod (h : ∀ i ∈ t, ContMDiff I' I n (f i)) :
#align cont_mdiff_finset_sum contMDiff_finset_sum
@[to_additive]
-theorem smoothWithinAt_finset_prod' (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
- SmoothWithinAt I' I (∏ i in t, f i) s x :=
- contMDiffWithinAt_finset_prod' h
-#align smooth_within_at_finset_prod' smoothWithinAt_finset_prod'
-#align smooth_within_at_finset_sum' smoothWithinAt_finset_sum'
+theorem contMDiff_finprod (h : ∀ i, ContMDiff I' I n (f i))
+ (hfin : LocallyFinite fun i => mulSupport (f i)) : ContMDiff I' I n fun x => ∏ᶠ i, f i x :=
+ fun x ↦ contMDiffAt_finprod hfin fun i ↦ h i x
+#align cont_mdiff_finprod contMDiff_finprod
+#align cont_mdiff_finsum contMDiff_finsum
@[to_additive]
-theorem smoothAt_finset_prod' (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
- SmoothAt I' I (∏ i in t, f i) x :=
- contMDiffAt_finset_prod' h
-#align smooth_at_finset_prod' smoothAt_finset_prod'
-#align smooth_at_finset_sum' smoothAt_finset_sum'
+theorem contMDiff_finprod_cond (hc : ∀ i, p i → ContMDiff I' I n (f i))
+ (hf : LocallyFinite fun i => mulSupport (f i)) :
+ ContMDiff I' I n fun x => ∏ᶠ (i) (_ : p i), f i x := by
+ simp only [← finprod_subtype_eq_finprod_cond]
+ exact contMDiff_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
+#align cont_mdiff_finprod_cond contMDiff_finprod_cond
+#align cont_mdiff_finsum_cond contMDiff_finsum_cond
@[to_additive]
-theorem smoothOn_finset_prod' (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
- SmoothOn I' I (∏ i in t, f i) s :=
- contMDiffOn_finset_prod' h
-#align smooth_on_finset_prod' smoothOn_finset_prod'
-#align smooth_on_finset_sum' smoothOn_finset_sum'
+theorem smoothAt_finprod
+ (lf : LocallyFinite fun i ↦ mulSupport <| f i) (h : ∀ i, SmoothAt I' I (f i) x₀) :
+ SmoothAt I' I (fun x ↦ ∏ᶠ i, f i x) x₀ :=
+ contMDiffWithinAt_finprod lf h
@[to_additive]
-theorem smooth_finset_prod' (h : ∀ i ∈ t, Smooth I' I (f i)) : Smooth I' I (∏ i in t, f i) :=
- contMDiff_finset_prod' h
-#align smooth_finset_prod' smooth_finset_prod'
-#align smooth_finset_sum' smooth_finset_sum'
+theorem smoothWithinAt_finset_prod' (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
+ SmoothWithinAt I' I (∏ i in t, f i) s x :=
+ contMDiffWithinAt_finset_prod' h
+#align smooth_within_at_finset_prod' smoothWithinAt_finset_prod'
+#align smooth_within_at_finset_sum' smoothWithinAt_finset_sum'
@[to_additive]
theorem smoothWithinAt_finset_prod (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s x) :
@@ -401,6 +449,13 @@ theorem smoothWithinAt_finset_prod (h : ∀ i ∈ t, SmoothWithinAt I' I (f i) s
#align smooth_within_at_finset_prod smoothWithinAt_finset_prod
#align smooth_within_at_finset_sum smoothWithinAt_finset_sum
+@[to_additive]
+theorem smoothAt_finset_prod' (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
+ SmoothAt I' I (∏ i in t, f i) x :=
+ contMDiffAt_finset_prod' h
+#align smooth_at_finset_prod' smoothAt_finset_prod'
+#align smooth_at_finset_sum' smoothAt_finset_sum'
+
@[to_additive]
theorem smoothAt_finset_prod (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
SmoothAt I' I (fun x => ∏ i in t, f i x) x :=
@@ -408,6 +463,13 @@ theorem smoothAt_finset_prod (h : ∀ i ∈ t, SmoothAt I' I (f i) x) :
#align smooth_at_finset_prod smoothAt_finset_prod
#align smooth_at_finset_sum smoothAt_finset_sum
+@[to_additive]
+theorem smoothOn_finset_prod' (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
+ SmoothOn I' I (∏ i in t, f i) s :=
+ contMDiffOn_finset_prod' h
+#align smooth_on_finset_prod' smoothOn_finset_prod'
+#align smooth_on_finset_sum' smoothOn_finset_sum'
+
@[to_additive]
theorem smoothOn_finset_prod (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
SmoothOn I' I (fun x => ∏ i in t, f i x) s :=
@@ -415,6 +477,12 @@ theorem smoothOn_finset_prod (h : ∀ i ∈ t, SmoothOn I' I (f i) s) :
#align smooth_on_finset_prod smoothOn_finset_prod
#align smooth_on_finset_sum smoothOn_finset_sum
+@[to_additive]
+theorem smooth_finset_prod' (h : ∀ i ∈ t, Smooth I' I (f i)) : Smooth I' I (∏ i in t, f i) :=
+ contMDiff_finset_prod' h
+#align smooth_finset_prod' smooth_finset_prod'
+#align smooth_finset_sum' smooth_finset_sum'
+
@[to_additive]
theorem smooth_finset_prod (h : ∀ i ∈ t, Smooth I' I (f i)) :
Smooth I' I fun x => ∏ i in t, f i x :=
@@ -422,26 +490,6 @@ theorem smooth_finset_prod (h : ∀ i ∈ t, Smooth I' I (f i)) :
#align smooth_finset_prod smooth_finset_prod
#align smooth_finset_sum smooth_finset_sum
-open Function Filter
-
-@[to_additive]
-theorem contMDiff_finprod (h : ∀ i, ContMDiff I' I n (f i))
- (hfin : LocallyFinite fun i => mulSupport (f i)) : ContMDiff I' I n fun x => ∏ᶠ i, f i x := by
- intro x
- rcases finprod_eventually_eq_prod hfin x with ⟨s, hs⟩
- exact (contMDiff_finset_prod (fun i _ => h i) x).congr_of_eventuallyEq hs
-#align cont_mdiff_finprod contMDiff_finprod
-#align cont_mdiff_finsum contMDiff_finsum
-
-@[to_additive]
-theorem contMDiff_finprod_cond (hc : ∀ i, p i → ContMDiff I' I n (f i))
- (hf : LocallyFinite fun i => mulSupport (f i)) :
- ContMDiff I' I n fun x => ∏ᶠ (i) (_ : p i), f i x := by
- simp only [← finprod_subtype_eq_finprod_cond]
- exact contMDiff_finprod (fun i => hc i i.2) (hf.comp_injective Subtype.coe_injective)
-#align cont_mdiff_finprod_cond contMDiff_finprod_cond
-#align cont_mdiff_finsum_cond contMDiff_finsum_cond
-
@[to_additive]
theorem smooth_finprod (h : ∀ i, Smooth I' I (f i))
(hfin : LocallyFinite fun i => mulSupport (f i)) : Smooth I' I fun x => ∏ᶠ i, f i x :=
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -289,7 +289,7 @@ instance : Inhabited (SmoothMonoidMorphism I I' G G') :=
@[to_additive]
instance : MonoidHomClass (SmoothMonoidMorphism I I' G G') G G' where
coe a := a.toFun
- coe_injective' f g h := by cases f; cases g; congr; exact FunLike.ext' h
+ coe_injective' f g h := by cases f; cases g; congr; exact DFunLike.ext' h
map_one f := f.map_one
map_mul f := f.map_mul
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -42,8 +42,8 @@ we formulate the definitions and lemmas for any model.
/-- Basic hypothesis to talk about a smooth (Lie) additive monoid or a smooth additive
semigroup. A smooth additive monoid over `α`, for example, is obtained by requiring both the
instances `AddMonoid α` and `SmoothAdd α`. -/
-class SmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
+class SmoothAdd {𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H]
+ {E : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type*)
[Add G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
Prop where
smooth_add : Smooth (I.prod I) I fun p : G × G => p.1 + p.2
@@ -54,8 +54,8 @@ class SmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Top
A smooth monoid over `G`, for example, is obtained by requiring both the instances `Monoid G`
and `SmoothMul I G`. -/
@[to_additive]
-class SmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
- {E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
+class SmoothMul {𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H]
+ {E : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type*)
[Mul G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
Prop where
smooth_mul : Smooth (I.prod I) I fun p : G × G => p.1 * p.2
@@ -63,11 +63,11 @@ class SmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [Top
section SmoothMul
-variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [Mul G]
- [TopologicalSpace G] [ChartedSpace H 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]
+variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type*} [Mul G]
+ [TopologicalSpace G] [ChartedSpace H 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]
section
@@ -198,7 +198,7 @@ set_option linter.uppercaseLean3 false in
#align R_apply R_apply
@[simp]
-theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
+theorem L_mul {G : Type*} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
(g h : G) : 𝑳 I (g * h) = (𝑳 I g).comp (𝑳 I h) := by
ext
simp only [ContMDiffMap.comp_apply, L_apply, mul_assoc]
@@ -206,7 +206,7 @@ set_option linter.uppercaseLean3 false in
#align L_mul L_mul
@[simp]
-theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
+theorem R_mul {G : Type*} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
(g h : G) : 𝑹 I (g * h) = (𝑹 I h).comp (𝑹 I g) := by
ext
simp only [ContMDiffMap.comp_apply, R_apply, mul_assoc]
@@ -215,7 +215,7 @@ set_option linter.uppercaseLean3 false in
section
-variable {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H G'] [SmoothMul I G']
+variable {G' : Type*} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H G'] [SmoothMul I G']
(g' : G')
theorem smoothLeftMul_one : (𝑳 I g') 1 = g' :=
@@ -230,11 +230,11 @@ end
-- Instance of product
@[to_additive]
-instance SmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace 𝕜 E] {H : Type _} [TopologicalSpace H]
- (I : ModelWithCorners 𝕜 E H) (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Mul G]
- [SmoothMul I G] {E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type _}
- [TopologicalSpace H'] (I' : ModelWithCorners 𝕜 E' H') (G' : Type _) [TopologicalSpace G']
+instance SmoothMul.prod {𝕜 : Type*} [NontriviallyNormedField 𝕜] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace 𝕜 E] {H : Type*} [TopologicalSpace H]
+ (I : ModelWithCorners 𝕜 E H) (G : Type*) [TopologicalSpace G] [ChartedSpace H G] [Mul G]
+ [SmoothMul I G] {E' : Type*} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type*}
+ [TopologicalSpace H'] (I' : ModelWithCorners 𝕜 E' H') (G' : Type*) [TopologicalSpace G']
[ChartedSpace H' G'] [Mul G'] [SmoothMul I' G'] : SmoothMul (I.prod I') (G × G') :=
{ SmoothManifoldWithCorners.prod G G' with
smooth_mul :=
@@ -247,11 +247,11 @@ end SmoothMul
section Monoid
-variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [Monoid G]
- [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G] {H' : Type _} [TopologicalSpace H']
- {E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {I' : ModelWithCorners 𝕜 E' H'}
- {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [SmoothMul I' G']
+variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type*} [Monoid G]
+ [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G] {H' : Type*} [TopologicalSpace H']
+ {E' : Type*} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {I' : ModelWithCorners 𝕜 E' H'}
+ {G' : Type*} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [SmoothMul I' G']
@[to_additive]
theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
@@ -261,8 +261,8 @@ theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
/-- Morphism of additive smooth monoids. -/
structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [SmoothAdd I G]
- (G' : Type _) [TopologicalSpace G'] [ChartedSpace H' G'] [AddMonoid G']
+ (G : Type*) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [SmoothAdd I G]
+ (G' : Type*) [TopologicalSpace G'] [ChartedSpace H' G'] [AddMonoid G']
[SmoothAdd I' G'] extends G →+ G' where
smooth_toFun : Smooth I I' toFun
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
@@ -270,7 +270,7 @@ structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWit
/-- Morphism of smooth monoids. -/
@[to_additive]
structure SmoothMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [SmoothMul I G] (G' : Type _)
+ (G : Type*) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [SmoothMul I G] (G' : Type*)
[TopologicalSpace G'] [ChartedSpace H' G'] [Monoid G'] [SmoothMul I' G'] extends
G →* G' where
smooth_toFun : Smooth I I' toFun
@@ -303,11 +303,11 @@ section CommMonoid
open scoped BigOperators
-variable {ι 𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
- [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [CommMonoid G]
- [TopologicalSpace G] [ChartedSpace H 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] {s : Set M} {x : M} {t : Finset ι}
+variable {ι 𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H] {E : Type*}
+ [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type*} [CommMonoid G]
+ [TopologicalSpace G] [ChartedSpace H 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] {s : Set M} {x : M} {t : Finset ι}
{f : ι → M → G} {n : ℕ∞} {p : ι → Prop}
@[to_additive]
@@ -461,7 +461,7 @@ end CommMonoid
section
-variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddCommGroup E]
+variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] {E : Type*} [NormedAddCommGroup E]
[NormedSpace 𝕜 E]
instance hasSmoothAddSelf : SmoothAdd 𝓘(𝕜, E) E :=
@@ -472,12 +472,12 @@ end
section DivConst
-variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
+variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] {H : Type*} [TopologicalSpace H] {E : Type*}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H}
- {G : Type _} [DivInvMonoid G] [TopologicalSpace G] [ChartedSpace H 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]
+ {G : Type*} [DivInvMonoid G] [TopologicalSpace G] [ChartedSpace H 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]
variable {f : M → G} {s : Set M} {x : M} {n : ℕ∞} (c : G)
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.
@@ -469,3 +469,53 @@ instance hasSmoothAddSelf : SmoothAdd 𝓘(𝕜, E) E :=
#align has_smooth_add_self hasSmoothAddSelf
end
+
+section DivConst
+
+variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
+ [NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H}
+ {G : Type _} [DivInvMonoid G] [TopologicalSpace G] [ChartedSpace H 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]
+
+variable {f : M → G} {s : Set M} {x : M} {n : ℕ∞} (c : G)
+
+@[to_additive]
+theorem ContMDiffWithinAt.div_const (hf : ContMDiffWithinAt I' I n f s x) :
+ ContMDiffWithinAt I' I n (fun x ↦ f x / c) s x := by
+ simpa only [div_eq_mul_inv] using hf.mul contMDiffWithinAt_const
+
+@[to_additive]
+nonrec theorem ContMDiffAt.div_const (hf : ContMDiffAt I' I n f x) :
+ ContMDiffAt I' I n (fun x ↦ f x / c) x :=
+ hf.div_const c
+
+@[to_additive]
+theorem ContMDiffOn.div_const (hf : ContMDiffOn I' I n f s) :
+ ContMDiffOn I' I n (fun x ↦ f x / c) s := fun x hx => (hf x hx).div_const c
+
+@[to_additive]
+theorem ContMDiff.div_const (hf : ContMDiff I' I n f) :
+ ContMDiff I' I n (fun x ↦ f x / c) := fun x => (hf x).div_const c
+
+@[to_additive]
+nonrec theorem SmoothWithinAt.div_const (hf : SmoothWithinAt I' I f s x) :
+ SmoothWithinAt I' I (fun x ↦ f x / c) s x :=
+ hf.div_const c
+
+@[to_additive]
+nonrec theorem SmoothAt.div_const (hf : SmoothAt I' I f x) :
+ SmoothAt I' I (fun x ↦ f x / c) x :=
+ hf.div_const c
+
+@[to_additive]
+nonrec theorem SmoothOn.div_const (hf : SmoothOn I' I f s) :
+ SmoothOn I' I (fun x ↦ f x / c) s :=
+ hf.div_const c
+
+@[to_additive]
+nonrec theorem Smooth.div_const (hf : Smooth I' I f) : Smooth I' I (fun x ↦ f x / c) :=
+ hf.div_const c
+
+end DivConst
@@ -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.monoid
-! leanprover-community/mathlib commit e354e865255654389cc46e6032160238df2e0f40
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Geometry.Manifold.ContMDiffMap
+#align_import geometry.manifold.algebra.monoid from "leanprover-community/mathlib"@"e354e865255654389cc46e6032160238df2e0f40"
+
/-!
# Smooth monoid
A smooth monoid is a monoid that is also a smooth manifold, in which multiplication is a smooth map
@@ -32,7 +32,7 @@ mathematically interesting monoid on a topological manifold such that (a) the sp
`SmoothManifoldWithCorners`; (b) the multiplication is smooth at `(a, b)` in the charts
`extChartAt I a`, `extChartAt I b`, `extChartAt I (a * b)`.
-2. Because of `ModelProd` we can't assume, e.g., that a `lie_group` is modelled on `𝓘(𝕜, E)`. So,
+2. Because of `ModelProd` we can't assume, e.g., that a `LieGroup` is modelled on `𝓘(𝕜, E)`. So,
we formulate the definitions and lemmas for any model.
3. While smoothness of an operation implies its continuity, lemmas like
@@ -15,8 +15,8 @@ import Mathlib.Geometry.Manifold.ContMDiffMap
A smooth monoid is a monoid that is also a smooth manifold, in which multiplication is a smooth map
of the product manifold `G` × `G` into `G`.
-In this file we define the basic structures to talk about smooth monoids: `HasSmoothMul` and its
-additive counterpart `HasSmoothAdd`. These structures are general enough to also talk about smooth
+In this file we define the basic structures to talk about smooth monoids: `SmoothMul` and its
+additive counterpart `SmoothAdd`. These structures are general enough to also talk about smooth
semigroups.
-/
@@ -26,7 +26,7 @@ open scoped Manifold
library_note "Design choices about smooth algebraic structures"/--
1. All smooth algebraic structures on `G` are `Prop`-valued classes that extend
`SmoothManifoldWithCorners I G`. This way we save users from adding both
-`[SmoothManifoldWithCorners I G]` and `[HasSmoothMul I G]` to the assumptions. While many API
+`[SmoothManifoldWithCorners I G]` and `[SmoothMul I G]` to the assumptions. While many API
lemmas hold true without the `SmoothManifoldWithCorners I G` assumption, we're not aware of a
mathematically interesting monoid on a topological manifold such that (a) the space is not a
`SmoothManifoldWithCorners`; (b) the multiplication is smooth at `(a, b)` in the charts
@@ -37,38 +37,38 @@ we formulate the definitions and lemmas for any model.
3. While smoothness of an operation implies its continuity, lemmas like
`continuousMul_of_smooth` can't be instances becausen otherwise Lean would have to search for
-`HasSmoothMul I G` with unknown `𝕜`, `E`, `H`, and `I : ModelWithCorners 𝕜 E H`. If users needs
+`SmoothMul I G` with unknown `𝕜`, `E`, `H`, and `I : ModelWithCorners 𝕜 E H`. If users needs
`[ContinuousMul G]` in a proof about a smooth monoid, then they need to either add
`[ContinuousMul G]` as an assumption (worse) or use `haveI` in the proof (better). -/
-- See note [Design choices about smooth algebraic structures]
/-- Basic hypothesis to talk about a smooth (Lie) additive monoid or a smooth additive
semigroup. A smooth additive monoid over `α`, for example, is obtained by requiring both the
-instances `AddMonoid α` and `HasSmoothAdd α`. -/
-class HasSmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
+instances `AddMonoid α` and `SmoothAdd α`. -/
+class SmoothAdd {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
[Add G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
Prop where
smooth_add : Smooth (I.prod I) I fun p : G × G => p.1 + p.2
-#align has_smooth_add HasSmoothAdd
+#align has_smooth_add SmoothAdd
-- See note [Design choices about smooth algebraic structures]
/-- Basic hypothesis to talk about a smooth (Lie) monoid or a smooth semigroup.
A smooth monoid over `G`, for example, is obtained by requiring both the instances `Monoid G`
-and `HasSmoothMul I G`. -/
+and `SmoothMul I G`. -/
@[to_additive]
-class HasSmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
+class SmoothMul {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H]
{E : Type _} [NormedAddCommGroup E] [NormedSpace 𝕜 E] (I : ModelWithCorners 𝕜 E H) (G : Type _)
[Mul G] [TopologicalSpace G] [ChartedSpace H G] extends SmoothManifoldWithCorners I G :
Prop where
smooth_mul : Smooth (I.prod I) I fun p : G × G => p.1 * p.2
-#align has_smooth_mul HasSmoothMul
+#align has_smooth_mul SmoothMul
-section HasSmoothMul
+section SmoothMul
variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [Mul G]
- [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G] {E' : Type _} [NormedAddCommGroup E']
+ [TopologicalSpace G] [ChartedSpace H 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]
@@ -78,7 +78,7 @@ variable (I)
@[to_additive]
theorem smooth_mul : Smooth (I.prod I) I fun p : G × G => p.1 * p.2 :=
- HasSmoothMul.smooth_mul
+ SmoothMul.smooth_mul
#align smooth_mul smooth_mul
#align smooth_add smooth_add
@@ -201,7 +201,7 @@ set_option linter.uppercaseLean3 false in
#align R_apply R_apply
@[simp]
-theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
+theorem L_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
(g h : G) : 𝑳 I (g * h) = (𝑳 I g).comp (𝑳 I h) := by
ext
simp only [ContMDiffMap.comp_apply, L_apply, mul_assoc]
@@ -209,7 +209,7 @@ set_option linter.uppercaseLean3 false in
#align L_mul L_mul
@[simp]
-theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G]
+theorem R_mul {G : Type _} [Semigroup G] [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G]
(g h : G) : 𝑹 I (g * h) = (𝑹 I h).comp (𝑹 I g) := by
ext
simp only [ContMDiffMap.comp_apply, R_apply, mul_assoc]
@@ -218,7 +218,7 @@ set_option linter.uppercaseLean3 false in
section
-variable {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H G'] [HasSmoothMul I G']
+variable {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H G'] [SmoothMul I G']
(g' : G')
theorem smoothLeftMul_one : (𝑳 I g') 1 = g' :=
@@ -233,29 +233,30 @@ end
-- Instance of product
@[to_additive]
-instance HasSmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _}
+instance SmoothMul.prod {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {H : Type _} [TopologicalSpace H]
(I : ModelWithCorners 𝕜 E H) (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Mul G]
- [HasSmoothMul I G] {E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type _}
+ [SmoothMul I G] {E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {H' : Type _}
[TopologicalSpace H'] (I' : ModelWithCorners 𝕜 E' H') (G' : Type _) [TopologicalSpace G']
- [ChartedSpace H' G'] [Mul G'] [HasSmoothMul I' G'] : HasSmoothMul (I.prod I') (G × G') :=
+ [ChartedSpace H' G'] [Mul G'] [SmoothMul I' G'] : SmoothMul (I.prod I') (G × G') :=
{ SmoothManifoldWithCorners.prod G G' with
smooth_mul :=
((smooth_fst.comp smooth_fst).smooth.mul (smooth_fst.comp smooth_snd)).prod_mk
((smooth_snd.comp smooth_fst).smooth.mul (smooth_snd.comp smooth_snd)) }
-#align has_smooth_mul.prod HasSmoothMul.prod
-#align has_smooth_add.sum HasSmoothAdd.sum
+#align has_smooth_mul.prod SmoothMul.prod
+#align has_smooth_add.sum SmoothAdd.sum
-end HasSmoothMul
+end SmoothMul
section Monoid
variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [Monoid G]
- [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G] {H' : Type _} [TopologicalSpace H']
+ [TopologicalSpace G] [ChartedSpace H G] [SmoothMul I G] {H' : Type _} [TopologicalSpace H']
{E' : Type _} [NormedAddCommGroup E'] [NormedSpace 𝕜 E'] {I' : ModelWithCorners 𝕜 E' H'}
- {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [HasSmoothMul I' G']
+ {G' : Type _} [Monoid G'] [TopologicalSpace G'] [ChartedSpace H' G'] [SmoothMul I' G']
+@[to_additive]
theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
| 0 => by simp only [pow_zero]; exact smooth_const
| k + 1 => by simpa [pow_succ] using smooth_id.mul (smooth_pow _)
@@ -263,17 +264,17 @@ theorem smooth_pow : ∀ n : ℕ, Smooth I I fun a : G => a ^ n
/-- Morphism of additive smooth monoids. -/
structure SmoothAddMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [HasSmoothAdd I G]
+ (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [AddMonoid G] [SmoothAdd I G]
(G' : Type _) [TopologicalSpace G'] [ChartedSpace H' G'] [AddMonoid G']
- [HasSmoothAdd I' G'] extends G →+ G' where
+ [SmoothAdd I' G'] extends G →+ G' where
smooth_toFun : Smooth I I' toFun
#align smooth_add_monoid_morphism SmoothAddMonoidMorphism
/-- Morphism of smooth monoids. -/
@[to_additive]
structure SmoothMonoidMorphism (I : ModelWithCorners 𝕜 E H) (I' : ModelWithCorners 𝕜 E' H')
- (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [HasSmoothMul I G] (G' : Type _)
- [TopologicalSpace G'] [ChartedSpace H' G'] [Monoid G'] [HasSmoothMul I' G'] extends
+ (G : Type _) [TopologicalSpace G] [ChartedSpace H G] [Monoid G] [SmoothMul I G] (G' : Type _)
+ [TopologicalSpace G'] [ChartedSpace H' G'] [Monoid G'] [SmoothMul I' G'] extends
G →* G' where
smooth_toFun : Smooth I I' toFun
#align smooth_monoid_morphism SmoothMonoidMorphism
@@ -307,7 +308,7 @@ open scoped BigOperators
variable {ι 𝕜 : Type _} [NontriviallyNormedField 𝕜] {H : Type _} [TopologicalSpace H] {E : Type _}
[NormedAddCommGroup E] [NormedSpace 𝕜 E] {I : ModelWithCorners 𝕜 E H} {G : Type _} [CommMonoid G]
- [TopologicalSpace G] [ChartedSpace H G] [HasSmoothMul I G] {E' : Type _} [NormedAddCommGroup E']
+ [TopologicalSpace G] [ChartedSpace H 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] {s : Set M} {x : M} {t : Finset ι}
{f : ι → M → G} {n : ℕ∞} {p : ι → Prop}
@@ -466,7 +467,7 @@ section
variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddCommGroup E]
[NormedSpace 𝕜 E]
-instance hasSmoothAddSelf : HasSmoothAdd 𝓘(𝕜, E) E :=
+instance hasSmoothAddSelf : SmoothAdd 𝓘(𝕜, E) E :=
⟨by rw [← modelWithCornersSelf_prod]; exact contDiff_add.contMDiff⟩
#align has_smooth_add_self hasSmoothAddSelf
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