Marked finite cyclic word reduction #
This file completes the recursive reduction developed in
FiniteCyclicWordReductionCore, carrying the marked normalization state through terminal block
normalization and the connected-presentation result.
Invariants carried by every marked normalization state. Protected-name uniqueness is stated on name spines rather than dart-occurrence lists, so completed boundary carriers are counted once.
- valid : (Dyck.oneFace (ReductionToken.expand tokens)).IsSurfaceValid
- separated : ReductionToken.IsSeparated tokens
- classified : ReductionToken.AllClassified tokens
- protectedNodup : (ReductionToken.protectedNames tokens).Nodup
Instances For
The all-residual marking of a valid word satisfies every execution invariant.
Surface multiplicities restrict to the erased residual word because separation rules out any residual name from all protected blocks.
Forget an actionable feature's occurrence decomposition while retaining its extracted block.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The edge names consumed by an actionable extraction.
Equations
- feature.extractedEdges = feature.block.edges
Instances For
Every actionable feature consumes at least one edge name.
The edge names inside one extracted block are distinct.
No edge consumed by a feature remains in its residual word.
Every name consumed by a feature occurs in its source word.
An actionable residual feature lifted to a marked word. Extracted blocks occupy whole token segments between the distinguished residual darts, so later rewrites can reorder or reverse those segments without splitting a protected block.
- boundary {n : ℕ} {tokens : List (ReductionToken n)} (a : Fin n) (form : BoundaryOccurrenceForm (ReductionToken.residualDarts tokens) a) (remainderTokens : List (ReductionToken n)) (rotated : tokens ~r ReductionToken.residual (dart a form.negative) :: remainderTokens) (residual_remainder : ReductionToken.residualDarts remainderTokens = form.remainder) : MarkedActionablePairReductionFeature tokens
- crosscap {n : ℕ} {tokens : List (ReductionToken n)} (a : Fin n) (form : CrosscapOccurrenceForm (ReductionToken.residualDarts tokens) a) (betweenTokens remainderTokens : List (ReductionToken n)) (rotated : tokens ~r ReductionToken.residual (dart a form.negative) :: betweenTokens ++ ReductionToken.residual (dart a form.negative) :: remainderTokens) (residual_between : ReductionToken.residualDarts betweenTokens = form.between) (residual_remainder : ReductionToken.residualDarts remainderTokens = form.remainder) : MarkedActionablePairReductionFeature tokens
- handle {n : ℕ} {tokens : List (ReductionToken n)} (a b : Fin n) (form : InterleavedOccurrenceForm (ReductionToken.residualDarts tokens) a b) (beforeBTokens beforeNegATokens beforeOutsideBTokens remainderTokens : List (ReductionToken n)) (rotated : tokens ~r ReductionToken.residual (SurfaceCellComplex.SignedDart.pos a) :: beforeBTokens ++ ReductionToken.residual (dart b form.bNegativeInside) :: beforeNegATokens ++ ReductionToken.residual (SurfaceCellComplex.SignedDart.neg a) :: beforeOutsideBTokens ++ ReductionToken.residual (dart b !form.bNegativeInside) :: remainderTokens) (residual_beforeB : ReductionToken.residualDarts beforeBTokens = form.beforeB) (residual_beforeNegA : ReductionToken.residualDarts beforeNegATokens = form.beforeNegA) (residual_beforeOutsideB : ReductionToken.residualDarts beforeOutsideBTokens = form.beforeOutsideB) (residual_remainder : ReductionToken.residualDarts remainderTokens = form.remainder) : MarkedActionablePairReductionFeature tokens
Instances For
Residual feature underlying a marked feature.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Marked target: replace the distinguished residual darts by one atomic extracted block while performing the same segment reversal/reordering as the local Gallier--Xu rewrite.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Lift an actionable feature of the erased residual word to the marked token word.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Erasing the marked target recovers exactly the residual word of the underlying feature.
Marked extraction preserves the classified-token grammar.
The protected names after one marked extraction are precisely the newly extracted names together with the previously protected names.
A marked extraction prepends exactly its newly consumed names and otherwise only permutes the existing protected-name spine.
Every marked extraction creates at least one protected name.
Extraction preserves global ownership uniqueness of protected names.
Marked extraction preserves separation of residual and protected edge namespaces.
Expanding a separated marked feature gives the genuine feature on the full signed word. The separation invariant is exactly what rules out a selected residual edge from every protected block lying in an intervening token segment.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The full-word extraction target is exactly the expansion of the marked target.
An inverse pair which is adjacent at marked-token granularity. Unlike adjacency only after erasing protected blocks, this is immediately executable by the ordinary cancellation chain.
The
edgedeclaration.- negativeFirst : Bool
The
negativeFirstdeclaration. - tailTokens : List (ReductionToken (n + 1))
The
tailTokensdeclaration. - rotated : tokens ~r ReductionToken.residual (dart self.edge self.negativeFirst) :: ReductionToken.residual (dart self.edge !self.negativeFirst) :: self.tailTokens
Instances For
Expanding a token-adjacent pair gives an ordinary cancellable pair on the full word.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Validity ensures that the removed edge is absent from every remaining marked token.
Separation of residual and protected names passes to the marked tail after deleting the displayed residual pair.
Removing a displayed residual pair leaves the protected-name spine unchanged up to rotation.
A cancellable pair of the erased residual word lifted to its exact marked-token interval. The intervening tokens have empty residual contribution but may contain protected blocks.
- edge : Fin n
The
edgedeclaration. - negativeFirst : Bool
The
negativeFirstdeclaration. - betweenTokens : List (ReductionToken n)
The
betweenTokensdeclaration. - tailTokens : List (ReductionToken n)
The
tailTokensdeclaration. - rotated : tokens ~r ReductionToken.residual (dart self.edge self.negativeFirst) :: self.betweenTokens ++ ReductionToken.residual (dart self.edge !self.negativeFirst) :: self.tailTokens
Instances For
Lift an ordinary cancellable pair of the erased residual word to marked-token data.
Equations
- One or more equations did not get rendered due to their size.
Instances For
When no protected token intervenes, a lifted residual pair is directly cancellable.
Equations
- pair.toAdjacent hempty = { edge := pair.edge, negativeFirst := pair.negativeFirst, tailTokens := pair.tailTokens, rotated := ⋯ }
Instances For
Surface multiplicity ensures that a lifted pair's carrier occurs nowhere in its protected interval or remaining marked tail.
A lifted inverse pair contributes exactly two residual darts beyond its marked tail.
A residual inverse pair surrounding one extracted boundary singleton. Reclassifying the three-token succession as one completed boundary block closes the singleton into the canonical loop shape without changing the expanded cyclic presentation.
- carrier : Fin n
The
carrierdeclaration. - hole : Fin n
The
holedeclaration. - carrierNegative : Bool
The
carrierNegativedeclaration. - holeNegative : Bool
The
holeNegativedeclaration. - tailTokens : List (ReductionToken n)
The
tailTokensdeclaration. - rotated : tokens ~r ReductionToken.residual (dart self.carrier self.carrierNegative) :: ReductionToken.extracted (ExtractedBlock.boundary self.hole self.holeNegative) :: ReductionToken.residual (dart self.carrier !self.carrierNegative) :: self.tailTokens
Instances For
Exact three-dart spelling of the closed boundary loop.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Marked target obtained by replacing the displayed succession with one atomic protected word.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The source expansion is a cyclic rotation of the exact boundary-closure target expansion.
Boundary closure preserves the classified-token grammar.
Surface multiplicity forces the loop carrier to be absent from the remaining marked tail.
Closing a boundary singleton preserves separation of the remaining residual names from all protected loop and block names.
Closing a raw boundary singleton transfers its residual carrier into protected ownership without duplicating any protected name.
A raw boundary atom followed by a protected interval inside a residual inverse pair. One Dyck move rotates the raw atom behind that interval, exposing the next protected atom.
- carrier : Fin n
The
carrierdeclaration. - hole : Fin n
The
holedeclaration. - carrierNegative : Bool
The
carrierNegativedeclaration. - holeNegative : Bool
The
holeNegativedeclaration. - insideTokens : List (ReductionToken n)
The
insideTokensdeclaration. - outsideTokens : List (ReductionToken n)
The
outsideTokensdeclaration. - rotated : tokens ~r ReductionToken.residual (dart self.carrier self.carrierNegative) :: ReductionToken.extracted (ExtractedBlock.boundary self.hole self.holeNegative) :: self.insideTokens ++ ReductionToken.residual (dart self.carrier !self.carrierNegative) :: self.outsideTokens
- carrier_not_mem_inside : self.carrier ∉ List.map edgeOfDart (ReductionToken.expand self.insideTokens)
- carrier_not_mem_outside : self.carrier ∉ List.map edgeOfDart (ReductionToken.expand self.outsideTokens)
Instances For
Exact marked target of moving the raw boundary atom to the end of its protected interval.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Boundary-atom rotation only permutes atomic marked tokens.
Expansion of the marked source has the word-level boundary-atom rotation spelling.
Expansion of the exact marked target is the word-level rotation target.
The same residual pair surrounds the rotated protected interval at the exact marked target.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A completed boundary-loop atom at the head of a protected residual-pair interval. One
LoopGrouping move commutes this atom out of that interval.
- outer : Fin n
The
outerdeclaration. - carrier : Fin n
The
carrierdeclaration. - hole : Fin n
The
holedeclaration. - outerNegative : Bool
The
outerNegativedeclaration. - carrierNegative : Bool
The
carrierNegativedeclaration. - holeNegative : Bool
The
holeNegativedeclaration. - insideTokens : List (ReductionToken n)
The
insideTokensdeclaration. - outsideTokens : List (ReductionToken n)
The
outsideTokensdeclaration. - rotated : tokens ~r ReductionToken.residual (dart self.outer self.outerNegative) :: ReductionToken.completed (CompletedBlock.boundary self.carrier self.hole self.carrierNegative self.holeNegative) :: self.insideTokens ++ ReductionToken.residual (dart self.outer !self.outerNegative) :: self.outsideTokens
- carrier_not_mem_inside : self.carrier ∉ List.map edgeOfDart (ReductionToken.expand self.insideTokens)
- carrier_not_mem_outside : self.carrier ∉ List.map edgeOfDart (ReductionToken.expand self.outsideTokens)
Instances For
Exact marked target after commuting the completed boundary loop out of the residual pair.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The commute target merely permutes atomic marked tokens.
Expansion of the marked source has exactly the word-level boundary-block commute spelling.
Expansion of the exact marked target is the word-level commute target.
Boundary-block commuting preserves the separated namespace invariant.
Boundary-block commuting preserves the classified-token grammar.
Boundary-loop commuting preserves unique ownership of protected names.
A completed crosscap at the head of a protected residual-pair interval. Commuting it through the pair exchanges the residual and completed carriers and shortens that protected interval.
- outer : Fin n
The
outerdeclaration. - carrier : Fin n
The
carrierdeclaration. - outerNegative : Bool
The
outerNegativedeclaration. - carrierNegative : Bool
The
carrierNegativedeclaration. - insideTokens : List (ReductionToken n)
The
insideTokensdeclaration. - outsideTokens : List (ReductionToken n)
The
outsideTokensdeclaration. - rotated : tokens ~r ReductionToken.residual (dart self.outer self.outerNegative) :: ReductionToken.completed (CompletedBlock.crosscap self.carrier self.carrierNegative) :: self.insideTokens ++ ReductionToken.residual (dart self.outer !self.outerNegative) :: self.outsideTokens
- carrier_not_mem_inside : self.carrier ∉ List.map edgeOfDart (ReductionToken.expand self.insideTokens)
- carrier_not_mem_outside : self.carrier ∉ List.map edgeOfDart (ReductionToken.expand self.outsideTokens)
- outer_not_mem_inside : self.outer ∉ List.map edgeOfDart (ReductionToken.expand self.insideTokens)
- outer_not_mem_outside : self.outer ∉ List.map edgeOfDart (ReductionToken.expand self.outsideTokens)
Instances For
Exact marked target of contextual crosscap commuting.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Expansion of the marked source is the generic contextual crosscap source spelling.
Expansion of the exact marked target is the generic contextual crosscap target spelling.
Contextual crosscap commuting preserves the classified-token grammar.
Contextual crosscap commuting preserves separation of residual and protected edge names.
Crosscap commuting exchanges a protected carrier with a fresh residual carrier while preserving unique protected-name ownership.
A completed handle at the head of a protected residual-pair interval.
- outer : Fin n
The
outerdeclaration. - first : Fin n
The
firstdeclaration. - second : Fin n
The
seconddeclaration. - outerNegative : Bool
The
outerNegativedeclaration. - insideTokens : List (ReductionToken n)
The
insideTokensdeclaration. - outsideTokens : List (ReductionToken n)
The
outsideTokensdeclaration. - rotated : tokens ~r ReductionToken.residual (dart self.outer self.outerNegative) :: ReductionToken.completed (CompletedBlock.handle self.first self.second) :: self.insideTokens ++ ReductionToken.residual (dart self.outer !self.outerNegative) :: self.outsideTokens
- first_not_mem_inside : self.first ∉ List.map edgeOfDart (ReductionToken.expand self.insideTokens)
- first_not_mem_outside : self.first ∉ List.map edgeOfDart (ReductionToken.expand self.outsideTokens)
- second_not_mem_inside : self.second ∉ List.map edgeOfDart (ReductionToken.expand self.insideTokens)
- second_not_mem_outside : self.second ∉ List.map edgeOfDart (ReductionToken.expand self.outsideTokens)
- outer_not_mem_inside : self.outer ∉ List.map edgeOfDart (ReductionToken.expand self.insideTokens)
- outer_not_mem_outside : self.outer ∉ List.map edgeOfDart (ReductionToken.expand self.outsideTokens)
Instances For
Exact marked target after moving the completed handle outside the residual pair.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Handle commuting merely permutes atomic marked tokens.
Expansion of the marked source is the generic contextual handle source spelling.
Expansion of the exact marked target is the generic contextual handle target spelling.
Handle commuting preserves the separated namespace invariant.
Handle commuting preserves the classified-token grammar.
Handle commuting preserves unique ownership of protected names.
Two adjacent extracted boundary singletons which form a P1-subdivided boundary segment.
The
firstdeclaration.The
seconddeclaration.- firstNegative : Bool
The
firstNegativedeclaration. - secondNegative : Bool
The
secondNegativedeclaration. - tailTokens : List (ReductionToken (n + 1))
The
tailTokensdeclaration. - rotated : tokens ~r [ReductionToken.extracted (ExtractedBlock.boundary self.first self.firstNegative), ReductionToken.extracted (ExtractedBlock.boundary self.second self.secondNegative)] ++ self.tailTokens
- first_not_mem_tail : self.first ∉ List.map edgeOfDart (ReductionToken.expand self.tailTokens)
- second_not_mem_tail : self.second ∉ List.map edgeOfDart (ReductionToken.expand self.tailTokens)
Instances For
Build a boundary contraction from a displayed adjacent pair. Separation rules the protected names out of the residual tail, while duplicate-freeness of protected names supplies distinctness and rules them out of every protected tail token.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exact marked target after contracting the second boundary subdivision edge.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Expansion of the marked source is the adjacent-boundary contraction source spelling.
Expansion of the marked target is the word-level P1 contraction target.
Boundary-subdivision contraction preserves the classified-token grammar.
Boundary-subdivision contraction preserves separation of residual and protected names.
Boundary-subdivision contraction preserves duplicate-freeness of protected name spines.
Boundary-subdivision contraction preserves the number of residual darts.
After commuting a completed boundary loop, the same residual pair surrounds exactly the strictly shorter protected interval.
Equations
- One or more equations did not get rendered due to their size.
Instances For
After contextual crosscap commuting, the old crosscap carrier is the new residual carrier around exactly the strict tail of the protected interval.
Equations
- One or more equations did not get rendered due to their size.
Instances For
After commuting a completed handle, the same residual pair surrounds exactly the strict tail of the protected interval.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Under the classified-state invariant, the interval crossed by a lifted residual cancellation is an exact finite list of typed protected atoms.
A raw boundary atom with a nonempty protected suffix exposes the Dyck transition which moves that raw atom behind the suffix.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Two raw boundary atoms at the head of a protected residual-pair interval expose an adjacent P1 contraction after one cyclic token rotation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
After contracting the first two raw boundary atoms, the same residual inverse pair surrounds their merged singleton followed by the strict tail of the old protected interval.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A boundary contraction removes one protected atom from the selected residual-pair interval.
A lifted residual pair surrounding exactly one boundary singleton is a boundary closure.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A lifted residual pair whose protected interval begins with a completed boundary loop exposes the exact boundary-block commute transition.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Surface multiplicity supplies all freshness conditions needed to commute a completed boundary-loop atom at the head of a lifted residual-pair interval.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A lifted residual pair whose protected interval begins with a completed crosscap exposes the exact contextual crosscap transition.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Surface multiplicity supplies every freshness condition needed for a contextual crosscap transition at the head of a lifted residual-pair interval.
Equations
- pair.toCrosscapBlockCommuteOfValid carrier carrierNegative insideTokens hbetween valid = pair.toCrosscapBlockCommute carrier carrierNegative insideTokens hbetween ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
A lifted residual pair whose protected interval begins with a completed handle exposes the exact contextual handle transition.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Surface multiplicity supplies every distinction and freshness condition needed for a contextual handle transition.
Equations
- pair.toHandleBlockCommuteOfValid first second insideTokens hbetween valid = pair.toHandleBlockCommute first second insideTokens hbetween ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Exhaustive local disposition of a lifted residual inverse pair. The first two constructors are already executable. The final constructor isolates the remaining contextual move: commuting a nontrivial protected interval out of the inverse pair before cancellation.
- adjacent {n : ℕ} {tokens : List (ReductionToken (n + 1))} {pair : MarkedResidualCancellablePair tokens} (between_eq : pair.betweenTokens = []) : pair.Disposition
- boundary {n : ℕ} {tokens : List (ReductionToken (n + 1))} {pair : MarkedResidualCancellablePair tokens} (hole : Fin (n + 1)) (holeNegative : Bool) (between_eq : pair.betweenTokens = [ReductionToken.extracted (ExtractedBlock.boundary hole holeNegative)]) : pair.Disposition
- contextual {n : ℕ} {tokens : List (ReductionToken (n + 1))} {pair : MarkedResidualCancellablePair tokens} (between_ne : pair.betweenTokens ≠ []) (not_boundary : ∀ (hole : Fin (n + 1)) (holeNegative : Bool), pair.betweenTokens ≠ [ReductionToken.extracted (ExtractedBlock.boundary hole holeNegative)]) : pair.Disposition
Instances For
Classify every lifted residual pair into the two completed executable cases or the exact remaining contextual case.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Classified-state refinement of Disposition: every genuinely contextual interval exposes
its first typed protected atom and the exact remaining atom list.
- adjacent {n : ℕ} {tokens : List (ReductionToken (n + 1))} {pair : MarkedResidualCancellablePair tokens} (between_eq : pair.betweenTokens = []) : pair.ClassifiedDisposition
- boundary {n : ℕ} {tokens : List (ReductionToken (n + 1))} {pair : MarkedResidualCancellablePair tokens} (hole : Fin (n + 1)) (holeNegative : Bool) (between_eq : pair.betweenTokens = [ReductionToken.extracted (ExtractedBlock.boundary hole holeNegative)]) : pair.ClassifiedDisposition
- structured {n : ℕ} {tokens : List (ReductionToken (n + 1))} {pair : MarkedResidualCancellablePair tokens} (first : ProtectedAtom (n + 1)) (rest : List (ProtectedAtom (n + 1))) (between_eq : pair.betweenTokens = List.map ReductionToken.ofProtectedAtom (first :: rest)) : pair.ClassifiedDisposition
Instances For
Exhaustively expose the typed protected interval of a lifted residual pair. A singleton raw boundary atom is kept as the dedicated executable boundary-closure case.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A complete proof-relevant decomposition trace. Each step extracts one certified block, then pair-reduces the strictly shorter residual before continuing.
- done {n : ℕ} : ResidualDecomposition []
- step {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} (feature : ActionablePairReductionFeature word) (reduction : ResidualPairReduction feature.residualWord) (tail : ResidualDecomposition reduction.reducedWord) : ResidualDecomposition word
Instances For
Extracted blocks, in recursive extraction order.
Equations
- LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.ResidualDecomposition.done.blocks = []
- (LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.ResidualDecomposition.step feature reduction tail).blocks = feature.block :: tail.blocks
Instances For
Edge names consumed by all blocks in extraction order.
Equations
- One or more equations did not get rendered due to their size.
- LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.ResidualDecomposition.done.extractedEdges = []
Instances For
Number of boundary singleton blocks in a decomposition.
Equations
- One or more equations did not get rendered due to their size.
- LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.ResidualDecomposition.done.boundaryCount = 0
Instances For
Number of crosscap square blocks in a decomposition.
Equations
- One or more equations did not get rendered due to their size.
- LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.ResidualDecomposition.done.crosscapCount = 0
Instances For
Number of handle blocks in a decomposition.
Equations
- One or more equations did not get rendered due to their size.
- LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.ResidualDecomposition.done.handleCount = 0
Instances For
The normal-form parameters selected by a complete block decomposition. In the presence of any crosscap, each handle contributes two additional crosscaps via Gallier--Xu Step 5.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Every extracted block belongs to exactly one of the three block classes.
A decomposition of a nonempty word extracts at least one block.
The normal form selected from a nonempty decomposition is Eval-admissible.
Every edge recorded by a decomposition occurs in that decomposition's source word.
Distinct extraction steps consume disjoint edge names.
One descent step from a directed opposite arc: either an immediately extractable feature, or a strictly shorter opposite arc nested inside it.
- actionable {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} {a : Fin n} {form : OppositeArcForm word a} (feature : ActionablePairReductionFeature word) : OppositeArcStep word form
- nested {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} {a : Fin n} {form : OppositeArcForm word a} (b : Fin n) (inner : OppositeArcForm word b) (shorter : inner.between.length < form.between.length) : OppositeArcStep word form
Instances For
Every once-used edge can be displayed at the cyclic head.
Inspect the first dart of a nonempty opposite arc. A boundary or equal-orientation edge is immediately actionable. An opposite edge either crosses the selected pair, yielding a handle, or closes inside it, yielding a strictly shorter directed arc.
Surface-valid words supply the residual multiplicity hypothesis required by one opposite-arc descent step.
Well-founded descent through nested opposite pairs terminates at a boundary, crosscap, or interleaved handle feature.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Validity-specialized spelling of the residual opposite-arc descent.
Equations
- form.findActionable valid reduced = form.findActionableOfUsedMultiplicities ⋯ reduced
Instances For
In a pair-reduced word, the two darts of an opposite form have a nonempty intervening word.
Proof-producing extraction of the easy pairing features #
The displayed cyclic word carried by an interleaved-pair certificate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The adjacent handle block produced by the three-Dyck extraction chain.
Equations
- One or more equations did not get rendered due to their size.
Instances For
When b is encountered negative inside the a-pair, reverse that edge to obtain the
positive-first source spelling required by handle extraction.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A certified interleaved pair produces an adjacent handle block through the existing
three-Dyck normalization chain. If the inner occurrence of b is negative, the chain begins by
reversing the orientation assigned to b.
The cyclic spelling obtained by displaying a boundary edge at the head of its word.
Equations
Instances For
Displaying a certified boundary occurrence at the head is already a normalization equivalence: it is only a cyclic change of the distinguished face word.
The grouped spelling produced from a certified crosscap occurrence. The segment after the second occurrence is reversed, exactly as in the Gallier--Xu crosscap rewrite.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The positive crosscap target is cyclically the chosen grouped spelling.
The negative crosscap target is cyclically the chosen grouped spelling.
A certified equally oriented pair can be moved to an adjacent crosscap block by an exact normalization chain. Both signs are supported; the grouped block retains the input sign.
Each local extraction target is definitionally its extracted block followed by the residual word used by the global recursion.
A proof-producing result of acting on one certified pairing feature. The constructor records the exact extracted spelling, its transported validity, and the normalization chain from the original word.
- boundary {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} {valid : (Dyck.oneFace word).IsSurfaceValid} (a : Fin n) (form : BoundaryOccurrenceForm word a) (validHead : (Dyck.oneFace form.headWord).IsSurfaceValid) (equivalent : NormalizationEquivalent { presentation := Dyck.oneFace word, valid := valid } { presentation := Dyck.oneFace form.headWord, valid := validHead }) : ActionablePairReductionResult word valid
- crosscap {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} {valid : (Dyck.oneFace word).IsSurfaceValid} (a : Fin n) (form : CrosscapOccurrenceForm word a) (validGrouped : (Dyck.oneFace form.groupedWord).IsSurfaceValid) (equivalent : NormalizationEquivalent { presentation := Dyck.oneFace word, valid := valid } { presentation := Dyck.oneFace form.groupedWord, valid := validGrouped }) : ActionablePairReductionResult word valid
- handle {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} {valid : (Dyck.oneFace word).IsSurfaceValid} (a b : Fin n) (form : InterleavedOccurrenceForm word a b) (validGrouped : (Dyck.oneFace form.groupedWord).IsSurfaceValid) (equivalent : NormalizationEquivalent { presentation := Dyck.oneFace word, valid := valid } { presentation := Dyck.oneFace form.groupedWord, valid := validGrouped }) : ActionablePairReductionResult word valid
Instances For
Feature whose local normalization chain was executed.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exact block-plus-residual word reached by an executed extraction.
Equations
- result.targetWord = result.feature.block.word ++ result.feature.residualWord
Instances For
Valid presentation reached by one actionable extraction.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The stored target presentation is the one-face presentation on targetWord.
Validity witness for the exact block-plus-residual target word.
Normalization equivalence certified by one actionable extraction.
Normalization equivalence to the stable exact block-plus-residual spelling.
Execute an actionable pairing feature using the corresponding proof-producing rewrite endpoint.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Proof-producing execution of an extraction on a marked word, with the exact marked target retained as its public endpoint.
- targetValid : (Dyck.oneFace (ReductionToken.expand marked.targetTokens)).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated marked.targetTokens
- targetClassified : ReductionToken.AllClassified marked.targetTokens
- targetProtectedNodup : (ReductionToken.protectedNames marked.targetTokens).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand marked.targetTokens), valid := ⋯ }
Instances For
Execute a marked feature by expanding it, applying the corresponding Gallier--Xu move, and transporting the result back to the exact marked target spelling.
Exact lowered marked endpoint of an adjacent inverse-pair cancellation.
Equations
Instances For
Proof-producing cancellation of a token-adjacent inverse pair, retaining the lowered marked target rather than flattening previously extracted blocks.
- targetValid : (Dyck.oneFace (ReductionToken.expand (pair.cancellationTargetTokens valid))).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated (pair.cancellationTargetTokens valid)
- targetClassified : ReductionToken.AllClassified (pair.cancellationTargetTokens valid)
- targetProtectedNodup : (ReductionToken.protectedNames (pair.cancellationTargetTokens valid)).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand (pair.cancellationTargetTokens valid)), valid := ⋯ }
Instances For
Execute an inverse pair which is genuinely adjacent in the marked word. The nonempty-tail hypothesis selects the ordinary cancellation endpoint; the empty-tail sphere endpoint remains handled by the outer cancellation recursion.
Proof-producing reclassification of a residual inverse pair and boundary singleton as one atomic protected loop.
- targetValid : (Dyck.oneFace (ReductionToken.expand closure.targetTokens)).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated closure.targetTokens
- targetClassified : ReductionToken.AllClassified closure.targetTokens
- targetProtectedNodup : (ReductionToken.protectedNames closure.targetTokens).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand closure.targetTokens), valid := ⋯ }
Instances For
Close an extracted boundary singleton into an atomic loop. The underlying signed word changes only by cyclic rotation, while the residual measure drops by the two carrier darts.
Proof-producing Dyck rotation of a raw boundary atom behind a protected interval.
- targetValid : (Dyck.oneFace (ReductionToken.expand step.targetTokens)).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated step.targetTokens
- targetClassified : ReductionToken.AllClassified step.targetTokens
- targetProtectedNodup : (ReductionToken.protectedNames step.targetTokens).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand step.targetTokens), valid := ⋯ }
Instances For
Execute the raw-boundary rotation through the exact signed Dyck chain.
Proof-producing commute of one completed boundary loop out of a contextual residual pair.
- targetValid : (Dyck.oneFace (ReductionToken.expand commute.targetTokens)).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated commute.targetTokens
- targetClassified : ReductionToken.AllClassified commute.targetTokens
- targetProtectedNodup : (ReductionToken.protectedNames commute.targetTokens).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand commute.targetTokens), valid := ⋯ }
Instances For
Execute the contextual boundary-loop commute through the exact word-level LoopGrouping
chain, supporting either orientation of the loop carrier.
Proof-producing commute of one completed crosscap through a contextual residual pair.
- targetValid : (Dyck.oneFace (ReductionToken.expand commute.targetTokens)).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated commute.targetTokens
- targetClassified : ReductionToken.AllClassified commute.targetTokens
- targetProtectedNodup : (ReductionToken.protectedNames commute.targetTokens).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand commute.targetTokens), valid := ⋯ }
Instances For
Execute contextual crosscap commuting through the exact two-crosscap word chain.
Proof-producing commute of one completed handle through a contextual residual pair.
- targetValid : (Dyck.oneFace (ReductionToken.expand commute.targetTokens)).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated commute.targetTokens
- targetClassified : ReductionToken.AllClassified commute.targetTokens
- targetProtectedNodup : (ReductionToken.protectedNames commute.targetTokens).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand commute.targetTokens), valid := ⋯ }
Instances For
Execute contextual handle commuting through the exact four-Dyck word chain.
Proof-producing contraction of two adjacent extracted boundary subdivisions.
- targetValid : (Dyck.oneFace (ReductionToken.expand contraction.targetTokens)).IsSurfaceValid
- targetSeparated : ReductionToken.IsSeparated contraction.targetTokens
- targetClassified : ReductionToken.AllClassified contraction.targetTokens
- targetProtectedNodup : (ReductionToken.protectedNames contraction.targetTokens).Nodup
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := valid } { presentation := Dyck.oneFace (ReductionToken.expand contraction.targetTokens), valid := ⋯ }
Instances For
Execute one adjacent-boundary P1 contraction, lowering the ambient edge type by one.
One certified transition which strictly shortens the protected interval of a lifted residual pair while preserving the total number of residual darts.
- targetEdgeCount : ℕ
The
targetEdgeCountdeclaration. - targetTokens : List (ReductionToken self.targetEdgeCount)
The
targetTokensdeclaration. - targetPair : MarkedResidualCancellablePair self.targetTokens
The
targetPairdeclaration. - targetState : MarkedExecutionState self.targetTokens
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := ⋯ } { presentation := Dyck.oneFace (ReductionToken.expand self.targetTokens), valid := ⋯ }
- residualLengthEq : (ReductionToken.residualDarts self.targetTokens).length = (ReductionToken.residualDarts tokens).length
- rawBoundaryCountTailEq : ReductionToken.rawBoundaryCount self.targetPair.tailTokens = ReductionToken.rawBoundaryCount pair.tailTokens
Instances For
Prepend a residual- and interval-length-preserving marked transition to a strict shortening.
Equations
- One or more equations did not get rendered due to their size.
Instances For
One certified transition which preserves both residual length and protected-interval length.
- targetTokens : List (ReductionToken n)
The
targetTokensdeclaration. - targetPair : MarkedResidualCancellablePair self.targetTokens
The
targetPairdeclaration. - targetState : MarkedExecutionState self.targetTokens
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := ⋯ } { presentation := Dyck.oneFace (ReductionToken.expand self.targetTokens), valid := ⋯ }
- residualLengthEq : (ReductionToken.residualDarts self.targetTokens).length = (ReductionToken.residualDarts tokens).length
- rawBoundaryCountTailEq : ReductionToken.rawBoundaryCount self.targetPair.tailTokens = ReductionToken.rawBoundaryCount pair.tailTokens
Instances For
Move a leading raw boundary atom behind a nonempty protected suffix without changing either the residual or protected-interval measure.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Commute a completed boundary loop out of a lifted pair, producing a strict interval shortening.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Commute a completed crosscap out of a lifted pair, producing a strict interval shortening.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Commute a completed handle out of a lifted pair, producing a strict interval shortening.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Contract two adjacent raw boundary atoms, producing a strict interval shortening in the lowered ambient edge type.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Certified elimination of one lifted residual inverse pair. The target may have a smaller ambient edge type after P1 cancellation or boundary contraction, but always has strictly fewer residual darts and retains at least one protected name.
- targetEdgeCount : ℕ
The
targetEdgeCountdeclaration. - targetTokens : List (ReductionToken self.targetEdgeCount)
The
targetTokensdeclaration. - targetState : MarkedExecutionState self.targetTokens
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := ⋯ } { presentation := Dyck.oneFace (ReductionToken.expand self.targetTokens), valid := ⋯ }
- residualLengthEqTail : (ReductionToken.residualDarts self.targetTokens).length = (ReductionToken.residualDarts pair.tailTokens).length
- rawBoundaryCountEqTail : ReductionToken.rawBoundaryCount self.targetTokens = ReductionToken.rawBoundaryCount pair.tailTokens
- residualLengthLt : (ReductionToken.residualDarts self.targetTokens).length < (ReductionToken.residualDarts tokens).length
Instances For
Prepend a residual-length-preserving marked transition to a completed pair resolution.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Eliminate an adjacent lifted pair by ordinary cancellation. A protected-name witness rules out the exceptional empty-tail sphere endpoint.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Eliminate a lifted pair surrounding one raw boundary atom by reclassifying the three displayed tokens as one completed boundary loop.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Resolve one lifted residual inverse pair. The fuel measures the protected interval: every contextual step strictly shortens it, while the terminal cases eliminate the residual pair.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Eliminate one lifted residual inverse pair by the terminating protected-interval resolver.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Certified marked endpoint after all cancellable pairs have been removed from the erased residual word. Already protected names remain present, even when cancellations lower the ambient edge type.
- targetEdgeCount : ℕ
The
targetEdgeCountdeclaration. - targetTokens : List (ReductionToken self.targetEdgeCount)
The
targetTokensdeclaration. - targetState : MarkedExecutionState self.targetTokens
- targetReduced : IsPairReduced (ReductionToken.residualDarts self.targetTokens)
- targetResidualLengthLe : (ReductionToken.residualDarts self.targetTokens).length ≤ (ReductionToken.residualDarts tokens).length
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := ⋯ } { presentation := Dyck.oneFace (ReductionToken.expand self.targetTokens), valid := ⋯ }
Instances For
Fuel-bounded execution of residual inverse-pair reduction inside a classified marked word. Each resolved pair strictly decreases the erased residual length.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Execute all residual inverse-pair cancellations in a marked state which already owns at least one protected name.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The local feature exposed at a selected edge of a pair-reduced valid word.
- boundary {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} (a : Fin n) (form : BoundaryOccurrenceForm word a) : PairReductionFeature word
- crosscap {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} (a : Fin n) (form : CrosscapOccurrenceForm word a) : PairReductionFeature word
- opposite {n : ℕ} {word : List (SurfaceCellComplex.SignedDart (Fin n))} (a : Fin n) (form : OppositeOccurrenceForm word a) (between_nonempty : form.between ≠ []) : PairReductionFeature word
Instances For
Every pair-reduced valid word with at least one edge exposes either a boundary dart, an equally oriented crosscap pair, or a nondegenerate opposite pair.
Every nonempty pair-reduced valid word exposes a feature with a complete local normalization chain: a boundary edge, a crosscap pair, or an interleaved pair ready for handle extraction.
Residual form of actionable-feature existence. It needs only a nonempty residual word, surface multiplicities for names still used there, and pair reduction; already-grouped ambient edge names may be absent.
Fuel-bounded decomposition of a pair-reduced residual word into boundary, crosscap, and handle blocks. Pair cancellation after each extraction restores the induction hypothesis.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Every pair-reduced residual word with valid used-edge multiplicities admits a terminating block decomposition.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Surface-valid pair-reduced one-face words admit the residual block decomposition needed by the global Gallier--Xu normalization recursion.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Normal-form parameters computed from the certified decomposition of a pair-reduced valid one-face word.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The normal-form parameters selected from a pair-reduced valid word satisfy the exact Lean-Eval admissibility predicate.
Find and execute one certified normalization step on any nonempty pair-reduced valid word.
Equations
Instances For
Certified endpoint of the marked extraction recursion: no residual darts remain, every token is classified, and at least one protected name survives.
- targetEdgeCount : ℕ
The
targetEdgeCountdeclaration. - targetTokens : List (ReductionToken self.targetEdgeCount)
The
targetTokensdeclaration. - targetState : MarkedExecutionState self.targetTokens
- equivalent : NormalizationEquivalent { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := ⋯ } { presentation := Dyck.oneFace (ReductionToken.expand self.targetTokens), valid := ⋯ }
Instances For
Fuel-bounded marked Gallier--Xu extraction after at least one protected block has been created. Every extraction strictly shortens the residual word, and the intervening marked pair reducer restores pair reduction before the recursive call.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Finish marked extraction from a pair-reduced state which already owns a protected name.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Execute the complete marked extraction recursion from an arbitrary pair-reduced valid one-face
word. The first extraction establishes protected-name ownership; subsequent calls use
finishExtractions.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exact atom-level endpoint of the marked recursion. Its name spine is duplicate-free, its word is surface-valid, and at least one protected atom remains.
- edgeCount : ℕ
The
edgeCountdeclaration. - atoms : List (ProtectedAtom self.edgeCount)
The
atomsdeclaration. - namesNodup : (ProtectedAtom.sequenceNames self.atoms).Nodup
- valid : (Dyck.oneFace (ProtectedAtom.sequenceWord self.atoms)).IsSurfaceValid
Instances For
Validity-bundled finite-cyclic presentation displayed by a terminal atom word.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exact canonical normal form selected by a terminal atom word.
Equations
Instances For
A terminal atom word always selects an Eval-admissible canonical presentation.
Retain the terminal atom sequence after adding the fresh boundary-envelope carrier.
Equations
Instances For
Represent every retained terminal atom as one protected marked token.
Equations
Instances For
Marked target of the boundary envelope: the fresh opposite carrier pair surrounds all retained terminal atoms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Valid marked execution state carried by the fresh boundary envelope.
The fresh boundary-envelope carrier as an actionable marked residual pair.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Execute the existing protected-interval resolver on the fresh boundary envelope.
Equations
- terminal.resolveEnvelope = terminal.envelopedPair.resolve ⋯ ⋯
Instances For
Boundary enveloping followed by the existing marked resolver preserves the realization of the original terminal protected word.
Finish the fresh-carrier resolution at a certified residual-empty marked endpoint.
Equations
- terminal.finishEnvelope = ⋯.finishExtractions ⋯ ⋯
Instances For
The completely executed boundary-envelope chain preserves the original realization.
Forget the marked-token implementation of a residual-empty state and retain its exact terminal protected-atom word.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exact block-level endpoint after every raw boundary singleton has been completed.
- edgeCount : ℕ
The
edgeCountdeclaration. - blocks : List (CompletedBlock self.edgeCount)
The
blocksdeclaration. - namesNodup : (CompletedBlock.sequenceNames self.blocks).Nodup
- valid : (Dyck.oneFace (CompletedBlock.sequenceWord self.blocks)).IsSurfaceValid
Instances For
Validity-bundled finite-cyclic presentation displayed by a terminal completed-block word.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Exact canonical normal form selected by the completed block counts.
Equations
Instances For
Atom-level terminal word returned by the fully executed fresh boundary envelope.
Equations
- terminal.boundaryNormalizedWord = ⋯.toTerminalProtectedWord ⋯ ⋯
Instances For
The boundary-envelope execution exposes a residual-empty protected atom word equivalent to the original terminal word.
Extract the unique completed-block sequence from a raw-free terminal atom word.
Equations
- terminal.completedBlocks hraw = Classical.choose ⋯
Instances For
Completed-block endpoint selected by the fully executed boundary normalization.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Boundary normalization lands exactly in the completed-block terminal interface.
Exact normal form selected after constructive raw-boundary completion.
Equations
- terminal.completedNormalForm = terminal.boundaryCompletedWord.normalForm
Instances For
The isolated terminal obligation after the terminating marked recursion: normalize a valid, classified marked word whose residual contribution is empty.
- normalize {n : ℕ} {tokens : List (ReductionToken n)} (state : MarkedExecutionState tokens) : ReductionToken.protectedNames tokens ≠ [] → ReductionToken.residualDarts tokens = [] → NormalizationResult { presentation := Dyck.oneFace (ReductionToken.expand tokens), valid := ⋯ }
The
normalizedeclaration.
Instances For
Narrow completed-block obligation: order and orient a valid, nonempty, duplicate-free block sequence and perform the nonorientable handle conversion.
- equivalent (terminal : TerminalCompletedWord) : NormalizationEquivalent terminal.validPresentation (canonicalValidPresentation terminal.normalForm ⋯)
Instances For
Narrow terminal obligation at the proof's stable seam: normalize a duplicate-free nonempty sequence of protected atoms to the exact canonical presentation selected after boundary completion.
- equivalent (terminal : TerminalProtectedWord) : NormalizationEquivalent terminal.validPresentation (canonicalValidPresentation terminal.completedNormalForm ⋯)
Instances For
A completed-block normalizer discharges the protected-word seam after constructive boundary completion.
Package a protected-word terminal equivalence as the standard exact normalization result.
Equations
- normalizer.normalize terminal = { normalForm := terminal.completedNormalForm, admissible := ⋯, equivalent := ⋯ }
Instances For
A protected-word normalizer discharges the token-level terminal interface used by the marked extraction recursion.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A terminal block normalizer supplies the remaining PairReducedNormalizer field after the
now-complete marked extraction recursion.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The universal connected normalization theorem is reduced to the explicit terminal block normalizer, with face merging, initial cancellation, marked extraction, and canonical-result composition already discharged.
Equations
- One or more equations did not get rendered due to their size.