The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates.
The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates. If the key of two such
templates are equal, then they must necessarily be equal in every model.
The instantiation consists of the clause set instantiation (in the sense of Template.instantiate that is required for dependencies to make sense in the solver (introduces blockers, lambdas, quantifications, etc.) Since dependencies CHANGE during instantiation and key makes no sense without the associated instantiation, the implicit contract here is that whenever a new key appears during unfolding, its associated instantiation MUST be added to the set of instantiations managed by the solver. However, if an identical (or subsuming) pre-existing key has already been found, then the associated instantiation must already appear in the handled by the solver and the new one can be discarded.
The locals value consists of the dependencies on which the substitution resulting from instantiation has been applied. The dependencies should not be directly used here as they may depend on closure and quantifier ids that were only obtained when instantiation was computed.
The instantiationSubst substitution corresponds that applied to dependencies when constructing locals.
The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates.
The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates. If the key of two such
templates are equal, then they must necessarily be equal in every model.
The instantiation consists of the clause set instantiation (in the sense of Template.instantiate that is required for dependencies to make sense in the solver (introduces blockers, lambdas, quantifications, etc.) Since dependencies CHANGE during instantiation and key makes no sense without the associated instantiation, the implicit contract here is that whenever a new key appears during unfolding, its associated instantiation MUST be added to the set of instantiations managed by the solver. However, if an identical (or subsuming) pre-existing key has already been found, then the associated instantiation must already appear in the handled by the solver and the new one can be discarded.
The locals value consists of the dependencies on which the substitution resulting from instantiation has been applied. The dependencies should not be directly used here as they may depend on closure and quantifier ids that were only obtained when instantiation was computed.
The instantiationSubst substitution corresponds that applied to dependencies when constructing locals.
The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates.
The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates. If the key of two such
templates are equal, then they must necessarily be equal in every model.
The instantiation consists of the clause set instantiation (in the sense of Template.instantiate that is required for dependencies to make sense in the solver (introduces blockers, lambdas, quantifications, etc.) Since dependencies CHANGE during instantiation and key makes no sense without the associated instantiation, the implicit contract here is that whenever a new key appears during unfolding, its associated instantiation MUST be added to the set of instantiations managed by the solver. However, if an identical (or subsuming) pre-existing key has already been found, then the associated instantiation must already appear in the handled by the solver and the new one can be discarded.
The locals value consists of the dependencies on which the substitution resulting from instantiation has been applied. The dependencies should not be directly used here as they may depend on closure and quantifier ids that were only obtained when instantiation was computed.
The instantiationSubst substitution corresponds that applied to dependencies when constructing locals.
The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates.
The key value (triplet of body, a normalization of the pathVar
of contents and locals)
is used to determine syntactic equality between inner-templates. If the key of two such
templates are equal, then they must necessarily be equal in every model.
The instantiation consists of the clause set instantiation (in the sense of Template.instantiate that is required for dependencies to make sense in the solver (introduces blockers, lambdas, quantifications, etc.) Since dependencies CHANGE during instantiation and key makes no sense without the associated instantiation, the implicit contract here is that whenever a new key appears during unfolding, its associated instantiation MUST be added to the set of instantiations managed by the solver. However, if an identical (or subsuming) pre-existing key has already been found, then the associated instantiation must already appear in the handled by the solver and the new one can be discarded.
The locals value consists of the dependencies on which the substitution resulting from instantiation has been applied. The dependencies should not be directly used here as they may depend on closure and quantifier ids that were only obtained when instantiation was computed.
The instantiationSubst substitution corresponds that applied to dependencies when constructing locals.
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.