public class LoopInvariantBuiltInRuleApp extends AbstractBuiltInRuleApp
| Modifier and Type | Field and Description |
|---|---|
private ExecutionContext |
executionContext |
private Term |
guard |
private List<LocationVariable> |
heapContext |
private IFProofObligationVars |
infFlowVars |
private LoopInvariant |
inv |
private While |
loop |
private TermServices |
services |
builtInRule, ifInsts, pio| Modifier | Constructor and Description |
|---|---|
protected |
LoopInvariantBuiltInRuleApp(BuiltInRule rule,
PosInOccurrence pio,
ImmutableList<PosInOccurrence> ifInsts,
LoopInvariant inv,
List<LocationVariable> heapContext,
TermServices services) |
protected |
LoopInvariantBuiltInRuleApp(BuiltInRule rule,
PosInOccurrence pio,
LoopInvariant inv,
TermServices services) |
|
LoopInvariantBuiltInRuleApp(BuiltInRule rule,
PosInOccurrence pos,
TermServices services) |
execute, forceInstantiate, ifInsts, posInOccurrence, rule, setMutable, toStringprivate final While loop
private LoopInvariant inv
private final List<LocationVariable> heapContext
private IFProofObligationVars infFlowVars
private ExecutionContext executionContext
private Term guard
private final TermServices services
public LoopInvariantBuiltInRuleApp(BuiltInRule rule, PosInOccurrence pos, TermServices services)
protected LoopInvariantBuiltInRuleApp(BuiltInRule rule, PosInOccurrence pio, ImmutableList<PosInOccurrence> ifInsts, LoopInvariant inv, List<LocationVariable> heapContext, TermServices services)
protected LoopInvariantBuiltInRuleApp(BuiltInRule rule, PosInOccurrence pio, LoopInvariant inv, TermServices services)
private LoopInvariant instantiateIndexValues(LoopInvariant rawInv, TermServices services)
\index keyword from JML.
The values function symbol is a placeholder which stems from translating the \values keyword from JML.
Both are used to refer to a runtime-generated variable.
If the loop guard has the form i < x, index is instantiated with i,
if the second statement in the loop body has the form v = xxx,
where v is a ghost variable of type sequence, values is instantiated with v,
otherwise rawInv is returned.services - TODOpublic boolean complete()
AbstractBuiltInRuleAppcomplete in interface RuleAppcomplete in class AbstractBuiltInRuleApppublic LoopInvariant getInvariant()
public While getLoopStatement()
public boolean invariantAvailable()
public boolean isSufficientlyComplete()
IBuiltInRuleAppisSufficientlyComplete in interface IBuiltInRuleAppisSufficientlyComplete in class AbstractBuiltInRuleApppublic Term programTerm()
public LoopInvariantBuiltInRuleApp replacePos(PosInOccurrence newPos)
replacePos in interface IBuiltInRuleAppreplacePos in class AbstractBuiltInRuleApppublic LoopInvariant retrieveLoopInvariantFromSpecification(Services services)
public LoopInvariantBuiltInRuleApp setIfInsts(ImmutableList<PosInOccurrence> ifInsts)
setIfInsts in interface IBuiltInRuleAppsetIfInsts in class AbstractBuiltInRuleApppublic LoopInvariantBuiltInRuleApp setLoopInvariant(LoopInvariant inv)
public void setInformationFlowProofObligationVars(IFProofObligationVars vars)
public void setGuard(Term guard)
public void setExecutionContext(ExecutionContext context)
public LoopInvariantBuiltInRuleApp tryToInstantiate(Goal goal)
IBuiltInRuleAppUserInterfaceControl to complete a built-in rule.
Returns a complete app only if there is exactly one contract.
If you want a complete app for combined contracts, use forceInstantiate instead.
For an example implementation see e.g. UseOperationContractRule or UseDependencyContractRule.tryToInstantiate in interface IBuiltInRuleApptryToInstantiate in class AbstractBuiltInRuleApppublic boolean variantAvailable()
public boolean variantRequired()
public List<LocationVariable> getHeapContext()
getHeapContext in interface IBuiltInRuleAppgetHeapContext in class AbstractBuiltInRuleApppublic IFProofObligationVars getInformationFlowProofObligationVars()
public Term getGuard()
public ExecutionContext getExecutionContext()