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: Integral curves are either injective or periodic #9343

Closed
wants to merge 225 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
225 commits
Select commit Hold shift + click to select a range
4e53e96
doc
winstonyin Nov 13, 2023
f14b378
compiles
winstonyin Nov 17, 2023
22b4f1f
indent
winstonyin Nov 17, 2023
0747174
import, indent
winstonyin Nov 17, 2023
23d691f
docstring
winstonyin Nov 17, 2023
e8e7338
Mathlib.lean
winstonyin Nov 17, 2023
ccc8f77
lake manifest
winstonyin Nov 17, 2023
42341d1
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Nov 17, 2023
720ec35
removed temporary notation
winstonyin Nov 18, 2023
25f1065
integralCurveAt, change PicardLindelof statement order
winstonyin Nov 18, 2023
d4139b6
compiles
winstonyin Nov 18, 2023
4b57dfe
Sketch a section on interior and boundary of manifolds.
grunweg Nov 18, 2023
e9d3546
More progress. Tweaks, polish and fleshing out some sorries.
grunweg Nov 19, 2023
cbd22f4
One more lemma.
grunweg Nov 19, 2023
0dbf3b0
One lemma was in mathlib. :-)
grunweg Nov 19, 2023
a978f02
Fix the build; mild clean-ups.
grunweg Nov 19, 2023
1f6dbaa
Small simplifications.
grunweg Nov 19, 2023
9c58652
has -> is, docstring, shift/stretch lemmas
winstonyin Nov 20, 2023
6b55cbc
detailed proof steps
winstonyin Nov 20, 2023
0ada08e
open Set
winstonyin Nov 20, 2023
063822d
`IsIntegralCurveAt` in preamble
winstonyin Nov 20, 2023
fb4196f
IsIntegralCurveAt.comp_add
winstonyin Nov 20, 2023
6f665ad
translation, scale, and reverse lemmas
winstonyin Nov 21, 2023
b59c82f
iff lemmas
winstonyin Nov 21, 2023
3c2e424
Small polish. Note that smoothness is not required;
grunweg Nov 21, 2023
c95243e
The boundary is closed: entails showing that interior and boundary ar…
grunweg Nov 21, 2023
933cc59
Almost-proof that boundary has empty interior: need to adjust definit…
grunweg Nov 21, 2023
2041d30
Correct the definition of boundary:
grunweg Nov 21, 2023
f1fda32
Fix and complete proof that the boundary has empty interior.
grunweg Nov 21, 2023
6a4e39c
Small clean-ups:
grunweg Nov 21, 2023
88bea4c
Clean up lemmas about boundary.
grunweg Nov 21, 2023
73e203f
Small golfs.
grunweg Nov 21, 2023
90090b2
Fix rebase, make it build and fix a docstring typo.
grunweg Nov 21, 2023
338ab9f
Fix casing for real: IsInteriorPoint is correct.
grunweg Nov 21, 2023
378088c
Name lemma in snake_case.
grunweg Nov 21, 2023
efe0880
naming
winstonyin Nov 22, 2023
d35e843
move lemma, style
winstonyin Nov 22, 2023
dce81a6
Define topological manifolds and use them for defining interior and b…
grunweg Nov 21, 2023
79fcb13
Alternative, more minimal fix.
grunweg Nov 21, 2023
e1a9363
sketch boundary argument
grunweg Nov 21, 2023
f38f823
MAYBE this tweak makes the proof easier.
grunweg Nov 21, 2023
07d1dbc
Cleanup, one easy sorry.
grunweg Nov 21, 2023
c331ee2
Another easy sorry.
grunweg Nov 21, 2023
191a5c1
Move a helper upfront; eliminating another sorry.
grunweg Nov 21, 2023
66b1943
Starting at scifi lemma: might be science *fiction* actually...
grunweg Nov 21, 2023
7840b91
Small golfs.
grunweg Nov 22, 2023
61fd70e
Extract lemmas used in the proof so far.
grunweg Nov 22, 2023
5869bd5
Fill sorry in description of boundary.
grunweg Nov 22, 2023
058bb70
Extract one more useful lemma; tiny golf.
grunweg Nov 22, 2023
7e1542d
Simplify: use chart source instead of extChart.source.
grunweg Nov 22, 2023
219f85c
Fill in one more helper sorry.
grunweg Nov 22, 2023
b97611e
Move helpers to better namespace; show a MapsTo version;
grunweg Nov 22, 2023
ef4c232
Reduce interior independence statement to a local lemma.
grunweg Nov 22, 2023
184a062
Give up: remove WIP claim that boundary as empty interior.
grunweg Nov 22, 2023
c634f1a
Rename and golf mapsTo results for extended local homeos.
grunweg Nov 22, 2023
dd9e73f
Small golfs and clean-ups.
grunweg Nov 22, 2023
3d820be
Move complete (and now unused) helper results to their files:
grunweg Nov 22, 2023
2c69553
compiles
winstonyin Nov 22, 2023
7c6bccf
new lemmas and slight golfing
winstonyin Nov 23, 2023
e74b860
Essentials are complete.
grunweg Nov 25, 2023
f8e3340
Clean up; document TODOs/next steps; move all helpers to their proper…
grunweg Nov 25, 2023
4febc74
Remove helper lemmas not needed here.
grunweg Nov 25, 2023
c1f3395
Pare down interior/boundary file to the necesssary basics; sorry-free.
grunweg Nov 25, 2023
25ff469
Merge branch 'MR-manifolds-boundary' into integral_curve
grunweg Nov 25, 2023
1459dfb
Simplify.
grunweg Nov 25, 2023
094ca88
compiles
winstonyin Nov 26, 2023
ca11211
Merge branch 'integral_curve' of https://github.com/leanprover-commun…
winstonyin Nov 26, 2023
7754760
range_mem_nhds_isInteriorPoint
winstonyin Nov 26, 2023
6033099
namespace
winstonyin Nov 26, 2023
429fd8b
Merge remote-tracking branch 'origin/MR-manifolds-boundary' into inte…
winstonyin Nov 26, 2023
d1a8296
hI as separate lemma
winstonyin Nov 26, 2023
7f7a49d
actually compiles
winstonyin Nov 26, 2023
ab30700
minor
winstonyin Nov 26, 2023
98ff512
Prefer refine over refine' in new code, per zulip.
grunweg Nov 27, 2023
00f4e77
Use mfld_simps to make proofs more readable.
grunweg Nov 27, 2023
e86759d
Small golf, use mfld_simps more.
grunweg Nov 27, 2023
85fbe5d
hasFDerivWithinAt_tangentCoordChange
winstonyin Nov 27, 2023
d924890
some golf
winstonyin Nov 28, 2023
4cf8097
shorten comment
winstonyin Nov 28, 2023
e8bfdb0
shorten
winstonyin Nov 28, 2023
de44a9c
move tangentCoordChange
winstonyin Nov 28, 2023
a792394
minor spacing
winstonyin Nov 28, 2023
4cc6c69
isIntegralCurveAt_const
winstonyin Nov 28, 2023
b4ba5a0
remove todo
winstonyin Nov 28, 2023
f14affa
use implicit lambdas
winstonyin Nov 28, 2023
0a3d359
Fix style.
grunweg Nov 29, 2023
fa1b5f3
Remove superfluous helper lemma.
grunweg Nov 29, 2023
9e9ee92
docstring, rename theorem
winstonyin Nov 30, 2023
75c2b52
rename
winstonyin Nov 30, 2023
f019e9b
remove `x₀` from `IsIntegralCurveAt`
winstonyin Nov 30, 2023
30c333f
end with exact
winstonyin Nov 30, 2023
e140c43
`IsIntegralCurveOn`, `IsIntegralCurve`
winstonyin Nov 30, 2023
b810d2a
docstring
winstonyin Nov 30, 2023
9f5b559
IsIntegralCurveAt.isIntegralCurveOn
winstonyin Nov 30, 2023
0445938
`comp_add` lemmas
winstonyin Nov 30, 2023
3b7cca0
refactored `IsIntegralCurveXX`
winstonyin Nov 30, 2023
082574b
unused arg
winstonyin Nov 30, 2023
ac90345
statement
winstonyin Dec 1, 2023
19a2e81
gronwall LipschitzOnWith
winstonyin Dec 1, 2023
b08e243
partial
winstonyin Dec 1, 2023
08d1e12
some corollaries in Gronwall
winstonyin Dec 4, 2023
f80b337
Ioo version
winstonyin Dec 5, 2023
49c5acb
stuck
winstonyin Dec 6, 2023
e52f2ff
can't believe it compiles lol
winstonyin Dec 6, 2023
5e4df2a
draft
winstonyin Dec 7, 2023
33d9a79
uniqueness sorry-free!
winstonyin Dec 7, 2023
f22da92
docstring
winstonyin Dec 8, 2023
fbb74c9
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Dec 8, 2023
5607d5a
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Dec 8, 2023
a9d4cae
space
winstonyin Dec 8, 2023
9d54e62
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Dec 8, 2023
0249431
Merge remote-tracking branch 'origin/master' into unique_integral_curve
winstonyin Dec 8, 2023
860f52f
shorten
winstonyin Dec 8, 2023
d6d70f5
shorten
winstonyin Dec 8, 2023
6ea9338
unused
winstonyin Dec 8, 2023
6d4af73
Small things: sectioning; re-use variables.
grunweg Dec 8, 2023
ffa3c4b
Tinygolf.
grunweg Dec 8, 2023
7dde305
Line breaks.
grunweg Dec 8, 2023
b6a1ada
golf a bit
winstonyin Dec 8, 2023
f5f7f70
golf and docstring
winstonyin Dec 8, 2023
4b2a738
usued args
winstonyin Dec 8, 2023
1898133
remove temp notation
winstonyin Dec 8, 2023
fa1e07f
oops
winstonyin Dec 8, 2023
780373e
small golf
winstonyin Dec 9, 2023
8cfee4c
EqOn
winstonyin Dec 9, 2023
64942d1
style
winstonyin Dec 9, 2023
cb2fab2
style
winstonyin Dec 9, 2023
3a6a98d
have parentheses
winstonyin Dec 9, 2023
06674b3
style
winstonyin Dec 13, 2023
5c5f070
fix
winstonyin Dec 13, 2023
71d1021
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Dec 13, 2023
ccd1830
style
winstonyin Dec 13, 2023
122546d
spacing
winstonyin Dec 13, 2023
c1c57c9
spacing
winstonyin Dec 13, 2023
0ed0eec
split aux lemmas out
winstonyin Dec 13, 2023
729d547
refactored with shrinkable
winstonyin Dec 14, 2023
5e45ca2
use filters, eventually
winstonyin Dec 14, 2023
842284d
all using filters now
winstonyin Dec 14, 2023
abbcbd8
style
winstonyin Dec 14, 2023
8d91420
doc
winstonyin Dec 14, 2023
2c4d77d
restate existence theorem using filters
winstonyin Dec 14, 2023
5f7bb14
define `IsIntegralCurveAt` using `Eventually`
winstonyin Dec 14, 2023
182c699
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Dec 14, 2023
eec9c85
Merge remote-tracking branch 'origin/master' into unique_integral_curve
winstonyin Dec 14, 2023
29170c6
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Dec 14, 2023
6341072
PartialEquiv
winstonyin Dec 14, 2023
7911121
PartialEquiv
winstonyin Dec 14, 2023
8e54212
PartialEquiv
winstonyin Dec 14, 2023
7b1bc43
PartialEquiv
winstonyin Dec 14, 2023
4efc1ad
PartialEquiv
winstonyin Dec 14, 2023
2508953
Partial
winstonyin Dec 14, 2023
7b804f9
Replace => by \mapsto, per the style guide.
grunweg Dec 14, 2023
22d5ceb
Small golfs.
grunweg Dec 14, 2023
c4dd6bc
small golf
winstonyin Dec 15, 2023
d32e895
congr_deriv
winstonyin Dec 15, 2023
7dead4d
Merge remote-tracking branch 'origin/congr_deriv' into unique_integra…
winstonyin Dec 15, 2023
fff3d19
use new lemmas
winstonyin Dec 15, 2023
4559d57
missed one
winstonyin Dec 15, 2023
17cb91b
fderiv -> deriv
winstonyin Dec 15, 2023
8712cb8
congr_mfderiv
winstonyin Dec 15, 2023
d4c5b05
mfderiv_chartAt_eq_tangentCoordChange
winstonyin Dec 15, 2023
a5c75c1
golf
winstonyin Dec 15, 2023
f17b87d
uncomment
winstonyin Dec 15, 2023
9acde4a
reorder
winstonyin Dec 15, 2023
fa459a5
implicit variables
winstonyin Dec 15, 2023
850ab35
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Dec 15, 2023
e34a30a
implicit variable
winstonyin Dec 15, 2023
3ba365f
organise variables, docstring
winstonyin Dec 15, 2023
9cb4fb6
Merge remote-tracking branch 'origin/master' into unique_integral_curve
winstonyin Dec 16, 2023
e784d93
Update Mathlib/Geometry/Manifold/IntegralCurve.lean
winstonyin Dec 17, 2023
47e137d
Update Mathlib/Geometry/Manifold/IntegralCurve.lean
winstonyin Dec 17, 2023
2e0b9bf
Update Mathlib/Geometry/Manifold/IntegralCurve.lean
winstonyin Dec 18, 2023
26be30a
remove newlines
winstonyin Dec 18, 2023
90755c3
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Dec 19, 2023
5aab426
fix
winstonyin Dec 19, 2023
020e07b
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Dec 19, 2023
1ea3813
fix
winstonyin Dec 20, 2023
749ea8c
IsIntegralCurveAt.hasMFDerivAt
winstonyin Dec 29, 2023
3c41d58
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Dec 29, 2023
4a735d2
statement
winstonyin Dec 29, 2023
12369b4
compiles
winstonyin Dec 30, 2023
3acfc7f
restate as iff
winstonyin Dec 30, 2023
0bb45eb
lemma
winstonyin Dec 30, 2023
ca88b9d
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Jan 5, 2024
e06f50b
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Jan 5, 2024
a90f105
Merge branch 'unique_integral_curve' into integral_curve_injective
winstonyin Jan 5, 2024
c74e830
BoundarylessManifold
winstonyin Jan 5, 2024
ec1df62
BoundarylessManifold
winstonyin Jan 5, 2024
9db3abf
BoundarylessManifold
winstonyin Jan 5, 2024
8511979
Merge branch 'unique_integral_curve' into integral_curve_injective
winstonyin Jan 5, 2024
353f3c9
Make I implicit again.
grunweg Jan 8, 2024
a0c398b
Open Function: mostly for Function.comp_apply.
grunweg Jan 8, 2024
8461f75
Extract one direction into a lemma.
grunweg Jan 8, 2024
ba3dd3a
Add xor version; tweak lemma name.
grunweg Jan 8, 2024
7d7a716
docs, golf, add `isIntegralCurveOn_iff_isIntegralCurveAt`
winstonyin Jan 8, 2024
db893bd
use `Eventually` in `IsIntegralCurveAt`
winstonyin Jan 8, 2024
ad6d0a6
minor
winstonyin Jan 8, 2024
e9eaec2
Merge branch 'integral_curve' into unique_integral_curve
winstonyin Jan 9, 2024
5c7eca6
fix
winstonyin Jan 9, 2024
fed6c68
golf
winstonyin Jan 9, 2024
89e0297
golf
winstonyin Jan 9, 2024
8f0b80a
Merge remote-tracking branch 'origin/master' into unique_integral_curve
winstonyin Jan 9, 2024
a00ed88
golf some earlier proofs
winstonyin Jan 9, 2024
8493b01
minor
winstonyin Jan 9, 2024
15f7e4f
doc
winstonyin Jan 9, 2024
cf77f13
Merge branch 'unique_integral_curve' into integral_curve_injective
winstonyin Jan 9, 2024
cd321af
Merge branch 'integral_curve_injective' of https://github.com/leanpro…
winstonyin Jan 9, 2024
1c91b79
section header
winstonyin Jan 9, 2024
212b12d
docs
winstonyin Jan 9, 2024
f10e247
Merge branch 'unique_integral_curve' into integral_curve_injective
winstonyin Jan 9, 2024
fbd2199
typo
winstonyin Jan 11, 2024
4ef4954
Merge remote-tracking branch 'origin/master' into unique_integral_curve
winstonyin Jan 15, 2024
bb3e5b7
Merge remote-tracking branch 'origin/master' into integral_curve_inje…
winstonyin Jan 15, 2024
eb40505
Merge remote-tracking branch 'origin/master' into unique_integral_curve
winstonyin Jan 17, 2024
a889e9f
fix
winstonyin Jan 17, 2024
a44856a
gronwall doc
winstonyin Jan 17, 2024
92df5b9
minor
winstonyin Jan 17, 2024
06d6fa4
move lemma
winstonyin Jan 17, 2024
595c63e
Merge branch 'unique_integral_curve' into integral_curve_injective
winstonyin Jan 17, 2024
a489cf5
Merge remote-tracking branch 'origin/master' into integral_curve_inje…
winstonyin Jan 24, 2024
4a3f868
fix
winstonyin Jan 24, 2024
de220be
rewrite
winstonyin Jan 29, 2024
1b5e97b
AddZeroClass
winstonyin Jan 29, 2024
d39c4eb
Merge branch 'master' into integral_curve_injective
urkud Jan 29, 2024
e8a02c6
Golf, fix docstring
urkud Jan 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions Mathlib/Algebra/Periodic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,11 @@ theorem Periodic.lift_coe [AddGroup α] (h : Periodic f c) (a : α) :
rfl
#align function.periodic.lift_coe Function.Periodic.lift_coe

/-- A periodic function `f : R → X` on a semiring (or, more generally, `AddZeroClass`)
of non-zero period is not injective. -/
lemma Periodic.not_injective {R X : Type*} [AddZeroClass R] {f : R → X} {c : R}
(hf : Periodic f c) (hc : c ≠ 0) : ¬ Injective f := fun h ↦ hc <| h hf.eq

/-! ### Antiperiodicity -/

/-- A function `f` is said to be `antiperiodic` with antiperiod `c` if for all `x`,
Expand Down
39 changes: 35 additions & 4 deletions Mathlib/Geometry/Manifold/IntegralCurve.lean
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ integral curve, vector field, local existence, uniqueness

open scoped Manifold Topology

open Set
open Function Set

variable
{E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [CompleteSpace E]
Expand Down Expand Up @@ -193,8 +193,7 @@ section Translation
lemma IsIntegralCurveOn.comp_add (hγ : IsIntegralCurveOn γ v s) (dt : ℝ) :
IsIntegralCurveOn (γ ∘ (· + dt)) v { t | t + dt ∈ s } := by
intros t ht
rw [Function.comp_apply,
← ContinuousLinearMap.comp_id (ContinuousLinearMap.smulRight 1 (v (γ (t + dt))))]
rw [comp_apply, ← ContinuousLinearMap.comp_id (ContinuousLinearMap.smulRight 1 (v (γ (t + dt))))]
apply HasMFDerivAt.comp t (hγ (t + dt) ht)
refine ⟨(continuous_add_right _).continuousAt, ?_⟩
simp only [mfld_simps, hasFDerivWithinAt_univ]
Expand Down Expand Up @@ -246,7 +245,7 @@ section Scaling
lemma IsIntegralCurveOn.comp_mul (hγ : IsIntegralCurveOn γ v s) (a : ℝ) :
IsIntegralCurveOn (γ ∘ (· * a)) (a • v) { t | t * a ∈ s } := by
intros t ht
rw [Function.comp_apply, Pi.smul_apply, ← ContinuousLinearMap.smulRight_comp]
rw [comp_apply, Pi.smul_apply, ← ContinuousLinearMap.smulRight_comp]
refine HasMFDerivAt.comp t (hγ (t * a) ht) ⟨(continuous_mul_right _).continuousAt, ?_⟩
simp only [mfld_simps, hasFDerivWithinAt_univ]
exact HasFDerivAt.mul_const' (hasFDerivAt_id _) _
Expand Down Expand Up @@ -501,4 +500,36 @@ theorem isIntegralCurve_Ioo_eq_of_contMDiff_boundaryless [BoundarylessManifold I
(hγ : IsIntegralCurve γ v) (hγ' : IsIntegralCurve γ' v) (h : γ t₀ = γ' t₀) : γ = γ' :=
isIntegralCurve_eq_of_contMDiff (fun _ ↦ BoundarylessManifold.isInteriorPoint I) hv hγ hγ' h

/-- For a global integral curve `γ`, if it crosses itself at `a b : ℝ`, then it is periodic with
period `a - b`. -/
lemma IsIntegralCurve.periodic_of_eq [BoundarylessManifold I M]
(hγ : IsIntegralCurve γ v)
(hv : ContMDiff I I.tangent 1 (fun x => (⟨x, v x⟩ : TangentBundle I M)))
(heq : γ a = γ b) : Periodic γ (a - b) := by
intro t
apply congrFun <|
isIntegralCurve_Ioo_eq_of_contMDiff_boundaryless (t₀ := b) hv (hγ.comp_add _) hγ _
rw [comp_apply, add_sub_cancel'_right, heq]

/-- A global integral curve is injective xor periodic with positive period. -/
lemma IsIntegralCurve.periodic_xor_injective [BoundarylessManifold I M]
(hγ : IsIntegralCurve γ v)
(hv : ContMDiff I I.tangent 1 (fun x => (⟨x, v x⟩ : TangentBundle I M))) :
Xor' (∃ T > 0, Periodic γ T) (Injective γ) := by
rw [xor_iff_iff_not]
refine ⟨fun ⟨T, hT, hf⟩ ↦ hf.not_injective (ne_of_gt hT), ?_⟩
intro h
rw [Injective] at h
push_neg at h
obtain ⟨a, b, heq, hne⟩ := h
refine ⟨|a - b|, ?_, ?_⟩
· rw [gt_iff_lt, abs_pos, sub_ne_zero]
exact hne
· by_cases hab : a - b < 0
· rw [abs_of_neg hab, neg_sub]
exact hγ.periodic_of_eq hv heq.symm
· rw [not_lt] at hab
rw [abs_of_nonneg hab]
exact hγ.periodic_of_eq hv heq

end ExistUnique