The DegSpec face datum, emitted by the contraction census #
Certificate/DegenerateSeparator.lean and Certificate/DegenerateRankOne.lean
take rep, rep_idem, rep_zero, rep_loopless, forest — and, for the
interpolated layer, a ZeroReach witness — as inputs that a row supplies
by hand (see Certificate/Examples/GenusFourCore100Face.lean's faceRep,
proved by five separate decides). This file makes them outputs of the
generalized contraction census
(Certificate/ContractionForestCensusGeneral.lean): name the set of slots
that vanish at a point, check once that it is a forest with no semantic loop,
and every one of those five obligations — the four DegSpec fields plus the
ZeroReach witness the interpolated layer needs — falls out.
The bridge, in one picture #
A Certificate m n p fixes a core and a point point : Fin m → ℤ fixes a
length vector certificate.segmentNat point : Fin p → ℕ. Write
zeroSlots certificate point for the Finset (Fin p) of vanishing slots.
Then:
censusRep := ContractionForestCensusGeneral.compFold certificate.core (zeroSlots certificate point)is a legalDegSpec.rep;censusRep_idemiscompFold_idem, generically, nodecide;censusRep_zeroiscompFold_tail_eq_head_of_mem, applied to slots inzeroSlots, which are exactly the ones membership needs;censusRep_looplessisrep_loopless_of_not_isLoopy, given the one census fact¬ IsLoopy certificate.core (zeroSlots certificate point);censusRep_forestisforest_image_add_card_eq, given the one census factIsForest certificate.core (zeroSlots certificate point); andcensusRep_zeroReachupgradesreachIn_self_compFold— the same spanning-forest factrepis built from — into theZeroReachwitnessbnExists_..._of_zeroReachasks for, by matchingAdjInListalongzeroSlotswithZeroLinkpointwise (adjInList_edgeList_zeroSlots_iff_zeroLink).
So the only two facts a row ever supplies are IsForest and ¬ IsLoopy of
the concrete Finset zeroSlots certificate point — both decidable, both
already what a census enumerates.
bnExists_on_degenerate_subdivision_of_validClosed_of_forestCensus
below is the resulting one-call wrapper, shaped to exactly match
ExplicitPotential.CertificateData.bnExists_on_degenerate_subdivision_of_validClosed_of_zeroReach's
conclusion.
The vanishing-slot set at a point #
The slots that vanish at point: exactly the Finset a contraction
census classifies.
Equations
- certificate.zeroSlots point = {edge : Fin p | certificate.segmentNat point edge = 0}
Instances For
The face datum, produced from the census's two facts #
The census-produced rep. No row ever writes this by hand: it is the
union-find component map of the vanishing-slot set.
Equations
- certificate.censusRep point = Utilities.Certificate.ContractionForestCensusGeneral.compFold certificate.core (certificate.zeroSlots point)
Instances For
The ZeroReach witness, from the same spanning-forest structure #
Direct adjacency along zeroSlots is exactly ZeroLink, pointwise: both
say "some vanishing slot joins u and v, in either reading direction".
Reachability along zeroSlots is exactly ZeroReach: the
reflexive-transitive closures of the two pointwise-equal relations above
agree, by Relation.ReflTransGen.mono in both directions.
The ZeroReach witness the interpolated layer needs, emitted by the
census. Every vertex reaches its own censusRep image along a chain of
vanishing slots — the same spanning-forest fact censusRep is defined from,
via reachIn_self_compFold, read through
reachIn_zeroSlots_iff_zeroReach. No separate search: it falls out of
rep's own construction.
The one-call wrapper, shaped to bnExists_..._of_zeroReach exactly #
The acceptance-test wrapper. Everything
bnExists_on_degenerate_subdivision_of_validClosed_of_zeroReach
needs beyond ValidClosed/FormsHold/core connectivity is produced from a
single decidable pair of census facts about zeroSlots certificate point:
that it is a forest (IsForest) and carries no semantic loop (¬ IsLoopy).
No rep, no ZeroReach witness, and no forest cardinality proof is ever
written by a row again.