let rec check_term m t =
  if m < 0 then raise Huge ;
  match t with
    | Tconst _ | Tvar _  -> pred m
    | Tapp(_,ts) -> List.fold_left check_term (pred m) ts
    | Tgetfield(_,r) -> check_term (pred m) r
    | Tsetfield(_,r,v) -> check_term (check_term (pred m) r) v
    | Taccess(t,i) -> check_term (check_term (pred m) t) i
    | Tupdate(t,i,v) -> check_term (check_term (check_term (pred m) t) i) v
    | Tif(a,b,c) -> check_term (check_term (check_term (pred m) a) b) c
    | Tlet(_,a,b) -> check_term (check_term (pred m) a) b