Documentation

DescriptiveComplexity.Problems.CodeHalt.Arith

The arithmetic a certificate for CODEHALT has to speak #

Everything the ∃SO[new] certificate of DescriptiveComplexity.CODEHALT needs to know about Nat.Partrec.Code, stated over ℕ alone – no logic, no structures. Three groups:

Codes as numbers #

Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph

The successor rule of Nat.pair #

(a, b) is the pair enumerated just after (a', b'). The four cases are: move up inside a shell, close a shell, move along a shell, and open the next one.

Equations
Instances For
    Dependency graph
    theorem DescriptiveComplexity.CodeHalt.pair_next {a' b' a b : ℕ} (h : NextP a' b' a b) :
    Nat.pair a b = Nat.pair a' b' + 1
    Dependency graph
    theorem DescriptiveComplexity.CodeHalt.exists_next (a' b' : ℕ) :
    ∃ (a : ℕ) (b : ℕ), NextP a' b' a b
    Dependency graph

    Unfolding bounded evaluation #

    theorem DescriptiveComplexity.CodeHalt.evaln_rfind'_spec (k : ℕ) {cf : Nat.Partrec.Code} {a m v : ℕ} :
    v ∈ Nat.Partrec.Code.evaln k cf.rfind' (Nat.pair a m) → m ≤ v ∧ 0 ∈ Nat.Partrec.Code.evaln k cf (Nat.pair a v) ∧ ∀ (w : ℕ), m ≤ w → w < v → ∃ (u : ℕ), u ≠ 0 ∧ u ∈ Nat.Partrec.Code.evaln k cf (Nat.pair a w)

    The search an rfind' performs, read as a bounded universal statement. A bounded evaluation of rfind' cf on ⟨a, m⟩ returns some v ≥ m such that cf returns 0 at ⟨a, v⟩ and something nonzero at every ⟨a, w⟩ with m ≤ w < v – and all of that within the same budget, which is what lets a first-order kernel state the search without a chain.

    Dependency graph

    Introduction rules for evaluation #

    One per constructor: what has to hold of the arguments for a value to be in the evaluation of a code. They are what the soundness of a certificate discharges its case analysis with.

    A bound on the values a bounded evaluation produces #