/** * Author: Georg Hofferek <georg.hofferek@iaik.tugraz.at> */ package at.iaik.suraq.smtlib.formula; import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import at.iaik.suraq.sexp.SExpression; import at.iaik.suraq.sexp.SExpressionConstants; import at.iaik.suraq.sexp.Token; import at.iaik.suraq.smtlib.SMTLibObject; /** * * This class represents domain terms. A domain term is either a domain * variable, (a domain constant,) an array read expression, or a function call. * * @author Georg Hofferek <georg.hofferek@iaik.tugraz.at> * */ public abstract class DomainTerm extends Term implements Serializable { /** * */ private static final long serialVersionUID = -328749262145943504L; /** * Checks whether this term consists of evars (with respect to the given * list of uvars) only. * * @param uVars * a collection of uvars. * @return <code>true</code> if this term consists of evars only, * <code>false</code> otherwise. */ public abstract boolean isEvar(Collection<DomainVariable> uVars); /** * @see at.iaik.suraq.smtlib.formula.Term#getType() */ @Override public SExpression getType() { return SExpressionConstants.VALUE_TYPE; } /** * Returns a deep copy of this term. * * @return a deep copy of this term. */ @Override public abstract DomainTerm deepTermCopy(); @Override public abstract DomainTerm substituteUninterpretedFunction( Map<Token, UninterpretedFunction> substitutions, Map<SMTLibObject, SMTLibObject> done); /** * @see at.iaik.suraq.formula.Term#uninterpretedPredicatesToAuxiliaryVariables(t) */ @Override public abstract Term uninterpretedPredicatesToAuxiliaryVariablesTerm( Formula topLeveFormula, Map<String, List<PropositionalVariable>> predicateInstances, Map<PropositionalVariable, List<DomainTerm>> instanceParameters, Set<Token> noDependenceVars); /** * @see at.iaik.suraq.formula.Term#uninterpretedFunctionsToAuxiliaryVariables(at.iaik.suraq.formula.Formula, * java.util.Set, java.util.Set) */ @Override public abstract Term uninterpretedFunctionsToAuxiliaryVariablesTerm( Formula topLeveFormula, Map<String, List<DomainVariable>> functionInstances, Map<DomainVariable, List<DomainTerm>> instanceParameters, Set<Token> noDependenceVars); /** * @see at.iaik.suraq.smtlib.formula.Term#removeDomainITE(at.iaik.suraq.smtlib.formula.Formula, * java.util.Set, java.util.List) */ @Override public abstract DomainTerm removeDomainITE(Formula topLevelFormula, Set<Token> noDependenceVars, List<Formula> andPreList); /** * @see at.iaik.suraq.smtlib.formula.Term#removeArrayITE(at.iaik.suraq.smtlib.formula.Formula, * java.util.Set, java.util.Collection) */ @Override public abstract DomainTerm removeArrayITE(Formula topLevelFormula, Set<Token> noDependenceVars, Collection<Formula> constraints); }