Class implementing prefix-notation for functions that are considered Boolean-valued.
Class implementing prefix-notation for functions that are
considered Boolean-valued. Booleans are encoded into integers,
mapping true
to 0
and false
to 1
.
Imported type from the terfor
package
Imported type from the terfor
package
Class implementing prefix-notation for functions
Class implementing prefix-notation for predicates
Imported type from the terfor
package
Imported type from the terfor
package
Imported type from the terfor
package
Imported type from the terfor
package
Various functions to work with vectors of terms
Imported type from the types
package
Imported type from the types
package
Rewrite an equation to the form coeff * symbol = remainder
(where remainder does not contain the atomic term
symbol
) and determine the coefficient and the remainder
Rewrite an equation to the form coeff * symbol = remainder
(where remainder does not contain the atomic term
symbol
) and determine the coefficient and the remainder
Rewrite a term to the form coeff * symbol + remainder
(where remainder does not contain the atomic term
symbol
) and determine the coefficient and the remainder
Rewrite a term to the form coeff * symbol + remainder
(where remainder does not contain the atomic term
symbol
) and determine the coefficient and the remainder
Implicit conversion from Booleans to formulas
Generate or match a binary conjunction phi & psi
.
Generate or match a binary conjunction phi & psi
.
Extract the value of constant terms.
Implicit conversion from constants to terms
Match on a difference
IPlus(a, ITimes(IdealInt.MINUS_ONE, b))
or
IPlus(ITimes(IdealInt.MINUS_ONE, b), a)
Match on a difference
IPlus(a, ITimes(IdealInt.MINUS_ONE, b))
or
IPlus(ITimes(IdealInt.MINUS_ONE, b), a)
Generate or match a binary disjunction phi | psi
.
Generate or match a binary disjunction phi | psi
.
Generate or match a divisibility expression ex x.
Generate or match a divisibility expression ex x. denom*x = t.
Generate or match an equation s === t
.
Generate or match an equation s === t
.
Generate or match an equation s === lit
,
where lit
is an integer literal.
Generate or match an equation s === lit
,
where lit
is an integer literal.
Generate or match the equation t = 0
.
Generate or match the equation t = 0
.
Generate or match an inequality s >= t
.
Generate or match an inequality s >= t
.
Generate or match the inequality t >= 0
.
Generate or match the inequality t >= 0
.
Implicit conversion from integers to terms
Implicit conversion from integers to terms
Identify formulae that do not have direct subformulae.
Generate or match a non-divisibility expression forall x.
Generate or match a non-divisibility expression forall x. denom*x != t.
Imported companion object from the terfor
package
Imported companion object from the terfor
package
Implicit conversion from Scala ranges to interval sorts
Extract the value and sign of constant terms.
Identify terms that only consist of variables, constants, and linear arithmetic operations.
Imported companion object from the types
package
Imported companion object from the types
package
Absolute value
Add sorted universal quantifiers for the variables with de Bruijn index
0, ..., sorts.size - 1
.
Add sorted universal quantifiers for the variables with de Bruijn index
0, ..., sorts.size - 1
. The first sort in
sorts
will be the innermost quantifier and corresponds
to index 0.
Higher-order syntax for universal quantifiers.
Higher-order syntax for universal quantifiers. This makes it possible
to write a quantifier as
all((a, b, c, d, e) => phi(a, b, c, d, e))
.
Higher-order syntax for universal quantifiers.
Higher-order syntax for universal quantifiers. This makes it possible
to write a quantifier as all((a, b, c, d) => phi(a, b, c, d))
.
Higher-order syntax for universal quantifiers.
Higher-order syntax for universal quantifiers. This makes it possible
to write a quantifier as all((a, b, c) => phi(a, b, c))
.
Higher-order syntax for universal quantifiers.
Higher-order syntax for universal quantifiers. This makes it possible
to write a quantifier as all((a, b) => phi(a, b))
.
Higher-order syntax for universal quantifiers.
Higher-order syntax for universal quantifiers. This makes it possible
to write a quantifier as all(a => phi(a))
.
Add an existential quantifier for the variable with de Bruijn index 0.
Generate the conjunction of the given formulas.
Generate the conjunction of the given formulas.
When encoding functions using predicates, make sure that no functions escape.
Generate a formula expressing that the given terms are pairwise distinct
Generate a formula expressing that the given terms are pairwise distinct
Higher-order syntax for epsilon-expressions.
Higher-order syntax for epsilon-expressions. This makes it possible
to write things like eps(a => phi(a))
.
Generate an epsilon-expression with the given sort.
Generate an epsilon-expression with sort Sort.Integer
.
Generate an epsilon-expression with sort Sort.Integer
.
Generate the equation t = 0
.
Generate the equation t = 0
.
Add sorted existential quantifiers for the variables with de Bruijn index
0, ..., sorts.size - 1
.
Add sorted existential quantifiers for the variables with de Bruijn index
0, ..., sorts.size - 1
. The first sort in
sorts
will be the innermost quantifier and corresponds
to index 0.
Higher-order syntax for existential quantifiers.
Higher-order syntax for existential quantifiers. This makes it possible
to write a quantifier as
ex((a, b, c, d, e) => phi(a, b, c, d, e))
.
Higher-order syntax for existential quantifiers.
Higher-order syntax for existential quantifiers. This makes it possible
to write a quantifier as ex((a, b, c, d) => phi(a, b, c, d))
.
Higher-order syntax for existential quantifiers.
Higher-order syntax for existential quantifiers. This makes it possible
to write a quantifier as ex((a, b, c) => phi(a, b, c))
.
Higher-order syntax for existential quantifiers.
Higher-order syntax for existential quantifiers. This makes it possible
to write a quantifier as ex((a, b) => phi(a, b))
.
Higher-order syntax for existential quantifiers.
Higher-order syntax for existential quantifiers. This makes it possible
to write a quantifier as ex(a => phi(a))
.
Add an existential quantifier for the variable with de Bruijn index 0.
Generate the inequality t >= 0
.
Generate the inequality t >= 0
.
Guard a formula, turning it into f ==> guard
.
Guard a formula, turning it into f ==> guard
. The guard will
be inserted underneath leading universal quantifiers.
Guard a formula, turning it into f & guard
.
Guard a formula, turning it into f & guard
. The guard will
be inserted underneath leading existential quantifiers.
Conversion from Booleans to formulas
Conversion from constants to terms
Conversion from integers to terms
Conversion from integers to terms
Identify terms that only consist of variables, constants, and linear arithmetic operations.
Generate a conditional formula.
Generate a conditional term.
Maximum value of a sequence of terms
Minimum value of a sequence of terms
Generate the disjunction of the given formulas.
Generate the disjunction of the given formulas.
Add quantifiers for the variables with de Bruijn index
0, ..., quans.size - 1
.
Add quantifiers for the variables with de Bruijn index
0, ..., quans.size - 1
. The first quantifier in
quans
will be the innermost quantifier and corresponds
to index 0.
Higher-order syntax for quantifiers.
Higher-order syntax for quantifiers. This makes it possible
to write a quantifier like in
quan(Quantifier.ALL, (a, b, c, d, e) => phi(a, b, c, d, e))
.
Higher-order syntax for quantifiers.
Higher-order syntax for quantifiers. This makes it possible
to write a quantifier like in
quan(Quantifier.ALL, (a, b, c, d) => phi(a, b, c, d))
.
Higher-order syntax for quantifiers.
Higher-order syntax for quantifiers. This makes it possible
to write a quantifier like in
quan(Quantifier.ALL, (a, b, c) => phi(a, b, c))
.
Higher-order syntax for quantifiers.
Higher-order syntax for quantifiers. This makes it possible
to write a quantifier like in
quan(Quantifier.ALL, (a, b) => phi(a, b))
.
Higher-order syntax for quantifiers.
Higher-order syntax for quantifiers. This makes it possible
to write a quantifier like in
quan(Quantifier.ALL, a => phi(a))
.
Replace the constants in quantifiedConstants
with bound variables, and quantify them.
Replace the constants in quantifiedConstants
with bound variables, and quantify them.
Replace consts
with bound variables, and quantify them.
Replace consts
with bound variables, and quantify them.
Quantify some of the variables occurring in a formula.
Add quantifiers for the variables with de Bruijn index
0, ..., quans.size - 1
.
Add quantifiers for the variables with de Bruijn index
0, ..., quans.size - 1
. The first quantifier in
quans
will be the innermost quantifier and corresponds
to index 0.
Add quantifiers for the variables with de Bruijn index
0, ..., sorts.size - 1
.
Add quantifiers for the variables with de Bruijn index
0, ..., sorts.size - 1
. The first sort in
sorts
will be the innermost quantifier and corresponds
to index 0.
Shift all variables by shift
.
Shift all variables by shift
.
Shift all variables with index >= offset
by
shift
.
Shift all variables with index >= offset
by
shift
.
Shift all variables by shift
.
Shift all variables by shift
.
Shift all variables with index >= offset
by
shift
.
Shift all variables with index >= offset
by
shift
.
Shift all variables by shift
.
Shift all variables by shift
.
Shift all variables with index >= offset
by
shift
.
Shift all variables with index >= offset
by
shift
.
Substitute terms for the variables with de Bruijn index
0, ..., replacement.size - 1
, and increment all other
variables by shift
.
Substitute terms for the variables with de Bruijn index
0, ..., replacement.size - 1
, and increment all other
variables by shift
.
Substitute terms for the variables with de Bruijn index
0, ..., replacement.size - 1
, and increment all other
variables by shift
.
Substitute terms for the variables with de Bruijn index
0, ..., replacement.size - 1
, and increment all other
variables by shift
.
Substitute terms for the variables with de Bruijn index
0, ..., replacement.size - 1
, and increment all other
variables by shift
.
Substitute terms for the variables with de Bruijn index
0, ..., replacement.size - 1
, and increment all other
variables by shift
.
Generate the sum of the given terms.
Generate the sum of the given terms.
Implicit conversion, to enable the application of a function
to a sequence of terms, like in f(s, t)
.
Implicit conversion, to enable the application of a function
to a sequence of terms, like in f(s, t)
.
Implicit conversion, to enable the application of a predicate
to a sequence of terms, like in p(s, t)
.
Implicit conversion, to enable the application of a predicate
to a sequence of terms, like in p(s, t)
.
Trigger/patterns that are used to define in which way a quantified formula is supposed to be instantiated.
Trigger/patterns that are used to define in which way a quantified
formula is supposed to be instantiated. Triggers are only allowed to occur
immediately after (inside) a quantifier. This class can both represent
uni-triggers (for patterns.size == 1
and multi-triggers.
Intended use is, for instance,
all(x => trig(f(x) >= 0, f(x)))
.
Update sub-expressions, and directly check whether simplifications are possible.
Update sub-expressions, and directly check whether simplifications are possible.
Update sub-expressions, and directly check whether simplifications are possible.
Update sub-expressions; if the expression changed as a result of the update, check whether simplifications are possible.
Update sub-expressions; if the expression changed as a result of the update, check whether simplifications are possible.
Update sub-expressions; if the expression changed as a result of the update, check whether simplifications are possible.
Generate the variable with de Bruijn index index
and the
given sort.
Generate the variable with de Bruijn index index
and the
given sort.
Generate the variable with de Bruijn index index
and sort
Sort.Integer
.
Generate the variable with de Bruijn index index
and sort
Sort.Integer
.
(Since version ) see corresponding Javadoc for more information.
Companion object of
IExpression
, with various helper methods.