diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2020-02-17 11:17:02 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-17 09:17:02 -0800 |
commit | b19c08997e15d2e42f61f1936fd60c5e34081d68 (patch) | |
tree | ee91b86dcc64a2e8c5106f173974151245b641c6 /test/regress/regress1 | |
parent | 27e1a5835139d5107010475cb951a1aa1350e7f4 (diff) |
Fix soundness bug in reduction of integer div/mod (#3766)
This was introduced 7 years ago in https://github.com/CVC4/CVC4/commit/9098391fe334d829ec4101f190b8f1fa21c30752.
This impacted any case of integer div/mod of the form `(mod c t)` or `(div c t)` where c is a constant and `t` is not.
Fixes #3765.
Also improves `--dump=t-lemmas` trace to result in smt-lib compatible output, which was required for debugging this.
Diffstat (limited to 'test/regress/regress1')
-rw-r--r-- | test/regress/regress1/quantifiers/issue3765-quant-dd.smt2 | 18 | ||||
-rw-r--r-- | test/regress/regress1/quantifiers/issue3765.smt2 | 17 |
2 files changed, 35 insertions, 0 deletions
diff --git a/test/regress/regress1/quantifiers/issue3765-quant-dd.smt2 b/test/regress/regress1/quantifiers/issue3765-quant-dd.smt2 new file mode 100644 index 000000000..624e5ddfa --- /dev/null +++ b/test/regress/regress1/quantifiers/issue3765-quant-dd.smt2 @@ -0,0 +1,18 @@ +; COMMAND-LINE: --finite-model-find --no-check-models +; EXPECT: sat + +(set-logic ALL) + +(declare-sort U 0) +(declare-fun g (U) Int) +(declare-sort V 0) +(declare-fun f (V) Int) +(assert (and +(forall ((?i U)) (not (forall ((?z V)) (not (= (f ?z) (div (- 1) (g ?i))))) )) +)) + +(declare-fun k () U) +(assert (= (g k) 22)) + + +(check-sat) diff --git a/test/regress/regress1/quantifiers/issue3765.smt2 b/test/regress/regress1/quantifiers/issue3765.smt2 new file mode 100644 index 000000000..97e106365 --- /dev/null +++ b/test/regress/regress1/quantifiers/issue3765.smt2 @@ -0,0 +1,17 @@ +; COMMAND-LINE: --fmf-fun --no-check-models
+; EXPECT: sat
+
+(set-info :smt-lib-version 2.5)
+(set-option :produce-models true)
+(set-logic ALL)
+(define-funs-rec (
+(f11((va9 Int))Int)
+(f3((v1f Int))Int)
+)
+( (f3 (ite (= 0 va9) (- 1) (div (- 1) va9)))
+ (- (ite (= 0 v1f) 0 (mod 0 v1f)))
+))
+(declare-fun v18d() Int)
+(assert (= 0 (f11 v18d)))
+(assert (= 22 v18d))
+(check-sat)
|