Documentation

LeanPool.Schoenflies.InitialPairFixed

The complete construction of prop:initial-pair #

Schoenflies/InitialPair.lean builds the initial matched pair but leaves three things that def:matched-pair and prop:initial-pair actually assert:

  1. the anchor clause. The blueprint chooses a, b ∈ 𝒜, the fixed countable dense set of strongly accessible points of prop:countable-strong-access (tex 1403–1418). InitialData records neither the anchor set nor the strong accessibility of a and b, so nothing downstream can build a further crosscut ending at them, and lem:anchor-density — which needs the anchors of every stage to be points of 𝒜 — has nothing to attach to. Schoenflies.AnchorSet is 𝒜 as data, Schoenflies.AnchoredInitialData is the initial pair with the clause recorded, and Schoenflies.AnchoredInitialData.stronglyAccessible_a / .exists_access_segment_a turn it back into the straight access segment lem:tangent-cone supplies.
  2. the matched labelling. InitialData.source_closure_cell_inter labels the two source 2-cells by the two boundary arcs A₁, A₂ of C, and .target_closure_cell_inter labels the two target 2-cells by the two boundary arcs of S — independently. Nothing said the two labellings correspond, which is the whole content of a matched pair. Schoenflies.InitialData.tgt_arcOf_eq_image (tgt.arcOf k = u '' src.arcOf k), .skeletonHomeo_image_arcOf and .closure_cell_face_link supply the link.
  3. def:admissible-graph for the target: "all its edges are polygonal". Schoenflies.InitialData.isPolygonal_tgt_edgeArc and .isPolygonal_targetRealization_skeletonSet.

It also carried two hypotheses, harc (thm:arc-complement) and hcollars (lem:crosscut-collars), both of which are now theorems on main (Schoenflies.arc_complement, Schoenflies.IsCrosscut.hasArcCollars). Every headline result is restated here after supplying them; the primed names distinguish these strengthened statements.

Finally, initBoundary is a raw datum in CellStructure, and nothing checked that the two lists it holds are closed walks of initSkel whose cells are exactly faceCells. They are: Schoenflies.isWalk_initBoundary_false, .._true, and Schoenflies.mem_faceCells_iff.

Blueprint #

thm:jordan in the shape thm:general-crosscut consumes. Every consumer below feeds this to a lemma whose separating hypothesis is universally quantified over curves. (Schoenflies.isSeparating_of_isJordanCurve is the polygonal statement of Jordan.lean, and is a different hypothesis; this is the general one, now a theorem.)

Two missing HexData facts #

The two boundary arcs are part of the outer cycle, and both are polygonal as soon as the six outer edges are. The second is the clause of def:admissible-graph that the target realization has to satisfy and the source one does not.

theorem Schoenflies.HexData.pos_mem_outer_of_succ (H : HexData) {i j : Fin 6} (h : i + 1 = j) :

The vertex an outer edge ends at, named.

Each boundary arc is polygonal when the outer edges are. Three consecutive segments, glued at the two vertices between them.

The whole outer cycle is polygonal when the six outer edges are.

The model curve is polygonal. Instantiate the target realization at α = β = 0: its outer cycle is S and each of its six edges is a straight segment.

initBoundary really is the boundary walk #

CellStructure.boundary is documented as a raw datum: nothing in the record forces it to walk anywhere. For initialStructure it does. Both lists are closed walks of initSkel, and the cells they run through are exactly the faceCells that initSub declares to be subcells of the corresponding 2-cell — so the base value of ≼_abs is not an independent choice.

Each 2-cell of the initial structure has a closed boundary walk.

Incidence in initSkel is membership among the two ends.

The cells of a 2-cell are the cells of its boundary walk. The base value of ≼_abs declares faceCells k to be the subcells of face k; this says faceCells k is exactly the set of edges the boundary walk takes together with the vertices it visits.

The initial face-boundary cycles #

The closed-walk facts above are strengthened here to the maintained data needed by thm:finite-transfer: each boundary is a simple cycle of length at least three, and its cells are exactly the strict subcells of the corresponding face.

Incidence below an initial face consists of the face itself and its declared boundary cells.

A declared initial boundary has exactly the cells recorded by faceCells, once its starting vertex is known to occur on the boundary.

The two faces of the initial matched cellulation carry chosen simple boundary cycles.

The anchor set 𝒜 #

prop:countable-strong-access produces a countable dense set of strongly accessible points of C; the blueprint then fixes it for the whole construction (tex 1418) and every later stage draws its new boundary vertices from it. Fixing it means it is data, so it is a structure, and prop:initial-pair takes it as an argument rather than producing its own.

The anchor set 𝒜 of tex 1403–1418: a countable dense subset of the Jordan curve C every point of which is strongly accessible from the Jordan domain D.

Instances For
    theorem Schoenflies.AnchorSet.exists_access_segment {C : Set Plane} (A : AnchorSet C) {p : Plane} (hp : p ∈ A.carrier) :
    ∃ z ∈ inside C, p ≠ z ∧ openSegment ℝ p z ⊆ inside C

    An anchor is the endpoint of a straight access segment into D — lem:tangent-cone.

    theorem Schoenflies.AnchorSet.exists_cone {C : Set Plane} (A : AnchorSet C) {p : Plane} (hp : p ∈ A.carrier) :
    ∃ (v : Plane), ‖v‖ = 1 ∧ ∃ r > 0, ∀ s ≤ r, accessCone p v s ⊆ inside C

    An anchor has a whole open cone of straight access segments, truncatable at any radius — lem:tangent-cone in the form the later stages need, where the segment must also avoid a compact set already drawn.

    An anchor is polygonally accessible, the hypothesis lem:accessible-endpoints consumes.

    prop:countable-strong-access, as the fixed set 𝒜. This uses the proved Jordan curve theorem.

    noncomputable def Schoenflies.anchorSet {C : Set Plane} (hC : IsJordanCurve C) :

    The fixed anchor set of a Jordan curve, as data.

    Equations
    Instances For

      The initial matched pair, anchored #

      The clause of prop:initial-pair that InitialData drops. It is recorded as an extension rather than as a side theorem so that a consumer holding an initial pair holds the anchoring too; the integrator merging this file into InitialPair.lean should move the two fields into InitialData itself.

      The initial matched pair with the anchor clause of prop:initial-pair: the two chosen boundary points are points of the fixed set 𝒜.

      Instances For

        a is strongly accessible — the clause def:generated-structure and thm:finite-transfer need and InitialData does not record.

        A straight access segment at a — lem:tangent-cone.

        A straight access segment at b.

        theorem Schoenflies.AnchoredInitialData.exists_cone_a {C : Set Plane} {A : AnchorSet C} (D : AnchoredInitialData C A) :
        ∃ (v : Plane), ‖v‖ = 1 ∧ ∃ r > 0, ∀ s ≤ r, accessCone D.a v s ⊆ inside C

        The access cone at a, truncatable — what a later crosscut ending at a is built from.

        theorem Schoenflies.AnchoredInitialData.exists_cone_b {C : Set Plane} {A : AnchorSet C} (D : AnchoredInitialData C A) :
        ∃ (v : Plane), ‖v‖ = 1 ∧ ∃ r > 0, ∀ s ≤ r, accessCone D.b v s ⊆ inside C

        The access cone at b.

        theorem Schoenflies.exists_anchoredInitialData_of_homeo {C : Set Plane} (hC : IsJordanCurve C) (A : AnchorSet C) (u w : Plane → Plane) (hhom : IsSetHomeoOn u w C modelCurve) :
        ∃ (D : AnchoredInitialData C A), D.u = u ∧ D.w = w

        prop:initial-pair including the anchor clause. The two chosen points are points of the given anchor set 𝒜; the blueprint fixes 𝒜 once and reuses it at every later stage, so it must be an input, not an output.

        The proof is that of Schoenflies.exists_initialData with the anchor set supplied rather than manufactured: the two open corner arcs are relatively open and nonempty in C, 𝒜 is dense in C, so 𝒜 meets both; lem:tangent-cone (through StronglyAccessible.polyAccessible) and lem:accessible-endpoints then supply the polygonal crosscut.

        The anchored initial pair with a boundary parametrization chosen internally.

        The initial matched pair over C anchored in 𝒜, as data. def:generated-structure builds every later stage from it, so it must be a def.

        Equations
        Instances For
          theorem Schoenflies.exists_initialData' {C : Set Plane} (hC : IsJordanCurve C) (A : AnchorSet C) :
          ∃ (d : InitialData C), d.a ∈ A.carrier ∧ d.b ∈ A.carrier

          prop:initial-pair, in the shape Schoenflies.exists_initialData should have had: harc is supplied by arc_complement and the two chosen points are anchors.

          The canonical initial pair #

          AnchorSet is an input because the blueprint fixes 𝒜 once and every later stage draws from the same set. A consumer that has no other constraint on 𝒜 can take anchorSet hC: it is a function of C alone (Nonempty (AnchorSet C) is a Prop, so proof irrelevance makes the choice independent of the proof supplied), so all its uses agree.

          noncomputable def Schoenflies.initialData {C : Set Plane} (hC : IsJordanCurve C) :

          The canonical initial matched pair over C, anchored in Schoenflies.anchorSet hC.

          Equations
          Instances For

            The first chosen point of the canonical initial pair is strongly accessible. This is the clause prop:initial-pair asserts, InitialData drops, and def:generated-structure and thm:finite-transfer need in order to run a further crosscut into a.

            The second chosen point of the canonical initial pair is strongly accessible.

            The two crosscut theorems on the initial pair #

            InitialPair.lean carries harc (thm:arc-complement) and, on the source side, hcollars (lem:crosscut-collars). Both are theorems on main: Schoenflies.arc_complement and Schoenflies.IsCrosscut.hasArcCollars. Every consumer in Part II should use the primed forms below and thread nothing.

            The collar hypothesis on the source side, discharged: the crosscut is polygonal.

            The labelling of the two source 2-cells.

            Each target 2-cell is a component of Q° ∖ [u(a), u(b)]. The source side had this already; the target side did not.

            The matched labelling #

            def:matched-pair clause 1 asks that "the two distinguished outer cycles correspond". On the initial pair this is not automatic from the abstract structure alone: arcOf is read off the geometry of each realization, so the two 2-cell labellings — source_closure_cell_inter' and target_closure_cell_inter' — are made independently. They correspond because the source outer edges are, by construction, the w-images of the target ones.

            theorem Schoenflies.InitialData.src_outer {C : Set Plane} (d : InitialData C) (i : Fin 6) :
            d.src.outer i = fun (t : ℝ) => d.w (tgtOuter d.xa d.xb i t)
            theorem Schoenflies.InitialData.src_pos {C : Set Plane} (d : InitialData C) (i : Fin 6) :
            d.src.pos i = d.w (d.tgt.pos i)
            theorem Schoenflies.InitialData.u_src_pos {C : Set Plane} (d : InitialData C) (i : Fin 6) :
            d.u (d.src.pos i) = d.tgt.pos i

            Corresponding 0-cells correspond, in the geometric form prop:initial-pair states it: the six source subdivision points are the u-preimages of the four corners of Q and of u(a), u(b). (SkeletonHomeo.pos_apply says the same thing about the abstract 0-cells.)

            theorem Schoenflies.InitialData.tgt_pos_corners {C : Set Plane} (d : InitialData C) :
            d.tgt.pos 0 = Plane.mk 1 1 ∧ d.tgt.pos 2 = Plane.mk (-1) 1 ∧ d.tgt.pos 3 = Plane.mk (-1) (-1) ∧ d.tgt.pos 5 = Plane.mk 1 (-1)

            The four target corners, named.

            The nonadjacency clause of prop:initial-pair, geometrically: u(a) lies in the relative interior of the top side of S.

            u(b) lies in the relative interior of the opposite, bottom side.

            Each source outer edge is the w-image of the corresponding target one.

            theorem Schoenflies.InitialData.u_image_w_image {C : Set Plane} (d : InitialData C) {X : Set Plane} (hX : X ⊆ modelCurve) :
            d.u '' d.w '' X = X

            u undoes w on any subset of the model curve.

            The source boundary arc is the w-image of the target one.

            The target half of the 2-cell labelling is the u-image of the source half. This is what makes the pair matched: A₁, A₂ on the source and u(A₁), u(A₂) on the target are not two independent choices of labelling, they are the same one.

            The same statement through the skeleton homeomorphism g of def:matched-pair, which is u on the outer cycle.

            def:admissible-graph for the target: every edge is polygonal #

            Each target outer edge is a straight segment, hence polygonal.

            Every edge of the target realization is polygonal — the clause of def:admissible-graph for an admissible graph in Q that InitialPair.lean leaves unstated.

            Both target boundary arcs are polygonal.

            The source realization satisfies the source form of def:admissible-graph: its edges not contained in C — here only the crosscut — are polygonal, with interior in D.

            prop:initial-pair, assembled and complete.

            Over any Jordan curve C and any fixed anchor set 𝒜 there is a matched pair whose source realization is C subdivided at the u-preimages of the four corners of Q and at two further points a, b ∈ 𝒜 lying in two nonadjacent corner arcs, together with one polygonal crosscut of D from a to b, and whose target realization is S correspondingly subdivided together with the straight chord [u(a), u(b)].

            Beyond Schoenflies.initial_pair this adds: no hypotheses at all; the anchor clause with its consequence that a and b are strongly accessible; the polygonality of every target edge; and the fact that the two 2-cell labellings correspond.