Documentation

LeanPool.ClassificationOfSurfaces.FiniteCyclicTerminalNormalization

Terminal finite-cyclic word normalization #

This file discharges the final completed-block seam of the Gallier--Xu normalization argument. Boundary loops are commuted behind the closed-surface blocks, handles are converted to crosscaps when a crosscap is present, and the resulting ordered word is signed-relabelled to the single project-owned NormalForm.canonicalPresentation.

@[simp]

The distinct-name spine respects block-sequence concatenation.

@[simp]

A name occurs in the exact block word precisely when it occurs in the block name spine.

Permuting completed blocks permutes their exact concatenated words.

Permuting completed blocks permutes their distinct-name spines.

Permuting completed blocks preserves the unoriented edge-occurrence multiset.

@[reducible, inline]

Boolean classifier for completed boundary-loop blocks.

Equations
Instances For

    Closed-surface blocks, retaining their original relative order.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Boundary-loop blocks, retaining their original relative order.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Stable partition with every boundary-loop block placed last.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Replace every completed handle block by the two crosscap blocks contributed in the presence of a fixed ambient crosscap.

          Equations
          Instances For

            Canonical orientable edge names in the same order as the canonical handle and boundary blocks.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              Canonical nonorientable edge names in crosscap-then-boundary order.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                The stable boundary partition is a permutation of the original block sequence.

                Boundary partitioning remains a permutation in arbitrary list context.

                noncomputable def LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.edgeEquivOfNameLists {Source : Type u_1} {Target : Type u_2} [DecidableEq Source] [DecidableEq Target] (sourceNames : List Source) (targetNames : List Target) (sourceNodup : sourceNames.Nodup) (sourceAll : ∀ (source : Source), source sourceNames) (targetNodup : targetNames.Nodup) (targetAll : ∀ (target : Target), target targetNames) (length_eq : sourceNames.length = targetNames.length) :
                Source Target

                Equivalence obtained by pairing two duplicate-free exhaustive name enumerations position by position.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.map_edgeEquivOfNameLists {Source : Type u_1} {Target : Type u_2} [DecidableEq Source] [DecidableEq Target] (sourceNames : List Source) (targetNames : List Target) (sourceNodup : sourceNames.Nodup) (sourceAll : ∀ (source : Source), source sourceNames) (targetNodup : targetNames.Nodup) (targetAll : ∀ (target : Target), target targetNames) (length_eq : sourceNames.length = targetNames.length) :
                  List.map (⇑(edgeEquivOfNameLists sourceNames targetNames sourceNodup sourceAll targetNodup targetAll length_eq)) sourceNames = targetNames

                  The enumeration equivalence maps the entire source name list to the target list exactly.

                  @[instance_reducible]
                  Equations
                  • One or more equations did not get rendered due to their size.

                  Forget the edge names and signs of one completed block.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For

                    Shape sequence of a completed block word.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      Final orientation bit assigned to each edge name by its unique completed block.

                      Equations
                      Instances For

                        Positively normalized spelling of one completed block after applying an edge equivalence.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For

                          Reconstruct a positively oriented block word from a shape list and its flat edge-name spine. Malformed shape/name pairs are assigned the empty word; completed block sequences always land in the exact-shape cases.

                          Equations
                          Instances For

                            Positive normalization is determined entirely by the block shapes and mapped name spine.

                            theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.wordFromKinds_handles_append {Index : Type u_1} {Edge : Type u_2} (indices : List Index) (first second : IndexEdge) (kinds : List BlockKind) (names : List Edge) :
                            wordFromKinds (List.replicate indices.length BlockKind.handle ++ kinds) ((List.map (fun (i : Index) => [first i, second i]) indices).flatten ++ names) = (List.map (fun (i : Index) => [SurfaceCellComplex.SignedDart.pos (first i), SurfaceCellComplex.SignedDart.pos (second i), SurfaceCellComplex.SignedDart.neg (first i), SurfaceCellComplex.SignedDart.neg (second i)]) indices).flatten ++ wordFromKinds kinds names

                            Consume an arbitrary list of named handle blocks before a remaining shape/name context.

                            theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.wordFromKinds_crosscaps_append {Index : Type u_1} {Edge : Type u_2} (indices : List Index) (edge : IndexEdge) (kinds : List BlockKind) (names : List Edge) :
                            wordFromKinds (List.replicate indices.length BlockKind.crosscap ++ kinds) ((List.map (fun (i : Index) => [edge i]) indices).flatten ++ names) = (List.map (fun (i : Index) => [SurfaceCellComplex.SignedDart.pos (edge i), SurfaceCellComplex.SignedDart.pos (edge i)]) indices).flatten ++ wordFromKinds kinds names

                            Consume an arbitrary list of named crosscap blocks before a remaining shape/name context.

                            Consume a complete list of named boundary blocks.

                            A name belonging to the tail is not captured by the head block's orientation lookup.

                            The signed relabeling selected by the unique block-name spine positively normalizes every completed block.

                            An already ordered orientable completed word relabels exactly to the existing canonical orientable finite-cyclic presentation.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For

                              An already ordered nonorientable completed word relabels exactly to the existing canonical nonorientable finite-cyclic presentation.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For

                                Recursively convert every handle following a fixed positive anchor crosscap.

                                Expose one completed crosscap whenever the recursive crosscap count is nonzero.

                                Reverse a negative crosscap at the head of a completed block sequence.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For

                                  Normalize the sign of a displayed head crosscap without changing the remaining block word.

                                  Type-valued crosscap decomposition used by the constructive conversion result.

                                  Instances For

                                    In the presence of a crosscap, rotate one crosscap to the head, normalize its sign, and convert every handle into two additional crosscaps.

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For

                                      A raw one-face context containing one completed boundary loop.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        def LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.negativeBoundaryContextSignedIso {n : } (before after : List (SurfaceCellComplex.SignedDart (Fin n))) (carrier hole : Fin n) (holeNegative : Bool) (hcarrierHole : carrier hole) (hcarrierBefore : carrierList.map edgeOfDart before) (hcarrierAfter : carrierList.map edgeOfDart after) :
                                        (Dyck.oneFace (boundaryContextWord before after carrier hole true holeNegative)).SignedPresentationIso (Dyck.oneFace (boundaryContextWord before after carrier hole false holeNegative))

                                        Reversing only a boundary carrier identifies its negative- and positive-carrier spellings while fixing a context that avoids that carrier.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.exists_commutePositiveBoundaryAdjacent {n : } (before after : List (CompletedBlock n)) (carrier hole : Fin n) (holeNegative : Bool) (block : CompletedBlock n) (hcarrierHole : carrier hole) (hcarrierBefore : carrierList.map edgeOfDart (CompletedBlock.sequenceWord before)) (hcarrierBlock : carrierList.map edgeOfDart block.word) (hcarrierAfter : carrierList.map edgeOfDart (CompletedBlock.sequenceWord after)) (validSource : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole false holeNegative :: block :: after))).IsSurfaceValid) :
                                          ∃ (validTarget : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ block :: CompletedBlock.boundary carrier hole false holeNegative :: after))).IsSurfaceValid), NormalizationEquivalent { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole false holeNegative :: block :: after)), valid := validSource } { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ block :: CompletedBlock.boundary carrier hole false holeNegative :: after)), valid := validTarget }

                                          Commute one positive-carrier boundary loop past the following completed block, in arbitrary cyclic context.

                                          theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.exists_commuteBoundaryAdjacent {n : } (before after : List (CompletedBlock n)) (carrier hole : Fin n) (carrierNegative holeNegative : Bool) (block : CompletedBlock n) (hcarrierHole : carrier hole) (hcarrierBefore : carrierList.map edgeOfDart (CompletedBlock.sequenceWord before)) (hcarrierBlock : carrierList.map edgeOfDart block.word) (hcarrierAfter : carrierList.map edgeOfDart (CompletedBlock.sequenceWord after)) (validSource : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: block :: after))).IsSurfaceValid) :
                                          ∃ (validTarget : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ block :: CompletedBlock.boundary carrier hole carrierNegative holeNegative :: after))).IsSurfaceValid), NormalizationEquivalent { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: block :: after)), valid := validSource } { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ block :: CompletedBlock.boundary carrier hole carrierNegative holeNegative :: after)), valid := validTarget }

                                          Commute a completed boundary loop of either carrier orientation past the following block.

                                          theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.exists_commuteBoundaryAdjacent_of_namesNodup {n : } (before after : List (CompletedBlock n)) (carrier hole : Fin n) (carrierNegative holeNegative : Bool) (block : CompletedBlock n) (hnames : (CompletedBlock.sequenceNames (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: block :: after)).Nodup) (validSource : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: block :: after))).IsSurfaceValid) :
                                          ∃ (validTarget : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ block :: CompletedBlock.boundary carrier hole carrierNegative holeNegative :: after))).IsSurfaceValid), NormalizationEquivalent { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: block :: after)), valid := validSource } { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ block :: CompletedBlock.boundary carrier hole carrierNegative holeNegative :: after)), valid := validTarget }

                                          The duplicate-free block invariant supplies every freshness condition needed by an adjacent boundary commute.

                                          theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.exists_moveBoundaryAcross {n : } (before middle after : List (CompletedBlock n)) (carrier hole : Fin n) (carrierNegative holeNegative : Bool) (hnames : (CompletedBlock.sequenceNames (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: middle ++ after)).Nodup) (validSource : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: middle ++ after))).IsSurfaceValid) :
                                          ∃ (validTarget : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ middle ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: after))).IsSurfaceValid), NormalizationEquivalent { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: middle ++ after)), valid := validSource } { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ middle ++ CompletedBlock.boundary carrier hole carrierNegative holeNegative :: after)), valid := validTarget }

                                          Commute one completed boundary loop across an arbitrary finite block interval.

                                          theorem LeanEval.Topology.ClassificationOfSurfaces.FiniteCyclicPresentation.WordReduction.Pairing.TerminalNormalization.exists_sortBoundariesInContext {n : } (before blocks after : List (CompletedBlock n)) (hnames : (CompletedBlock.sequenceNames (before ++ blocks ++ after)).Nodup) (validSource : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ blocks ++ after))).IsSurfaceValid) :
                                          ∃ (validTarget : (Dyck.oneFace (CompletedBlock.sequenceWord (before ++ boundariesLast blocks ++ after))).IsSurfaceValid), NormalizationEquivalent { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ blocks ++ after)), valid := validSource } { presentation := Dyck.oneFace (CompletedBlock.sequenceWord (before ++ boundariesLast blocks ++ after)), valid := validTarget }

                                          Stably partition every completed boundary loop behind all closed-surface blocks, in arbitrary cyclic context.

                                          The stable boundary partition as another completed terminal word.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            Handle conversion preserves the exact normal form selected by the original nonorientable completed word.

                                            The completed-block terminal seam: stable-sort boundary blocks, convert all handles when a crosscap is present, normalize every edge orientation, and relabel positionally to the single canonical finite-cyclic presentation selected by TerminalCompletedWord.normalForm.

                                            Normalize any valid connected finite-cyclic surface presentation to the one canonical presentation selected by an admissible NormalForm.

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For

                                              Universal Gallier--Xu normalization theorem at the faithful polygonal-realization interface: every surface-valid connected finite-cyclic presentation is polygonally equivalent to the existing canonical presentation of an Eval-admissible normal form.