Encoding of ct(args...)
Case classes/ ADT constructors.
Case classes/ ADT constructors. For single-case classes these may coincide
Encoding of value.selector
where value is of a case class type
Encoding of value.selector
where value is of a case class type
If you are not sure about the requirement you should use the adtSelector constructor
Algebraic datatype sort definition.
Algebraic datatype sort definition. An ADT sort is linked to a series of constructors (ADTConstructor) for this particular sort.
Provides the class and function definitions of a program and lookups on them
Provides the class and function definitions of a program and lookups on them
Encoding of ... && ...
Encoding of ... && ...
exprs must contain at least two elements; if you are not sure about this, you should use the and constructor or the andJoin constructor
Compiler annotations given in the source code as @annot.
Compiler annotations given in the source code as @annot.
Encoding of callee(args...)
, where callee is an expression of a function type (not a method)
Encoding of callee(args...)
, where callee is an expression of a function type (not a method)
Local assumption
Local assumption
The predicate to be assumed
The expression following assume(pred)
Encoding of ... >> ...
(32-bit vector) (arithmetic shift, sign-preserving)
Encoding of ... >> ...
(32-bit vector) (arithmetic shift, sign-preserving)
Encoding of ... & ...
(32-bit vector)
Encoding of ... & ...
(32-bit vector)
Encoding of ... >>> ...
(32-bit vector) (logical shift)
Encoding of ... >>> ...
(32-bit vector) (logical shift)
Encoding of a n-bit bitvector literal
Encoding of a n-bit bitvector literal
Encoding of ... .toByte
and other narrowing casts
Encoding of ... .toByte
and other narrowing casts
Encoding of ~...
(32-bit vector)
Encoding of ~...
(32-bit vector)
Encoding of ... | ...
(32-bit vector)
Encoding of ... | ...
(32-bit vector)
Encoding of ... << ...
(32-bit vector)
Encoding of ... << ...
(32-bit vector)
Encoding of ... .toInt
and other widening casts
Encoding of ... .toInt
and other widening casts
Encoding of ... ^ ...
(32-bit vector)
Encoding of ... ^ ...
(32-bit vector)
Encoding of bag + elem
Encoding of bag + elem
Encoding of lhs -- rhs
Encoding of lhs -- rhs
Encoding of lhs & rhs
Encoding of lhs & rhs
Encoding of lhs ++ rhs
Encoding of lhs ++ rhs
Encoding of a boolean literal true or false
Encoding of a boolean literal true or false
Encoding of a character literal
Encoding of a character literal
Encoding of choose(...)
(returns a value satisfying the provided predicate)
Encoding of choose(...)
(returns a value satisfying the provided predicate)
The base trait for Inox definitions
The base trait for Inox definitions
Encoding of ... / ...
Encoding of ... / ...
Division and Remainder follows Java/Scala semantics. Division corresponds to / operator on BigInt and Remainder corresponds to %. Note that in Java/Scala % is called remainder and the "mod" operator (Modulo in Inox) is also defined on BigInteger and differs from Remainder. The "mod" operator returns an always positive remainder, while Remainder could return a negative remainder. The following must hold:
Division(x, y) * y + Remainder(x, y) == x
Encoding of set.contains(element)
or set(element)
Encoding of set.contains(element)
or set(element)
Encoding of ... == ...
Encoding of ... == ...
Represents an expression in Inox.
Represents an expression in Inox.
Encoding of Bag[base](elements)
Encoding of Bag[base](elements)
Encoding of Map[keyType, valueType](key1 -> value1, key2 -> value2 ...)
Encoding of Map[keyType, valueType](key1 -> value1, key2 -> value2 ...)
Encoding of Set[base](elements)
Encoding of Set[base](elements)
Represents source code annotations and some other meaningful flags.
Represents source code annotations and some other meaningful flags.
In order to enable transformations on Flag instances, there is an
implicit contract on args
such that for each argument, either
arg: Expr | Type
, or there exists no Expr or Type instance within arg. arg: Expr | Type }}} or Type instance within arg.
Encoding of forall(...)
(universal quantification)
Encoding of forall(...)
(universal quantification)
Encoding of a fraction literal
Encoding of a fraction literal
Function definition
Function definition
Encoding of function(...)
(function invocation)
Encoding of function(...)
(function invocation)
Generic values.
Generic values. Represent values of the generic type tp
.
This is useful e.g. to present counterexamples of generic types.
Encoding of ... >= ...
Encoding of ... >= ...
Encoding of ... > ...
Encoding of ... > ...
Denotes that this adt has an overriden equality relation given by id
Denotes that this adt has an overriden equality relation given by id
Denotes that this adt is refined by invariant id
Denotes that this adt is refined by invariant id
Encoding of if(...) ... else ...
Encoding of if(...) ... else ...
Encoding of ... ==> ...
(logical implication).
Encoding of ... ==> ...
(logical implication).
Encoding of an infinite precision integer literal
Encoding of an infinite precision integer literal
Encoding of .isInstanceOf[...]
Encoding of .isInstanceOf[...]
Encoding of (args) => body
Encoding of (args) => body
Encoding of ... <= ...
Encoding of ... <= ...
Encoding of ... < ...
Encoding of ... < ...
Encoding of val ... = ...; ...
Encoding of val ... = ...; ...
The ValDef used in body, defined just after val
The value assigned to the identifier, after the = sign
The expression following the
constructval ... = ... ;
Literals
Literals
Encoding of map.apply(key)
(or map(key)
)
Encoding of map.apply(key)
(or map(key)
)
Encoding of map.updated(key, value)
(or map + (key -> value)
)
Encoding of map.updated(key, value)
(or map + (key -> value)
)
Encoding of ... - ...
Encoding of ... - ...
Encoding of ... mod ...
(cannot return negative numbers)
Encoding of ... mod ...
(cannot return negative numbers)
Encoding of bag.get(element)
or bag(element)
Encoding of bag.get(element)
or bag(element)
Encoding of !...
Encoding of !...
Encoding of ... || ...
Encoding of ... || ...
exprs must contain at least two elements; if you are not sure about this, you should use the or constructor or the orJoin constructor
Encodes path conditions
Encodes path conditions
Paths are encoded as an (ordered) series of let-bindings and boolean propositions. A path is satisfiable iff all propositions are true in the context of the provided let-bindings.
This encoding enables let-bindings over types for which equality is not defined, whereas an encoding of let-bindings with equalities could introduce non-sensical equations.
Encoding of ... + ...
Encoding of ... + ...
Encoding of ... % ...
(can return negative numbers)
Encoding of ... % ...
(can return negative numbers)
Encoding of set + elem
Encoding of set + elem
Encoding of set -- set2
Encoding of set -- set2
Encoding of set & set2
Encoding of set & set2
Encoding of set ++ set2
Encoding of set ++ set2
Encoding of lhs + rhs
for strings
Encoding of lhs + rhs
for strings
Encoding of lhs.length
for strings
Encoding of lhs.length
for strings
Encoding of a string literal
Encoding of a string literal
Encoding of lhs.subString(start, end)
for strings
Encoding of lhs.subString(start, end)
for strings
Encoding of set.subsetOf(set2)
Encoding of set.subsetOf(set2)
Trait which gets mixed-in to expressions without subexpressions
Trait which gets mixed-in to expressions without subexpressions
Encoding of ... * ...
Encoding of ... * ...
Encoding of (..., ....)
(tuple)
Encoding of (..., ....)
(tuple)
exprs should always contain at least 2 elements. If you are not sure about this requirement, you should use the tupleWrap constructor
The expressions in the tuple
Encoding of (tuple)._i
Encoding of (tuple)._i
Index is 1-based, first element of tuple is 1. If you are not sure that tuple is indeed of a TupleType, you should use one of the SymbolOps.tupleSelect(t:SymbolOps\.this\.trees\.Expr,index:Int,originalSize:Int)* SymbolOps.tupleSelect(t:SymbolOps\.this\.trees\.Expr,index:Int,isTuple:Boolean)* constructors
Represents an ADTConstructor whose type parameters have been instantiated to tps
Represents an ADTConstructor whose type parameters have been instantiated to tps
Represents an ADTSort whose type parameters have been instantiated to tps
Represents an ADTSort whose type parameters have been instantiated to tps
Represents a FunDef whose type parameters have been instantiated with the specified types
Represents a FunDef whose type parameters have been instantiated with the specified types
Encoding of - ...
Encoding of - ...
Encoding of the unit literal ()
Encoding of the unit literal ()
A ValDef declares a formal parameter (with symbol id) to be of a certain type.
A ValDef declares a formal parameter (with symbol id) to be of a certain type.
Variable
Common super-type for ValDef and Variable.
Common super-type for ValDef and Variable.
Both types share much in common and being able to reason about them in a uniform manner can be useful in certain cases.
NAryType extractor to extract any Type in a consistent way.
NAryType extractor to extract any Type in a consistent way.
Deconstructors.Operator about why we can't have nice(r) things
Operator Extractor to extract any Expression in a consistent way.
Operator Extractor to extract any Expression in a consistent way.
You can match on any Inox Expr, and then get both a Seq[Expr] of subterms and a builder function that takes a Seq of subterms (of same length) and rebuild the original node.
Those extractors do not perform any syntactic simplifications. They rebuild the node using the case class (not the constructor, that performs simplifications). The rational behind this decision is to have core tools for performing tree transformations that are very predictable, if one need to simplify the tree, it is easy to write/call a simplification function that would simply apply the corresponding constructor for each node.
Returns true if the two group of identifiers ovelap.
Encoding of &&
-expressions with arbitrary number of operands, and simplified.
Encoding of &&
-expressions with arbitrary number of operands, and simplified.
Encoding of &&
-expressions with arbitrary number of operands as a sequence, and simplified.
Encoding of &&
-expressions with arbitrary number of operands as a sequence, and simplified.
Encoding of simplified assume(pred, body)
(assumption).
Encoding of simplified assume(pred, body)
(assumption).
Transforms
assume(assume(pred1, pred2), body)
and
assume(pred1, assume(pred2, body))
into
assume(pred1 && pred2, body)
Encoding of simplified ... == ...
(equality).
Encoding of simplified ... == ...
(equality).
Encoding of simplified ... ==> ...
(implication)
Encoding of simplified ... ==> ...
(implication)
Encoding of simplified ... - ...
(minus).
Encoding of simplified ... - ...
(minus).
Encoding of simplified !
-expressions .
Encoding of simplified !
-expressions .
Encoding of ||
-expressions with arbitrary number of operands, and simplified.
Encoding of ||
-expressions with arbitrary number of operands, and simplified.
Encoding of ||
-expressions with arbitrary number of operands as a sequence, and simplified.
Encoding of ||
-expressions with arbitrary number of operands as a sequence, and simplified.
Encoding of simplified ... + ...
(plus).
Encoding of simplified ... + ...
(plus).
Encoding of simplified ... * ...
(times).
Encoding of simplified ... * ...
(times).
Wraps the sequence of types as a tuple.
Wraps the sequence of types as a tuple. If the sequence contains a single type, it is returned instead. If the sequence is empty, the UnitType is returned.
Wraps the sequence of expressions as a tuple.
Wraps the sequence of expressions as a tuple. If the sequence contains a single expression, it is returned instead.