let rec e_closed xs = function
| Tconst _ -> true
| Tvar y -> List.exists (Var.equal y) xs
| Tgetfield(_,r) -> e_closed xs r
| Tsetfield(_,r,v) -> e_closed xs r && e_closed xs v
| Taccess(t,i) -> e_closed xs t && e_closed xs i
| Tupdate(t,i,v) -> e_closed xs t && e_closed xs i && e_closed xs v
| Tapp(_,ts) -> List.for_all (e_closed xs) ts
| Tif(a,b,c) -> e_closed xs a && e_closed xs b && e_closed xs c
| Tlet(x,v,t) -> e_closed xs v && e_closed (x::xs) t