package de.psi.alloy4smt.smt; import java.util.List; import java.util.Vector; public class SMTFormula { private final List<SExpr<String>> constraints = new Vector<SExpr<String>>(); private final List<String> boolvars = new Vector<String>(); private final List<String> intvars = new Vector<String>(); @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("(set-logic QF_NRA)\n"); sb.append("(set-info :smt-lib-version 2.0)\n"); sb.append(getVariableDecls()); sb.append(getConstraints()); return sb.toString(); } public void addConstraint(SExpr<String> expr) { constraints.add(SExpr.call("assert", expr)); } public void addBoolVariable(String varname) { boolvars.add(varname); } public void addIntegerVariable(String varname) { intvars.add(varname); } public String getVariableDecls() { StringBuilder sb = new StringBuilder(); for (String varname : boolvars) { sb.append("(declare-fun "); sb.append(varname); sb.append(" () Bool)\n"); } for (String varname : intvars) { sb.append("(declare-fun "); sb.append(varname); sb.append(" () Int)\n"); } return sb.toString(); } public String getConstraints() { StringBuilder sb = new StringBuilder(); for (SExpr<String> c : constraints) sb.append(c.toString() + "\n"); return sb.toString(); } }