Documentation

Std.Tactic.BVDecide.Bitblast.BVExpr.Circuit.Impl.Substructure

This module contains the logic to turn a BVLogicalExpr into an AIG with maximum subterm sharing, through the use of a cache that re-uses sub-circuits if possible. Additionally a term level cache is used to prevent rerunning bitblasting on commong bitvector subexpressions.

Equations
theorem Std.Tactic.BVDecide.BVLogicalExpr.bitblast.go_decl_eq {expr : BVLogicalExpr} (idx : Nat) (aig : Sat.AIG BVBit) (cache : BVExpr.Cache aig) (h : idx < aig.decls.size) (hbounds : idx < (go aig expr cache).result.val.aig.decls.size) :
(go aig expr cache).result.val.aig.decls[idx] = aig.decls[idx]
theorem Std.Tactic.BVDecide.BVLogicalExpr.bitblast.go_denote_mem_prefix {assign : BVBitBool} {expr : BVLogicalExpr} {start : Nat} {inv : Bool} (aig : Sat.AIG BVBit) (cache : BVExpr.Cache aig) (hstart : start < aig.decls.size) :
assign, { aig := (go aig expr cache).result.val.aig, ref := { gate := start, invert := inv, hgate := } } = assign, { aig := aig, ref := { gate := start, invert := inv, hgate := hstart } }