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