let rec expt sigma = function
  | Tlet(x,t1,t2) -> 
      let t1 = expt sigma t1 in
      expt (Vmap.add x t1 sigma) t2
  | Tapp(f,tl) ->
      e_app f  (List.map (expt sigma) tl)
  | Tif (c,ta,tb) ->
      e_if (expt sigma c)(expt sigma ta)(expt sigma tb)
  | Tconst _ as c -> c
  | Tdata _ -> Wp_parameters.fatal "Normalization of Fol(data)"
  | Tvar x as t -> 
      begin
        try Vmap.find x sigma
        with Not_found ->
          Wp_parameters.failure ~once:true "Suspiscous variable %s" 
             (Fol.Var.var_name x) ; t
      end