Skip to content

Commit 123a457

Browse files
Visitor: Add support for integer-bv conversion in the visitor
1 parent 5de5afa commit 123a457

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

src/org/sosy_lab/java_smt/api/FunctionDeclarationKind.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ public enum FunctionDeclarationKind {
9292
/** Identity operation, converts from integers to rationals, also known as {@code to_real}. */
9393
TO_REAL,
9494

95+
/** Convert from integer to bitvector. */
96+
INT_TO_BV,
97+
9598
// Simple bitvector operations
9699

97100
/** Extraction over bitvectors. */
@@ -205,6 +208,12 @@ public enum FunctionDeclarationKind {
205208
/** Cast a signed bitvector to a floating-point number. */
206209
BV_SCASTTO_FP,
207210

211+
/** Cast an unsigned bitvector to an integer number. */
212+
UBV_TO_INT,
213+
214+
/** Cast a signed bitvector to an integer number. */
215+
SBV_TO_INT,
216+
208217
// Simple floating point operations
209218

210219
/** Negation of a floating point. */

src/org/sosy_lab/java_smt/solvers/cvc5/CVC5FormulaCreator.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ private Term normalize(Term operator) {
543543
.put(Kind.LEQ, FunctionDeclarationKind.LTE)
544544
.put(Kind.GT, FunctionDeclarationKind.GT)
545545
.put(Kind.GEQ, FunctionDeclarationKind.GTE)
546+
.put(Kind.INT_TO_BITVECTOR, FunctionDeclarationKind.INT_TO_BV)
546547
// Bitvector theory
547548
.put(Kind.BITVECTOR_ADD, FunctionDeclarationKind.BV_ADD)
548549
.put(Kind.BITVECTOR_SUB, FunctionDeclarationKind.BV_SUB)
@@ -574,9 +575,11 @@ private Term normalize(Term operator) {
574575
.put(Kind.BITVECTOR_LSHR, FunctionDeclarationKind.BV_LSHR)
575576
.put(Kind.BITVECTOR_ROTATE_LEFT, FunctionDeclarationKind.BV_ROTATE_LEFT_BY_INT)
576577
.put(Kind.BITVECTOR_ROTATE_RIGHT, FunctionDeclarationKind.BV_ROTATE_RIGHT_BY_INT)
577-
// Floating-point theory
578578
.put(Kind.TO_INTEGER, FunctionDeclarationKind.FLOOR)
579579
.put(Kind.TO_REAL, FunctionDeclarationKind.TO_REAL)
580+
.put(Kind.BITVECTOR_SBV_TO_INT, FunctionDeclarationKind.SBV_TO_INT)
581+
.put(Kind.BITVECTOR_UBV_TO_INT, FunctionDeclarationKind.UBV_TO_INT)
582+
// Floating-point theory
580583
.put(Kind.FLOATINGPOINT_TO_SBV, FunctionDeclarationKind.FP_CASTTO_SBV)
581584
.put(Kind.FLOATINGPOINT_TO_UBV, FunctionDeclarationKind.FP_CASTTO_UBV)
582585
.put(Kind.FLOATINGPOINT_TO_FP_FROM_FP, FunctionDeclarationKind.FP_CASTTO_FP)

src/org/sosy_lab/java_smt/solvers/mathsat5/Mathsat5FormulaCreator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@
6565
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_FP_TO_SBV;
6666
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_FP_TO_UBV;
6767
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_IFF;
68+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_INT_FROM_SBV;
69+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_INT_FROM_UBV;
70+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_INT_TO_BV;
6871
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_ITE;
6972
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_LEQ;
7073
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.MSAT_TAG_NOT;
@@ -408,6 +411,8 @@ private FunctionDeclarationKind getDeclarationKind(long pF) {
408411
return FunctionDeclarationKind.LTE;
409412
case MSAT_TAG_EQ:
410413
return FunctionDeclarationKind.EQ;
414+
case MSAT_TAG_INT_TO_BV:
415+
return FunctionDeclarationKind.INT_TO_BV;
411416
case MSAT_TAG_ARRAY_READ:
412417
return FunctionDeclarationKind.SELECT;
413418
case MSAT_TAG_ARRAY_WRITE:
@@ -465,6 +470,10 @@ private FunctionDeclarationKind getDeclarationKind(long pF) {
465470
return FunctionDeclarationKind.BV_ROTATE_LEFT_BY_INT;
466471
case MSAT_TAG_BV_ROR:
467472
return FunctionDeclarationKind.BV_ROTATE_RIGHT_BY_INT;
473+
case MSAT_TAG_INT_FROM_UBV:
474+
return FunctionDeclarationKind.UBV_TO_INT;
475+
case MSAT_TAG_INT_FROM_SBV:
476+
return FunctionDeclarationKind.SBV_TO_INT;
468477

469478
case MSAT_TAG_FP_NEG:
470479
return FunctionDeclarationKind.FP_NEG;

src/org/sosy_lab/java_smt/solvers/z3/Z3FormulaCreator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,8 @@ private FunctionDeclarationKind getDeclarationKind(long f) {
655655
return FunctionDeclarationKind.FLOOR;
656656
case Z3_OP_TO_REAL:
657657
return FunctionDeclarationKind.TO_REAL;
658+
case Z3_OP_INT2BV:
659+
return FunctionDeclarationKind.INT_TO_BV;
658660

659661
case Z3_OP_UNINTERPRETED:
660662
return FunctionDeclarationKind.UF;
@@ -760,6 +762,10 @@ private FunctionDeclarationKind getDeclarationKind(long f) {
760762
return FunctionDeclarationKind.BV_ROTATE_LEFT;
761763
case Z3_OP_EXT_ROTATE_RIGHT:
762764
return FunctionDeclarationKind.BV_ROTATE_RIGHT;
765+
case Z3_OP_BV2INT:
766+
return FunctionDeclarationKind.UBV_TO_INT;
767+
case Z3_OP_SBV2INT:
768+
return FunctionDeclarationKind.SBV_TO_INT;
763769

764770
case Z3_OP_FPA_NEG:
765771
return FunctionDeclarationKind.FP_NEG;

0 commit comments

Comments
 (0)