fixed handling of map of "fun"
authorblanchet
Sat, 08 Sep 2012 21:04:26 +0200
changeset 502320c9546fc789f
parent 50231 e6fc5a6b152d
child 50233 d01a5c918298
fixed handling of map of "fun"
src/HOL/Codatatype/Tools/bnf_fp_sugar.ML
src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML
     1.1 --- a/src/HOL/Codatatype/Tools/bnf_fp_sugar.ML	Sat Sep 08 21:04:26 2012 +0200
     1.2 +++ b/src/HOL/Codatatype/Tools/bnf_fp_sugar.ML	Sat Sep 08 21:04:26 2012 +0200
     1.3 @@ -30,6 +30,9 @@
     1.4  fun split_list8 xs =
     1.5    (map #1 xs, map #2 xs, map #3 xs, map #4 xs, map #5 xs, map #6 xs, map #7 xs, map #8 xs);
     1.6  
     1.7 +fun strip_map_type (Type (@{type_name fun}, [T as Type _, T'])) = strip_map_type T' |>> cons T
     1.8 +  | strip_map_type T = ([], T);
     1.9 +
    1.10  fun typ_subst inst (T as Type (s, Ts)) =
    1.11      (case AList.lookup (op =) inst T of
    1.12        NONE => Type (s, map (typ_subst inst) Ts)
    1.13 @@ -421,7 +424,7 @@
    1.14        end;
    1.15  
    1.16      fun mk_map Ts Us t =
    1.17 -      let val (Type (_, Ts0), Type (_, Us0)) = strip_type (fastype_of t) |>> List.last in
    1.18 +      let val (Type (_, Ts0), Type (_, Us0)) = strip_map_type (fastype_of t) |>> List.last in
    1.19          Term.subst_atomic_types (Ts0 @ Us0 ~~ Ts @ Us) t
    1.20        end;
    1.21  
    1.22 @@ -449,7 +452,8 @@
    1.23                        let
    1.24                          val map0 = map_of_bnf (the (bnf_of lthy (Long_Name.base_name s)));
    1.25                          val mapx = mk_map Ts Us map0;
    1.26 -                        val TUs = map dest_funT (fst (split_last (binder_types (fastype_of mapx))));
    1.27 +                        val TUs =
    1.28 +                          map dest_funT (fst (split_last (fst (strip_map_type (fastype_of mapx)))));
    1.29                          val args = map build TUs;
    1.30                        in Term.list_comb (mapx, args) end
    1.31                      | (j, _) => maybe_tick (nth vs j) (nth fiter_likes j))
     2.1 --- a/src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML	Sat Sep 08 21:04:26 2012 +0200
     2.2 +++ b/src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML	Sat Sep 08 21:04:26 2012 +0200
     2.3 @@ -51,14 +51,15 @@
     2.4    Local_Defs.unfold_tac ctxt @{thms sum.inject Pair_eq conj_assoc} THEN rtac refl 1;
     2.5  
     2.6  val iter_like_thms =
     2.7 -  @{thms sum_map.simps sum.simps(5,6) convol_def case_unit map_pair_def split_conv id_def};
     2.8 +  @{thms case_unit comp_def convol_def id_def map_pair_def sum.simps(5,6) sum_map.simps split_conv};
     2.9  
    2.10  fun mk_iter_like_tac iter_like_defs fld_iter_likes ctr_def pre_map_def ctxt =
    2.11    Local_Defs.unfold_tac ctxt (ctr_def :: pre_map_def :: iter_like_defs @ fld_iter_likes) THEN
    2.12 -  Local_Defs.unfold_tac ctxt iter_like_thms THEN rtac refl 1;
    2.13 +  Local_Defs.unfold_tac ctxt iter_like_thms THEN
    2.14 +  rtac refl 1;
    2.15  
    2.16  val coiter_like_ss = ss_only @{thms if_True if_False};
    2.17 -val coiter_like_thms = @{thms sum_map.simps map_pair_def id_def prod.cases};
    2.18 +val coiter_like_thms = @{thms id_def map_pair_def sum_map.simps prod.cases};
    2.19  
    2.20  fun mk_coiter_like_tac coiter_like_defs fld_unf_coiter_like pre_map_def ctr_def ctxt =
    2.21    Local_Defs.unfold_tac ctxt (ctr_def :: coiter_like_defs) THEN