| EAppl (tl, _, _) -> aux i tl
| EBind (tl, a, _) ->
let f id0 _ = if id0 = id then f a i else aux (succ i) tl in
- E.name err f a
+ let err () = aux (succ i) tl in
+ E.name err f a
| EProj (tl, _, d) -> append (aux i) tl d
in
aux 0 lenv
| EProj (e, _, d) ->
let err () = mem err f e b in mem err f d b
-let rec sta f = function
- | ESort -> f ESort
- | EBind (e, a, Abst (_, w)) -> sta (push_bind f a (Abst (N.one, w))) e
- | EBind (e, a, b) -> sta (push_bind f a b) e
- | EAppl (e, a, v) -> sta (push_appl f a v) e
- | EProj (e, a, d) -> let f d = sta (push_proj f a d) e in sta f d
+let replace f n0 e =
+ let rec aux f = function
+ | ESort -> f ESort
+ | EBind (e, a, Abst (n, w)) -> aux (push_bind f a (Abst (n0, w))) e
+ | EBind (e, a, b) -> aux (push_bind f a b) e
+ | EAppl (e, a, v) -> aux (push_appl f a v) e
+ | EProj (e, a, d) -> let f d = aux (push_proj f a d) e in aux f d
+
+ in
+ aux f e