public class FormulaTermLabelRefactoring extends java.lang.Object implements TermLabelRefactoring
TermLabelRefactoring used to label predicates with a
FormulaTermLabel on applied loop invariants or operation contracts.TermLabelRefactoring.RefactoringScope| Modifier and Type | Field and Description |
|---|---|
private static java.lang.String |
INNER_MOST_PARENT_REFACTORED_PREFIX
Key prefix used in
TermLabelState to store that the inner most
label was already refactored on a given Goal. |
private static java.lang.String |
PARENT_REFACTORING_REQUIRED
Key used in
TermLabelState by the FormulaTermLabelUpdate
to indicate that a refactoring of parents
(RefactoringScope#APPLICATION_CHILDREN_AND_GRANDCHILDREN_SUBTREE_AND_PARENTS)
is required performed by
refactorInCaseOfNewIdRequired(TermLabelState, Goal, Term, Services, List). |
private static java.lang.String |
SEQUENT_FORMULA_REFACTORING_REQUIRED
Key used in
TermLabelState by the FormulaTermLabelUpdate
to indicate that a refactoring of specified SequentFormulas
(RefactoringScope#SEQUENT)
is required performed by
refactorSequentFormulas(TermLabelState, Services, Term, List). |
private static java.lang.String |
UPDATE_REFACTORING_REQUIRED
Key used in
TermLabelState by the StayOnOperatorTermLabelPolicy
to indicate that a refactoring below an update
(RefactoringScope#APPLICATION_BELOW_UPDATES)
is required performed by
refactorBewlowUpdates(PosInOccurrence, Term, List). |
| Constructor and Description |
|---|
FormulaTermLabelRefactoring() |
| Modifier and Type | Method and Description |
|---|---|
static void |
addSequentFormulaToRefactor(TermLabelState state,
SequentFormula sf)
Adds the given
SequentFormula for refactoring purpose. |
static boolean |
containsSequentFormulasToRefactor(TermLabelState state)
Checks if
SequentFormulas to refactor are specified. |
TermLabelRefactoring.RefactoringScope |
defineRefactoringScope(TermLabelState state,
Services services,
PosInOccurrence applicationPosInOccurrence,
Term applicationTerm,
Rule rule,
Goal goal,
java.lang.Object hint,
Term tacletTerm)
Defines if a refactoring is required and if so in which
TermLabelRefactoring.RefactoringScope. |
static java.util.Set<SequentFormula> |
getSequentFormulasToRefactor(TermLabelState state)
Returns the
SequentFormulas to refactor. |
ImmutableList<Name> |
getSupportedRuleNames()
Returns the supported rule
Names or null or an empty
list if all rules are supported. |
static boolean |
isInnerMostParentRefactored(TermLabelState state,
Goal goal)
Checks if the inner most parent was already refactored on the given
Goal. |
static boolean |
isParentRefactroingRequired(TermLabelState state)
Checks if a refactoring of parents is required.
|
static boolean |
isUpdateRefactroingRequired(TermLabelState state)
Checks if a refactoring below the updates is required.
|
protected void |
refactorBewlowUpdates(PosInOccurrence applicationPosInOccurrence,
Term term,
java.util.List<TermLabel> labels)
Refactors the
Term below its update. |
void |
refactoreLabels(TermLabelState state,
Services services,
PosInOccurrence applicationPosInOccurrence,
Term applicationTerm,
Rule rule,
Goal goal,
java.lang.Object hint,
Term tacletTerm,
Term term,
java.util.List<TermLabel> labels)
This method is used to refactor the labels of the given
Term. |
protected void |
refactorInCaseOfNewIdRequired(TermLabelState state,
Goal goal,
Term term,
Services services,
java.util.List<TermLabel> labels)
Refactors in case that the inner most label needs a new ID.
|
protected void |
refactorSequentFormulas(TermLabelState state,
Services services,
Term term,
java.util.List<TermLabel> labels)
Refactors the specified
SequentFormulas. |
protected void |
refactorSpecificationApplication(Term term,
Goal goal,
Services services,
java.util.List<TermLabel> labels,
java.lang.Object hint)
Refactors a specification application.
|
protected void |
refactorSubstitution(Term term,
Term tacletTerm,
java.util.List<TermLabel> labels)
Refactors the given
Term after a substitiution. |
static void |
setInnerMostParentRefactored(TermLabelState state,
Goal goal,
boolean refactored)
Defines if the inner most parent was already refactored on the given
Goal. |
static void |
setParentRefactroingRequired(TermLabelState state,
boolean required)
Defines if a refactoring of parents is required.
|
static void |
setUpdateRefactroingRequired(TermLabelState state,
boolean required)
Defines if a refactoring below the updates is required.
|
protected boolean |
shouldRefactorSpecificationApplication(Rule rule,
Goal goal,
java.lang.Object hint)
Checks if the given hint requires a refactoring.
|
private static final java.lang.String INNER_MOST_PARENT_REFACTORED_PREFIX
TermLabelState to store that the inner most
label was already refactored on a given Goal.private static final java.lang.String UPDATE_REFACTORING_REQUIRED
TermLabelState by the StayOnOperatorTermLabelPolicy
to indicate that a refactoring below an update
(RefactoringScope#APPLICATION_BELOW_UPDATES)
is required performed by
refactorBewlowUpdates(PosInOccurrence, Term, List).
This is for instance required for the following rules:
concrete_and_1concrete_and_2concrete_and_3concrete_and_4concrete_eq_1concrete_eq_2concrete_eq_3concrete_eq_4concrete_impl_1concrete_impl_2concrete_impl_3concrete_impl_4concrete_not_1concrete_not_2concrete_or_1concrete_or_2concrete_or_3concrete_or_4private static final java.lang.String PARENT_REFACTORING_REQUIRED
TermLabelState by the FormulaTermLabelUpdate
to indicate that a refactoring of parents
(RefactoringScope#APPLICATION_CHILDREN_AND_GRANDCHILDREN_SUBTREE_AND_PARENTS)
is required performed by
refactorInCaseOfNewIdRequired(TermLabelState, Goal, Term, Services, List).
This is for instance required if a rule is applied on a sub term without
a FormulaTermLabel of a parent which has a FormulaTermLabel.
Example rules are:
ifthenelse_splitarrayLengthNotNegativeprivate static final java.lang.String SEQUENT_FORMULA_REFACTORING_REQUIRED
TermLabelState by the FormulaTermLabelUpdate
to indicate that a refactoring of specified SequentFormulas
(RefactoringScope#SEQUENT)
is required performed by
refactorSequentFormulas(TermLabelState, Services, Term, List).
This is for instance required if the assumes clause of a rule has
a FormulaTermLabel but the application does not have it.
Example rules are:
inEqSimp_contradInEq1public ImmutableList<Name> getSupportedRuleNames()
Names or null or an empty
list if all rules are supported.getSupportedRuleNames in interface RuleSpecificTaskNames or null/empty list if all rules are supported.public TermLabelRefactoring.RefactoringScope defineRefactoringScope(TermLabelState state, Services services, PosInOccurrence applicationPosInOccurrence, Term applicationTerm, Rule rule, Goal goal, java.lang.Object hint, Term tacletTerm)
TermLabelRefactoring.RefactoringScope.defineRefactoringScope in interface TermLabelRefactoringstate - The TermLabelState of the current rule application.services - The Services used by the Proof on which a Rule is applied right now.applicationPosInOccurrence - The PosInOccurrence in the previous Sequent which defines the Term that is rewritten.applicationTerm - The Term defined by the PosInOccurrence in the previous Sequent.rule - The Rule which is applied.goal - The optional Goal on which the Term to create will be used.hint - An optional hint passed from the active rule to describe the term which should be created.tacletTerm - The optional taclet Term.TermLabelRefactoring.RefactoringScope.protected boolean shouldRefactorSpecificationApplication(Rule rule, Goal goal, java.lang.Object hint)
public void refactoreLabels(TermLabelState state, Services services, PosInOccurrence applicationPosInOccurrence, Term applicationTerm, Rule rule, Goal goal, java.lang.Object hint, Term tacletTerm, Term term, java.util.List<TermLabel> labels)
Term.refactoreLabels in interface TermLabelRefactoringstate - The TermLabelState of the current rule application.services - The Services used by the Proof on which a Rule is applied right now.applicationPosInOccurrence - The PosInOccurrence in the previous Sequent which defines the Term that is rewritten.applicationTerm - The Term defined by the PosInOccurrence in the previous Sequent.rule - The Rule which is applied.goal - The optional Goal on which the Term to create will be used.hint - An optional hint passed from the active rule to describe the term which should be created.tacletTerm - The optional taclet Term.term - The Term which is now refactored.labels - The new labels the Term will have after the refactoring.protected void refactorSpecificationApplication(Term term, Goal goal, Services services, java.util.List<TermLabel> labels, java.lang.Object hint)
protected void refactorInCaseOfNewIdRequired(TermLabelState state, Goal goal, Term term, Services services, java.util.List<TermLabel> labels)
state - The TermLabelState of the current rule application.goal - The optional Goal on which the Term to create will be used.term - The Term which is now refactored.services - The Services used by the Proof on which a Rule is applied right now.labels - The new labels the Term will have after the refactoring.protected void refactorBewlowUpdates(PosInOccurrence applicationPosInOccurrence, Term term, java.util.List<TermLabel> labels)
Term below its update.applicationPosInOccurrence - The PosInOccurrence in the previous Sequent which defines the Term that is rewritten.term - The Term which is now refactored.labels - The new labels the Term will have after the refactoring.protected void refactorSequentFormulas(TermLabelState state, Services services, Term term, java.util.List<TermLabel> labels)
SequentFormulas.protected void refactorSubstitution(Term term, Term tacletTerm, java.util.List<TermLabel> labels)
Term after a substitiution.public static boolean isInnerMostParentRefactored(TermLabelState state, Goal goal)
Goal.state - The TermLabelState to read from.goal - The Goal to check.true already refactored, false not refactored yet.public static void setInnerMostParentRefactored(TermLabelState state, Goal goal, boolean refactored)
Goal.state - The TermLabelState to read from.goal - The Goal to check.refactored - true already refactored, false not refactored yet.public static boolean isUpdateRefactroingRequired(TermLabelState state)
state - The TermLabelState to read from.true refactoring required, false refactoring is not required.public static void setUpdateRefactroingRequired(TermLabelState state, boolean required)
state - The TermLabelState to modify.required - true refactoring required, false refactoring is not required.public static boolean isParentRefactroingRequired(TermLabelState state)
state - The TermLabelState to read from.true refactoring required, false refactoring is not required.public static void setParentRefactroingRequired(TermLabelState state, boolean required)
state - The TermLabelState to modify.required - true refactoring required, false refactoring is not required.public static boolean containsSequentFormulasToRefactor(TermLabelState state)
SequentFormulas to refactor are specified.state - The TermLabelState to read from.true at least one SequentFormula needs to be refactored, false refactoring is not required.public static java.util.Set<SequentFormula> getSequentFormulasToRefactor(TermLabelState state)
SequentFormulas to refactor.state - The TermLabelState to read from.SequentFormulas to refactor.public static void addSequentFormulaToRefactor(TermLabelState state, SequentFormula sf)
SequentFormula for refactoring purpose.state - The TermLabelState to modify.sf - The SequentFormula to add.