Skip to content

Commit

Permalink
chore(analysis/normed_space/exponential): Make the 𝔸 argument impli…
Browse files Browse the repository at this point in the history
…cit (#13986)

`exp 𝕂 𝔸` is now just `exp 𝕂`.

This also renames two lemmas that refer to this argument in their name to no longer do so.

In a few places we have to add type annotations where they weren't needed before, but nowhere do we need to resort to `@`.
  • Loading branch information
eric-wieser committed May 6, 2022
1 parent eea16dc commit 27e105d
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 130 deletions.
162 changes: 82 additions & 80 deletions src/analysis/normed_space/exponential.lean

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions src/analysis/normed_space/spectrum.lean
Expand Up @@ -371,11 +371,11 @@ section exp_mapping

local notation `↑ₐ` := algebra_map π•œ A

/-- For `π•œ = ℝ` or `π•œ = β„‚`, `exp π•œ π•œ` maps the spectrum of `a` into the spectrum of `exp π•œ A a`. -/
/-- For `π•œ = ℝ` or `π•œ = β„‚`, `exp π•œ` maps the spectrum of `a` into the spectrum of `exp π•œ a`. -/
theorem exp_mem_exp [is_R_or_C π•œ] [normed_ring A] [normed_algebra π•œ A] [complete_space A]
(a : A) {z : π•œ} (hz : z ∈ spectrum π•œ a) : exp π•œ π•œ z ∈ spectrum π•œ (exp π•œ A a) :=
(a : A) {z : π•œ} (hz : z ∈ spectrum π•œ a) : exp π•œ z ∈ spectrum π•œ (exp π•œ a) :=
begin
have hexpmul : exp π•œ A a = exp π•œ A (a - ↑ₐ z) * ↑ₐ (exp π•œ π•œ z),
have hexpmul : exp π•œ a = exp π•œ (a - ↑ₐ z) * ↑ₐ (exp π•œ z),
{ rw [algebra_map_exp_comm z, ←exp_add_of_commute (algebra.commutes z (a - ↑ₐz)).symm,
sub_add_cancel] },
let b := βˆ‘' n : β„•, ((n + 1).factorial⁻¹ : π•œ) β€’ (a - ↑ₐz) ^ n,
Expand All @@ -391,13 +391,13 @@ begin
{ simpa only [mul_smul_comm, pow_succ] using hb.tsum_mul_left (a - ↑ₐz) },
have h₁ : βˆ‘' n : β„•, ((n + 1).factorial⁻¹ : π•œ) β€’ (a - ↑ₐz) ^ (n + 1) = b * (a - ↑ₐz),
{ simpa only [pow_succ', algebra.smul_mul_assoc] using hb.tsum_mul_right (a - ↑ₐz) },
have h₃ : exp π•œ A (a - ↑ₐz) = 1 + (a - ↑ₐz) * b,
have h₃ : exp π•œ (a - ↑ₐz) = 1 + (a - ↑ₐz) * b,
{ rw exp_eq_tsum,
convert tsum_eq_zero_add (exp_series_summable' (a - ↑ₐz)),
simp only [nat.factorial_zero, nat.cast_one, inv_one, pow_zero, one_smul],
exact hβ‚€.symm },
rw [spectrum.mem_iff, is_unit.sub_iff, ←one_mul (↑ₐ(exp π•œ π•œ z)), hexpmul, ←_root_.sub_mul,
commute.is_unit_mul_iff (algebra.commutes (exp π•œ π•œ z) (exp π•œ A (a - ↑ₐz) - 1)).symm,
rw [spectrum.mem_iff, is_unit.sub_iff, ←one_mul (↑ₐ(exp π•œ z)), hexpmul, ←_root_.sub_mul,
commute.is_unit_mul_iff (algebra.commutes (exp π•œ z) (exp π•œ (a - ↑ₐz) - 1)).symm,
sub_eq_iff_eq_add'.mpr h₃, commute.is_unit_mul_iff (hβ‚€ β–Έ h₁ : (a - ↑ₐz) * b = b * (a - ↑ₐz))],
exact not_and_of_not_left _ (not_and_of_not_left _ ((not_iff_not.mpr is_unit.sub_iff).mp hz)),
end
Expand Down
6 changes: 3 additions & 3 deletions src/analysis/normed_space/star/exponential.lean
Expand Up @@ -29,20 +29,20 @@ variables {A : Type*}
open complex

lemma self_adjoint.exp_i_smul_unitary {a : A} (ha : a ∈ self_adjoint A) :
exp β„‚ A (I β€’ a) ∈ unitary A :=
exp β„‚ (I β€’ a) ∈ unitary A :=
begin
rw [unitary.mem_iff, star_exp],
simp only [star_smul, is_R_or_C.star_def, self_adjoint.mem_iff.mp ha, conj_I, neg_smul],
rw ←@exp_add_of_commute β„‚ A _ _ _ _ _ _ ((commute.refl (I β€’ a)).neg_left),
rw ←@exp_add_of_commute β„‚ A _ _ _ _ _ _ ((commute.refl (I β€’ a)).neg_right),
simpa only [add_right_neg, add_left_neg, and_self] using (exp_zero : exp β„‚ A 0 = 1),
simpa only [add_right_neg, add_left_neg, and_self] using (exp_zero : exp β„‚ (0 : A) = 1),
end

/-- The map from the selfadjoint real subspace to the unitary group. This map only makes sense
over β„‚. -/
@[simps]
noncomputable def self_adjoint.exp_unitary (a : self_adjoint A) : unitary A :=
⟨exp β„‚ A (I β€’ a), self_adjoint.exp_i_smul_unitary (a.property)⟩
⟨exp β„‚ (I β€’ a), self_adjoint.exp_i_smul_unitary (a.property)⟩

open self_adjoint

Expand Down
4 changes: 2 additions & 2 deletions src/analysis/normed_space/star/spectrum.lean
Expand Up @@ -88,11 +88,11 @@ theorem self_adjoint.mem_spectrum_eq_re [star_module β„‚ A] [nontrivial A] {a :
(ha : a ∈ self_adjoint A) {z : β„‚} (hz : z ∈ spectrum β„‚ a) : z = z.re :=
begin
let Iu := units.mk0 I I_ne_zero,
have : exp β„‚ β„‚ (I β€’ z) ∈ spectrum β„‚ (exp β„‚ A (I β€’ a)),
have : exp β„‚ (I β€’ z) ∈ spectrum β„‚ (exp β„‚ (I β€’ a)),
by simpa only [units.smul_def, units.coe_mk0]
using spectrum.exp_mem_exp (Iu β€’ a) (smul_mem_smul_iff.mpr hz),
exact complex.ext (of_real_re _)
(by simpa only [←complex.exp_eq_exp_β„‚_β„‚, mem_sphere_zero_iff_norm, norm_eq_abs, abs_exp,
(by simpa only [←complex.exp_eq_exp_β„‚, mem_sphere_zero_iff_norm, norm_eq_abs, abs_exp,
real.exp_eq_one_iff, smul_eq_mul, I_mul, neg_eq_zero]
using spectrum.subset_circle_of_unitary (self_adjoint.exp_i_smul_unitary ha) this),
end
Expand Down
76 changes: 38 additions & 38 deletions src/analysis/special_functions/exponential.lean
Expand Up @@ -11,7 +11,7 @@ import topology.metric_space.cau_seq_filter
/-!
# Calculus results on exponential in a Banach algebra
In this file, we prove basic properties about the derivative of the exponential map `exp 𝕂 𝔸`
In this file, we prove basic properties about the derivative of the exponential map `exp 𝕂`
in a Banach algebra `𝔸` over a field `𝕂`. We keep them separate from the main file
`analysis/normed_space/exponential` in order to minimize dependencies.
Expand All @@ -21,26 +21,26 @@ We prove most result for an arbitrary field `𝕂`, and then specialize to `𝕂
### General case
- `has_strict_fderiv_at_exp_zero_of_radius_pos` : `exp 𝕂 𝔸` has strict FrΓ©chet-derivative
- `has_strict_fderiv_at_exp_zero_of_radius_pos` : `exp 𝕂` has strict FrΓ©chet-derivative
`1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero
(see also `has_strict_deriv_at_exp_zero_of_radius_pos` for the case `𝔸 = 𝕂`)
- `has_strict_fderiv_at_exp_of_lt_radius` : if `𝕂` has characteristic zero and `𝔸` is commutative,
then given a point `x` in the disk of convergence, `exp 𝕂 𝔸` as strict FrΓ©chet-derivative
`exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at x (see also `has_strict_deriv_at_exp_of_lt_radius` for the case
then given a point `x` in the disk of convergence, `exp 𝕂` as strict FrΓ©chet-derivative
`exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at x (see also `has_strict_deriv_at_exp_of_lt_radius` for the case
`𝔸 = 𝕂`)
### `𝕂 = ℝ` or `𝕂 = β„‚`
- `has_strict_fderiv_at_exp_zero` : `exp 𝕂 𝔸` has strict FrΓ©chet-derivative `1 : 𝔸 β†’L[𝕂] 𝔸` at zero
- `has_strict_fderiv_at_exp_zero` : `exp 𝕂` has strict FrΓ©chet-derivative `1 : 𝔸 β†’L[𝕂] 𝔸` at zero
(see also `has_strict_deriv_at_exp_zero` for the case `𝔸 = 𝕂`)
- `has_strict_fderiv_at_exp` : if `𝔸` is commutative, then given any point `x`, `exp 𝕂 𝔸` as strict
FrΓ©chet-derivative `exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at x (see also `has_strict_deriv_at_exp` for the
- `has_strict_fderiv_at_exp` : if `𝔸` is commutative, then given any point `x`, `exp 𝕂` as strict
FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at x (see also `has_strict_deriv_at_exp` for the
case `𝔸 = 𝕂`)
### Compatibilty with `real.exp` and `complex.exp`
- `complex.exp_eq_exp_β„‚_β„‚` : `complex.exp = exp β„‚ β„‚`
- `real.exp_eq_exp_ℝ_ℝ` : `real.exp = exp ℝ ℝ`
- `complex.exp_eq_exp_β„‚` : `complex.exp = exp β„‚ β„‚`
- `real.exp_eq_exp_ℝ` : `real.exp = exp ℝ ℝ`
-/

Expand All @@ -55,7 +55,7 @@ variables {𝕂 𝔸 : Type*} [nondiscrete_normed_field 𝕂] [normed_ring 𝔸]
/-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has strict FrΓ©chet-derivative
`1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
lemma has_strict_fderiv_at_exp_zero_of_radius_pos (h : 0 < (exp_series 𝕂 𝔸).radius) :
has_strict_fderiv_at (exp 𝕂 𝔸) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
has_strict_fderiv_at (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
begin
convert (has_fpower_series_at_exp_zero_of_radius_pos h).has_strict_fderiv_at,
ext x,
Expand All @@ -66,7 +66,7 @@ end
/-- The exponential in a Banach-algebra `𝔸` over a normed field `𝕂` has FrΓ©chet-derivative
`1 : 𝔸 β†’L[𝕂] 𝔸` at zero, as long as it converges on a neighborhood of zero. -/
lemma has_fderiv_at_exp_zero_of_radius_pos (h : 0 < (exp_series 𝕂 𝔸).radius) :
has_fderiv_at (exp 𝕂 𝔸) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
has_fderiv_at (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
(has_strict_fderiv_at_exp_zero_of_radius_pos h).has_fderiv_at

end any_field_any_algebra
Expand All @@ -77,16 +77,16 @@ variables {𝕂 𝔸 : Type*} [nondiscrete_normed_field 𝕂] [normed_comm_ring
[complete_space 𝔸]

/-- The exponential map in a commutative Banach-algebra `𝔸` over a normed field `𝕂` of
characteristic zero has FrΓ©chet-derivative `exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in the
characteristic zero has FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in the
disk of convergence. -/
lemma has_fderiv_at_exp_of_mem_ball [char_zero 𝕂] {x : 𝔸}
(hx : x ∈ emetric.ball (0 : 𝔸) (exp_series 𝕂 𝔸).radius) :
has_fderiv_at (exp 𝕂 𝔸) (exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
has_fderiv_at (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
begin
have hpos : 0 < (exp_series 𝕂 𝔸).radius := (zero_le _).trans_lt hx,
rw has_fderiv_at_iff_is_o_nhds_zero,
suffices : (Ξ» h, exp 𝕂 𝔸 x * (exp 𝕂 𝔸 (0 + h) - exp 𝕂 𝔸 0 - continuous_linear_map.id 𝕂 𝔸 h))
=αΆ [𝓝 0] (Ξ» h, exp 𝕂 𝔸 (x + h) - exp 𝕂 𝔸 x - exp 𝕂 𝔸 x β€’ continuous_linear_map.id 𝕂 𝔸 h),
suffices : (Ξ» h, exp 𝕂 x * (exp 𝕂 (0 + h) - exp 𝕂 0 - continuous_linear_map.id 𝕂 𝔸 h))
=αΆ [𝓝 0] (Ξ» h, exp 𝕂 (x + h) - exp 𝕂 x - exp 𝕂 x β€’ continuous_linear_map.id 𝕂 𝔸 h),
{ refine (is_o.const_mul_left _ _).congr' this (eventually_eq.refl _ _),
rw ← has_fderiv_at_iff_is_o_nhds_zero,
exact has_fderiv_at_exp_zero_of_radius_pos hpos },
Expand All @@ -98,11 +98,11 @@ begin
end

/-- The exponential map in a commutative Banach-algebra `𝔸` over a normed field `𝕂` of
characteristic zero has strict FrΓ©chet-derivative `exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in
characteristic zero has strict FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x` in
the disk of convergence. -/
lemma has_strict_fderiv_at_exp_of_mem_ball [char_zero 𝕂] {x : 𝔸}
(hx : x ∈ emetric.ball (0 : 𝔸) (exp_series 𝕂 𝔸).radius) :
has_strict_fderiv_at (exp 𝕂 𝔸) (exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
has_strict_fderiv_at (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
let ⟨p, hp⟩ := analytic_at_exp_of_mem_ball x hx in
hp.has_fderiv_at.unique (has_fderiv_at_exp_of_mem_ball hx) β–Έ hp.has_strict_fderiv_at

Expand All @@ -113,29 +113,29 @@ section deriv
variables {𝕂 : Type*} [nondiscrete_normed_field 𝕂] [complete_space 𝕂]

/-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
`exp 𝕂 𝕂 x` at any point `x` in the disk of convergence. -/
`exp 𝕂 x` at any point `x` in the disk of convergence. -/
lemma has_strict_deriv_at_exp_of_mem_ball [char_zero 𝕂] {x : 𝕂}
(hx : x ∈ emetric.ball (0 : 𝕂) (exp_series 𝕂 𝕂).radius) :
has_strict_deriv_at (exp 𝕂 𝕂) (exp 𝕂 𝕂 x) x :=
has_strict_deriv_at (exp 𝕂) (exp 𝕂 x) x :=
by simpa using (has_strict_fderiv_at_exp_of_mem_ball hx).has_strict_deriv_at

/-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
`exp 𝕂 𝕂 x` at any point `x` in the disk of convergence. -/
`exp 𝕂 x` at any point `x` in the disk of convergence. -/
lemma has_deriv_at_exp_of_mem_ball [char_zero 𝕂] {x : 𝕂}
(hx : x ∈ emetric.ball (0 : 𝕂) (exp_series 𝕂 𝕂).radius) :
has_deriv_at (exp 𝕂 𝕂) (exp 𝕂 𝕂 x) x :=
has_deriv_at (exp 𝕂) (exp 𝕂 x) x :=
(has_strict_deriv_at_exp_of_mem_ball hx).has_deriv_at

/-- The exponential map in a complete normed field `𝕂` of characteristic zero has strict derivative
`1` at zero, as long as it converges on a neighborhood of zero. -/
lemma has_strict_deriv_at_exp_zero_of_radius_pos (h : 0 < (exp_series 𝕂 𝕂).radius) :
has_strict_deriv_at (exp 𝕂 𝕂) 1 0 :=
has_strict_deriv_at (exp 𝕂) (1 : 𝕂) 0 :=
(has_strict_fderiv_at_exp_zero_of_radius_pos h).has_strict_deriv_at

/-- The exponential map in a complete normed field `𝕂` of characteristic zero has derivative
`1` at zero, as long as it converges on a neighborhood of zero. -/
lemma has_deriv_at_exp_zero_of_radius_pos (h : 0 < (exp_series 𝕂 𝕂).radius) :
has_deriv_at (exp 𝕂 𝕂) 1 0 :=
has_deriv_at (exp 𝕂) (1 : 𝕂) 0 :=
(has_strict_deriv_at_exp_zero_of_radius_pos h).has_deriv_at

end deriv
Expand All @@ -148,13 +148,13 @@ variables {𝕂 𝔸 : Type*} [is_R_or_C 𝕂] [normed_ring 𝔸] [normed_algebr
/-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict FrΓ©chet-derivative
`1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
lemma has_strict_fderiv_at_exp_zero :
has_strict_fderiv_at (exp 𝕂 𝔸) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
has_strict_fderiv_at (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
has_strict_fderiv_at_exp_zero_of_radius_pos (exp_series_radius_pos 𝕂 𝔸)

/-- The exponential in a Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has FrΓ©chet-derivative
`1 : 𝔸 β†’L[𝕂] 𝔸` at zero. -/
lemma has_fderiv_at_exp_zero :
has_fderiv_at (exp 𝕂 𝔸) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
has_fderiv_at (exp 𝕂) (1 : 𝔸 β†’L[𝕂] 𝔸) 0 :=
has_strict_fderiv_at_exp_zero.has_fderiv_at

end is_R_or_C_any_algebra
Expand All @@ -165,15 +165,15 @@ variables {𝕂 𝔸 : Type*} [is_R_or_C 𝕂] [normed_comm_ring 𝔸] [normed_a
[complete_space 𝔸]

/-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has strict
FrΓ©chet-derivative `exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
lemma has_strict_fderiv_at_exp {x : 𝔸} :
has_strict_fderiv_at (exp 𝕂 𝔸) (exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
has_strict_fderiv_at (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
has_strict_fderiv_at_exp_of_mem_ball ((exp_series_radius_eq_top 𝕂 𝔸).symm β–Έ edist_lt_top _ _)

/-- The exponential map in a commutative Banach-algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = β„‚` has
FrΓ©chet-derivative `exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
FrΓ©chet-derivative `exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸` at any point `x`. -/
lemma has_fderiv_at_exp {x : 𝔸} :
has_fderiv_at (exp 𝕂 𝔸) (exp 𝕂 𝔸 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
has_fderiv_at (exp 𝕂) (exp 𝕂 x β€’ 1 : 𝔸 β†’L[𝕂] 𝔸) x :=
has_strict_fderiv_at_exp.has_fderiv_at

end is_R_or_C_comm_algebra
Expand All @@ -182,29 +182,29 @@ section deriv_R_or_C

variables {𝕂 : Type*} [is_R_or_C 𝕂]

/-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `exp 𝕂 𝕂 x` at any point
/-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `exp 𝕂 x` at any point
`x`. -/
lemma has_strict_deriv_at_exp {x : 𝕂} : has_strict_deriv_at (exp 𝕂 𝕂) (exp 𝕂 𝕂 x) x :=
lemma has_strict_deriv_at_exp {x : 𝕂} : has_strict_deriv_at (exp 𝕂) (exp 𝕂 x) x :=
has_strict_deriv_at_exp_of_mem_ball ((exp_series_radius_eq_top 𝕂 𝕂).symm β–Έ edist_lt_top _ _)

/-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has derivative `exp 𝕂 𝕂 x` at any point `x`. -/
lemma has_deriv_at_exp {x : 𝕂} : has_deriv_at (exp 𝕂 𝕂) (exp 𝕂 𝕂 x) x :=
/-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has derivative `exp 𝕂 x` at any point `x`. -/
lemma has_deriv_at_exp {x : 𝕂} : has_deriv_at (exp 𝕂) (exp 𝕂 x) x :=
has_strict_deriv_at_exp.has_deriv_at

/-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has strict derivative `1` at zero. -/
lemma has_strict_deriv_at_exp_zero : has_strict_deriv_at (exp 𝕂 𝕂) 1 0 :=
lemma has_strict_deriv_at_exp_zero : has_strict_deriv_at (exp 𝕂) (1 : 𝕂) 0 :=
has_strict_deriv_at_exp_zero_of_radius_pos (exp_series_radius_pos 𝕂 𝕂)

/-- The exponential map in `𝕂 = ℝ` or `𝕂 = β„‚` has derivative `1` at zero. -/
lemma has_deriv_at_exp_zero :
has_deriv_at (exp 𝕂 𝕂) 1 0 :=
has_deriv_at (exp 𝕂) (1 : 𝕂) 0 :=
has_strict_deriv_at_exp_zero.has_deriv_at

end deriv_R_or_C

section complex

lemma complex.exp_eq_exp_β„‚_β„‚ : complex.exp = exp β„‚ β„‚ :=
lemma complex.exp_eq_exp_β„‚ : complex.exp = exp β„‚ :=
begin
refine funext (Ξ» x, _),
rw [complex.exp, exp_eq_tsum_field],
Expand All @@ -216,10 +216,10 @@ end complex

section real

lemma real.exp_eq_exp_ℝ_ℝ : real.exp = exp ℝ ℝ :=
lemma real.exp_eq_exp_ℝ : real.exp = exp ℝ :=
begin
refine funext (Ξ» x, _),
rw [real.exp, complex.exp_eq_exp_β„‚_β„‚, ← exp_ℝ_β„‚_eq_exp_β„‚_β„‚, exp_eq_tsum, exp_eq_tsum_field,
rw [real.exp, complex.exp_eq_exp_β„‚, ← exp_ℝ_β„‚_eq_exp_β„‚_β„‚, exp_eq_tsum, exp_eq_tsum_field,
← re_to_complex, ← re_clm_apply, re_clm.map_tsum (exp_series_summable' (x : β„‚))],
refine tsum_congr (Ξ» n, _),
rw [re_clm.map_smul, ← complex.of_real_pow, re_clm_apply, re_to_complex, complex.of_real_re,
Expand Down
2 changes: 1 addition & 1 deletion src/combinatorics/derangements/exponential.lean
Expand Up @@ -34,7 +34,7 @@ begin
apply has_sum.tendsto_sum_nat,
-- there's no specific lemma for ℝ that βˆ‘ x^k/k! sums to exp(x), but it's
-- true in more general fields, so use that lemma
rw real.exp_eq_exp_ℝ_ℝ,
rw real.exp_eq_exp_ℝ,
exact exp_series_field_has_sum_exp (-1 : ℝ) },
intro n,
rw [← int.cast_coe_nat, num_derangements_sum],
Expand Down

0 comments on commit 27e105d

Please sign in to comment.