Cyclic boundaries of abstract 2-cells #
The abstract CellStructure.boundary field is only a list of edge names. The finite-transfer
construction needs the stronger invariant that each face boundary is a simple cycle and that
its vertices and edges are exactly the strict subcells of the face. This module packages that
invariant in the representation already used by Graph.IsLongCycle.
The distinguished edge edge closes the simple detour walk. The list edge :: walk is a
closed walk when started at target: it crosses the distinguished edge backwards to source
and follows the detour back to target. Two-edge cycles are allowed: an ear split can
legitimately create a digon even when the initial outer cycle has at least three vertices.
Stating the carrier clause with
CellStructure.pathCells makes it directly comparable with SplitData.sub_face.
Blueprint #
Schoenflies.CellStructure.FaceCycle,BoundaryCycles— the maintained form of the sentence inlem:cellulation-invariantsthat the cells below every 2-cell form its boundary cycle.
A face boundary is a simple cycle, and its carrier is exactly the face's strict subcells. This is data rather than a proposition because the finite-transfer step extracts its named edge, vertices and complementary path.
The indexed cell is a face of the structure.
- edge : γ
A distinguished edge of the boundary cycle.
- source : γ
One end of the distinguished edge and the source of the complementary path.
- target : γ
The other end, at which the displayed closed boundary list starts.
- walk : List γ
The raw boundary datum is the distinguished edge followed by the complementary path.
The distinguished edge and complementary path form a simple cycle.
The face itself and the cells of the cycle are exactly the cells below the face.
Instances For
The two simple boundary paths obtained by cutting a face cycle at distinct vertices.
Its last two fields are deliberately identical to SplitData.sub_face and
SplitData.paths_meet, so an ear insertion can copy the data without translation.
- path₁ : List γ
The first boundary path from
atob. - path₂ : List γ
The complementary boundary path.
The first list is a simple path in the skeleton.
The second list is a simple path in the skeleton.
The face and the cells of the two paths are exactly the cells below the face.
The paths meet only at their two endpoints.
Instances For
Every 2-cell of an abstract structure admits simple boundary-cycle data. This is a
proposition so that membership proofs remain proof-irrelevant; BoundaryCycles.faceCycle
chooses the exported data once and for all.
Existence of boundary-cycle data for each face.
Instances For
The chosen simple boundary cycle of a face.
Equations
- h.faceCycle F hF = Classical.choice ⋯
Instances For
The boundary list is a closed walk, in the orientation recorded by boundary_eq.
Path cells split over the concatenation of two composable walks.
Nonempty walks with permuted edge lists have the same path cells.
A vertex below a cyclic face lies on the complementary path used to present the cycle.
Cutting a cyclic face at two distinct boundary vertices gives the two pieces required by
SplitData. The second path returned by Graph.IsCycleThrough.split_at is reversed so that
both displayed paths run from a to b.
The two chosen boundary paths between distinct vertices of a cyclic face.
Equations
- h.boundaryPaths F hF a b ha hb haF hbF hab = Classical.choice ⋯