Internals for batch formula compilation #
This module proves the structural, topological, and iterative-evaluator laws
for BoolFormula.compileRawBatch. Public statements are re-exported by
Complexitylib.Circuits.Encoding.Formula.Batch.
Formula-list combinators #
theorem
Complexity.BoolFormula.eval_conjs_internal
(formulas : List BoolFormula)
(assignment : ℕ → Bool)
:
theorem
Complexity.BoolFormula.eval_disjs_internal
(formulas : List BoolFormula)
(assignment : ℕ → Bool)
:
Structural accounting #
theorem
Complexity.BoolFormula.length_compileRawOutputs_circuit_internal
(available : ℕ)
(formulas : List BoolFormula)
:
theorem
Complexity.BoolFormula.length_compileRawOutputs_outputs_internal
(available : ℕ)
(formulas : List BoolFormula)
:
theorem
Complexity.BoolFormula.length_compileRawBatch_internal
(available : ℕ)
(formulas : List BoolFormula)
:
Sequential formula evaluation #
Contiguous output packing #
Batch correctness #
theorem
Complexity.BoolFormula.evalAux?_compileRawBatch_internal
(available : ℕ)
[NeZero available]
(formulas : List BoolFormula)
(assignment : ℕ → Bool)
(wires : Array Bool)
(hsize : wires.size = available)
(hinput : ∀ i < available, wires[i]? = some (assignment i))
(hvars : ∀ formula ∈ formulas, ∀ i ∈ formula.vars, i < available)
:
∃ (result : Array Bool),
(compileRawBatch available formulas).evalAux? wires = some result ∧ result.size = wires.size + (List.map size formulas).sum + formulas.length ∧ (∀ i < wires.size, result[i]? = wires[i]?) ∧ ∀ (j : Fin formulas.length),
result[rawBatchOutputBase available formulas + ↑j]? = some (eval assignment (formulas.get j))
theorem
Complexity.BoolFormula.topologicallyWellFormed_compileRawBatch_internal
(available : ℕ)
[NeZero available]
(formulas : List BoolFormula)
(hvars : ∀ formula ∈ formulas, ∀ i ∈ formula.vars, i < available)
:
CircuitCode.RawCircuit.TopologicallyWellFormed available (compileRawBatch available formulas)