BSD-licensed Editline. Compiling with `--best` now enables Editline, instead
of Readline. Without selecting optional GPL components, Editline-enabled CVC4
builds will be BSD licensed.
+* The semantics for division and remainder operators in the CVC language now
+ correspond to SMT-LIB 2.6 semantics (i.e. a division by zero or a zero
+ modulus results in a constant value, instead of an uninterpreted one).
+ Similarly, when no language is set, the API semantics now correspond to the
+ SMT-LIB 2.6 semantics.
* The `competition` build type includes the dependencies used for SMT-COMP by
default. Note that this makes this build type produce GPL-licensed binaries.
+
Changes since 1.7
=================
BITVECTOR_NEG,
/**
* Unsigned division of two bit-vectors, truncating towards 0.
+ *
+ * Note: The semantics of this operator depends on `bv-div-zero-const`
+ * (default is true). Depending on the setting, a division by zero is
+ * treated as all ones (default, corresponds to SMT-LIB >=2.6) or an
+ * uninterpreted value (corresponds to SMT-LIB <2.6).
+ *
* Parameters: 2
* -[1]..[2]: Terms of bit-vector sort (sorts must match)
* Create with:
BITVECTOR_UDIV,
/**
* Unsigned remainder from truncating division of two bit-vectors.
+ *
+ * Note: The semantics of this operator depends on `bv-div-zero-const`
+ * (default is true). Depending on the setting, if the modulus is zero, the
+ * result is either the dividend (default, corresponds to SMT-LIB >=2.6) or
+ * an uninterpreted value (corresponds to SMT-LIB <2.6).
+ *
* Parameters: 2
* -[1]..[2]: Terms of bit-vector sort (sorts must match)
* Create with:
BITVECTOR_UREM,
/**
* Two's complement signed division of two bit-vectors.
+ *
+ * Note: The semantics of this operator depends on `bv-div-zero-const`
+ * (default is true). By default, the function returns all ones if the
+ * dividend is positive and one if the dividend is negative (corresponds to
+ * SMT-LIB >=2.6). If the option is disabled, a division by zero is treated
+ * as an uninterpreted value (corresponds to SMT-LIB <2.6).
+ *
* Parameters: 2
* -[1]..[2]: Terms of bit-vector sort (sorts must match)
* Create with:
/**
* Two's complement signed remainder of two bit-vectors
* (sign follows dividend).
+ *
+ * Note: The semantics of this operator depends on `bv-div-zero-const`
+ * (default is true, corresponds to SMT-LIB >=2.6). Depending on the setting,
+ * if the modulus is zero, the result is either the dividend (default) or an
+ * uninterpreted value (corresponds to SMT-LIB <2.6).
+ *
* Parameters: 2
* -[1]..[2]: Terms of bit-vector sort (sorts must match)
* Create with:
/**
* Two's complement signed remainder
* (sign follows divisor).
+ *
+ * Note: The semantics of this operator depends on `bv-div-zero-const`
+ * (default is on). Depending on the setting, if the modulus is zero, the
+ * result is either the dividend (default, corresponds to SMT-LIB >=2.6) or
+ * an uninterpreted value (corresponds to SMT-LIB <2.6).
+ *
* Parameters: 2
* -[1]..[2]: Terms of bit-vector sort (sorts must match)
* Create with:
// set this option if the input format is SMT LIB 2.6. We also set this
// option if we are sygus, since we assume SMT LIB 2.6 semantics for sygus.
options::bitvectorDivByZeroConst.set(
- language::isInputLang_smt2_6(options::inputLanguage())
- || language::isInputLangSygus(options::inputLanguage()));
+ !language::isInputLang_smt2_5(options::inputLanguage(), true));
}
bool is_sygus = language::isInputLangSygus(options::inputLanguage());