108 val dest_arg: cterm -> cterm |
108 val dest_arg: cterm -> cterm |
109 val dest_fun2: cterm -> cterm |
109 val dest_fun2: cterm -> cterm |
110 val dest_arg1: cterm -> cterm |
110 val dest_arg1: cterm -> cterm |
111 val dest_abs: string option -> cterm -> cterm * cterm |
111 val dest_abs: string option -> cterm -> cterm * cterm |
112 val capply: cterm -> cterm -> cterm |
112 val capply: cterm -> cterm -> cterm |
|
113 val cabs_name: string * cterm -> cterm -> cterm |
113 val cabs: cterm -> cterm -> cterm |
114 val cabs: cterm -> cterm -> cterm |
114 val adjust_maxidx_cterm: int -> cterm -> cterm |
115 val adjust_maxidx_cterm: int -> cterm -> cterm |
115 val incr_indexes_cterm: int -> cterm -> cterm |
116 val incr_indexes_cterm: int -> cterm -> cterm |
116 val match: cterm * cterm -> (ctyp * ctyp) list * (cterm * cterm) list |
117 val match: cterm * cterm -> (ctyp * ctyp) list * (cterm * cterm) list |
117 val first_order_match: cterm * cterm -> (ctyp * ctyp) list * (cterm * cterm) list |
118 val first_order_match: cterm * cterm -> (ctyp * ctyp) list * (cterm * cterm) list |
272 maxidx = Int.max (maxidx1, maxidx2), |
273 maxidx = Int.max (maxidx1, maxidx2), |
273 sorts = Sorts.union sorts1 sorts2} |
274 sorts = Sorts.union sorts1 sorts2} |
274 else raise CTERM ("capply: types don't agree", [cf, cx]) |
275 else raise CTERM ("capply: types don't agree", [cf, cx]) |
275 | capply cf cx = raise CTERM ("capply: first arg is not a function", [cf, cx]); |
276 | capply cf cx = raise CTERM ("capply: first arg is not a function", [cf, cx]); |
276 |
277 |
277 fun cabs |
278 fun cabs_name |
278 (ct1 as Cterm {t = t1, T = T1, maxidx = maxidx1, sorts = sorts1, ...}) |
279 (x, ct1 as Cterm {t = t1, T = T1, maxidx = maxidx1, sorts = sorts1, ...}) |
279 (ct2 as Cterm {t = t2, T = T2, maxidx = maxidx2, sorts = sorts2, ...}) = |
280 (ct2 as Cterm {t = t2, T = T2, maxidx = maxidx2, sorts = sorts2, ...}) = |
280 let val t = Term.lambda t1 t2 in |
281 let val t = Term.lambda_name (x, t1) t2 in |
281 Cterm {thy_ref = merge_thys0 ct1 ct2, |
282 Cterm {thy_ref = merge_thys0 ct1 ct2, |
282 t = t, T = T1 --> T2, |
283 t = t, T = T1 --> T2, |
283 maxidx = Int.max (maxidx1, maxidx2), |
284 maxidx = Int.max (maxidx1, maxidx2), |
284 sorts = Sorts.union sorts1 sorts2} |
285 sorts = Sorts.union sorts1 sorts2} |
285 end; |
286 end; |
|
287 |
|
288 fun cabs t u = cabs_name ("", t) u; |
286 |
289 |
287 |
290 |
288 (* indexes *) |
291 (* indexes *) |
289 |
292 |
290 fun adjust_maxidx_cterm i (ct as Cterm {thy_ref, t, T, maxidx, sorts}) = |
293 fun adjust_maxidx_cterm i (ct as Cterm {thy_ref, t, T, maxidx, sorts}) = |