Skip to content

Commit

Permalink
fixed verification of variant
Browse files Browse the repository at this point in the history
  • Loading branch information
Maximilian Kodetzki committed Oct 13, 2023
1 parent de13cbe commit 878fe9e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public class KeYFileContent {
private List<Condition> postConditions;
// TODO: ProveWithKey passes this to us as String. It would be better to keep it as Variable.
private List<String> unmodifiableVars;
private String variant;

private Map<String, List<Field>> methodClassVarMap = null;
private Map<String, String> returnTypeMap = null;
Expand Down Expand Up @@ -453,7 +454,7 @@ private String getAssignmentString(Map<String, OldReplacement> oldReplacements)
assignments.add("heapAtPre := heap");
assignments.addAll(getUnmodifiableAssignments());
assignments.addAll(getOldAssignments(oldReplacements));

if (variant != null) assignments.add("variant := " + variant);
assignments.removeIf(v -> v.equals(""));

return String.join(" || ", assignments);
Expand Down Expand Up @@ -498,6 +499,11 @@ private List<String> getUnmodifiablePostConditions() {
return conds;
}

public void setVariantPost(String variant) {
this.variant = variant;
setPostFromCondition("(" + variant + ") <variant & " + variant + ">=0");
}

private String replaceThisWithSelf(String string) {
return string.replaceAll(REGEX_THIS_KEYWORD.pattern(), "self");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,7 @@ public File createProveVariantWithKey(String code, Condition invariant, Conditio
content.addVariable("int variant");
content.readGlobalConditions(conds);
content.setPreFromCondition(invariant.getName() + " & " + guard.getName());
content.setVariantPost(variant.getName());
content.setStatement(code);
content.rename(renaming);
content.addSelf(formula);
Expand Down

0 comments on commit 878fe9e

Please sign in to comment.