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