let term_at env label e te =
let lname = Macros.logic_label_name label in
let l = Hashtbl.find_all env.env_at lname in
let rec find_v l = match l with
| [] -> let v = match e with Fol.Tvar v -> Fol.fresh_var v
| _ -> Fol.fresh_named_var lname te
in Hashtbl.add env.env_at lname (v, e);
v
| (vl, el)::tl -> if Fol.eq_term M.eq_data e el then vl else find_v tl
in Fol.Tvar (find_v l)