Skip to content

Commit

Permalink
feat(Analysis/Analytic): A few more analyticity lemmas (#7967)
Browse files Browse the repository at this point in the history
1. Analytic at a point means analytic in a ball
2. In addition to `AnalyticAt.{smul,mul,pow}`, do `AnalyticOn.{smul,mul,pow}`

Also change `AnalyticAt.smul` and `AnalyticAt.pow` to use pointwise `smul` and `pow` rather than function `smul` and `pow`, as I think this is more ergonomic when used in practice (from experience with https://github.com/girving/ray).
  • Loading branch information
girving committed Oct 29, 2023
1 parent a988ad9 commit b56efa5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
5 changes: 5 additions & 0 deletions Mathlib/Analysis/Analytic/Basic.lean
Expand Up @@ -1414,6 +1414,11 @@ theorem AnalyticAt.exists_mem_nhds_analyticOn {f : E β†’ F} {x : E} (h : Analyti
βˆƒ s ∈ 𝓝 x, AnalyticOn π•œ f s :=
h.eventually_analyticAt.exists_mem

/-- If we're analytic at a point, we're analytic in a nonempty ball -/
theorem AnalyticAt.exists_ball_analyticOn {f : E β†’ F} {x : E} (h : AnalyticAt π•œ f x) :
βˆƒ r : ℝ, 0 < r ∧ AnalyticOn π•œ f (Metric.ball x r) :=
Metric.isOpen_iff.mp (isOpen_analyticAt _ _) _ h

end

section
Expand Down
34 changes: 24 additions & 10 deletions Mathlib/Analysis/Analytic/Constructions.lean
Expand Up @@ -153,27 +153,41 @@ lemma analyticAt_smul [NormedSpace 𝕝 E] [IsScalarTower π•œ 𝕝 E] (z : 𝕝
lemma analyticAt_mul (z : A Γ— A) : AnalyticAt π•œ (fun x : A Γ— A ↦ x.1 * x.2) z :=
(ContinuousLinearMap.mul π•œ A).analyticAt_bilinear z

namespace AnalyticAt

/-- Scalar multiplication of one analytic function by another. -/
lemma smul [NormedSpace 𝕝 F] [IsScalarTower π•œ 𝕝 F] {f : E β†’ 𝕝} {g : E β†’ F} {z : E}
lemma AnalyticAt.smul [NormedSpace 𝕝 F] [IsScalarTower π•œ 𝕝 F] {f : E β†’ 𝕝} {g : E β†’ F} {z : E}
(hf : AnalyticAt π•œ f z) (hg : AnalyticAt π•œ g z) :
AnalyticAt π•œ (f β€’ g) z :=
AnalyticAt π•œ (fun x ↦ f x β€’ g x) z :=
(analyticAt_smul _).compβ‚‚ hf hg

/-- Scalar multiplication of one analytic function by another. -/
lemma AnalyticOn.smul [NormedSpace 𝕝 F] [IsScalarTower π•œ 𝕝 F] {f : E β†’ 𝕝} {g : E β†’ F} {s : Set E}
(hf : AnalyticOn π•œ f s) (hg : AnalyticOn π•œ g s) :
AnalyticOn π•œ (fun x ↦ f x β€’ g x) s :=
fun _ m ↦ (hf _ m).smul (hg _ m)

/-- Multiplication of analytic functions (valued in a normd `π•œ`-algebra) is analytic. -/
lemma mul {f g : E β†’ A} {z : E} (hf : AnalyticAt π•œ f z) (hg : AnalyticAt π•œ g z) :
lemma AnalyticAt.mul {f g : E β†’ A} {z : E} (hf : AnalyticAt π•œ f z) (hg : AnalyticAt π•œ g z) :
AnalyticAt π•œ (fun x ↦ f x * g x) z :=
(analyticAt_mul _).compβ‚‚ hf hg

/-- Multiplication of analytic functions (valued in a normd `π•œ`-algebra) is analytic. -/
lemma AnalyticOn.mul {f g : E β†’ A} {s : Set E} (hf : AnalyticOn π•œ f s) (hg : AnalyticOn π•œ g s) :
AnalyticOn π•œ (fun x ↦ f x * g x) s :=
fun _ m ↦ (hf _ m).mul (hg _ m)

/-- Powers of analytic functions (into a normed `π•œ`-algebra) are analytic. -/
lemma pow {f : E β†’ A} {z : E} (hf : AnalyticAt π•œ f z) (n : β„•) : AnalyticAt π•œ (f ^ n) z := by
lemma AnalyticAt.pow {f : E β†’ A} {z : E} (hf : AnalyticAt π•œ f z) (n : β„•) :
AnalyticAt π•œ (fun x ↦ f x ^ n) z := by
induction' n with m hm
Β· rw [pow_zero]
exact (analyticAt_const : AnalyticAt π•œ (fun _ ↦ (1 : A)) z)
Β· exact pow_succ f m β–Έ hf.mul hm
Β· simp only [Nat.zero_eq, pow_zero]
apply analyticAt_const
Β· simp only [pow_succ]
exact hf.mul hm

end AnalyticAt
/-- Powers of analytic functions (into a normed `π•œ`-algebra) are analytic. -/
lemma AnalyticOn.pow {f : E β†’ A} {s : Set E} (hf : AnalyticOn π•œ f s) (n : β„•) :
AnalyticOn π•œ (fun x ↦ f x ^ n) s :=
fun _ m ↦ (hf _ m).pow n

section Geometric

Expand Down

0 comments on commit b56efa5

Please sign in to comment.