Stage 0: the initial pair as a GeneratedPair #
Schoenflies/FiniteTransfer.lean defines Schoenflies.GeneratedPair, the object every stage of
the Schönflies recursion is and that thm:finite-transfer consumes and produces. Nothing built
one. This module builds the first: the initial matched pair of prop:initial-pair, which is
generated from itself by the empty sequence of elementary operations.
What has to be shown #
The two realizations, the skeleton homeomorphism and weak admissibility are all in
Schoenflies/InitialPair.lean and Schoenflies/InitialPairFixed.lean already, or one step from
what is there. The work is the two IsCellDecomposition fields — assertion (i) of
lem:cellulation-invariants — and they are the same work twice, because both realizations have
the same shape: a HexData whose six outer arcs form a Jordan curve and whose chord is a
crosscut of it. So assertion (i) is proved once, for an arbitrary HexData carrying that
crosscut configuration (Schoenflies.HexData.isCellDecomposition), and instantiated on each
side. The same is true of weak admissibility (Schoenflies.HexData.isWeaklyAdmissible).
The four clauses go as follows.
nonempty— the seven 0-cells are points; the seven open 1-cells are arcs minus their two endpoints (IsArcBetween.nonempty_diff); the two 2-cells are the two sides of the crosscut, nonempty bythm:general-crosscut.disjoint— fifteen cells, but only five kinds of pair. Two vertices are distinct points; a vertex misses every open edge it is not an end of (HexData.mem_outer_iff,.mem_chord_iff), and is an end of the ones it does meet; two open edges are disjoint by the two meeting conditions ofHexData; every 1- or 0-cell lies on the skeleton and every 2-cell is inside the curve and off the crosscut; and the two 2-cells are the two sides of one crosscut.iUnion_eq— the 0-cells and open 1-cells reassemble the skeletonC ∪ P(HexData.iUnion_cellSet), and the two 2-cells exhaustD ∖ P(thm:general-crosscut), so together they areC ∪ D.closure_eq— a finite case check againstSchoenflies.initSub, the base value of≼_absthat the blueprint fixes. The fourinitSub_iff_*lemmas below read it off, and then the only topology needed isclosure (A ∖ {p, q}) = Afor an arc (IsArcBetween.closure_diff) and the closure of a crosscut side (Schoenflies.crosscut_cell_partition).
The input is InitialData, not AnchoredInitialData #
AnchoredInitialData adds exactly two fields, a ∈ 𝒜 and b ∈ 𝒜. Nothing in GeneratedPair
mentions the anchor set: the anchoring is what lets a later stage run a fresh crosscut into a
or b, and it is read off AnchoredInitialData.stronglyAccessible_a at that point. So the pair
is built from InitialData — the weaker input — and
Schoenflies.AnchoredInitialData.generatedPair is the one-line specialisation for a consumer
holding the anchored form.
Blueprint #
Schoenflies.combInvariants_initialStructure—lem:cellulation-invariants(iii), (v), (vi) and abstract (viii) for the base structure: the base case ofSchoenflies.GeneratedStructure.combInvariants, which the whole recursion needs.Schoenflies.initSub_iff_vert,.._edge,.._chord,.._face— the base value of≼_abs(tex 1590–1602) read as "the subcells of each cell are exactly these".Schoenflies.HexData.isCellDecomposition—lem:cellulation-invariants(i) for either realization ofprop:initial-pair, withHexData.iUnion_cellSet,HexData.biUnion_of_three_edgesandHexData.biUnion_faceCellsas its two reassembly steps.Schoenflies.HexData.isWeaklyAdmissible—def:admissible-graphminus the connectedness clause, for either realization.Schoenflies.InitialData.generatedPair,Schoenflies.AnchoredInitialData.generatedPair—def:generated-structureat stage 0:prop:initial-pairis a generated matched cellulation.Schoenflies.HexData.isOpen_cellSet_face,Schoenflies.InitialData.isOpen_sourceRealization_cell_face,.isOpen_targetRealization_cell_face— openness of the two 2-cells: the hypothesislem:cellulation-invariants(viii) takes andIsCellDecompositiondoes not record.Schoenflies.infinite_initialCell— the base case meets the recursion:thm:finite-transferneeds[Infinite γ], andInitialCellsupplies it through its spare constructoraux.Schoenflies.modelCurve_union_inside—S ∪ Int(S) = Q, the closed target domain.Schoenflies.InitialData.generatedPair_src_isAdmissible,.generatedPair_tgt_isAdmissible— the strong form ofdef:admissible-graphon both sides, which the initial pair does satisfy (rem:intermediate-disconnectionwaives it only at intermediate stages).
The cells of the initial structure, and ≼_abs #
initialStructure declares every one of InitialCell's four named constructors a cell. The
fifth, InitialCell.aux, is the spare supply of fresh names that def:generated-structure
needs and that thm:finite-transfer asks for as [Infinite γ]; no aux name is a cell.
recOnCells is the shape every clause of assertion (i) below uses: case analysis on a cell,
with the spare names ruled out by the membership hypothesis the clause already carries.
The spare names are not cells: cells is vertices ∪ edges ∪ faces, and each of those is a
range of one of the four named constructors.
The four named constructors are cell names.
Every cell of a 2-cell's boundary walk is a cell.
Case analysis on a cell of the initial structure. The four named constructors exhaust
the cells; the spare aux names are excluded by the membership hypothesis.
Equations
- Schoenflies.recOnCells hc_2 hv he hch hf = hv i
- Schoenflies.recOnCells hc_2 hv he hch hf = he i
- Schoenflies.recOnCells hc_2 hv he hch hf = hch
- Schoenflies.recOnCells hc_2 hv he hch hf = hf k
- Schoenflies.recOnCells hc_2 hv he hch hf = absurd hc_2 ⋯
Instances For
A face name is never a 0-cell or a 1-cell.
The subcells of a 0-cell are itself alone.
The subcells of an outer 1-cell are itself and its two ends.
The subcells of the crosscut are itself and its two ends.
The subcells of a 2-cell are itself together with the cells of its boundary walk.
The combinatorial invariants at the base #
Schoenflies.GeneratedStructure.combInvariants propagates lem:cellulation-invariants (iii),
(v), (vi) and abstract (viii) along the two elementary operations given the base case. This is
the base case. Assertion (vi) is Schoenflies.outerEdgeUniqueFace_initialStructure, already on
main; the other seven clauses are read off initSub.
The combinatorial invariants hold for the initial structure. The base case of
Schoenflies.GeneratedStructure.combInvariants, hence of GeneratedPair.combInvariants.
The open cells of a HexData #
Everything assertion (i) needs about the fifteen realized open cells, stated for an arbitrary
HexData so that the source and the target realization are served by one proof. Nothing in this
section mentions the crosscut configuration; that enters only for the two 2-cells.
The 1-cells are nonempty: an arc has more points than its two endpoints.
A closed 1-cell is the drawn edge: an arc is the closure of its interior.
A 0-cell never lies on an open 1-cell. A vertex on a drawn outer edge is one of its two
ends (HexData.mem_outer_iff), and the open edge is exactly the drawn edge without them.
Two distinct open outer 1-cells are disjoint. The two edges meet only at points that are ends of both, and those are removed.
The open crosscut misses every open outer 1-cell.
The 0-cells and the open 1-cells reassemble the skeleton C ∪ P.
Three consecutive outer edges and the crosscut reassemble their union. The two 2-cells of
the initial structure differ only in which three outer edges bound them, so the union over the
cells of a boundary walk is computed once, for an arbitrary set F of cells presented as the
four vertices, the three edges and the crosscut.
The cells of a 2-cell's boundary walk reassemble Aₖ ∪ P. The blueprint declares
faceCells k to be the subcells of Rₖ; geometrically that union is exactly the boundary curve
of Rₖ, which is what closure_eq has to match at a 2-cell.
Assertion (i) and def:admissible-graph, for either realization #
Both realizations of prop:initial-pair are a HexData whose six outer arcs form a Jordan curve
and whose chord is a crosscut of it. Everything that distinguishes assertion (i) from bookkeeping
is thm:general-crosscut, in the packaged form Schoenflies.crosscut_cell_partition: the two
2-cells are open, nonempty, disjoint from each other and from the open crosscut, they exhaust
D ∖ P together with it, and the closure of each is itself together with its own boundary
curve.
lem:cellulation-invariants(i) for a realization of the initial structure. The open cells
are nonempty and pairwise disjoint, they cover C ∪ D, and every closed cell is the union of its
open subcells for the base value of ≼_abs the blueprint fixes.
The three hypotheses are exactly thm:general-crosscut's: the chord is a crosscut of the outer
cycle, the two boundary arcs are the two arcs it cuts the outer cycle into, and the crosscut has
collars. On the source side they are InitialData.isCrosscut, .isCutPair and
.hasArcCollarsSource; on the target side .isCrosscutTarget, .isCutPairTarget and
.hasArcCollarsTarget.
The two 2-cells are open. IsCellDecomposition does not record this, but
IsCellDecomposition.face_eq — assertion (viii) — takes it as a hypothesis, and
thm:general-crosscut hands it to the producer for free. Exported here so that no consumer has
to rederive it at stage 0.
Assertion (vii) for the initial hexagonal cellulation. Each of its two faces was defined as the inside of the curve obtained by joining one boundary arc to the crosscut; the crosscut theorem says that curve is Jordan.
def:admissible-graph minus the connectedness clause, for a realization of the initial
structure. The 2-connectivity is HexData.isTwoConnected_graph; the outer cycle is the union
of the six outer arcs by construction; the one nonboundary edge is the crosscut, which is
polygonal and has its interior in the open domain because it is a crosscut.
rem:intermediate-disconnection waives connectedness of the open nonboundary part at
intermediate stages only. The initial pair does satisfy it — HexData.isConnected_nonboundary —
and InitialData.generatedPair_isAdmissible records the strong form.
The closed square, as a domain #
GeneratedPair asks for the closed target domain. Schoenflies.inside_modelCurve identifies
the Jordan domain of S with the open square, so the closed domain S ∪ Int(S) is literally
Q = [-1,1]².
The initial pair is a GeneratedPair #
Both realizations are instances of the two HexData theorems above; all that is left is to
present the hypotheses in the shape they take, which on the source side means rewriting
d.src.outerArcs to C and on the target side d.tgt.outerArcs to S.
The crosscut configuration on the source side, with the outer cycle named as the HexData
sees it.
The crosscut configuration on the target side.
Assertion (i) on the source side: the fifteen open cells of Γ decompose C ∪ D.
Assertion (i) on the target side: the fifteen open cells of Γ' decompose Q.
def:admissible-graph (weak form) on the source side.
def:admissible-graph (weak form) on the target side.
The two source 2-cells are open — the hypothesis
IsCellDecomposition.face_eq takes and IsCellDecomposition does not record.
The two target 2-cells are open.
Stage 0 of the Schönflies recursion. The initial matched pair of prop:initial-pair is a
generated matched cellulation: it is generated from Schoenflies.initialStructure by the empty
sequence of elementary operations (GeneratedStructure.base), its two realizations are the two
realizations of prop:initial-pair, and the two cell decompositions are
lem:cellulation-invariants(i) on each side.
This is the base case of the whole construction: thm:finite-transfer consumes a GeneratedPair
and produces one, and this is the first.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The combinatorial invariants at stage 0, read off the bundle: this is what
GeneratedPair.combInvariants needs supplied at the base, and what every later stage inherits.
The initial pair is admissible in the strong sense, on both sides.
rem:intermediate-disconnection waives connectedness of the open nonboundary part at
intermediate stages; at stage 0 it holds, the open nonboundary part being the open crosscut.
Stage 0 from the anchored initial pair. AnchoredInitialData adds only the clause
a, b ∈ 𝒜, which no field of GeneratedPair mentions; it is what lets a later stage run a fresh
crosscut into a or b (AnchoredInitialData.stronglyAccessible_a). So the pair is built from
the underlying InitialData, and this is the specialisation for a consumer holding the anchored
form.
Equations
Instances For
The base case meets the recursion #
Schoenflies.finite_transfer_toward_square and Schoenflies.EarStep carry [Infinite γ], and
FiniteTransfer.lean argues that without it EarStep is false: an ear insertion consumes
fresh cell names for the ear's interior vertices, its edges and the two 2-cells the split
creates, so a naming type that the current stage has exhausted refutes it.
The initial structure names fifteen cells. InitialCell therefore carries a fifth constructor,
InitialCell.aux : ℕ → InitialCell, which is the spare supply and nothing else: no aux name is
a cell, every aux name has empty open cell, and initSub relates none of them — the reflexive
clause of ≼_abs is restricted to Schoenflies.cellNames precisely so that
CombInvariants.sub_mem_left and .sub_mem_right, which say that ≼_abs relates cells to
cells, stay true.
The alternative was a relabelling of a CellStructure and both of its realizations along an
injection InitialCell ↪ γ into an infinite naming type. That is several hundred lines and buys
nothing the spare constructor does not, since the base of GeneratedStructure is a parameter and
stage 0 uses only the base constructor — no inductive derivation has to be transported.
The naming type of the initial structure is infinite, so the base case really can be fed
to thm:finite-transfer, whose [Infinite γ] is not decoration: an ear insertion consumes fresh
cell names, and on a finite naming type Schoenflies.EarStep is false. The supply is
InitialCell.aux, and no aux name is a cell of initialStructure.
The interface, exercised #
A machine-checked statement that stage 0 delivers exactly what thm:finite-transfer reads off a
GeneratedPair: the abstract structure carries the combinatorial invariants, the source and
target realizations are cell decompositions of the two closed domains, and both are admissible in
the strong sense. Nothing below mentions how the pair was built.