diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/regress/regress0/fmf/Makefile.am | 3 | ||||
-rw-r--r-- | test/regress/regress0/fmf/cons-sets-bounds.smt2 | 26 |
2 files changed, 28 insertions, 1 deletions
diff --git a/test/regress/regress0/fmf/Makefile.am b/test/regress/regress0/fmf/Makefile.am index 03fe780b8..af8776ace 100644 --- a/test/regress/regress0/fmf/Makefile.am +++ b/test/regress/regress0/fmf/Makefile.am @@ -64,7 +64,8 @@ TESTS = \ fmf-bound-2dim.smt2 \ memory_model-R_cpp-dd.cvc \ bug764.smt2 \ - ko-bound-set.cvc + ko-bound-set.cvc \ + cons-sets-bounds.smt2 EXTRA_DIST = $(TESTS) diff --git a/test/regress/regress0/fmf/cons-sets-bounds.smt2 b/test/regress/regress0/fmf/cons-sets-bounds.smt2 new file mode 100644 index 000000000..db9788a61 --- /dev/null +++ b/test/regress/regress0/fmf/cons-sets-bounds.smt2 @@ -0,0 +1,26 @@ +; COMMAND-LINE: --fmf-bound +; EXPECT: sat +(set-logic ALL) +(declare-datatypes () ((list (cons (head Int) (tail list)) (nil)))) + +(declare-fun P (Int) Bool) +(declare-fun S () (Set list)) + +; can use simple unification to infer bounds on x and y +(assert (forall ((x Int) (y list)) (=> (member (cons x y) S) (P x)))) + +(assert (member (cons 4 (cons 1 nil)) S)) +(assert (member (cons 2 nil) S)) + +; should construct instantiation involving selectors for l +(declare-fun l () list) +(assert (is-cons l)) +(assert (member l S)) + +; should not contribute to instantiations +(assert (member nil S)) + +(assert (not (P 1))) +(assert (not (P 0))) + +(check-sat) |