Documentation

Complexitylib.Circuits.Encoding.Formula.Batch.Internal

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_literal_internal (wire : ) (value : Bool) (assignment : Bool) :
eval assignment (literal wire value) = decide (assignment wire = value)
theorem Complexity.BoolFormula.eval_conjs_internal (formulas : List BoolFormula) (assignment : Bool) :
eval assignment (conjs formulas) = formulas.all fun (formula : BoolFormula) => eval assignment formula
theorem Complexity.BoolFormula.eval_disjs_internal (formulas : List BoolFormula) (assignment : Bool) :
eval assignment (disjs formulas) = formulas.any fun (formula : BoolFormula) => eval assignment formula
theorem Complexity.BoolFormula.size_conjs_internal (formulas : List BoolFormula) :
(conjs formulas).size = 1 + (List.map (fun (formula : BoolFormula) => formula.size + 1) formulas).sum
theorem Complexity.BoolFormula.size_disjs_internal (formulas : List BoolFormula) :
(disjs formulas).size = 1 + (List.map (fun (formula : BoolFormula) => formula.size + 1) formulas).sum

Structural accounting #

theorem Complexity.BoolFormula.length_compileRawBatch_internal (available : ) (formulas : List BoolFormula) :
List.length (compileRawBatch available formulas) = (List.map size formulas).sum + formulas.length

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 : formulaformulas, iformula.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 : formulaformulas, iformula.vars, i < available) :