Represents an application of a first-class function in the unfolding procedure
Represents a named function call in the unfolding procedure
Template used to unfold ADT closures that may contain functions.
Template used to unfold ADT closures that may contain functions.
Abstract templates
Abstract templates
Pre-compiled sets of clauses with extra bookkeeping information that enables efficient unfolding of function calls and applications. Template is a super-type for all such clause sets that can be instantiated given a concrete argument list and a blocker in the decision-tree.
Template used to unfold free symbols in the input expression.
Template used to unfold free symbols in the input expression.
Represents an equality relation between two instances of a given type
Template instantiations
Template instantiations
Template instances, when provided with concrete arguments and a blocker, will generate three outputs used for program unfolding: - clauses: clauses that will be added to the underlying solver - call blockers: bookkeeping information necessary for named function unfolding - app blockers: bookkeeping information necessary for first-class function unfolding
This object provides helper methods to deal with the triplets generated during unfolding.
Represents an E-matching matcher that will be used to instantiate relevant quantified propositions
Represents the polarity of the quantification within the considered formula.
Represents the polarity of the quantification within the considered formula. Positive and negative polarity enable optimizations during quantifier instantiation.
Represents a POTENTIAL application of a first-class function in the unfolding procedure
Represents a POTENTIAL application of a first-class function in the unfolding procedure
The equals condition guards the application for equality of the concrete caller with the provided template in order to perform dynamic dispatch.
Represents the kind of instantiator (@see ConstraintTemplate and CaptureTemplate) a given template info is associated to.
Represents the kind of instantiator (@see ConstraintTemplate and CaptureTemplate) a given template info is associated to.
Semi-template used for inner-template equality
Semi-template used for inner-template equality
We introduce a structure here that resembles a Template that is instantiated ONCE when the corresponding template becomes of interest.
Determines whether a given type should be unrolled, depending on the kind of type unrolling, namely free variable type unrolling (dependent types and ADT invariants), contract type unrolling (dependent types), and capture unrolling (function closure ordering).
Determines whether a given type should be unrolled, depending on the kind of type unrolling, namely free variable type unrolling (dependent types and ADT invariants), contract type unrolling (dependent types), and capture unrolling (function closure ordering).
Represents a type unfolding of a free variable (or input) in the unfolding procedure
Represents a type unfolding of a free variable (or input) in the unfolding procedure
Template generator for CaptureTemplate instances.
Template generator for CaptureTemplate instances.
Generator for ConstraintTemplate instances.
Generator for ConstraintTemplate instances.
Constructor object for LambdaTemplate
Constructor object for LambdaTemplate
The apply methods performs some pre-processing before creating an instance of LambdaTemplate.
Generates the clauses and other bookkeeping relevant to a type unfolding template.
Generates the clauses and other bookkeeping relevant to a type unfolding template.
Sets up the relevant unfolding procedure for closure ordering
Sets up the relevant unfolding procedure for closure ordering