signature POLYUNIFICATION = sig datatype (''variable, ''functionSymbol) term = Function of ''functionSymbol * (''variable, ''functionSymbol) term list | Variable of ''variable type (''variable, ''functionSymbol) equation = (''variable, ''functionSymbol) term * (''variable, ''functionSymbol) term type (''variable, ''functionSymbol) binding = ''variable * (''variable, ''functionSymbol) term type (''variable, ''functionSymbol) substitution = (''variable, ''functionSymbol) binding list datatype equationOutcome = HaltWithFailure | NoMatch | Success val unify : (''variable, ''functionSymbol) equation list -> equationOutcome * (''variable, ''functionSymbol) equation list end