let subst_var var exp_opt p =
    let subst v =
      if Fol.eq_var v var then
        match exp_opt with
        | Some exp -> Some exp
        | None -> raise Invalid_subst
      else None (* no substitution *)
    in 
      try (subst_vars subst p)
      with Invalid_subst ->
        if !Calculus.use_bottom then pbot
        else abort "need untranslatable expression (see previous warning)"