analysis.normed_space.exponential
β·
Mathlib.Analysis.NormedSpace.Exponential
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)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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
@@ -166,7 +166,7 @@ theorem NormedSpace.exp_unop [T2Space πΈ] (x : πΈα΅α΅α΅) :
#print NormedSpace.star_exp /-
theorem NormedSpace.star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ) :
star (NormedSpace.exp π x) = NormedSpace.exp π (star x) := by
- simp_rw [NormedSpace.exp_eq_tsum, β star_pow, β star_inv_nat_cast_smul, β tsum_star]
+ simp_rw [NormedSpace.exp_eq_tsum, β star_pow, β star_inv_natCast_smul, β tsum_star]
#align star_exp NormedSpace.star_exp
-/
@@ -213,7 +213,7 @@ variable {π πΈ : Type _} [Field π] [DivisionRing πΈ] [Algebra π
theorem NormedSpace.expSeries_apply_eq_div (x : πΈ) (n : β) :
(NormedSpace.expSeries π πΈ n fun _ => x) = x ^ n / n ! := by
rw [div_eq_mul_inv, β (Nat.cast_commute n ! (x ^ n)).inv_leftβ.Eq, β smul_eq_mul,
- NormedSpace.expSeries_apply_eq, inv_nat_cast_smul_eq _ _ _ _]
+ NormedSpace.expSeries_apply_eq, inv_natCast_smul_eq _ _ _ _]
#align exp_series_apply_eq_div NormedSpace.expSeries_apply_eq_div
-/
@@ -417,7 +417,7 @@ theorem NormedSpace.map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (
rw [NormedSpace.exp_eq_tsum, NormedSpace.exp_eq_tsum]
refine' ((NormedSpace.expSeries_summable_of_mem_ball' _ hx).HasSum.map f hf).tsum_eq.symm.trans _
dsimp only [Function.comp]
- simp_rw [one_div, map_inv_nat_cast_smul f π π, map_pow]
+ simp_rw [one_div, map_inv_natCast_smul f π π, map_pow]
#align map_exp_of_mem_ball NormedSpace.map_exp_of_mem_ball
-/
@@ -894,7 +894,7 @@ variable (π π' πΈ : Type _) [Field π] [Field π'] [Ring πΈ] [Alge
`exp_series` on `πΈ`. -/
theorem NormedSpace.expSeries_eq_expSeries (n : β) (x : πΈ) :
(NormedSpace.expSeries π πΈ n fun _ => x) = NormedSpace.expSeries π' πΈ n fun _ => x := by
- rw [NormedSpace.expSeries_apply_eq, NormedSpace.expSeries_apply_eq, inv_nat_cast_smul_eq π π']
+ rw [NormedSpace.expSeries_apply_eq, NormedSpace.expSeries_apply_eq, inv_natCast_smul_eq π π']
#align exp_series_eq_exp_series NormedSpace.expSeries_eq_expSeries
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -67,7 +67,7 @@ We prove most result for an arbitrary field `π`, and then specialize to `π
-/
-open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
+open Filter RCLike ContinuousMultilinearMap NormedField Asymptotics
open scoped Nat Topology BigOperators ENNReal
@@ -499,11 +499,11 @@ theorem NormedSpace.exp_add_of_mem_ball [CharZero π] {x y : πΈ}
end AnyFieldCommAlgebra
-section IsROrC
+section RCLike
section AnyAlgebra
-variable (π πΈ πΉ : Type _) [IsROrC π] [NormedRing πΈ] [NormedAlgebra π πΈ]
+variable (π πΈ πΉ : Type _) [RCLike π] [NormedRing πΈ] [NormedAlgebra π πΈ]
variable [NormedRing πΉ] [NormedAlgebra π πΉ]
@@ -694,7 +694,7 @@ theorem NormedSpace.exp_nsmul (n : β) (x : πΈ) :
by
induction' n with n ih
Β· rw [zero_smul, pow_zero, NormedSpace.exp_zero]
- Β· rw [succ_nsmul, pow_succ, NormedSpace.exp_add_of_commute ((Commute.refl x).smul_right n), ih]
+ Β· rw [succ_nsmul', pow_succ', NormedSpace.exp_add_of_commute ((Commute.refl x).smul_right n), ih]
#align exp_nsmul NormedSpace.exp_nsmul
-/
@@ -791,7 +791,7 @@ end AnyAlgebra
section DivisionAlgebra
-variable {π πΈ : Type _} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
+variable {π πΈ : Type _} [RCLike π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
variable (π)
@@ -832,8 +832,8 @@ theorem NormedSpace.exp_zsmul (z : β€) (x : πΈ) :
NormedSpace.exp π (z β’ x) = NormedSpace.exp π x ^ z :=
by
obtain β¨n, rfl | rflβ© := z.eq_coe_or_neg
- Β· rw [zpow_coe_nat, coe_nat_zsmul, NormedSpace.exp_nsmul]
- Β· rw [zpow_neg, zpow_coe_nat, neg_smul, NormedSpace.exp_neg, coe_nat_zsmul, NormedSpace.exp_nsmul]
+ Β· rw [zpow_natCast, natCast_zsmul, NormedSpace.exp_nsmul]
+ Β· rw [zpow_neg, zpow_natCast, neg_smul, NormedSpace.exp_neg, natCast_zsmul, NormedSpace.exp_nsmul]
#align exp_zsmul NormedSpace.exp_zsmul
-/
@@ -855,7 +855,7 @@ end DivisionAlgebra
section CommAlgebra
-variable {π πΈ : Type _} [IsROrC π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
+variable {π πΈ : Type _} [RCLike π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
#print NormedSpace.exp_add /-
/-- In a commutative Banach-algebra `πΈ` over `π = β` or `π = β`,
@@ -880,7 +880,7 @@ theorem NormedSpace.exp_sum {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ) :
end CommAlgebra
-end IsROrC
+end RCLike
end Normed
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -334,7 +334,7 @@ theorem NormedSpace.analyticAt_exp_of_mem_ball (x : πΈ)
AnalyticAt π (NormedSpace.exp π) x :=
by
by_cases h : (NormedSpace.expSeries π πΈ).radius = 0
- Β· rw [h] at hx ; exact (ENNReal.not_lt_zero hx).elim
+ Β· rw [h] at hx; exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
exact (NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos h).analyticAt_of_mem hx
#align analytic_at_exp_of_mem_ball NormedSpace.analyticAt_exp_of_mem_ball
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -832,8 +832,8 @@ theorem NormedSpace.exp_zsmul (z : β€) (x : πΈ) :
NormedSpace.exp π (z β’ x) = NormedSpace.exp π x ^ z :=
by
obtain β¨n, rfl | rflβ© := z.eq_coe_or_neg
- Β· rw [zpow_ofNat, coe_nat_zsmul, NormedSpace.exp_nsmul]
- Β· rw [zpow_neg, zpow_ofNat, neg_smul, NormedSpace.exp_neg, coe_nat_zsmul, NormedSpace.exp_nsmul]
+ Β· rw [zpow_coe_nat, coe_nat_zsmul, NormedSpace.exp_nsmul]
+ Β· rw [zpow_neg, zpow_coe_nat, neg_smul, NormedSpace.exp_neg, coe_nat_zsmul, NormedSpace.exp_nsmul]
#align exp_zsmul NormedSpace.exp_zsmul
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -677,7 +677,14 @@ theorem NormedSpace.exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
(h : (s : Set ΞΉ).Pairwise fun i j => Commute (f i) (f j)) :
NormedSpace.exp π (β i in s, f i) =
s.noncommProd (fun i => NormedSpace.exp π (f i)) fun i hi j hj _ => (h.of_refl hi hj).exp π :=
- by classical
+ by
+ classical
+ induction' s using Finset.induction_on with a s ha ih
+ Β· simp
+ rw [Finset.noncommProd_insert_of_not_mem _ _ _ _ ha, Finset.sum_insert ha,
+ NormedSpace.exp_add_of_commute, ih (h.mono <| Finset.subset_insert _ _)]
+ refine' Commute.sum_right _ _ _ fun i hi => _
+ exact h.of_refl (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hi)
#align exp_sum_of_commute NormedSpace.exp_sum_of_commute
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -677,14 +677,7 @@ theorem NormedSpace.exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
(h : (s : Set ΞΉ).Pairwise fun i j => Commute (f i) (f j)) :
NormedSpace.exp π (β i in s, f i) =
s.noncommProd (fun i => NormedSpace.exp π (f i)) fun i hi j hj _ => (h.of_refl hi hj).exp π :=
- by
- classical
- induction' s using Finset.induction_on with a s ha ih
- Β· simp
- rw [Finset.noncommProd_insert_of_not_mem _ _ _ _ ha, Finset.sum_insert ha,
- NormedSpace.exp_add_of_commute, ih (h.mono <| Finset.subset_insert _ _)]
- refine' Commute.sum_right _ _ _ fun i hi => _
- exact h.of_refl (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hi)
+ by classical
#align exp_sum_of_commute NormedSpace.exp_sum_of_commute
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -75,118 +75,129 @@ section TopologicalAlgebra
variable (π πΈ : Type _) [Field π] [Ring πΈ] [Algebra π πΈ] [TopologicalSpace πΈ] [TopologicalRing πΈ]
-#print expSeries /-
+#print NormedSpace.expSeries /-
/-- `exp_series π πΈ` is the `formal_multilinear_series` whose `n`-th term is the map
`(xα΅’) : πΈβΏ β¦ (1/n! : π) β’ β xα΅’`. Its sum is the exponential map `exp π : πΈ β πΈ`. -/
-def expSeries : FormalMultilinearSeries π πΈ πΈ := fun n =>
+def NormedSpace.expSeries : FormalMultilinearSeries π πΈ πΈ := fun n =>
(n !β»ΒΉ : π) β’ ContinuousMultilinearMap.mkPiAlgebraFin π n πΈ
-#align exp_series expSeries
+#align exp_series NormedSpace.expSeries
-/
variable {πΈ}
-#print exp /-
+#print NormedSpace.exp /-
/-- `exp π : πΈ β πΈ` is the exponential map determined by the action of `π` on `πΈ`.
It is defined as the sum of the `formal_multilinear_series` `exp_series π πΈ`.
Note that when `πΈ = matrix n n π`, this is the **Matrix Exponential**; see
[`analysis.normed_space.matrix_exponential`](../matrix_exponential) for lemmas specific to that
case. -/
-noncomputable def exp (x : πΈ) : πΈ :=
- (expSeries π πΈ).Sum x
-#align exp exp
+noncomputable def NormedSpace.exp (x : πΈ) : πΈ :=
+ (NormedSpace.expSeries π πΈ).Sum x
+#align exp NormedSpace.exp
-/
variable {π}
-#print expSeries_apply_eq /-
-theorem expSeries_apply_eq (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = (n !β»ΒΉ : π) β’ x ^ n :=
- by simp [expSeries]
-#align exp_series_apply_eq expSeries_apply_eq
+#print NormedSpace.expSeries_apply_eq /-
+theorem NormedSpace.expSeries_apply_eq (x : πΈ) (n : β) :
+ (NormedSpace.expSeries π πΈ n fun _ => x) = (n !β»ΒΉ : π) β’ x ^ n := by
+ simp [NormedSpace.expSeries]
+#align exp_series_apply_eq NormedSpace.expSeries_apply_eq
-/
-#print expSeries_apply_eq' /-
-theorem expSeries_apply_eq' (x : πΈ) :
- (fun n => expSeries π πΈ n fun _ => x) = fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- funext (expSeries_apply_eq x)
-#align exp_series_apply_eq' expSeries_apply_eq'
+#print NormedSpace.expSeries_apply_eq' /-
+theorem NormedSpace.expSeries_apply_eq' (x : πΈ) :
+ (fun n => NormedSpace.expSeries π πΈ n fun _ => x) = fun n => (n !β»ΒΉ : π) β’ x ^ n :=
+ funext (NormedSpace.expSeries_apply_eq x)
+#align exp_series_apply_eq' NormedSpace.expSeries_apply_eq'
-/
-#print expSeries_sum_eq /-
-theorem expSeries_sum_eq (x : πΈ) : (expSeries π πΈ).Sum x = β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
- tsum_congr fun n => expSeries_apply_eq x n
-#align exp_series_sum_eq expSeries_sum_eq
+#print NormedSpace.expSeries_sum_eq /-
+theorem NormedSpace.expSeries_sum_eq (x : πΈ) :
+ (NormedSpace.expSeries π πΈ).Sum x = β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
+ tsum_congr fun n => NormedSpace.expSeries_apply_eq x n
+#align exp_series_sum_eq NormedSpace.expSeries_sum_eq
-/
-#print exp_eq_tsum /-
-theorem exp_eq_tsum : exp π = fun x : πΈ => β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
- funext expSeries_sum_eq
-#align exp_eq_tsum exp_eq_tsum
+#print NormedSpace.exp_eq_tsum /-
+theorem NormedSpace.exp_eq_tsum : NormedSpace.exp π = fun x : πΈ => β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
+ funext NormedSpace.expSeries_sum_eq
+#align exp_eq_tsum NormedSpace.exp_eq_tsum
-/
-#print expSeries_apply_zero /-
-theorem expSeries_apply_zero (n : β) : (expSeries π πΈ n fun _ => (0 : πΈ)) = Pi.single 0 1 n :=
+#print NormedSpace.expSeries_apply_zero /-
+theorem NormedSpace.expSeries_apply_zero (n : β) :
+ (NormedSpace.expSeries π πΈ n fun _ => (0 : πΈ)) = Pi.single 0 1 n :=
by
- rw [expSeries_apply_eq]
+ rw [NormedSpace.expSeries_apply_eq]
cases n
Β· rw [pow_zero, Nat.factorial_zero, Nat.cast_one, inv_one, one_smul, Pi.single_eq_same]
Β· rw [zero_pow (Nat.succ_pos _), smul_zero, Pi.single_eq_of_ne n.succ_ne_zero]
-#align exp_series_apply_zero expSeries_apply_zero
+#align exp_series_apply_zero NormedSpace.expSeries_apply_zero
-/
-#print exp_zero /-
+#print NormedSpace.exp_zero /-
@[simp]
-theorem exp_zero [T2Space πΈ] : exp π (0 : πΈ) = 1 := by
- simp_rw [exp_eq_tsum, β expSeries_apply_eq, expSeries_apply_zero, tsum_pi_single]
-#align exp_zero exp_zero
+theorem NormedSpace.exp_zero [T2Space πΈ] : NormedSpace.exp π (0 : πΈ) = 1 := by
+ simp_rw [NormedSpace.exp_eq_tsum, β NormedSpace.expSeries_apply_eq,
+ NormedSpace.expSeries_apply_zero, tsum_pi_single]
+#align exp_zero NormedSpace.exp_zero
-/
-#print exp_op /-
+#print NormedSpace.exp_op /-
@[simp]
-theorem exp_op [T2Space πΈ] (x : πΈ) : exp π (MulOpposite.op x) = MulOpposite.op (exp π x) := by
- simp_rw [exp, expSeries_sum_eq, β MulOpposite.op_pow, β MulOpposite.op_smul, tsum_op]
-#align exp_op exp_op
+theorem NormedSpace.exp_op [T2Space πΈ] (x : πΈ) :
+ NormedSpace.exp π (MulOpposite.op x) = MulOpposite.op (NormedSpace.exp π x) := by
+ simp_rw [NormedSpace.exp, NormedSpace.expSeries_sum_eq, β MulOpposite.op_pow, β
+ MulOpposite.op_smul, tsum_op]
+#align exp_op NormedSpace.exp_op
-/
-#print exp_unop /-
+#print NormedSpace.exp_unop /-
@[simp]
-theorem exp_unop [T2Space πΈ] (x : πΈα΅α΅α΅) : exp π (MulOpposite.unop x) = MulOpposite.unop (exp π x) :=
- by simp_rw [exp, expSeries_sum_eq, β MulOpposite.unop_pow, β MulOpposite.unop_smul, tsum_unop]
-#align exp_unop exp_unop
+theorem NormedSpace.exp_unop [T2Space πΈ] (x : πΈα΅α΅α΅) :
+ NormedSpace.exp π (MulOpposite.unop x) = MulOpposite.unop (NormedSpace.exp π x) := by
+ simp_rw [NormedSpace.exp, NormedSpace.expSeries_sum_eq, β MulOpposite.unop_pow, β
+ MulOpposite.unop_smul, tsum_unop]
+#align exp_unop NormedSpace.exp_unop
-/
-#print star_exp /-
-theorem star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ) :
- star (exp π x) = exp π (star x) := by
- simp_rw [exp_eq_tsum, β star_pow, β star_inv_nat_cast_smul, β tsum_star]
-#align star_exp star_exp
+#print NormedSpace.star_exp /-
+theorem NormedSpace.star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ) :
+ star (NormedSpace.exp π x) = NormedSpace.exp π (star x) := by
+ simp_rw [NormedSpace.exp_eq_tsum, β star_pow, β star_inv_nat_cast_smul, β tsum_star]
+#align star_exp NormedSpace.star_exp
-/
variable (π)
#print IsSelfAdjoint.exp /-
theorem IsSelfAdjoint.exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
- (h : IsSelfAdjoint x) : IsSelfAdjoint (exp π x) :=
- (star_exp x).trans <| h.symm βΈ rfl
+ (h : IsSelfAdjoint x) : IsSelfAdjoint (NormedSpace.exp π x) :=
+ (NormedSpace.star_exp x).trans <| h.symm βΈ rfl
#align is_self_adjoint.exp IsSelfAdjoint.exp
-/
#print Commute.exp_right /-
-theorem Commute.exp_right [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute x (exp π y) :=
+theorem Commute.exp_right [T2Space πΈ] {x y : πΈ} (h : Commute x y) :
+ Commute x (NormedSpace.exp π y) :=
by
- rw [exp_eq_tsum]
+ rw [NormedSpace.exp_eq_tsum]
exact Commute.tsum_right x fun n => (h.pow_right n).smul_right _
#align commute.exp_right Commute.exp_right
-/
#print Commute.exp_left /-
-theorem Commute.exp_left [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) y :=
+theorem Commute.exp_left [T2Space πΈ] {x y : πΈ} (h : Commute x y) :
+ Commute (NormedSpace.exp π x) y :=
(h.symm.exp_right π).symm
#align commute.exp_left Commute.exp_left
-/
#print Commute.exp /-
-theorem Commute.exp [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) (exp π y) :=
+theorem Commute.exp [T2Space πΈ] {x y : πΈ} (h : Commute x y) :
+ Commute (NormedSpace.exp π x) (NormedSpace.exp π y) :=
(h.exp_left _).exp_right _
#align commute.exp Commute.exp
-/
@@ -198,30 +209,32 @@ section TopologicalDivisionAlgebra
variable {π πΈ : Type _} [Field π] [DivisionRing πΈ] [Algebra π πΈ] [TopologicalSpace πΈ]
[TopologicalRing πΈ]
-#print expSeries_apply_eq_div /-
-theorem expSeries_apply_eq_div (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = x ^ n / n ! := by
+#print NormedSpace.expSeries_apply_eq_div /-
+theorem NormedSpace.expSeries_apply_eq_div (x : πΈ) (n : β) :
+ (NormedSpace.expSeries π πΈ n fun _ => x) = x ^ n / n ! := by
rw [div_eq_mul_inv, β (Nat.cast_commute n ! (x ^ n)).inv_leftβ.Eq, β smul_eq_mul,
- expSeries_apply_eq, inv_nat_cast_smul_eq _ _ _ _]
-#align exp_series_apply_eq_div expSeries_apply_eq_div
+ NormedSpace.expSeries_apply_eq, inv_nat_cast_smul_eq _ _ _ _]
+#align exp_series_apply_eq_div NormedSpace.expSeries_apply_eq_div
-/
-#print expSeries_apply_eq_div' /-
-theorem expSeries_apply_eq_div' (x : πΈ) :
- (fun n => expSeries π πΈ n fun _ => x) = fun n => x ^ n / n ! :=
- funext (expSeries_apply_eq_div x)
-#align exp_series_apply_eq_div' expSeries_apply_eq_div'
+#print NormedSpace.expSeries_apply_eq_div' /-
+theorem NormedSpace.expSeries_apply_eq_div' (x : πΈ) :
+ (fun n => NormedSpace.expSeries π πΈ n fun _ => x) = fun n => x ^ n / n ! :=
+ funext (NormedSpace.expSeries_apply_eq_div x)
+#align exp_series_apply_eq_div' NormedSpace.expSeries_apply_eq_div'
-/
-#print expSeries_sum_eq_div /-
-theorem expSeries_sum_eq_div (x : πΈ) : (expSeries π πΈ).Sum x = β' n : β, x ^ n / n ! :=
- tsum_congr (expSeries_apply_eq_div x)
-#align exp_series_sum_eq_div expSeries_sum_eq_div
+#print NormedSpace.expSeries_sum_eq_div /-
+theorem NormedSpace.expSeries_sum_eq_div (x : πΈ) :
+ (NormedSpace.expSeries π πΈ).Sum x = β' n : β, x ^ n / n ! :=
+ tsum_congr (NormedSpace.expSeries_apply_eq_div x)
+#align exp_series_sum_eq_div NormedSpace.expSeries_sum_eq_div
-/
-#print exp_eq_tsum_div /-
-theorem exp_eq_tsum_div : exp π = fun x : πΈ => β' n : β, x ^ n / n ! :=
- funext expSeries_sum_eq_div
-#align exp_eq_tsum_div exp_eq_tsum_div
+#print NormedSpace.exp_eq_tsum_div /-
+theorem NormedSpace.exp_eq_tsum_div : NormedSpace.exp π = fun x : πΈ => β' n : β, x ^ n / n ! :=
+ funext NormedSpace.expSeries_sum_eq_div
+#align exp_eq_tsum_div NormedSpace.exp_eq_tsum_div
-/
end TopologicalDivisionAlgebra
@@ -234,103 +247,111 @@ variable {π πΈ πΉ : Type _} [NontriviallyNormedField π]
variable [NormedRing πΈ] [NormedRing πΉ] [NormedAlgebra π πΈ] [NormedAlgebra π πΉ]
-#print norm_expSeries_summable_of_mem_ball /-
-theorem norm_expSeries_summable_of_mem_ball (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
- Summable fun n => βexpSeries π πΈ n fun _ => xβ :=
- (expSeries π πΈ).summable_norm_apply hx
-#align norm_exp_series_summable_of_mem_ball norm_expSeries_summable_of_mem_ball
+#print NormedSpace.norm_expSeries_summable_of_mem_ball /-
+theorem NormedSpace.norm_expSeries_summable_of_mem_ball (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ Summable fun n => βNormedSpace.expSeries π πΈ n fun _ => xβ :=
+ (NormedSpace.expSeries π πΈ).summable_norm_apply hx
+#align norm_exp_series_summable_of_mem_ball NormedSpace.norm_expSeries_summable_of_mem_ball
-/
-#print norm_expSeries_summable_of_mem_ball' /-
-theorem norm_expSeries_summable_of_mem_ball' (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+#print NormedSpace.norm_expSeries_summable_of_mem_ball' /-
+theorem NormedSpace.norm_expSeries_summable_of_mem_ball' (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
by
change Summable (norm β _)
- rw [β expSeries_apply_eq']
- exact norm_expSeries_summable_of_mem_ball x hx
-#align norm_exp_series_summable_of_mem_ball' norm_expSeries_summable_of_mem_ball'
+ rw [β NormedSpace.expSeries_apply_eq']
+ exact NormedSpace.norm_expSeries_summable_of_mem_ball x hx
+#align norm_exp_series_summable_of_mem_ball' NormedSpace.norm_expSeries_summable_of_mem_ball'
-/
section CompleteAlgebra
variable [CompleteSpace πΈ]
-#print expSeries_summable_of_mem_ball /-
-theorem expSeries_summable_of_mem_ball (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
- Summable fun n => expSeries π πΈ n fun _ => x :=
- Summable.of_norm (norm_expSeries_summable_of_mem_ball x hx)
-#align exp_series_summable_of_mem_ball expSeries_summable_of_mem_ball
+#print NormedSpace.expSeries_summable_of_mem_ball /-
+theorem NormedSpace.expSeries_summable_of_mem_ball (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ Summable fun n => NormedSpace.expSeries π πΈ n fun _ => x :=
+ Summable.of_norm (NormedSpace.norm_expSeries_summable_of_mem_ball x hx)
+#align exp_series_summable_of_mem_ball NormedSpace.expSeries_summable_of_mem_ball
-/
-#print expSeries_summable_of_mem_ball' /-
-theorem expSeries_summable_of_mem_ball' (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+#print NormedSpace.expSeries_summable_of_mem_ball' /-
+theorem NormedSpace.expSeries_summable_of_mem_ball' (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- Summable.of_norm (norm_expSeries_summable_of_mem_ball' x hx)
-#align exp_series_summable_of_mem_ball' expSeries_summable_of_mem_ball'
+ Summable.of_norm (NormedSpace.norm_expSeries_summable_of_mem_ball' x hx)
+#align exp_series_summable_of_mem_ball' NormedSpace.expSeries_summable_of_mem_ball'
-/
-#print expSeries_hasSum_exp_of_mem_ball /-
-theorem expSeries_hasSum_exp_of_mem_ball (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
- HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
- FormalMultilinearSeries.hasSum (expSeries π πΈ) hx
-#align exp_series_has_sum_exp_of_mem_ball expSeries_hasSum_exp_of_mem_ball
+#print NormedSpace.expSeries_hasSum_exp_of_mem_ball /-
+theorem NormedSpace.expSeries_hasSum_exp_of_mem_ball (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ HasSum (fun n => NormedSpace.expSeries π πΈ n fun _ => x) (NormedSpace.exp π x) :=
+ FormalMultilinearSeries.hasSum (NormedSpace.expSeries π πΈ) hx
+#align exp_series_has_sum_exp_of_mem_ball NormedSpace.expSeries_hasSum_exp_of_mem_ball
-/
-#print expSeries_hasSum_exp_of_mem_ball' /-
-theorem expSeries_hasSum_exp_of_mem_ball' (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
- HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) :=
+#print NormedSpace.expSeries_hasSum_exp_of_mem_ball' /-
+theorem NormedSpace.expSeries_hasSum_exp_of_mem_ball' (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (NormedSpace.exp π x) :=
by
- rw [β expSeries_apply_eq']
- exact expSeries_hasSum_exp_of_mem_ball x hx
-#align exp_series_has_sum_exp_of_mem_ball' expSeries_hasSum_exp_of_mem_ball'
+ rw [β NormedSpace.expSeries_apply_eq']
+ exact NormedSpace.expSeries_hasSum_exp_of_mem_ball x hx
+#align exp_series_has_sum_exp_of_mem_ball' NormedSpace.expSeries_hasSum_exp_of_mem_ball'
-/
-#print hasFPowerSeriesOnBall_exp_of_radius_pos /-
-theorem hasFPowerSeriesOnBall_exp_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
- HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 (expSeries π πΈ).radius :=
- (expSeries π πΈ).HasFPowerSeriesOnBall h
-#align has_fpower_series_on_ball_exp_of_radius_pos hasFPowerSeriesOnBall_exp_of_radius_pos
+#print NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos /-
+theorem NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos
+ (h : 0 < (NormedSpace.expSeries π πΈ).radius) :
+ HasFPowerSeriesOnBall (NormedSpace.exp π) (NormedSpace.expSeries π πΈ) 0
+ (NormedSpace.expSeries π πΈ).radius :=
+ (NormedSpace.expSeries π πΈ).HasFPowerSeriesOnBall h
+#align has_fpower_series_on_ball_exp_of_radius_pos NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos
-/
-#print hasFPowerSeriesAt_exp_zero_of_radius_pos /-
-theorem hasFPowerSeriesAt_exp_zero_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
- HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
- (hasFPowerSeriesOnBall_exp_of_radius_pos h).HasFPowerSeriesAt
-#align has_fpower_series_at_exp_zero_of_radius_pos hasFPowerSeriesAt_exp_zero_of_radius_pos
+#print NormedSpace.hasFPowerSeriesAt_exp_zero_of_radius_pos /-
+theorem NormedSpace.hasFPowerSeriesAt_exp_zero_of_radius_pos
+ (h : 0 < (NormedSpace.expSeries π πΈ).radius) :
+ HasFPowerSeriesAt (NormedSpace.exp π) (NormedSpace.expSeries π πΈ) 0 :=
+ (NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos h).HasFPowerSeriesAt
+#align has_fpower_series_at_exp_zero_of_radius_pos NormedSpace.hasFPowerSeriesAt_exp_zero_of_radius_pos
-/
-#print continuousOn_exp /-
-theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball 0 (expSeries π πΈ).radius) :=
+#print NormedSpace.continuousOn_exp /-
+theorem NormedSpace.continuousOn_exp :
+ ContinuousOn (NormedSpace.exp π : πΈ β πΈ) (EMetric.ball 0 (NormedSpace.expSeries π πΈ).radius) :=
FormalMultilinearSeries.continuousOn
-#align continuous_on_exp continuousOn_exp
+#align continuous_on_exp NormedSpace.continuousOn_exp
-/
-#print analyticAt_exp_of_mem_ball /-
-theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
- AnalyticAt π (exp π) x := by
- by_cases h : (expSeries π πΈ).radius = 0
+#print NormedSpace.analyticAt_exp_of_mem_ball /-
+theorem NormedSpace.analyticAt_exp_of_mem_ball (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ AnalyticAt π (NormedSpace.exp π) x :=
+ by
+ by_cases h : (NormedSpace.expSeries π πΈ).radius = 0
Β· rw [h] at hx ; exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
- exact (hasFPowerSeriesOnBall_exp_of_radius_pos h).analyticAt_of_mem hx
-#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
+ exact (NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos h).analyticAt_of_mem hx
+#align analytic_at_exp_of_mem_ball NormedSpace.analyticAt_exp_of_mem_ball
-/
-#print exp_add_of_commute_of_mem_ball /-
+#print NormedSpace.exp_add_of_commute_of_mem_ball /-
/-- In a Banach-algebra `πΈ` over a normed field `π` of characteristic zero, if `x` and `y` are
in the disk of convergence and commute, then `exp π (x + y) = (exp π x) * (exp π y)`. -/
-theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commute x y)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius)
- (hy : y β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
+theorem NormedSpace.exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commute x y)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius)
+ (hy : y β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ NormedSpace.exp π (x + y) = NormedSpace.exp π x * NormedSpace.exp π y :=
by
- rw [exp_eq_tsum,
+ rw [NormedSpace.exp_eq_tsum,
tsum_mul_tsum_eq_tsum_sum_antidiagonal_of_summable_norm
- (norm_expSeries_summable_of_mem_ball' x hx) (norm_expSeries_summable_of_mem_ball' y hy)]
+ (NormedSpace.norm_expSeries_summable_of_mem_ball' x hx)
+ (NormedSpace.norm_expSeries_summable_of_mem_ball' y hy)]
dsimp only
conv_lhs =>
congr
@@ -342,69 +363,72 @@ theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commu
congr 1
have : (n ! : π) β 0 := nat.cast_ne_zero.mpr n.factorial_ne_zero
field_simp [this]
-#align exp_add_of_commute_of_mem_ball exp_add_of_commute_of_mem_ball
+#align exp_add_of_commute_of_mem_ball NormedSpace.exp_add_of_commute_of_mem_ball
-/
-#print invertibleExpOfMemBall /-
+#print NormedSpace.invertibleExpOfMemBall /-
/-- `exp π x` has explicit two-sided inverse `exp π (-x)`. -/
-noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Invertible (exp π x)
+noncomputable def NormedSpace.invertibleExpOfMemBall [CharZero π] {x : πΈ}
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ Invertible (NormedSpace.exp π x)
where
- invOf := exp π (-x)
+ invOf := NormedSpace.exp π (-x)
invOf_hMul_self :=
by
- have hnx : -x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
+ have hnx : -x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius :=
by
rw [EMetric.mem_ball, β neg_zero, edist_neg_neg]
exact hx
- rw [β exp_add_of_commute_of_mem_ball (Commute.neg_left <| Commute.refl x) hnx hx, neg_add_self,
- exp_zero]
+ rw [β NormedSpace.exp_add_of_commute_of_mem_ball (Commute.neg_left <| Commute.refl x) hnx hx,
+ neg_add_self, NormedSpace.exp_zero]
hMul_invOf_self :=
by
- have hnx : -x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
+ have hnx : -x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius :=
by
rw [EMetric.mem_ball, β neg_zero, edist_neg_neg]
exact hx
- rw [β exp_add_of_commute_of_mem_ball (Commute.neg_right <| Commute.refl x) hx hnx, add_neg_self,
- exp_zero]
-#align invertible_exp_of_mem_ball invertibleExpOfMemBall
+ rw [β NormedSpace.exp_add_of_commute_of_mem_ball (Commute.neg_right <| Commute.refl x) hx hnx,
+ add_neg_self, NormedSpace.exp_zero]
+#align invertible_exp_of_mem_ball NormedSpace.invertibleExpOfMemBall
-/
-#print isUnit_exp_of_mem_ball /-
-theorem isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : IsUnit (exp π x) :=
- @isUnit_of_invertible _ _ _ (invertibleExpOfMemBall hx)
-#align is_unit_exp_of_mem_ball isUnit_exp_of_mem_ball
+#print NormedSpace.isUnit_exp_of_mem_ball /-
+theorem NormedSpace.isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ IsUnit (NormedSpace.exp π x) :=
+ @isUnit_of_invertible _ _ _ (NormedSpace.invertibleExpOfMemBall hx)
+#align is_unit_exp_of_mem_ball NormedSpace.isUnit_exp_of_mem_ball
-/
-#print invOf_exp_of_mem_ball /-
-theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
- β
(exp π x) = exp π (-x) := by letI := invertibleExpOfMemBall hx;
- convert (rfl : β
(exp π x) = _)
-#align inv_of_exp_of_mem_ball invOf_exp_of_mem_ball
+#print NormedSpace.invOf_exp_of_mem_ball /-
+theorem NormedSpace.invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius)
+ [Invertible (NormedSpace.exp π x)] : β
(NormedSpace.exp π x) = NormedSpace.exp π (-x) := by
+ letI := NormedSpace.invertibleExpOfMemBall hx; convert (rfl : β
(NormedSpace.exp π x) = _)
+#align inv_of_exp_of_mem_ball NormedSpace.invOf_exp_of_mem_ball
-/
-#print map_exp_of_mem_ball /-
+#print NormedSpace.map_exp_of_mem_ball /-
/-- Any continuous ring homomorphism commutes with `exp`. -/
-theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : f (exp π x) = exp π (f x) :=
+theorem NormedSpace.map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ f (NormedSpace.exp π x) = NormedSpace.exp π (f x) :=
by
- rw [exp_eq_tsum, exp_eq_tsum]
- refine' ((expSeries_summable_of_mem_ball' _ hx).HasSum.map f hf).tsum_eq.symm.trans _
+ rw [NormedSpace.exp_eq_tsum, NormedSpace.exp_eq_tsum]
+ refine' ((NormedSpace.expSeries_summable_of_mem_ball' _ hx).HasSum.map f hf).tsum_eq.symm.trans _
dsimp only [Function.comp]
simp_rw [one_div, map_inv_nat_cast_smul f π π, map_pow]
-#align map_exp_of_mem_ball map_exp_of_mem_ball
+#align map_exp_of_mem_ball NormedSpace.map_exp_of_mem_ball
-/
end CompleteAlgebra
-#print algebraMap_exp_comm_of_mem_ball /-
-theorem algebraMap_exp_comm_of_mem_ball [CompleteSpace π] (x : π)
- (hx : x β EMetric.ball (0 : π) (expSeries π π).radius) :
- algebraMap π πΈ (exp π x) = exp π (algebraMap π πΈ x) :=
- map_exp_of_mem_ball _ (continuous_algebraMap π πΈ) _ hx
-#align algebra_map_exp_comm_of_mem_ball algebraMap_exp_comm_of_mem_ball
+#print NormedSpace.algebraMap_exp_comm_of_mem_ball /-
+theorem NormedSpace.algebraMap_exp_comm_of_mem_ball [CompleteSpace π] (x : π)
+ (hx : x β EMetric.ball (0 : π) (NormedSpace.expSeries π π).radius) :
+ algebraMap π πΈ (NormedSpace.exp π x) = NormedSpace.exp π (algebraMap π πΈ x) :=
+ NormedSpace.map_exp_of_mem_ball _ (continuous_algebraMap π πΈ) _ hx
+#align algebra_map_exp_comm_of_mem_ball NormedSpace.algebraMap_exp_comm_of_mem_ball
-/
end AnyFieldAnyAlgebra
@@ -415,41 +439,44 @@ variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedDivisionRing
variable (π)
-#print norm_expSeries_div_summable_of_mem_ball /-
-theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => βx ^ n / n !β :=
+#print NormedSpace.norm_expSeries_div_summable_of_mem_ball /-
+theorem NormedSpace.norm_expSeries_div_summable_of_mem_ball (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ Summable fun n => βx ^ n / n !β :=
by
change Summable (norm β _)
- rw [β expSeries_apply_eq_div' x]
- exact norm_expSeries_summable_of_mem_ball x hx
-#align norm_exp_series_div_summable_of_mem_ball norm_expSeries_div_summable_of_mem_ball
+ rw [β NormedSpace.expSeries_apply_eq_div' x]
+ exact NormedSpace.norm_expSeries_summable_of_mem_ball x hx
+#align norm_exp_series_div_summable_of_mem_ball NormedSpace.norm_expSeries_div_summable_of_mem_ball
-/
-#print expSeries_div_summable_of_mem_ball /-
-theorem expSeries_div_summable_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => x ^ n / n ! :=
- Summable.of_norm (norm_expSeries_div_summable_of_mem_ball π x hx)
-#align exp_series_div_summable_of_mem_ball expSeries_div_summable_of_mem_ball
+#print NormedSpace.expSeries_div_summable_of_mem_ball /-
+theorem NormedSpace.expSeries_div_summable_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ Summable fun n => x ^ n / n ! :=
+ Summable.of_norm (NormedSpace.norm_expSeries_div_summable_of_mem_ball π x hx)
+#align exp_series_div_summable_of_mem_ball NormedSpace.expSeries_div_summable_of_mem_ball
-/
-#print expSeries_div_hasSum_exp_of_mem_ball /-
-theorem expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
- HasSum (fun n => x ^ n / n !) (exp π x) :=
+#print NormedSpace.expSeries_div_hasSum_exp_of_mem_ball /-
+theorem NormedSpace.expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ HasSum (fun n => x ^ n / n !) (NormedSpace.exp π x) :=
by
- rw [β expSeries_apply_eq_div' x]
- exact expSeries_hasSum_exp_of_mem_ball x hx
-#align exp_series_div_has_sum_exp_of_mem_ball expSeries_div_hasSum_exp_of_mem_ball
+ rw [β NormedSpace.expSeries_apply_eq_div' x]
+ exact NormedSpace.expSeries_hasSum_exp_of_mem_ball x hx
+#align exp_series_div_has_sum_exp_of_mem_ball NormedSpace.expSeries_div_hasSum_exp_of_mem_ball
-/
variable {π}
-#print exp_neg_of_mem_ball /-
-theorem exp_neg_of_mem_ball [CharZero π] [CompleteSpace πΈ] {x : πΈ}
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (-x) = (exp π x)β»ΒΉ :=
- letI := invertibleExpOfMemBall hx
- invOf_eq_inv (exp π x)
-#align exp_neg_of_mem_ball exp_neg_of_mem_ball
+#print NormedSpace.exp_neg_of_mem_ball /-
+theorem NormedSpace.exp_neg_of_mem_ball [CharZero π] [CompleteSpace πΈ] {x : πΈ}
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ NormedSpace.exp π (-x) = (NormedSpace.exp π x)β»ΒΉ :=
+ letI := NormedSpace.invertibleExpOfMemBall hx
+ invOf_eq_inv (NormedSpace.exp π x)
+#align exp_neg_of_mem_ball NormedSpace.exp_neg_of_mem_ball
-/
end AnyFieldDivisionAlgebra
@@ -459,14 +486,15 @@ section AnyFieldCommAlgebra
variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedCommRing πΈ] [NormedAlgebra π πΈ]
[CompleteSpace πΈ]
-#print exp_add_of_mem_ball /-
+#print NormedSpace.exp_add_of_mem_ball /-
/-- In a commutative Banach-algebra `πΈ` over a normed field `π` of characteristic zero,
`exp π (x+y) = (exp π x) * (exp π y)` for all `x`, `y` in the disk of convergence. -/
-theorem exp_add_of_mem_ball [CharZero π] {x y : πΈ}
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius)
- (hy : y β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
- exp_add_of_commute_of_mem_ball (Commute.all x y) hx hy
-#align exp_add_of_mem_ball exp_add_of_mem_ball
+theorem NormedSpace.exp_add_of_mem_ball [CharZero π] {x y : πΈ}
+ (hx : x β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius)
+ (hy : y β EMetric.ball (0 : πΈ) (NormedSpace.expSeries π πΈ).radius) :
+ NormedSpace.exp π (x + y) = NormedSpace.exp π x * NormedSpace.exp π y :=
+ NormedSpace.exp_add_of_commute_of_mem_ball (Commute.all x y) hx hy
+#align exp_add_of_mem_ball NormedSpace.exp_add_of_mem_ball
-/
end AnyFieldCommAlgebra
@@ -479,217 +507,242 @@ variable (π πΈ πΉ : Type _) [IsROrC π] [NormedRing πΈ] [NormedAlgebr
variable [NormedRing πΉ] [NormedAlgebra π πΉ]
-#print expSeries_radius_eq_top /-
+#print NormedSpace.expSeries_radius_eq_top /-
/-- In a normed algebra `πΈ` over `π = β` or `π = β`, the series defining the exponential map
has an infinite radius of convergence. -/
-theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β :=
+theorem NormedSpace.expSeries_radius_eq_top : (NormedSpace.expSeries π πΈ).radius = β :=
by
- refine' (expSeries π πΈ).radius_eq_top_of_summable_norm fun r => _
+ refine' (NormedSpace.expSeries π πΈ).radius_eq_top_of_summable_norm fun r => _
refine' Summable.of_norm_bounded_eventually _ (Real.summable_pow_div_factorial r) _
filter_upwards [eventually_cofinite_ne 0] with n hn
- rw [norm_mul, norm_norm (expSeries π πΈ n), expSeries, norm_smul, norm_inv, norm_pow,
- NNReal.norm_eq, norm_nat_cast, mul_comm, β mul_assoc, β div_eq_mul_inv]
+ rw [norm_mul, norm_norm (NormedSpace.expSeries π πΈ n), NormedSpace.expSeries, norm_smul, norm_inv,
+ norm_pow, NNReal.norm_eq, norm_nat_cast, mul_comm, β mul_assoc, β div_eq_mul_inv]
have : βContinuousMultilinearMap.mkPiAlgebraFin π n πΈβ β€ 1 :=
norm_mk_pi_algebra_fin_le_of_pos (Nat.pos_of_ne_zero hn)
exact mul_le_of_le_one_right (div_nonneg (pow_nonneg r.coe_nonneg n) n !.cast_nonneg) this
-#align exp_series_radius_eq_top expSeries_radius_eq_top
+#align exp_series_radius_eq_top NormedSpace.expSeries_radius_eq_top
-/
-#print expSeries_radius_pos /-
-theorem expSeries_radius_pos : 0 < (expSeries π πΈ).radius :=
+#print NormedSpace.expSeries_radius_pos /-
+theorem NormedSpace.expSeries_radius_pos : 0 < (NormedSpace.expSeries π πΈ).radius :=
by
- rw [expSeries_radius_eq_top]
+ rw [NormedSpace.expSeries_radius_eq_top]
exact WithTop.zero_lt_top
-#align exp_series_radius_pos expSeries_radius_pos
+#align exp_series_radius_pos NormedSpace.expSeries_radius_pos
-/
variable {π πΈ πΉ}
-#print norm_expSeries_summable /-
-theorem norm_expSeries_summable (x : πΈ) : Summable fun n => βexpSeries π πΈ n fun _ => xβ :=
- norm_expSeries_summable_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_summable norm_expSeries_summable
+#print NormedSpace.norm_expSeries_summable /-
+theorem NormedSpace.norm_expSeries_summable (x : πΈ) :
+ Summable fun n => βNormedSpace.expSeries π πΈ n fun _ => xβ :=
+ NormedSpace.norm_expSeries_summable_of_mem_ball x
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align norm_exp_series_summable NormedSpace.norm_expSeries_summable
-/
-#print norm_expSeries_summable' /-
-theorem norm_expSeries_summable' (x : πΈ) : Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
- norm_expSeries_summable_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_summable' norm_expSeries_summable'
+#print NormedSpace.norm_expSeries_summable' /-
+theorem NormedSpace.norm_expSeries_summable' (x : πΈ) : Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
+ NormedSpace.norm_expSeries_summable_of_mem_ball' x
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align norm_exp_series_summable' NormedSpace.norm_expSeries_summable'
-/
section CompleteAlgebra
variable [CompleteSpace πΈ]
-#print expSeries_summable /-
-theorem expSeries_summable (x : πΈ) : Summable fun n => expSeries π πΈ n fun _ => x :=
- Summable.of_norm (norm_expSeries_summable x)
-#align exp_series_summable expSeries_summable
+#print NormedSpace.expSeries_summable /-
+theorem NormedSpace.expSeries_summable (x : πΈ) :
+ Summable fun n => NormedSpace.expSeries π πΈ n fun _ => x :=
+ Summable.of_norm (NormedSpace.norm_expSeries_summable x)
+#align exp_series_summable NormedSpace.expSeries_summable
-/
-#print expSeries_summable' /-
-theorem expSeries_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- Summable.of_norm (norm_expSeries_summable' x)
-#align exp_series_summable' expSeries_summable'
+#print NormedSpace.expSeries_summable' /-
+theorem NormedSpace.expSeries_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
+ Summable.of_norm (NormedSpace.norm_expSeries_summable' x)
+#align exp_series_summable' NormedSpace.expSeries_summable'
-/
-#print expSeries_hasSum_exp /-
-theorem expSeries_hasSum_exp (x : πΈ) : HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
- expSeries_hasSum_exp_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_series_has_sum_exp expSeries_hasSum_exp
+#print NormedSpace.expSeries_hasSum_exp /-
+theorem NormedSpace.expSeries_hasSum_exp (x : πΈ) :
+ HasSum (fun n => NormedSpace.expSeries π πΈ n fun _ => x) (NormedSpace.exp π x) :=
+ NormedSpace.expSeries_hasSum_exp_of_mem_ball x
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align exp_series_has_sum_exp NormedSpace.expSeries_hasSum_exp
-/
-#print exp_series_hasSum_exp' /-
-theorem exp_series_hasSum_exp' (x : πΈ) : HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) :=
- expSeries_hasSum_exp_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_series_has_sum_exp' exp_series_hasSum_exp'
+#print NormedSpace.exp_series_hasSum_exp' /-
+theorem NormedSpace.exp_series_hasSum_exp' (x : πΈ) :
+ HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (NormedSpace.exp π x) :=
+ NormedSpace.expSeries_hasSum_exp_of_mem_ball' x
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align exp_series_has_sum_exp' NormedSpace.exp_series_hasSum_exp'
-/
-#print exp_hasFPowerSeriesOnBall /-
-theorem exp_hasFPowerSeriesOnBall : HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 β :=
- expSeries_radius_eq_top π πΈ βΈ hasFPowerSeriesOnBall_exp_of_radius_pos (expSeries_radius_pos _ _)
-#align exp_has_fpower_series_on_ball exp_hasFPowerSeriesOnBall
+#print NormedSpace.exp_hasFPowerSeriesOnBall /-
+theorem NormedSpace.exp_hasFPowerSeriesOnBall :
+ HasFPowerSeriesOnBall (NormedSpace.exp π) (NormedSpace.expSeries π πΈ) 0 β :=
+ NormedSpace.expSeries_radius_eq_top π πΈ βΈ
+ NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos (NormedSpace.expSeries_radius_pos _ _)
+#align exp_has_fpower_series_on_ball NormedSpace.exp_hasFPowerSeriesOnBall
-/
-#print exp_hasFPowerSeriesAt_zero /-
-theorem exp_hasFPowerSeriesAt_zero : HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
- exp_hasFPowerSeriesOnBall.HasFPowerSeriesAt
-#align exp_has_fpower_series_at_zero exp_hasFPowerSeriesAt_zero
+#print NormedSpace.exp_hasFPowerSeriesAt_zero /-
+theorem NormedSpace.exp_hasFPowerSeriesAt_zero :
+ HasFPowerSeriesAt (NormedSpace.exp π) (NormedSpace.expSeries π πΈ) 0 :=
+ NormedSpace.exp_hasFPowerSeriesOnBall.HasFPowerSeriesAt
+#align exp_has_fpower_series_at_zero NormedSpace.exp_hasFPowerSeriesAt_zero
-/
-#print exp_continuous /-
+#print NormedSpace.exp_continuous /-
@[continuity]
-theorem exp_continuous : Continuous (exp π : πΈ β πΈ) :=
+theorem NormedSpace.exp_continuous : Continuous (NormedSpace.exp π : πΈ β πΈ) :=
by
rw [continuous_iff_continuousOn_univ, β Metric.eball_top_eq_univ (0 : πΈ), β
- expSeries_radius_eq_top π πΈ]
- exact continuousOn_exp
-#align exp_continuous exp_continuous
+ NormedSpace.expSeries_radius_eq_top π πΈ]
+ exact NormedSpace.continuousOn_exp
+#align exp_continuous NormedSpace.exp_continuous
-/
-#print exp_analytic /-
-theorem exp_analytic (x : πΈ) : AnalyticAt π (exp π) x :=
- analyticAt_exp_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_analytic exp_analytic
+#print NormedSpace.exp_analytic /-
+theorem NormedSpace.exp_analytic (x : πΈ) : AnalyticAt π (NormedSpace.exp π) x :=
+ NormedSpace.analyticAt_exp_of_mem_ball x
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align exp_analytic NormedSpace.exp_analytic
-/
-#print exp_add_of_commute /-
+#print NormedSpace.exp_add_of_commute /-
/-- In a Banach-algebra `πΈ` over `π = β` or `π = β`, if `x` and `y` commute, then
`exp π (x+y) = (exp π x) * (exp π y)`. -/
-theorem exp_add_of_commute {x y : πΈ} (hxy : Commute x y) : exp π (x + y) = exp π x * exp π y :=
- exp_add_of_commute_of_mem_ball hxy ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
- ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_add_of_commute exp_add_of_commute
+theorem NormedSpace.exp_add_of_commute {x y : πΈ} (hxy : Commute x y) :
+ NormedSpace.exp π (x + y) = NormedSpace.exp π x * NormedSpace.exp π y :=
+ NormedSpace.exp_add_of_commute_of_mem_ball hxy
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align exp_add_of_commute NormedSpace.exp_add_of_commute
-/
section
variable (π)
-#print invertibleExp /-
+#print NormedSpace.invertibleExp /-
/-- `exp π x` has explicit two-sided inverse `exp π (-x)`. -/
-noncomputable def invertibleExp (x : πΈ) : Invertible (exp π x) :=
- invertibleExpOfMemBall <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align invertible_exp invertibleExp
+noncomputable def NormedSpace.invertibleExp (x : πΈ) : Invertible (NormedSpace.exp π x) :=
+ NormedSpace.invertibleExpOfMemBall <|
+ (NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
+#align invertible_exp NormedSpace.invertibleExp
-/
-#print isUnit_exp /-
-theorem isUnit_exp (x : πΈ) : IsUnit (exp π x) :=
- isUnit_exp_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align is_unit_exp isUnit_exp
+#print NormedSpace.isUnit_exp /-
+theorem NormedSpace.isUnit_exp (x : πΈ) : IsUnit (NormedSpace.exp π x) :=
+ NormedSpace.isUnit_exp_of_mem_ball <|
+ (NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
+#align is_unit_exp NormedSpace.isUnit_exp
-/
-#print invOf_exp /-
-theorem invOf_exp (x : πΈ) [Invertible (exp π x)] : β
(exp π x) = exp π (-x) :=
- invOf_exp_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align inv_of_exp invOf_exp
+#print NormedSpace.invOf_exp /-
+theorem NormedSpace.invOf_exp (x : πΈ) [Invertible (NormedSpace.exp π x)] :
+ β
(NormedSpace.exp π x) = NormedSpace.exp π (-x) :=
+ NormedSpace.invOf_exp_of_mem_ball <|
+ (NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
+#align inv_of_exp NormedSpace.invOf_exp
-/
#print Ring.inverse_exp /-
-theorem Ring.inverse_exp (x : πΈ) : Ring.inverse (exp π x) = exp π (-x) :=
- letI := invertibleExp π x
+theorem Ring.inverse_exp (x : πΈ) : Ring.inverse (NormedSpace.exp π x) = NormedSpace.exp π (-x) :=
+ letI := NormedSpace.invertibleExp π x
Ring.inverse_invertible _
#align ring.inverse_exp Ring.inverse_exp
-/
-#print exp_mem_unitary_of_mem_skewAdjoint /-
-theorem exp_mem_unitary_of_mem_skewAdjoint [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
- (h : x β skewAdjoint πΈ) : exp π x β unitary πΈ := by
- rw [unitary.mem_iff, star_exp, skew_adjoint.mem_iff.mp h, β
- exp_add_of_commute (Commute.refl x).neg_left, β exp_add_of_commute (Commute.refl x).neg_right,
- add_left_neg, add_right_neg, exp_zero, and_self_iff]
-#align exp_mem_unitary_of_mem_skew_adjoint exp_mem_unitary_of_mem_skewAdjoint
+#print NormedSpace.exp_mem_unitary_of_mem_skewAdjoint /-
+theorem NormedSpace.exp_mem_unitary_of_mem_skewAdjoint [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
+ (h : x β skewAdjoint πΈ) : NormedSpace.exp π x β unitary πΈ := by
+ rw [unitary.mem_iff, NormedSpace.star_exp, skew_adjoint.mem_iff.mp h, β
+ NormedSpace.exp_add_of_commute (Commute.refl x).neg_left, β
+ NormedSpace.exp_add_of_commute (Commute.refl x).neg_right, add_left_neg, add_right_neg,
+ NormedSpace.exp_zero, and_self_iff]
+#align exp_mem_unitary_of_mem_skew_adjoint NormedSpace.exp_mem_unitary_of_mem_skewAdjoint
-/
end
-#print exp_sum_of_commute /-
+#print NormedSpace.exp_sum_of_commute /-
/-- In a Banach-algebra `πΈ` over `π = β` or `π = β`, if a family of elements `f i` mutually
commute then `exp π (β i, f i) = β i, exp π (f i)`. -/
-theorem exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
+theorem NormedSpace.exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
(h : (s : Set ΞΉ).Pairwise fun i j => Commute (f i) (f j)) :
- exp π (β i in s, f i) =
- s.noncommProd (fun i => exp π (f i)) fun i hi j hj _ => (h.of_refl hi hj).exp π :=
+ NormedSpace.exp π (β i in s, f i) =
+ s.noncommProd (fun i => NormedSpace.exp π (f i)) fun i hi j hj _ => (h.of_refl hi hj).exp π :=
by
classical
induction' s using Finset.induction_on with a s ha ih
Β· simp
- rw [Finset.noncommProd_insert_of_not_mem _ _ _ _ ha, Finset.sum_insert ha, exp_add_of_commute,
- ih (h.mono <| Finset.subset_insert _ _)]
+ rw [Finset.noncommProd_insert_of_not_mem _ _ _ _ ha, Finset.sum_insert ha,
+ NormedSpace.exp_add_of_commute, ih (h.mono <| Finset.subset_insert _ _)]
refine' Commute.sum_right _ _ _ fun i hi => _
exact h.of_refl (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hi)
-#align exp_sum_of_commute exp_sum_of_commute
+#align exp_sum_of_commute NormedSpace.exp_sum_of_commute
-/
-#print exp_nsmul /-
-theorem exp_nsmul (n : β) (x : πΈ) : exp π (n β’ x) = exp π x ^ n :=
+#print NormedSpace.exp_nsmul /-
+theorem NormedSpace.exp_nsmul (n : β) (x : πΈ) :
+ NormedSpace.exp π (n β’ x) = NormedSpace.exp π x ^ n :=
by
induction' n with n ih
- Β· rw [zero_smul, pow_zero, exp_zero]
- Β· rw [succ_nsmul, pow_succ, exp_add_of_commute ((Commute.refl x).smul_right n), ih]
-#align exp_nsmul exp_nsmul
+ Β· rw [zero_smul, pow_zero, NormedSpace.exp_zero]
+ Β· rw [succ_nsmul, pow_succ, NormedSpace.exp_add_of_commute ((Commute.refl x).smul_right n), ih]
+#align exp_nsmul NormedSpace.exp_nsmul
-/
variable (π)
-#print map_exp /-
+#print NormedSpace.map_exp /-
/-- Any continuous ring homomorphism commutes with `exp`. -/
-theorem map_exp {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ) :
- f (exp π x) = exp π (f x) :=
- map_exp_of_mem_ball f hf x <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align map_exp map_exp
+theorem NormedSpace.map_exp {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ) :
+ f (NormedSpace.exp π x) = NormedSpace.exp π (f x) :=
+ NormedSpace.map_exp_of_mem_ball f hf x <|
+ (NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
+#align map_exp NormedSpace.map_exp
-/
-#print exp_smul /-
-theorem exp_smul {G} [Monoid G] [MulSemiringAction G πΈ] [ContinuousConstSMul G πΈ] (g : G) (x : πΈ) :
- exp π (g β’ x) = g β’ exp π x :=
- (map_exp π (MulSemiringAction.toRingHom G πΈ g) (continuous_const_smul _) x).symm
-#align exp_smul exp_smul
+#print NormedSpace.exp_smul /-
+theorem NormedSpace.exp_smul {G} [Monoid G] [MulSemiringAction G πΈ] [ContinuousConstSMul G πΈ]
+ (g : G) (x : πΈ) : NormedSpace.exp π (g β’ x) = g β’ NormedSpace.exp π x :=
+ (NormedSpace.map_exp π (MulSemiringAction.toRingHom G πΈ g) (continuous_const_smul _) x).symm
+#align exp_smul NormedSpace.exp_smul
-/
-#print exp_units_conj /-
-theorem exp_units_conj (y : πΈΛ£) (x : πΈ) : exp π (y * x * βyβ»ΒΉ : πΈ) = y * exp π x * βyβ»ΒΉ :=
- exp_smul _ (ConjAct.toConjAct y) x
-#align exp_units_conj exp_units_conj
+#print NormedSpace.exp_units_conj /-
+theorem NormedSpace.exp_units_conj (y : πΈΛ£) (x : πΈ) :
+ NormedSpace.exp π (y * x * βyβ»ΒΉ : πΈ) = y * NormedSpace.exp π x * βyβ»ΒΉ :=
+ NormedSpace.exp_smul _ (ConjAct.toConjAct y) x
+#align exp_units_conj NormedSpace.exp_units_conj
-/
-#print exp_units_conj' /-
-theorem exp_units_conj' (y : πΈΛ£) (x : πΈ) : exp π (βyβ»ΒΉ * x * y) = βyβ»ΒΉ * exp π x * y :=
- exp_units_conj _ _ _
-#align exp_units_conj' exp_units_conj'
+#print NormedSpace.exp_units_conj' /-
+theorem NormedSpace.exp_units_conj' (y : πΈΛ£) (x : πΈ) :
+ NormedSpace.exp π (βyβ»ΒΉ * x * y) = βyβ»ΒΉ * NormedSpace.exp π x * y :=
+ NormedSpace.exp_units_conj _ _ _
+#align exp_units_conj' NormedSpace.exp_units_conj'
-/
#print Prod.fst_exp /-
@[simp]
-theorem Prod.fst_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).fst = exp π x.fst :=
- map_exp _ (RingHom.fst πΈ πΉ) continuous_fst x
+theorem Prod.fst_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) :
+ (NormedSpace.exp π x).fst = NormedSpace.exp π x.fst :=
+ NormedSpace.map_exp _ (RingHom.fst πΈ πΉ) continuous_fst x
#align prod.fst_exp Prod.fst_exp
-/
#print Prod.snd_exp /-
@[simp]
-theorem Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).snd = exp π x.snd :=
- map_exp _ (RingHom.snd πΈ πΉ) continuous_snd x
+theorem Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) :
+ (NormedSpace.exp π x).snd = NormedSpace.exp π x.snd :=
+ NormedSpace.map_exp _ (RingHom.snd πΈ πΉ) continuous_snd x
#align prod.snd_exp Prod.snd_exp
-/
@@ -697,16 +750,16 @@ theorem Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).snd
@[simp]
theorem Pi.exp_apply {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) (i : ΞΉ) :
- exp π x i = exp π (x i) :=
+ NormedSpace.exp π x i = NormedSpace.exp π (x i) :=
letI : NormedAlgebra π (β i, πΈ i) := Pi.normedAlgebra _
- map_exp _ (Pi.evalRingHom πΈ i) (continuous_apply _) x
+ NormedSpace.map_exp _ (Pi.evalRingHom πΈ i) (continuous_apply _) x
#align pi.exp_apply Pi.exp_apply
-/
#print Pi.exp_def /-
theorem Pi.exp_def {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) :
- exp π x = fun i => exp π (x i) :=
+ NormedSpace.exp π x = fun i => NormedSpace.exp π (x i) :=
funext <| Pi.exp_apply π x
#align pi.exp_def Pi.exp_def
-/
@@ -714,20 +767,24 @@ theorem Pi.exp_def {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, Nor
#print Function.update_exp /-
theorem Function.update_exp {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [DecidableEq ΞΉ]
[β i, NormedRing (πΈ i)] [β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i)
- (j : ΞΉ) (xj : πΈ j) : Function.update (exp π x) j (exp π xj) = exp π (Function.update x j xj) :=
+ (j : ΞΉ) (xj : πΈ j) :
+ Function.update (NormedSpace.exp π x) j (NormedSpace.exp π xj) =
+ NormedSpace.exp π (Function.update x j xj) :=
by
ext i
simp_rw [Pi.exp_def]
- exact (Function.apply_update (fun i => exp π) x j xj i).symm
+ exact (Function.apply_update (fun i => NormedSpace.exp π) x j xj i).symm
#align function.update_exp Function.update_exp
-/
end CompleteAlgebra
-#print algebraMap_exp_comm /-
-theorem algebraMap_exp_comm (x : π) : algebraMap π πΈ (exp π x) = exp π (algebraMap π πΈ x) :=
- algebraMap_exp_comm_of_mem_ball x <| (expSeries_radius_eq_top π π).symm βΈ edist_lt_top _ _
-#align algebra_map_exp_comm algebraMap_exp_comm
+#print NormedSpace.algebraMap_exp_comm /-
+theorem NormedSpace.algebraMap_exp_comm (x : π) :
+ algebraMap π πΈ (NormedSpace.exp π x) = NormedSpace.exp π (algebraMap π πΈ x) :=
+ NormedSpace.algebraMap_exp_comm_of_mem_ball x <|
+ (NormedSpace.expSeries_radius_eq_top π π).symm βΈ edist_lt_top _ _
+#align algebra_map_exp_comm NormedSpace.algebraMap_exp_comm
-/
end AnyAlgebra
@@ -738,54 +795,60 @@ variable {π πΈ : Type _} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlg
variable (π)
-#print norm_expSeries_div_summable /-
-theorem norm_expSeries_div_summable (x : πΈ) : Summable fun n => βx ^ n / n !β :=
- norm_expSeries_div_summable_of_mem_ball π x
- ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_div_summable norm_expSeries_div_summable
+#print NormedSpace.norm_expSeries_div_summable /-
+theorem NormedSpace.norm_expSeries_div_summable (x : πΈ) : Summable fun n => βx ^ n / n !β :=
+ NormedSpace.norm_expSeries_div_summable_of_mem_ball π x
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align norm_exp_series_div_summable NormedSpace.norm_expSeries_div_summable
-/
variable [CompleteSpace πΈ]
-#print expSeries_div_summable /-
-theorem expSeries_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
- Summable.of_norm (norm_expSeries_div_summable π x)
-#align exp_series_div_summable expSeries_div_summable
+#print NormedSpace.expSeries_div_summable /-
+theorem NormedSpace.expSeries_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
+ Summable.of_norm (NormedSpace.norm_expSeries_div_summable π x)
+#align exp_series_div_summable NormedSpace.expSeries_div_summable
-/
-#print expSeries_div_hasSum_exp /-
-theorem expSeries_div_hasSum_exp (x : πΈ) : HasSum (fun n => x ^ n / n !) (exp π x) :=
- expSeries_div_hasSum_exp_of_mem_ball π x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_series_div_has_sum_exp expSeries_div_hasSum_exp
+#print NormedSpace.expSeries_div_hasSum_exp /-
+theorem NormedSpace.expSeries_div_hasSum_exp (x : πΈ) :
+ HasSum (fun n => x ^ n / n !) (NormedSpace.exp π x) :=
+ NormedSpace.expSeries_div_hasSum_exp_of_mem_ball π x
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align exp_series_div_has_sum_exp NormedSpace.expSeries_div_hasSum_exp
-/
variable {π}
-#print exp_neg /-
-theorem exp_neg (x : πΈ) : exp π (-x) = (exp π x)β»ΒΉ :=
- exp_neg_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align exp_neg exp_neg
+#print NormedSpace.exp_neg /-
+theorem NormedSpace.exp_neg (x : πΈ) : NormedSpace.exp π (-x) = (NormedSpace.exp π x)β»ΒΉ :=
+ NormedSpace.exp_neg_of_mem_ball <|
+ (NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
+#align exp_neg NormedSpace.exp_neg
-/
-#print exp_zsmul /-
-theorem exp_zsmul (z : β€) (x : πΈ) : exp π (z β’ x) = exp π x ^ z :=
+#print NormedSpace.exp_zsmul /-
+theorem NormedSpace.exp_zsmul (z : β€) (x : πΈ) :
+ NormedSpace.exp π (z β’ x) = NormedSpace.exp π x ^ z :=
by
obtain β¨n, rfl | rflβ© := z.eq_coe_or_neg
- Β· rw [zpow_ofNat, coe_nat_zsmul, exp_nsmul]
- Β· rw [zpow_neg, zpow_ofNat, neg_smul, exp_neg, coe_nat_zsmul, exp_nsmul]
-#align exp_zsmul exp_zsmul
+ Β· rw [zpow_ofNat, coe_nat_zsmul, NormedSpace.exp_nsmul]
+ Β· rw [zpow_neg, zpow_ofNat, neg_smul, NormedSpace.exp_neg, coe_nat_zsmul, NormedSpace.exp_nsmul]
+#align exp_zsmul NormedSpace.exp_zsmul
-/
-#print exp_conj /-
-theorem exp_conj (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (y * x * yβ»ΒΉ) = y * exp π x * yβ»ΒΉ :=
- exp_units_conj _ (Units.mk0 y hy) x
-#align exp_conj exp_conj
+#print NormedSpace.exp_conj /-
+theorem NormedSpace.exp_conj (y : πΈ) (x : πΈ) (hy : y β 0) :
+ NormedSpace.exp π (y * x * yβ»ΒΉ) = y * NormedSpace.exp π x * yβ»ΒΉ :=
+ NormedSpace.exp_units_conj _ (Units.mk0 y hy) x
+#align exp_conj NormedSpace.exp_conj
-/
-#print exp_conj' /-
-theorem exp_conj' (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (yβ»ΒΉ * x * y) = yβ»ΒΉ * exp π x * y :=
- exp_units_conj' _ (Units.mk0 y hy) x
-#align exp_conj' exp_conj'
+#print NormedSpace.exp_conj' /-
+theorem NormedSpace.exp_conj' (y : πΈ) (x : πΈ) (hy : y β 0) :
+ NormedSpace.exp π (yβ»ΒΉ * x * y) = yβ»ΒΉ * NormedSpace.exp π x * y :=
+ NormedSpace.exp_units_conj' _ (Units.mk0 y hy) x
+#align exp_conj' NormedSpace.exp_conj'
-/
end DivisionAlgebra
@@ -794,22 +857,25 @@ section CommAlgebra
variable {π πΈ : Type _} [IsROrC π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
-#print exp_add /-
+#print NormedSpace.exp_add /-
/-- In a commutative Banach-algebra `πΈ` over `π = β` or `π = β`,
`exp π (x+y) = (exp π x) * (exp π y)`. -/
-theorem exp_add {x y : πΈ} : exp π (x + y) = exp π x * exp π y :=
- exp_add_of_mem_ball ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
- ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_add exp_add
+theorem NormedSpace.exp_add {x y : πΈ} :
+ NormedSpace.exp π (x + y) = NormedSpace.exp π x * NormedSpace.exp π y :=
+ NormedSpace.exp_add_of_mem_ball
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+ ((NormedSpace.expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
+#align exp_add NormedSpace.exp_add
-/
-#print exp_sum /-
+#print NormedSpace.exp_sum /-
/-- A version of `exp_sum_of_commute` for a commutative Banach-algebra. -/
-theorem exp_sum {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ) : exp π (β i in s, f i) = β i in s, exp π (f i) :=
+theorem NormedSpace.exp_sum {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ) :
+ NormedSpace.exp π (β i in s, f i) = β i in s, NormedSpace.exp π (f i) :=
by
- rw [exp_sum_of_commute, Finset.noncommProd_eq_prod]
+ rw [NormedSpace.exp_sum_of_commute, Finset.noncommProd_eq_prod]
exact fun i hi j hj _ => Commute.all _ _
-#align exp_sum exp_sum
+#align exp_sum NormedSpace.exp_sum
-/
end CommAlgebra
@@ -823,39 +889,40 @@ section ScalarTower
variable (π π' πΈ : Type _) [Field π] [Field π'] [Ring πΈ] [Algebra π πΈ] [Algebra π' πΈ]
[TopologicalSpace πΈ] [TopologicalRing πΈ]
-#print expSeries_eq_expSeries /-
+#print NormedSpace.expSeries_eq_expSeries /-
/-- If a normed ring `πΈ` is a normed algebra over two fields, then they define the same
`exp_series` on `πΈ`. -/
-theorem expSeries_eq_expSeries (n : β) (x : πΈ) :
- (expSeries π πΈ n fun _ => x) = expSeries π' πΈ n fun _ => x := by
- rw [expSeries_apply_eq, expSeries_apply_eq, inv_nat_cast_smul_eq π π']
-#align exp_series_eq_exp_series expSeries_eq_expSeries
+theorem NormedSpace.expSeries_eq_expSeries (n : β) (x : πΈ) :
+ (NormedSpace.expSeries π πΈ n fun _ => x) = NormedSpace.expSeries π' πΈ n fun _ => x := by
+ rw [NormedSpace.expSeries_apply_eq, NormedSpace.expSeries_apply_eq, inv_nat_cast_smul_eq π π']
+#align exp_series_eq_exp_series NormedSpace.expSeries_eq_expSeries
-/
-#print exp_eq_exp /-
+#print NormedSpace.exp_eq_exp /-
/-- If a normed ring `πΈ` is a normed algebra over two fields, then they define the same
exponential function on `πΈ`. -/
-theorem exp_eq_exp : (exp π : πΈ β πΈ) = exp π' :=
+theorem NormedSpace.exp_eq_exp : (NormedSpace.exp π : πΈ β πΈ) = NormedSpace.exp π' :=
by
ext
- rw [exp, exp]
+ rw [NormedSpace.exp, NormedSpace.exp]
refine' tsum_congr fun n => _
- rw [expSeries_eq_expSeries π π' πΈ n x]
-#align exp_eq_exp exp_eq_exp
+ rw [NormedSpace.expSeries_eq_expSeries π π' πΈ n x]
+#align exp_eq_exp NormedSpace.exp_eq_exp
-/
-#print exp_β_β_eq_exp_β_β /-
-theorem exp_β_β_eq_exp_β_β : (exp β : β β β) = exp β :=
- exp_eq_exp β β β
-#align exp_β_β_eq_exp_β_β exp_β_β_eq_exp_β_β
+#print NormedSpace.exp_β_β_eq_exp_β_β /-
+theorem NormedSpace.exp_β_β_eq_exp_β_β : (NormedSpace.exp β : β β β) = NormedSpace.exp β :=
+ NormedSpace.exp_eq_exp β β β
+#align exp_β_β_eq_exp_β_β NormedSpace.exp_β_β_eq_exp_β_β
-/
-#print of_real_exp_β_β /-
+#print NormedSpace.of_real_exp_β_β /-
/-- A version of `complex.of_real_exp` for `exp` instead of `complex.exp` -/
@[simp, norm_cast]
-theorem of_real_exp_β_β (r : β) : β(exp β r) = exp β (r : β) :=
- (map_exp β (algebraMap β β) (continuous_algebraMap _ _) r).trans (congr_fun exp_β_β_eq_exp_β_β _)
-#align of_real_exp_β_β of_real_exp_β_β
+theorem NormedSpace.of_real_exp_β_β (r : β) : β(NormedSpace.exp β r) = NormedSpace.exp β (r : β) :=
+ (NormedSpace.map_exp β (algebraMap β β) (continuous_algebraMap _ _) r).trans
+ (congr_fun NormedSpace.exp_β_β_eq_exp_β_β _)
+#align of_real_exp_β_β NormedSpace.of_real_exp_β_β
-/
end ScalarTower
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -261,7 +261,7 @@ variable [CompleteSpace πΈ]
theorem expSeries_summable_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => expSeries π πΈ n fun _ => x :=
- summable_of_summable_norm (norm_expSeries_summable_of_mem_ball x hx)
+ Summable.of_norm (norm_expSeries_summable_of_mem_ball x hx)
#align exp_series_summable_of_mem_ball expSeries_summable_of_mem_ball
-/
@@ -269,7 +269,7 @@ theorem expSeries_summable_of_mem_ball (x : πΈ)
theorem expSeries_summable_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- summable_of_summable_norm (norm_expSeries_summable_of_mem_ball' x hx)
+ Summable.of_norm (norm_expSeries_summable_of_mem_ball' x hx)
#align exp_series_summable_of_mem_ball' expSeries_summable_of_mem_ball'
-/
@@ -428,7 +428,7 @@ theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
#print expSeries_div_summable_of_mem_ball /-
theorem expSeries_div_summable_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => x ^ n / n ! :=
- summable_of_summable_norm (norm_expSeries_div_summable_of_mem_ball π x hx)
+ Summable.of_norm (norm_expSeries_div_summable_of_mem_ball π x hx)
#align exp_series_div_summable_of_mem_ball expSeries_div_summable_of_mem_ball
-/
@@ -485,7 +485,7 @@ has an infinite radius of convergence. -/
theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β :=
by
refine' (expSeries π πΈ).radius_eq_top_of_summable_norm fun r => _
- refine' summable_of_norm_bounded_eventually _ (Real.summable_pow_div_factorial r) _
+ refine' Summable.of_norm_bounded_eventually _ (Real.summable_pow_div_factorial r) _
filter_upwards [eventually_cofinite_ne 0] with n hn
rw [norm_mul, norm_norm (expSeries π πΈ n), expSeries, norm_smul, norm_inv, norm_pow,
NNReal.norm_eq, norm_nat_cast, mul_comm, β mul_assoc, β div_eq_mul_inv]
@@ -523,13 +523,13 @@ variable [CompleteSpace πΈ]
#print expSeries_summable /-
theorem expSeries_summable (x : πΈ) : Summable fun n => expSeries π πΈ n fun _ => x :=
- summable_of_summable_norm (norm_expSeries_summable x)
+ Summable.of_norm (norm_expSeries_summable x)
#align exp_series_summable expSeries_summable
-/
#print expSeries_summable' /-
theorem expSeries_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- summable_of_summable_norm (norm_expSeries_summable' x)
+ Summable.of_norm (norm_expSeries_summable' x)
#align exp_series_summable' expSeries_summable'
-/
@@ -749,7 +749,7 @@ variable [CompleteSpace πΈ]
#print expSeries_div_summable /-
theorem expSeries_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
- summable_of_summable_norm (norm_expSeries_div_summable π x)
+ Summable.of_norm (norm_expSeries_div_summable π x)
#align exp_series_div_summable expSeries_div_summable
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,12 +3,12 @@ Copyright (c) 2021 Anatole Dedecker. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
-/
-import Mathbin.Analysis.Analytic.Basic
-import Mathbin.Analysis.Complex.Basic
-import Mathbin.Analysis.Normed.Field.InfiniteSum
-import Mathbin.Data.Nat.Choose.Cast
-import Mathbin.Data.Finset.NoncommProd
-import Mathbin.Topology.Algebra.Algebra
+import Analysis.Analytic.Basic
+import Analysis.Complex.Basic
+import Analysis.Normed.Field.InfiniteSum
+import Data.Nat.Choose.Cast
+import Data.Finset.NoncommProd
+import Topology.Algebra.Algebra
#align_import analysis.normed_space.exponential from "leanprover-community/mathlib"@"af471b9e3ce868f296626d33189b4ce730fa4c00"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -351,7 +351,7 @@ noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Invertible (exp π x)
where
invOf := exp π (-x)
- invOf_mul_self :=
+ invOf_hMul_self :=
by
have hnx : -x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
by
@@ -359,7 +359,7 @@ noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
exact hx
rw [β exp_add_of_commute_of_mem_ball (Commute.neg_left <| Commute.refl x) hnx hx, neg_add_self,
exp_zero]
- mul_invOf_self :=
+ hMul_invOf_self :=
by
have hnx : -x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2021 Anatole Dedecker. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
-
-! This file was ported from Lean 3 source module analysis.normed_space.exponential
-! leanprover-community/mathlib commit af471b9e3ce868f296626d33189b4ce730fa4c00
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Analytic.Basic
import Mathbin.Analysis.Complex.Basic
@@ -15,6 +10,8 @@ import Mathbin.Data.Nat.Choose.Cast
import Mathbin.Data.Finset.NoncommProd
import Mathbin.Topology.Algebra.Algebra
+#align_import analysis.normed_space.exponential from "leanprover-community/mathlib"@"af471b9e3ce868f296626d33189b4ce730fa4c00"
+
/-!
# Exponential in a Banach algebra
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -102,14 +102,18 @@ noncomputable def exp (x : πΈ) : πΈ :=
variable {π}
+#print expSeries_apply_eq /-
theorem expSeries_apply_eq (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = (n !β»ΒΉ : π) β’ x ^ n :=
by simp [expSeries]
#align exp_series_apply_eq expSeries_apply_eq
+-/
+#print expSeries_apply_eq' /-
theorem expSeries_apply_eq' (x : πΈ) :
(fun n => expSeries π πΈ n fun _ => x) = fun n => (n !β»ΒΉ : π) β’ x ^ n :=
funext (expSeries_apply_eq x)
#align exp_series_apply_eq' expSeries_apply_eq'
+-/
#print expSeries_sum_eq /-
theorem expSeries_sum_eq (x : πΈ) : (expSeries π πΈ).Sum x = β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
@@ -117,10 +121,13 @@ theorem expSeries_sum_eq (x : πΈ) : (expSeries π πΈ).Sum x = β' n : β
#align exp_series_sum_eq expSeries_sum_eq
-/
+#print exp_eq_tsum /-
theorem exp_eq_tsum : exp π = fun x : πΈ => β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
funext expSeries_sum_eq
#align exp_eq_tsum exp_eq_tsum
+-/
+#print expSeries_apply_zero /-
theorem expSeries_apply_zero (n : β) : (expSeries π πΈ n fun _ => (0 : πΈ)) = Pi.single 0 1 n :=
by
rw [expSeries_apply_eq]
@@ -128,21 +135,28 @@ theorem expSeries_apply_zero (n : β) : (expSeries π πΈ n fun _ => (0 :
Β· rw [pow_zero, Nat.factorial_zero, Nat.cast_one, inv_one, one_smul, Pi.single_eq_same]
Β· rw [zero_pow (Nat.succ_pos _), smul_zero, Pi.single_eq_of_ne n.succ_ne_zero]
#align exp_series_apply_zero expSeries_apply_zero
+-/
+#print exp_zero /-
@[simp]
theorem exp_zero [T2Space πΈ] : exp π (0 : πΈ) = 1 := by
simp_rw [exp_eq_tsum, β expSeries_apply_eq, expSeries_apply_zero, tsum_pi_single]
#align exp_zero exp_zero
+-/
+#print exp_op /-
@[simp]
theorem exp_op [T2Space πΈ] (x : πΈ) : exp π (MulOpposite.op x) = MulOpposite.op (exp π x) := by
simp_rw [exp, expSeries_sum_eq, β MulOpposite.op_pow, β MulOpposite.op_smul, tsum_op]
#align exp_op exp_op
+-/
+#print exp_unop /-
@[simp]
theorem exp_unop [T2Space πΈ] (x : πΈα΅α΅α΅) : exp π (MulOpposite.unop x) = MulOpposite.unop (exp π x) :=
by simp_rw [exp, expSeries_sum_eq, β MulOpposite.unop_pow, β MulOpposite.unop_smul, tsum_unop]
#align exp_unop exp_unop
+-/
#print star_exp /-
theorem star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ) :
@@ -160,19 +174,25 @@ theorem IsSelfAdjoint.exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] {
#align is_self_adjoint.exp IsSelfAdjoint.exp
-/
+#print Commute.exp_right /-
theorem Commute.exp_right [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute x (exp π y) :=
by
rw [exp_eq_tsum]
exact Commute.tsum_right x fun n => (h.pow_right n).smul_right _
#align commute.exp_right Commute.exp_right
+-/
+#print Commute.exp_left /-
theorem Commute.exp_left [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) y :=
(h.symm.exp_right π).symm
#align commute.exp_left Commute.exp_left
+-/
+#print Commute.exp /-
theorem Commute.exp [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) (exp π y) :=
(h.exp_left _).exp_right _
#align commute.exp Commute.exp
+-/
end TopologicalAlgebra
@@ -181,15 +201,19 @@ section TopologicalDivisionAlgebra
variable {π πΈ : Type _} [Field π] [DivisionRing πΈ] [Algebra π πΈ] [TopologicalSpace πΈ]
[TopologicalRing πΈ]
+#print expSeries_apply_eq_div /-
theorem expSeries_apply_eq_div (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = x ^ n / n ! := by
rw [div_eq_mul_inv, β (Nat.cast_commute n ! (x ^ n)).inv_leftβ.Eq, β smul_eq_mul,
expSeries_apply_eq, inv_nat_cast_smul_eq _ _ _ _]
#align exp_series_apply_eq_div expSeries_apply_eq_div
+-/
+#print expSeries_apply_eq_div' /-
theorem expSeries_apply_eq_div' (x : πΈ) :
(fun n => expSeries π πΈ n fun _ => x) = fun n => x ^ n / n ! :=
funext (expSeries_apply_eq_div x)
#align exp_series_apply_eq_div' expSeries_apply_eq_div'
+-/
#print expSeries_sum_eq_div /-
theorem expSeries_sum_eq_div (x : πΈ) : (expSeries π πΈ).Sum x = β' n : β, x ^ n / n ! :=
@@ -197,9 +221,11 @@ theorem expSeries_sum_eq_div (x : πΈ) : (expSeries π πΈ).Sum x = β' n :
#align exp_series_sum_eq_div expSeries_sum_eq_div
-/
+#print exp_eq_tsum_div /-
theorem exp_eq_tsum_div : exp π = fun x : πΈ => β' n : β, x ^ n / n ! :=
funext expSeries_sum_eq_div
#align exp_eq_tsum_div exp_eq_tsum_div
+-/
end TopologicalDivisionAlgebra
@@ -211,12 +237,15 @@ variable {π πΈ πΉ : Type _} [NontriviallyNormedField π]
variable [NormedRing πΈ] [NormedRing πΉ] [NormedAlgebra π πΈ] [NormedAlgebra π πΉ]
+#print norm_expSeries_summable_of_mem_ball /-
theorem norm_expSeries_summable_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => βexpSeries π πΈ n fun _ => xβ :=
(expSeries π πΈ).summable_norm_apply hx
#align norm_exp_series_summable_of_mem_ball norm_expSeries_summable_of_mem_ball
+-/
+#print norm_expSeries_summable_of_mem_ball' /-
theorem norm_expSeries_summable_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
@@ -225,29 +254,37 @@ theorem norm_expSeries_summable_of_mem_ball' (x : πΈ)
rw [β expSeries_apply_eq']
exact norm_expSeries_summable_of_mem_ball x hx
#align norm_exp_series_summable_of_mem_ball' norm_expSeries_summable_of_mem_ball'
+-/
section CompleteAlgebra
variable [CompleteSpace πΈ]
+#print expSeries_summable_of_mem_ball /-
theorem expSeries_summable_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => expSeries π πΈ n fun _ => x :=
summable_of_summable_norm (norm_expSeries_summable_of_mem_ball x hx)
#align exp_series_summable_of_mem_ball expSeries_summable_of_mem_ball
+-/
+#print expSeries_summable_of_mem_ball' /-
theorem expSeries_summable_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
summable_of_summable_norm (norm_expSeries_summable_of_mem_ball' x hx)
#align exp_series_summable_of_mem_ball' expSeries_summable_of_mem_ball'
+-/
+#print expSeries_hasSum_exp_of_mem_ball /-
theorem expSeries_hasSum_exp_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
FormalMultilinearSeries.hasSum (expSeries π πΈ) hx
#align exp_series_has_sum_exp_of_mem_ball expSeries_hasSum_exp_of_mem_ball
+-/
+#print expSeries_hasSum_exp_of_mem_ball' /-
theorem expSeries_hasSum_exp_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) :=
@@ -255,21 +292,29 @@ theorem expSeries_hasSum_exp_of_mem_ball' (x : πΈ)
rw [β expSeries_apply_eq']
exact expSeries_hasSum_exp_of_mem_ball x hx
#align exp_series_has_sum_exp_of_mem_ball' expSeries_hasSum_exp_of_mem_ball'
+-/
+#print hasFPowerSeriesOnBall_exp_of_radius_pos /-
theorem hasFPowerSeriesOnBall_exp_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 (expSeries π πΈ).radius :=
(expSeries π πΈ).HasFPowerSeriesOnBall h
#align has_fpower_series_on_ball_exp_of_radius_pos hasFPowerSeriesOnBall_exp_of_radius_pos
+-/
+#print hasFPowerSeriesAt_exp_zero_of_radius_pos /-
theorem hasFPowerSeriesAt_exp_zero_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
(hasFPowerSeriesOnBall_exp_of_radius_pos h).HasFPowerSeriesAt
#align has_fpower_series_at_exp_zero_of_radius_pos hasFPowerSeriesAt_exp_zero_of_radius_pos
+-/
+#print continuousOn_exp /-
theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball 0 (expSeries π πΈ).radius) :=
FormalMultilinearSeries.continuousOn
#align continuous_on_exp continuousOn_exp
+-/
+#print analyticAt_exp_of_mem_ball /-
theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
AnalyticAt π (exp π) x := by
by_cases h : (expSeries π πΈ).radius = 0
@@ -277,7 +322,9 @@ theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ
Β· have h := pos_iff_ne_zero.mpr h
exact (hasFPowerSeriesOnBall_exp_of_radius_pos h).analyticAt_of_mem hx
#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
+-/
+#print exp_add_of_commute_of_mem_ball /-
/-- In a Banach-algebra `πΈ` over a normed field `π` of characteristic zero, if `x` and `y` are
in the disk of convergence and commute, then `exp π (x + y) = (exp π x) * (exp π y)`. -/
theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commute x y)
@@ -299,7 +346,9 @@ theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commu
have : (n ! : π) β 0 := nat.cast_ne_zero.mpr n.factorial_ne_zero
field_simp [this]
#align exp_add_of_commute_of_mem_ball exp_add_of_commute_of_mem_ball
+-/
+#print invertibleExpOfMemBall /-
/-- `exp π x` has explicit two-sided inverse `exp π (-x)`. -/
noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Invertible (exp π x)
@@ -322,18 +371,24 @@ noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
rw [β exp_add_of_commute_of_mem_ball (Commute.neg_right <| Commute.refl x) hx hnx, add_neg_self,
exp_zero]
#align invertible_exp_of_mem_ball invertibleExpOfMemBall
+-/
+#print isUnit_exp_of_mem_ball /-
theorem isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : IsUnit (exp π x) :=
@isUnit_of_invertible _ _ _ (invertibleExpOfMemBall hx)
#align is_unit_exp_of_mem_ball isUnit_exp_of_mem_ball
+-/
+#print invOf_exp_of_mem_ball /-
theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
β
(exp π x) = exp π (-x) := by letI := invertibleExpOfMemBall hx;
convert (rfl : β
(exp π x) = _)
#align inv_of_exp_of_mem_ball invOf_exp_of_mem_ball
+-/
+#print map_exp_of_mem_ball /-
/-- Any continuous ring homomorphism commutes with `exp`. -/
theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : f (exp π x) = exp π (f x) :=
@@ -343,14 +398,17 @@ theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continu
dsimp only [Function.comp]
simp_rw [one_div, map_inv_nat_cast_smul f π π, map_pow]
#align map_exp_of_mem_ball map_exp_of_mem_ball
+-/
end CompleteAlgebra
+#print algebraMap_exp_comm_of_mem_ball /-
theorem algebraMap_exp_comm_of_mem_ball [CompleteSpace π] (x : π)
(hx : x β EMetric.ball (0 : π) (expSeries π π).radius) :
algebraMap π πΈ (exp π x) = exp π (algebraMap π πΈ x) :=
map_exp_of_mem_ball _ (continuous_algebraMap π πΈ) _ hx
#align algebra_map_exp_comm_of_mem_ball algebraMap_exp_comm_of_mem_ball
+-/
end AnyFieldAnyAlgebra
@@ -360,6 +418,7 @@ variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedDivisionRing
variable (π)
+#print norm_expSeries_div_summable_of_mem_ball /-
theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => βx ^ n / n !β :=
by
@@ -367,12 +426,16 @@ theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
rw [β expSeries_apply_eq_div' x]
exact norm_expSeries_summable_of_mem_ball x hx
#align norm_exp_series_div_summable_of_mem_ball norm_expSeries_div_summable_of_mem_ball
+-/
+#print expSeries_div_summable_of_mem_ball /-
theorem expSeries_div_summable_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => x ^ n / n ! :=
summable_of_summable_norm (norm_expSeries_div_summable_of_mem_ball π x hx)
#align exp_series_div_summable_of_mem_ball expSeries_div_summable_of_mem_ball
+-/
+#print expSeries_div_hasSum_exp_of_mem_ball /-
theorem expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => x ^ n / n !) (exp π x) :=
@@ -380,14 +443,17 @@ theorem expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
rw [β expSeries_apply_eq_div' x]
exact expSeries_hasSum_exp_of_mem_ball x hx
#align exp_series_div_has_sum_exp_of_mem_ball expSeries_div_hasSum_exp_of_mem_ball
+-/
variable {π}
+#print exp_neg_of_mem_ball /-
theorem exp_neg_of_mem_ball [CharZero π] [CompleteSpace πΈ] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (-x) = (exp π x)β»ΒΉ :=
letI := invertibleExpOfMemBall hx
invOf_eq_inv (exp π x)
#align exp_neg_of_mem_ball exp_neg_of_mem_ball
+-/
end AnyFieldDivisionAlgebra
@@ -396,6 +462,7 @@ section AnyFieldCommAlgebra
variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedCommRing πΈ] [NormedAlgebra π πΈ]
[CompleteSpace πΈ]
+#print exp_add_of_mem_ball /-
/-- In a commutative Banach-algebra `πΈ` over a normed field `π` of characteristic zero,
`exp π (x+y) = (exp π x) * (exp π y)` for all `x`, `y` in the disk of convergence. -/
theorem exp_add_of_mem_ball [CharZero π] {x y : πΈ}
@@ -403,6 +470,7 @@ theorem exp_add_of_mem_ball [CharZero π] {x y : πΈ}
(hy : y β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
exp_add_of_commute_of_mem_ball (Commute.all x y) hx hy
#align exp_add_of_mem_ball exp_add_of_mem_ball
+-/
end AnyFieldCommAlgebra
@@ -414,6 +482,7 @@ variable (π πΈ πΉ : Type _) [IsROrC π] [NormedRing πΈ] [NormedAlgebr
variable [NormedRing πΉ] [NormedAlgebra π πΉ]
+#print expSeries_radius_eq_top /-
/-- In a normed algebra `πΈ` over `π = β` or `π = β`, the series defining the exponential map
has an infinite radius of convergence. -/
theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β :=
@@ -427,12 +496,15 @@ theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β :=
norm_mk_pi_algebra_fin_le_of_pos (Nat.pos_of_ne_zero hn)
exact mul_le_of_le_one_right (div_nonneg (pow_nonneg r.coe_nonneg n) n !.cast_nonneg) this
#align exp_series_radius_eq_top expSeries_radius_eq_top
+-/
+#print expSeries_radius_pos /-
theorem expSeries_radius_pos : 0 < (expSeries π πΈ).radius :=
by
rw [expSeries_radius_eq_top]
exact WithTop.zero_lt_top
#align exp_series_radius_pos expSeries_radius_pos
+-/
variable {π πΈ πΉ}
@@ -442,9 +514,11 @@ theorem norm_expSeries_summable (x : πΈ) : Summable fun n => βexpSeries π
#align norm_exp_series_summable norm_expSeries_summable
-/
+#print norm_expSeries_summable' /-
theorem norm_expSeries_summable' (x : πΈ) : Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
norm_expSeries_summable_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align norm_exp_series_summable' norm_expSeries_summable'
+-/
section CompleteAlgebra
@@ -456,9 +530,11 @@ theorem expSeries_summable (x : πΈ) : Summable fun n => expSeries π πΈ n
#align exp_series_summable expSeries_summable
-/
+#print expSeries_summable' /-
theorem expSeries_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
summable_of_summable_norm (norm_expSeries_summable' x)
#align exp_series_summable' expSeries_summable'
+-/
#print expSeries_hasSum_exp /-
theorem expSeries_hasSum_exp (x : πΈ) : HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
@@ -466,17 +542,23 @@ theorem expSeries_hasSum_exp (x : πΈ) : HasSum (fun n => expSeries π πΈ n
#align exp_series_has_sum_exp expSeries_hasSum_exp
-/
+#print exp_series_hasSum_exp' /-
theorem exp_series_hasSum_exp' (x : πΈ) : HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) :=
expSeries_hasSum_exp_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_series_has_sum_exp' exp_series_hasSum_exp'
+-/
+#print exp_hasFPowerSeriesOnBall /-
theorem exp_hasFPowerSeriesOnBall : HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 β :=
expSeries_radius_eq_top π πΈ βΈ hasFPowerSeriesOnBall_exp_of_radius_pos (expSeries_radius_pos _ _)
#align exp_has_fpower_series_on_ball exp_hasFPowerSeriesOnBall
+-/
+#print exp_hasFPowerSeriesAt_zero /-
theorem exp_hasFPowerSeriesAt_zero : HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
exp_hasFPowerSeriesOnBall.HasFPowerSeriesAt
#align exp_has_fpower_series_at_zero exp_hasFPowerSeriesAt_zero
+-/
#print exp_continuous /-
@[continuity]
@@ -488,48 +570,63 @@ theorem exp_continuous : Continuous (exp π : πΈ β πΈ) :=
#align exp_continuous exp_continuous
-/
+#print exp_analytic /-
theorem exp_analytic (x : πΈ) : AnalyticAt π (exp π) x :=
analyticAt_exp_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_analytic exp_analytic
+-/
+#print exp_add_of_commute /-
/-- In a Banach-algebra `πΈ` over `π = β` or `π = β`, if `x` and `y` commute, then
`exp π (x+y) = (exp π x) * (exp π y)`. -/
theorem exp_add_of_commute {x y : πΈ} (hxy : Commute x y) : exp π (x + y) = exp π x * exp π y :=
exp_add_of_commute_of_mem_ball hxy ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_add_of_commute exp_add_of_commute
+-/
section
variable (π)
+#print invertibleExp /-
/-- `exp π x` has explicit two-sided inverse `exp π (-x)`. -/
noncomputable def invertibleExp (x : πΈ) : Invertible (exp π x) :=
invertibleExpOfMemBall <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
#align invertible_exp invertibleExp
+-/
+#print isUnit_exp /-
theorem isUnit_exp (x : πΈ) : IsUnit (exp π x) :=
isUnit_exp_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
#align is_unit_exp isUnit_exp
+-/
+#print invOf_exp /-
theorem invOf_exp (x : πΈ) [Invertible (exp π x)] : β
(exp π x) = exp π (-x) :=
invOf_exp_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
#align inv_of_exp invOf_exp
+-/
+#print Ring.inverse_exp /-
theorem Ring.inverse_exp (x : πΈ) : Ring.inverse (exp π x) = exp π (-x) :=
letI := invertibleExp π x
Ring.inverse_invertible _
#align ring.inverse_exp Ring.inverse_exp
+-/
+#print exp_mem_unitary_of_mem_skewAdjoint /-
theorem exp_mem_unitary_of_mem_skewAdjoint [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
(h : x β skewAdjoint πΈ) : exp π x β unitary πΈ := by
rw [unitary.mem_iff, star_exp, skew_adjoint.mem_iff.mp h, β
exp_add_of_commute (Commute.refl x).neg_left, β exp_add_of_commute (Commute.refl x).neg_right,
add_left_neg, add_right_neg, exp_zero, and_self_iff]
#align exp_mem_unitary_of_mem_skew_adjoint exp_mem_unitary_of_mem_skewAdjoint
+-/
end
+#print exp_sum_of_commute /-
/-- In a Banach-algebra `πΈ` over `π = β` or `π = β`, if a family of elements `f i` mutually
commute then `exp π (β i, f i) = β i, exp π (f i)`. -/
theorem exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
@@ -545,45 +642,61 @@ theorem exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
refine' Commute.sum_right _ _ _ fun i hi => _
exact h.of_refl (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hi)
#align exp_sum_of_commute exp_sum_of_commute
+-/
+#print exp_nsmul /-
theorem exp_nsmul (n : β) (x : πΈ) : exp π (n β’ x) = exp π x ^ n :=
by
induction' n with n ih
Β· rw [zero_smul, pow_zero, exp_zero]
Β· rw [succ_nsmul, pow_succ, exp_add_of_commute ((Commute.refl x).smul_right n), ih]
#align exp_nsmul exp_nsmul
+-/
variable (π)
+#print map_exp /-
/-- Any continuous ring homomorphism commutes with `exp`. -/
theorem map_exp {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ) :
f (exp π x) = exp π (f x) :=
map_exp_of_mem_ball f hf x <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
#align map_exp map_exp
+-/
+#print exp_smul /-
theorem exp_smul {G} [Monoid G] [MulSemiringAction G πΈ] [ContinuousConstSMul G πΈ] (g : G) (x : πΈ) :
exp π (g β’ x) = g β’ exp π x :=
(map_exp π (MulSemiringAction.toRingHom G πΈ g) (continuous_const_smul _) x).symm
#align exp_smul exp_smul
+-/
+#print exp_units_conj /-
theorem exp_units_conj (y : πΈΛ£) (x : πΈ) : exp π (y * x * βyβ»ΒΉ : πΈ) = y * exp π x * βyβ»ΒΉ :=
exp_smul _ (ConjAct.toConjAct y) x
#align exp_units_conj exp_units_conj
+-/
+#print exp_units_conj' /-
theorem exp_units_conj' (y : πΈΛ£) (x : πΈ) : exp π (βyβ»ΒΉ * x * y) = βyβ»ΒΉ * exp π x * y :=
exp_units_conj _ _ _
#align exp_units_conj' exp_units_conj'
+-/
+#print Prod.fst_exp /-
@[simp]
theorem Prod.fst_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).fst = exp π x.fst :=
map_exp _ (RingHom.fst πΈ πΉ) continuous_fst x
#align prod.fst_exp Prod.fst_exp
+-/
+#print Prod.snd_exp /-
@[simp]
theorem Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).snd = exp π x.snd :=
map_exp _ (RingHom.snd πΈ πΉ) continuous_snd x
#align prod.snd_exp Prod.snd_exp
+-/
+#print Pi.exp_apply /-
@[simp]
theorem Pi.exp_apply {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) (i : ΞΉ) :
@@ -591,13 +704,17 @@ theorem Pi.exp_apply {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, N
letI : NormedAlgebra π (β i, πΈ i) := Pi.normedAlgebra _
map_exp _ (Pi.evalRingHom πΈ i) (continuous_apply _) x
#align pi.exp_apply Pi.exp_apply
+-/
+#print Pi.exp_def /-
theorem Pi.exp_def {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) :
exp π x = fun i => exp π (x i) :=
funext <| Pi.exp_apply π x
#align pi.exp_def Pi.exp_def
+-/
+#print Function.update_exp /-
theorem Function.update_exp {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [DecidableEq ΞΉ]
[β i, NormedRing (πΈ i)] [β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i)
(j : ΞΉ) (xj : πΈ j) : Function.update (exp π x) j (exp π xj) = exp π (Function.update x j xj) :=
@@ -606,12 +723,15 @@ theorem Function.update_exp {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [D
simp_rw [Pi.exp_def]
exact (Function.apply_update (fun i => exp π) x j xj i).symm
#align function.update_exp Function.update_exp
+-/
end CompleteAlgebra
+#print algebraMap_exp_comm /-
theorem algebraMap_exp_comm (x : π) : algebraMap π πΈ (exp π x) = exp π (algebraMap π πΈ x) :=
algebraMap_exp_comm_of_mem_ball x <| (expSeries_radius_eq_top π π).symm βΈ edist_lt_top _ _
#align algebra_map_exp_comm algebraMap_exp_comm
+-/
end AnyAlgebra
@@ -621,26 +741,34 @@ variable {π πΈ : Type _} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlg
variable (π)
+#print norm_expSeries_div_summable /-
theorem norm_expSeries_div_summable (x : πΈ) : Summable fun n => βx ^ n / n !β :=
norm_expSeries_div_summable_of_mem_ball π x
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align norm_exp_series_div_summable norm_expSeries_div_summable
+-/
variable [CompleteSpace πΈ]
+#print expSeries_div_summable /-
theorem expSeries_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
summable_of_summable_norm (norm_expSeries_div_summable π x)
#align exp_series_div_summable expSeries_div_summable
+-/
+#print expSeries_div_hasSum_exp /-
theorem expSeries_div_hasSum_exp (x : πΈ) : HasSum (fun n => x ^ n / n !) (exp π x) :=
expSeries_div_hasSum_exp_of_mem_ball π x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_series_div_has_sum_exp expSeries_div_hasSum_exp
+-/
variable {π}
+#print exp_neg /-
theorem exp_neg (x : πΈ) : exp π (-x) = (exp π x)β»ΒΉ :=
exp_neg_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
#align exp_neg exp_neg
+-/
#print exp_zsmul /-
theorem exp_zsmul (z : β€) (x : πΈ) : exp π (z β’ x) = exp π x ^ z :=
@@ -651,13 +779,17 @@ theorem exp_zsmul (z : β€) (x : πΈ) : exp π (z β’ x) = exp π x ^ z :=
#align exp_zsmul exp_zsmul
-/
+#print exp_conj /-
theorem exp_conj (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (y * x * yβ»ΒΉ) = y * exp π x * yβ»ΒΉ :=
exp_units_conj _ (Units.mk0 y hy) x
#align exp_conj exp_conj
+-/
+#print exp_conj' /-
theorem exp_conj' (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (yβ»ΒΉ * x * y) = yβ»ΒΉ * exp π x * y :=
exp_units_conj' _ (Units.mk0 y hy) x
#align exp_conj' exp_conj'
+-/
end DivisionAlgebra
@@ -665,12 +797,14 @@ section CommAlgebra
variable {π πΈ : Type _} [IsROrC π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
+#print exp_add /-
/-- In a commutative Banach-algebra `πΈ` over `π = β` or `π = β`,
`exp π (x+y) = (exp π x) * (exp π y)`. -/
theorem exp_add {x y : πΈ} : exp π (x + y) = exp π x * exp π y :=
exp_add_of_mem_ball ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_add exp_add
+-/
#print exp_sum /-
/-- A version of `exp_sum_of_commute` for a commutative Banach-algebra. -/
@@ -692,13 +826,16 @@ section ScalarTower
variable (π π' πΈ : Type _) [Field π] [Field π'] [Ring πΈ] [Algebra π πΈ] [Algebra π' πΈ]
[TopologicalSpace πΈ] [TopologicalRing πΈ]
+#print expSeries_eq_expSeries /-
/-- If a normed ring `πΈ` is a normed algebra over two fields, then they define the same
`exp_series` on `πΈ`. -/
theorem expSeries_eq_expSeries (n : β) (x : πΈ) :
(expSeries π πΈ n fun _ => x) = expSeries π' πΈ n fun _ => x := by
rw [expSeries_apply_eq, expSeries_apply_eq, inv_nat_cast_smul_eq π π']
#align exp_series_eq_exp_series expSeries_eq_expSeries
+-/
+#print exp_eq_exp /-
/-- If a normed ring `πΈ` is a normed algebra over two fields, then they define the same
exponential function on `πΈ`. -/
theorem exp_eq_exp : (exp π : πΈ β πΈ) = exp π' :=
@@ -708,16 +845,21 @@ theorem exp_eq_exp : (exp π : πΈ β πΈ) = exp π' :=
refine' tsum_congr fun n => _
rw [expSeries_eq_expSeries π π' πΈ n x]
#align exp_eq_exp exp_eq_exp
+-/
+#print exp_β_β_eq_exp_β_β /-
theorem exp_β_β_eq_exp_β_β : (exp β : β β β) = exp β :=
exp_eq_exp β β β
#align exp_β_β_eq_exp_β_β exp_β_β_eq_exp_β_β
+-/
+#print of_real_exp_β_β /-
/-- A version of `complex.of_real_exp` for `exp` instead of `complex.exp` -/
@[simp, norm_cast]
theorem of_real_exp_β_β (r : β) : β(exp β r) = exp β (r : β) :=
(map_exp β (algebraMap β β) (continuous_algebraMap _ _) r).trans (congr_fun exp_β_β_eq_exp_β_β _)
#align of_real_exp_β_β of_real_exp_β_β
+-/
end ScalarTower
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -588,8 +588,7 @@ theorem Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).snd
theorem Pi.exp_apply {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) (i : ΞΉ) :
exp π x i = exp π (x i) :=
- letI-- Lean struggles to infer this instance due to it wanting `[Ξ i, semi_normed_ring (πΈ i)]`
- : NormedAlgebra π (β i, πΈ i) := Pi.normedAlgebra _
+ letI : NormedAlgebra π (β i, πΈ i) := Pi.normedAlgebra _
map_exp _ (Pi.evalRingHom πΈ i) (continuous_apply _) x
#align pi.exp_apply Pi.exp_apply
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
! This file was ported from Lean 3 source module analysis.normed_space.exponential
-! leanprover-community/mathlib commit 62748956a1ece9b26b33243e2e3a2852176666f5
+! leanprover-community/mathlib commit af471b9e3ce868f296626d33189b4ce730fa4c00
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -18,6 +18,9 @@ import Mathbin.Topology.Algebra.Algebra
/-!
# Exponential in a Banach algebra
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file, we define `exp π : πΈ β πΈ`, the exponential map in a topological algebra `πΈ` over a
field `π`.
@@ -75,14 +78,17 @@ section TopologicalAlgebra
variable (π πΈ : Type _) [Field π] [Ring πΈ] [Algebra π πΈ] [TopologicalSpace πΈ] [TopologicalRing πΈ]
+#print expSeries /-
/-- `exp_series π πΈ` is the `formal_multilinear_series` whose `n`-th term is the map
`(xα΅’) : πΈβΏ β¦ (1/n! : π) β’ β xα΅’`. Its sum is the exponential map `exp π : πΈ β πΈ`. -/
def expSeries : FormalMultilinearSeries π πΈ πΈ := fun n =>
(n !β»ΒΉ : π) β’ ContinuousMultilinearMap.mkPiAlgebraFin π n πΈ
#align exp_series expSeries
+-/
variable {πΈ}
+#print exp /-
/-- `exp π : πΈ β πΈ` is the exponential map determined by the action of `π` on `πΈ`.
It is defined as the sum of the `formal_multilinear_series` `exp_series π πΈ`.
@@ -92,6 +98,7 @@ case. -/
noncomputable def exp (x : πΈ) : πΈ :=
(expSeries π πΈ).Sum x
#align exp exp
+-/
variable {π}
@@ -104,9 +111,11 @@ theorem expSeries_apply_eq' (x : πΈ) :
funext (expSeries_apply_eq x)
#align exp_series_apply_eq' expSeries_apply_eq'
+#print expSeries_sum_eq /-
theorem expSeries_sum_eq (x : πΈ) : (expSeries π πΈ).Sum x = β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
tsum_congr fun n => expSeries_apply_eq x n
#align exp_series_sum_eq expSeries_sum_eq
+-/
theorem exp_eq_tsum : exp π = fun x : πΈ => β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
funext expSeries_sum_eq
@@ -135,17 +144,21 @@ theorem exp_unop [T2Space πΈ] (x : πΈα΅α΅α΅) : exp π (MulOpposite.unop
by simp_rw [exp, expSeries_sum_eq, β MulOpposite.unop_pow, β MulOpposite.unop_smul, tsum_unop]
#align exp_unop exp_unop
+#print star_exp /-
theorem star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ) :
star (exp π x) = exp π (star x) := by
simp_rw [exp_eq_tsum, β star_pow, β star_inv_nat_cast_smul, β tsum_star]
#align star_exp star_exp
+-/
variable (π)
+#print IsSelfAdjoint.exp /-
theorem IsSelfAdjoint.exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
(h : IsSelfAdjoint x) : IsSelfAdjoint (exp π x) :=
(star_exp x).trans <| h.symm βΈ rfl
#align is_self_adjoint.exp IsSelfAdjoint.exp
+-/
theorem Commute.exp_right [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute x (exp π y) :=
by
@@ -178,9 +191,11 @@ theorem expSeries_apply_eq_div' (x : πΈ) :
funext (expSeries_apply_eq_div x)
#align exp_series_apply_eq_div' expSeries_apply_eq_div'
+#print expSeries_sum_eq_div /-
theorem expSeries_sum_eq_div (x : πΈ) : (expSeries π πΈ).Sum x = β' n : β, x ^ n / n ! :=
tsum_congr (expSeries_apply_eq_div x)
#align exp_series_sum_eq_div expSeries_sum_eq_div
+-/
theorem exp_eq_tsum_div : exp π = fun x : πΈ => β' n : β, x ^ n / n ! :=
funext expSeries_sum_eq_div
@@ -315,7 +330,8 @@ theorem isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
- β
(exp π x) = exp π (-x) := by letI := invertibleExpOfMemBall hx; convert(rfl : β
(exp π x) = _)
+ β
(exp π x) = exp π (-x) := by letI := invertibleExpOfMemBall hx;
+ convert (rfl : β
(exp π x) = _)
#align inv_of_exp_of_mem_ball invOf_exp_of_mem_ball
/-- Any continuous ring homomorphism commutes with `exp`. -/
@@ -404,7 +420,7 @@ theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β :=
by
refine' (expSeries π πΈ).radius_eq_top_of_summable_norm fun r => _
refine' summable_of_norm_bounded_eventually _ (Real.summable_pow_div_factorial r) _
- filter_upwards [eventually_cofinite_ne 0]with n hn
+ filter_upwards [eventually_cofinite_ne 0] with n hn
rw [norm_mul, norm_norm (expSeries π πΈ n), expSeries, norm_smul, norm_inv, norm_pow,
NNReal.norm_eq, norm_nat_cast, mul_comm, β mul_assoc, β div_eq_mul_inv]
have : βContinuousMultilinearMap.mkPiAlgebraFin π n πΈβ β€ 1 :=
@@ -420,29 +436,35 @@ theorem expSeries_radius_pos : 0 < (expSeries π πΈ).radius :=
variable {π πΈ πΉ}
+#print norm_expSeries_summable /-
theorem norm_expSeries_summable (x : πΈ) : Summable fun n => βexpSeries π πΈ n fun _ => xβ :=
norm_expSeries_summable_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align norm_exp_series_summable norm_expSeries_summable
+-/
-theorem norm_exp_series_summable' (x : πΈ) : Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
+theorem norm_expSeries_summable' (x : πΈ) : Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
norm_expSeries_summable_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_summable' norm_exp_series_summable'
+#align norm_exp_series_summable' norm_expSeries_summable'
section CompleteAlgebra
variable [CompleteSpace πΈ]
+#print expSeries_summable /-
theorem expSeries_summable (x : πΈ) : Summable fun n => expSeries π πΈ n fun _ => x :=
summable_of_summable_norm (norm_expSeries_summable x)
#align exp_series_summable expSeries_summable
+-/
-theorem exp_series_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- summable_of_summable_norm (norm_exp_series_summable' x)
-#align exp_series_summable' exp_series_summable'
+theorem expSeries_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
+ summable_of_summable_norm (norm_expSeries_summable' x)
+#align exp_series_summable' expSeries_summable'
+#print expSeries_hasSum_exp /-
theorem expSeries_hasSum_exp (x : πΈ) : HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
expSeries_hasSum_exp_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_series_has_sum_exp expSeries_hasSum_exp
+-/
theorem exp_series_hasSum_exp' (x : πΈ) : HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) :=
expSeries_hasSum_exp_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
@@ -456,6 +478,7 @@ theorem exp_hasFPowerSeriesAt_zero : HasFPowerSeriesAt (exp π) (expSeries
exp_hasFPowerSeriesOnBall.HasFPowerSeriesAt
#align exp_has_fpower_series_at_zero exp_hasFPowerSeriesAt_zero
+#print exp_continuous /-
@[continuity]
theorem exp_continuous : Continuous (exp π : πΈ β πΈ) :=
by
@@ -463,6 +486,7 @@ theorem exp_continuous : Continuous (exp π : πΈ β πΈ) :=
expSeries_radius_eq_top π πΈ]
exact continuousOn_exp
#align exp_continuous exp_continuous
+-/
theorem exp_analytic (x : πΈ) : AnalyticAt π (exp π) x :=
analyticAt_exp_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
@@ -514,12 +538,12 @@ theorem exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
s.noncommProd (fun i => exp π (f i)) fun i hi j hj _ => (h.of_refl hi hj).exp π :=
by
classical
- induction' s using Finset.induction_on with a s ha ih
- Β· simp
- rw [Finset.noncommProd_insert_of_not_mem _ _ _ _ ha, Finset.sum_insert ha, exp_add_of_commute,
- ih (h.mono <| Finset.subset_insert _ _)]
- refine' Commute.sum_right _ _ _ fun i hi => _
- exact h.of_refl (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hi)
+ induction' s using Finset.induction_on with a s ha ih
+ Β· simp
+ rw [Finset.noncommProd_insert_of_not_mem _ _ _ _ ha, Finset.sum_insert ha, exp_add_of_commute,
+ ih (h.mono <| Finset.subset_insert _ _)]
+ refine' Commute.sum_right _ _ _ fun i hi => _
+ exact h.of_refl (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hi)
#align exp_sum_of_commute exp_sum_of_commute
theorem exp_nsmul (n : β) (x : πΈ) : exp π (n β’ x) = exp π x ^ n :=
@@ -598,20 +622,20 @@ variable {π πΈ : Type _} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlg
variable (π)
-theorem norm_exp_series_div_summable (x : πΈ) : Summable fun n => βx ^ n / n !β :=
+theorem norm_expSeries_div_summable (x : πΈ) : Summable fun n => βx ^ n / n !β :=
norm_expSeries_div_summable_of_mem_ball π x
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_div_summable norm_exp_series_div_summable
+#align norm_exp_series_div_summable norm_expSeries_div_summable
variable [CompleteSpace πΈ]
-theorem exp_series_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
- summable_of_summable_norm (norm_exp_series_div_summable π x)
-#align exp_series_div_summable exp_series_div_summable
+theorem expSeries_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
+ summable_of_summable_norm (norm_expSeries_div_summable π x)
+#align exp_series_div_summable expSeries_div_summable
-theorem exp_series_div_hasSum_exp (x : πΈ) : HasSum (fun n => x ^ n / n !) (exp π x) :=
+theorem expSeries_div_hasSum_exp (x : πΈ) : HasSum (fun n => x ^ n / n !) (exp π x) :=
expSeries_div_hasSum_exp_of_mem_ball π x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_series_div_has_sum_exp exp_series_div_hasSum_exp
+#align exp_series_div_has_sum_exp expSeries_div_hasSum_exp
variable {π}
@@ -619,12 +643,14 @@ theorem exp_neg (x : πΈ) : exp π (-x) = (exp π x)β»ΒΉ :=
exp_neg_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
#align exp_neg exp_neg
+#print exp_zsmul /-
theorem exp_zsmul (z : β€) (x : πΈ) : exp π (z β’ x) = exp π x ^ z :=
by
obtain β¨n, rfl | rflβ© := z.eq_coe_or_neg
Β· rw [zpow_ofNat, coe_nat_zsmul, exp_nsmul]
Β· rw [zpow_neg, zpow_ofNat, neg_smul, exp_neg, coe_nat_zsmul, exp_nsmul]
#align exp_zsmul exp_zsmul
+-/
theorem exp_conj (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (y * x * yβ»ΒΉ) = y * exp π x * yβ»ΒΉ :=
exp_units_conj _ (Units.mk0 y hy) x
@@ -647,12 +673,14 @@ theorem exp_add {x y : πΈ} : exp π (x + y) = exp π x * exp π y :=
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_add exp_add
+#print exp_sum /-
/-- A version of `exp_sum_of_commute` for a commutative Banach-algebra. -/
theorem exp_sum {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ) : exp π (β i in s, f i) = β i in s, exp π (f i) :=
by
rw [exp_sum_of_commute, Finset.noncommProd_eq_prod]
exact fun i hi j hj _ => Commute.all _ _
#align exp_sum exp_sum
+-/
end CommAlgebra
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -241,15 +241,15 @@ theorem expSeries_hasSum_exp_of_mem_ball' (x : πΈ)
exact expSeries_hasSum_exp_of_mem_ball x hx
#align exp_series_has_sum_exp_of_mem_ball' expSeries_hasSum_exp_of_mem_ball'
-theorem hasFpowerSeriesOnBallExpOfRadiusPos (h : 0 < (expSeries π πΈ).radius) :
- HasFpowerSeriesOnBall (exp π) (expSeries π πΈ) 0 (expSeries π πΈ).radius :=
- (expSeries π πΈ).HasFpowerSeriesOnBall h
-#align has_fpower_series_on_ball_exp_of_radius_pos hasFpowerSeriesOnBallExpOfRadiusPos
+theorem hasFPowerSeriesOnBall_exp_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
+ HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 (expSeries π πΈ).radius :=
+ (expSeries π πΈ).HasFPowerSeriesOnBall h
+#align has_fpower_series_on_ball_exp_of_radius_pos hasFPowerSeriesOnBall_exp_of_radius_pos
-theorem hasFpowerSeriesAtExpZeroOfRadiusPos (h : 0 < (expSeries π πΈ).radius) :
- HasFpowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
- (hasFpowerSeriesOnBallExpOfRadiusPos h).HasFpowerSeriesAt
-#align has_fpower_series_at_exp_zero_of_radius_pos hasFpowerSeriesAtExpZeroOfRadiusPos
+theorem hasFPowerSeriesAt_exp_zero_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
+ HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
+ (hasFPowerSeriesOnBall_exp_of_radius_pos h).HasFPowerSeriesAt
+#align has_fpower_series_at_exp_zero_of_radius_pos hasFPowerSeriesAt_exp_zero_of_radius_pos
theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball 0 (expSeries π πΈ).radius) :=
FormalMultilinearSeries.continuousOn
@@ -260,7 +260,7 @@ theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ
by_cases h : (expSeries π πΈ).radius = 0
Β· rw [h] at hx ; exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
- exact (hasFpowerSeriesOnBallExpOfRadiusPos h).analyticAt_of_mem hx
+ exact (hasFPowerSeriesOnBall_exp_of_radius_pos h).analyticAt_of_mem hx
#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
/-- In a Banach-algebra `πΈ` over a normed field `π` of characteristic zero, if `x` and `y` are
@@ -448,13 +448,13 @@ theorem exp_series_hasSum_exp' (x : πΈ) : HasSum (fun n => (n !β»ΒΉ : π)
expSeries_hasSum_exp_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_series_has_sum_exp' exp_series_hasSum_exp'
-theorem expHasFpowerSeriesOnBall : HasFpowerSeriesOnBall (exp π) (expSeries π πΈ) 0 β :=
- expSeries_radius_eq_top π πΈ βΈ hasFpowerSeriesOnBallExpOfRadiusPos (expSeries_radius_pos _ _)
-#align exp_has_fpower_series_on_ball expHasFpowerSeriesOnBall
+theorem exp_hasFPowerSeriesOnBall : HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 β :=
+ expSeries_radius_eq_top π πΈ βΈ hasFPowerSeriesOnBall_exp_of_radius_pos (expSeries_radius_pos _ _)
+#align exp_has_fpower_series_on_ball exp_hasFPowerSeriesOnBall
-theorem expHasFpowerSeriesAtZero : HasFpowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
- expHasFpowerSeriesOnBall.HasFpowerSeriesAt
-#align exp_has_fpower_series_at_zero expHasFpowerSeriesAtZero
+theorem exp_hasFPowerSeriesAt_zero : HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
+ exp_hasFPowerSeriesOnBall.HasFPowerSeriesAt
+#align exp_has_fpower_series_at_zero exp_hasFPowerSeriesAt_zero
@[continuity]
theorem exp_continuous : Continuous (exp π : πΈ β πΈ) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -258,7 +258,7 @@ theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball
theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
AnalyticAt π (exp π) x := by
by_cases h : (expSeries π πΈ).radius = 0
- Β· rw [h] at hx; exact (ENNReal.not_lt_zero hx).elim
+ Β· rw [h] at hx ; exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
exact (hasFpowerSeriesOnBallExpOfRadiusPos h).analyticAt_of_mem hx
#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -69,7 +69,7 @@ We prove most result for an arbitrary field `π`, and then specialize to `π
open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
-open Nat Topology BigOperators ENNReal
+open scoped Nat Topology BigOperators ENNReal
section TopologicalAlgebra
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -258,8 +258,7 @@ theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball
theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
AnalyticAt π (exp π) x := by
by_cases h : (expSeries π πΈ).radius = 0
- Β· rw [h] at hx
- exact (ENNReal.not_lt_zero hx).elim
+ Β· rw [h] at hx; exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
exact (hasFpowerSeriesOnBallExpOfRadiusPos h).analyticAt_of_mem hx
#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
@@ -316,9 +315,7 @@ theorem isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
- β
(exp π x) = exp π (-x) := by
- letI := invertibleExpOfMemBall hx
- convert(rfl : β
(exp π x) = _)
+ β
(exp π x) = exp π (-x) := by letI := invertibleExpOfMemBall hx; convert(rfl : β
(exp π x) = _)
#align inv_of_exp_of_mem_ball invOf_exp_of_mem_ball
/-- Any continuous ring homomorphism commutes with `exp`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
! This file was ported from Lean 3 source module analysis.normed_space.exponential
-! leanprover-community/mathlib commit 3f655f5297b030a87d641ad4e825af8d9679eb0b
+! leanprover-community/mathlib commit 62748956a1ece9b26b33243e2e3a2852176666f5
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -459,6 +459,7 @@ theorem expHasFpowerSeriesAtZero : HasFpowerSeriesAt (exp π) (expSeries π
expHasFpowerSeriesOnBall.HasFpowerSeriesAt
#align exp_has_fpower_series_at_zero expHasFpowerSeriesAtZero
+@[continuity]
theorem exp_continuous : Continuous (exp π : πΈ β πΈ) :=
by
rw [continuous_iff_continuousOn_univ, β Metric.eball_top_eq_univ (0 : πΈ), β
mathlib commit https://github.com/leanprover-community/mathlib/commit/d4437c68c8d350fc9d4e95e1e174409db35e30d7
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
! This file was ported from Lean 3 source module analysis.normed_space.exponential
-! leanprover-community/mathlib commit da3fc4a33ff6bc75f077f691dc94c217b8d41559
+! leanprover-community/mathlib commit 3f655f5297b030a87d641ad4e825af8d9679eb0b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -409,7 +409,7 @@ theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β :=
refine' summable_of_norm_bounded_eventually _ (Real.summable_pow_div_factorial r) _
filter_upwards [eventually_cofinite_ne 0]with n hn
rw [norm_mul, norm_norm (expSeries π πΈ n), expSeries, norm_smul, norm_inv, norm_pow,
- NNReal.norm_eq, norm_eq_abs, abs_cast_nat, mul_comm, β mul_assoc, β div_eq_mul_inv]
+ NNReal.norm_eq, norm_nat_cast, mul_comm, β mul_assoc, β div_eq_mul_inv]
have : βContinuousMultilinearMap.mkPiAlgebraFin π n πΈβ β€ 1 :=
norm_mk_pi_algebra_fin_le_of_pos (Nat.pos_of_ne_zero hn)
exact mul_le_of_le_one_right (div_nonneg (pow_nonneg r.coe_nonneg n) n !.cast_nonneg) this
mathlib commit https://github.com/leanprover-community/mathlib/commit/da3fc4a33ff6bc75f077f691dc94c217b8d41559
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
! This file was ported from Lean 3 source module analysis.normed_space.exponential
-! leanprover-community/mathlib commit 1e3201306d4d9eb1fd54c60d7c4510ad5126f6f9
+! leanprover-community/mathlib commit da3fc4a33ff6bc75f077f691dc94c217b8d41559
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -112,18 +112,17 @@ theorem exp_eq_tsum : exp π = fun x : πΈ => β' n : β, (n !β»ΒΉ : π)
funext expSeries_sum_eq
#align exp_eq_tsum exp_eq_tsum
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (n Β«expr β Β» ({0} : finset exprβ())) -/
-@[simp]
-theorem exp_zero [T2Space πΈ] : exp π (0 : πΈ) = 1 :=
+theorem expSeries_apply_zero (n : β) : (expSeries π πΈ n fun _ => (0 : πΈ)) = Pi.single 0 1 n :=
by
- suffices (fun x : πΈ => β' n : β, (n !β»ΒΉ : π) β’ x ^ n) 0 = β' n : β, if n = 0 then 1 else 0
- by
- have key : β (n) (_ : n β ({0} : Finset β)), (if n = 0 then (1 : πΈ) else 0) = 0 := fun n hn =>
- if_neg (finset.not_mem_singleton.mp hn)
- rw [exp_eq_tsum, this, tsum_eq_sum key, Finset.sum_singleton]
- simp
- refine' tsum_congr fun n => _
- split_ifs with h h <;> simp [h]
+ rw [expSeries_apply_eq]
+ cases n
+ Β· rw [pow_zero, Nat.factorial_zero, Nat.cast_one, inv_one, one_smul, Pi.single_eq_same]
+ Β· rw [zero_pow (Nat.succ_pos _), smul_zero, Pi.single_eq_of_ne n.succ_ne_zero]
+#align exp_series_apply_zero expSeries_apply_zero
+
+@[simp]
+theorem exp_zero [T2Space πΈ] : exp π (0 : πΈ) = 1 := by
+ simp_rw [exp_eq_tsum, β expSeries_apply_eq, expSeries_apply_zero, tsum_pi_single]
#align exp_zero exp_zero
@[simp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -319,7 +319,7 @@ theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
β
(exp π x) = exp π (-x) := by
letI := invertibleExpOfMemBall hx
- convert (rfl : β
(exp π x) = _)
+ convert(rfl : β
(exp π x) = _)
#align inv_of_exp_of_mem_ball invOf_exp_of_mem_ball
/-- Any continuous ring homomorphism commutes with `exp`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/2196ab363eb097c008d4497125e0dde23fb36db2
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
! This file was ported from Lean 3 source module analysis.normed_space.exponential
-! leanprover-community/mathlib commit ccf84e0d918668460a34aa19d02fe2e0e2286da0
+! leanprover-community/mathlib commit 1e3201306d4d9eb1fd54c60d7c4510ad5126f6f9
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -143,6 +143,11 @@ theorem star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ)
variable (π)
+theorem IsSelfAdjoint.exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
+ (h : IsSelfAdjoint x) : IsSelfAdjoint (exp π x) :=
+ (star_exp x).trans <| h.symm βΈ rfl
+#align is_self_adjoint.exp IsSelfAdjoint.exp
+
theorem Commute.exp_right [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute x (exp π y) :=
by
rw [exp_eq_tsum]
@@ -495,6 +500,13 @@ theorem Ring.inverse_exp (x : πΈ) : Ring.inverse (exp π x) = exp π (-x)
Ring.inverse_invertible _
#align ring.inverse_exp Ring.inverse_exp
+theorem exp_mem_unitary_of_mem_skewAdjoint [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
+ (h : x β skewAdjoint πΈ) : exp π x β unitary πΈ := by
+ rw [unitary.mem_iff, star_exp, skew_adjoint.mem_iff.mp h, β
+ exp_add_of_commute (Commute.refl x).neg_left, β exp_add_of_commute (Commute.refl x).neg_right,
+ add_left_neg, add_right_neg, exp_zero, and_self_iff]
+#align exp_mem_unitary_of_mem_skew_adjoint exp_mem_unitary_of_mem_skewAdjoint
+
end
/-- In a Banach-algebra `πΈ` over `π = β` or `π = β`, if a family of elements `f i` mutually
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -193,13 +193,13 @@ variable {π πΈ πΉ : Type _} [NontriviallyNormedField π]
variable [NormedRing πΈ] [NormedRing πΉ] [NormedAlgebra π πΈ] [NormedAlgebra π πΉ]
theorem norm_expSeries_summable_of_mem_ball (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => βexpSeries π πΈ n fun _ => xβ :=
(expSeries π πΈ).summable_norm_apply hx
#align norm_exp_series_summable_of_mem_ball norm_expSeries_summable_of_mem_ball
theorem norm_expSeries_summable_of_mem_ball' (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
by
change Summable (norm β _)
@@ -212,25 +212,25 @@ section CompleteAlgebra
variable [CompleteSpace πΈ]
theorem expSeries_summable_of_mem_ball (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => expSeries π πΈ n fun _ => x :=
summable_of_summable_norm (norm_expSeries_summable_of_mem_ball x hx)
#align exp_series_summable_of_mem_ball expSeries_summable_of_mem_ball
theorem expSeries_summable_of_mem_ball' (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
summable_of_summable_norm (norm_expSeries_summable_of_mem_ball' x hx)
#align exp_series_summable_of_mem_ball' expSeries_summable_of_mem_ball'
theorem expSeries_hasSum_exp_of_mem_ball (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
FormalMultilinearSeries.hasSum (expSeries π πΈ) hx
#align exp_series_has_sum_exp_of_mem_ball expSeries_hasSum_exp_of_mem_ball
theorem expSeries_hasSum_exp_of_mem_ball' (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) :=
by
rw [β expSeries_apply_eq']
@@ -247,11 +247,11 @@ theorem hasFpowerSeriesAtExpZeroOfRadiusPos (h : 0 < (expSeries π πΈ).radiu
(hasFpowerSeriesOnBallExpOfRadiusPos h).HasFpowerSeriesAt
#align has_fpower_series_at_exp_zero_of_radius_pos hasFpowerSeriesAtExpZeroOfRadiusPos
-theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (Emetric.ball 0 (expSeries π πΈ).radius) :=
+theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball 0 (expSeries π πΈ).radius) :=
FormalMultilinearSeries.continuousOn
#align continuous_on_exp continuousOn_exp
-theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
AnalyticAt π (exp π) x := by
by_cases h : (expSeries π πΈ).radius = 0
Β· rw [h] at hx
@@ -263,8 +263,8 @@ theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β Emetric.ball (0 : πΈ
/-- In a Banach-algebra `πΈ` over a normed field `π` of characteristic zero, if `x` and `y` are
in the disk of convergence and commute, then `exp π (x + y) = (exp π x) * (exp π y)`. -/
theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commute x y)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius)
- (hy : y β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius)
+ (hy : y β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
by
rw [exp_eq_tsum,
tsum_mul_tsum_eq_tsum_sum_antidiagonal_of_summable_norm
@@ -284,34 +284,34 @@ theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commu
/-- `exp π x` has explicit two-sided inverse `exp π (-x)`. -/
noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Invertible (exp π x)
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Invertible (exp π x)
where
invOf := exp π (-x)
invOf_mul_self :=
by
- have hnx : -x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
+ have hnx : -x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
by
- rw [Emetric.mem_ball, β neg_zero, edist_neg_neg]
+ rw [EMetric.mem_ball, β neg_zero, edist_neg_neg]
exact hx
rw [β exp_add_of_commute_of_mem_ball (Commute.neg_left <| Commute.refl x) hnx hx, neg_add_self,
exp_zero]
mul_invOf_self :=
by
- have hnx : -x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
+ have hnx : -x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius :=
by
- rw [Emetric.mem_ball, β neg_zero, edist_neg_neg]
+ rw [EMetric.mem_ball, β neg_zero, edist_neg_neg]
exact hx
rw [β exp_add_of_commute_of_mem_ball (Commute.neg_right <| Commute.refl x) hx hnx, add_neg_self,
exp_zero]
#align invertible_exp_of_mem_ball invertibleExpOfMemBall
theorem isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : IsUnit (exp π x) :=
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : IsUnit (exp π x) :=
@isUnit_of_invertible _ _ _ (invertibleExpOfMemBall hx)
#align is_unit_exp_of_mem_ball isUnit_exp_of_mem_ball
theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
β
(exp π x) = exp π (-x) := by
letI := invertibleExpOfMemBall hx
convert (rfl : β
(exp π x) = _)
@@ -319,7 +319,7 @@ theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
/-- Any continuous ring homomorphism commutes with `exp`. -/
theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : f (exp π x) = exp π (f x) :=
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : f (exp π x) = exp π (f x) :=
by
rw [exp_eq_tsum, exp_eq_tsum]
refine' ((expSeries_summable_of_mem_ball' _ hx).HasSum.map f hf).tsum_eq.symm.trans _
@@ -330,7 +330,7 @@ theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continu
end CompleteAlgebra
theorem algebraMap_exp_comm_of_mem_ball [CompleteSpace π] (x : π)
- (hx : x β Emetric.ball (0 : π) (expSeries π π).radius) :
+ (hx : x β EMetric.ball (0 : π) (expSeries π π).radius) :
algebraMap π πΈ (exp π x) = exp π (algebraMap π πΈ x) :=
map_exp_of_mem_ball _ (continuous_algebraMap π πΈ) _ hx
#align algebra_map_exp_comm_of_mem_ball algebraMap_exp_comm_of_mem_ball
@@ -344,7 +344,7 @@ variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedDivisionRing
variable (π)
theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => βx ^ n / n !β :=
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => βx ^ n / n !β :=
by
change Summable (norm β _)
rw [β expSeries_apply_eq_div' x]
@@ -352,12 +352,12 @@ theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
#align norm_exp_series_div_summable_of_mem_ball norm_expSeries_div_summable_of_mem_ball
theorem expSeries_div_summable_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => x ^ n / n ! :=
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => x ^ n / n ! :=
summable_of_summable_norm (norm_expSeries_div_summable_of_mem_ball π x hx)
#align exp_series_div_summable_of_mem_ball expSeries_div_summable_of_mem_ball
theorem expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => x ^ n / n !) (exp π x) :=
by
rw [β expSeries_apply_eq_div' x]
@@ -367,7 +367,7 @@ theorem expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
variable {π}
theorem exp_neg_of_mem_ball [CharZero π] [CompleteSpace πΈ] {x : πΈ}
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (-x) = (exp π x)β»ΒΉ :=
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (-x) = (exp π x)β»ΒΉ :=
letI := invertibleExpOfMemBall hx
invOf_eq_inv (exp π x)
#align exp_neg_of_mem_ball exp_neg_of_mem_ball
@@ -382,8 +382,8 @@ variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedCommRing
/-- In a commutative Banach-algebra `πΈ` over a normed field `π` of characteristic zero,
`exp π (x+y) = (exp π x) * (exp π y)` for all `x`, `y` in the disk of convergence. -/
theorem exp_add_of_mem_ball [CharZero π] {x y : πΈ}
- (hx : x β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius)
- (hy : y β Emetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
+ (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius)
+ (hy : y β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
exp_add_of_commute_of_mem_ball (Commute.all x y) hx hy
#align exp_add_of_mem_ball exp_add_of_mem_ball
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -112,7 +112,7 @@ theorem exp_eq_tsum : exp π = fun x : πΈ => β' n : β, (n !β»ΒΉ : π)
funext expSeries_sum_eq
#align exp_eq_tsum exp_eq_tsum
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (n Β«expr β Β» ({0} : finset exprβ())) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (n Β«expr β Β» ({0} : finset exprβ())) -/
@[simp]
theorem exp_zero [T2Space πΈ] : exp π (0 : πΈ) = 1 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -69,7 +69,7 @@ We prove most result for an arbitrary field `π`, and then specialize to `π
open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
-open Nat Topology BigOperators Ennreal
+open Nat Topology BigOperators ENNReal
section TopologicalAlgebra
@@ -255,7 +255,7 @@ theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β Emetric.ball (0 : πΈ
AnalyticAt π (exp π) x := by
by_cases h : (expSeries π πΈ).radius = 0
Β· rw [h] at hx
- exact (Ennreal.not_lt_zero hx).elim
+ exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
exact (hasFpowerSeriesOnBallExpOfRadiusPos h).analyticAt_of_mem hx
#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
nat_cast
/int_cast
/rat_cast
to natCast
/intCast
/ratCast
(#11486)
Now that I am defining NNRat.cast
, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast
/intCast
/ratCast
over nat_cast
/int_cast
/rat_cast
, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -158,7 +158,7 @@ theorem exp_unop [T2Space πΈ] (x : πΈα΅α΅α΅) : exp π (MulOpposite.unop
theorem star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ) :
star (exp π x) = exp π (star x) := by
- simp_rw [exp_eq_tsum, β star_pow, β star_inv_nat_cast_smul, β tsum_star]
+ simp_rw [exp_eq_tsum, β star_pow, β star_inv_natCast_smul, β tsum_star]
#align star_exp NormedSpace.star_exp
variable (π)
@@ -191,7 +191,7 @@ variable {π πΈ : Type*} [Field π] [DivisionRing πΈ] [Algebra π πΈ
theorem expSeries_apply_eq_div (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = x ^ n / n ! := by
rw [div_eq_mul_inv, β (Nat.cast_commute n ! (x ^ n)).inv_leftβ.eq, β smul_eq_mul,
- expSeries_apply_eq, inv_nat_cast_smul_eq π πΈ]
+ expSeries_apply_eq, inv_natCast_smul_eq π πΈ]
#align exp_series_apply_eq_div NormedSpace.expSeries_apply_eq_div
theorem expSeries_apply_eq_div' (x : πΈ) :
@@ -338,7 +338,7 @@ theorem map_exp_of_mem_ball {F} [FunLike F πΈ πΉ] [RingHomClass F πΈ πΉ]
rw [exp_eq_tsum, exp_eq_tsum]
refine' ((expSeries_summable_of_mem_ball' _ hx).hasSum.map f hf).tsum_eq.symm.trans _
dsimp only [Function.comp_def]
- simp_rw [map_inv_nat_cast_smul f π π, map_pow]
+ simp_rw [map_inv_natCast_smul f π π, map_pow]
#align map_exp_of_mem_ball NormedSpace.map_exp_of_mem_ball
end CompleteAlgebra
@@ -672,7 +672,7 @@ variable (π π' πΈ : Type*) [Field π] [Field π'] [Ring πΈ] [Algeb
`expSeries` on `πΈ`. -/
theorem expSeries_eq_expSeries (n : β) (x : πΈ) :
(expSeries π πΈ n fun _ => x) = expSeries π' πΈ n fun _ => x := by
- rw [expSeries_apply_eq, expSeries_apply_eq, inv_nat_cast_smul_eq π π']
+ rw [expSeries_apply_eq, expSeries_apply_eq, inv_natCast_smul_eq π π']
#align exp_series_eq_exp_series NormedSpace.expSeries_eq_expSeries
/-- If a normed ring `πΈ` is a normed algebra over two fields, then they define the same
@@ -32,34 +32,35 @@ We prove most result for an arbitrary field `π`, and then specialize to `π
### General case
-- `exp_add_of_commute_of_mem_ball` : if `π` has characteristic zero, then given two commuting
- elements `x` and `y` in the disk of convergence, we have
+- `NormedSpace.exp_add_of_commute_of_mem_ball` : if `π` has characteristic zero,
+ then given two commuting elements `x` and `y` in the disk of convergence, we have
`exp π (x+y) = (exp π x) * (exp π y)`
-- `exp_add_of_mem_ball` : if `π` has characteristic zero and `πΈ` is commutative, then given two
- elements `x` and `y` in the disk of convergence, we have
+- `NormedSpace.exp_add_of_mem_ball` : if `π` has characteristic zero and `πΈ` is commutative,
+ then given two elements `x` and `y` in the disk of convergence, we have
`exp π (x+y) = (exp π x) * (exp π y)`
-- `exp_neg_of_mem_ball` : if `π` has characteristic zero and `πΈ` is a division ring, then given an
- element `x` in the disk of convergence, we have `exp π (-x) = (exp π x)β»ΒΉ`.
+- `NormedSpace.exp_neg_of_mem_ball` : if `π` has characteristic zero and `πΈ` is a division ring,
+ then given an element `x` in the disk of convergence, we have `exp π (-x) = (exp π x)β»ΒΉ`.
### `π = β` or `π = β`
- `expSeries_radius_eq_top` : the `FormalMultilinearSeries` defining `exp π` has infinite
radius of convergence
-- `exp_add_of_commute` : given two commuting elements `x` and `y`, we have
+- `NormedSpace.exp_add_of_commute` : given two commuting elements `x` and `y`, we have
`exp π (x+y) = (exp π x) * (exp π y)`
-- `exp_add` : if `πΈ` is commutative, then we have `exp π (x+y) = (exp π x) * (exp π y)`
+- `NormedSpace.exp_add` : if `πΈ` is commutative, then we have `exp π (x+y) = (exp π x) * (exp π y)`
for any `x` and `y`
-- `exp_neg` : if `πΈ` is a division ring, then we have `exp π (-x) = (exp π x)β»ΒΉ`.
-- `exp_sum_of_commute` : the analogous result to `exp_add_of_commute` for `Finset.sum`.
-- `exp_sum` : the analogous result to `exp_add` for `Finset.sum`.
-- `exp_nsmul` : repeated addition in the domain corresponds to repeated multiplication in the
- codomain.
-- `exp_zsmul` : repeated addition in the domain corresponds to repeated multiplication in the
- codomain.
+- `NormedSpace.exp_neg` : if `πΈ` is a division ring, then we have `exp π (-x) = (exp π x)β»ΒΉ`.
+- `exp_sum_of_commute` : the analogous result to `NormedSpace.exp_add_of_commute` for `Finset.sum`.
+- `exp_sum` : the analogous result to `NormedSpace.exp_add` for `Finset.sum`.
+- `NormedSpace.exp_nsmul` : repeated addition in the domain corresponds to
+ repeated multiplication in the codomain.
+- `NormedSpace.exp_zsmul` : repeated addition in the domain corresponds to
+ repeated multiplication in the codomain.
### Other useful compatibility results
-- `exp_eq_exp` : if `πΈ` is a normed algebra over two fields `π` and `π'`, then `exp π = exp π' πΈ`
+- `NormedSpace.exp_eq_exp` : if `πΈ` is a normed algebra over two fields `π` and `π'`,
+ then `exp π = exp π' πΈ`
### Notes
@@ -75,7 +76,7 @@ open Real
#time example (x : β) : 0 < exp x := exp_pos _ -- 250ms
#time example (x : β) : 0 < Real.exp x := exp_pos _ -- 2ms
```
-This is because `exp x` tries the `exp` function defined here,
+This is because `exp x` tries the `NormedSpace.exp` function defined here,
and generates a slow coercion search from `Real` to `Type`, to fit the first argument here.
We will resolve this slow coercion separately,
but we want to move `exp` out of the root namespace in any case to avoid this ambiguity.
@@ -537,7 +538,7 @@ theorem exp_nsmul (n : β) (x : πΈ) : exp π (n β’ x) = exp π x ^ n :=
variable (π)
-/-- Any continuous ring homomorphism commutes with `exp`. -/
+/-- Any continuous ring homomorphism commutes with `NormedSpace.exp`. -/
theorem map_exp {F} [FunLike F πΈ πΉ] [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ) :
f (exp π x) = exp π (f x) :=
map_exp_of_mem_ball f hf x <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
@@ -650,7 +651,7 @@ theorem exp_add {x y : πΈ} : exp π (x + y) = exp π x * exp π y :=
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
#align exp_add NormedSpace.exp_add
-/-- A version of `exp_sum_of_commute` for a commutative Banach-algebra. -/
+/-- A version of `NormedSpace.exp_sum_of_commute` for a commutative Banach-algebra. -/
theorem exp_sum {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ) : exp π (β i in s, f i) = β i in s, exp π (f i) := by
rw [exp_sum_of_commute, Finset.noncommProd_eq_prod]
exact fun i _hi j _hj _ => Commute.all _ _
@@ -687,7 +688,7 @@ theorem exp_β_β_eq_exp_β_β : (exp β : β β β) = exp β :=
exp_eq_exp β β β
#align exp_β_β_eq_exp_β_β NormedSpace.exp_β_β_eq_exp_β_β
-/-- A version of `Complex.ofReal_exp` for `exp` instead of `Complex.exp` -/
+/-- A version of `Complex.ofReal_exp` for `NormedSpace.exp` instead of `Complex.exp` -/
@[simp, norm_cast]
theorem of_real_exp_β_β (r : β) : β(exp β r) = exp β (r : β) :=
(map_exp β (algebraMap β β) (continuous_algebraMap _ _) r).trans (congr_fun exp_β_β_eq_exp_β_β _)
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
.@@ -532,7 +532,7 @@ theorem exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
theorem exp_nsmul (n : β) (x : πΈ) : exp π (n β’ x) = exp π x ^ n := by
induction' n with n ih
Β· rw [Nat.zero_eq, zero_smul, pow_zero, exp_zero]
- Β· rw [succ_nsmul, pow_succ, exp_add_of_commute ((Commute.refl x).smul_right n), ih]
+ Β· rw [succ_nsmul, pow_succ, exp_add_of_commute ((Commute.refl x).smul_left n), ih]
#align exp_nsmul NormedSpace.exp_nsmul
variable (π)
IsROrC
to RCLike
(#10819)
IsROrC
contains data, which goes against the expectation that classes prefixed with Is
are prop-valued. People have been complaining about this on and off, so this PR renames IsROrC
to RCLike
.
@@ -87,7 +87,7 @@ In the long term is may be possible to replace `Real.exp` and `Complex.exp` with
namespace NormedSpace
-open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
+open Filter RCLike ContinuousMultilinearMap NormedField Asymptotics
open scoped Nat Topology BigOperators ENNReal
@@ -400,11 +400,11 @@ theorem exp_add_of_mem_ball [CharZero π] {x y : πΈ}
end AnyFieldCommAlgebra
-section IsROrC
+section RCLike
section AnyAlgebra
-variable (π πΈ πΉ : Type*) [IsROrC π] [NormedRing πΈ] [NormedAlgebra π πΈ]
+variable (π πΈ πΉ : Type*) [RCLike π] [NormedRing πΈ] [NormedAlgebra π πΈ]
variable [NormedRing πΉ] [NormedAlgebra π πΉ]
/-- In a normed algebra `πΈ` over `π = β` or `π = β`, the series defining the exponential map
@@ -599,7 +599,7 @@ end AnyAlgebra
section DivisionAlgebra
-variable {π πΈ : Type*} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
+variable {π πΈ : Type*} [RCLike π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
variable (π)
theorem norm_expSeries_div_summable (x : πΈ) : Summable fun n => β(x ^ n / n ! : πΈ)β :=
@@ -641,7 +641,7 @@ end DivisionAlgebra
section CommAlgebra
-variable {π πΈ : Type*} [IsROrC π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
+variable {π πΈ : Type*} [RCLike π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
/-- In a commutative Banach-algebra `πΈ` over `π = β` or `π = β`,
`exp π (x+y) = (exp π x) * (exp π y)`. -/
@@ -658,7 +658,7 @@ theorem exp_sum {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ) : exp π (β i in s, f
end CommAlgebra
-end IsROrC
+end RCLike
end Normed
zpow_coe_nat
to zpow_natCast
(#11528)
... and add a deprecated alias for the old name. This is mostly just me discovering the power of F2
@@ -625,8 +625,8 @@ theorem exp_neg (x : πΈ) : exp π (-x) = (exp π x)β»ΒΉ :=
theorem exp_zsmul (z : β€) (x : πΈ) : exp π (z β’ x) = exp π x ^ z := by
obtain β¨n, rfl | rflβ© := z.eq_nat_or_neg
- Β· rw [zpow_coe_nat, coe_nat_zsmul, exp_nsmul]
- Β· rw [zpow_neg, zpow_coe_nat, neg_smul, exp_neg, coe_nat_zsmul, exp_nsmul]
+ Β· rw [zpow_natCast, natCast_zsmul, exp_nsmul]
+ Β· rw [zpow_neg, zpow_natCast, neg_smul, exp_neg, natCast_zsmul, exp_nsmul]
#align exp_zsmul NormedSpace.exp_zsmul
theorem exp_conj (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (y * x * yβ»ΒΉ) = y * exp π x * yβ»ΒΉ :=
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -213,7 +213,6 @@ section Normed
section AnyFieldAnyAlgebra
variable {π πΈ πΉ : Type*} [NontriviallyNormedField π]
-
variable [NormedRing πΈ] [NormedRing πΉ] [NormedAlgebra π πΈ] [NormedAlgebra π πΉ]
theorem norm_expSeries_summable_of_mem_ball (x : πΈ)
@@ -354,7 +353,6 @@ end AnyFieldAnyAlgebra
section AnyFieldDivisionAlgebra
variable {π πΈ : Type*} [NontriviallyNormedField π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
-
variable (π)
theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
@@ -407,7 +405,6 @@ section IsROrC
section AnyAlgebra
variable (π πΈ πΉ : Type*) [IsROrC π] [NormedRing πΈ] [NormedAlgebra π πΈ]
-
variable [NormedRing πΉ] [NormedAlgebra π πΉ]
/-- In a normed algebra `πΈ` over `π = β` or `π = β`, the series defining the exponential map
@@ -603,7 +600,6 @@ end AnyAlgebra
section DivisionAlgebra
variable {π πΈ : Type*} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
-
variable (π)
theorem norm_expSeries_div_summable (x : πΈ) : Summable fun n => β(x ^ n / n ! : πΈ)β :=
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -418,7 +418,7 @@ theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β := by
filter_upwards [eventually_cofinite_ne 0] with n hn
rw [norm_mul, norm_norm (expSeries π πΈ n), expSeries]
rw [norm_smul (n ! : π)β»ΒΉ (ContinuousMultilinearMap.mkPiAlgebraFin π n πΈ)]
- -- porting note: Lean needed this to be explicit for some reason
+ -- Porting note: Lean needed this to be explicit for some reason
rw [norm_inv, norm_pow, NNReal.norm_eq, norm_natCast, mul_comm, β mul_assoc, β div_eq_mul_inv]
have : βContinuousMultilinearMap.mkPiAlgebraFin π n πΈβ β€ 1 :=
norm_mkPiAlgebraFin_le_of_pos (Ei := fun _ => πΈ) (Nat.pos_of_ne_zero hn)
zpow_ofNat
and ofNat_zsmul
(#10969)
Previously these were syntactically identical to the corresponding zpow_coe_nat
and coe_nat_zsmul
lemmas, now they are about OfNat.ofNat
.
Unfortunately, almost every call site uses the ofNat
name to refer to Nat.cast
, so the downstream proofs had to be adjusted too.
@@ -629,8 +629,8 @@ theorem exp_neg (x : πΈ) : exp π (-x) = (exp π x)β»ΒΉ :=
theorem exp_zsmul (z : β€) (x : πΈ) : exp π (z β’ x) = exp π x ^ z := by
obtain β¨n, rfl | rflβ© := z.eq_nat_or_neg
- Β· rw [zpow_ofNat, coe_nat_zsmul, exp_nsmul]
- Β· rw [zpow_neg, zpow_ofNat, neg_smul, exp_neg, coe_nat_zsmul, exp_nsmul]
+ Β· rw [zpow_coe_nat, coe_nat_zsmul, exp_nsmul]
+ Β· rw [zpow_neg, zpow_coe_nat, neg_smul, exp_neg, coe_nat_zsmul, exp_nsmul]
#align exp_zsmul NormedSpace.exp_zsmul
theorem exp_conj (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (y * x * yβ»ΒΉ) = y * exp π x * yβ»ΒΉ :=
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>
@@ -332,8 +332,9 @@ theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
#align inv_of_exp_of_mem_ball NormedSpace.invOf_exp_of_mem_ball
/-- Any continuous ring homomorphism commutes with `exp`. -/
-theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ)
- (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : f (exp π x) = exp π (f x) := by
+theorem map_exp_of_mem_ball {F} [FunLike F πΈ πΉ] [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f)
+ (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
+ f (exp π x) = exp π (f x) := by
rw [exp_eq_tsum, exp_eq_tsum]
refine' ((expSeries_summable_of_mem_ball' _ hx).hasSum.map f hf).tsum_eq.symm.trans _
dsimp only [Function.comp_def]
@@ -540,7 +541,7 @@ theorem exp_nsmul (n : β) (x : πΈ) : exp π (n β’ x) = exp π x ^ n :=
variable (π)
/-- Any continuous ring homomorphism commutes with `exp`. -/
-theorem map_exp {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ) :
+theorem map_exp {F} [FunLike F πΈ πΉ] [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ) :
f (exp π x) = exp π (f x) :=
map_exp_of_mem_ball f hf x <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
#align map_exp NormedSpace.map_exp
@@ -569,20 +569,20 @@ theorem _root_.Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π
#align prod.snd_exp Prod.snd_exp
@[simp]
-theorem _root_.Pi.exp_apply {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
+theorem _root_.Pi.exp_apply {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Finite ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) (i : ΞΉ) :
exp π x i = exp π (x i) :=
+ let β¨_β© := nonempty_fintype ΞΉ
map_exp _ (Pi.evalRingHom πΈ i) (continuous_apply _) x
- -- porting note: Lean can now handle Ξ -types in type class inference!
#align pi.exp_apply Pi.exp_apply
-theorem _root_.Pi.exp_def {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
+theorem _root_.Pi.exp_def {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Finite ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) :
exp π x = fun i => exp π (x i) :=
funext <| Pi.exp_apply π x
#align pi.exp_def Pi.exp_def
-theorem _root_.Function.update_exp {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [DecidableEq ΞΉ]
+theorem _root_.Function.update_exp {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Finite ΞΉ] [DecidableEq ΞΉ]
[β i, NormedRing (πΈ i)] [β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i)
(j : ΞΉ) (xj : πΈ j) :
Function.update (exp π x) j (exp π xj) = exp π (Function.update x j xj) := by
f ^ n
(#9617)
This involves moving lemmas from Algebra.GroupPower.Ring
to Algebra.GroupWithZero.Basic
and changing some 0 < n
assumptions to n β 0
.
From LeanAPAP
@@ -137,7 +137,7 @@ theorem expSeries_apply_zero (n : β) :
rw [expSeries_apply_eq]
cases' n with n
Β· rw [pow_zero, Nat.factorial_zero, Nat.cast_one, inv_one, one_smul, Pi.single_eq_same]
- Β· rw [zero_pow (Nat.succ_pos _), smul_zero, Pi.single_eq_of_ne n.succ_ne_zero]
+ Β· rw [zero_pow (Nat.succ_ne_zero _), smul_zero, Pi.single_eq_of_ne n.succ_ne_zero]
#align exp_series_apply_zero NormedSpace.expSeries_apply_zero
@[simp]
@@ -61,9 +61,32 @@ We prove most result for an arbitrary field `π`, and then specialize to `π
- `exp_eq_exp` : if `πΈ` is a normed algebra over two fields `π` and `π'`, then `exp π = exp π' πΈ`
+### Notes
+
+We put nearly all the statements in this file in the `NormedSpace` namespace,
+to avoid collisions with the `Real` or `Complex` namespaces.
+
+As of 2023-11-16 due to bad instances in Mathlib
+```
+import Mathlib
+
+open Real
+
+#time example (x : β) : 0 < exp x := exp_pos _ -- 250ms
+#time example (x : β) : 0 < Real.exp x := exp_pos _ -- 2ms
+```
+This is because `exp x` tries the `exp` function defined here,
+and generates a slow coercion search from `Real` to `Type`, to fit the first argument here.
+We will resolve this slow coercion separately,
+but we want to move `exp` out of the root namespace in any case to avoid this ambiguity.
+
+In the long term is may be possible to replace `Real.exp` and `Complex.exp` with this one.
+
-/
+namespace NormedSpace
+
open Filter IsROrC ContinuousMultilinearMap NormedField Asymptotics
open scoped Nat Topology BigOperators ENNReal
@@ -76,7 +99,7 @@ variable (π πΈ : Type*) [Field π] [Ring πΈ] [Algebra π πΈ] [Topol
`(xα΅’) : πΈβΏ β¦ (1/n! : π) β’ β xα΅’`. Its sum is the exponential map `exp π : πΈ β πΈ`. -/
def expSeries : FormalMultilinearSeries π πΈ πΈ := fun n =>
(n !β»ΒΉ : π) β’ ContinuousMultilinearMap.mkPiAlgebraFin π n πΈ
-#align exp_series expSeries
+#align exp_series NormedSpace.expSeries
variable {πΈ}
@@ -88,26 +111,26 @@ Note that when `πΈ = Matrix n n π`, this is the **Matrix Exponential**; see
case. -/
noncomputable def exp (x : πΈ) : πΈ :=
(expSeries π πΈ).sum x
-#align exp exp
+#align exp NormedSpace.exp
variable {π}
theorem expSeries_apply_eq (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = (n !β»ΒΉ : π) β’ x ^ n :=
by simp [expSeries]
-#align exp_series_apply_eq expSeries_apply_eq
+#align exp_series_apply_eq NormedSpace.expSeries_apply_eq
theorem expSeries_apply_eq' (x : πΈ) :
(fun n => expSeries π πΈ n fun _ => x) = fun n => (n !β»ΒΉ : π) β’ x ^ n :=
funext (expSeries_apply_eq x)
-#align exp_series_apply_eq' expSeries_apply_eq'
+#align exp_series_apply_eq' NormedSpace.expSeries_apply_eq'
theorem expSeries_sum_eq (x : πΈ) : (expSeries π πΈ).sum x = β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
tsum_congr fun n => expSeries_apply_eq x n
-#align exp_series_sum_eq expSeries_sum_eq
+#align exp_series_sum_eq NormedSpace.expSeries_sum_eq
theorem exp_eq_tsum : exp π = fun x : πΈ => β' n : β, (n !β»ΒΉ : π) β’ x ^ n :=
funext expSeries_sum_eq
-#align exp_eq_tsum exp_eq_tsum
+#align exp_eq_tsum NormedSpace.exp_eq_tsum
theorem expSeries_apply_zero (n : β) :
(expSeries π πΈ n fun _ => (0 : πΈ)) = Pi.single (f := fun _ => πΈ) 0 1 n := by
@@ -115,45 +138,46 @@ theorem expSeries_apply_zero (n : β) :
cases' n with n
Β· rw [pow_zero, Nat.factorial_zero, Nat.cast_one, inv_one, one_smul, Pi.single_eq_same]
Β· rw [zero_pow (Nat.succ_pos _), smul_zero, Pi.single_eq_of_ne n.succ_ne_zero]
-#align exp_series_apply_zero expSeries_apply_zero
+#align exp_series_apply_zero NormedSpace.expSeries_apply_zero
@[simp]
theorem exp_zero : exp π (0 : πΈ) = 1 := by
simp_rw [exp_eq_tsum, β expSeries_apply_eq, expSeries_apply_zero, tsum_pi_single]
-#align exp_zero exp_zero
+#align exp_zero NormedSpace.exp_zero
@[simp]
theorem exp_op [T2Space πΈ] (x : πΈ) : exp π (MulOpposite.op x) = MulOpposite.op (exp π x) := by
simp_rw [exp, expSeries_sum_eq, β MulOpposite.op_pow, β MulOpposite.op_smul, tsum_op]
-#align exp_op exp_op
+#align exp_op NormedSpace.exp_op
@[simp]
theorem exp_unop [T2Space πΈ] (x : πΈα΅α΅α΅) : exp π (MulOpposite.unop x) = MulOpposite.unop (exp π x) :=
by simp_rw [exp, expSeries_sum_eq, β MulOpposite.unop_pow, β MulOpposite.unop_smul, tsum_unop]
-#align exp_unop exp_unop
+#align exp_unop NormedSpace.exp_unop
theorem star_exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] (x : πΈ) :
star (exp π x) = exp π (star x) := by
simp_rw [exp_eq_tsum, β star_pow, β star_inv_nat_cast_smul, β tsum_star]
-#align star_exp star_exp
+#align star_exp NormedSpace.star_exp
variable (π)
-theorem IsSelfAdjoint.exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
+theorem _root_.IsSelfAdjoint.exp [T2Space πΈ] [StarRing πΈ] [ContinuousStar πΈ] {x : πΈ}
(h : IsSelfAdjoint x) : IsSelfAdjoint (exp π x) :=
(star_exp x).trans <| h.symm βΈ rfl
#align is_self_adjoint.exp IsSelfAdjoint.exp
-theorem Commute.exp_right [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute x (exp π y) := by
+theorem _root_.Commute.exp_right [T2Space πΈ] {x y : πΈ} (h : Commute x y) :
+ Commute x (exp π y) := by
rw [exp_eq_tsum]
exact Commute.tsum_right x fun n => (h.pow_right n).smul_right _
#align commute.exp_right Commute.exp_right
-theorem Commute.exp_left [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) y :=
+theorem _root_.Commute.exp_left [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) y :=
(h.symm.exp_right π).symm
#align commute.exp_left Commute.exp_left
-theorem Commute.exp [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) (exp π y) :=
+theorem _root_.Commute.exp [T2Space πΈ] {x y : πΈ} (h : Commute x y) : Commute (exp π x) (exp π y) :=
(h.exp_left _).exp_right _
#align commute.exp Commute.exp
@@ -167,20 +191,20 @@ variable {π πΈ : Type*} [Field π] [DivisionRing πΈ] [Algebra π πΈ
theorem expSeries_apply_eq_div (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = x ^ n / n ! := by
rw [div_eq_mul_inv, β (Nat.cast_commute n ! (x ^ n)).inv_leftβ.eq, β smul_eq_mul,
expSeries_apply_eq, inv_nat_cast_smul_eq π πΈ]
-#align exp_series_apply_eq_div expSeries_apply_eq_div
+#align exp_series_apply_eq_div NormedSpace.expSeries_apply_eq_div
theorem expSeries_apply_eq_div' (x : πΈ) :
(fun n => expSeries π πΈ n fun _ => x) = fun n => x ^ n / n ! :=
funext (expSeries_apply_eq_div x)
-#align exp_series_apply_eq_div' expSeries_apply_eq_div'
+#align exp_series_apply_eq_div' NormedSpace.expSeries_apply_eq_div'
theorem expSeries_sum_eq_div (x : πΈ) : (expSeries π πΈ).sum x = β' n : β, x ^ n / n ! :=
tsum_congr (expSeries_apply_eq_div x)
-#align exp_series_sum_eq_div expSeries_sum_eq_div
+#align exp_series_sum_eq_div NormedSpace.expSeries_sum_eq_div
theorem exp_eq_tsum_div : exp π = fun x : πΈ => β' n : β, x ^ n / n ! :=
funext expSeries_sum_eq_div
-#align exp_eq_tsum_div exp_eq_tsum_div
+#align exp_eq_tsum_div NormedSpace.exp_eq_tsum_div
end TopologicalDivisionAlgebra
@@ -196,7 +220,7 @@ theorem norm_expSeries_summable_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => βexpSeries π πΈ n fun _ => xβ :=
(expSeries π πΈ).summable_norm_apply hx
-#align norm_exp_series_summable_of_mem_ball norm_expSeries_summable_of_mem_ball
+#align norm_exp_series_summable_of_mem_ball NormedSpace.norm_expSeries_summable_of_mem_ball
theorem norm_expSeries_summable_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
@@ -204,7 +228,7 @@ theorem norm_expSeries_summable_of_mem_ball' (x : πΈ)
change Summable (norm β _)
rw [β expSeries_apply_eq']
exact norm_expSeries_summable_of_mem_ball x hx
-#align norm_exp_series_summable_of_mem_ball' norm_expSeries_summable_of_mem_ball'
+#align norm_exp_series_summable_of_mem_ball' NormedSpace.norm_expSeries_summable_of_mem_ball'
section CompleteAlgebra
@@ -214,40 +238,40 @@ theorem expSeries_summable_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => expSeries π πΈ n fun _ => x :=
(norm_expSeries_summable_of_mem_ball x hx).of_norm
-#align exp_series_summable_of_mem_ball expSeries_summable_of_mem_ball
+#align exp_series_summable_of_mem_ball NormedSpace.expSeries_summable_of_mem_ball
theorem expSeries_summable_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
(norm_expSeries_summable_of_mem_ball' x hx).of_norm
-#align exp_series_summable_of_mem_ball' expSeries_summable_of_mem_ball'
+#align exp_series_summable_of_mem_ball' NormedSpace.expSeries_summable_of_mem_ball'
theorem expSeries_hasSum_exp_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
FormalMultilinearSeries.hasSum (expSeries π πΈ) hx
-#align exp_series_has_sum_exp_of_mem_ball expSeries_hasSum_exp_of_mem_ball
+#align exp_series_has_sum_exp_of_mem_ball NormedSpace.expSeries_hasSum_exp_of_mem_ball
theorem expSeries_hasSum_exp_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) := by
rw [β expSeries_apply_eq']
exact expSeries_hasSum_exp_of_mem_ball x hx
-#align exp_series_has_sum_exp_of_mem_ball' expSeries_hasSum_exp_of_mem_ball'
+#align exp_series_has_sum_exp_of_mem_ball' NormedSpace.expSeries_hasSum_exp_of_mem_ball'
theorem hasFPowerSeriesOnBall_exp_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 (expSeries π πΈ).radius :=
(expSeries π πΈ).hasFPowerSeriesOnBall h
-#align has_fpower_series_on_ball_exp_of_radius_pos hasFPowerSeriesOnBall_exp_of_radius_pos
+#align has_fpower_series_on_ball_exp_of_radius_pos NormedSpace.hasFPowerSeriesOnBall_exp_of_radius_pos
theorem hasFPowerSeriesAt_exp_zero_of_radius_pos (h : 0 < (expSeries π πΈ).radius) :
HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
(hasFPowerSeriesOnBall_exp_of_radius_pos h).hasFPowerSeriesAt
-#align has_fpower_series_at_exp_zero_of_radius_pos hasFPowerSeriesAt_exp_zero_of_radius_pos
+#align has_fpower_series_at_exp_zero_of_radius_pos NormedSpace.hasFPowerSeriesAt_exp_zero_of_radius_pos
theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball 0 (expSeries π πΈ).radius) :=
FormalMultilinearSeries.continuousOn
-#align continuous_on_exp continuousOn_exp
+#align continuous_on_exp NormedSpace.continuousOn_exp
theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
AnalyticAt π (exp π) x := by
@@ -255,7 +279,7 @@ theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ
Β· rw [h] at hx; exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
exact (hasFPowerSeriesOnBall_exp_of_radius_pos h).analyticAt_of_mem hx
-#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
+#align analytic_at_exp_of_mem_ball NormedSpace.analyticAt_exp_of_mem_ball
/-- In a Banach-algebra `πΈ` over a normed field `π` of characteristic zero, if `x` and `y` are
in the disk of convergence and commute, then `exp π (x + y) = (exp π x) * (exp π y)`. -/
@@ -276,7 +300,7 @@ theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commu
congr 1
have : (n ! : π) β 0 := Nat.cast_ne_zero.mpr n.factorial_ne_zero
field_simp [this]
-#align exp_add_of_commute_of_mem_ball exp_add_of_commute_of_mem_ball
+#align exp_add_of_commute_of_mem_ball NormedSpace.exp_add_of_commute_of_mem_ball
/-- `exp π x` has explicit two-sided inverse `exp π (-x)`. -/
noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
@@ -294,18 +318,18 @@ noncomputable def invertibleExpOfMemBall [CharZero π] {x : πΈ}
exact hx
rw [β exp_add_of_commute_of_mem_ball (Commute.neg_right <| Commute.refl x) hx hnx, add_neg_self,
exp_zero]
-#align invertible_exp_of_mem_ball invertibleExpOfMemBall
+#align invertible_exp_of_mem_ball NormedSpace.invertibleExpOfMemBall
theorem isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : IsUnit (exp π x) :=
@isUnit_of_invertible _ _ _ (invertibleExpOfMemBall hx)
-#align is_unit_exp_of_mem_ball isUnit_exp_of_mem_ball
+#align is_unit_exp_of_mem_ball NormedSpace.isUnit_exp_of_mem_ball
theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
β
(exp π x) = exp π (-x) := by
letI := invertibleExpOfMemBall hx; convert (rfl : β
(exp π x) = _)
-#align inv_of_exp_of_mem_ball invOf_exp_of_mem_ball
+#align inv_of_exp_of_mem_ball NormedSpace.invOf_exp_of_mem_ball
/-- Any continuous ring homomorphism commutes with `exp`. -/
theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ)
@@ -314,7 +338,7 @@ theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continu
refine' ((expSeries_summable_of_mem_ball' _ hx).hasSum.map f hf).tsum_eq.symm.trans _
dsimp only [Function.comp_def]
simp_rw [map_inv_nat_cast_smul f π π, map_pow]
-#align map_exp_of_mem_ball map_exp_of_mem_ball
+#align map_exp_of_mem_ball NormedSpace.map_exp_of_mem_ball
end CompleteAlgebra
@@ -322,7 +346,7 @@ theorem algebraMap_exp_comm_of_mem_ball [CompleteSpace π] (x : π)
(hx : x β EMetric.ball (0 : π) (expSeries π π).radius) :
algebraMap π πΈ (exp π x) = exp π (algebraMap π πΈ x) :=
map_exp_of_mem_ball _ (continuous_algebraMap π πΈ) _ hx
-#align algebra_map_exp_comm_of_mem_ball algebraMap_exp_comm_of_mem_ball
+#align algebra_map_exp_comm_of_mem_ball NormedSpace.algebraMap_exp_comm_of_mem_ball
end AnyFieldAnyAlgebra
@@ -338,19 +362,19 @@ theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
change Summable (norm β _)
rw [β expSeries_apply_eq_div' (π := π) x]
exact norm_expSeries_summable_of_mem_ball x hx
-#align norm_exp_series_div_summable_of_mem_ball norm_expSeries_div_summable_of_mem_ball
+#align norm_exp_series_div_summable_of_mem_ball NormedSpace.norm_expSeries_div_summable_of_mem_ball
theorem expSeries_div_summable_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => x ^ n / n ! :=
(norm_expSeries_div_summable_of_mem_ball π x hx).of_norm
-#align exp_series_div_summable_of_mem_ball expSeries_div_summable_of_mem_ball
+#align exp_series_div_summable_of_mem_ball NormedSpace.expSeries_div_summable_of_mem_ball
theorem expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
HasSum (fun n => x ^ n / n !) (exp π x) := by
rw [β expSeries_apply_eq_div' (π := π) x]
exact expSeries_hasSum_exp_of_mem_ball x hx
-#align exp_series_div_has_sum_exp_of_mem_ball expSeries_div_hasSum_exp_of_mem_ball
+#align exp_series_div_has_sum_exp_of_mem_ball NormedSpace.expSeries_div_hasSum_exp_of_mem_ball
variable {π}
@@ -358,7 +382,7 @@ theorem exp_neg_of_mem_ball [CharZero π] [CompleteSpace πΈ] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (-x) = (exp π x)β»ΒΉ :=
letI := invertibleExpOfMemBall hx
invOf_eq_inv (exp π x)
-#align exp_neg_of_mem_ball exp_neg_of_mem_ball
+#align exp_neg_of_mem_ball NormedSpace.exp_neg_of_mem_ball
end AnyFieldDivisionAlgebra
@@ -373,7 +397,7 @@ theorem exp_add_of_mem_ball [CharZero π] {x y : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius)
(hy : y β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : exp π (x + y) = exp π x * exp π y :=
exp_add_of_commute_of_mem_ball (Commute.all x y) hx hy
-#align exp_add_of_mem_ball exp_add_of_mem_ball
+#align exp_add_of_mem_ball NormedSpace.exp_add_of_mem_ball
end AnyFieldCommAlgebra
@@ -398,22 +422,22 @@ theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β := by
have : βContinuousMultilinearMap.mkPiAlgebraFin π n πΈβ β€ 1 :=
norm_mkPiAlgebraFin_le_of_pos (Ei := fun _ => πΈ) (Nat.pos_of_ne_zero hn)
exact mul_le_of_le_one_right (div_nonneg (pow_nonneg r.coe_nonneg n) n !.cast_nonneg) this
-#align exp_series_radius_eq_top expSeries_radius_eq_top
+#align exp_series_radius_eq_top NormedSpace.expSeries_radius_eq_top
theorem expSeries_radius_pos : 0 < (expSeries π πΈ).radius := by
rw [expSeries_radius_eq_top]
exact WithTop.zero_lt_top
-#align exp_series_radius_pos expSeries_radius_pos
+#align exp_series_radius_pos NormedSpace.expSeries_radius_pos
variable {π πΈ πΉ}
theorem norm_expSeries_summable (x : πΈ) : Summable fun n => βexpSeries π πΈ n fun _ => xβ :=
norm_expSeries_summable_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_summable norm_expSeries_summable
+#align norm_exp_series_summable NormedSpace.norm_expSeries_summable
theorem norm_expSeries_summable' (x : πΈ) : Summable fun n => β(n !β»ΒΉ : π) β’ x ^ nβ :=
norm_expSeries_summable_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_summable' norm_expSeries_summable'
+#align norm_exp_series_summable' NormedSpace.norm_expSeries_summable'
section CompleteAlgebra
@@ -421,45 +445,45 @@ variable [CompleteSpace πΈ]
theorem expSeries_summable (x : πΈ) : Summable fun n => expSeries π πΈ n fun _ => x :=
(norm_expSeries_summable x).of_norm
-#align exp_series_summable expSeries_summable
+#align exp_series_summable NormedSpace.expSeries_summable
theorem expSeries_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
(norm_expSeries_summable' x).of_norm
-#align exp_series_summable' expSeries_summable'
+#align exp_series_summable' NormedSpace.expSeries_summable'
theorem expSeries_hasSum_exp (x : πΈ) : HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
expSeries_hasSum_exp_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_series_has_sum_exp expSeries_hasSum_exp
+#align exp_series_has_sum_exp NormedSpace.expSeries_hasSum_exp
theorem exp_series_hasSum_exp' (x : πΈ) : HasSum (fun n => (n !β»ΒΉ : π) β’ x ^ n) (exp π x) :=
expSeries_hasSum_exp_of_mem_ball' x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_series_has_sum_exp' exp_series_hasSum_exp'
+#align exp_series_has_sum_exp' NormedSpace.exp_series_hasSum_exp'
theorem exp_hasFPowerSeriesOnBall : HasFPowerSeriesOnBall (exp π) (expSeries π πΈ) 0 β :=
expSeries_radius_eq_top π πΈ βΈ hasFPowerSeriesOnBall_exp_of_radius_pos (expSeries_radius_pos _ _)
-#align exp_has_fpower_series_on_ball exp_hasFPowerSeriesOnBall
+#align exp_has_fpower_series_on_ball NormedSpace.exp_hasFPowerSeriesOnBall
theorem exp_hasFPowerSeriesAt_zero : HasFPowerSeriesAt (exp π) (expSeries π πΈ) 0 :=
exp_hasFPowerSeriesOnBall.hasFPowerSeriesAt
-#align exp_has_fpower_series_at_zero exp_hasFPowerSeriesAt_zero
+#align exp_has_fpower_series_at_zero NormedSpace.exp_hasFPowerSeriesAt_zero
@[continuity]
theorem exp_continuous : Continuous (exp π : πΈ β πΈ) := by
rw [continuous_iff_continuousOn_univ, β Metric.eball_top_eq_univ (0 : πΈ), β
expSeries_radius_eq_top π πΈ]
exact continuousOn_exp
-#align exp_continuous exp_continuous
+#align exp_continuous NormedSpace.exp_continuous
theorem exp_analytic (x : πΈ) : AnalyticAt π (exp π) x :=
analyticAt_exp_of_mem_ball x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_analytic exp_analytic
+#align exp_analytic NormedSpace.exp_analytic
/-- In a Banach-algebra `πΈ` over `π = β` or `π = β`, if `x` and `y` commute, then
`exp π (x+y) = (exp π x) * (exp π y)`. -/
theorem exp_add_of_commute {x y : πΈ} (hxy : Commute x y) : exp π (x + y) = exp π x * exp π y :=
exp_add_of_commute_of_mem_ball hxy ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_add_of_commute exp_add_of_commute
+#align exp_add_of_commute NormedSpace.exp_add_of_commute
section
@@ -468,17 +492,17 @@ variable (π)
/-- `exp π x` has explicit two-sided inverse `exp π (-x)`. -/
noncomputable def invertibleExp (x : πΈ) : Invertible (exp π x) :=
invertibleExpOfMemBall <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align invertible_exp invertibleExp
+#align invertible_exp NormedSpace.invertibleExp
theorem isUnit_exp (x : πΈ) : IsUnit (exp π x) :=
isUnit_exp_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align is_unit_exp isUnit_exp
+#align is_unit_exp NormedSpace.isUnit_exp
theorem invOf_exp (x : πΈ) [Invertible (exp π x)] : β
(exp π x) = exp π (-x) :=
invOf_exp_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align inv_of_exp invOf_exp
+#align inv_of_exp NormedSpace.invOf_exp
-theorem Ring.inverse_exp (x : πΈ) : Ring.inverse (exp π x) = exp π (-x) :=
+theorem _root_.Ring.inverse_exp (x : πΈ) : Ring.inverse (exp π x) = exp π (-x) :=
letI := invertibleExp π x
Ring.inverse_invertible _
#align ring.inverse_exp Ring.inverse_exp
@@ -488,7 +512,7 @@ theorem exp_mem_unitary_of_mem_skewAdjoint [StarRing πΈ] [ContinuousStar πΈ]
rw [unitary.mem_iff, star_exp, skewAdjoint.mem_iff.mp h, β
exp_add_of_commute (Commute.refl x).neg_left, β exp_add_of_commute (Commute.refl x).neg_right,
add_left_neg, add_right_neg, exp_zero, and_self_iff]
-#align exp_mem_unitary_of_mem_skew_adjoint exp_mem_unitary_of_mem_skewAdjoint
+#align exp_mem_unitary_of_mem_skew_adjoint NormedSpace.exp_mem_unitary_of_mem_skewAdjoint
end
@@ -505,13 +529,13 @@ theorem exp_sum_of_commute {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ)
ih (h.mono <| Finset.subset_insert _ _)]
refine' Commute.sum_right _ _ _ fun i hi => _
exact h.of_refl (Finset.mem_insert_self _ _) (Finset.mem_insert_of_mem hi)
-#align exp_sum_of_commute exp_sum_of_commute
+#align exp_sum_of_commute NormedSpace.exp_sum_of_commute
theorem exp_nsmul (n : β) (x : πΈ) : exp π (n β’ x) = exp π x ^ n := by
induction' n with n ih
Β· rw [Nat.zero_eq, zero_smul, pow_zero, exp_zero]
Β· rw [succ_nsmul, pow_succ, exp_add_of_commute ((Commute.refl x).smul_right n), ih]
-#align exp_nsmul exp_nsmul
+#align exp_nsmul NormedSpace.exp_nsmul
variable (π)
@@ -519,46 +543,46 @@ variable (π)
theorem map_exp {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continuous f) (x : πΈ) :
f (exp π x) = exp π (f x) :=
map_exp_of_mem_ball f hf x <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align map_exp map_exp
+#align map_exp NormedSpace.map_exp
theorem exp_smul {G} [Monoid G] [MulSemiringAction G πΈ] [ContinuousConstSMul G πΈ] (g : G) (x : πΈ) :
exp π (g β’ x) = g β’ exp π x :=
(map_exp π (MulSemiringAction.toRingHom G πΈ g) (continuous_const_smul g) x).symm
-#align exp_smul exp_smul
+#align exp_smul NormedSpace.exp_smul
theorem exp_units_conj (y : πΈΛ£) (x : πΈ) : exp π (y * x * βyβ»ΒΉ : πΈ) = y * exp π x * βyβ»ΒΉ :=
exp_smul _ (ConjAct.toConjAct y) x
-#align exp_units_conj exp_units_conj
+#align exp_units_conj NormedSpace.exp_units_conj
theorem exp_units_conj' (y : πΈΛ£) (x : πΈ) : exp π (βyβ»ΒΉ * x * y) = βyβ»ΒΉ * exp π x * y :=
exp_units_conj _ _ _
-#align exp_units_conj' exp_units_conj'
+#align exp_units_conj' NormedSpace.exp_units_conj'
@[simp]
-theorem Prod.fst_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).fst = exp π x.fst :=
+theorem _root_.Prod.fst_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).fst = exp π x.fst :=
map_exp _ (RingHom.fst πΈ πΉ) continuous_fst x
#align prod.fst_exp Prod.fst_exp
@[simp]
-theorem Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).snd = exp π x.snd :=
+theorem _root_.Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).snd = exp π x.snd :=
map_exp _ (RingHom.snd πΈ πΉ) continuous_snd x
#align prod.snd_exp Prod.snd_exp
@[simp]
-theorem Pi.exp_apply {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
+theorem _root_.Pi.exp_apply {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) (i : ΞΉ) :
exp π x i = exp π (x i) :=
map_exp _ (Pi.evalRingHom πΈ i) (continuous_apply _) x
-- porting note: Lean can now handle Ξ -types in type class inference!
#align pi.exp_apply Pi.exp_apply
-theorem Pi.exp_def {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
+theorem _root_.Pi.exp_def {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) :
exp π x = fun i => exp π (x i) :=
funext <| Pi.exp_apply π x
#align pi.exp_def Pi.exp_def
-theorem Function.update_exp {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [DecidableEq ΞΉ]
+theorem _root_.Function.update_exp {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [DecidableEq ΞΉ]
[β i, NormedRing (πΈ i)] [β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i)
(j : ΞΉ) (xj : πΈ j) :
Function.update (exp π x) j (exp π xj) = exp π (Function.update x j xj) := by
@@ -571,7 +595,7 @@ end CompleteAlgebra
theorem algebraMap_exp_comm (x : π) : algebraMap π πΈ (exp π x) = exp π (algebraMap π πΈ x) :=
algebraMap_exp_comm_of_mem_ball x <| (expSeries_radius_eq_top π π).symm βΈ edist_lt_top _ _
-#align algebra_map_exp_comm algebraMap_exp_comm
+#align algebra_map_exp_comm NormedSpace.algebraMap_exp_comm
end AnyAlgebra
@@ -584,37 +608,37 @@ variable (π)
theorem norm_expSeries_div_summable (x : πΈ) : Summable fun n => β(x ^ n / n ! : πΈ)β :=
norm_expSeries_div_summable_of_mem_ball π x
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align norm_exp_series_div_summable norm_expSeries_div_summable
+#align norm_exp_series_div_summable NormedSpace.norm_expSeries_div_summable
variable [CompleteSpace πΈ]
theorem expSeries_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
(norm_expSeries_div_summable π x).of_norm
-#align exp_series_div_summable expSeries_div_summable
+#align exp_series_div_summable NormedSpace.expSeries_div_summable
theorem expSeries_div_hasSum_exp (x : πΈ) : HasSum (fun n => x ^ n / n !) (exp π x) :=
expSeries_div_hasSum_exp_of_mem_ball π x ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_series_div_has_sum_exp expSeries_div_hasSum_exp
+#align exp_series_div_has_sum_exp NormedSpace.expSeries_div_hasSum_exp
variable {π}
theorem exp_neg (x : πΈ) : exp π (-x) = (exp π x)β»ΒΉ :=
exp_neg_of_mem_ball <| (expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _
-#align exp_neg exp_neg
+#align exp_neg NormedSpace.exp_neg
theorem exp_zsmul (z : β€) (x : πΈ) : exp π (z β’ x) = exp π x ^ z := by
obtain β¨n, rfl | rflβ© := z.eq_nat_or_neg
Β· rw [zpow_ofNat, coe_nat_zsmul, exp_nsmul]
Β· rw [zpow_neg, zpow_ofNat, neg_smul, exp_neg, coe_nat_zsmul, exp_nsmul]
-#align exp_zsmul exp_zsmul
+#align exp_zsmul NormedSpace.exp_zsmul
theorem exp_conj (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (y * x * yβ»ΒΉ) = y * exp π x * yβ»ΒΉ :=
exp_units_conj _ (Units.mk0 y hy) x
-#align exp_conj exp_conj
+#align exp_conj NormedSpace.exp_conj
theorem exp_conj' (y : πΈ) (x : πΈ) (hy : y β 0) : exp π (yβ»ΒΉ * x * y) = yβ»ΒΉ * exp π x * y :=
exp_units_conj' _ (Units.mk0 y hy) x
-#align exp_conj' exp_conj'
+#align exp_conj' NormedSpace.exp_conj'
end DivisionAlgebra
@@ -627,13 +651,13 @@ variable {π πΈ : Type*} [IsROrC π] [NormedCommRing πΈ] [NormedAlgebra
theorem exp_add {x y : πΈ} : exp π (x + y) = exp π x * exp π y :=
exp_add_of_mem_ball ((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
((expSeries_radius_eq_top π πΈ).symm βΈ edist_lt_top _ _)
-#align exp_add exp_add
+#align exp_add NormedSpace.exp_add
/-- A version of `exp_sum_of_commute` for a commutative Banach-algebra. -/
theorem exp_sum {ΞΉ} (s : Finset ΞΉ) (f : ΞΉ β πΈ) : exp π (β i in s, f i) = β i in s, exp π (f i) := by
rw [exp_sum_of_commute, Finset.noncommProd_eq_prod]
exact fun i _hi j _hj _ => Commute.all _ _
-#align exp_sum exp_sum
+#align exp_sum NormedSpace.exp_sum
end CommAlgebra
@@ -651,7 +675,7 @@ variable (π π' πΈ : Type*) [Field π] [Field π'] [Ring πΈ] [Algeb
theorem expSeries_eq_expSeries (n : β) (x : πΈ) :
(expSeries π πΈ n fun _ => x) = expSeries π' πΈ n fun _ => x := by
rw [expSeries_apply_eq, expSeries_apply_eq, inv_nat_cast_smul_eq π π']
-#align exp_series_eq_exp_series expSeries_eq_expSeries
+#align exp_series_eq_exp_series NormedSpace.expSeries_eq_expSeries
/-- If a normed ring `πΈ` is a normed algebra over two fields, then they define the same
exponential function on `πΈ`. -/
@@ -660,16 +684,16 @@ theorem exp_eq_exp : (exp π : πΈ β πΈ) = exp π' := by
rw [exp, exp]
refine' tsum_congr fun n => _
rw [expSeries_eq_expSeries π π' πΈ n x]
-#align exp_eq_exp exp_eq_exp
+#align exp_eq_exp NormedSpace.exp_eq_exp
theorem exp_β_β_eq_exp_β_β : (exp β : β β β) = exp β :=
exp_eq_exp β β β
-#align exp_β_β_eq_exp_β_β exp_β_β_eq_exp_β_β
+#align exp_β_β_eq_exp_β_β NormedSpace.exp_β_β_eq_exp_β_β
/-- A version of `Complex.ofReal_exp` for `exp` instead of `Complex.exp` -/
@[simp, norm_cast]
theorem of_real_exp_β_β (r : β) : β(exp β r) = exp β (r : β) :=
(map_exp β (algebraMap β β) (continuous_algebraMap _ _) r).trans (congr_fun exp_β_β_eq_exp_β_β _)
-#align of_real_exp_β_β of_real_exp_β_β
+#align of_real_exp_β_β NormedSpace.of_real_exp_β_β
end ScalarTower
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -312,7 +312,7 @@ theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continu
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : f (exp π x) = exp π (f x) := by
rw [exp_eq_tsum, exp_eq_tsum]
refine' ((expSeries_summable_of_mem_ball' _ hx).hasSum.map f hf).tsum_eq.symm.trans _
- dsimp only [Function.comp]
+ dsimp only [Function.comp_def]
simp_rw [map_inv_nat_cast_smul f π π, map_pow]
#align map_exp_of_mem_ball map_exp_of_mem_ball
summable_of_norm_bounded
-> Summable.of_norm_bounded
;summable_of_norm_bounded_eventually
-> Summable.of_norm_bounded_eventually
;summable_of_nnnorm_bounded
-> Summable.of_nnnorm_bounded
;summable_of_summable_norm
-> Summable.of_norm
;summable_of_summable_nnnorm
-> Summable.of_nnnorm
;Summable.of_norm_bounded_eventually_nat
Summable.norm
@@ -213,13 +213,13 @@ variable [CompleteSpace πΈ]
theorem expSeries_summable_of_mem_ball (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => expSeries π πΈ n fun _ => x :=
- summable_of_summable_norm (norm_expSeries_summable_of_mem_ball x hx)
+ (norm_expSeries_summable_of_mem_ball x hx).of_norm
#align exp_series_summable_of_mem_ball expSeries_summable_of_mem_ball
theorem expSeries_summable_of_mem_ball' (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- summable_of_summable_norm (norm_expSeries_summable_of_mem_ball' x hx)
+ (norm_expSeries_summable_of_mem_ball' x hx).of_norm
#align exp_series_summable_of_mem_ball' expSeries_summable_of_mem_ball'
theorem expSeries_hasSum_exp_of_mem_ball (x : πΈ)
@@ -342,7 +342,7 @@ theorem norm_expSeries_div_summable_of_mem_ball (x : πΈ)
theorem expSeries_div_summable_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) : Summable fun n => x ^ n / n ! :=
- summable_of_summable_norm (norm_expSeries_div_summable_of_mem_ball π x hx)
+ (norm_expSeries_div_summable_of_mem_ball π x hx).of_norm
#align exp_series_div_summable_of_mem_ball expSeries_div_summable_of_mem_ball
theorem expSeries_div_hasSum_exp_of_mem_ball [CompleteSpace πΈ] (x : πΈ)
@@ -389,7 +389,7 @@ variable [NormedRing πΉ] [NormedAlgebra π πΉ]
has an infinite radius of convergence. -/
theorem expSeries_radius_eq_top : (expSeries π πΈ).radius = β := by
refine' (expSeries π πΈ).radius_eq_top_of_summable_norm fun r => _
- refine' summable_of_norm_bounded_eventually _ (Real.summable_pow_div_factorial r) _
+ refine' .of_norm_bounded_eventually _ (Real.summable_pow_div_factorial r) _
filter_upwards [eventually_cofinite_ne 0] with n hn
rw [norm_mul, norm_norm (expSeries π πΈ n), expSeries]
rw [norm_smul (n ! : π)β»ΒΉ (ContinuousMultilinearMap.mkPiAlgebraFin π n πΈ)]
@@ -420,11 +420,11 @@ section CompleteAlgebra
variable [CompleteSpace πΈ]
theorem expSeries_summable (x : πΈ) : Summable fun n => expSeries π πΈ n fun _ => x :=
- summable_of_summable_norm (norm_expSeries_summable x)
+ (norm_expSeries_summable x).of_norm
#align exp_series_summable expSeries_summable
theorem expSeries_summable' (x : πΈ) : Summable fun n => (n !β»ΒΉ : π) β’ x ^ n :=
- summable_of_summable_norm (norm_expSeries_summable' x)
+ (norm_expSeries_summable' x).of_norm
#align exp_series_summable' expSeries_summable'
theorem expSeries_hasSum_exp (x : πΈ) : HasSum (fun n => expSeries π πΈ n fun _ => x) (exp π x) :=
@@ -589,7 +589,7 @@ theorem norm_expSeries_div_summable (x : πΈ) : Summable fun n => β(x ^ n / n
variable [CompleteSpace πΈ]
theorem expSeries_div_summable (x : πΈ) : Summable fun n => x ^ n / n ! :=
- summable_of_summable_norm (norm_expSeries_div_summable π x)
+ (norm_expSeries_div_summable π x).of_norm
#align exp_series_div_summable expSeries_div_summable
theorem expSeries_div_hasSum_exp (x : πΈ) : HasSum (fun n => x ^ n / n !) (exp π x) :=
Finset.Nat.antidiagonal
(#7486)
We define a type class Finset.HasAntidiagonal A
which contains a function
antidiagonal : A β Finset (A Γ A)
such that antidiagonal n
is the Finset of all pairs adding to n
, as witnessed by mem_antidiagonal
.
When A
is a canonically ordered add monoid with locally finite order
this typeclass can be instantiated with Finset.antidiagonalOfLocallyFinite
.
This applies in particular when A
is β
, more generally or Ο ββ β
,
or even ΞΉ ββ A
under the additional assumption OrderedSub A
that make it a canonically ordered add monoid.
(In fact, we would just need an AddMonoid
with a compatible order,
finite Iic
, such that if a + b = n
, then a, b β€ n
,
and any finiteness condition would be OK.)
For computational reasons it is better to manually provide instances for β
and Ο ββ β
, to avoid quadratic runtime performance.
These instances are provided as Finset.Nat.instHasAntidiagonal
and Finsupp.instHasAntidiagonal
.
This is why Finset.antidiagonalOfLocallyFinite
is an abbrev
and not an instance
.
This definition does not exactly match with that of Multiset.antidiagonal
defined in Mathlib.Data.Multiset.Antidiagonal
, because of the multiplicities.
Indeed, by counting multiplicities, Multiset Ξ±
is equivalent to Ξ± ββ β
,
but Finset.antidiagonal
and Multiset.antidiagonal
will return different objects.
For example, for s : Multiset β := {0,0,0}
, Multiset.antidiagonal s
has 8 elements
but Finset.antidiagonal s
has only 4.
def s : Multiset β := {0, 0, 0}
#eval (Finset.antidiagonal s).card -- 4
#eval Multiset.card (Multiset.antidiagonal s) -- 8
HasMulAntidiagonal
(for monoids).
For PNat
, we will recover the set of divisors of a strictly positive integer.This closes #7917
Co-authored by: MarΓa InΓ©s de Frutos-FernΓ‘ndez <mariaines.dff@gmail.com> and Eric Wieser <efw27@cam.ac.uk>
Co-authored-by: Antoine Chambert-Loir <antoine.chambert-loir@math.univ-paris-diderot.fr> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -271,8 +271,8 @@ theorem exp_add_of_commute_of_mem_ball [CharZero π] {x y : πΈ} (hxy : Commu
ext
rw [hxy.add_pow' _, Finset.smul_sum]
refine' tsum_congr fun n => Finset.sum_congr rfl fun kl hkl => _
- rw [nsmul_eq_smul_cast π, smul_smul, smul_mul_smul, β Finset.Nat.mem_antidiagonal.mp hkl,
- Nat.cast_add_choose, Finset.Nat.mem_antidiagonal.mp hkl]
+ rw [nsmul_eq_smul_cast π, smul_smul, smul_mul_smul, β Finset.mem_antidiagonal.mp hkl,
+ Nat.cast_add_choose, Finset.mem_antidiagonal.mp hkl]
congr 1
have : (n ! : π) β 0 := Nat.cast_ne_zero.mpr n.factorial_ne_zero
field_simp [this]
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -303,7 +303,8 @@ theorem isUnit_exp_of_mem_ball [CharZero π] {x : πΈ}
theorem invOf_exp_of_mem_ball [CharZero π] {x : πΈ}
(hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) [Invertible (exp π x)] :
- β
(exp π x) = exp π (-x) := by letI := invertibleExpOfMemBall hx; convert(rfl : β
(exp π x) = _)
+ β
(exp π x) = exp π (-x) := by
+ letI := invertibleExpOfMemBall hx; convert (rfl : β
(exp π x) = _)
#align inv_of_exp_of_mem_ball invOf_exp_of_mem_ball
/-- Any continuous ring homomorphism commutes with `exp`. -/
For example, the page of Mathlib.Data.List.BigOperators.Basic
is trying to link to Mathlib.Data.List.Defs
using ./defs
but that becomes ../../../../././defs
and a broken link.
Co-authored-by: Malvin Gattinger <malvin@w4eg.de>
@@ -84,7 +84,7 @@ variable {πΈ}
It is defined as the sum of the `FormalMultilinearSeries` `expSeries π πΈ`.
Note that when `πΈ = Matrix n n π`, this is the **Matrix Exponential**; see
-[`Analysis.NormedSpace.MatrixExponential`](../MatrixExponential) for lemmas specific to that
+[`Analysis.NormedSpace.MatrixExponential`](./MatrixExponential) for lemmas specific to that
case. -/
noncomputable def exp (x : πΈ) : πΈ :=
(expSeries π πΈ).sum x
@@ -312,7 +312,7 @@ theorem map_exp_of_mem_ball {F} [RingHomClass F πΈ πΉ] (f : F) (hf : Continu
rw [exp_eq_tsum, exp_eq_tsum]
refine' ((expSeries_summable_of_mem_ball' _ hx).hasSum.map f hf).tsum_eq.symm.trans _
dsimp only [Function.comp]
- simp_rw [one_div, map_inv_nat_cast_smul f π π, map_pow]
+ simp_rw [map_inv_nat_cast_smul f π π, map_pow]
#align map_exp_of_mem_ball map_exp_of_mem_ball
end CompleteAlgebra
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -70,7 +70,7 @@ open scoped Nat Topology BigOperators ENNReal
section TopologicalAlgebra
-variable (π πΈ : Type _) [Field π] [Ring πΈ] [Algebra π πΈ] [TopologicalSpace πΈ] [TopologicalRing πΈ]
+variable (π πΈ : Type*) [Field π] [Ring πΈ] [Algebra π πΈ] [TopologicalSpace πΈ] [TopologicalRing πΈ]
/-- `expSeries π πΈ` is the `FormalMultilinearSeries` whose `n`-th term is the map
`(xα΅’) : πΈβΏ β¦ (1/n! : π) β’ β xα΅’`. Its sum is the exponential map `exp π : πΈ β πΈ`. -/
@@ -161,7 +161,7 @@ end TopologicalAlgebra
section TopologicalDivisionAlgebra
-variable {π πΈ : Type _} [Field π] [DivisionRing πΈ] [Algebra π πΈ] [TopologicalSpace πΈ]
+variable {π πΈ : Type*} [Field π] [DivisionRing πΈ] [Algebra π πΈ] [TopologicalSpace πΈ]
[TopologicalRing πΈ]
theorem expSeries_apply_eq_div (x : πΈ) (n : β) : (expSeries π πΈ n fun _ => x) = x ^ n / n ! := by
@@ -188,7 +188,7 @@ section Normed
section AnyFieldAnyAlgebra
-variable {π πΈ πΉ : Type _} [NontriviallyNormedField π]
+variable {π πΈ πΉ : Type*} [NontriviallyNormedField π]
variable [NormedRing πΈ] [NormedRing πΉ] [NormedAlgebra π πΈ] [NormedAlgebra π πΉ]
@@ -327,7 +327,7 @@ end AnyFieldAnyAlgebra
section AnyFieldDivisionAlgebra
-variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
+variable {π πΈ : Type*} [NontriviallyNormedField π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
variable (π)
@@ -363,7 +363,7 @@ end AnyFieldDivisionAlgebra
section AnyFieldCommAlgebra
-variable {π πΈ : Type _} [NontriviallyNormedField π] [NormedCommRing πΈ] [NormedAlgebra π πΈ]
+variable {π πΈ : Type*} [NontriviallyNormedField π] [NormedCommRing πΈ] [NormedAlgebra π πΈ]
[CompleteSpace πΈ]
/-- In a commutative Banach-algebra `πΈ` over a normed field `π` of characteristic zero,
@@ -380,7 +380,7 @@ section IsROrC
section AnyAlgebra
-variable (π πΈ πΉ : Type _) [IsROrC π] [NormedRing πΈ] [NormedAlgebra π πΈ]
+variable (π πΈ πΉ : Type*) [IsROrC π] [NormedRing πΈ] [NormedAlgebra π πΈ]
variable [NormedRing πΉ] [NormedAlgebra π πΉ]
@@ -544,20 +544,20 @@ theorem Prod.snd_exp [CompleteSpace πΉ] (x : πΈ Γ πΉ) : (exp π x).snd
#align prod.snd_exp Prod.snd_exp
@[simp]
-theorem Pi.exp_apply {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
+theorem Pi.exp_apply {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) (i : ΞΉ) :
exp π x i = exp π (x i) :=
map_exp _ (Pi.evalRingHom πΈ i) (continuous_apply _) x
-- porting note: Lean can now handle Ξ -types in type class inference!
#align pi.exp_apply Pi.exp_apply
-theorem Pi.exp_def {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
+theorem Pi.exp_def {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [β i, NormedRing (πΈ i)]
[β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i) :
exp π x = fun i => exp π (x i) :=
funext <| Pi.exp_apply π x
#align pi.exp_def Pi.exp_def
-theorem Function.update_exp {ΞΉ : Type _} {πΈ : ΞΉ β Type _} [Fintype ΞΉ] [DecidableEq ΞΉ]
+theorem Function.update_exp {ΞΉ : Type*} {πΈ : ΞΉ β Type*} [Fintype ΞΉ] [DecidableEq ΞΉ]
[β i, NormedRing (πΈ i)] [β i, NormedAlgebra π (πΈ i)] [β i, CompleteSpace (πΈ i)] (x : β i, πΈ i)
(j : ΞΉ) (xj : πΈ j) :
Function.update (exp π x) j (exp π xj) = exp π (Function.update x j xj) := by
@@ -576,7 +576,7 @@ end AnyAlgebra
section DivisionAlgebra
-variable {π πΈ : Type _} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
+variable {π πΈ : Type*} [IsROrC π] [NormedDivisionRing πΈ] [NormedAlgebra π πΈ]
variable (π)
@@ -619,7 +619,7 @@ end DivisionAlgebra
section CommAlgebra
-variable {π πΈ : Type _} [IsROrC π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
+variable {π πΈ : Type*} [IsROrC π] [NormedCommRing πΈ] [NormedAlgebra π πΈ] [CompleteSpace πΈ]
/-- In a commutative Banach-algebra `πΈ` over `π = β` or `π = β`,
`exp π (x+y) = (exp π x) * (exp π y)`. -/
@@ -642,7 +642,7 @@ end Normed
section ScalarTower
-variable (π π' πΈ : Type _) [Field π] [Field π'] [Ring πΈ] [Algebra π πΈ] [Algebra π' πΈ]
+variable (π π' πΈ : Type*) [Field π] [Field π'] [Ring πΈ] [Algebra π πΈ] [Algebra π' πΈ]
[TopologicalSpace πΈ] [TopologicalRing πΈ]
/-- If a normed ring `πΈ` is a normed algebra over two fields, then they define the same
@@ -2,11 +2,6 @@
Copyright (c) 2021 Anatole Dedecker. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker, Eric Wieser
-
-! This file was ported from Lean 3 source module analysis.normed_space.exponential
-! leanprover-community/mathlib commit 62748956a1ece9b26b33243e2e3a2852176666f5
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Analytic.Basic
import Mathlib.Analysis.Complex.Basic
@@ -15,6 +10,8 @@ import Mathlib.Data.Nat.Choose.Cast
import Mathlib.Data.Finset.NoncommProd
import Mathlib.Topology.Algebra.Algebra
+#align_import analysis.normed_space.exponential from "leanprover-community/mathlib"@"62748956a1ece9b26b33243e2e3a2852176666f5"
+
/-!
# Exponential in a Banach algebra
Currently, when s
is a fintype, it is possible that β' x, f x β β x, f x
(if the topology of the target space is not separated), as the infinite sum β'
picks some limit if it exists, but not necessarily the one we prefer.
This PR tweaks the definition of infinite sums to make sure that, when a function is finitely supported, the chosen limit for its infinite sum is the (finite) sum of its values. This makes it possible to remove a few separation assumption here and there.
@@ -121,7 +121,7 @@ theorem expSeries_apply_zero (n : β) :
#align exp_series_apply_zero expSeries_apply_zero
@[simp]
-theorem exp_zero [T2Space πΈ] : exp π (0 : πΈ) = 1 := by
+theorem exp_zero : exp π (0 : πΈ) = 1 := by
simp_rw [exp_eq_tsum, β expSeries_apply_eq, expSeries_apply_zero, tsum_pi_single]
#align exp_zero exp_zero
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -255,7 +255,7 @@ theorem continuousOn_exp : ContinuousOn (exp π : πΈ β πΈ) (EMetric.ball
theorem analyticAt_exp_of_mem_ball (x : πΈ) (hx : x β EMetric.ball (0 : πΈ) (expSeries π πΈ).radius) :
AnalyticAt π (exp π) x := by
by_cases h : (expSeries π πΈ).radius = 0
- Β· rw [h] at hx ; exact (ENNReal.not_lt_zero hx).elim
+ Β· rw [h] at hx; exact (ENNReal.not_lt_zero hx).elim
Β· have h := pos_iff_ne_zero.mpr h
exact (hasFPowerSeriesOnBall_exp_of_radius_pos h).analyticAt_of_mem hx
#align analytic_at_exp_of_mem_ball analyticAt_exp_of_mem_ball
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