This module implements a basic set of term checking utilities.
Term1 and Term2 are identical up to renaming.
Term1 and Term2 unify without producing bindings for the variables of Term1. I.e., instance(Term1,Term2) holds.
Term1 is an instance of Term2.
Term2 is an instance of Term1.
Term satisfies instance(Term1,Term) and instance(Term2,Term) and there is no term less general than Term (modulo variants) that satisfies it.
Term satisfies instance(Term,Term1) and instance(Term,Term2) and there is no term more general than Term (modulo variants) that satisfies it.
unifier(Unifier) :- list(unifier_elem,Unifier).
X is a unifier.
Unifies Unifier with the most general unifier between the terms X and Y. Fails if such unifier does not exit.
unifier_elem(X=Term) :- var(X), term(Term).