package models.formulas.meta;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import models.algebra.Variable;
import models.formulas.Formula;
import models.terms.RDLTerm;
import models.terms.meta.MatchConstraint;
public abstract class MetaFormula {
public Set<MatchConstraint> isMatchedBy(Formula formula) {
return isMatchedBy(formula, new MatchConstraint(new HashMap<>(), new HashMap<>()));
}
public abstract Set<MatchConstraint> isMatchedBy(Formula formula, MatchConstraint constraint);
public Set<MatchConstraint> isMatchedBy(Formula formula, Set<MatchConstraint> constraints) {
Set<MatchConstraint> result = new HashSet<>();
for (MatchConstraint constraint: constraints) {
result.addAll(isMatchedBy(formula, constraint));
}
return result;
}
public abstract Formula substitution(Map<Variable, RDLTerm> binding);
public abstract <T extends RDLTerm> Set<T> getSubTerms(Class<T> clazz);
public abstract String toString();
public abstract boolean equals(Object another);
public abstract int hashCode();
}