private Context resolve(Context context) { resetVars(); gatherVars(context.body()); gatherVars(context.requires()); gatherTerms(context.body(), true); gatherTerms(context.requires(), false); filterTerms(context.body(), true); filterTerms(context.requires(), false); return new Context( transform(context.body(), true), transform(context.requires(), false), context.att()); }
@Override public void apply(K k) { if (isLHS() && !isRHS() && !(k instanceof KVariable)) { cache.put(k, newDotVariable(sorts.sort(k, Sorts.K()))); } super.apply(k); }
public static String getKompiledString(Module mainModule, KLabel topCellInitializer, FileUtil files, boolean heatCoolEquations) { mainModule = new GenerateSortPredicateRules(true).gen(mainModule); mainModule = ModuleTransformer.fromKTransformer(new AddSortInjections(mainModule)::addInjections, "Add sort injections").apply(mainModule); mainModule = ModuleTransformer.fromSentenceTransformer(new MinimizeTermConstruction(mainModule)::resolve, "Minimize term construction").apply(mainModule); ModuleToKORE moduleToKORE = new ModuleToKORE(mainModule, files, topCellInitializer); String kompiledString = moduleToKORE.convert(heatCoolEquations); Properties koreToKLabels = new Properties(); koreToKLabels.putAll(moduleToKORE.getKToKoreLabelMap().inverse()); try { FileOutputStream output = new FileOutputStream(files.resolveKompiled("kore_to_k_labels.properties")); koreToKLabels.store(output, "Properties file containing the mapping from kore to k labels"); } catch (IOException e) { throw KEMException.criticalError("Error while saving kore to K labels map", e); } return kompiledString; }
private Rule resolve(Rule rule) { resetVars(); gatherVars(rule.body()); gatherVars(rule.requires()); gatherVars(rule.ensures()); gatherTerms(rule.body(), true); gatherTerms(rule.requires(), false); gatherTerms(rule.ensures(), false); filterTerms(rule.body(), true); filterTerms(rule.requires(), false); filterTerms(rule.ensures(), false); return new Rule( transform(rule.body(), true), transform(rule.requires(), false), transform(rule.ensures(), false), rule.att()); }