Documentation

Complexitylib.Circuits.Unrolling.Trace.Internal.Evaluation

Evaluation of tiled bounded-trace circuits #

This internal module proves a concrete-array invariant for every canonical prefix of a tiled trace. The invariant starts with the initialization fragment, appends one array-native transition fragment at a time, and keeps the current packed block synchronized with the corresponding NTM trace prefix. The complete-trace theorem is the horizon specialization.

theorem Complexity.CircuitUnrolling.evalAux?_prefixTraceBuild_internal {k : } (tm : NTM k) (T n available : ) [NeZero available] (layout : InputWires T n available) (x : BitString n) (choices : Fin TBool) (wires : Array Bool) (hsize : wires.size = available) (hdata : ∀ (j : Fin n), wires[(layout.data j)]? = some (x j)) (hchoices : ∀ (j : Fin T), wires[(layout.choice j)]? = some (choices j)) (i : ) (hi : i T) :
∃ (result : Array Bool), (prefixTraceBuild tm T n available i layout).circuit.evalAux? wires = some result result.size = (prefixTraceBuild tm T n available i layout).available (∀ j < wires.size, result[j]? = wires[j]?) EncodesConfig tm T (prefixTraceBuild tm T n available i layout).configBase result (tm.trace i (fun (j : Fin i) => choices j, ) (tm.initCfg x.toList))

Evaluating the first i layers succeeds and encodes the corresponding initialized trace prefix.

theorem Complexity.CircuitUnrolling.evalAux?_traceFragment_internal {k : } (tm : NTM k) (T n available : ) [NeZero available] (layout : InputWires T n available) (x : BitString n) (choices : Fin TBool) (wires : Array Bool) (hsize : wires.size = available) (hdata : ∀ (j : Fin n), wires[(layout.data j)]? = some (x j)) (hchoices : ∀ (j : Fin T), wires[(layout.choice j)]? = some (choices j)) :
∃ (result : Array Bool), (traceFragment tm T n available layout).evalAux? wires = some result result.size = wires.size + traceFragmentSize tm T n available layout (∀ j < wires.size, result[j]? = wires[j]?) EncodesConfig tm T (traceOutputBase tm T n available layout) result (tm.trace T choices (tm.initCfg x.toList))

Evaluating the complete tiled trace appends its exact gate count, preserves the primary prefix, and encodes the final bounded NTM trace.