Polygonal realization of finite cyclic presentations #
This file gives FiniteCyclicPresentation a quotient-space semantics directly from its stored
face words. A boundary occurrence is a face together with an index in that face's word, so
repeated signed darts remain distinct polygon sides.
The pre-realization is the disjoint union of the standard polygonal disks indexed by the presentation's faces. Internal sides are paired exactly when their signed darts have the same underlying edge; equal signs use the same interval parameter and opposite signs use the reversed parameter.
FiniteCyclicPresentation.IsSurfaceValid already includes nonempty face boundaries, unlike the
legacy cell-complex predicate. It therefore supplies the complete occurrence-pairing certificate
needed by this construction.
A position in one of the stored cyclic face words.
Instances For
Equations
The signed dart stored at a boundary occurrence.
Instances For
The unoriented edge stored at a boundary occurrence.
Equations
Instances For
The polygon side indexed by a boundary occurrence.
Instances For
All boundary occurrences carrying the unoriented edge e.
Equations
- P.edgeOccurrences e = {o : P.BoundaryOccurrence | o.edge = e}
Instances For
Total edge multiplicity is exactly the cardinality of the corresponding occurrence fiber.
Two distinct occurrences of the same edge certify that the edge is internal.
A compatible gluing instruction between two distinct internal boundary occurrences.
- source : P.BoundaryOccurrence
The
sourcedeclaration. - target : P.BoundaryOccurrence
The
targetdeclaration. - source_not_boundary : ¬P.IsBoundaryEdge self.source.edge
- target_not_boundary : ¬P.IsBoundaryEdge self.target.edge
- direction : PolygonGluing.ParameterDirection
The
directiondeclaration. - compatible : match self.direction with | PolygonGluing.ParameterDirection.same => self.target.dart = self.source.dart | PolygonGluing.ParameterDirection.opposite => self.target.dart = SurfaceCellComplex.SignedDart.flip self.source.dart
Instances For
A non-boundary edge of a valid presentation occurs exactly twice.
Every internal occurrence has a unique distinct partner carrying the same unoriented edge.
Every internal boundary occurrence is the source of a compatible polygon-side pairing.
The polygon-side identification associated to a compatible occurrence pairing.
Equations
- pairing.identification = { source := P.occurrenceSide pairing.source, target := P.occurrenceSide pairing.target, direction := pairing.direction }
Instances For
All polygon-side identifications compatible with a valid finite cyclic presentation.
Equations
Instances For
Every internal occurrence of a valid presentation starts a prescribed identification.
The disjoint union of the polygonal cells encoded by the stored face words.
Equations
- P.PolygonalPreRealization = LeanEval.Topology.ClassificationOfSurfaces.PolygonGluing.PreRealization P.Face fun (f : P.Face) => (P.boundary f).length
Instances For
The generated relation from all compatible internal occurrence pairings.
Equations
Instances For
The polygonal quotient realized directly from a valid finite cyclic presentation.
Equations
Instances For
The quotient map from the disjoint union of face polygons.
Equations
Instances For
Every compatible pairing identifies the corresponding side points in the quotient.
Cut-and-paste data sufficient to compare two polygonal realizations.
The maps start on the two polygonal pre-realizations but land in the opposite quotient. This asymmetric-looking formulation is deliberate: after a polygon is cut into two faces, the reverse map need not lift continuously to the disjoint union of those faces, although it can be continuous as a map to their glued quotient.
- toPre : P.PolygonalPreRealization → Q.PolygonalRealization validQ
The
toPredeclaration. - invPre : Q.PolygonalPreRealization → P.PolygonalRealization validP
The
invPredeclaration. - continuous_toPre : Continuous self.toPre
- continuous_invPre : Continuous self.invPre
- to_respects (x y : P.PolygonalPreRealization) : (P.PolygonalGluingRel validP) x y → self.toPre x = self.toPre y
- inv_respects (x y : Q.PolygonalPreRealization) : (Q.PolygonalGluingRel validQ) x y → self.invPre x = self.invPre y
- left_inverse_mk (x : P.PolygonalPreRealization) : Quotient.lift self.invPre ⋯ (self.toPre x) = P.polygonalMk validP x
- right_inverse_mk (y : Q.PolygonalPreRealization) : Quotient.lift self.toPre ⋯ (self.invPre y) = Q.polygonalMk validQ y
Instances For
Descend the forward cut-and-paste map through the source gluing relation.
Equations
- data.toQuotient = Quotient.lift data.toPre ⋯
Instances For
Descend the reverse cut-and-paste map through the target gluing relation.
Equations
- data.invQuotient = Quotient.lift data.invPre ⋯
Instances For
Cut-and-paste data descend to a homeomorphism of the generated polygonal quotients.
Equations
- data.homeomorph = { toFun := data.toQuotient, invFun := data.invQuotient, left_inv := ⋯, right_inv := ⋯, continuous_toFun := ⋯, continuous_invFun := ⋯ }
Instances For
Quotient semantics for comparing two valid finite cyclic presentations.
Equations
- P.PolygonallyEquivalent Q validP validQ = Nonempty (P.PolygonalRealization validP ≃ₜ Q.PolygonalRealization validQ)
Instances For
A cut-and-paste certificate proves polygonal equivalence.