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: local existence of integral curves of vector field #8483

Closed
wants to merge 126 commits into from
Closed
Changes from 2 commits
Commits
Show all changes
126 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
fbb74c9
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Dec 8, 2023
a9d4cae
space
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
ccd1830
style
winstonyin Dec 13, 2023
122546d
spacing
winstonyin Dec 13, 2023
2c4d77d
restate existence theorem using filters
winstonyin Dec 14, 2023
5f7bb14
define `IsIntegralCurveAt` using `Eventually`
winstonyin Dec 14, 2023
29170c6
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Dec 14, 2023
6341072
PartialEquiv
winstonyin Dec 14, 2023
8e54212
PartialEquiv
winstonyin Dec 14, 2023
4efc1ad
PartialEquiv
winstonyin Dec 14, 2023
7b804f9
Replace => by \mapsto, per the style guide.
grunweg Dec 14, 2023
22d5ceb
Small golfs.
grunweg Dec 14, 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
749ea8c
IsIntegralCurveAt.hasMFDerivAt
winstonyin Dec 29, 2023
ca88b9d
Merge remote-tracking branch 'origin/master' into integral_curve
winstonyin Jan 5, 2024
c74e830
BoundarylessManifold
winstonyin Jan 5, 2024
353f3c9
Make I implicit again.
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
04649d0
Tinygolfs.
grunweg Jan 8, 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
156 changes: 156 additions & 0 deletions Mathlib/Geometry/Manifold/IntegralCurve.lean
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
/-
Copyright (c) 2023 Winston Yin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Winston Yin
-/
import Mathlib.Analysis.ODE.PicardLindelof
-- import Mathlib.Geometry.Manifold.ContMDiff

Check failure on line 7 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L7: ERR_MOD: Module docstring missing, or too late
-- import Mathlib.Geometry.Manifold.MFDeriv
import Mathlib.Geometry.Manifold.VectorBundle.SmoothSection

/-!
# Integral curves of vector fields on a manifold

For any continuously differentiable vector field on a manifold `M` and any chosen non-boundary point
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
`x₀ : M`, an integral curve `γ : ℝ → M` exists such that `γ t₀ = x₀` and the tangent vector of `γ`
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
at `t` coincides with the vector field at `γ t` for all `t` within an open interval around `t₀`.

As a corollary, such an integral curve exists for any starting point `x₀` if `M` is a manifold
without boundary.

winstonyin marked this conversation as resolved.
Show resolved Hide resolved
## Tags

integral curve, vector field
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
-/

open scoped Manifold
scoped[Manifold] notation "𝓔(" I ", " x ")" => extChartAt I x
scoped[Manifold] notation "𝓔⁻¹(" I ", " x ")" => LocalEquiv.symm (𝓔(I, x))

section

variable
{𝕜 : Type*} [NontriviallyNormedField 𝕜]
{E : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E]
{H : Type*} [TopologicalSpace H] {I : ModelWithCorners 𝕜 E H}
{M : Type*} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWithCorners I M]
{E' : Type*} [NormedAddCommGroup E'] [NormedSpace 𝕜 E']
{H' : Type*} [TopologicalSpace H'] {I' : ModelWithCorners 𝕜 E' H'}
{M' : Type*} [TopologicalSpace M'] [ChartedSpace H' M'] [SmoothManifoldWithCorners I' M']

def ModelWithCorners.IsInteriorPoint (x : M) := extChartAt I x x ∈ interior (extChartAt I x).target

lemma ModelWithCorners.Boundaryless.isOpen_target
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
[I.Boundaryless] {x : M} : IsOpen (extChartAt I x).target := by

Check failure on line 44 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L44: ERR_IND: If the theorem/def statement requires multiple lines, indent it correctly (4 spaces or 2 for `|`)

Check failure on line 44 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L44: ERR_IND: If the theorem/def statement requires multiple lines, indent it correctly (4 spaces or 2 for `|`)
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
rw [extChartAt_target, ModelWithCorners.Boundaryless.range_eq_univ, Set.inter_univ]
exact (ModelWithCorners.continuous_symm _).isOpen_preimage _ (LocalHomeomorph.open_target _)

lemma ModelWithCorners.Boundaryless.isInteriorPoint
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
[I.Boundaryless] {x : M} : I.IsInteriorPoint x := by

Check failure on line 49 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L49: ERR_IND: If the theorem/def statement requires multiple lines, indent it correctly (4 spaces or 2 for `|`)

Check failure on line 49 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L49: ERR_IND: If the theorem/def statement requires multiple lines, indent it correctly (4 spaces or 2 for `|`)
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
rw [ModelWithCorners.IsInteriorPoint,
IsOpen.interior_eq ModelWithCorners.Boundaryless.isOpen_target]
exact LocalEquiv.map_source _ (mem_extChartAt_source _ _)

end

variable
{E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [CompleteSpace E]
{H : Type*} [TopologicalSpace H] {I : ModelWithCorners ℝ E H}
{M : Type*} [TopologicalSpace M] [ChartedSpace H M] [SmoothManifoldWithCorners I M]
{E' : Type*} [NormedAddCommGroup E'] [NormedSpace ℝ E']
{H' : Type*} [TopologicalSpace H'] {I' : ModelWithCorners ℝ E' H'}
{M' : Type*} [TopologicalSpace M'] [ChartedSpace H' M'] [SmoothManifoldWithCorners I' M']
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
{v : (x : M) → TangentSpace I x} {x₀ : M}
(hv : ContMDiffAt I I.tangent 1 (fun x => (⟨x, v x⟩ : TangentBundle I M)) x₀) (t₀ : ℝ)

set_option trace.Meta.Tactic.simp.rewrite true

Check failure on line 66 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L66: ERR_OPT: Forbidden set_option command

Check failure on line 66 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L66: ERR_OPT: Forbidden set_option command
winstonyin marked this conversation as resolved.
Show resolved Hide resolved

/-- For any continuously differentiable vector field and any chosen non-boundary point `x₀` on the
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
manifold, an integral curve `γ : ℝ → M` exists such that `γ t₀ = x₀` and the tangent vector of `γ`
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
at `t` coincides with the vector field at `γ t` for all `t` within an open interval around `t₀`.-/
theorem exists_integralCurve_of_contMDiff_tangent_section (hx : I.IsInteriorPoint x₀) :
∃ ε > (0 : ℝ), ∃ (γ : ℝ → M), γ t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Set.Ioo (t₀ - ε) (t₀ + ε) →
HasMFDerivAt 𝓘(ℝ, ℝ) I γ t ((1 : ℝ →L[ℝ] ℝ).smulRight (v (γ t))) := by
rw [contMDiffAt_iff] at hv
obtain ⟨_, hv⟩ := hv
have hI : Set.range I ∈ nhds (extChartAt I x₀ x₀)
· rw [mem_nhds_iff]
refine ⟨interior (extChartAt I x₀).target,
subset_trans interior_subset (extChartAt_target_subset_range ..),
isOpen_interior, hx⟩
obtain ⟨ε1, hε1, f, hf1, hf2⟩ :=
exists_forall_hasDerivAt_Ioo_eq_of_contDiffAt t₀ (ContDiffAt.snd (hv.contDiffAt hI))
rw [←Real.ball_eq_Ioo] at hf2
-- use continuity of f to extract ε2 so that for t ∈ Real.ball t₀ ε2,
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
-- f t ∈ interior (extChartAt I x₀).target
have hcont := (hf2 t₀ (Real.ball_eq_Ioo .. ▸ Metric.mem_ball_self hε1)).continuousAt
rw [continuousAt_def, hf1] at hcont
have hnhds : f ⁻¹' (interior (extChartAt I x₀).target) ∈ nhds t₀
· apply hcont
exact IsOpen.mem_nhds isOpen_interior hx
rw [Metric.mem_nhds_iff] at hnhds
obtain ⟨ε2, hε2, hf3⟩ := hnhds
simp_rw [Set.subset_def, Set.mem_preimage] at hf3
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
-- prove the theorem
refine' ⟨min ε1 ε2, lt_min hε1 hε2, (extChartAt I x₀).symm ∘ f, _, _⟩
· apply Eq.symm
rw [Function.comp_apply, hf1, LocalEquiv.left_inv _ (mem_extChartAt_source ..)]
intros t ht
rw [←Real.ball_eq_Ioo] at ht
have ht1 := Set.mem_of_mem_of_subset ht (Metric.ball_subset_ball (min_le_left ..))
have ht2 := Set.mem_of_mem_of_subset ht (Metric.ball_subset_ball (min_le_right ..))
have h : HasDerivAt f
((fderivWithin ℝ
((extChartAt I x₀) ∘ (extChartAt I ((extChartAt I x₀).symm (f t))).symm)
(Set.range I)
(extChartAt I ((extChartAt I x₀).symm (f t)) ((extChartAt I x₀).symm (f t))))
(v ((extChartAt I x₀).symm (f t))))
t := hf2 t ht1
have hf3' := Set.mem_of_mem_of_subset (hf3 t ht2) interior_subset
rw [HasMFDerivAt]
use ContinuousAt.comp
(continuousAt_extChartAt_symm'' _ _ hf3') ((hf2 t ht1).continuousAt)
apply HasDerivWithinAt.hasFDerivWithinAt
rw [modelWithCornersSelf_coe, Set.range_id, hasDerivWithinAt_univ, ext_chart_model_space_apply,
writtenInExtChartAt, Function.comp_apply, Function.comp.assoc, extChartAt_model_space_eq_id,
LocalEquiv.refl_symm, LocalEquiv.refl_coe, Function.comp.right_id, ←Function.comp.assoc]
-- v -> identity v
rw [←tangentBundleCore_coordChange_achart] at h
have hvsub : v ((extChartAt I x₀).symm (f t)) = (tangentBundleCore I M).coordChange
(achart H x₀) (achart H ((extChartAt I x₀).symm (f t))) ((extChartAt I x₀).symm (f t))
((tangentBundleCore I M).coordChange (achart H ((extChartAt I x₀).symm (f t))) (achart H x₀)
((extChartAt I x₀).symm (f t)) (v ((extChartAt I x₀).symm (f t))))
· rw [(tangentBundleCore I M).coordChange_comp, (tangentBundleCore I M).coordChange_self]
· rw [tangentBundleCore_baseSet, coe_achart, ←extChartAt_source I, ←LocalEquiv.symm_target]
exact mem_extChartAt_source ..
· rw [tangentBundleCore_baseSet, tangentBundleCore_baseSet, coe_achart, coe_achart,
←extChartAt_source I, ←extChartAt_source I, Set.inter_comm, ←Set.inter_assoc, Set.inter_self]
constructor
· exact mem_extChartAt_source ..
· rw [←Set.mem_preimage]
apply Set.mem_of_mem_of_subset _ (LocalEquiv.source_subset_preimage_target _)
rw [LocalEquiv.symm_source]
exact hf3'
rw [hvsub]
apply HasFDerivAt.comp_hasDerivAt _ _ h
rw [tangentBundleCore_coordChange_achart, LocalEquiv.right_inv _ hf3', fderivWithin_of_mem_nhds]
· apply DifferentiableAt.hasFDerivAt
apply MDifferentiableAt.differentiableAt
apply MDifferentiableAt.comp (I' := I)
· exact (contMDiffAt_extChartAt (n := 1)).mdifferentiableAt (le_refl _)
· apply MDifferentiableOn.mdifferentiableAt
((contMDiffOn_extChartAt_symm (n := 1) _).mdifferentiableOn (le_refl _))
rw [mem_nhds_iff]
exact ⟨interior (extChartAt I x₀).target, interior_subset, isOpen_interior, hf3 _ ht2⟩
· rw [mem_nhds_iff]
refine ⟨interior (extChartAt I x₀).target,
subset_trans interior_subset (extChartAt_target_subset_range ..), isOpen_interior, hf3 _ ht2⟩

/-- For any continuously differentiable vector field defined on a manifold without boundary and any
chosen starting point `x₀ : M`, an integral curve `γ : ℝ → M` exists such that `γ t₀ = x₀` and the
tangent vector of `γ` at `t` coincides with the vector field at `γ t` for all `t` within an open
interval around `t₀`. -/
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
lemma exists_integralCurve_of_contMDiff_tangent_section_boundaryless [I.Boundaryless] :
∃ ε > (0 : ℝ), ∃ (γ : ℝ → M), γ t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Set.Ioo (t₀ - ε) (t₀ + ε) →

Check failure on line 154 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L154: ERR_IND: If the theorem/def statement requires multiple lines, indent it correctly (4 spaces or 2 for `|`)

Check failure on line 154 in Mathlib/Geometry/Manifold/IntegralCurve.lean

View workflow job for this annotation

GitHub Actions / Lint style

Mathlib/Geometry/Manifold/IntegralCurve.lean#L154: ERR_IND: If the theorem/def statement requires multiple lines, indent it correctly (4 spaces or 2 for `|`)
winstonyin marked this conversation as resolved.
Show resolved Hide resolved
HasMFDerivAt 𝓘(ℝ, ℝ) I γ t ((1 : ℝ →L[ℝ] ℝ).smulRight (v (γ t))) :=
exists_integralCurve_of_contMDiff_tangent_section hv _ ModelWithCorners.Boundaryless.isInteriorPoint
Loading