Documentation

Std.Tactic.BVDecide.Bitblast.BVExpr.Basic

This module contains the definition of the BitVec fragment that bv_decide internally operates on as BVLogicalExpr. The preprocessing steps of bv_decide reduce all supported BitVec operations to the ones provided in this file. For verification purposes BVLogicalExpr.Sat and BVLogicalExpr.Unsat are provided.

The semantics for BVBinOp.

Equations
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]

All supported unary operators on BVExpr.

  • not : Std.Tactic.BVDecide.BVUnOp

    Bitwise not.

  • shiftLeftConst (n : Nat) : Std.Tactic.BVDecide.BVUnOp

    Shifting left by a constant value.

    This operation has a dedicated constant representation as shiftLeft can take Nat as a shift amount. We can obviously not bitblast a Nat but still want to support the case where the user shifts by a constant Nat value.

  • shiftRightConst (n : Nat) : Std.Tactic.BVDecide.BVUnOp

    Shifting right by a constant value.

    This operation has a dedicated constant representation as shiftRight can take Nat as a shift amount. We can obviously not bitblast a Nat but still want to support the case where the user shifts by a constant Nat value.

  • rotateLeft (n : Nat) : Std.Tactic.BVDecide.BVUnOp

    Rotating left by a constant value.

  • rotateRight (n : Nat) : Std.Tactic.BVDecide.BVUnOp

    Rotating right by a constant value.

  • arithShiftRightConst (n : Nat) : Std.Tactic.BVDecide.BVUnOp

    Arithmetic shift right by a constant value.

    This operation has a dedicated constant representation as shiftRight can take Nat as a shift amount. We can obviously not bitblast a Nat but still want to support the case where the user shifts by a constant Nat value.

Instances For

The semantics for BVUnOp.

Equations
@[simp]
theorem Std.Tactic.BVDecide.BVUnOp.eval_rotateLeft {n w : Nat} :
(Std.Tactic.BVDecide.BVUnOp.rotateLeft n).eval = fun (x : BitVec w) => x.rotateLeft n
@[simp]
theorem Std.Tactic.BVDecide.BVUnOp.eval_rotateRight {n w : Nat} :
(Std.Tactic.BVDecide.BVUnOp.rotateRight n).eval = fun (x : BitVec w) => x.rotateRight n

All supported expressions involving BitVec and operations on them.

Instances For
Equations
Equations
  • Std.Tactic.BVDecide.BVExpr.instToString = { toString := Std.Tactic.BVDecide.BVExpr.toString }

Pack a BitVec with its width into a single parameter-less structure.

The semantics for BVExpr.

Equations
@[simp]

Pack two BVExpr of equivalent width into one parameter-less structure.

Equations
@[reducible, inline]

Boolean substructure of problems involving predicates on BitVec as atoms.

Equations