38 val dest_fun: cterm -> cterm |
38 val dest_fun: cterm -> cterm |
39 val dest_arg: cterm -> cterm |
39 val dest_arg: cterm -> cterm |
40 val dest_fun2: cterm -> cterm |
40 val dest_fun2: cterm -> cterm |
41 val dest_arg1: cterm -> cterm |
41 val dest_arg1: cterm -> cterm |
42 val dest_abs: string option -> cterm -> cterm * cterm |
42 val dest_abs: string option -> cterm -> cterm * cterm |
|
43 val var: indexname * ctyp -> cterm |
43 val apply: cterm -> cterm -> cterm |
44 val apply: cterm -> cterm -> cterm |
44 val lambda_name: string * cterm -> cterm -> cterm |
45 val lambda_name: string * cterm -> cterm -> cterm |
45 val lambda: cterm -> cterm -> cterm |
46 val lambda: cterm -> cterm -> cterm |
46 val adjust_maxidx_cterm: int -> cterm -> cterm |
47 val adjust_maxidx_cterm: int -> cterm -> cterm |
47 val incr_indexes_cterm: int -> cterm -> cterm |
48 val incr_indexes_cterm: int -> cterm -> cterm |
252 | dest_abs _ ct = raise CTERM ("dest_abs", [ct]); |
253 | dest_abs _ ct = raise CTERM ("dest_abs", [ct]); |
253 |
254 |
254 |
255 |
255 (* constructors *) |
256 (* constructors *) |
256 |
257 |
|
258 fun var ((x, i), Ctyp {thy, T, maxidx, sorts}) = |
|
259 if i < 0 then raise TERM ("var: bad index", [Var ((x, i), T)]) |
|
260 else Cterm {thy = thy, t = Var ((x, i), T), T = T, maxidx = Int.max (i, maxidx), sorts = sorts}; |
|
261 |
257 fun apply |
262 fun apply |
258 (cf as Cterm {t = f, T = Type ("fun", [dty, rty]), maxidx = maxidx1, sorts = sorts1, ...}) |
263 (cf as Cterm {t = f, T = Type ("fun", [dty, rty]), maxidx = maxidx1, sorts = sorts1, ...}) |
259 (cx as Cterm {t = x, T, maxidx = maxidx2, sorts = sorts2, ...}) = |
264 (cx as Cterm {t = x, T, maxidx = maxidx2, sorts = sorts2, ...}) = |
260 if T = dty then |
265 if T = dty then |
261 Cterm {thy = merge_thys0 cf cx, |
266 Cterm {thy = merge_thys0 cf cx, |