code: func Unify(safe VarSet, a *Term, b *Term) VarSet {
  	u := &unifier{
  		safe:    safe,
  		unified: VarSet{},
  		unknown: map[Var]VarSet{},
  	}
  	u.unify(a, b)
  	return u.unified
  }
docs: // Unify returns a set of variables that will be unified when the equality expression defined by
  // terms a and b is evaluated. The unifier assumes that variables in the VarSet safe are already
  // unified.