Documentation

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

Query budgets for contiguous recovery #

The bookkeeping charges the entire remaining-candidate list whenever find? is invoked, including its unvisited suffix after the first successful query. It therefore bounds every actual split-query call. It is proof bookkeeping, not a trace stored by the native program. Failure is sticky and completed blocks issue no further queries.

Appending one unused candidate removes precisely that dart from the remaining list.

Upper charge for extension queries: one full remaining-list scan per nonempty search. The only carried simulated state is the same optional block as in advance.

Instances For

    Twice the charged queries is bounded by the triangular potential of remaining candidates, without a feasibility, validity or successful-search premise.

    Extension-query charge for the actual starting singleton and actual fiber iteration count.

    Instances For

      A degree-d free vertex charges at most d(d-1)/2 split queries.

      Charged split queries in the actual outer recovery traversal. Completed fixed vertices and failed states issue no more calls. Each split graph is computed and discarded by advance.

      Instances For

        Degree potentials add across the outer fold because successful steps keep the original listed graph. This is independent of all algebraic/topological completeness obligations.

        Distinct listed vertices own disjoint dart fibers, so their total degree is at most 2m, including raw graphs with undeclared endpoints, loops and parallel listed edges.

        theorem Cslib.Complexity.Graph.RotationRecognition.sum_fiber_lengths_le (G : Graph) (vertices : List ℕ) (hn : vertices.Nodup) :
        (List.map (fun (v : ℕ) => (fiber G v).length) vertices).sum ≤ 2 * G.edges.length

        Distinct listed vertices have total degree at most 2m, including on raw listed graphs.

        The initial query plus all charged extension scans is at most 1+2m² on general all-free graphs, and hence also on any mixture of complete fixed/free vertices.

        theorem Cslib.Complexity.Graph.RotationRecognition.twice_recoveryWork_preserves_le (vertices : List ℕ) (original current : FixedRotationInput) (hg : current.graph = original.graph) (hp : PreservesOrders original current) :
        2 * recoveryWork vertices (some current) ≤ (List.map (fun (v : ℕ) => if (original.orders.getD v none).isSome = true then 0 else (fiber original.graph v).length * ((fiber original.graph v).length - 1)) vertices).sum

        Previously fixed vertices charge zero even while other complete orders are recovered.

        Every selected white incidence dart has an even binary index, retaining its occurrence.

        Original CSP recovery charges at most 1+m² queries. Constraint-side words are already complete, so only white vertices contribute, with one white end per actual occurrence.