Documentation

LeanPool.ClassificationOfSurfaces.Moise.PolygonalCrosscut

Polygonal crosscuts #

The set-theoretic part of Moise Chapter 2, Theorems 7 and 8. Three polygonal arcs with common endpoints form three polygons. When the third arc is a chord inside the first polygon, the two polygons containing the chord lie inside the first polygon. This is the cutting lemma used in the free-triangle induction of Chapter 3.

Splitting a nondegenerate segment at a non-endpoint produces two subsegments meeting only at the split point.

Vertex sequence obtained by inserting p in edge zero. Its cyclic order is p, v₁, ..., vₙ₋₁, v₀.

Equations
Instances For

    The prospective edges of insertZero, before packaging the simple-polygon proofs.

    Equations
    Instances For
      theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.insertZero_nonadjacent_disjoint (J : PolygonalCircle) {p : Plane} (hp : p J.edgeSegment 0) (hp0 : p J.vertex 0) (hp1 : p J.vertex 1) (i j : ZMod (J.n + 1)) (hij : i j) (hprev : i j + 1) (hnext : j i + 1) :

      Splitting edge zero preserves disjointness of every pair of non-adjacent edges.

      A point on a segment splits it into two subsegments whose union is the original segment.

      Subdivide edge zero at a non-endpoint. The cyclic order is p, v₁, ..., vₙ₋₁, v₀.

      Equations
      • J.insertZero p hp hp0 hp1 = { n := J.n + 1, three_le := , vertex := J.insertZeroVertex p, adjacent_ne := , consecutive_inter := , nonadjacent_disjoint := }
      Instances For
        @[simp]
        theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.insertZero_n (J : PolygonalCircle) (p : Plane) (hp : p J.edgeSegment 0) (hp0 : p J.vertex 0) (hp1 : p J.vertex 1) :
        (J.insertZero p hp hp0 hp1).n = J.n + 1

        Inserting a vertex into an edge does not change the polygon carrier.

        Cyclically reindex a polygon so that the old index a becomes the new index zero.

        Equations
        • J.rotate a = { n := J.n, three_le := , vertex := fun (i : ZMod J.n) => J.vertex (i + a), adjacent_ne := , consecutive_inter := , nonadjacent_disjoint := }
        Instances For

          The bounded and unbounded complementary components depend only on the polygon carrier, not on its cyclic indexing.

          A point is a vertex of one of the cyclic presentations of a polygon.

          Equations
          Instances For

            A point known to be a polygon vertex lies on an edge exactly when it is one of that edge's two endpoints.

            Insert a boundary point as vertex zero without changing the carrier, while retaining every old vertex. Endpoint cases need only a cyclic reindexing; an interior edge point uses insertZero.

            Refine a polygonal presentation so that every point of a prescribed finite subset of its carrier is a polygon vertex, without changing the carrier.

            A straight crosscut of a polygonal disk: its endpoints lie on the polygon, while every other point of the segment lies in the polygon interior.

            Instances For

              Transport a proper chord across a different cyclic polygon presentation with the same carrier.

              Equations
              • C.congrCarrier hcarrier = { P := C.P, Q := C.Q, ne := , P_mem := , Q_mem := , interior_subset := }
              Instances For

                Reindexing the boundary polygon does not change a proper chord.

                Equations
                • C.rotate a = { P := C.P, Q := C.Q, ne := , P_mem := , Q_mem := , interior_subset := }
                Instances For

                  The chord meets the original polygon precisely at its endpoints.

                  Each endpoint of a proper chord lies on a concrete polygon edge.

                  The endpoints of a proper chord cannot lie on one polygon edge.

                  Normalize a proper chord so that its first endpoint lies on edge zero and its second endpoint lies on an edge with a positive ordinary index.

                  After subdividing boundary edges and cyclically reindexing, both chord endpoints are vertices, with the first at index zero and the second at a strictly positive ordinary index.

                  Reverse the orientation of a proper chord.

                  Equations
                  • C.symm = { P := C.Q, Q := C.P, ne := , P_mem := , Q_mem := , interior_subset := }
                  Instances For
                    theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.ProperChord.chord_disjoint_middleEdge {J : PolygonalCircle} (C : J.ProperChord) {k m : } (hm0 : 0 < m) (hmk : m + 1 < k) (hk : k < J.n) (hP : J.vertex 0 = C.P) (hQ : J.vertex k = C.Q) :

                    The forwardCutEdgeSegment declaration.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.ProperChord.forwardCut_nonadjacent_disjoint {J : PolygonalCircle} (C : J.ProperChord) {k : } (hk2 : 2 k) (hk : k + 1 < J.n) (hP : J.vertex 0 = C.P) (hQ : J.vertex k = C.Q) (i j : ZMod (k + 1)) (hij : i j) (hprev : i j + 1) (hnext : j i + 1) :

                      Close the forward boundary arc from vertex 0 to vertex k by a proper chord.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        The two cyclic boundary arcs cover the original polygon carrier.

                        The complementary arc has the same two endpoints as the forward arc.

                        The two complementary cyclic boundary arcs meet only at their endpoints.

                        Close the complementary boundary arc by the same chord, using a cyclic rotation.

                        Equations
                        Instances For

                          Crossing predicate for one oriented segment, separated from cyclic indexing.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For

                            Number of crossed polygon edges before reducing modulo two, indexed by ordinary naturals.

                            Equations
                            Instances For
                              theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.ProperChord.forwardCutCircle_edgeCrossed_of_lt {J : PolygonalCircle} (C : J.ProperChord) {k m : } (hk2 : 2 k) (hk : k + 1 < J.n) (hP : J.vertex 0 = C.P) (hQ : J.vertex k = C.Q) (hm : m < k) (P : Plane) :
                              (C.forwardCutCircle hk2 hk hP hQ).EdgeCrossed (↑m) P J.EdgeCrossed (↑m) P
                              theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.ProperChord.crossingCount_forwardCutCircle {J : PolygonalCircle} (C : J.ProperChord) {k : } (hk2 : 2 k) (hk : k + 1 < J.n) (hP : J.vertex 0 = C.P) (hQ : J.vertex k = C.Q) (P : Plane) :
                              (C.forwardCutCircle hk2 hk hP hQ).crossingCount P = (∑ mFinset.range k, if J.EdgeCrossed (↑m) P then 1 else 0) + if SegmentCrossed C.P C.Q P then 1 else 0
                              theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.ProperChord.crossingCount_backwardCutCircle {J : PolygonalCircle} (C : J.ProperChord) {k : } (hk2 : 2 k) (hk : k + 1 < J.n) (hP : J.vertex 0 = C.P) (hQ : J.vertex k = C.Q) (P : Plane) :
                              (C.backwardCutCircle hk2 hk hP hQ).crossingCount P = (∑ mFinset.range (J.n - k), if J.EdgeCrossed (↑(m + k)) P then 1 else 0) + if SegmentCrossed C.P C.Q P then 1 else 0
                              theorem LeanEval.Topology.ClassificationOfSurfaces.Moise.PolygonalCircle.ProperChord.index_parity_cutCircles {J : PolygonalCircle} (C : J.ProperChord) {k : } (hk2 : 2 k) (hk : k + 1 < J.n) (hP : J.vertex 0 = C.P) (hQ : J.vertex k = C.Q) (P : Plane) :
                              J.index P = ((C.forwardCutCircle hk2 hk hP hQ).index P + (C.backwardCutCircle hk2 hk hP hQ).index P) % 2

                              The carrier data of a polygonal theta graph. J12, J13, and J23 are the polygons formed by the indicated pairs of arcs.

                              Instances For

                                Every proper straight chord of a polygon determines the finite polygonal theta graph used in Moise Chapter 2, Theorems 7 and 8.

                                A theta crosscut realized by an edge of a triangle mesh of the original polygonal disk. This is the exact interface between the separation theorem of Chapter 2 and the cutting induction of Chapter 3.

                                Instances For

                                  Exchange the two boundary arcs of a theta graph.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For

                                    The interior of one cut-off polygon lies in the exterior of the other.

                                    The two closed subdisks cut off by a proper chord meet exactly in that chord.

                                    Moise Chapter 2, Theorem 8(2): the two chord polygons exactly fill the original closed polygonal disk.

                                    Exchange the two sides of a realized mesh crosscut.

                                    Equations
                                    • C.swap12 = { support_eq := , chordEdge := C.chordEdge, chordEdge_mem := , chordVertices := , chordCarrier := }
                                    Instances For

                                      Select the maximal triangles lying on the J13 side of the crosscut.

                                      Equations
                                      Instances For

                                        Select the maximal triangles lying on the J23 side of the crosscut.

                                        Equations
                                        Instances For

                                          Restricting along a realized crosscut gives exactly the first closed polygonal subdisk.

                                          Restricting along a realized crosscut gives exactly the second closed polygonal subdisk.