Unification Algorithm
Given two predicates that initially have no (universally quantified) variables in common, a unification algorithm should:
user=> (unify '(p  x   (a))
              '(p (b)   y )   )
( (y (a))   (x (b))   (t t))
user=> (unify '(q (a))
              '(q (b)))
nil