let set ~(recompute: bool) ?(p_preserving:bool = false)
(subst: subst) (var: var) (term: term) : subst =
if not recompute && p_preserving then
PPreserving.set subst var term
else if not recompute && not p_preserving then
Preserving.set subst var term
else if recompute && p_preserving then
RPPreserving.set subst var term
else (*if recompute && not p_preserving then*)
RPreserving.set subst var term