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