package at.iaik.suraq.smtlib; import java.util.Map; import java.util.Set; import at.iaik.suraq.sexp.SExpression; import at.iaik.suraq.sexp.Token; import at.iaik.suraq.smtlib.formula.ArrayVariable; import at.iaik.suraq.smtlib.formula.DomainVariable; import at.iaik.suraq.smtlib.formula.FunctionMacro; import at.iaik.suraq.smtlib.formula.PropositionalVariable; import at.iaik.suraq.smtlib.formula.UninterpretedFunction; public interface SMTLibObject extends Comparable<SMTLibObject> { /** * Returns the elements assert-partition. * * @return assert-partition of the element. contains -1, iff global elements * are present. */ public Set<Integer> getPartitionsFromSymbols(); /** * Converts this formula into an s-expression compatible with SMTLIBv2. Only * the formula itself is converted. No variable/function/macro declarations * are included. * * @return this formulas as an SMTLIBv2 s-expression. */ public SExpression toSmtlibV2(); /** * Returns a set of all array variables used in this formula. * * @return a set of array variables used in this formula. */ public void getArrayVariables(Set<ArrayVariable> result, Set<SMTLibObject> done); /** * Returns a set of all domain variables used in this formula. * * @return a set of domain variables used in this formula. */ public void getDomainVariables(Set<DomainVariable> result, Set<SMTLibObject> done); /** * Returns a set of all propositional variables used in this formula. * * @return a set of propositional variables used in this formula. */ public void getPropositionalVariables(Set<PropositionalVariable> result, Set<SMTLibObject> done); /** * Returns a set of all uninterpreted function names used in this formula. * * @return a set of uninterpreted function names used in this formula. */ public void getUninterpretedFunctionNames(Set<String> result, Set<SMTLibObject> done); /** * Returns a set of all function macro names used in this formula. * * @return a set of all function macro names used in this formula. */ public void getFunctionMacroNames(Set<String> result, Set<SMTLibObject> done); /** * Returns a set of all function macros used in this formula. * * @return a set of all function macros used in this formula. */ public void getFunctionMacros(Set<FunctionMacro> result, Set<SMTLibObject> done); /** * Returns all uninterpreted functions used in this formula. Don't confuse * with <code>getUninterpretedFunctionNames()</code> which just collects the * names of the functions, and not the function objects itself. * * @return a set of all uninterpreted functions used in this formula. */ public void getUninterpretedFunctions(Set<UninterpretedFunction> result, Set<SMTLibObject> done); /** * Substitutes the uninterpreted functions according to the given map. * Parameters are not changed (except for recursive substitutions). * * @param substitutions * @param done * DAG-aware cache * @return */ public SMTLibObject substituteUninterpretedFunction( Map<Token, UninterpretedFunction> substitutions, Map<SMTLibObject, SMTLibObject> done); /** * Returns a formula where all uninterpreted function instances which match * a name in the given set of <code>arrayVars</code> are replaced by * corresponding array reads. * * @param arrayVarsthe * name of the array vars for matching function names against. * @param done * cache to avoid DAG-expansion. * @return a formula where array reads have been put back in. * */ public SMTLibObject uninterpretedFunctionsBackToArrayReads( Set<ArrayVariable> arrayVars, Map<SMTLibObject, SMTLibObject> done); /** * * @return a String representation of this object */ @Override public String toString(); /** * @return the unique ID of this object. */ public long getId(); }