Changing bv_to_int options (#4721)
authoryoni206 <yoni206@users.noreply.github.com>
Sat, 11 Jul 2020 11:39:56 +0000 (04:39 -0700)
committerGitHub <noreply@github.com>
Sat, 11 Jul 2020 11:39:56 +0000 (06:39 -0500)
This PR changes --solve-bv-as-int from a numerical option (specifying the granularity) to an enum (specifying the approach). Currently we support only two modes: OFF and SUM. Future PRs will add more modes.
The numerical value of the granularity is now captured by the new option --bvand-integer-granularity.
Tests are updated accordingly.

19 files changed:
src/options/smt_options.toml
src/preprocessing/passes/bv_to_int.cpp
src/smt/process_assertions.cpp
src/smt/set_defaults.cpp
test/regress/regress0/bv/bv_to_int1.smt2
test/regress/regress0/bv/bv_to_int2.smt2
test/regress/regress0/bv/bv_to_int_bitwise.smt2
test/regress/regress0/bv/bv_to_int_bvmul1.smt2
test/regress/regress0/bv/bv_to_int_bvmul2.smt2
test/regress/regress0/bv/bv_to_int_elim_err.smt2
test/regress/regress0/bv/bv_to_int_zext.smt2
test/regress/regress0/bv/bvuf_to_intuf.smt2
test/regress/regress0/bv/bvuf_to_intuf_smtlib.smt2
test/regress/regress0/bv/bvuf_to_intuf_sorts.smt2
test/regress/regress2/bv_to_int_ashr.smt2
test/regress/regress2/bv_to_int_mask_array_1.smt2
test/regress/regress2/bv_to_int_mask_array_2.smt2
test/regress/regress2/bv_to_int_shifts.smt2
test/regress/regress3/bv_to_int_and_or.smt2

index 13791bfd6beeff9ad070c6144b9ba476e4733958..80183b71fb3b76391f860d42f49d7b655ecfd897 100644 (file)
@@ -639,11 +639,26 @@ header = "options/smt_options.h"
 [[option]]
   name       = "solveBVAsInt"
   category   = "undocumented"
-  long       = "solve-bv-as-int=N"
+  long       = "solve-bv-as-int=MODE"
+  type       = "SolveBVAsIntMode"
+  default    = "OFF"
+  help       = "mode for translating BVAnd to integer"
+  help_mode  = "solve-bv-as-int modes."
+[[option.mode.OFF]]
+  name = "off"
+  help = "Do not translate bit-vectors to integers"
+[[option.mode.SUM]]
+  name = "sum"
+  help = "Generate a sum expression for each bvand instance, based on the value in --solbv-bv-as-int-granularity"
+
+[[option]]
+  name       = "BVAndIntegerGranularity"
+  category   = "undocumented"
+  long       = "bvand-integer-granularity=N"
   type       = "uint32_t"
-  default    = "0"
+  default    = "1"
   read_only  = true
-  help       = "attempt to solve BV formulas by translation to integer arithmetic (experimental)"
+  help       = "granularity to use in --solve-bv-as-int mode and for iand operator (experimental)"
 
 [[option]]
   name       = "iandMode"
index 5b125b4b6cab7bd675d3d4e2f0126157e4304b03..bb0bde2f975d1418dfb8df71093f5f7bb8b5245b 100644 (file)
@@ -269,7 +269,7 @@ Node BVToInt::bvToInt(Node n)
   n = makeBinary(n);
   vector<Node> toVisit;
   toVisit.push_back(n);
-  uint64_t granularity = options::solveBVAsInt();
+  uint64_t granularity = options::BVAndIntegerGranularity();
 
   while (!toVisit.empty())
   {
index 4eedfd863d4520821cc378fae6b8daf555d79627..4fed33f3c6356b0080a941e0dcfeb5cad047a279 100644 (file)
@@ -222,7 +222,7 @@ bool ProcessAssertions::apply(AssertionPipeline& assertions)
   {
     d_passes["bv-to-bool"]->apply(&assertions);
   }
-  if (options::solveBVAsInt() > 0)
+  if (options::solveBVAsInt() != options::SolveBVAsIntMode::OFF)
   {
     d_passes["bv-to-int"]->apply(&assertions);
   }
index 4ce4b8db8659cae76c01f0b426f412eda333a909..11751079eec2a4e38101e295f5efaa46b6d78d2d 100644 (file)
@@ -154,7 +154,7 @@ void setDefaults(SmtEngine& smte, LogicInfo& logic)
     logic.lock();
   }
 
-  if (options::solveBVAsInt() > 0)
+  if (options::solveBVAsInt() != options::SolveBVAsIntMode::OFF)
   {
     // not compatible with incremental
     if (options::incrementalSolving())
@@ -168,7 +168,7 @@ void setDefaults(SmtEngine& smte, LogicInfo& logic)
       throw OptionException(
           "solving bitvectors as integers is incompatible with --bool-to-bv.");
     }
-    if (options::solveBVAsInt() > 8)
+    if (options::BVAndIntegerGranularity() > 8)
     {
       /**
        * The granularity sets the size of the ITE in each element
@@ -382,7 +382,7 @@ void setDefaults(SmtEngine& smte, LogicInfo& logic)
   }
 
 
-  if (options::solveBVAsInt() > 0)
+  if (options::solveBVAsInt() != options::SolveBVAsIntMode::OFF)
   {
     /**
      * Operations on 1 bits are better handled as Boolean operations
index 1df9ec2d6157e0060411e87425e26522bd0fa1a1..d9190128ee6e6cadfea8ca2f30e940ffad38b4fa 100644 (file)
@@ -1,7 +1,7 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
-; COMMAND-LINE: --solve-bv-as-int=2 --no-check-models  --no-check-unsat-cores --no-check-proofs
-; COMMAND-LINE: --solve-bv-as-int=3 --no-check-models  --no-check-unsat-cores --no-check-proofs
-; COMMAND-LINE: --solve-bv-as-int=4 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=2 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=3 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=4 --no-check-models  --no-check-unsat-cores --no-check-proofs
 ; EXPECT: unsat
 (set-logic QF_BV)
 (declare-fun x () (_ BitVec 4))
index ab1bf10f32fd3afc3b4cdfae6852f74e95236fa5..00fd51baf67d68ea02a6df29fdf6d390bc25df77 100644 (file)
@@ -1,6 +1,6 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores
-; COMMAND-LINE: --solve-bv-as-int=5 --no-check-models  --no-check-unsat-cores
-; COMMAND-LINE: --solve-bv-as-int=8 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=5 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=8 --no-check-models  --no-check-unsat-cores
 ; EXPECT: sat
 (set-logic QF_BV)
 (declare-fun a () (_ BitVec 8))
index 52eb78830a8257b7b7a2e0b57a6888d0d260fd1d..4bcbac20cc1db78e896bb5c90d8409fb599f8697 100644 (file)
@@ -1,5 +1,5 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs
-; COMMAND-LINE: --solve-bv-as-int=5 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=5 --no-check-models  --no-check-unsat-cores --no-check-proofs
 ; EXPECT: unsat
 (set-logic QF_BV)
 (declare-fun s () (_ BitVec 4))
index d0d699b4d94915975eb72a676ce1fb27044f77ab..ec420681254b2a4ca63dd5697fc6b097b6290c09 100644 (file)
@@ -1,6 +1,6 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores
-; COMMAND-LINE: --solve-bv-as-int=4 --no-check-models  --no-check-unsat-cores
-; COMMAND-LINE: --solve-bv-as-int=8 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=4 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=8 --no-check-models  --no-check-unsat-cores
 ; EXPECT: sat
 (set-logic QF_BV)
 (declare-fun a () (_ BitVec 8))
index 5412298134d25d4221a92e1041f89a5a98e4b510..05cd312d734c63f7b539180e5b4cfa6f421d92ec 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs
 ; EXPECT: unsat
 (set-logic QF_BV)
 (declare-fun T4_180 () (_ BitVec 32))
index 16731b01e25134efeeeb8d48346b09a3d7d68b43..b17aeeacf363ae379e383c20bbc310d7131b834c 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models 
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models 
 ; EXPECT: sat
 (set-logic QF_BV)
 (declare-fun _substvar_183_ () (_ BitVec 32))
index 3525cebb6f262f83bc933bd51c879518c9c13a65..5c6be19b5b2290e38bc36b43c794a0d12b6de6a8 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs
 ; EXPECT: unsat
 (set-logic QF_BV)
 (declare-fun T1_31078 () (_ BitVec 8))
index 7176f4012f5a458646ffa1de21608fb058f45423..c621aa11234fea752899b8eb57eb5f4d6b00dfcc 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores
 ; EXPECT: sat
 (set-logic QF_UFBV)
 (declare-fun a () (_ BitVec 4))
index 297bb24229845dc77f4d8f0cc739e8f278ac69cc..3db8e87ee3bdb6ba242c0d9c0436b60da5ac31e6 100644 (file)
@@ -1,4 +1,4 @@
-;COMMAND-LINE: --solve-bv-as-int=1 --no-produce-models --no-produce-unsat-cores --no-check-proofs
+;COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-produce-models --no-produce-unsat-cores --no-check-proofs
 ;EXPECT: unsat
 
 (set-logic QF_UFBV)
index 873acd6c45f25ab6de53ad2eef0fcccc18c5cee0..8fbe96eabec55b091e8a4cd91bb40115fbe5df8b 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores
 ; EXPECT: sat
 (set-logic QF_UFBV)
 (declare-sort S 0)
index e3fcb1790f58ad709f38b430e8d128158fd44d60..3e0151076d3535801c5011bc12fec45ed3cf25bc 100644 (file)
@@ -1,5 +1,5 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
-; COMMAND-LINE: --solve-bv-as-int=8 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=8 --no-check-models  --no-check-unsat-cores --no-check-proofs
 ; EXPECT: unsat
 (set-logic QF_BV)
 (declare-fun a () (_ BitVec 8))
index c1f20a41b268afed33f20ea0a79da272f0e4194f..a2d90be2d4a36dfe106455a9cb360c6186a3f140 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
 ; EXPECT: unsat
 (set-logic ALL)
 (declare-fun A () (Array Int Int))
index b88f71064b8da498c7e8019419cdbffaef75299e..9bab0c71cb0f0ce67f2f676d172db50924622024 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
 ; EXPECT: sat
 (set-logic ALL)
 (declare-fun A () (Array Int Int))
index 39dace123b729917c9ba4de2a28d542859b75a41..998234a17d357b9f278e1a3aac4ae6dca9560fa6 100644 (file)
@@ -1,4 +1,4 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores
 ; EXPECT: sat
 (set-logic QF_BV)
 (declare-fun s () (_ BitVec 64))
index 54a491093e52ad3f44bbac0263dc5874cab340bb..185f1b5ecad944d06d77fae03d2b275392445819 100644 (file)
@@ -1,8 +1,8 @@
-; COMMAND-LINE: --solve-bv-as-int=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
-; COMMAND-LINE: --solve-bv-as-int=2 --no-check-models  --no-check-unsat-cores --no-check-proofs
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=1 --no-check-models  --no-check-unsat-cores --no-check-proofs 
+; COMMAND-LINE: --solve-bv-as-int=sum --bvand-integer-granularity=2 --no-check-models  --no-check-unsat-cores --no-check-proofs
 ; EXPECT: unsat
 (set-logic QF_BV)
-(declare-fun a () (_ BitVec 8))
-(declare-fun b () (_ BitVec 8))
+(declare-fun a () (_ BitVec 4))
+(declare-fun b () (_ BitVec 4))
 (assert (bvult (bvor a b) (bvand a b)))
 (check-sat)