public void check(Sentence sentence) { if (sentence instanceof Rule) { check(((Rule) sentence).body()); } }
private List<Rule> getRulesForStepFunction(List<Rule> rulesWithoutLookup, KLabel l) { List<Rule> res = new ArrayList<>(); for (Rule r : rulesWithoutLookup) { Optional<KLabel> nextOp = getNextOperation(RewriteToTop.toLeft(r.body()), false); if (!nextOp.isPresent() || nextOp.get().equals(l)) { res.add(r); } } return res; }
private void convertComment(Rule r, StringBuilder sb) { sb.append("(*{| rule "); sb.append(ToKast.apply(r.body()).replace("|}", "| )")); sb.append(" requires "); sb.append(ToKast.apply(r.requires()).replace("|)", "| )")); sb.append(" ensures "); sb.append(ToKast.apply(r.ensures()).replace("|)", "| )")); sb.append(" "); sb.append(r.att().toString().replace("|)", "| )")); sb.append("|}*)\n"); }
private Set<KVariable> vars(Rule rule) { Set<KVariable> res = new HashSet<>(); VisitK visitor = new VisitK() { @Override public void apply(KVariable k) { res.add(k); } }; visitor.apply(rule.requires()); visitor.apply(RewriteToTop.toLeft(rule.body())); return res; }
private boolean isInitRule(String initLabel, String cellLabel, Sentence s) { try { // rule initXCell(Init) => <x> ... </x> KRewrite body = (KRewrite) ((Rule) s).body(); KApply left = (KApply) body.left(); KApply right = (KApply) body.right(); return left.klabel().name().equals(initLabel) // initXCell && right.klabel().name().equals(cellLabel); // <x> } catch (ClassCastException ignored) { return false; } }
public Rule addImplicitCells(Rule rule) { return new Rule( addImplicitCells(rule.body()), rule.requires(), rule.ensures(), rule.att()); }
private Rule preprocess(Rule rule) { return Rule( preprocess(rule.body()), preprocess(rule.requires()), preprocess(rule.ensures()), rule.att()); }
private Rule lift(Rule rule) { return Rule( lift(rule.body()), lift(rule.requires()), lift(rule.ensures()), rule.att()); }
private Rule resolve(Rule rule) { return new Rule( transform(rule.body()), transform(rule.requires()), transform(rule.ensures()), rule.att()); }
private Rule expand(Rule rule) { return Rule(expand(rule.body()), expand(rule.requires()), expand(rule.ensures()), rule.att()); }
public Rule applyNormalization(Rule denormal, K... normals) { return Rule( applyNormalization(denormal.body(), normals), applyNormalization(denormal.requires(), normals), applyNormalization(denormal.ensures(), normals), denormal.att()); }
private Rule resolve(Rule rule) { return Rule( transformBody(rule.body(), rule.att()), transform(rule.requires(), rule.att()), rule.ensures(), rule.att()); }
private Rule resolve(Rule rule) { resetCasts(); gatherCasts(rule.body()); gatherCasts(rule.requires()); gatherCasts(rule.ensures()); return new Rule( transform(rule.body()), addSideCondition(transform(rule.requires()), rule.att().contains("macro") || rule.att().contains("alias")), transform(rule.ensures()), rule.att()); }
public Sentence concretize(Sentence m) { if (m instanceof Rule) { Rule r = (Rule) m; return new Rule(concretize(r.body()), r.requires(), r.ensures(), r.att()); } else if (m instanceof Context) { Context c = (Context) m; return new Context(concretize(c.body()), c.requires(), c.att()); } else { return m; } } }