Documentation

Std.Tactic.BVDecide.Bitblast.BVExpr.Circuit.Lemmas.Var

This module contains the verification of the bitblaster for symbolic BitVec values from Impl.Var.

theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastVar.go_get_aux {w : Nat} (aig : Sat.AIG BVBit) (a curr : Nat) (hcurr : curr ≤ w) (s : aig.RefVec curr) (idx : Nat) (hidx : idx < curr) (hfoo : aig.decls.size ≤ (go aig w a curr s hcurr).aig.decls.size) :
(go aig w a curr s hcurr).vec.get idx ⋯ = (s.get idx hidx).cast hfoo
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastVar.go_get {w : Nat} (aig : Sat.AIG BVBit) (a curr : Nat) (hcurr : curr ≤ w) (s : aig.RefVec curr) (idx : Nat) (hidx : idx < curr) :
(go aig w a curr s hcurr).vec.get idx ⋯ = (s.get idx hidx).cast ⋯
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastVar.go_denote_mem_prefix {assign : BVBit → Bool} {w : Nat} {inv : Bool} (aig : Sat.AIG BVBit) (idx : Nat) (hidx : idx ≤ w) (s : aig.RefVec idx) (a start : Nat) (hstart : start < aig.decls.size) :
⟦assign, { aig := (go aig w a idx s hidx).aig, ref := { gate := start, invert := inv, hgate := ⋯ } }⟧ = ⟦assign, { aig := aig, ref := { gate := start, invert := inv, hgate := hstart } }⟧
theorem Std.Tactic.BVDecide.BVExpr.bitblast.blastVar.go_denote_eq {w : Nat} (aig : Sat.AIG BVBit) (a : Nat) (assign : Assignment) (curr : Nat) (hcurr : curr ≤ w) (s : aig.RefVec curr) (idx : Nat) (hidx1 : idx < w) :
curr ≤ idx → ⟦assign.toAIGAssignment, { aig := (go aig w a curr s hcurr).aig, ref := (go aig w a curr s hcurr).vec.get idx hidx1 }⟧ = (eval assign (var a)).getLsbD idx
@[simp]
theorem Std.Tactic.BVDecide.BVExpr.bitblast.denote_blastVar {w : Nat} (aig : Sat.AIG BVBit) (var : BVVar w) (assign : Assignment) (idx : Nat) (hidx : idx < w) :
⟦assign.toAIGAssignment, { aig := (blastVar aig var).aig, ref := (blastVar aig var).vec.get idx hidx }⟧ = (eval assign (BVExpr.var var.ident)).getLsbD idx