Fixpoint ren_t (rho : nat -> nat) t :=
  match t with
  | V n => V n
  | P p => P (rho p)           
  | t_f b t => t_f b (ren_t rho t)
  | t_e => t_e
  end.Fixpoint ren {b : logic} (rho : nat -> nat) phi :=
  match phi with
  | Pr s t => Pr (ren_t rho s) (ren_t rho t)
  | Q => Q
  | Fal => Fal
  | Impl phi1 phi2 => Impl (ren rho phi1) (ren rho phi2)
  | All x phi => All x (ren rho phi)
  end.

(* Specifications: *)
Lemma vars_t_ren rho t : vars_t (ren_t rho t) = vars_t t.