let rec depend ids = function
  | Integer | Real | Boolean | Pointer | ALPHA _ -> ids
  | Set te -> depend ids te
  | Array(ta,tb) -> depend (depend ids ta) tb
  | Record r -> Iset.add r ids
  | ADT(a,ts) -> List.fold_left depend (Iset.add a ids) ts