Package net.hydromatic.morel.util
Class Unifier
- java.lang.Object
-
- net.hydromatic.morel.util.Unifier
-
- Direct Known Subclasses:
MartelliUnifier,RobinsonUnifier
public abstract class Unifier extends Object
Given pairs of terms, finds a substitution to minimize those pairs of terms.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceUnifier.ActionCalled by the unifier when a Term's type becomes known.private static classUnifier.CycleExceptionControl flow exception, thrown byUnifier.Term.checkCycle(Map, Map)if it finds a cycle in a substitution map.static classUnifier.FailureResult indicating that unification was not possible.static interfaceUnifier.ResultResult of attempting unification.static classUnifier.SequenceA sequence of terms.static classUnifier.SubstitutionMap from variables to terms.static classUnifier.SubstitutionResultThe results of a successful unification.static interfaceUnifier.TermTerm (variable, symbol or node).static classUnifier.TermTermA pair of terms.static interfaceUnifier.TermVisitor<R>Visitor for terms.static interfaceUnifier.TracerCalled on various events during unification.static classUnifier.VariableA variable that represents a symbol or a sequence; unification's task is to find the substitutions for such variables.
-
Field Summary
Fields Modifier and Type Field Description private Map<String,Unifier.Sequence>atomMapprivate Map<String,Unifier.Sequence>sequenceMapprivate Map<String,Unifier.Variable>variableMapprivate intvarId
-
Constructor Summary
Constructors Constructor Description Unifier()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description Unifier.Sequenceapply(String operator, Iterable<? extends Unifier.Term> args)Creates a sequence, or returns an existing one with the same terms.Unifier.Sequenceapply(String operator, Unifier.Term... args)Creates a sequence, or returns an existing one with the same terms.Unifier.Termatom(String name)Creates an atom, or returns an existing one with the same name.private static voidcheckCycles(Map<Unifier.Variable,Unifier.Term> map, Map<Unifier.Variable,Unifier.Variable> active)protected Unifier.Failurefailure(String reason)booleanoccurs()Whether this unifier checks for cycles in substitutions.(package private) static Unifier.SequencesequenceApply(String operator, Map<Unifier.Variable,Unifier.Term> substitutions, Iterable<Unifier.Term> terms)Unifier.Substitutionsubstitution(Unifier.Term... varTerms)Creates a substitution.abstract Unifier.Resultunify(List<Unifier.TermTerm> termPairs, Map<Unifier.Variable,Unifier.Action> termActions, Unifier.Tracer tracer)Unifier.Variablevariable()Creates a new variable, with a new name.Unifier.Variablevariable(String name)Creates a variable, or returns an existing one with the same name.
-
-
-
Field Detail
-
varId
private int varId
-
variableMap
private final Map<String,Unifier.Variable> variableMap
-
atomMap
private final Map<String,Unifier.Sequence> atomMap
-
sequenceMap
private final Map<String,Unifier.Sequence> sequenceMap
-
-
Method Detail
-
occurs
public boolean occurs()
Whether this unifier checks for cycles in substitutions.
-
apply
public Unifier.Sequence apply(String operator, Unifier.Term... args)
Creates a sequence, or returns an existing one with the same terms.
-
apply
public Unifier.Sequence apply(String operator, Iterable<? extends Unifier.Term> args)
Creates a sequence, or returns an existing one with the same terms.
-
variable
public Unifier.Variable variable(String name)
Creates a variable, or returns an existing one with the same name.
-
variable
public Unifier.Variable variable()
Creates a new variable, with a new name.
-
atom
public Unifier.Term atom(String name)
Creates an atom, or returns an existing one with the same name.
-
substitution
public Unifier.Substitution substitution(Unifier.Term... varTerms)
Creates a substitution.The arguments are alternating variable / term pairs. For example,
substitution(a, x, b, y)becomes [a/X, b/Y].
-
sequenceApply
static Unifier.Sequence sequenceApply(String operator, Map<Unifier.Variable,Unifier.Term> substitutions, Iterable<Unifier.Term> terms)
-
unify
@Nonnull public abstract Unifier.Result unify(List<Unifier.TermTerm> termPairs, Map<Unifier.Variable,Unifier.Action> termActions, Unifier.Tracer tracer)
-
checkCycles
private static void checkCycles(Map<Unifier.Variable,Unifier.Term> map, Map<Unifier.Variable,Unifier.Variable> active) throws Unifier.CycleException
- Throws:
Unifier.CycleException
-
failure
protected Unifier.Failure failure(String reason)
-
-