/** * Comparison and Unification of Terms * * [SWI Prolog Documentation](https://www.swi-prolog.org/pldoc/man?section=compare) */ package prolog.builtins import prolog.ast.terms.Atom import prolog.ast.terms.Operator import prolog.ast.terms.Term import prolog.logic.Substituted import prolog.logic.applySubstitution import prolog.logic.equivalent class Equivalent(private val term1: Term, private val term2: Term) : Operator(Atom("=="), term1, term2) { override fun prove(subs: Substituted): Sequence = sequence { val t1 = applySubstitution(term1, subs) val t2 = applySubstitution(term2, subs) if (equivalent(t1, t2)) { yield(emptyMap()) } } }