2 ||M|| This file is part of HELM, an Hypertextual, Electronic
3 ||A|| Library of Mathematics, developed at the Computer Science
4 ||T|| Department, University of Bologna, Italy.
6 ||T|| HELM is free software; you can redistribute it and/or
7 ||A|| modify it under the terms of the GNU General Public License
8 \ / version 2 or (at your option) any later version.
9 \ / This software is distributed as is, NO WARRANTY.
10 V_______________________________________________________________ *)
15 let rec iter_bind d = function
17 | B.Abst w -> B.Abst (iter_term d w)
18 | B.Abbr v -> B.Abbr (iter_term d v)
19 and iter_term d = function
22 | B.LRef (a, i) as t -> if i < d then t else map d a i
23 | B.Cast (a, w, v) -> B.Cast (a, iter_term d w, iter_term d v)
24 | B.Appl (a, w, u) -> B.Appl (a, iter_term d w, iter_term d u)
25 | B.Bind (a, b, u) -> B.Bind (a, iter_bind d b, iter_term (succ d) u)
29 let lift_map h _ a i =
30 if i + h >= 0 then B.LRef (a, i + h) else assert false
33 if h = 0 then g t else g (iter (lift_map h) d t)
35 let lift_bind g h d = function
37 | B.Abst w -> let g w = g (B.Abst w) in lift g h d w
38 | B.Abbr v -> let g v = g (B.Abbr v) in lift g h d v