Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - feat(Mathlib/Analysis/Analytic): continuously polynomial functions #9269

Closed
wants to merge 36 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
8b59c50
test
Dec 20, 2023
3f210ba
easy changes
Dec 20, 2023
a7fc3a2
polynomials
Dec 21, 2023
e1638c3
polynomials
Dec 21, 2023
5a3dbee
remove unnecessary "have".
Dec 21, 2023
1068949
dots
Dec 21, 2023
cddf271
polynomials are differentiable
Dec 21, 2023
f306269
dots
Dec 21, 2023
ecc95ee
dots
Dec 21, 2023
19edca3
structure inheritance
Dec 22, 2023
30eb9ff
Cleanup + added lemmas about constant functions.
Dec 22, 2023
f28e41a
linter corrections
Dec 22, 2023
da9a53a
simpler proofs
Dec 25, 2023
c4908ab
shorten line
Dec 25, 2023
40991f9
cleanup
Dec 25, 2023
7740752
more cleanup
Dec 25, 2023
2b4c02a
golfs in Analytic/Basic
alreadydone Dec 26, 2023
dc0de41
Update Mathlib/Analysis/Calculus/FDeriv/Analytic.lean
smorel394 Dec 28, 2023
a65e9df
Implement jcommelin's suggestion of putting the "continuously polynom…
Dec 28, 2023
9638c08
add missing import
Dec 28, 2023
ded2255
trying to resolve merge conflict
Dec 28, 2023
7a8130b
trying again
Dec 28, 2023
5af539e
and again...
Dec 28, 2023
90cd425
Merge remote-tracking branch 'origin/master' into Analytic
Dec 28, 2023
68a32a6
another try
Dec 28, 2023
f36e905
yet another try
Dec 28, 2023
5d437fd
copyright header & fix import
alreadydone Dec 28, 2023
2b15db5
Merge branch 'Analytic' of github.com:leanprover-community/mathlib4 i…
Dec 28, 2023
6a5f6bc
add CPolynomial to Mathlib.lean
Dec 28, 2023
d878b7f
switch order of lines in Mathlib.lean
Dec 28, 2023
85c1eda
golfs
alreadydone Jan 10, 2024
9ad4405
keep lemmas in do_we_really_want section
alreadydone Jan 10, 2024
efde5f2
Update Mathlib/Analysis/Analytic/CPolynomial.lean
smorel394 Jan 10, 2024
24ce0a2
Update Mathlib/Analysis/Analytic/CPolynomial.lean
smorel394 Jan 10, 2024
d16ca17
Update Mathlib/Analysis/Analytic/CPolynomial.lean
smorel394 Jan 10, 2024
22d4fca
fixed docstring
Jan 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Mathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,7 @@ import Mathlib.AlgebraicTopology.SimplicialSet
import Mathlib.AlgebraicTopology.SplitSimplicialObject
import Mathlib.AlgebraicTopology.TopologicalSimplex
import Mathlib.Analysis.Analytic.Basic
import Mathlib.Analysis.Analytic.CPolynomial
import Mathlib.Analysis.Analytic.Composition
alreadydone marked this conversation as resolved.
Show resolved Hide resolved
import Mathlib.Analysis.Analytic.Constructions
import Mathlib.Analysis.Analytic.Inverse
Expand Down
27 changes: 14 additions & 13 deletions Mathlib/Analysis/Analytic/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1192,7 +1192,7 @@ The forward map sends `(k, l, s)` to `(k + l, s)` and the inverse map sends `(n,
with non-definitional equalities. -/
@[simps]
def changeOriginIndexEquiv :
(Σk l : ℕ, { s : Finset (Fin (k + l)) // s.card = l }) ≃ Σn : ℕ, Finset (Fin n) where
(Σ k l : ℕ, { s : Finset (Fin (k + l)) // s.card = l }) ≃ Σ n : ℕ, Finset (Fin n) where
toFun s := ⟨s.1 + s.2.1, s.2.2⟩
invFun s :=
⟨s.1 - s.2.card, s.2.card,
Expand All @@ -1216,6 +1216,16 @@ def changeOriginIndexEquiv :
simp [tsub_add_cancel_of_le (card_finset_fin_le s), Fin.castIso_to_equiv]
#align formal_multilinear_series.change_origin_index_equiv FormalMultilinearSeries.changeOriginIndexEquiv

lemma changeOriginSeriesTerm_changeOriginIndexEquiv_symm (n t) :
let s := changeOriginIndexEquiv.symm ⟨n, t⟩
p.changeOriginSeriesTerm s.1 s.2.1 s.2.2 s.2.2.2 (fun _ ↦ x) (fun _ ↦ y) =
p n (t.piecewise (fun _ ↦ x) fun _ ↦ y) := by
smorel394 marked this conversation as resolved.
Show resolved Hide resolved
have : ∀ (m) (hm : n = m), p n (t.piecewise (fun _ ↦ x) fun _ ↦ y) =
p m ((t.map (Fin.castIso hm).toEmbedding).piecewise (fun _ ↦ x) fun _ ↦ y) := by
rintro m rfl
simp (config := { unfoldPartialApp := true }) [Finset.piecewise]
simp_rw [changeOriginSeriesTerm_apply, eq_comm]; apply this

theorem changeOriginSeries_summable_aux₁ {r r' : ℝ≥0} (hr : (r + r' : ℝ≥0∞) < p.radius) :
Summable fun s : Σk l : ℕ, { s : Finset (Fin (k + l)) // s.card = l } =>
‖p (s.1 + s.2.1)‖₊ * r ^ s.2.1 * r' ^ s.1 := by
Expand Down Expand Up @@ -1309,7 +1319,7 @@ theorem changeOrigin_eval (h : (‖x‖₊ + ‖y‖₊ : ℝ≥0∞) < p.radius
have x_add_y_mem_ball : x + y ∈ EMetric.ball (0 : E) p.radius := by
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ h)
exact mod_cast nnnorm_add_le x y
set f : (Σk l : ℕ, { s : Finset (Fin (k + l)) // s.card = l }) → F := fun s =>
set f : (Σ k l : ℕ, { s : Finset (Fin (k + l)) // s.card = l }) → F := fun s =>
p.changeOriginSeriesTerm s.1 s.2.1 s.2.2 s.2.2.2 (fun _ => x) fun _ => y
have hsf : Summable f := by
refine' .of_nnnorm_bounded _ (p.changeOriginSeries_summable_aux₁ h) _
Expand All @@ -1333,17 +1343,8 @@ theorem changeOrigin_eval (h : (‖x‖₊ + ‖y‖₊ : ℝ≥0∞) < p.radius
refine' HasSum.sigma_of_hasSum
(p.hasSum x_add_y_mem_ball) (fun n => _) (changeOriginIndexEquiv.symm.summable_iff.2 hsf)
erw [(p n).map_add_univ (fun _ => x) fun _ => y]
-- porting note: added explicit function
convert hasSum_fintype (fun c : Finset (Fin n) => f (changeOriginIndexEquiv.symm ⟨n, c⟩))
rename_i s _
dsimp only [changeOriginSeriesTerm, (· ∘ ·), changeOriginIndexEquiv_symm_apply_fst,
changeOriginIndexEquiv_symm_apply_snd_fst, changeOriginIndexEquiv_symm_apply_snd_snd_coe]
rw [ContinuousMultilinearMap.curryFinFinset_apply_const]
have : ∀ (m) (hm : n = m), p n (s.piecewise (fun _ => x) fun _ => y) =
p m ((s.map (Fin.castIso hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) := by
rintro m rfl
simp (config := { unfoldPartialApp := true }) [Finset.piecewise]
apply this
simp_rw [← changeOriginSeriesTerm_changeOriginIndexEquiv_symm]
exact hasSum_fintype (fun c => f (changeOriginIndexEquiv.symm ⟨n, c⟩))
#align formal_multilinear_series.change_origin_eval FormalMultilinearSeries.changeOrigin_eval

/-- Power series terms are analytic as we vary the origin -/
Expand Down
Loading