Skip to content
Open
Show file tree
Hide file tree
Changes from 177 commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
5a114e2
Main content
michael-novak-math Mar 16, 2026
a9627f2
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 16, 2026
d2b3f91
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 16, 2026
2001076
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 16, 2026
2f6b473
trying to fix an issue with `lake exe mk_all`
michael-novak-math Mar 16, 2026
0b4dee2
Close the `PlaneCurve` namespace
michael-novak-math Mar 16, 2026
37a1324
add documentation information
michael-novak-math Mar 16, 2026
d1c120b
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 16, 2026
4ce9037
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 16, 2026
a0fe600
Replace `Fintype` with `Finite`
michael-novak-math Mar 16, 2026
a4c1e14
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 16, 2026
c0c72ae
create module and and make imports public
michael-novak-math Mar 16, 2026
4575f97
Merge branch 'plane-curves-branch' of https://github.com/michael-nova…
michael-novak-math Mar 16, 2026
319c2f7
revert mistakenly added / removed blak lines.
michael-novak-math Mar 16, 2026
823c98d
put back a mistakely delted line
michael-novak-math Mar 16, 2026
dd1caf7
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 16, 2026
13e5daf
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 16, 2026
acd5ced
trying some fix
michael-novak-math Mar 16, 2026
0647ba1
changes with `lake` and `Finite`
michael-novak-math Mar 16, 2026
14561d1
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 16, 2026
cb9faf4
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 16, 2026
4e1e8cb
`lake` commands and small documentation addtion.
michael-novak-math Mar 16, 2026
211336e
fix some linter warnings, mainly switching from `simp` to `simp only`.
michael-novak-math Mar 16, 2026
70e27d2
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 16, 2026
518b735
minimize imports
michael-novak-math Mar 17, 2026
ece7405
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
77fe398
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
3b4f7a4
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
57e3f58
solve a few linter warnings
michael-novak-math Mar 17, 2026
5e029af
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 17, 2026
90fb362
fix one linter warning
michael-novak-math Mar 17, 2026
10afae1
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
5397bf1
remove some unused arguements
michael-novak-math Mar 17, 2026
19b1f60
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 17, 2026
b508d14
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
346a766
remove more unsused arguments
michael-novak-math Mar 17, 2026
4614d7d
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 17, 2026
4b37736
remove one more unused arguement
michael-novak-math Mar 17, 2026
a3e7976
remove unused arguemnts (hopefully for the last time).
michael-novak-math Mar 17, 2026
19bc729
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 17, 2026
5ab24da
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
37989fe
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
0d5f58d
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 17, 2026
f40b666
Update Mathlib/Analysis/Calculus/Deriv/Prod.lean
michael-novak-math Mar 17, 2026
bad4659
Update Mathlib/Analysis/Calculus/Deriv/Prod.lean
michael-novak-math Mar 17, 2026
91f1c78
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 17, 2026
bf6c00b
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 17, 2026
f5c645d
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 17, 2026
6f4b9da
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 17, 2026
8306f82
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 17, 2026
ebf3ac1
some style fixes
michael-novak-math Mar 17, 2026
f4bfe80
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
a46598e
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
c2d8ef3
making the code more efficent, reducing repetition
michael-novak-math Mar 17, 2026
d9ecb0d
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 17, 2026
ca26f30
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 17, 2026
abb62d4
more code efficenct improvements, reducing repetitions.
michael-novak-math Mar 18, 2026
08db9bc
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 18, 2026
48bd644
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
623b3b5
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
29db69a
applying a fix for the `Fintype` warning (might be temporary)
michael-novak-math Mar 18, 2026
004a8ad
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
0c05761
style fixes
michael-novak-math Mar 18, 2026
617e457
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 18, 2026
ab8444f
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
2ee2bd2
a bit more code improvements
michael-novak-math Mar 18, 2026
24a51cc
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 18, 2026
cf82216
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
81def8a
small code improvements
michael-novak-math Mar 18, 2026
f62e2e2
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
a79339b
move a lemma for a better place and edit it
michael-novak-math Mar 18, 2026
cdeeacc
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
1cd9014
adding sections to use more global variables.
michael-novak-math Mar 18, 2026
87d3b97
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 18, 2026
eb1b59e
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 18, 2026
c859024
Apply suggestion from @Ruben-VandeVelde
michael-novak-math Mar 18, 2026
0b94a3a
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 19, 2026
adf11cb
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 19, 2026
0e1f835
small improvements, reducing the code a bit
michael-novak-math Mar 19, 2026
b4632e0
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 19, 2026
7a1b91e
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 19, 2026
841e757
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 19, 2026
f30e806
some code reduction with the help of `fun_prop` and `all_goals`
michael-novak-math Mar 19, 2026
867456b
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 19, 2026
3f7098f
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 19, 2026
6da26ec
more small code improvements
michael-novak-math Mar 19, 2026
1e42415
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 19, 2026
31656ca
small code organization improvement
michael-novak-math Mar 20, 2026
d0fb80c
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 20, 2026
0df10e2
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 20, 2026
4d485a6
some code reductions
michael-novak-math Mar 20, 2026
79d4a40
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 20, 2026
27c0082
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 20, 2026
ae44d56
apply some suggestions by grunweg, mainly inlining some `have`s
michael-novak-math Mar 20, 2026
01f0eb8
Merge branch 'plane-curves-branch' of https://github.com/michael-nova…
michael-novak-math Mar 20, 2026
949a9bd
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 20, 2026
45782a3
some more inlining of `have`s expressions elsewhere in the file
michael-novak-math Mar 20, 2026
1f7e361
Merge branch 'plane-curves-branch' of https://github.com/michael-nova…
michael-novak-math Mar 20, 2026
99743ef
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 20, 2026
6dd7574
more code reduction
michael-novak-math Mar 20, 2026
7897014
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 20, 2026
aff2faf
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 20, 2026
19e2672
more code reductions and efficency improvements
michael-novak-math Mar 21, 2026
e68b1ea
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 21, 2026
3f5c38a
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 21, 2026
c4a263d
more code reductions by better structuring
michael-novak-math Mar 21, 2026
4d9a61c
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 21, 2026
c02b223
more code reduction improvements
michael-novak-math Mar 21, 2026
9a83844
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 21, 2026
23c3ff4
more small code reductions
michael-novak-math Mar 21, 2026
8b608b3
small changes
michael-novak-math Mar 21, 2026
a74b413
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 21, 2026
7bcc83e
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 21, 2026
3f7bbe9
small code reductions
michael-novak-math Mar 21, 2026
55278f5
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 21, 2026
d42955b
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 22, 2026
19f1aed
some strucrturing, mainly splitting to lemmas
michael-novak-math Mar 22, 2026
afdb03e
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 22, 2026
aa1447e
more splitting to lemmas
michael-novak-math Mar 22, 2026
0f87d3a
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 22, 2026
59a8c5c
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 22, 2026
8ad6c46
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 22, 2026
f887a72
more splitting to lemmas
michael-novak-math Mar 22, 2026
541a92b
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Mar 22, 2026
73ec477
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 22, 2026
db8134c
getting rid of slightly outdated few lines of code
michael-novak-math Mar 22, 2026
c5bfd86
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 22, 2026
cd910b5
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 23, 2026
04b4c90
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 23, 2026
2349b20
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 23, 2026
8e52f30
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 24, 2026
bed6d54
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 24, 2026
69c036f
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 25, 2026
5050c97
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 25, 2026
3f343e5
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 26, 2026
75bd60d
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 27, 2026
7581121
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 27, 2026
ae71efd
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 28, 2026
0571a30
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 29, 2026
11c1a1a
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 30, 2026
ed66a83
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 30, 2026
f91f541
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 30, 2026
f9d7c6e
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 31, 2026
f28aaf8
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 31, 2026
a82c550
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 31, 2026
59a50f5
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 31, 2026
6f4a6d2
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 31, 2026
8dbcb8e
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 31, 2026
5a5b344
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Mar 31, 2026
75b2cf0
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 31, 2026
cf0658f
a few style improvements
michael-novak-math Mar 31, 2026
1967e02
Merge branch 'master' into plane-curves-branch
michael-novak-math Mar 31, 2026
d7e82df
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 1, 2026
cd540a8
remove the second part of the file about the fundamental theorem
michael-novak-math Apr 1, 2026
ff677a4
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 1, 2026
77b7b85
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 1, 2026
aab929a
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 1, 2026
b846281
Update Mathlib/Analysis/InnerProductSpace/Calculus.lean
michael-novak-math Apr 1, 2026
76965e6
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 1, 2026
30cbbb6
modifying the definiton of `normal` and changing some proofs as needed
michael-novak-math Apr 4, 2026
707de87
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 4, 2026
8828c76
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Apr 4, 2026
c64a6b8
generalize a lemma about the normal being a unit vector
michael-novak-math Apr 4, 2026
2609998
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 4, 2026
6ea8174
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 5, 2026
c77f375
change naming of some theorems and lemmas to be more descriptive
michael-novak-math Apr 6, 2026
0c522dd
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 6, 2026
d6079d0
move one lemma to a different file
michael-novak-math Apr 6, 2026
4422f5a
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 6, 2026
d5ecd04
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 6, 2026
9b0f5de
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 6, 2026
af6c30e
make variables implicit and have the explicit only in definitions
michael-novak-math Apr 6, 2026
16ab1bc
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 6, 2026
917a4f1
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 6, 2026
65926d1
mostly documentation improvements
michael-novak-math Apr 6, 2026
65d1982
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 6, 2026
3b98c68
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Apr 6, 2026
159b219
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Apr 7, 2026
55104e2
Update Mathlib/Geometry/PlaneCurves.lean
michael-novak-math Apr 7, 2026
6323293
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 7, 2026
703a6be
a small fix of a doc-string
michael-novak-math Apr 7, 2026
eed5c9b
make some variables explicit in some lemma
michael-novak-math Apr 7, 2026
569a64e
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 7, 2026
5cb3c8d
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 7, 2026
b959068
add information about junk value in the doc-string of a definition.
michael-novak-math Apr 7, 2026
a8783e9
Merge branch 'plane-curves-branch' of https://github.com/michael-nova…
michael-novak-math Apr 7, 2026
6df7dc0
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 7, 2026
3597599
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Apr 7, 2026
faca5ed
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 7, 2026
84785ae
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 7, 2026
ab85f92
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 7, 2026
df07645
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 8, 2026
1b83bb1
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 8, 2026
a7b663f
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 8, 2026
19053de
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 10, 2026
a93e537
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 11, 2026
659e777
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 12, 2026
f0c72d2
Merge branch 'master' into plane-curves-branch
michael-novak-math Apr 12, 2026
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 @@ -4518,6 +4518,7 @@ public import Mathlib.Geometry.Manifold.VectorBundle.Tensoriality
public import Mathlib.Geometry.Manifold.VectorField.LieBracket
public import Mathlib.Geometry.Manifold.VectorField.Pullback
public import Mathlib.Geometry.Manifold.WhitneyEmbedding
public import Mathlib.Geometry.PlaneCurves
public import Mathlib.Geometry.Polygon.Basic
public import Mathlib.Geometry.RingedSpace.Basic
public import Mathlib.Geometry.RingedSpace.LocallyRingedSpace
Expand Down
18 changes: 18 additions & 0 deletions Mathlib/Analysis/InnerProductSpace/Calculus.lean
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,14 @@ theorem hasFDerivWithinAt_euclidean :
∀ i, HasFDerivWithinAt (fun x => f x i) (PiLp.proj _ _ i ∘L f') t y :=
hasFDerivWithinAt_piLp _

theorem hasDerivWithinAt_pi_euclidean {f : 𝕜 → EuclideanSpace 𝕜 ι}
{f' : EuclideanSpace 𝕜 ι} {s : Set 𝕜} {x : 𝕜} :
letI : Fintype ι := Fintype.ofFinite ι
HasDerivWithinAt f f' s x ↔ ∀ i, HasDerivWithinAt (fun x ↦ f x i) (f' i) s x := by
letI : Fintype ι := Fintype.ofFinite ι
rw [hasDerivWithinAt_iff_hasFDerivWithinAt]
exact hasFDerivWithinAt_euclidean

end finite

section fintype
Expand Down Expand Up @@ -395,3 +403,13 @@ theorem contDiffOn_univBall_symm :
end OpenPartialHomeomorph

end DiffeomorphUnitBall

universe u

lemma inners_sum_eq_zero_of_const_inner_on_open {ι : Type u} [Fintype ι] {I : Set ℝ} {t s : ℝ}
{α β : ℝ → EuclideanSpace ℝ ι} (hI : IsOpen I) (ht : t ∈ I) {α' β' : EuclideanSpace ℝ ι}
(hdα : HasDerivAt α α' t) (hdβ : HasDerivAt β β' t)
(hci : Set.EqOn (fun t ↦ inner ℝ (α t) (β t)) (fun _ ↦ s) I) :
inner ℝ (α t) β' + inner ℝ α' (β t) = 0 := by
simp [← (HasDerivAt.inner ℝ hdα hdβ).deriv, ← derivWithin_of_isOpen hI ht,
derivWithin_congr hci (hci ht)]
256 changes: 256 additions & 0 deletions Mathlib/Geometry/PlaneCurves.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
/-
Copyright (c) 2026 Michael Novak. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Michael Novak
-/
module

public import Mathlib.Analysis.InnerProductSpace.Calculus
public import Mathlib.Analysis.SpecialFunctions.Trigonometric.Deriv
public import Mathlib.Analysis.Calculus.Deriv.Prod
public import Mathlib.Analysis.Calculus.ContDiff.WithLp
public import Mathlib.MeasureTheory.Integral.IntervalIntegral.FundThmCalculus

/-!
# Plane curves

In this file we introduce basic definitions related to plane curves: `orientedCurvature`, which is
usually called just the curvature of a plane curve, `normal`, the normal vector to every point of a
plane curve and `frameAt` the so called Frenet moving frame. We also prove some classic results in
the subject of differential geometry of plane curves: the Frenet equations and the fundamental
theorem of plane curves (in a future PR).

## Main results

- `second_deriv_eq_orientedCurvature_times_normal`: the first Frenet equation for plane curves.
- `deriv_normal_eq_minus_orientedCurvature_times_deriv`: the second Frenet equation for plane
curves.

## References

We mainly followed [zbMATH07533267], especially for the fundamental theorem of plane curves (in a
future PR).
-/

@[expose] public section

noncomputable section

namespace PlaneCurve

variable {I : Set ℝ} {c : ℝ → EuclideanSpace ℝ (Fin 2)} {t : ℝ}

/-- Oriented curvature of a plane curve `c` at `t`. This is usually called just the curvature of a
plane curve in most elementary differential geometry texts, but because this definition is slightly
different from the general definition of the curvature of a general parametrized curve (which is
always non-negative and only expresses magnitude as opposed to this definition which can also be
negative and expresses also direction) we call this the oriented curvature, this is also the name
given in the Wikipedia article about curvature in the section about plane curves.
This curvature expresses a direction / orientation in the following way:
Denote `v = deriv c t`, `a = iteratedDeriv 2 c t`, `n = normal c t` and `κ = orientedCurvature c t`.
Then for a general plane curve, if (`v`, `a`) is a positvely oriented, then `κ` is positive, and if
it's negatively oriented, then `κ` is negative (geometrically the orientation of a basis of the
plane is positive when the basis vectors are ordered anti-clockwise and negative when ordered
clockwise). It's useful for understanding also to consider the case in which `c` is parametrized by
arc-length, in which case `a` is in the span of `n` and `κ` is positive if `a` is in the same
direction as `n` and negative if `a` is in the opposite direction of `n`.
This definition is meaningful only when `c` is two times differentiable at `t` with a non-zero
derivative; otherwise it has junk value `0`. -/
def orientedCurvature (c : ℝ → EuclideanSpace ℝ (Fin 2)) (t : ℝ) : ℝ :=
!![deriv c t 0, deriv c t 1; iteratedDeriv 2 c t 0, iteratedDeriv 2 c t 1].det / (‖deriv c t‖ ^ 3)

/-- See `orientedCurvature` for a full explanation about the definition. It's important to note that
`orientedCurvature c t` is only meaningful when `c` is two times differentiable at `t` with a
non-zero derivative; otherwise it has junk value `0`.
See also `orientedCurvature_of_norm_deriv_eq_one` for the special case where `‖deriv c t‖ = 1` (this
is useful usually for plane curves parametrized by arc-length). -/
lemma orientedCurvature_eq : orientedCurvature c t = !![deriv c t 0, deriv c t 1;
iteratedDeriv 2 c t 0, iteratedDeriv 2 c t 1].det / (‖deriv c t‖ ^ 3) := rfl

/-- Normal vector at a point of a plane curve.
This definition is only meaningful when `c` is differentiable at `t` with non-zero derivative. -/
def normal (c : ℝ → EuclideanSpace ℝ (Fin 2)) (t : ℝ) :
EuclideanSpace ℝ (Fin 2) := ‖deriv c t‖⁻¹ • !₂[-(deriv c t 1), deriv c t 0]

lemma normal_eq : normal c t = ‖deriv c t‖⁻¹ • !₂[-(deriv c t 1), deriv c t 0] := rfl

/-- A lemma that gives us a formula for the normal when the derivative has length 1, this is
useful especially for plane curves parametrized by arc-length (with unit speed). -/
lemma normal_eq_of_norm_deriv_eq_one (h : ‖deriv c t‖ = 1) :
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how useful this lemma will be in practice. (Right now, you're using it more because you're considering unit speed curves more than necessary.) If this proves useful, please mention this in a doc-string to normal_eq also.

normal c t = !₂[-(deriv c t 1), deriv c t 0] := by
simp [normal_eq, h]

/-- The `normal` vector at point of a plane curve is orthogonal to the velocity vector at the point.
-/
theorem inner_deriv_normal_eq_zero : inner ℝ (deriv c t) (normal c t) = 0 := by
rw [normal_eq, real_inner_smul_right]
simp [PiLp.inner_apply, real_inner_eq_re_inner, mul_comm]

/-- The `normal` vector at point with a non-zero derivative of a plane curve has length 1 (is a unit
vector). -/
theorem norm_normal_eq_one_of_non_zero_deriv (h : deriv c t ≠ 0) : ‖normal c t‖ = 1 := by
rw [normal_eq, NormSMulClass.norm_smul, norm_inv, norm_norm]
simp only [Fin.isValue, EuclideanSpace.norm_eq !₂[-(deriv c t).ofLp 1, (deriv c t).ofLp 0],
Real.norm_eq_abs, sq_abs, Fin.sum_univ_two, Matrix.cons_val_zero, even_two, Even.neg_pow,
Matrix.cons_val_one, Matrix.cons_val_fin_one, add_comm]
rw [show √((deriv c t).ofLp 0 ^ 2 + (deriv c t).ofLp 1 ^ 2) = √(∑ i, ‖(deriv c t).ofLp i‖ ^ 2) by
simp, ← EuclideanSpace.norm_eq (deriv c t), show ‖deriv c t‖⁻¹ * ‖deriv c t‖ = ‖deriv c t‖ /
‖deriv c t‖ by ring, div_self (norm_ne_zero_iff.mpr h)]

/-- A special useful case, unit speed at a point implies that the normal is a unit vector as well -/
theorem norm_normal_eq_one_of_norm_deriv_eq_one (h : ‖deriv c t‖ = 1) : ‖normal c t‖ = 1 :=
have h' : deriv c t ≠ 0 := by
rw [← norm_ne_zero_iff, h]
exact one_ne_zero
norm_normal_eq_one_of_non_zero_deriv h'

/-- For every plane curve `c` parametrized by arc-length, the velocity vector `deriv c` and the
`normal` vector at each point form an orthonormal basis of the plane, which is sometimes called the
moving frame of the curve or the Frenet frame, which we call `frameAt`. -/
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This definition can also be generalised the same way.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I generalized now the lemma about the normal being a unit vector. In regards to generalizing the Frenet frame, I don't think it's so straight forward, because the derivative need to be a unit vector in order for us to get an orthonormal basis out of the the deriv and normal at a point. We could define something like a unit tangent at point, which is the deriv normalized, but in the text I used we just work with curves parametrized by arc-length (which we know we could always get given a regular curve). So do you think we should define something like a unit tangent vector and then express everything with it (including the Frenet equations for example, which would take some work to redo), instead of working with curves parametrized by arc length?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some thoughts for now. I'd need to think a bit more about some details, but can already say the following:

  • I think if a lemma is useful for general curves (not just unit-length ones), it should be stated and proven in this generality. (The normal vector lemmas are such an example.)
  • I'm sceptical a "unit tangent" definition is pulling its weight. (Stating lemmas in terms of that will make them harder to apply to a given curve, which may or may not be of unit speed.)
  • In principle, you could define the Frénet frame of any curve (using the normalised derivative). The mathematical question: is this useful? Are the Frénet equations applied to curves which are not of unit length parametrisation? Answering this will require looking beyond "my favourite text does it like this", but answering "is is useful to do this differently". Perhaps consulting other textbooks. Thinking how the theorem is applied elsewhere, etc. (I haven't looked if Frénet's theorem is used in current research, and under what assumptions.)

If you have opinions on these, I'm happy to hear them. Otherwise, I can try to do some research (probably only in a week or so).

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some thoughts for now. I'd need to think a bit more about some details, but can already say the following:

* I think if a lemma is useful for general curves (not just unit-length ones), it should be stated and proven in this generality. (The normal vector lemmas are such an example.)

* I'm sceptical a "unit tangent" definition is pulling its weight. (Stating lemmas in terms of that will make them harder to apply to a given curve, which may or may not be of unit speed.)

* In principle, you could define the Frénet frame of any curve (using the normalised derivative). The mathematical question: is this useful? Are the Frénet equations applied to curves which are not of unit length parametrisation? Answering this will require looking beyond "my favourite text does it like this", but answering "is is useful to do this differently". Perhaps consulting other textbooks. Thinking how the theorem is applied elsewhere, etc. (I haven't looked if Frénet's theorem is used in current research, and under what assumptions.)

If you have opinions on these, I'm happy to hear them. Otherwise, I can try to do some research (probably only in a week or so).

I don't really have any strong opinion what's the best solution, so I'll wait for the result of your research. I'll just say that I personally saw two presentation of this work: one where we always work with unit-speed curves (we know that every regular curve can be parametrized by arc-length), where the derivative is always unit in any case, this is the presentation I used in my formalization. The second presentation, which is also in the wikipedia article about the Frenet equations is using a unit tangent. I don't know if there's a third way of doing it, especially since for the moving frame we want to get an orthonormal basis, so we need unit vectors. I totally agree that if there are some lemmas that could be generalized even if this will not help what we want to prove in this file, it's still important to state and prove.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And in regards to your point about how are the Frenet equations used, I don't have many examples, but I have one example - in the fundamental theorem of plane curves, it's used for a curve parametrized by arc-length, although maybe there's also some other generalization of the fundamental theorem of plane curves, I'm not sure.

def frameAt (hc : ∀ t ∈ I, ‖deriv c t‖ = 1) (ht : t ∈ I) :
OrthonormalBasis (Fin 2) ℝ (EuclideanSpace ℝ (Fin 2)) :=
let B := ![deriv c t, normal c t]
have hBon : Orthonormal ℝ B := by
constructor
· intro i
fin_cases i
<;> simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.zero_eta, Fin.mk_one, Fin.isValue]
· exact hc t ht
· exact norm_normal_eq_one_of_norm_deriv_eq_one (hc t ht)
· intro i j hinej
fin_cases i
· simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.zero_eta, Fin.isValue, ne_eq] at hinej
have h : j=1 := Fin.eq_one_of_ne_zero j fun a ↦ hinej (id (Eq.symm a))
simp only [h, Fin.isValue]
exact inner_deriv_normal_eq_zero
· simp at hinej
have h : j=0 := by fin_cases j <;> trivial
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, Fin.mk_one, Fin.isValue, h, real_inner_comm]
exact inner_deriv_normal_eq_zero
have hBsp : ⊤ ≤ Submodule.span ℝ (Set.range B) := by
simp only [Nat.succ_eq_add_one, Nat.reduceAdd, top_le_iff]
apply hBon.linearIndependent.span_eq_top_of_card_eq_finrank; simp
OrthonormalBasis.mk (v := B) (hon := hBon) (hsp := hBsp)

set_option backward.isDefEq.respectTransparency false in
/-- A simpler formula for the curvature (`orientedCurvature`) of a plane curve `c` with unit
derivative at `t` (usually used when `c` is parametrized by arc-length, i.e, with unit speed). -/
theorem orientedCurvature_of_norm_deriv_eq_one (h : ‖deriv c t‖ = 1) :
orientedCurvature c t = inner ℝ (iteratedDeriv 2 c t) (normal c t) := by
simp only [orientedCurvature_eq, normal_eq_of_norm_deriv_eq_one h, h,
Fin.isValue, Matrix.det_fin_two_of, one_pow, div_one, EuclideanSpace.inner_eq_star_dotProduct,
Fin.isValue, star_trivial, Matrix.cons_dotProduct, neg_mul, Matrix.dotProduct_of_isEmpty,
add_zero]
exact sub_eq_neg_add ((deriv c t).ofLp 0 * (iteratedDeriv 2 c t).ofLp 1)
((deriv c t).ofLp 1 * (iteratedDeriv 2 c t).ofLp 0)

universe u

variable {ι : Type u} [Fintype ι] {γ : ℝ → EuclideanSpace ℝ ι}

/-- If `γ` is a twice continuously differentiable parametrized curve on an interval
`I`, then the velocity vector `deriv γ` has a derivative at every point of `I`. -/
lemma hasDerivAt_deriv_of_contDiffOn (hI : IsOpen I) (hγ : ContDiffOn ℝ 2 γ I) (ht : t ∈ I) :
HasDerivAt (deriv γ) (iteratedDeriv 2 γ t) t := by
have hd : ContDiffOn ℝ 1 (deriv γ) I := hγ.deriv_of_isOpen hI (by norm_num)
rw [iteratedDeriv_succ, iteratedDeriv_one]
exact (hd.differentiableOn (by norm_num)).hasDerivAt (hI.mem_nhds ht)

/-- Given a continuously differentiable parametrized curve `c` whose position has the same magnitude
at all time, i.e, at constant radius distance from the origin (the curve `γ` is contained in a
sphere of radius `r` from the origin), then the velocity vector `deriv γ` is always perpendicular to
the position vector of the curve at every point (in other words their dot product is zero). -/
theorem inner_deriv_curve_eq_zero_of_const_norm_curve (hI : IsOpen I)
(hγ₁ : ContDiffOn ℝ 1 γ I) {r : ℝ} (hγ₂ : ∀ t ∈ I, ‖γ t‖ = r) (ht : t ∈ I) :
inner ℝ (deriv γ t) (γ t) = 0 := by
have h : I.EqOn (fun x ↦ inner ℝ (γ x) (γ x)) (fun x ↦ r ^ 2) := fun x hx ↦ by simp [hγ₂ x hx]
have hd : HasDerivAt γ (deriv γ t) t :=
(hγ₁.contDiffAt (hI.mem_nhds ht)).differentiableAt_one.hasDerivAt
suffices 2 * inner ℝ (deriv γ t) (γ t) = 0 by simpa
rw [← inners_sum_eq_zero_of_const_inner_on_open hI ht hd hd h, real_inner_comm, two_mul]

/-- For any twice continuously differentiable parametrized curve with constant speed, at any given
point the velocity vector is perpendicular to the acceleration vector. -/
theorem inner_second_deriv_deriv_eq_zero_of_const_norm_deriv (hI : IsOpen I)
(hγ₁ : ContDiffOn ℝ 2 γ I) {r : ℝ} (hγ₂ : ∀ t ∈ I, ‖deriv γ t‖ = r) (ht : t ∈ I) :
inner ℝ (iteratedDeriv 2 γ t) (deriv γ t) = 0 := by
rw [iteratedDeriv_succ, iteratedDeriv_one, inner_deriv_curve_eq_zero_of_const_norm_curve hI
((contDiffOn_succ_iff_deriv_of_isOpen hI).mp (by assumption)).2.2 hγ₂ ht]

/-- The first Frenet equation for plane curves: For any twice continously differentiable plane curve
parametrized by arc-length (i.e., with unit speed), the second derivative, i.e. acceleration vector
is equal to the curvature times the normal vector. -/
theorem second_deriv_eq_orientedCurvature_times_normal (hI : IsOpen I) (hc₁ : ContDiffOn ℝ 2 c I)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you prove a version assuming just a non-zero derivative?

(hc₂ : ∀ t ∈ I, ‖deriv c t‖ = 1) (ht : t ∈ I) :
iteratedDeriv 2 c t = (orientedCurvature c t)•(normal c t) := by
rw [orientedCurvature_of_norm_deriv_eq_one (hc₂ t ht)]
nth_rewrite 1 [← (frameAt hc₂ ht).sum_repr' (iteratedDeriv 2 c t)]
simp only [frameAt, Nat.succ_eq_add_one, Nat.reduceAdd, OrthonormalBasis.coe_mk, Fin.sum_univ_two,
Fin.isValue, Matrix.cons_val_zero, Matrix.cons_val_one, Matrix.cons_val_fin_one]
rw [real_inner_comm , real_inner_comm (iteratedDeriv 2 c t),
inner_second_deriv_deriv_eq_zero_of_const_norm_deriv hI hc₁ hc₂ ht]; simp

/-- Auxiliary lemma: If `c` is a twice continuously differentiable plane curve on an interval `I`,
then the normal has a derivative at every point of `I`. -/
protected lemma _root_.HasDerivAt.normal (hI : IsOpen I) (hc₁ : ContDiffOn ℝ 2 c I) (ht : t ∈ I)
(hc₂ : ∀ t ∈ I, ‖deriv c t‖ = 1) : HasDerivAt (normal c) (deriv (normal c) t) t := by
have hd : ContDiffOn ℝ 1 (deriv c) I := hc₁.deriv_of_isOpen hI (by norm_num)
have hD : DifferentiableOn ℝ (deriv c) I := hd.differentiableOn (by norm_num)
simp only [hasDerivAt_deriv_iff]
have h : DifferentiableOn ℝ (fun τ ↦ normal c τ) I := by
have hn : ∀ τ ∈ I, normal c τ = !₂[-(deriv c τ 1), deriv c τ 0] :=
fun τ hτ ↦ normal_eq_of_norm_deriv_eq_one (hc₂ τ hτ)
rw [differentiableOn_congr hn, differentiableOn_piLp] at *
intro i
fin_cases i <;> simp [hD]
exact h.differentiableAt (hI.mem_nhds ht)

@[fun_prop]
lemma _root_.ContDiffOn.normal_of_twice_contDiffOn (hI : IsOpen I) (hc₁ : ContDiffOn ℝ 2 c I)
(hc₂ : ∀ t ∈ I, ‖deriv c t‖ = 1) : ContDiffOn ℝ 1 (normal c) I := by
have hd : ContDiffOn ℝ 1 (deriv c) I := hc₁.deriv_of_isOpen hI (by norm_num)
have hn : ∀ τ ∈ I, normal c τ = !₂[-(deriv c τ 1), deriv c τ 0] :=
fun τ hτ ↦ normal_eq_of_norm_deriv_eq_one (hc₂ τ hτ)
rw [contDiffOn_congr hn, contDiffOn_piLp] at *
intro i
fin_cases i
· simp [ContDiffOn.neg, hd 1]
· simp [hd 0]

/-- For any twice continuously differentiable plane curve with constant speed, at any given point
the normal vector is perpendicular to the derivative of the normal vector. -/
theorem inner_deriv_normal_normal_eq_zero_of_norm_deriv_eq_one (hI : IsOpen I)
(hc₁ : ContDiffOn ℝ 2 c I) (hc₂ : ∀ t ∈ I, ‖deriv c t‖ = 1) (ht : t ∈ I) :
inner ℝ (deriv (normal c) t) (normal c t) = 0 :=
inner_deriv_curve_eq_zero_of_const_norm_curve hI (by fun_prop (disch := assumption))
(fun _ ht ↦ norm_normal_eq_one_of_norm_deriv_eq_one (hc₂ _ ht)) ht

theorem inner_deriv_deriv_normal_eq_minus_orientedCurvature (hI : IsOpen I)
(hc₁ : ContDiffOn ℝ 2 c I) (hc₂ : ∀ t ∈ I, ‖deriv c t‖ = 1) (ht : t ∈ I) :
inner ℝ (deriv c t) (deriv (normal c) t) = - orientedCurvature c t := by
rw [← add_eq_zero_iff_eq_neg', add_comm]
symm
have hci : Set.EqOn (fun x ↦ inner ℝ (normal c x) (deriv c x)) (fun x ↦ 0) I := by
intro x hx
simp only
rw [real_inner_comm, inner_deriv_normal_eq_zero]
rw [← inners_sum_eq_zero_of_const_inner_on_open hI ht (HasDerivAt.normal hI hc₁ ht hc₂)
(hasDerivAt_deriv_of_contDiffOn hI hc₁ ht) hci, second_deriv_eq_orientedCurvature_times_normal
hI hc₁ hc₂ ht, real_inner_comm, inner_smul_left_eq_smul]
simp only [inner_self_eq_norm_sq_to_K, norm_normal_eq_one_of_norm_deriv_eq_one (hc₂ t ht),
RCLike.ofReal_real_eq_id, id_eq, one_pow, smul_eq_mul, mul_one, add_comm, real_inner_comm]

/-- The second Frenet equation for plane curves: For any twice continously differentiable plane
curve parametrized by arc-length (i.e., with unit speed), the derivative of the normal vector is
equal to minus the curvature times the velocity vector (first derivative). -/
theorem deriv_normal_eq_minus_orientedCurvature_times_deriv (hI : IsOpen I)
(hc₁ : ContDiffOn ℝ 2 c I) (hc₂ : ∀ t ∈ I, ‖deriv c t‖ = 1) (ht : t ∈ I) :
deriv (normal c) t = -(orientedCurvature c t)•(deriv c t) := by
rw [← (frameAt hc₂ ht).sum_repr' (deriv (normal c) t)]
simp only [frameAt, Nat.succ_eq_add_one, Nat.reduceAdd, OrthonormalBasis.coe_mk, Fin.sum_univ_two,
Fin.isValue, Matrix.cons_val_zero, Matrix.cons_val_one, Matrix.cons_val_fin_one, neg_smul,
real_inner_comm (deriv (normal c) t) (normal c t),
inner_deriv_normal_normal_eq_zero_of_norm_deriv_eq_one hI hc₁ hc₂ ht]
simp [inner_deriv_deriv_normal_eq_minus_orientedCurvature hI hc₁ hc₂ ht]

end PlaneCurve
Original file line number Diff line number Diff line change
Expand Up @@ -940,6 +940,41 @@ theorem differentiableOn_integral_of_continuous {s : Set ℝ} (hcont : Continuou
DifferentiableOn ℝ (fun u => ∫ x in a..u, f x) s :=
(differentiable_integral_of_continuous hcont).differentiableOn

/-- This is a version of the first part of FTC for a function which is continuous on an interval.
Credit to Aaron Liu. -/
theorem hasDerivWithinAt_of_continuousOn_interval {I : Set ℝ} [I.OrdConnected] {f : ℝ → ℝ}
(h : ContinuousOn f I) {x₀ x : ℝ} (hx₀ : x₀ ∈ I) (hx : x ∈ I) :
HasDerivWithinAt (fun t ↦ ∫ τ in x₀..t, f τ) (f x) I x :=
have : intervalIntegral.FTCFilter x (nhdsWithin x I) (nhdsWithin x I) := by
refine @intervalIntegral.FTCFilter.mk x (nhdsWithin x I) (nhdsWithin x I) ⟨?_⟩ ?_ ?_ ?_
· rw [Filter.tendsto_smallSets_iff]
intro t ht
rw [mem_nhdsWithin_iff_exists_mem_nhds_inter] at ht
obtain ⟨u, hu, hut⟩ := ht
obtain ⟨a, b, haxb, habx, habu⟩ := exists_Icc_mem_subset_of_mem_nhds hu
have hab : Set.Icc a b ∩ I ∈ nhdsWithin x I :=
Set.inter_comm _ _ ▸ inter_mem_nhdsWithin I habx
filter_upwards [Filter.prod_mem_prod hab hab] with (i, j) ⟨hi, hj⟩
refine subset_trans (Set.subset_inter ?_ ?_) hut
· refine subset_trans ?_ habu
intro k hk
exact ⟨hi.1.1.trans hk.1.le, hk.2.trans hj.1.2⟩
· intro k hk
exact Set.Icc_subset I hi.2 hj.2 (Set.Ioc_subset_Icc_self hk)
· exact pure_le_nhdsWithin hx
· exact nhdsWithin_le_nhds
· exact @Filter.inf_isMeasurablyGenerated _ _ _ _ _
(Set.OrdConnected.measurableSet ‹_›).principal_isMeasurablyGenerated
intervalIntegral.integral_hasDerivWithinAt_right
((h.mono (Set.OrdConnected.uIcc_subset ‹_› hx₀ hx)).intervalIntegrable)
(h.stronglyMeasurableAtFilter_nhdsWithin (Set.OrdConnected.measurableSet ‹_›) x)
(h.continuousWithinAt hx)

theorem hasDerivAt_integral_of_continuousOn_open_interval {I : Set ℝ} [I.OrdConnected] {t₀ t : ℝ}
(hI : IsOpen I) {f : ℝ → ℝ} (hf : ContinuousOn f I) (ht₀ : t₀ ∈ I) (ht : t ∈ I) :
HasDerivAt (fun x ↦ ∫ u in t₀..x, f u) (f t) t :=
(hasDerivWithinAt_of_continuousOn_interval hf ht₀ ht).hasDerivAt (hI.mem_nhds ht)

end FTC1

/-!
Expand Down
17 changes: 17 additions & 0 deletions docs/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -5678,6 +5678,23 @@ @Article{ zbMATH06785026
url = {https://doi.org/10.1103/PhysRevLett.23.880}
}

@Book{ zbMATH07533267,
author = {Alencar, Hil{\'a}rio and Santos, Walcy and Silva Neto,
Greg{\'o}rio},
title = {Differential geometry of plane curves},
fseries = {Student Mathematical Library},
series = {Stud. Math. Libr.},
issn = {1520-9121},
volume = {96},
isbn = {978-1-4704-6959-7; 978-1-4704-7036-4},
year = {2022},
publisher = {Providence, RI: American Mathematical Society (AMS)},
language = {English},
keywords = {53-01,53A04,53E10},
zbmath = {7533267},
zbl = {1511.53001}
}

@Article{ zeilberger1984,
author = {Zeilberger, Doron},
title = {A combinatorial proof of {N}ewton's identities},
Expand Down
Loading