Michal Wallace
2018-08-11 22:13:15 UTC
I am working on formalizing Euler’s relation between the number of
n-dimensional faces of a polytope (aka the polyhedron formula), and then
hopefully using this to derive Pick’s theorem for the area of polygons
whose vertices fall on integer lattice points in the plane.
I intend to approach both proofs using arguments based on induction over a
triangulation.
There are a couple theorems relating to triangulations in
HOL/Analysis/Polytope.thy but I suspect I will need to generalize and
refactor them a bit if they are to be useful for me.
For the first proof, in each step, I start with a convex polytope and want
to make a single cut that separates one of its vertices, leaving me with
two convex polytopes.
For the second proof, I want to start with an arbitrary simple polygon (not
necessarily convex), and end up with a bijection between lattice points in
the polygon and vertices in the triangulation. Here, instead of one cut
going all the way through the polygon at each step, I need to make several
small cuts as I add each new vertex to the triangulation.
Basically, I seem to need some fine grained control over how the
triangulation is performed.
Here is what I’m currently thinking:
1.
A “cell_complex” is a recursive data type, where each interior node
represents a (generic) cut, and each leaf represents a polytope.
2.
A “triangulation” is a subtype of “cell_complex” where each leaf is a
simplex.
3.
A “cut” is a type parameter to those type, so cuts can be hyperplanes in
one case, and lists of line segments in the other, and so other people can
apply the idea to their own ends.
4.
A ‘ cut strategy is a function of type:: polytope => ‘cut triangulation
=> ‘cut
5.
Finally, I provide some generic function (polytope => ‘cut strategy =>
‘cut triangulation) takes care of the actual construction.
My hope is that with this strategy, I will be able to:
1.
Reason inductively about relationships either the polytope or the
resulting triangulation:
1.
Proof 1 : Euler’s relation holds for polytopes in dimension D if it
holds in all dimensions < D and it holds for the two parts after making a
cut [1]
2.
Proof 2: certain relationships between the numbers of edges, interior
points, and boundary points hold for the triangulation itself,
as each new
point is added. [2]
2.
I will be able to execute the algorithms on actual polytopes that I
construct in code, and produce nice little diagrams for the final paper.
I’m a programmer by trade, so I’m pretty confident in my ability to handle
part 2. I’m not so certain about part 1.
So… I think I’m basically asking for a sanity check on this approach. Does
it make sense? Are there things I should be looking at that already do
something like this? Am I going to run into trouble mixing ideas from
programming and geometry like this? Should I try to refactor the theorems
in Polytope.thy or just start from scratch?
Or is there a better way of approaching this altogether?
Thanks!
For reference, the informal proofs I’m working from are:
Helge Tverberg, “How to cut a convex polytope into simplices”
https://vdocuments.site/documents/how-to-cut-a-convex-polytope-into-simplices.html
W.W. Funkenbusch, “From Euler’s Formula to Pick’s Theorem, using an Edge
Theorem”
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.475.919&rep=rep1&type=pdf
n-dimensional faces of a polytope (aka the polyhedron formula), and then
hopefully using this to derive Pick’s theorem for the area of polygons
whose vertices fall on integer lattice points in the plane.
I intend to approach both proofs using arguments based on induction over a
triangulation.
There are a couple theorems relating to triangulations in
HOL/Analysis/Polytope.thy but I suspect I will need to generalize and
refactor them a bit if they are to be useful for me.
For the first proof, in each step, I start with a convex polytope and want
to make a single cut that separates one of its vertices, leaving me with
two convex polytopes.
For the second proof, I want to start with an arbitrary simple polygon (not
necessarily convex), and end up with a bijection between lattice points in
the polygon and vertices in the triangulation. Here, instead of one cut
going all the way through the polygon at each step, I need to make several
small cuts as I add each new vertex to the triangulation.
Basically, I seem to need some fine grained control over how the
triangulation is performed.
Here is what I’m currently thinking:
1.
A “cell_complex” is a recursive data type, where each interior node
represents a (generic) cut, and each leaf represents a polytope.
2.
A “triangulation” is a subtype of “cell_complex” where each leaf is a
simplex.
3.
A “cut” is a type parameter to those type, so cuts can be hyperplanes in
one case, and lists of line segments in the other, and so other people can
apply the idea to their own ends.
4.
A ‘ cut strategy is a function of type:: polytope => ‘cut triangulation
=> ‘cut
5.
Finally, I provide some generic function (polytope => ‘cut strategy =>
‘cut triangulation) takes care of the actual construction.
My hope is that with this strategy, I will be able to:
1.
Reason inductively about relationships either the polytope or the
resulting triangulation:
1.
Proof 1 : Euler’s relation holds for polytopes in dimension D if it
holds in all dimensions < D and it holds for the two parts after making a
cut [1]
2.
Proof 2: certain relationships between the numbers of edges, interior
points, and boundary points hold for the triangulation itself,
as each new
point is added. [2]
2.
I will be able to execute the algorithms on actual polytopes that I
construct in code, and produce nice little diagrams for the final paper.
I’m a programmer by trade, so I’m pretty confident in my ability to handle
part 2. I’m not so certain about part 1.
So… I think I’m basically asking for a sanity check on this approach. Does
it make sense? Are there things I should be looking at that already do
something like this? Am I going to run into trouble mixing ideas from
programming and geometry like this? Should I try to refactor the theorems
in Polytope.thy or just start from scratch?
Or is there a better way of approaching this altogether?
Thanks!
For reference, the informal proofs I’m working from are:
Helge Tverberg, “How to cut a convex polytope into simplices”
https://vdocuments.site/documents/how-to-cut-a-convex-polytope-into-simplices.html
W.W. Funkenbusch, “From Euler’s Formula to Pick’s Theorem, using an Edge
Theorem”
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.475.919&rep=rep1&type=pdf