Skip to content

Commit 2669fd7

Browse files
yzhang90dwightguth
authored andcommitted
Allow #AG spec for bounded model checking (runtimeverification#458)
* add dummy definition for allPathGlobally * support #AG builtin * add comment
1 parent 325fb9d commit 2669fd7

5 files changed

Lines changed: 11 additions & 1 deletion

File tree

k-distribution/include/builtin/kast.k

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ module ML-SYNTAX
7979
> K "#Implies" K [klabel(#Implies), symbol, mlOp, poly(0, 1, 2), format(%i%1%d%n%2%n%i%3%d)]
8080
> "#Exists" K "." K [klabel(#Exists), symbol, mlOp, poly(1; 0, 2), mlBinder]
8181
| "#Forall" K "." K [klabel(#Forall), symbol, mlOp, poly(1; 0, 2), mlBinder]
82+
| "#AG" "(" K ")" [klabel(#AG), symbol, mlOp, poly(0, 1)]
83+
8284
endmodule
8385
8486
// To be used when parsing/pretty-printing symbolic configurations

k-distribution/include/kore/prelude.kore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,9 @@ module K
4747
alias weakAlwaysFinally{A}(A) : A
4848
where weakAlwaysFinally{A}(X:A) := X:A []
4949

50+
// Definitions for CTL aliases
51+
// Until we will have `mu` we resort to dummy definitions
52+
alias allPathGlobally{A}(A) : A
53+
where allPathGlobally{A}(X:A) := X:A []
54+
5055
endmodule []

kernel/src/main/java/org/kframework/backend/kore/ConstructorChecks.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public static boolean isBuiltinLabel(KLabel label) {
8080
return label.name().equals(KLabels.ML_FALSE.name()) || label.name().equals(KLabels.ML_TRUE.name()) || label.name().equals(KLabels.ML_NOT.name()) ||
8181
label.name().equals(KLabels.ML_OR.name()) || label.name().equals(KLabels.ML_AND.name()) || label.name().equals(KLabels.ML_IMPLIES.name()) ||
8282
label.name().equals(KLabels.ML_EQUALS.name()) || label.name().equals(KLabels.ML_CEIL.name()) || label.name().equals(KLabels.ML_FLOOR.name()) ||
83-
label.name().equals(KLabels.ML_EXISTS.name()) || label.name().equals(KLabels.ML_FORALL.name());
83+
label.name().equals(KLabels.ML_EXISTS.name()) || label.name().equals(KLabels.ML_FORALL.name()) || label.name().equals(KLabels.CTL_AG.name());
8484
}
8585

8686
private boolean isBuiltinModuloConstructor(KLabel label) {

kernel/src/main/java/org/kframework/backend/kore/ModuleToKORE.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,8 @@ private String convertBuiltinLabel(String klabel) {
10521052
return "\\exists";
10531053
case "#Forall":
10541054
return "\\forall";
1055+
case "#AG":
1056+
return "allPathGlobally";
10551057
default:
10561058
throw KEMException.compilerError("Unsuppored kore connective in rule: " + klabel);
10571059
}

kore/src/main/java/org/kframework/builtin/KLabels.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class KLabels {
4242
public static final KLabel ML_IMPLIES = KLabel("#Implies");
4343
public static final KLabel ML_EXISTS = KLabel("#Exists");
4444
public static final KLabel ML_FORALL = KLabel("#Forall");
45+
public static final KLabel CTL_AG = KLabel("#AG");
4546

4647
public static final KLabel ListItem = KLabel("ListItem");
4748
public static final KLabel List = KLabel("_List_");

0 commit comments

Comments
 (0)