moved contains and contradicts functions outside of the let expressions, modified unify and equaltype to handle when both types provided are vars