introduced and used "mk_Freesss", and simplified "mk_Freess(')"
authorblanchet
Thu, 06 Sep 2012 11:34:05 +0200
changeset 50192db8ce685073f
parent 50191 6d29d2db5f88
child 50193 84e3ad0d64be
introduced and used "mk_Freesss", and simplified "mk_Freess(')"
src/HOL/Codatatype/Tools/bnf_fp_sugar.ML
src/HOL/Codatatype/Tools/bnf_util.ML
     1.1 --- a/src/HOL/Codatatype/Tools/bnf_fp_sugar.ML	Thu Sep 06 02:56:21 2012 +0200
     1.2 +++ b/src/HOL/Codatatype/Tools/bnf_fp_sugar.ML	Thu Sep 06 11:34:05 2012 +0200
     1.3 @@ -248,7 +248,7 @@
     1.4              val ((gss, ysss), _) =
     1.5                lthy
     1.6                |> mk_Freess "f" g_Tss
     1.7 -              ||>> apfst (unflat y_Tsss) o mk_Freess "x" (flat y_Tsss);
     1.8 +              ||>> mk_Freesss "x" y_Tsss;
     1.9  
    1.10              val iter_rhs =
    1.11                fold_rev (fold_rev Term.lambda) gss
     2.1 --- a/src/HOL/Codatatype/Tools/bnf_util.ML	Thu Sep 06 02:56:21 2012 +0200
     2.2 +++ b/src/HOL/Codatatype/Tools/bnf_util.ML	Thu Sep 06 11:34:05 2012 +0200
     2.3 @@ -48,6 +48,8 @@
     2.4    val mk_TFreess: int list -> Proof.context -> typ list list * Proof.context
     2.5    val mk_Frees: string -> typ list -> Proof.context -> term list * Proof.context
     2.6    val mk_Freess: string -> typ list list -> Proof.context -> term list list * Proof.context
     2.7 +  val mk_Freesss: string -> typ list list list -> Proof.context ->
     2.8 +    term list list list * Proof.context
     2.9    val mk_Frees': string -> typ list -> Proof.context ->
    2.10      (term list * (string * typ) list) * Proof.context
    2.11    val mk_Freess': string -> typ list list -> Proof.context ->
    2.12 @@ -272,16 +274,11 @@
    2.13  fun mk_fresh_names ctxt = (fn names => Variable.variant_fixes names ctxt) oo mk_names;
    2.14  fun mk_Frees x Ts ctxt = mk_fresh_names ctxt (length Ts) x
    2.15    |>> (fn names => map2 (curry Free) names Ts);
    2.16 -fun mk_Freess x Tss ctxt =
    2.17 -  fold_map2 (fn name => fn Ts => fn ctxt => mk_fresh_names ctxt (length Ts) name)
    2.18 -    (mk_names (length Tss) x) Tss ctxt
    2.19 -  |>> (fn namess => map2 (map2 (curry Free)) namess Tss);
    2.20 +fun mk_Freess x Tss = fold_map2 mk_Frees (mk_names (length Tss) x) Tss;
    2.21 +fun mk_Freesss x Tsss = fold_map2 mk_Freess (mk_names (length Tsss) x) Tsss;
    2.22  fun mk_Frees' x Ts ctxt = mk_fresh_names ctxt (length Ts) x
    2.23    |>> (fn names => `(map Free) (names ~~ Ts));
    2.24 -fun mk_Freess' x Tss ctxt =
    2.25 -  fold_map2 (fn name => fn Ts => fn ctxt =>
    2.26 -    mk_fresh_names ctxt (length Ts) name) (mk_names (length Tss) x) Tss ctxt
    2.27 -  |>> (fn namess => map_split (`(map Free) o (op ~~)) (namess ~~ Tss));
    2.28 +fun mk_Freess' x Tss = fold_map2 mk_Frees' (mk_names (length Tss) x) Tss #>> split_list;
    2.29  
    2.30  
    2.31  (** Types **)