SymbolKind's symbols
The term representation is modeled after the SMTLIB 2.0 standard and the symbols are a subset of the symbols defined in the SMTLIB theories Core and Reals_Ints with the addition of uninterpreted symbols.
Most symbols are variadic and associativity is to be understood as defined in the SMTLIB standard:
`TRUE nullary: Boolean true value`FALSE nullary: Boolean false value`NOT unary: Boolean negation`IMPLIES variadic, right-associative: Boolean implication`AND variadic, left-associative: Boolean conjunction`OR variadic, left-associative: Boolean disjunction`XOR variadic, left-associative: Boolean exclusice disjunction`EQ variadic, chainable: equality between terms`DISTINCT variadic, pairwise: distict predicate on terms`ITE ternary: if-then-else`NUMERAL i nullary: integer numeral`DECIMAL f nullary: floating-point decimal`UBV b nullary: constant unsigned bitvector`BV b nullary: consant bitvector`MINUS variadic, left-associative: difference or a unary negation`PLUS variadic, left-associative: sum`TIMES variadic, left-associative: product`DIV variadic, left-associative: real quotient`INTDIV variadic, left-associative: integer quotient`MOD binary: modulus`ABS unary: absolute value`LEQ chainable: less than or equal relation`LT chainable: less than relation`GEQ chainable: greater than or equal relation`GT chainable: greater than relation`TO_REAL unary: conversion to a real number`TO_INT unary: conversion to an integer number`IS_INT unary: real is an integer`DIVISIBLE n unary: divisibilibty by n`BVNOT unary: bit-wise negation`BVNEG unary: arithmetic negation (unary)`BVAND binary: bit-wise conjunction`BVOR binary: bit-wise disjunction`BVXOR binary: bit-wise exclusive disjunction`BVADD binary: signed bitvector sum`BVSUB binary: signed bitvector difference`BVMUL binary: arithmetic multiplication`BVUDIV binary: arithmetic integer division`BVSDIV binary: arithmetic integer signed division`BVUREM binary: arithmetic remainder`BVSREM binary: arithmetic signed remainder`BVSHL binary: logical shift left`BVLSHR binary: logical shift right`BVASHR binary: arithmetic shift right`BVULT binary: arithmetic comparision less than`BVULE binary: arithmetic comparision less than or equal to`BVUGT binary: arithmetic comparision greater than`BVUGE binary: arithmetic comparision greater than or equal to`BVSLT signed binary: arithmetic comparision less than`BVSLE signed binary: arithmetic comparision less than or equal to`BVSGT signed binary: arithmetic comparision greater than`BVSGE signed binary: arithmetic comparision greater than or equal to`BVEXTRACT (i, j) unary: extract subsequence from bitvector`BVCONCAT binary: concatenation of bitvectors`BVSIGNEXT i unary: sign extension of bitvectors`BVZEROEXT i unary: extend bitvectors with zeros`SELECT binary: selection from array`STORE ternary: update of an array`CONST_ARRAY unary: constant arrayA chainable symbol is to be read as the conjunction of successive pairs, for example (<= 1 2 3) is equivalent to (and (<= 1 2) (<= 2 3)). A pairwise symbol is to be read as the conjunction of each pair of arguments, for example (distinct a b c) is (and (distinct a b) (distinct a c) (distinct b c)).
In addition to these interpreted symbols we use the following symbols
`UF u variadic: uninterpreted symbolSymbols are hashconsed so that we can rely on physical equality for comparison, however, as of now there are no useful properties to be stored alongside symbols. In particular the `NUMERAL i, `DECIMAL f and `SYM (s, t) symbols need to be hashconsed for physical equality.
type interpreted_symbol = [ | `TRUEBoolean true value (nullary)
*)| `FALSEBoolean false value (nullary)
*)| `NOTBoolean negation (unary)
*)| `IMPLIESBoolean implication (right-associative)
*)| `ANDBoolean conjunction (left-associative)
*)| `ORBoolean disjunction (left-associative)
*)| `XORBoolean exclusive disjunction (left-associative)
*)| `EQEquality between terms (chainable)
*)| `DISTINCTPairwise distinct predicate (chainable)
*)| `ITEIf-then-else (ternary)
*)| `NUMERAL of Numeral.tInfinite precision integer numeral (nullary)
*)| `DECIMAL of Decimal.tinfinite precision floating-point decimal (nullary)
*)| `UBV of Bitvector.tConstant unsigned bitvector
*)| `BV of Bitvector.tConstant bitvector
*)| `MINUSDifference or unary negation (left-associative)
*)| `PLUSSum (left-associative)
*)| `TIMESProduct (left-associative)
*)| `DIVReal quotient (left-associative)
*)| `INTDIVInteger quotient (left-associative)
*)| `MODModulus (binary)
*)| `ABSAbsolute value (unary)
*)| `LEQLess than or equal relation (chainable)
*)| `LTLess than relation (chainable)
*)| `GEQGreater than or equal relation (chainable)
*)| `GTGreater than relation (chainable)
*)| `TO_REALConversion to a floating-point decimal (unary)
*)| `TO_INTConversion to an unsigned integer numeral (unary)
*)| `TO_UBV of intConversion to an unsigned bv numeral (unary)
*)| `TO_BV of intConversion to a signed bv numeral (unary)
*)| `BV2NATConversion from bitvector to a natural number (now deprecated in SMT-LIB)
*)| `UBV_TO_INTConversion from bitvector to a natural number
*)| `SBV_TO_INTConversion from signed bitvector to integer number
*)| `IS_INTReal is an integer (unary)
*)| `DIVISIBLE of Numeral.tDivisible by n (unary)
| `BVNOTBit-wise negation (unary)
*)| `BVNEGArithmetic negation (unary)
*)| `BVANDBit-wise conjunction (binary)
*)| `BVORBit-wise disjunction (binary)
*)| `BVXORBit-wise exclusive disjunction (binary)
*)| `BVADDSigned bitvector sum (binary)
*)| `BVSUBSigned bitvector difference (binary)
*)| `BVMULArithmetic multiplication (binary)
*)| `BVUDIVArithmetic integer division (binary)
*)| `BVSDIVArithmetic integer signed division (binary)
*)| `BVUREMArithmetic remainder (binary)
*)| `BVSREMArithmetic signed remainder (binary)
*)| `BVSHLLogical shift left (binary)
*)| `BVLSHRLogical shift right (binary)
*)| `BVASHRArithmetic shift right (binary)
*)| `BVULT| `BVULE| `BVUGT| `BVUGE| `BVSLT| `BVSLE| `BVSGT| `BVSGE| `BVEXTRACT of Numeral.t * Numeral.tExtract subsequence from bitvector (unary)
*)| `BVCONCATConcatenation of bitvectors (binary)
*)| `BVSIGNEXT of Numeral.tSign extension of bitvector (unary)
*)| `BVZEROEXT of Numeral.tExtend bitvector with zeros (unary)
*)| `SELECT of Type.tSelection from array (binary)
*)| `STOREUpdate of an array (ternary)
*)| `CONST_ARRAY of Type.tConstant array (unary)
*)| `IsConstructor of stringADT tester: (_ is CtorName), unary
*)| `Selector of string * Type.tADT field selector: name and result type, unary
*) ]The interpreted symbols
Adding uninterpreted function symbols separately for conversions from expressions in the SMT solver interface
val hash_symbol : t -> intHashing function on symbols
val s_true : tConstant Boolean value symbol
val s_false : tConstant Boolean value symbol
val s_not : tConstant negation symbol
val s_and : tConstant conjunction symbol
val s_or : tConstant disjunction symbol
val s_implies : tConstant implication symbol
val s_ite : tConstant ite symbol
val s_eq : tConstant equality symbol
val s_geq : tConstant greater than or equal symbol
val s_leq : tConstant less than or equal symbol
val s_gt : tConstant greater than symbol
val s_lt : tConstant less than symbol
val s_mod : tConstant modulus operator symbol
val s_plus : tConstant plus operator symbol
val s_minus : tConstant minus operator symbol
val s_times : tConstant times operator symbol
val s_div : tConstant division operator symbol
val s_to_int : tConstant cast to int symbol
val s_ubv_to_int : tConstant cast ubv to int symbol
val s_sbv_to_int : tConstant cast sbv to int symbol
val s_bv2nat : tConstant cast bv to int (nat) symbol
val s_to_real : tConstant cast to real symbol
val s_store : tarray store symbol
val s_to_ubv : int -> tval s_to_bv : int -> tval s_bvneg : tval is_numeral : t -> boolReturn true if the symbol is a numeral
val is_decimal : t -> boolReturn true if the symbol is a decimal
val is_bitvector : t -> boolReturn true if the symbol is a bitvector
val is_ubitvector : t -> boolReturn true if the symbol is an unsigned bitvector
val is_to_ubv : t -> boolReturn true if the symbol is a toubv
val is_to_bv : t -> boolReturn true if the symbol is a tobv
val is_select : t -> boolReturn true if the symbol is select from array
val is_const_array : t -> boolReturn true if the symbol is a constant array
val is_divisible : t -> boolReturn true if the symbol is the divisible function
val is_bool : t -> boolReturn true if the symbol is `TRUE or `FALSE
val is_ite : t -> boolReturn true if the symbol is `ITE
val bitvector_of_symbol : t -> Bitvector.tReturn the bitvector in a `BV _ symbol
val ubitvector_of_symbol : t -> Bitvector.tReturn the ubitvector in a `UBV _ symbol
val bool_of_symbol : t -> boolReturn true for the `TRUE symbol and false for the `FALSE symbol
val is_uf : t -> boolReturn true if the symbol is uninterpreted
val uf_of_symbol : t -> UfSymbol.tReturn the uninterpreted symbol of a symbol
val pp_print_symbol : Stdlib.Format.formatter -> t -> unitPretty-print a symbol
val string_of_symbol : t -> stringReturn a string representation of a symbol
val string_of_symbol_node : symbol -> stringReturn a string representation of a symbol