src/Pure/thm.ML
changeset 60951 b70c4db3874f
parent 60949 ccbf9379e355
child 60952 762cb38a3147
equal deleted inserted replaced
60950:35a3f66629ad 60951:b70c4db3874f
    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,