Documentation

CslibFrontier.Computability.Complexity.Problems.Graph.RotationSystem.Recognition.Parity

Finite frozen-edge parity queries #

Each listed edge is replaced by three indexed segments through two fresh subdivision vertices. A completely prescribed original vertex freezes every incident first/last segment; the middle segments remain movable. The reference order lists each center followed by its selected leaves in reverse clockwise order, then the remaining subdivision points. Crossing bits use strict endpoint interleaving in that order. Independent unordered segment pairs contribute sparse XOR rows, with all frozen-edge move variables omitted.

This is a finite specialization of the equations in [Sch13], Sections 5.3–5.4, printed pp. 399–401. row_holds_iff and query_eq_true_iff prove their literal Boolean meaning using the existing native XOR solver. They assert no geometric or numerical feasibility criterion. The proposed full-rotation application of [FKP17], Theorem 1, p. 2, and the necessary drawing/parity bridges remain separate mathematical obligations.

Main definitions #

@[reducible, inline]

A segment retains its two endpoints and whether edge/vertex moves of this edge are frozen.

Instances For
    @[reducible, inline]

    The ordered endpoint pair of a subdivision segment.

    Instances For
      @[reducible, inline]

      The source vertex of a subdivision segment.

      Instances For
        @[reducible, inline]

        The target vertex of a subdivision segment.

        Instances For
          @[reducible, inline]

          Whether edge/vertex moves of this subdivision segment are frozen.

          Instances For
            @[reducible, inline]

            Two binary endpoints, framed together, then the frozen bit.

            Instances For

              The total subdivided vertex count; only actual list lengths fund this unary count.

              Instances For

                Replace edge e=(u,v) by u--a_e--b_e--v, retaining all occurrence indices. A fixed endpoint freezes its entire first/last segment. Even loops and parallel edges get distinct fresh points.

                Instances For

                  Existing listed graph underlying the twice subdivision.

                  Instances For

                    Center blocks with leaves in reverse prescribed clockwise order. A binary dart index d names precisely subdivision point n+d, including the two separate ends of an original loop.

                    Instances For

                      Append subdivision points not already selected into a center block.

                      Instances For

                        Finite algebraic frame. The count is unary; endpoint labels and reference ranks are binary.

                        • vertexCount : ℕ

                          Declared number of vertices, used as the move-label stride.

                        • segments : List Segment

                          Segment records, including the frozen flags.

                        • order : List ℕ

                          Reference vertex order.

                        Instances For
                          theorem Cslib.Complexity.Graph.RotationRecognition.encFrame_order_budget {γ✝ : Type} {encIn✝ : γ✝ ↪ List Bool} {S✝ : γ✝ → ℕ} {g✝ : γ✝ → Frame} :
                          theorem Cslib.Complexity.Graph.RotationRecognition.encFrame_mk_budget {γ : Type} {encIn : γ ↪ List Bool} {budget x0 : γ → ℕ} {x1 : γ → List ((ℕ × ℕ) × Bool)} {x2 : γ → List ℕ} (h0 : Turing.MultiTapeTM.ComputableInSpace x0 encIn Turing.MultiTapeTM.encUnary budget) (h1 : Turing.MultiTapeTM.ComputableInSpace x1 encIn (Turing.MultiTapeTM.encList encSegment) budget) (h2 : Turing.MultiTapeTM.ComputableInSpace x2 encIn (Turing.MultiTapeTM.encList Turing.MultiTapeTM.encNat) budget) :
                          Turing.MultiTapeTM.ComputableInSpace (fun (x : γ) => { vertexCount := x0 x, segments := x1 x, order := x2 x }) encIn encFrame budget
                          @[reducible, inline]

                          The tuple of the fields of encFrame.

                          Instances For
                            theorem Cslib.Complexity.Graph.RotationRecognition.encFrame_vertexCount_budget {γ✝ : Type} {encIn✝ : γ✝ ↪ List Bool} {S✝ : γ✝ → ℕ} {g✝ : γ✝ → Frame} :

                            Unary stride, then framed binary segments and framed binary reference order.

                            Instances For
                              theorem Cslib.Complexity.Graph.RotationRecognition.encFrame_segments_budget {γ✝ : Type} {encIn✝ : γ✝ ↪ List Bool} {S✝ : γ✝ → ℕ} {g✝ : γ✝ → Frame} :
                              theorem Cslib.Complexity.Graph.RotationRecognition.encFrame_mk_inO {γ : Type} {encIn : γ ↪ List Bool} {x0 T0 S0 : γ → ℕ} {x1 : γ → List ((ℕ × ℕ) × Bool)} {T1 S1 : γ → ℕ} {x2 : γ → List ℕ} {T2 S2 : γ → ℕ} (h0 : Turing.MultiTapeTM.ComputableInO x0 encIn Turing.MultiTapeTM.encUnary T0 S0) (h1 : Turing.MultiTapeTM.ComputableInO x1 encIn (Turing.MultiTapeTM.encList encSegment) T1 S1) (h2 : Turing.MultiTapeTM.ComputableInO x2 encIn (Turing.MultiTapeTM.encList Turing.MultiTapeTM.encNat) T2 S2) :
                              Turing.MultiTapeTM.ComputableInO (fun (x : γ) => { vertexCount := x0 x, segments := x1 x, order := x2 x }) encIn encFrame (fun (x : γ) => T0 x + (T1 x + T2 x)) fun (x : γ) => S0 x + (S1 x + S2 x)

                              Concrete frame compiled from the raw existing graph and fixed orders.

                              Instances For

                                Independent endpoints; no equation is emitted for a pair sharing a vertex.

                                Instances For

                                  Strict interval membership of the reference rank of a vertex.

                                  Instances For

                                    Reference crossing parity, computed without coordinates.

                                    Instances For

                                      Binary label of the move of indexed segment e past vertex v.

                                      Instances For

                                        The two endpoint move labels of an unfrozen segment, or no labels for a frozen segment.

                                        Instances For

                                          Literal sparse row for two indexed segment records. No label deduplication is performed.

                                          Instances For

                                            Every unordered independent pair appears once, in increasing first segment index and then increasing second index. All scans traverse actual segment lists, never move-label intervals.

                                            Instances For

                                              The concrete sparse system on the twice-subdivided existing graph.

                                              Instances For

                                                Ordinary native XOR solving, after raw input validation. This is an algebraic query; no result identifying it with Feasible is assumed or asserted.

                                                Instances For

                                                  A frozen segment contributes zero regardless of the assignment; an unfrozen segment reads its actual binary move label.

                                                  Instances For
                                                    theorem Cslib.Complexity.Graph.RotationRecognition.row_holds_iff (F : Frame) (assignment : ℕ → Bool) (e f : Segment × ℕ) :
                                                    (row F e f).Holds assignment ↔ moveValue F assignment e f.1.source + moveValue F assignment e f.1.target + (moveValue F assignment f e.1.source + moveValue F assignment f e.1.target) = crossing F.order e.1.endpoints f.1.endpoints

                                                    A sparse row states exactly the four endpoint moves with the frozen zeros retained.

                                                    theorem Cslib.Complexity.Graph.RotationRecognition.holds_compileFrame_iff (F : Frame) (assignment : ℕ → Bool) :
                                                    Logic.PL.AffineSystem.Holds (compileFrame F) assignment ↔ ∀ e ∈ F.segments.zipIdx, ∀ f ∈ F.segments.zipIdx, f.2 < e.2 → independent e.1.endpoints f.1.endpoints = true → (row F e f).Holds assignment

                                                    Exact row enumeration, including the strict unordered-pair scan and independence guard.

                                                    The actual native query accepts exactly valid inputs whose concrete frozen parity rows have a Boolean assignment. This uses the implemented XOR solver without a hypothesis.

                                                    @[simp]

                                                    There are exactly three listed segments per original edge occurrence.

                                                    @[simp]

                                                    Twice subdivision has the advertised dense vertex count, including isolates.

                                                    Each independent-edge row contains at most four binary move labels.

                                                    The number of rows is at most the square of the actual segment-list length.

                                                    theorem Cslib.Complexity.Graph.RotationRecognition.moveLabel_lt {n m e v : ℕ} (he : e < m) (hv : v < n) :
                                                    moveLabel n e v < m * n

                                                    A bounded endpoint produces a move label below the full rectangular move budget.