895 Abs (a, T, t) => Abs (a, T, abs (lev + 1) t) |
895 Abs (a, T, t) => Abs (a, T, abs (lev + 1) t) |
896 | t $ u => (abs lev t $ (abs lev u handle SAME => u) handle SAME => t $ abs lev u) |
896 | t $ u => (abs lev t $ (abs lev u handle SAME => u) handle SAME => t $ abs lev u) |
897 | _ => raise SAME); |
897 | _ => raise SAME); |
898 in abs 0 body handle SAME => body end; |
898 in abs 0 body handle SAME => body end; |
899 |
899 |
900 fun lambda (v as Const (x, T)) t = Abs (x, T, abstract_over (v, t)) |
900 fun lambda (v as Const (x, T)) t = Abs (NameSpace.base x, T, abstract_over (v, t)) |
901 | lambda (v as Free (x, T)) t = Abs (x, T, abstract_over (v, t)) |
901 | lambda (v as Free (x, T)) t = Abs (x, T, abstract_over (v, t)) |
902 | lambda (v as Var ((x, _), T)) t = Abs (x, T, abstract_over (v, t)) |
902 | lambda (v as Var ((x, _), T)) t = Abs (x, T, abstract_over (v, t)) |
903 | lambda v t = raise TERM ("lambda", [v, t]); |
903 | lambda v t = raise TERM ("lambda", [v, t]); |
904 |
904 |
905 (*Form an abstraction over a free variable.*) |
905 (*Form an abstraction over a free variable.*) |