CVC4, the fifth generation of Cooperating Validity Checker from NYU and U Iowa, is a DPLL solver with a SAT solver core and a delegation path to different decision procedure implementations, each in charge of solving formulas in some background theory. It works for first-order logics. It has implemented decision procedures for the theory of uninterpreted/free functions, arithmetic(integer, real, linear, non-linear), arrays, bit-vectors and datatypes. It uses a combination method based on Nelson-Oppen to cooperate different theories. Also, CVC4 supports quantifiers through heuristic instantiaionfootnote and has the ability to generate model. For both satisfiable(sat)/unsatisfiable(unsat) formulas, CVC4 can come up with the correct answer.
Since ANTLR has been largely changed, the building process listed here should be changed a little bit.
Download source code from official links.
Following the building instruction to build the CVC4.
Enter contrib directory, use get-antlr-3.4 to get ANTLR.
Note
The get-antlr-3.4 file should be changed. All the hyperlinks including “antlr.org” should be changed to “antlr3.org”.
Use ./configure --with-antlr-dir=`pwd`/antlr-3.4 ANTLR=`pwd`/antlr-3.4/bin/antlr3 to do configuration.
Following the rest steps in the building instruction. If the configure reports missing something, just install them all.
Make
To invoke command line interface, just type
./cvc4 scriptfile.smt2
It will use the correct parser based on file extensions. If you want to test all the scripts in a folder, try this
ls | xargs -n 1 cvc4
| Kind | Meaning |
|---|---|
| SORT_TAG | sort tag |
| SORT_TYPE | sort type |
| UNINTERPRETED_CONSTANT | The kind of expressions representing uninterpreted constants |
| ABSTRACT_VALUE | The kind of expressions representing abstract values (other than uninterpreted sort constant |
| BUILTIN | The kind of expressions representing built-in operators |
| FUNCTION | function |
| APPLY | defined function application |
| EQUAL | equality |
| DISTINCT | disequality |
| VARIABLE | variable |
| BOUND_VARIABLE | bound variable |
| SKOLEM | skolem var |
| SEXPR | a symbolic expression |
| LAMBDA | lambda |
| CHAIN | chain operator |
| TYPE_CONSTANT | basic types |
| FUNCTION_TYPE | function type |
| SEXPR_TYPE | symbolic expression type |
| CONST_STRING | a string of characters |
| SUBTYPE_TYPE | predicate subtype |
| Kind | Meaning |
|---|---|
| CONST_BOOLEAN | truth and falsity |
| NOT | logical not |
| AND | logical and |
| IFF | logical equivalence |
| IMPLIES | logical implication |
| OR | logical or |
| XOR | exclusive or |
| ITE | if-then-else |
| Kind | Meaning |
|---|---|
| APPLY_UF | uninterpreted function application |
| CARDINALITY_CONSTRAINT | cardinality constraint |
| Kind | Meaning |
|---|---|
| PLUS | arithmetic addition |
| MULT | arithmetic multiplication |
| MINUS | arithmetic binary subtraction operator |
| UMINUS | arithmetic unary negation |
| DIVISION | real division (user symbol) |
| DIVISION_TOTAL | real division with interpreted division by 0 (internal symbol) |
| INTS_DIVISION | ints division (user symbol) |
| INTS_DIVISION_TOTAL | ints division with interpreted division by 0 (internal symbol) |
| INTS_MODULUS | ints modulus (user symbol) |
| INTS_MODULUS_TOTAL | ints modulus with interpreted division by 0 (internal symbol) |
| POW | arithmetic power |
| SUBRANGE_TYPE | the type of an integer subrange |
| CONST_RATIONAL | a multiple-precision rational constant |
| LT | less than, x < y |
| LEQ | less than or equal, x <= y |
| GT | greater than, x > y |
| GEQ | greater than or equal, x >= y |
| Kind | Meaning |
|---|---|
| ARRAY_TYPE | array type |
| SELECT | array select |
| STORE | array store |
| STORE_ALL | array store-all |
| ARR_TABLE_FUN | array table function (internal symbol) |
| Kind | Meaning |
|---|---|
| BITVECTOR_TYPE | bit-vector type |
| CONST_BITVECTOR | a fixed-width bit-vector constant |
| BITVECTOR_CONCAT | bit-vector concatenation |
| BITVECTOR_AND | bitwise and |
| BITVECTOR_OR | bitwise or |
| BITVECTOR_XOR | bitwise xor |
| BITVECTOR_NOT | bitwise not |
| BITVECTOR_NAND | bitwise nand |
| BITVECTOR_NOR | bitwise nor |
| BITVECTOR_XNOR | bitwise xnor |
| BITVECTOR_COMP | equality comparison (returns one bit) |
| BITVECTOR_MULT | bit-vector multiplication |
| BITVECTOR_PLUS | bit-vector addition |
| BITVECTOR_SUB | bit-vector subtraction |
| BITVECTOR_NEG | bit-vector unary negation |
| BITVECTOR_UDIV | bit-vector unsigned division, truncating towards 0 (undefined if divisor is 0) |
| BITVECTOR_UREM | bit-vector unsigned remainder from truncating division (undefined if divisor is 0) |
| BITVECTOR_SDIV | bit-vector 2’s complement signed division |
| BITVECTOR_SREM | bit-vector 2’s complement signed remainder (sign follows dividend) |
| BITVECTOR_SMOD | bit-vector 2’s complement signed remainder (sign follows divisor) |
| BITVECTOR_UDIV_TOTAL | bit-vector total unsigned division, truncating towards 0 (undefined if divisor is 0) |
| BITVECTOR_UREM_TOTAL | bit-vector total unsigned remainder from truncating division (undefined if divisor is 0) |
| BITVECTOR_SHL | bit-vector left shift |
| BITVECTOR_LSHR | bit-vector logical shift right |
| BITVECTOR_ASHR | bit-vector arithmetic shift right |
| BITVECTOR_ULT | bit-vector unsigned less than |
| BITVECTOR_ULE | bit-vector unsigned less than or equal |
| BITVECTOR_UGT | bit-vector unsigned greater than |
| BITVECTOR_UGE | bit-vector unsigned greater than or equal |
| BITVECTOR_SLT | bit-vector signed less than |
| BITVECTOR_SLE | bit-vector signed less than or equal |
| BITVECTOR_SGT | bit-vector signed greater than |
| BITVECTOR_SGE | bit-vector signed greater than or equal |
| BITVECTOR_BITOF_OP | operator for the bit-vector boolean bit extract |
| BITVECTOR_EXTRACT_OP | operator for the bit-vector extract |
| BITVECTOR_REPEAT_OP | operator for the bit-vector repeat |
| BITVECTOR_ZERO_EXTEND_OP | operator for the bit-vector zero-extend |
| BITVECTOR_SIGN_EXTEND_OP | operator for the bit-vector sign-extend |
| BITVECTOR_ROTATE_LEFT_OP | operator for the bit-vector rotate left |
| BITVECTOR_ROTATE_RIGHT_OP | operator for the bit-vector rotate right |
| BITVECTOR_BITOF | bit-vector boolean bit extract |
| BITVECTOR_EXTRACT | bit-vector extract |
| BITVECTOR_REPEAT | bit-vector repeat |
| BITVECTOR_ZERO_EXTEND | bit-vector zero-extend |
| BITVECTOR_SIGN_EXTEND | bit-vector sign-extend |
| BITVECTOR_ROTATE_LEFT | bit-vector rotate left |
| BITVECTOR_ROTATE_RIGHT | bit-vector rotate right |
| Kind | Meaning |
|---|---|
| CONSTRUCTOR_TYPE | constructor |
| SELECTOR_TYPE | selector |
| TESTER_TYPE | tester |
| APPLY_CONSTRUCTOR | constructor application |
| APPLY_SELECTOR | selector application |
| APPLY_TESTER | tester application |
| DATATYPE_TYPE | datatype type |
| PARAMETRIC_DATATYPE | parametric datatype |
| APPLY_TYPE_ASCRIPTION | type ascription, for datatype constructor applications |
| ASCRIPTION_TYPE | a type parameter for type ascription |
| TUPLE_TYPE | tuple type |
| TUPLE | a tuple |
| TUPLE_SELECT_OP | operator for a tuple select |
| TUPLE_SELECT | tuple select |
| TUPLE_UPDATE_OP | operator for a tuple update |
| TUPLE_UPDATE | tuple update |
| RECORD_TYPE | record type |
| RECORD | a record |
| RECORD_SELECT_OP | operator for a record select |
| RECORD_SELECT | record select |
| RECORD_UPDATE_OP | operator for a record update |
| RECORD_UPDATE | record update |
| Kind | Meaning |
|---|---|
| FORALL | universally quantified formula |
| EXISTS | existentially quantified formula |
| INST_CONSTANT | instantiation constant |
| BOUND_VAR_LIST | bound variables |
| INST_PATTERN | instantiation pattern |
| INST_PATTERN_LIST | instantiation pattern list |
| Kind | Meaning |
|---|---|
| REWRITE_RULE | generale rewrite rule |
| RR_REWRITE | actual rewrite rule |
| RR_REDUCTION | actual reduction rule |
| RR_DEDUCTION | actual deduction rule |
| Type | Meaning |
|---|---|
| BUILTIN_OPERATOR_TYPE | Built in type for built in operators |
| STRING_TYPE | String type |
| BOOLEAN_TYPE | Boolean type |
| REAL_TYPE | Real type |
| INTEGER_TYPE | Integer type |
| BOUND_VAR_LIST_TYPE | Bound Var type |
| INST_PATTERN_TYPE | Instantiation pattern type |
| INST_PATTERN_LIST_TYPE | Instantiation pattern list type |
| RRHB_TYPE | head and body of the rule type |
| ID | Meaning |
|---|---|
| THEORY_BUILTIN | |
| THEORY_BOOL | |
| THEORY_UF | |
| THEORY_ARITH | |
| THEORY_ARRAY | |
| THEORY_BV | |
| THEORY_DATATYPES | |
| THEORY_QUANTIFIERS | |
| THEORY_REWRITERULES |