src/HOL/Tools/Ctr_Sugar/ctr_sugar_util.ML
changeset 58227 d91f7a80f412
parent 58220 a2afad27a0b1
child 58234 265aea1e9985
equal deleted inserted replaced
58226:04faf6dc262e 58227:d91f7a80f412
    32     (term list * (string * typ) list) * Proof.context
    32     (term list * (string * typ) list) * Proof.context
    33   val mk_Freess': string -> typ list list -> Proof.context ->
    33   val mk_Freess': string -> typ list list -> Proof.context ->
    34     (term list list * (string * typ) list list) * Proof.context
    34     (term list list * (string * typ) list list) * Proof.context
    35   val mk_Frees: string -> typ list -> Proof.context -> term list * Proof.context
    35   val mk_Frees: string -> typ list -> Proof.context -> term list * Proof.context
    36   val mk_Freess: string -> typ list list -> Proof.context -> term list list * Proof.context
    36   val mk_Freess: string -> typ list list -> Proof.context -> term list list * Proof.context
       
    37   val dest_TFree_or_TVar: typ -> string * sort
    37   val resort_tfree: sort -> typ -> typ
    38   val resort_tfree: sort -> typ -> typ
    38   val variant_types: string list -> sort list -> Proof.context ->
    39   val variant_types: string list -> sort list -> Proof.context ->
    39     (string * sort) list * Proof.context
    40     (string * sort) list * Proof.context
    40   val variant_tfrees: string list -> Proof.context -> typ list * Proof.context
    41   val variant_tfrees: string list -> Proof.context -> typ list * Proof.context
    41 
    42 
   175 fun mk_Freess' x Tss = fold_map2 mk_Frees' (mk_names (length Tss) x) Tss #>> split_list;
   176 fun mk_Freess' x Tss = fold_map2 mk_Frees' (mk_names (length Tss) x) Tss #>> split_list;
   176 
   177 
   177 fun mk_Frees x Ts ctxt = mk_fresh_names ctxt (length Ts) x |>> (fn xs => map2 (curry Free) xs Ts);
   178 fun mk_Frees x Ts ctxt = mk_fresh_names ctxt (length Ts) x |>> (fn xs => map2 (curry Free) xs Ts);
   178 fun mk_Freess x Tss = fold_map2 mk_Frees (mk_names (length Tss) x) Tss;
   179 fun mk_Freess x Tss = fold_map2 mk_Frees (mk_names (length Tss) x) Tss;
   179 
   180 
       
   181 fun dest_TFree_or_TVar (TFree sS) = sS
       
   182   | dest_TFree_or_TVar (TVar ((s, _), S)) = (s, S)
       
   183   | dest_TFree_or_TVar _ = error "Invalid type argument";
       
   184 
   180 fun resort_tfree S (TFree (s, _)) = TFree (s, S);
   185 fun resort_tfree S (TFree (s, _)) = TFree (s, S);
   181 
   186 
   182 fun ensure_prefix pre s = s |> not (String.isPrefix pre s) ? prefix pre;
   187 fun ensure_prefix pre s = s |> not (String.isPrefix pre s) ? prefix pre;
   183 
   188 
   184 fun variant_types ss Ss ctxt =
   189 fun variant_types ss Ss ctxt =