Visualize Bit-Vector operations with symbolic width k.
Elimination Rule
This operator is eliminated by rewriting it into Addition and Bitwise AND.
ร
Algorithm 1: Function ADM
Recursively constructs admissibility constraints.
Match Expression e
Constraint
x (PBV variable)
Bw(e) > 0
z (Int constant)
True (โค)
to-pbv(k, t)
Bw(e) > 0 โง ADM(t)
|t|
ADM(t)
t[i:j]
0 โค j โค i < Bw(t) โง ADM(t)
ext_z(n, t)
n โฅ 0 โง ADM(t)
ext_s(n, t)
n โฅ 0 โง ADM(t)
t1 โ t2
ADM(t1) โง ADM(t2)
itePBV(t1, t2, t3)
Bw(t2) โ Bw(t3) โง โ ADM(ti)
Other Binary Ops (x โ y)
Bw(t1) โ Bw(t2) โง ADM(t1) โง ADM(t2)
Algorithm 2: Function Bw
Computes the bit-width of PBV-terms.
Match Expression e
Width
x (PBV variable)
|x|
to-pbv(k, t)
k
t[i:j]
i - j + 1
ext_z(n, t)
Bw(t) + n
ext_s(n, t)
Bw(t) + n
t1 โ t2
Bw(t1) + Bw(t2)
itePBV(t1, t2, t3)
Bw(t2)
Other Ops (โ(t1...tn))
Bw(t1)
ร
Algorithm 3: Translation Function TRANS
Translates PBV formulas to Integer Arithmetic.
function TRANS(ฯ) return CONV(ฯ) โง RANGE(ฯ) โง ADM(ฯ)
Function CONV (Conversion Table)
PBV Term
Integer Arithmetic (IA)
ร
Algorithm 4: Function RANGE
Recursively constructs size and range constraints.
function RANGE(e) match e:
x (PBV variable)
โ 0 โค ฯ(x) < pow2(ฮบ(x))
|t|
โ e โ Bw(t) โง RANGE(t)
z (Int constant)
โ โค
โข(t1...tn)
โ โi=1n RANGE(ti)
ร
Parametric Bit-Vector Theory Signatures
Table 1: Signature ฮฃIA (Integer Arithmetic)
Symbol
SMT-LIB Syntax
Arity
โInt, โInt
=, distinct
Int ร Int โ Bool
0, 1, 2, ...
0, 1, 2, ...
Int
+, -, ยท, div, mod
+, -, *, div, mod
Int ร Int โ Int
โค, โฅ, <, >
<=, >=, <, >
Int ร Int โ Bool
Table 2: Signatures ฮฃPBV and ฮฃIA(pow2, &โ)
ฮฃPBV = ฮฃIA + the following operators
Symbol
SMT-LIB Syntax
Arity
โPBV, โPBV
=, distinct
PBV ร PBV โ Bool
<u, >u, <s, >s
bvult, bvugt, bvslt, bvsgt
PBV ร PBV โ Bool
โคu, โฅu, โคs, โฅs
bvule, bvuge, bvsle, bvsge
PBV ร PBV โ Bool
~, -B
bvnot, bvneg
PBV โ PBV
&, |, โ
bvand, bvor, bvxor
PBV ร PBV โ PBV
<<, >>, >>a
bvshl, bvlshr, bvashr
PBV ร PBV โ PBV
+B, -B
bvadd, bvsub
PBV ร PBV โ PBV
ยทB, modB, divB
bvmul, bvurem, bvudiv
PBV ร PBV โ PBV
_[_ : _]
pextract
PBV ร Int ร Int โ PBV
โ
concat
PBV ร PBV โ PBV
extz
pzero_extend
Int ร PBV โ PBV
exts
psign_extend
Int ร PBV โ PBV
|_|
bvsize
PBV โ Int
to-pbv
int_to_pbv
Int ร Int โ PBV
ฮฃIA(pow2, &โ) = ฮฃIA + the following operators
Symbol
SMT-LIB Syntax
Arity
&โ
piand
Int ร Int ร Int โ Int
pow2
pow2
Int โ Int
ร
Performance Evaluation
Main Results (Table 6)
Configurations (Table 5)
Benchmark
#
BASELINE
EAGER
PBV (Ours)
VBS
alive
200
71
93
107
124
ic
180
43
58
77
81
rewrite
2006
658
1221
1331
1382
syrew
1500
558
720
912
951
lemmas
70
12
14
23
23
icfb
46
1
9
12
12
mut
9441
669
1084
4863
4915
TOTAL
13443
2012
3199
7325
7488
sat
0
0
3641
3641
unsat
2012
3199
3684
3847
unique
24
57
4222
4303
time [s]
709k
634k
375k
355k
Key Insights:
PBV Dominance: Configuration PBV solves 7,325 instances, more than 3.5x the Baseline (2,012) and 2x the Eager approach (3,199).
Speed: On common instances, PBV is more than 18x faster than the Eager approach (375k seconds vs 634k seconds).
Unsat Performance: PBV excels at finding UNSAT results (3,684 vs 2,012 for Baseline).
Satisfiability: Baseline and Eager solve 0 satisfiable instances due to quantifier overhead. PBV solves 3,641.
Feature
BASELINE
EAGER
PBV
Target Theory
TIA(pow2, &โ, |โ, โโ)
TIA(pow2, &โ)
TIA(pow2โ , &โ โ)
Multiple Bit-widths
โ
โ
โ
Lazy pow2
โ
โ
โ
Lazy &
โ
โ
โ
|-elimination
โ
โ
โ
โ-elimination
โ
โ
โ
>> without mod
โ
โ
โ
New lemmas for &
โ
โ
โ
New lemmas for pow2
โ
โ
โ
No redundant axioms
โ
โ
โ
RWB
โ
โ
โ
mod-reduction
โ
โ
โ
Note: PBV uses a lazy, quantifier-free translation which allows it to reason about multiple bit-widths and satisfiable instances much more effectively.
ร
System Architecture
Click any component to see its internal logic (tables/algorithms).
ฯ0
โ
RWB
ฯ1 โ
TRANS
smt-switch
โ ฯ2 โ
SOLVEโ
pow2-solver
&โ-solver
cvc5
PBV Formulaxโy
Integer Translationx ยท 2k + y
Range Constraints
Admissibility Constraints
โ
Left Click: Rotate | Right Click: Pan | Scroll: Zoom