-(* We should check that the dependences are ordered telesopically *)
- let map u =
- match discharge_uri dn du u with
- | C.Variable (b, None, w, _, _), _ -> Some (C.Name b, C.Decl w)
- | C.Variable (b, Some v, w, _, _), _ -> Some (C.Name b, C.Def (v, w))
- | _ -> None
- in
- List.rev_map map vars
+ let rec aux us c = function
+ | [] -> c
+ | u :: tl ->
+ let e = match discharge_uri dn du u with
+ | C.Variable (b, None, w, vars, _), _ ->
+ let map = relocate us (List.rev vars) in
+ let w = S.lift_map 1 map w in
+ Some (C.Name b, C.Decl w)
+ | C.Variable (b, Some v, w, vars, _), _ ->
+ let map = relocate us (List.rev vars) in
+ let v, w = S.lift_map 1 map v, S.lift_map 1 map w in
+ Some (C.Name b, C.Def (v, w))
+ | _ -> assert false
+ in
+ aux (u :: us) (e :: c) tl
+ in
+ aux [] [] vars