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 common bitvector subexpressions.
def Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache (expr : BVLogicalExpr) (aig : Sat.AIG BVBit) (cache : BVExpr.Cache aig) :
Return aig
Equations
- expr.bitblastWithCache aig cache = Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache.go aig expr cache
Instances For
def Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache.go (aig : Sat.AIG BVBit) (expr : BVLogicalExpr) (cache : BVExpr.Cache aig) :
Return aig
Equations
- One or more equations did not get rendered due to their size.
- Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache.go aig (Std.Tactic.BVDecide.BoolExpr.literal var) cache = Std.Tactic.BVDecide.BVPred.bitblast aig { val := var, cache := cache }
- Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache.go aig (Std.Tactic.BVDecide.BoolExpr.const val) cache = { result := ⟨{ aig := aig, ref := aig.mkConstCached val }, ⋯⟩, cache := cache }
Instances For
Turn a BoolExpr into an Entrypoint.
Equations
Instances For
theorem Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache.go_le_size (aig : Sat.AIG BVBit) (expr : BVLogicalExpr) (cache : BVExpr.Cache aig) :
theorem Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache.go_isPrefix_aig {expr : BVLogicalExpr} {aig : Sat.AIG BVBit} (cache : BVExpr.Cache aig) :
theorem Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache.go_denote_mem_prefix {assign : BVBit → Bool} {expr : BVLogicalExpr} {start : Nat} {inv : Bool} (aig : Sat.AIG BVBit) (cache : BVExpr.Cache aig) (hstart : start < aig.decls.size) :
theorem Std.Tactic.BVDecide.BVLogicalExpr.bitblastWithCache_isPrefix_aig {expr : BVLogicalExpr} {aig : Sat.AIG BVBit} {cache : BVExpr.Cache aig} :
Sat.AIG.IsPrefix aig.decls (expr.bitblastWithCache aig cache).result.val.aig.decls