@@ -3,7 +3,6 @@ Copyright (c) 2021 Anatole Dedecker. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Anatole Dedecker
5
5
-/
6
- import algebra.char_p.algebra
7
6
import analysis.calculus.deriv
8
7
import analysis.calculus.fderiv_analytic
9
8
import analysis.specific_limits
@@ -56,9 +55,7 @@ We prove most result for an arbitrary field `𝕂`, and then specialize to `𝕂
56
55
57
56
### Other useful compatibility results
58
57
59
- - `exp_eq_exp_of_field_extension` : given `𝕂' / 𝕂` a normed field extension (that is, an instance
60
- of `normed_algebra 𝕂 𝕂'`) and a normed algebra `𝔸` over both `𝕂` and `𝕂'` then
61
- `exp 𝕂 𝔸 = exp 𝕂' 𝔸`
58
+ - `exp_eq_exp` : if `𝔸` is a normed algebra over two fields `𝕂` and `𝕂'`, then `exp 𝕂 𝔸 = exp 𝕂' 𝔸`
62
59
- `complex.exp_eq_exp_ℂ_ℂ` : `complex.exp = exp ℂ ℂ`
63
60
- `real.exp_eq_exp_ℝ_ℝ` : `real.exp = exp ℝ ℝ`
64
61
@@ -330,36 +327,6 @@ section any_algebra
330
327
331
328
variables {𝕂 𝔸 : Type *} [is_R_or_C 𝕂] [normed_ring 𝔸] [normed_algebra 𝕂 𝔸]
332
329
333
- -- This is private because one can use the more general `exp_series_summable_field` intead.
334
- private lemma real.summable_pow_div_factorial (x : ℝ) : summable (λ n : ℕ, x^n / n!) :=
335
- begin
336
- by_cases h : x = 0 ,
337
- { refine summable_of_norm_bounded_eventually 0 summable_zero _,
338
- filter_upwards [eventually_cofinite_ne 0 ],
339
- intros n hn,
340
- rw [h, zero_pow' n hn, zero_div, norm_zero],
341
- exact le_refl _ },
342
- { refine summable_of_ratio_test_tendsto_lt_one zero_lt_one (eventually_of_forall $
343
- λ n, div_ne_zero (pow_ne_zero n h) (nat.cast_ne_zero.mpr n.factorial_ne_zero)) _,
344
- suffices : ∀ n : ℕ, ∥x^(n+1 ) / (n+1 )!∥ / ∥x^n / n!∥ = ∥x∥ / ∥((n+1 : ℕ) : ℝ)∥,
345
- { conv {congr, funext, rw [this , real.norm_coe_nat] },
346
- exact (tendsto_const_div_at_top_nhds_0_nat _).comp (tendsto_add_at_top_nat 1 ) },
347
- intro n,
348
- calc ∥x^(n+1 ) / (n+1 )!∥ / ∥x^n / n!∥
349
- = (∥x∥^n * ∥x∥) * (∥(n! : ℝ)∥⁻¹ * ∥((n+1 : ℕ) : ℝ)∥⁻¹) * ((∥x∥^n)⁻¹ * ∥(n! : ℝ)∥) :
350
- by rw [ normed_field.norm_div, normed_field.norm_div,
351
- normed_field.norm_pow, normed_field.norm_pow, pow_add, pow_one,
352
- div_eq_mul_inv, div_eq_mul_inv, div_eq_mul_inv, mul_inv₀, inv_inv₀,
353
- nat.factorial_succ, nat.cast_mul, normed_field.norm_mul, mul_inv_rev₀ ]
354
- ... = (∥x∥ * ∥((n+1 : ℕ) : ℝ)∥⁻¹) * (∥x∥^n * (∥x∥^n)⁻¹) * (∥(n! : ℝ)∥ * ∥(n! : ℝ)∥⁻¹) :
355
- by linarith -- faster than ac_refl !
356
- ... = (∥x∥ * ∥((n+1 : ℕ) : ℝ)∥⁻¹) * 1 * 1 :
357
- by rw [mul_inv_cancel (pow_ne_zero _ $ λ h', h $ norm_eq_zero.mp h'), mul_inv_cancel
358
- (λ h', n.factorial_ne_zero $ nat.cast_eq_zero.mp $ norm_eq_zero.mp h')];
359
- apply_instance
360
- ... = ∥x∥ / ∥((n+1 : ℕ) : ℝ)∥ : by rw [mul_one, mul_one, ← div_eq_mul_inv] }
361
- end
362
-
363
330
variables (𝕂 𝔸)
364
331
365
332
/-- In a normed algebra `𝔸` over `𝕂 = ℝ` or `𝕂 = ℂ`, the series defining the exponential map
@@ -521,41 +488,25 @@ end is_R_or_C
521
488
section scalar_tower
522
489
523
490
variables (𝕂 𝕂' 𝔸 : Type *) [nondiscrete_normed_field 𝕂] [nondiscrete_normed_field 𝕂']
524
- [normed_ring 𝔸] [normed_algebra 𝕂 𝔸] [normed_algebra 𝕂 𝕂'] [normed_algebra 𝕂' 𝔸]
525
- [is_scalar_tower 𝕂 𝕂' 𝔸]
491
+ [normed_ring 𝔸] [normed_algebra 𝕂 𝔸] [normed_algebra 𝕂' 𝔸]
526
492
527
- lemma exp_series_eq_exp_series_of_field_extension (n : ℕ) (x : 𝔸) :
493
+ /-- If a normed ring `𝔸` is a normed algebra over two fields, then they define the same
494
+ `exp_series` on `𝔸`. -/
495
+ lemma exp_series_eq_exp_series (n : ℕ) (x : 𝔸) :
528
496
(exp_series 𝕂 𝔸 n (λ _, x)) = (exp_series 𝕂' 𝔸 n (λ _, x)) :=
529
- begin
530
- let p := ring_char 𝕂,
531
- haveI : char_p 𝕂' p := char_p_of_injective_algebra_map (algebra_map 𝕂 𝕂').injective p,
532
- rw [exp_series, exp_series,
533
- smul_apply, mk_pi_algebra_fin_apply, list.of_fn_const, list.prod_repeat,
534
- smul_apply, mk_pi_algebra_fin_apply, list.of_fn_const, list.prod_repeat,
535
- ←inv_eq_one_div, ←inv_eq_one_div, ← smul_one_smul 𝕂' (_ : 𝕂) (_ : 𝔸)],
536
- congr,
537
- symmetry,
538
- have key : (n! : 𝕂) = 0 ↔ (n! : 𝕂') = 0 ,
539
- { rw [char_p.cast_eq_zero_iff 𝕂' p, char_p.cast_eq_zero_iff 𝕂 p] },
540
- by_cases h : (n! : 𝕂) = 0 ,
541
- { have h' : (n! : 𝕂') = 0 := key.mp h,
542
- field_simp [h, h'] },
543
- { have h' : (n! : 𝕂') ≠ 0 := λ hyp, h (key.mpr hyp),
544
- suffices : (n! : 𝕂) • (n!⁻¹ : 𝕂') = (n! : 𝕂) • ((n!⁻¹ : 𝕂) • 1 ),
545
- { apply_fun (λ (x : 𝕂'), (n!⁻¹ : 𝕂) • x) at this ,
546
- rwa [inv_smul_smul₀ h, inv_smul_smul₀ h] at this },
547
- rw [← smul_assoc, ← nsmul_eq_smul_cast, nsmul_eq_smul_cast 𝕂' _ (_ : 𝕂')],
548
- field_simp [h, h'] }
549
- end
550
-
551
- /-- Given `𝕂' / 𝕂` a normed field extension (that is, an instance of `normed_algebra 𝕂 𝕂'`) and a
552
- normed algebra `𝔸` over both `𝕂` and `𝕂'` then `exp 𝕂 𝔸 = exp 𝕂' 𝔸`. -/
553
- lemma exp_eq_exp_of_field_extension : exp 𝕂 𝔸 = exp 𝕂' 𝔸 :=
497
+ by rw [exp_series, exp_series,
498
+ smul_apply, mk_pi_algebra_fin_apply, list.of_fn_const, list.prod_repeat,
499
+ smul_apply, mk_pi_algebra_fin_apply, list.of_fn_const, list.prod_repeat,
500
+ one_div, one_div, inv_nat_cast_smul_eq 𝕂 𝕂']
501
+
502
+ /-- If a normed ring `𝔸` is a normed algebra over two fields, then they define the same
503
+ exponential function on `𝔸`. -/
504
+ lemma exp_eq_exp : exp 𝕂 𝔸 = exp 𝕂' 𝔸 :=
554
505
begin
555
506
ext,
556
507
rw [exp, exp],
557
508
refine tsum_congr (λ n, _),
558
- rw exp_series_eq_exp_series_of_field_extension 𝕂 𝕂' 𝔸 n x
509
+ rw exp_series_eq_exp_series 𝕂 𝕂' 𝔸 n x
559
510
end
560
511
561
512
end scalar_tower
@@ -571,7 +522,7 @@ begin
571
522
end
572
523
573
524
lemma exp_ℝ_ℂ_eq_exp_ℂ_ℂ : exp ℝ ℂ = exp ℂ ℂ :=
574
- exp_eq_exp_of_field_extension ℝ ℂ ℂ
525
+ exp_eq_exp ℝ ℂ ℂ
575
526
576
527
end complex
577
528
0 commit comments