Skip to content

Commit 781b85c

Browse files
committed
feat(Analysis/Analytic, Analysis/Calculus): allow more general types in SMul (leanprover-community#34515)
Relax typeclass assumptions in many lemmas about SMul on iterated derivs and analytic functions, and add variants without differentiability assumptions when the scalar type is a field/division ring.
1 parent ef8457c commit 781b85c

7 files changed

Lines changed: 324 additions & 110 deletions

File tree

Mathlib/Analysis/Analytic/Constructions.lean

Lines changed: 84 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ variable {E F G H : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E] [NormedAd
3434
[NormedSpace 𝕜 F] [NormedAddCommGroup G] [NormedSpace 𝕜 G] [NormedAddCommGroup H]
3535
[NormedSpace 𝕜 H]
3636

37-
variable {𝕝 : Type*} [NontriviallyNormedField 𝕝] [NormedAlgebra 𝕜 𝕝]
3837
variable {A : Type*} [NormedRing A] [NormedAlgebra 𝕜 A]
38+
variable {𝕝 : Type*} [NormedDivisionRing 𝕝] [NormedAlgebra 𝕜 𝕝]
3939

4040
/-!
4141
### Constants are analytic
@@ -70,7 +70,7 @@ theorem analyticOn_const {v : F} {s : Set E} : AnalyticOn 𝕜 (fun _ => v) s :=
7070
section
7171

7272
variable {f g : E → F} {pf pg : FormalMultilinearSeries 𝕜 E F} {s : Set E} {x : E} {r : ℝ≥0∞}
73-
{c : 𝕜}
73+
{R : Type*} [NormedRing R] [Module R F] [IsBoundedSMul R F] [SMulCommClass 𝕜 R F] {c : R}
7474

7575
theorem HasFPowerSeriesWithinOnBall.add (hf : HasFPowerSeriesWithinOnBall f pf s x r)
7676
(hg : HasFPowerSeriesWithinOnBall g pg s x r) :
@@ -109,6 +109,14 @@ theorem AnalyticAt.add (hf : AnalyticAt 𝕜 f x) (hg : AnalyticAt 𝕜 g x) :
109109
let ⟨_, hqf⟩ := hg
110110
(hpf.add hqf).analyticAt
111111

112+
theorem AnalyticOn.add (hf : AnalyticOn 𝕜 f s) (hg : AnalyticOn 𝕜 g s) :
113+
AnalyticOn 𝕜 (f + g) s :=
114+
fun z hz => (hf z hz).add (hg z hz)
115+
116+
theorem AnalyticOnNhd.add (hf : AnalyticOnNhd 𝕜 f s) (hg : AnalyticOnNhd 𝕜 g s) :
117+
AnalyticOnNhd 𝕜 (f + g) s :=
118+
fun z hz => (hf z hz).add (hg z hz)
119+
112120
theorem HasFPowerSeriesWithinOnBall.neg (hf : HasFPowerSeriesWithinOnBall f pf s x r) :
113121
HasFPowerSeriesWithinOnBall (-f) (-pf) s x r :=
114122
{ r_le := by
@@ -147,6 +155,12 @@ theorem AnalyticAt.neg (hf : AnalyticAt 𝕜 f x) : AnalyticAt 𝕜 (-f) x :=
147155
mp hf := by simpa using hf.neg
148156
mpr := .neg
149157

158+
theorem AnalyticOn.neg (hf : AnalyticOn 𝕜 f s) : AnalyticOn 𝕜 (-f) s :=
159+
fun z hz ↦ (hf z hz).neg
160+
161+
theorem AnalyticOnNhd.neg (hf : AnalyticOnNhd 𝕜 f s) : AnalyticOnNhd 𝕜 (-f) s :=
162+
fun z hz ↦ (hf z hz).neg
163+
150164
theorem HasFPowerSeriesWithinOnBall.sub (hf : HasFPowerSeriesWithinOnBall f pf s x r)
151165
(hg : HasFPowerSeriesWithinOnBall g pg s x r) :
152166
HasFPowerSeriesWithinOnBall (f - g) (pf - pg) s x r := by
@@ -174,6 +188,14 @@ theorem AnalyticAt.sub (hf : AnalyticAt 𝕜 f x) (hg : AnalyticAt 𝕜 g x) :
174188
AnalyticAt 𝕜 (f - g) x := by
175189
simpa only [sub_eq_add_neg] using hf.add hg.neg
176190

191+
theorem AnalyticOn.sub (hf : AnalyticOn 𝕜 f s) (hg : AnalyticOn 𝕜 g s) :
192+
AnalyticOn 𝕜 (f - g) s :=
193+
fun z hz => (hf z hz).sub (hg z hz)
194+
195+
theorem AnalyticOnNhd.sub (hf : AnalyticOnNhd 𝕜 f s) (hg : AnalyticOnNhd 𝕜 g s) :
196+
AnalyticOnNhd 𝕜 (f - g) s :=
197+
fun z hz => (hf z hz).sub (hg z hz)
198+
177199
theorem HasFPowerSeriesWithinOnBall.const_smul (hf : HasFPowerSeriesWithinOnBall f pf s x r) :
178200
HasFPowerSeriesWithinOnBall (c • f) (c • pf) s x r where
179201
r_le := le_trans hf.r_le pf.radius_le_smul
@@ -206,27 +228,30 @@ theorem AnalyticAt.const_smul (hf : AnalyticAt 𝕜 f x) : AnalyticAt 𝕜 (c
206228
let ⟨_, hpf⟩ := hf
207229
hpf.const_smul.analyticAt
208230

209-
theorem AnalyticOn.add (hf : AnalyticOn 𝕜 f s) (hg : AnalyticOn 𝕜 g s) :
210-
AnalyticOn 𝕜 (f + g) s :=
211-
fun z hz => (hf z hz).add (hg z hz)
231+
@[to_fun]
232+
theorem AnalyticOn.const_smul (hf : AnalyticOn 𝕜 f s) : AnalyticOn 𝕜 (c • f) s :=
233+
fun x hx ↦ (hf x hx).const_smul
212234

213-
theorem AnalyticOnNhd.add (hf : AnalyticOnNhd 𝕜 f s) (hg : AnalyticOnNhd 𝕜 g s) :
214-
AnalyticOnNhd 𝕜 (f + g) s :=
215-
fun z hz => (hf z hz).add (hg z hz)
235+
@[to_fun]
236+
theorem AnalyticOnNhd.const_smul (hf : AnalyticOnNhd 𝕜 f s) : AnalyticOnNhd 𝕜 (c • f) s :=
237+
fun x hx ↦ (hf x hx).const_smul
216238

217-
theorem AnalyticOn.neg (hf : AnalyticOn 𝕜 f s) : AnalyticOn 𝕜 (-f) s :=
218-
fun z hz ↦ (hf z hz).neg
239+
lemma AnalyticWithinAt.div_const {f : E → 𝕝} (hf : AnalyticWithinAt 𝕜 f s x) {c : 𝕝} :
240+
AnalyticWithinAt 𝕜 (f · / c) s x := by
241+
simpa [div_eq_mul_inv] using hf.const_smul (R := 𝕝ᵐᵒᵖ)
219242

220-
theorem AnalyticOnNhd.neg (hf : AnalyticOnNhd 𝕜 f s) : AnalyticOnNhd 𝕜 (-f) s :=
221-
fun z hz ↦ (hf z hz).neg
243+
@[fun_prop]
244+
lemma AnalyticAt.div_const {f : E → 𝕝} (hf : AnalyticAt 𝕜 f x) {c : 𝕝} :
245+
AnalyticAt 𝕜 (f · / c) x := by
246+
simpa [div_eq_mul_inv] using hf.const_smul (R := 𝕝ᵐᵒᵖ)
222247

223-
theorem AnalyticOn.sub (hf : AnalyticOn 𝕜 f s) (hg : AnalyticOn 𝕜 g s) :
224-
AnalyticOn 𝕜 (f - g) s :=
225-
fun z hz => (hf z hz).sub (hg z hz)
248+
lemma AnalyticOn.div_const {f : E → 𝕝} (hf : AnalyticOn 𝕜 f s) {c : 𝕝} :
249+
AnalyticOn 𝕜 (f · / c) s := by
250+
simpa [div_eq_mul_inv] using hf.const_smul (R := 𝕝ᵐᵒᵖ)
226251

227-
theorem AnalyticOnNhd.sub (hf : AnalyticOnNhd 𝕜 f s) (hg : AnalyticOnNhd 𝕜 g s) :
228-
AnalyticOnNhd 𝕜 (f - g) s :=
229-
fun z hz => (hf z hz).sub (hg z hz)
252+
lemma AnalyticOnNhd.div_const {f : E → 𝕝} (hf : AnalyticOnNhd 𝕜 f s) {c : 𝕝} :
253+
AnalyticOnNhd 𝕜 (f · / c) s := by
254+
simpa [div_eq_mul_inv] using hf.const_smul (R := 𝕝ᵐᵒᵖ)
230255

231256
end
232257

@@ -565,44 +590,41 @@ end
565590
-/
566591

567592
/-- Scalar multiplication is analytic (jointly in both variables). The statement is a little
568-
pedantic to allow towers of field extensions.
569-
570-
TODO: can we replace `𝕜'` with a "normed module" in such a way that `analyticAt_mul` is a special
571-
case of this? -/
593+
pedantic to allow towers of field extensions. -/
572594
@[fun_prop]
573-
lemma analyticAt_smul [NormedSpace 𝕝 E] [IsScalarTower 𝕜 𝕝 E] (z : 𝕝 × E) :
574-
AnalyticAt 𝕜 (fun x : 𝕝 × E ↦ x.1 • x.2) z :=
575-
(ContinuousLinearMap.lsmul 𝕜 𝕝).analyticAt_bilinear z
595+
lemma analyticAt_smul [Module A E] [IsBoundedSMul A E] [IsScalarTower 𝕜 A E] (z : A × E) :
596+
AnalyticAt 𝕜 (fun x : A × E ↦ x.1 • x.2) z :=
597+
(ContinuousLinearMap.lsmul 𝕜 A).analyticAt_bilinear z
576598

577599
/-- Multiplication in a normed algebra over `𝕜` is analytic. -/
578600
@[fun_prop]
579601
lemma analyticAt_mul (z : A × A) : AnalyticAt 𝕜 (fun x : A × A ↦ x.1 * x.2) z :=
580-
(ContinuousLinearMap.mul 𝕜 A).analyticAt_bilinear z
602+
analyticAt_smul z
581603

582604
/-- Scalar multiplication of one analytic function by another. -/
583-
lemma AnalyticWithinAt.smul [NormedSpace 𝕝 F] [IsScalarTower 𝕜 𝕝 F]
584-
{f : E → 𝕝} {g : E → F} {s : Set E} {z : E}
605+
lemma AnalyticWithinAt.smul [Module A F] [IsBoundedSMul A F] [IsScalarTower 𝕜 A F]
606+
{f : E → A} {g : E → F} {s : Set E} {z : E}
585607
(hf : AnalyticWithinAt 𝕜 f s z) (hg : AnalyticWithinAt 𝕜 g s z) :
586608
AnalyticWithinAt 𝕜 (fun x ↦ f x • g x) s z :=
587609
(analyticAt_smul _).comp₂_analyticWithinAt hf hg
588610

589611
/-- Scalar multiplication of one analytic function by another. -/
590612
@[to_fun (attr := fun_prop)]
591-
lemma AnalyticAt.smul [NormedSpace 𝕝 F] [IsScalarTower 𝕜 𝕝 F] {f : E → 𝕝} {g : E → F} {z : E}
592-
(hf : AnalyticAt 𝕜 f z) (hg : AnalyticAt 𝕜 g z) :
613+
lemma AnalyticAt.smul [Module A F] [IsBoundedSMul A F] [IsScalarTower 𝕜 A F] {f : E → A}
614+
{g : E → F} {z : E} (hf : AnalyticAt 𝕜 f z) (hg : AnalyticAt 𝕜 g z) :
593615
AnalyticAt 𝕜 (f • g) z :=
594616
(analyticAt_smul _).comp₂ hf hg
595617

596618
/-- Scalar multiplication of one analytic function by another. -/
597-
lemma AnalyticOn.smul [NormedSpace 𝕝 F] [IsScalarTower 𝕜 𝕝 F]
598-
{f : E → 𝕝} {g : E → F} {s : Set E}
619+
lemma AnalyticOn.smul [Module A F] [IsBoundedSMul A F] [IsScalarTower 𝕜 A F]
620+
{f : E → A} {g : E → F} {s : Set E}
599621
(hf : AnalyticOn 𝕜 f s) (hg : AnalyticOn 𝕜 g s) :
600622
AnalyticOn 𝕜 (fun x ↦ f x • g x) s :=
601623
fun _ m ↦ (hf _ m).smul (hg _ m)
602624

603625
/-- Scalar multiplication of one analytic function by another. -/
604-
lemma AnalyticOnNhd.smul [NormedSpace 𝕝 F] [IsScalarTower 𝕜 𝕝 F] {f : E → 𝕝} {g : E → F} {s : Set E}
605-
(hf : AnalyticOnNhd 𝕜 f s) (hg : AnalyticOnNhd 𝕜 g s) :
626+
lemma AnalyticOnNhd.smul [Module A F] [IsBoundedSMul A F] [IsScalarTower 𝕜 A F]
627+
{f : E → A} {g : E → F} {s : Set E} (hf : AnalyticOnNhd 𝕜 f s) (hg : AnalyticOnNhd 𝕜 g s) :
606628
AnalyticOnNhd 𝕜 (fun x ↦ f x • g x) s :=
607629
fun _ m ↦ (hf _ m).smul (hg _ m)
608630

@@ -616,19 +638,19 @@ lemma AnalyticWithinAt.mul {f g : E → A} {s : Set E} {z : E}
616638
@[to_fun (attr := fun_prop)]
617639
lemma AnalyticAt.mul {f g : E → A} {z : E} (hf : AnalyticAt 𝕜 f z) (hg : AnalyticAt 𝕜 g z) :
618640
AnalyticAt 𝕜 (f * g) z :=
619-
(analyticAt_mul _).comp₂ hf hg
641+
hf.smul hg
620642

621643
/-- Multiplication of analytic functions (valued in a normed `𝕜`-algebra) is analytic. -/
622644
lemma AnalyticOn.mul {f g : E → A} {s : Set E}
623645
(hf : AnalyticOn 𝕜 f s) (hg : AnalyticOn 𝕜 g s) :
624646
AnalyticOn 𝕜 (fun x ↦ f x * g x) s :=
625-
fun _ m ↦ (hf _ m).mul (hg _ m)
647+
hf.smul hg
626648

627649
/-- Multiplication of analytic functions (valued in a normed `𝕜`-algebra) is analytic. -/
628650
lemma AnalyticOnNhd.mul {f g : E → A} {s : Set E}
629651
(hf : AnalyticOnNhd 𝕜 f s) (hg : AnalyticOnNhd 𝕜 g s) :
630652
AnalyticOnNhd 𝕜 (fun x ↦ f x * g x) s :=
631-
fun _ m ↦ (hf _ m).mul (hg _ m)
653+
hf.smul hg
632654

633655
/-- Powers of analytic functions (into a normed `𝕜`-algebra) are analytic. -/
634656
@[to_fun]
@@ -662,31 +684,31 @@ lemma AnalyticOnNhd.pow {f : E → A} {s : Set E} (hf : AnalyticOnNhd 𝕜 f s)
662684
AnalyticOnNhd 𝕜 (f ^ n) s :=
663685
fun _ m ↦ (hf _ m).pow n
664686

665-
/-- ZPowers of analytic functions (into a normed field over `𝕜`) are analytic if the exponent is
666-
nonnegative. -/
687+
/-- ZPowers of analytic functions (into a normed division algebra over `𝕜`) are analytic if the
688+
exponent is nonnegative. -/
667689
@[to_fun]
668690
lemma AnalyticWithinAt.zpow_nonneg {f : E → 𝕝} {z : E} {s : Set E} {n : ℤ}
669691
(hf : AnalyticWithinAt 𝕜 f s z) (hn : 0 ≤ n) :
670692
AnalyticWithinAt 𝕜 (f ^ n) s z := by
671693
simpa [← zpow_natCast, hn] using hf.pow n.toNat
672694

673-
/-- ZPowers of analytic functions (into a normed field over `𝕜`) are analytic if the exponent is
674-
nonnegative. -/
695+
/-- ZPowers of analytic functions (into a normed division algebra over `𝕜`) are analytic if the
696+
exponent is nonnegative. -/
675697
@[to_fun]
676698
lemma AnalyticAt.zpow_nonneg {f : E → 𝕝} {z : E} {n : ℤ} (hf : AnalyticAt 𝕜 f z) (hn : 0 ≤ n) :
677699
AnalyticAt 𝕜 (f ^ n) z := by
678700
simpa [← zpow_natCast, hn] using hf.pow n.toNat
679701

680-
/-- ZPowers of analytic functions (into a normed field over `𝕜`) are analytic if the exponent is
681-
nonnegative. -/
702+
/-- ZPowers of analytic functions (into a normed division algebra over `𝕜`) are analytic if the
703+
exponent is nonnegative. -/
682704
@[to_fun]
683705
lemma AnalyticOn.zpow_nonneg {f : E → 𝕝} {s : Set E} {n : ℤ} (hf : AnalyticOn 𝕜 f s)
684706
(hn : 0 ≤ n) :
685707
AnalyticOn 𝕜 (f ^ n) s := by
686708
simpa [← zpow_natCast, hn] using hf.pow n.toNat
687709

688-
/-- ZPowers of analytic functions (into a normed field over `𝕜`) are analytic if the exponent is
689-
nonnegative. -/
710+
/-- ZPowers of analytic functions (into a normed division algebra over `𝕜`) are analytic if the
711+
exponent is nonnegative. -/
690712
@[to_fun]
691713
lemma AnalyticOnNhd.zpow_nonneg {f : E → 𝕝} {s : Set E} {n : ℤ} (hf : AnalyticOnNhd 𝕜 f s)
692714
(hn : 0 ≤ n) :
@@ -749,8 +771,7 @@ end
749771
-/
750772

751773
section Geometric
752-
753-
variable (𝕜 A : Type*) [NontriviallyNormedField 𝕜] [NormedRing A] [NormedAlgebra 𝕜 A]
774+
variable (𝕜 A)
754775

755776
/-- The geometric series `1 + x + x ^ 2 + ...` as a `FormalMultilinearSeries`. -/
756777
def formalMultilinearSeries_geometric : FormalMultilinearSeries 𝕜 A A :=
@@ -771,24 +792,18 @@ lemma formalMultilinearSeries_geometric_apply_norm [NormOneClass A] (n : ℕ) :
771792
‖formalMultilinearSeries_geometric 𝕜 A n‖ = 1 :=
772793
ContinuousMultilinearMap.norm_mkPiAlgebraFin
773794

774-
end Geometric
775-
776-
lemma one_le_formalMultilinearSeries_geometric_radius (𝕜 : Type*) [NontriviallyNormedField 𝕜]
777-
(A : Type*) [NormedRing A] [NormedAlgebra 𝕜 A] :
795+
lemma one_le_formalMultilinearSeries_geometric_radius :
778796
1 ≤ (formalMultilinearSeries_geometric 𝕜 A).radius := by
779797
convert formalMultilinearSeries_geometric_eq_ofScalars 𝕜 A ▸
780798
FormalMultilinearSeries.inv_le_ofScalars_radius_of_tendsto A _ one_ne_zero (by simp)
781799
simp
782800

783-
lemma formalMultilinearSeries_geometric_radius (𝕜 : Type*) [NontriviallyNormedField 𝕜]
784-
(A : Type*) [NormedRing A] [NormOneClass A] [NormedAlgebra 𝕜 A] :
801+
lemma formalMultilinearSeries_geometric_radius [NormOneClass A] :
785802
(formalMultilinearSeries_geometric 𝕜 A).radius = 1 :=
786803
formalMultilinearSeries_geometric_eq_ofScalars 𝕜 A ▸
787804
FormalMultilinearSeries.ofScalars_radius_eq_of_tendsto A _ one_ne_zero (by simp)
788805

789-
lemma hasFPowerSeriesOnBall_inverse_one_sub
790-
(𝕜 : Type*) [NontriviallyNormedField 𝕜]
791-
(A : Type*) [NormedRing A] [NormedAlgebra 𝕜 A] [HasSummableGeomSeries A] :
806+
lemma hasFPowerSeriesOnBall_inverse_one_sub [HasSummableGeomSeries A] :
792807
HasFPowerSeriesOnBall (fun x : A ↦ Ring.inverse (1 - x))
793808
(formalMultilinearSeries_geometric 𝕜 A) 0 1 := by
794809
constructor
@@ -802,16 +817,16 @@ lemma hasFPowerSeriesOnBall_inverse_one_sub
802817
exact (summable_geometric_of_norm_lt_one hy).hasSum
803818

804819
@[fun_prop]
805-
lemma analyticAt_inverse_one_sub (𝕜 : Type*) [NontriviallyNormedField 𝕜]
806-
(A : Type*) [NormedRing A] [NormedAlgebra 𝕜 A] [HasSummableGeomSeries A] :
820+
lemma analyticAt_inverse_one_sub [HasSummableGeomSeries A] :
807821
AnalyticAt 𝕜 (fun x : A ↦ Ring.inverse (1 - x)) 0 :=
808822
⟨_, ⟨_, hasFPowerSeriesOnBall_inverse_one_sub 𝕜 A⟩⟩
809823

824+
end Geometric
825+
810826
/-- If `A` is a normed algebra over `𝕜` with summable geometric series, then inversion on `A` is
811827
analytic at any unit. -/
812828
@[fun_prop]
813-
lemma analyticAt_inverse {𝕜 : Type*} [NontriviallyNormedField 𝕜]
814-
{A : Type*} [NormedRing A] [NormedAlgebra 𝕜 A] [HasSummableGeomSeries A] (z : Aˣ) :
829+
lemma analyticAt_inverse [HasSummableGeomSeries A] (z : Aˣ) :
815830
AnalyticAt 𝕜 Ring.inverse (z : A) := by
816831
rcases subsingleton_or_nontrivial A with hA | hA
817832
· convert analyticAt_const (v := (0 : A))
@@ -840,20 +855,19 @@ lemma analyticAt_inverse {𝕜 : Type*} [NontriviallyNormedField 𝕜]
840855
exact analyticAt_inverse_one_sub 𝕜 A
841856
· exact analyticAt_const.sub (analyticAt_const.mul analyticAt_id)
842857

843-
lemma analyticOnNhd_inverse {𝕜 : Type*} [NontriviallyNormedField 𝕜]
844-
{A : Type*} [NormedRing A] [NormedAlgebra 𝕜 A] [HasSummableGeomSeries A] :
858+
lemma analyticOnNhd_inverse [HasSummableGeomSeries A] :
845859
AnalyticOnNhd 𝕜 Ring.inverse {x : A | IsUnit x} :=
846860
fun _ hx ↦ analyticAt_inverse (IsUnit.unit hx)
847861

848-
lemma hasFPowerSeriesOnBall_inv_one_sub
849-
(𝕜 𝕝 : Type*) [NontriviallyNormedField 𝕜] [NontriviallyNormedField 𝕝] [NormedAlgebra 𝕜 𝕝] :
862+
variable (𝕜 𝕝) in
863+
lemma hasFPowerSeriesOnBall_inv_one_sub :
850864
HasFPowerSeriesOnBall (fun x : 𝕝 ↦ (1 - x)⁻¹) (formalMultilinearSeries_geometric 𝕜 𝕝) 0 1 := by
851865
convert hasFPowerSeriesOnBall_inverse_one_sub 𝕜 𝕝
852866
exact Ring.inverse_eq_inv'.symm
853867

868+
variable (𝕝) in
854869
@[fun_prop]
855-
lemma analyticAt_inv_one_sub (𝕝 : Type*) [NontriviallyNormedField 𝕝] [NormedAlgebra 𝕜 𝕝] :
856-
AnalyticAt 𝕜 (fun x : 𝕝 ↦ (1 - x)⁻¹) 0 :=
870+
lemma analyticAt_inv_one_sub : AnalyticAt 𝕜 (fun x : 𝕝 ↦ (1 - x)⁻¹) 0 :=
857871
⟨_, ⟨_, hasFPowerSeriesOnBall_inv_one_sub 𝕜 𝕝⟩⟩
858872

859873
/-- If `𝕝` is a normed field extension of `𝕜`, then the inverse map `𝕝 → 𝕝` is `𝕜`-analytic
@@ -937,8 +951,8 @@ lemma AnalyticOnNhd.zpow {f : E → 𝕝} {s : Set E} {n : ℤ} (h₁f : Analyti
937951

938952
/- A function is analytic at a point iff it is analytic after scalar
939953
multiplication with a non-vanishing analytic function. -/
940-
theorem analyticAt_iff_analytic_fun_smul [NormedSpace 𝕝 F] [IsScalarTower 𝕜 𝕝 F] {f : E → 𝕝}
941-
{g : E → F} {z : E} (h₁f : AnalyticAt 𝕜 f z) (h₂f : f z ≠ 0) :
954+
theorem analyticAt_iff_analytic_fun_smul [Module 𝕝 F] [IsBoundedSMul 𝕝 F] [IsScalarTower 𝕜 𝕝 F]
955+
{f : E → 𝕝} {g : E → F} {z : E} (h₁f : AnalyticAt 𝕜 f z) (h₂f : f z ≠ 0) :
942956
AnalyticAt 𝕜 g z ↔ AnalyticAt 𝕜 (fun z ↦ f z • g z) z := by
943957
constructor
944958
· exact fun a ↦ h₁f.smul a
@@ -952,8 +966,8 @@ theorem analyticAt_iff_analytic_fun_smul [NormedSpace 𝕝 F] [IsScalarTower
952966

953967
/- A function is analytic at a point iff it is analytic after scalar
954968
multiplication with a non-vanishing analytic function. -/
955-
theorem analyticAt_iff_analytic_smul [NormedSpace 𝕝 F] [IsScalarTower 𝕜 𝕝 F] {f : E → 𝕝}
956-
{g : E → F} {z : E} (h₁f : AnalyticAt 𝕜 f z) (h₂f : f z ≠ 0) :
969+
theorem analyticAt_iff_analytic_smul [Module 𝕝 F] [IsBoundedSMul 𝕝 F] [IsScalarTower 𝕜 𝕝 F]
970+
{f : E → 𝕝} {g : E → F} {z : E} (h₁f : AnalyticAt 𝕜 f z) (h₂f : f z ≠ 0) :
957971
AnalyticAt 𝕜 g z ↔ AnalyticAt 𝕜 (f • g) z :=
958972
analyticAt_iff_analytic_fun_smul h₁f h₂f
959973

Mathlib/Analysis/Analytic/ConvergenceRadius.lean

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,16 +295,18 @@ theorem min_radius_le_radius_add (p q : FormalMultilinearSeries 𝕜 E F) :
295295
theorem radius_neg (p : FormalMultilinearSeries 𝕜 E F) : (-p).radius = p.radius := by
296296
simp only [radius, neg_apply, norm_neg]
297297

298-
theorem radius_le_smul {p : FormalMultilinearSeries 𝕜 E F} {c : 𝕜} : p.radius ≤ (c • p).radius := by
298+
theorem radius_le_smul {p : FormalMultilinearSeries 𝕜 E F} {𝕜' : Type*} {c : 𝕜'} [NormedRing 𝕜']
299+
[Module 𝕜' F] [SMulCommClass 𝕜 𝕜' F] [IsBoundedSMul 𝕜' F] :
300+
p.radius ≤ (c • p).radius := by
299301
simp only [radius, smul_apply]
300302
refine iSup_mono fun r ↦ iSup_mono' fun C ↦ ⟨‖c‖ * C, iSup_mono' fun h ↦ ?_⟩
301303
simp only [le_refl, exists_prop, and_true]
302304
intro n
303-
rw [norm_smul c (p n), mul_assoc]
304-
gcongr
305-
exact h n
305+
grw [norm_smul_le, mul_assoc, h]
306306

307-
theorem radius_smul_eq (p : FormalMultilinearSeries 𝕜 E F) {c : 𝕜} (hc : c ≠ 0) :
307+
theorem radius_smul_eq (p : FormalMultilinearSeries 𝕜 E F)
308+
{𝕜' : Type*} {c : 𝕜'} [NormedDivisionRing 𝕜'] [Module 𝕜' F] [NormSMulClass 𝕜' F]
309+
[SMulCommClass 𝕜 𝕜' F] (hc : c ≠ 0) :
308310
(c • p).radius = p.radius := by
309311
apply eq_of_le_of_ge _ radius_le_smul
310312
exact radius_le_smul.trans_eq (congr_arg _ <| inv_smul_smul₀ hc p)

0 commit comments

Comments
 (0)