44fn main ( ) -> std:: io:: Result < ( ) > {
55 env_logger:: init ( ) ;
66 let mut ctx = easy_smt:: ContextBuilder :: new ( )
7- . solver ( "z3" , [ "-smt2" , "-in" ] )
7+ . solver ( "z3" )
8+ . solver_args ( [ "-smt2" , "-in" ] )
89 . build ( ) ?;
910
1011 // Declare an uninterpreted representation for sets.
@@ -14,11 +15,7 @@ fn main() -> std::io::Result<()> {
1415
1516 // Our sets have a simple interface of predicates: empty(s),
1617 // member(x,s), and subset(s1,s2).
17- ctx. declare_fun (
18- "empty" ,
19- vec ! [ ctx. atom( "MySet" ) ] ,
20- ctx. bool_sort ( ) ,
21- ) ?;
18+ ctx. declare_fun ( "empty" , vec ! [ ctx. atom( "MySet" ) ] , ctx. bool_sort ( ) ) ?;
2219 ctx. declare_fun (
2320 "member" ,
2421 vec ! [ ctx. atom( "MyElement" ) , ctx. atom( "MySet" ) ] ,
@@ -41,30 +38,18 @@ fn main() -> std::io::Result<()> {
4138 // One of the following is true:
4239 ctx. or (
4340 // (1) s1 is a subset of s2, or
44- ctx. list ( vec ! [
45- ctx. atom( "subset" ) ,
46- ctx. atom( "s1" ) ,
47- ctx. atom( "s2" ) ,
48- ] ) ,
41+ ctx. list ( vec ! [ ctx. atom( "subset" ) , ctx. atom( "s1" ) , ctx. atom( "s2" ) ] ) ,
4942 // (2) an element exists which is a member of s1, and
5043 // not a member of s2.
5144 ctx. exists (
5245 [ ( "x" , ctx. atom ( "MyElement" ) ) ] ,
5346 ctx. and (
54- ctx. list ( vec ! [
55- ctx. atom( "member" ) ,
56- ctx. atom( "x" ) ,
57- ctx. atom( "s1" ) ,
58- ] ) ,
59- ctx. not ( ctx. list ( vec ! [
60- ctx. atom( "member" ) ,
61- ctx. atom( "x" ) ,
62- ctx. atom( "s2" ) ,
63- ] ) ) ,
47+ ctx. list ( vec ! [ ctx. atom( "member" ) , ctx. atom( "x" ) , ctx. atom( "s1" ) ] ) ,
48+ ctx. not ( ctx. list ( vec ! [ ctx. atom( "member" ) , ctx. atom( "x" ) , ctx. atom( "s2" ) ] ) ) ,
6449 ) ,
6550 ) ,
6651 ) ,
67- )
52+ ) ,
6853 ) ?;
6954
7055 // Second, a set is empty iff no member exists.
@@ -79,11 +64,7 @@ fn main() -> std::io::Result<()> {
7964 // (2) an element exists that is a member of the set.
8065 ctx. exists (
8166 [ ( "x" , ctx. atom ( "MyElement" ) ) ] ,
82- ctx. list ( vec ! [
83- ctx. atom( "member" ) ,
84- ctx. atom( "x" ) ,
85- ctx. atom( "s1" ) ,
86- ] ) ,
67+ ctx. list ( vec ! [ ctx. atom( "member" ) , ctx. atom( "x" ) , ctx. atom( "s1" ) ] ) ,
8768 ) ,
8869 ) ,
8970 ) ,
@@ -95,31 +76,21 @@ fn main() -> std::io::Result<()> {
9576 ctx. declare_const ( "s2" , ctx. atom ( "MySet" ) ) ?;
9677
9778 // Is it possible for s1 to be empty,
98- ctx. assert (
99- ctx. list ( vec ! [ ctx. atom( "empty" ) , ctx. atom( "s1" ) ] )
100- ) ?;
79+ ctx. assert ( ctx. list ( vec ! [ ctx. atom( "empty" ) , ctx. atom( "s1" ) ] ) ) ?;
10180 // while also s1 is not a subset of s2?
102- ctx. assert (
103- ctx. not (
104- ctx. list ( vec ! [
105- ctx. atom( "subset" ) ,
106- ctx. atom( "s1" ) ,
107- ctx. atom( "s2" ) ,
108- ] )
109- )
110- ) ?;
81+ ctx. assert ( ctx. not ( ctx. list ( vec ! [ ctx. atom( "subset" ) , ctx. atom( "s1" ) , ctx. atom( "s2" ) ] ) ) ) ?;
11182
11283 // We expect the answer to be no (UNSAT).
11384 match ctx. check ( ) ? {
11485 easy_smt:: Response :: Sat => {
11586 println ! ( "Solver returned SAT. This is unexpected!" ) ;
116- } ,
87+ }
11788 easy_smt:: Response :: Unsat => {
11889 println ! ( "Solver returned UNSAT. This is expected." ) ;
119- } ,
90+ }
12091 easy_smt:: Response :: Unknown => {
12192 println ! ( "Solver returned UNKNOWN. This is unexpected!" ) ;
122- } ,
93+ }
12394 }
12495 Ok ( ( ) )
12596}
0 commit comments