let unify_substs ~(recompute: bool) ?(p_preserving: bool = false)
(first: subst) (second: subst) : subst =
if not recompute && p_preserving then
UnificationPPreserving.unify_substs first second
else if not recompute && not p_preserving then
Unification_Preserving.unify_substs first second
else if recompute && p_preserving then
UnificationRPPreserving.unify_substs first second
else (*if recompute && not p_preserving then*)
Unification_RPreserving.unify_substs first second