Finite transfer, direction (a): toward the square #
thm:finite-transfer is the largest single statement of the manuscript. This module states it —
in full, with every hypothesis — for direction (a) only, and proves as much of its four-step
proof as is within reach of what is on main.
Direction (b) is deliberately absent: its extra accessibility problem at the wild source
boundary needs lem:tangent-cone, lem:compact-separation(c) and the fresh-point bookkeeping
of the target mesh, none of which enters (a).
The statement, and how it is read #
The blueprint's (a) reads: let (Γ, Γ') be a generated matched cellulation; suppose H is a
finite 2-connected plane graph containing a subdivision of Γ, with outer cycle C, with every
nonboundary edge polygonal, and with |H| ∖ C connected; then the common subdivision can be
made on Γ', and H can be transferred to an admissible target realization H'; the resulting
generated matched cellulation refines the old one by explicit parent maps.
Four objects carry that sentence.
Schoenflies.CellStructure.Realization.IsWeaklyAdmissibleandSchoenflies.CellStructure.Realization.IsAdmissible—def:admissible-graph. The weak form is exactly the strong one with connectedness of the open nonboundary part waived, which is whatdef:generated-structurerequires of an intermediate stage and whatrem:intermediate-disconnectioninsists on.Schoenflies.GeneratedPair— a generated matched cell structure with its geometry: the abstract structure, its two realizations, the skeleton homeomorphism, and the two cell decompositions. This is the Lean form of "(Γ, Γ')is a generated matched cellulation". It is a bundle of data, not an existential: every consumer reads.src,.tgt,.homeoby name.Schoenflies.IsSourceExtension— the hypotheses onH.Schoenflies.IsTransferOf— the conclusion, relating the new pair to the old one by an explicit parent map.
The one place where the Lean statement is weaker in form than the prose, and deliberately so:
"H can be transferred" is recorded as T.src.skeletonSet = pointSet H Hdraw, an equality of
point sets, rather than as a graph isomorphism onto H. The reason is step 1: the common
subdivision inserts a vertex at every intersection of a new edge with an old one, so the source
realization of the transferred structure realizes a subdivision of H, never H itself. What
survives verbatim is what the construction uses downstream — the occupied set, the
2-connectivity (which lem:combinatorial-invariance moves to the target) and the refinement.
What is proved here #
- Step 1, the overlay —
Schoenflies.exists_overlay_of_biUnion_finite: the union of finitely many nondegenerate polygonal sets is the point set of a finite plane graph drawn by straight segments. That islem:polygonal-overlayin the form step 1 needs, bridgingSchoenflies.polygonal_overlay, which is stated for a list of segments, to the finite family of polygonal arcs a skeleton stage arrives as. - Step 4, target side —
Schoenflies.exists_target_crosscutandSchoenflies.exists_target_crosscut_split. In direction (a) the target faceF*is a polygonal Jordan region in the square bylem:cellulation-invariants(vii); every point of its boundary is polygonally accessible from its interior bylem:polygonal-side-accessibility(target half); andlem:accessible-endpointsgives a polygonal crosscutP* ⊆ closure F*fromv*tow*, which bythm:general-crosscutsplitsF*into exactly the two Jordan regions bounded byP*and the two boundary paths. These constructions supply the complete target-side argument. - The second sentence of step 2 —
…IsCellDecomposition.exists_unique_face_subset_celland…IsCellDecomposition.exists_face_of_ear: the interior of an ear lies in one current face, because it is connected and disjoint from the current skeleton, and its two endpoints then lie on that face's boundary cycle.IsCellDecomposition.cellsAbsorbderives the formerly namedCellsAbsorbpremise from the maintained cell-decomposition and Jordan-face invariants, so this requires no additional interface. - One ear insertion, step 3 —
exists_sourceEarStepData,EarCrosscut.exists_matched_target,earStepConstruction, andearStep. The ambient source path is given fresh abstract cell names, its face split is realized on both sides, and a parameter-matching homeomorphism divides the target polygonal crosscut into exactly the same abstract edges. Matching source and target crosscuts then produce the next pair, compose both refinement maps, preserve every bundle invariant, and enlarge the occupied source graph by exactly the supplied ear, under the necessary[Infinite γ]name supply. - The last paragraph of the proof —
Schoenflies.GeneratedPair.src_isAdmissibleandSchoenflies.GeneratedPair.tgt_isAdmissible. Admissibility of the final object is recovered fromlem:combinatorial-invariance: the reproduced realization has the same 2-connectivity and the same connectedness of the open nonboundary part as the given one. This uses only the hypotheses of the finite-transfer statement. - The induction scheme, steps 2 and 3 —
Schoenflies.transfer_of_ears. WithearStepsupplying each insertion,lem:relative-earin its iterated form (Graph.IsTwoConnected.ear_decomposition) transfers the whole extension. This is the backbone of the induction, and it honoursrem:intermediate-disconnection: the invariant carried through the induction,Schoenflies.IsPartialTransferOf, asks only for weak admissibility, and connectedness of the open nonboundary part is restored only at the very end.
Completion of step 1 #
This module keeps Schoenflies.CommonSubdivision as the compositional interface consumed by the
ear induction. Schoenflies/CommonSubdivision.lean constructs it: it traces the part of H
supported on the old skeleton, proves that trace 2-connected, and carries all of its finitely many
vertices through matched source/target edge subdivisions. Consequently direction (a) is exposed
there as Schoenflies.finite_transfer_toward_square.
Blueprint #
Schoenflies.CellStructure.Realization.IsWeaklyAdmissible,Schoenflies.CellStructure.Realization.IsAdmissible—def:admissible-graph.Schoenflies.GeneratedPair—def:generated-structurewith its two realizations,def:matched-pairanddef:matched-cellulationfolded in.Schoenflies.IsSourceExtension— the hypotheses ofthm:finite-transfer(a) onH.Schoenflies.IsPartialTransferOf,Schoenflies.IsTransferOf— the conclusion ofthm:finite-transfer, at an intermediate stage and at the end.Schoenflies.exists_target_crosscut,Schoenflies.exists_target_crosscut_split— the fourth paragraph of the proof ofthm:finite-transfer, direction (a):lem:cellulation-invariants(vii) +lem:polygonal-side-accessibility+lem:accessible-endpoints+thm:general-crosscut.Schoenflies.CellStructure.Realization.IsCellDecomposition.exists_unique_face_subset_cell,…IsCellDecomposition.exists_face_of_ear,…IsCellDecomposition.sub_of_pos_mem_closure_cell— "the interior of each ear lies in one current face", with the two supporting factsSchoenflies.CellStructure.Realization.cell_subset_skeletonSet(hoisted toSchoenflies/CombinatorialInvariance.lean) andSchoenflies.CellStructure.Realization.mem_faces_of_notMem_skeletonSet.Schoenflies.CellStructure.Realization.pos_mem_closure_cell_congr,Schoenflies.exists_target_ear— "letF*, v*, w*be the corresponding face and endpoints in the other realization", and the whole fourth paragraph assembled from the source-side data.Schoenflies.GeneratedPair.src_isAdmissible,Schoenflies.GeneratedPair.tgt_isAdmissible— the last paragraph of the proof, vialem:combinatorial-invariance.Schoenflies.exists_overlay_of_biUnion_finite—lem:polygonal-overlayandrem:polygonal-overlay-convention, for a finite family of polygonal sets: the first half of step 1.Schoenflies.earStep— step 3;Schoenflies.CommonSubdivision— the step-1 interface, discharged bySchoenflies.commonSubdivisioninCommonSubdivision.lean.Schoenflies.transfer_of_ears_of_commonSubdivision_of_earStep,Schoenflies.finite_transfer_toward_square_of_commonSubdivision_of_earStep— the finite-transfer induction parametrized by its two construction interfaces.
def:admissible-graph #
An admissible graph in the closed Jordan domain is a finite 2-connected plane graph whose outer
cycle is C, whose edges not contained in C are polygonal arcs with interiors in D, and
whose open nonboundary part |Γ| ∖ C is connected. A weakly admissible graph satisfies
everything but the last clause.
outer is the realized outer cycle and dom the closed domain; the open domain is dom ∖ outer. On the source side that reads C and C ∪ D; on the target side S and Q.
A weakly admissible realization — def:admissible-graph with connectedness of the open
nonboundary part waived, which is what def:generated-structure requires of every intermediate
stage (rem:intermediate-disconnection).
- isTwoConnected : R.graph.IsTwoConnected
The drawn skeleton is 2-connected.
The realized outer cycle is the prescribed curve.
- isPolygonal ⦃e : γ⦄ : e ∈ S.skel.edgeSet → e ∉ S.outerGraph.edgeSet → IsPolygonal (Graph.edgeArc R.drawing e)
Every nonboundary edge is a polygonal arc.
Every nonboundary edge has its interior in the open domain. Endpoints may lie on the outer cycle, as for a crosscut.
- skeletonSet_subset : R.skeletonSet ⊆ dom
The whole skeleton lies in the closed domain.
Instances For
An admissible realization — def:admissible-graph in full.
- isPolygonal ⦃e : γ⦄ : e ∈ S.skel.edgeSet → e ∉ S.outerGraph.edgeSet → IsPolygonal (Graph.edgeArc R.drawing e)
- skeletonSet_subset : R.skeletonSet ⊆ dom
- isConnected_nonboundary : IsConnected R.nonboundary
The open nonboundary part
|Γ| ∖ Cis connected.
Instances For
Weak admissibility is preserved by adjoining a polygonal ear inside one old face. This is the geometric bookkeeping common to the source and target halves of every ear step.
A set-level target crosscut can be divided into exactly the abstract edges of an already drawn source ear. The division is obtained by matching the parameters of the two whole arcs: each target edge is the image of its source counterpart. Closed subarcs of the polygonal target crosscut are polygonal, so no relation between the number of straight segments on the two sides is needed.
Where an ear can lie #
The interior of each ear lies in one current face, because it is connected and disjoint from the current skeleton. That is the second sentence of step 2, and it is proved here for an arbitrary connected subset of the closed domain missing the skeleton.
The only input beyond assertion (i) is Schoenflies.CellsAbsorb — assertion (i) in the
"a connected set disjoint from the skeleton that meets a 2-cell lies in it" reading, which
Schoenflies/SkeletonAccess.lean also carries as its single hypothesis and which
Schoenflies.cellsAbsorb_of_isComponent_in discharges on the target side.
A cell whose open part contains a point off the skeleton is a 2-cell.
The frontier of a Jordan face is part of the realized 1-skeleton. Assertion (i) writes the frontier as the union of strict subcells; assertion (vii) rules out a second face among those subcells, leaving only vertices and edges.
Assertions (i) and (vii) discharge the CellsAbsorb reading of the cellulation invariant:
a connected set missing the skeleton cannot cross the Jordan frontier of a face it meets.
A Jordan face contained in an ambient open set Q is a connected component of
Q \ skeleton as soon as its frontier belongs to the skeleton.
A 0-cell in the closure of an open 2-cell is a subcell of it — assertion (ix) read at a vertex. This is how an ear's endpoint is recognised as lying on the boundary cycle of the face its interior occupies.
An ear lies in a single current face. A nonempty connected subset of the closed domain disjoint from the realized skeleton lies inside one open 2-cell, and inside only that one.
One ear, placed — the source-side input of the induction step. The open part N of the
ear is connected, inside the closed domain and disjoint from the current skeleton, so it lies in
a unique current 2-cell F; and each endpoint of the ear, being a 0-cell in the closure of N,
is a subcell of F, i.e. lies on its boundary cycle.
Feeding the two S.sub conclusions back through IsCellDecomposition.subset_closure in the
other realization is exactly Schoenflies.exists_target_ear's two closure hypotheses.
A generated matched cell structure, with its geometry #
def:generated-structure says what the abstract object is; GeneratedStructure in
Schoenflies/GeneratedStructure.lean is that. What a transfer produces, and what the
finite-transfer theorem consumes, is the abstract object together with its two realizations, the
skeleton homeomorphism between them, and the two cell decompositions of
lem:cellulation-invariants(i). That bundle is GeneratedPair.
It is data, not a Prop: a consumer reads .src, .tgt, .homeo, .str by name.
A generated matched cell structure with its two realizations. The Lean form of
"(Γ, Γ') is a generated matched cellulation", except that only weak admissibility is a
field — rem:intermediate-disconnection — with the connected form carried separately by the
consumers that have it.
- str : CellStructure γ
The abstract cell structure.
- generated : GeneratedStructure S₀ self.str
It is generated from the base by a finite sequence of elementary operations.
- str_combInvariants : self.str.CombInvariants
The maintained combinatorial invariants of the current abstract structure.
- str_boundaryCycles : self.str.BoundaryCycles
Every current face has a simple cyclic abstract boundary.
- src : self.str.Realization
The realization in the closed Jordan domain.
- tgt : self.str.Realization
The realization in the closed square.
- homeo : CellStructure.SkeletonHomeo self.src self.tgt
The skeleton homeomorphism
g : |Γ| → |Γ'|ofdef:matched-pair. - src_isCellDecomposition : self.src.IsCellDecomposition srcDom
Assertion (i) on the source side.
- tgt_isCellDecomposition : self.tgt.IsCellDecomposition tgtDom
Assertion (i) on the target side.
- src_isFaceJordan : self.src.IsFaceJordan
Assertion (vii) on the source side: every face is the inside of its Jordan frontier.
- tgt_isFaceJordan : self.tgt.IsFaceJordan
Assertion (vii) on the target side. A split needs this geometric information in addition to the cell-decomposition clauses.
The open part of the target domain.
- tgtInterior_frontier_subset : frontier (tgtDom \ tgtOuter) ⊆ self.tgt.skeletonSet
Its frontier is already part of the target skeleton.
- tgt_isPolygonal ⦃e : γ⦄ : e ∈ self.str.skel.edgeSet → IsPolygonal (Graph.edgeArc self.tgt.drawing e)
Every target edge is polygonal, including the distinguished outer edges.
- src_isWeaklyAdmissible : self.src.IsWeaklyAdmissible srcOuter srcDom
The source realization is weakly admissible.
- tgt_isWeaklyAdmissible : self.tgt.IsWeaklyAdmissible tgtOuter tgtDom
The target realization is weakly admissible.
Instances For
The combinatorial invariants hold at every generated stage, once they hold at the base —
Schoenflies.GeneratedStructure.combInvariants, read off the bundle.
Every face of a generated pair has a simple cyclic boundary once this is true at the base. This is the source of the two abstract boundary paths consumed by an ear split.
The open nonboundary part of the source realization, read off the two clauses that pin the skeleton and the outer cycle.
The last paragraph of the proof of thm:finite-transfer, target half. Once the source
realization's open nonboundary part is connected, so is the target's — this is part (b) of
lem:combinatorial-invariance — and the target realization, weakly admissible by construction,
is therefore admissible.
The last paragraph of the proof, source half.
Every target face lies in the open part of the prescribed target domain.
Target faces have the component presentation consumed by polygonal side accessibility.
The matched split constructor #
RealizeSplit and MatchedSplit construct the two new realizations and their skeleton
homeomorphism. The definition below is the missing bundle-level constructor: it installs those
objects in a GeneratedPair and records the propagated cell-decomposition and Jordan-face
invariants. Weak admissibility is then derived from the old pair and the two polygonal ear
drawings by EarCrosscut.isWeaklyAdmissible_realize.
Build the next generated pair from matching geometric realizations of one abstract face split.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The hypotheses of direction (a) on the given extension #
H is a finite 2-connected plane graph containing a subdivision of Γ, with outer cycle C,
with every nonboundary edge polygonal, and with |H| ∖ C connected.
"Contains a subdivision of Γ" is recorded by three clauses: every old vertex is a vertex of
H; the old skeleton is inside |H|; and any edge of H whose nonvertex part meets an open
old edge lies inside that old edge. Together those say that each old edge is cut into a chain of
H-edges. A transverse crossing is allowed only at a vertex of H, exactly as produced by the
polygonal overlay.
"With outer cycle C, with every nonboundary edge polygonal" is edge_dichotomy: each edge of
H either lies inside the outer curve or is polygonal with its interior in the open domain.
Recording the outer cycle as a subgraph would put data inside a Prop; this reading is what
every step of the proof actually uses, and outer ⊆ pointSet H Hdraw comes for free from
skeletonSet_subset.
The hypotheses of thm:finite-transfer(a) on the extension H.
- finite : H.Finite
His finite. - isDrawing : H.IsDrawing Hdraw
His a plane graph. - isTwoConnected : H.IsTwoConnected
His 2-connected. Every 0-cell of
Γis a vertex ofH.- skeletonSet_subset : R.skeletonSet ⊆ H.pointSet Hdraw
|Γ| ⊆ |H|. - edge_subset ⦃e : γ⦄ : e ∈ S.skel.edgeSet → ∀ ⦃f : γ⦄, f ∈ H.edgeSet → (Graph.edgeArc Hdraw f ∩ (R.cell e \ H.vertexSet)).Nonempty → Graph.edgeArc Hdraw f ⊆ Graph.edgeArc R.drawing e
An edge of
Hwhose interior meets an open edge ofΓruns inside it. Intersections at vertices ofHare deliberately excluded: a transverse crossing is first made a vertex by the polygonal overlay, and does not make either of its two incident branches part of the old edge. - pointSet_subset : H.pointSet Hdraw ⊆ dom
His drawn in the closed domain. - edge_dichotomy ⦃f : γ⦄ : f ∈ H.edgeSet → Graph.edgeArc Hdraw f ⊆ outer ∨ IsPolygonal (Graph.edgeArc Hdraw f) ∧ Graph.edgeArc Hdraw f \ H.vertexSet ⊆ dom \ outer
Each edge of
His an outer edge or a polygonal nonboundary edge with interior in the open domain. - isConnected : IsConnected (H.pointSet Hdraw \ outer)
|H| ∖ Cis connected.
Instances For
A plane graph has no loops, so lem:relative-ear applies to H.
The conclusion #
IsPartialTransferOf T P B par is the invariant the induction of steps 2–3 carries: T is a
generated pair refining P along par whose source realization occupies exactly what the
current subgraph B of H occupies. It asks for no connectedness of the open nonboundary
part — rem:intermediate-disconnection — because an ear with both endpoints on the outer cycle
really does disconnect it, and later ears reconnect it.
IsTransferOf is the same with admissibility of both final realizations added; that is the
theorem's conclusion, and GeneratedPair.src_isAdmissible / GeneratedPair.tgt_isAdmissible
are what produce it from the connectedness hypothesis on H.
A finite family of fresh names can be chosen injectively outside any finite used set. This is the name-supply lemma used by the concrete ear relabelling: vertex, edge, and face requests are put in one finite sum type so their chosen names are automatically pairwise distinct.
Extend two prescribed, distinct names to an injection on a finite set, with every other value fresh outside a prescribed finite set.
An intermediate stage of the transfer.
The new source realization refines the old one along
par— assertion (iv).The new target realization refines the old one along the same parent map. That sharing is
lem:refinement-compatibility(c).- sourceSkeletonSet_subset : P.src.skeletonSet ⊆ T.src.skeletonSet
The evolving source skeleton contains the original source skeleton.
On the original source skeleton, the evolving skeleton map is still the original map.
The new source skeleton occupies exactly what the current subgraph occupies.
Instances For
The output data of one realized ear #
The former EarStep interface ended directly in an existential GeneratedPair. That hid all
of the actual constructor data and made the last half of the proof impossible to reuse or
inspect. EarStepData exposes the abstract split, its two geometric crosscuts, and the chosen
map between them. Its pair and isPartialTransferOf_pair declarations below perform the
assembly.
Complete constructor data for adjoining the geometric path D to a partial transfer.
The abstract face split, including the freshly named copy of the ear.
- srcPos : γ → Plane
The source positions and edge parametrizations of that abstract ear.
Edge parametrizations of the new source ear.
- tgtPos : γ → Plane
The target positions and edge parametrizations.
Edge parametrizations of the matched target ear.
- srcCrosscut : self.splitData.EarCrosscut T.src self.srcPos self.srcDraw
Both drawings are crosscuts of the corresponding old face.
- tgtCrosscut : self.splitData.EarCrosscut T.tgt self.tgtPos self.tgtDraw
The cellwise homeomorphism used to extend the old skeleton homeomorphism.
- srcEdgePolygonal ⦃e : γ⦄ : e ∈ self.splitData.ear.edgeSet → IsPolygonal (Graph.edgeArc self.srcDraw e)
Every edge of both realized ears is polygonal.
- tgtEdgePolygonal ⦃e : γ⦄ : e ∈ self.splitData.ear.edgeSet → IsPolygonal (Graph.edgeArc self.tgtDraw e)
The relabelled source ear occupies exactly the path supplied by the ambient graph.
- vertexSet_subset : (B.union (H.pathGraphOf a D)).vertexSet ⊆ (CellStructure.SplitData.realize T.src self.splitData self.srcPos self.srcDraw ⋯).graph.vertexSet
Every old or newly introduced graph vertex is a vertex of the new realization.
Instances For
The generated pair assembled from the data of one realized ear.
Instances For
The exposed constructor data really performs one EarStep: the pair it builds refines the
original pair along the composite parent map, occupies the enlarged source graph, and contains
all of that graph's vertices as 0-cells.
Locating the source face of a graph-theoretic ear #
A nontrivial graph-theoretic ear determines two abstract endpoint vertices and a unique
source face containing its open arc. This is the complete source-side input needed to choose
the boundary paths of SplitData; in particular CellsAbsorb is no longer an extra
hypothesis.
Every edge of a genuine source ear is polygonal. The source-extension dichotomy allows an edge to be nonpolygonal only when its whole arc lies in the outer curve. But that curve is in the current skeleton, whereas the open ear lies in one current face and hence misses the skeleton; a nondegenerate drawn edge cannot then remain.
The conclusion of thm:finite-transfer(a).
- refines_src : T.src.Refines P.src par
- refines_tgt : T.tgt.Refines P.tgt par
- homeo_eqOn : Set.EqOn T.homeo.toFun P.homeo.toFun P.src.skeletonSet
- vertexSet_subset : H.vertexSet ⊆ T.src.graph.vertexSet
- src_isAdmissible : T.src.IsAdmissible srcOuter srcDom
The transferred source realization is admissible.
- tgt_isAdmissible : T.tgt.IsAdmissible tgtOuter tgtDom
The transferred target realization is admissible — "
Hcan be transferred to an admissible target realizationH'".
Instances For
The two assumed steps #
Both are strictly weaker than thm:finite-transfer(a) itself, and both are statements a later
module can discharge without circularity.
CommonSubdivision is step 1: after overlaying the proposed polygonal nonboundary edges
with the old polygonal nonboundary skeleton and subdividing at every intersection — and
transferring each new point to the other realization along the chosen edge parametrization —
the old skeleton is literally a subgraph of the new one on both sides. In Lean that is: some
2-connected subgraph K ≤ H carries a generated pair refining the given one. It is not the
theorem: it makes only edge subdivisions, inserts no ear, and its conclusion is about a subgraph
of H, not about H.
EarStep is step 3: one ear insertion — at most two edge subdivisions followed by one
2-cell split — carries a partial transfer of B to a partial transfer of B with the ear glued
on. Its geometric core in direction (a) is Schoenflies.exists_target_crosscut_split below,
which is proved here; only the abstract-data bookkeeping around it is assumed.
The predicates describe transfer data independently of whether that data exists. Their
constructors require [Infinite γ] to supply fresh cell names. Keeping infinitude on those
existence theorems, rather than as an unused parameter of the predicates, makes that boundary
explicit.
Step 1, the common subdivision, as an interface.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Step 3, one ear insertion, as an interface.
The data handed to the step is exactly what Graph.IsTwoConnected.ear_decomposition supplies:
the current subgraph B, the ear D as a path of H between two distinct vertices of B, and
the freshness of the ear's interior — which is what makes the ear's interior lie in a single
current face, since it is connected and disjoint from the current skeleton.
Constructing this step requires a supply of fresh cell names; the existence theorems carry
Infinite γ.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The constructive content needed in the nontrivial branch of EarStep: for an ear whose
edges are genuinely new, produce the explicit split and its two realized crosscuts. The
degenerate branch in which the proposed path was already in B is handled by
earStep_of_data.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A realized source ear and its compatibility with the ambient path.
Abstract split introducing the source ear and its two faces.
- srcPos : γ → Plane
Positions of the new source vertices.
Parametrizations of the new source edges.
- srcCrosscut : self.splitData.EarCrosscut T.src self.srcPos self.srcDraw
- srcEdgePolygonal ⦃e : γ⦄ : e ∈ self.splitData.ear.edgeSet → IsPolygonal (Graph.edgeArc self.srcDraw e)
- vertexSet_subset : (B.union (H.pathGraphOf a D)).vertexSet ⊆ (CellStructure.SplitData.realize T.src self.splitData self.srcPos self.srcDraw ⋯).graph.vertexSet
Instances For
The ambient path is injectively renamed with fresh abstract vertex and edge cells, two more fresh names become the new faces, and the resulting abstract split is realized on the source.
EarStep, assembled from explicit constructor data. This is the end-to-end
bookkeeping theorem: the nontrivial branch is realized by EarStepData.pair; if the proposed
ear contains an old edge, Graph.ear_edges_notMem_or_union_eq shows that the union did not
change and the current transfer itself is the answer.
Steps 2 and 3: the induction through the ear sequence #
Steps 2 and 3 of the proof of thm:finite-transfer. By lem:relative-ear the new finite
2-connected graph is obtained from the old subdivided graph by a finite sequence of ears; each
ear insertion is at most two edge subdivisions plus one 2-cell split, so every intermediate stage
is a generated matched cell structure. Given step 1 and one ear, the whole extension transfers.
The invariant carried through the induction is IsPartialTransferOf, which does not mention
connectedness of the open nonboundary part: rem:intermediate-disconnection says an
intermediate stage may genuinely have it disconnected, and nothing here assumes otherwise.
thm:finite-transfer(a) #
thm:finite-transfer, direction (a): transfer toward the square.
Let (Γ, Γ') be a generated matched cellulation. Suppose H is a finite 2-connected plane graph
containing a subdivision of Γ, with outer cycle C, with every nonboundary edge polygonal, and
with |H| ∖ C connected. Then the common subdivision can be made on Γ', and H can be
transferred to an admissible target realization H'; the resulting generated matched cellulation
refines the old one by an explicit parent map.
This compatibility form accepts both step interfaces as arguments. earStep discharges the
second, while commonSubdivision in CommonSubdivision.lean discharges the first.
Step 4, direction (a): the target crosscut #
In part (a), F* is a polygonal Jordan region in the square, by
lem:cellulation-invariants(vii). Every point of its boundary is polygonally accessible from its
interior. lem:accessible-endpoints therefore gives a polygonal crosscut P* ⊆ closure F* from
v* to w*. Then: thm:general-crosscut says that the crosscut splits the face into exactly
the two Jordan regions bounded by the crosscut together with those two paths.
That whole paragraph is proved below. It is stated for a target face — a
member of a family of components of Q ∖ |G| for an ambient open region Q whose frontier
belongs to the skeleton — because that is the shape
Graph.polygonal_side_accessibility_target consumes, and it is the shape a target realization
of a generated structure has: Q is the open square, |G| the target skeleton, and the family
is the set of realized open 2-cells.
A target 2-cell is an open connected set disjoint from the skeleton. Everything the crosscut
construction needs about it, read off the presentation as a component of Q ∖ |G|.
The target crosscut of thm:finite-transfer(a), step 4. Two distinct points of a curve
J inside the target skeleton, both in the closure of a target 2-cell F, are joined by a
simple polygonal arc lying in F apart from its two endpoints and meeting J exactly there.
The three inputs are the three the blueprint names: lem:polygonal-side-accessibility on the
target side for the accessibility of each endpoint, and lem:accessible-endpoints in its
crosscut form for the join. Nothing is assumed.
Step 4 in full: the target crosscut splits the target face into exactly two Jordan
regions. By lem:cellulation-invariants(vii) the target 2-cell F is the bounded
complementary region of the Jordan curve J realizing its boundary walk; the crosscut of
Schoenflies.exists_target_crosscut is then a crosscut of J in the sense of
thm:general-crosscut, which decomposes F into the two Jordan regions bounded by the crosscut
together with the two boundary paths.
The conclusion is returned in the shape assertion (i) consumes at a 2-cell split
(Schoenflies.crosscut_cell_partition): the old open 2-cell is the disjoint union of the two new
open 2-cells and the open crosscut, each new 2-cell is open and nonempty, and the closure of each
is that open 2-cell together with its own boundary curve.
A face and two distinct boundary vertices of a generated pair admit the target polygonal
crosscut needed by an ear insertion. All accessibility hypotheses are discharged from the
fields maintained by GeneratedPair.
Completing the ear step #
The constructive ear interface. The source half is the freshly
renamed path supplied by exists_sourceEarStepData; the target half is a polygonal crosscut of
the corresponding face, divided edge-for-edge by EarCrosscut.exists_matched_target.
One ear insertion, with no remaining hypothesis.
Steps 2 and 3 of finite transfer, parametrized by the step-1 interface.
Finite transfer toward the square from an explicitly supplied common subdivision.
The ear's endpoints, transferred #
Let F*, v*, w* be the corresponding face and endpoints in the other realization. Under the
representation of Schoenflies/CombinatorialInvariance.lean there is nothing to transport: F
and the two endpoint 0-cells are cells of the one abstract structure both realizations
realize, and assertion (ix) turns "the source endpoint lies on the boundary of the source face"
into the abstract statement a ≼ F, which reads back in the target realization.
The endpoints of the ear transfer to the other realization. A 0-cell on the boundary of a 2-cell in one realization is on the boundary of the same 2-cell in the other.
The geometric half of one ear insertion, direction (a).
The source ear lies in a current source 2-cell F and its two endpoints are 0-cells on the
boundary of F (hacl, hbcl). The target realization of F is a polygonal Jordan region in
the open square Q (hFJ — assertion (vii)) whose 2-cells are the components of
Q ∖ |Γ'| (hcell — assertion (i) on the target side). Then the corresponding target endpoints
are joined by a polygonal crosscut inside the closure of the target face, which splits that face
into exactly the two Jordan regions bounded by the crosscut and the two boundary paths.
This is the fourth paragraph of the blueprint's proof of thm:finite-transfer(a), assembled;
what is left of the induction step is the abstract-data bookkeeping around it.
Step 1: the overlay #
By lem:polygonal-overlay, using the convention of rem:polygonal-overlay-convention, first
overlay the proposed polygonal nonboundary edges with the old polygonal nonboundary skeleton and
subdivide at all intersections.
Schoenflies.polygonal_overlay does that for a list of segments. What step 1 has instead is
a finite family of polygonal arcs — the old nonboundary edges and the proposed new ones — so
the two have to be bridged. Schoenflies.exists_overlay_of_biUnion_finite is that bridge, and it
is the half of step 1 that is proved here: the union of finitely many nondegenerate polygonal
sets is the point set of a finite plane graph drawn by straight segments, whose vertices are the
ends of the subdivided pieces and therefore include every intersection point.
The nondegeneracy hypothesis is necessary, not cosmetic: a one-point set is polygonal
(poly [a] = {a}) and is not the point set of any overlay graph, whose vertices are the ends of
nondegenerate segments.
The matching-subdivision half of step 1 is completed in CommonSubdivision.lean: every source
subdivision point is transported through the chosen edge parametrization to the other
realization.
lem:polygonal-overlay for a finite family of polygonal sets. The union of finitely many
nondegenerate polygonal sets is the point set of a finite plane graph whose edges are straight
segments — the overlay, subdivided at every intersection.
This is the first half of step 1 of the proof of thm:finite-transfer.
The interface, exercised #
thm:finite-transfer exists to feed the recursion of the quantitative-refinement section, which
consumes a transfer only through Realization.Refines. This anonymous example is a
machine-checked statement that the conclusion of finite_transfer_toward_square delivers exactly
what that recursion reads: the source carrier refines (lem:refinement-compatibility(a)), the
same parent map serves both sides (part (c)), and the closed target star of a fixed source point
shrinks (T_{n+1}(x) \subseteq T_n(x)).
Nothing below mentions how the transfer was built. If a later change to IsTransferOf stopped
serving that recursion, this would break.