Circuits for first targets and halting #
Let c compute f on n-bit states and let a circuit p recognize a target set. Stopping at
targets is computed by a circuit of size c.size + p.size + 4 * n (absorbing_circuit), and
2 ^ n steps of it reach the first target of every orbit that has one
(FunctionalGraph.absorb_iterate_card). With the fixed-power bound this gives the first target
state (first_target_state) and whether a target is ever reached (target_reachability). When
the halting states are fixed by f itself, 2 ^ n steps of f reach the halting configuration
of every halting computation, and no recognizer is charged (halting_computation).
The first visit to a target is the transient depth of the map that stops at targets
(FunctionalGraph.first_target_depth), so the depth circuits give a reachability flag and the
exact first target time (first_target_time, first_target_time_optimized), and the first
halting time (halting_time).
The circuits are native De Morgan circuits: every NOT, AND and OR gate and every constant is charged, while wiring and fanout are free. They exist for each parameter choice; nothing here bounds the time to construct them. For halting computations the state holds every persistent bit of the computation, including its input and workspace.
Main results #
Cslib.Circuits.Boolean.Iteration.absorbing_circuit: stopping at recognized targets.Cslib.Circuits.Boolean.Iteration.first_target_state,Cslib.Circuits.Boolean.Iteration.target_reachability: first targets and reachability.Cslib.Circuits.Boolean.Iteration.halting_computation: final configurations.Cslib.Circuits.Boolean.Iteration.first_target_time,Cslib.Circuits.Boolean.Iteration.first_target_time_optimized: first target times.Cslib.Circuits.Boolean.Iteration.halting_time: first halting times.
References #
- Adapted from lean/Proofs/{Targets,TargetTimes}.lean in
S. Schlesinger,
Square-root circuit bounds for iterated functions, whose
first-time and halting-time bounds have the constants
3120000and3000000.
First target states. For every 0 < L ≤ 2 ^ n, some circuit of size at most
40000 * powerBudget n (c.size + p.size + 4 * n) (2 ^ n) L returns a state accepted by p
exactly when the orbit of its input ever reaches one, and then returns the first such state,
reached before time 2 ^ n.
Target reachability. For every 0 < L ≤ 2 ^ n, some circuit of size at most
40000 * powerBudget n (c.size + p.size + 4 * n) (2 ^ n) L + p.size decides whether the orbit
of its input ever reaches a state accepted by p.
Halting computations. If c fixes every halting state and the orbit of every initial
state halts, then for every 0 < L ≤ 2 ^ n some circuit of size at most
40000 * powerBudget n c.size (2 ^ n) L returns the halting state of every initial state, first
reached before time 2 ^ n. No circuit recognizing halting states is needed.
First target times. For every 0 < L ≤ 2 ^ n, some circuit of size at most
90000 * powerBudget n (c.size + p.size + 4 * n) (2 ^ n) L + p.size returns a flag, set exactly
when the orbit of its input reaches a state accepted by p, followed by n + 2 bits. When the
flag is set they are the first time a target is visited, which is below 2 ^ n; otherwise
nothing is claimed about them.
Square-root first target times. Some circuit of size at most
270000 * optimizedBudget n (c.size + p.size + 4 * n) (2 ^ n) + p.size returns the
reachability flag and, when it is set, the first target time, as in first_target_time.
Halting times. If c fixes every halting state and the orbit of every initial state
halts, some circuit of size at most 150000 * optimizedBudget n c.size (2 ^ n) returns, in
n + 2 bits, the first halting time of every initial state, which is below 2 ^ n. No circuit
recognizing halting states is needed.