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