Componentwise Euler preservation for CSP polygons #
Counts refer to the actual listed graphs and every face orbit, including singleton orbits.
The target predicate is the existing componentwise NumericalGenusZero, with no change of
model and no geometric, native-computation or recognition claim.
Main results #
Cslib.Complexity.CSP.polygon_component_vertex_count: exact variable/constraint split.Cslib.Complexity.CSP.polygon_component_edge_count: preserves indexed edge counts.Cslib.Complexity.CSP.polygon_component_face_card: complete component face counts.Cslib.Complexity.CSP.numericalGenusZero_polygon_iff: componentwise Euler equivalence.
In a component rooted at a dense variable, polygon faces are exactly its constraint positions together with its original incidence faces. All face orbits are counted.
The incidence component has the polygon's variable vertices plus its indexed positive constraint vertices. Vertex names are counted once, while constraint positions stay distinct.
The component edge counts agree exactly: both lists retain one edge position per occurrence, and its first endpoint is the same dense variable.
Replacing every positive ordered incidence star by its actual occurrence-indexed polygon preserves the existing componentwise numerical genus-zero predicate in both directions. This includes disconnected and empty instances. It asserts no geometric realization.