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.
Turn a BoolExpr
into an Entrypoint
.
def
Std.Tactic.BVDecide.BVLogicalExpr.bitblast.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.bitblast.go aig (Std.Tactic.BVDecide.BoolExpr.literal var) cache = Std.Tactic.BVDecide.BVPred.bitblast aig { val := var, cache := cache }
- Std.Tactic.BVDecide.BVLogicalExpr.bitblast.go aig (Std.Tactic.BVDecide.BoolExpr.const val) cache = { result := ⟨aig.mkConstCached val, ⋯⟩, cache := cache.cast ⋯ }
theorem
Std.Tactic.BVDecide.BVLogicalExpr.bitblast.go_le_size
(aig : Sat.AIG BVBit)
(expr : BVLogicalExpr)
(cache : BVExpr.Cache aig)
:
theorem
Std.Tactic.BVDecide.BVLogicalExpr.bitblast.go_isPrefix_aig
{expr : BVLogicalExpr}
{aig : Sat.AIG BVBit}
(cache : BVExpr.Cache aig)
:
theorem
Std.Tactic.BVDecide.BVLogicalExpr.bitblast.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)
: