let declarations ids =
let section = function
| TYPE _ | RECORD _ -> 0
| FUNCTION _ -> 1
| PREDICATE _ -> 2
| AXIOM _ -> 3
in
let sort d1 d2 = section d1.d_item - section d2.d_item in
let acc = ref [] in
List.iter
(fun f ->
try acc := get_declaration f :: !acc
with Not_found -> ())
ids ;
List.sort sort !acc