src/Pure/thm.ML
changeset 32198 9bdd47909ea8
parent 32104 d1d98a02473e
child 32590 95f4f08f950f
equal deleted inserted replaced
32197:bc341bbe4417 32198:9bdd47909ea8
   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}) =