src/HOL/BNF/Tools/bnf_lfp.ML
changeset 52923 ec63c82551ae
parent 52913 2d2d9d1de1a9
child 52938 3b3e52d5e66b
equal deleted inserted replaced
52922:d1bcb4479a2f 52923:ec63c82551ae
    73     val FTsCs = mk_FTs allCs;
    73     val FTsCs = mk_FTs allCs;
    74     val ATs = map HOLogic.mk_setT passiveAs;
    74     val ATs = map HOLogic.mk_setT passiveAs;
    75     val BTs = map HOLogic.mk_setT activeAs;
    75     val BTs = map HOLogic.mk_setT activeAs;
    76     val B'Ts = map HOLogic.mk_setT activeBs;
    76     val B'Ts = map HOLogic.mk_setT activeBs;
    77     val B''Ts = map HOLogic.mk_setT activeCs;
    77     val B''Ts = map HOLogic.mk_setT activeCs;
    78     val sTs = map2 (curry (op -->)) FTsAs activeAs;
    78     val sTs = map2 (curry op -->) FTsAs activeAs;
    79     val s'Ts = map2 (curry (op -->)) FTsBs activeBs;
    79     val s'Ts = map2 (curry op -->) FTsBs activeBs;
    80     val s''Ts = map2 (curry (op -->)) FTsCs activeCs;
    80     val s''Ts = map2 (curry op -->) FTsCs activeCs;
    81     val fTs = map2 (curry (op -->)) activeAs activeBs;
    81     val fTs = map2 (curry op -->) activeAs activeBs;
    82     val inv_fTs = map2 (curry (op -->)) activeBs activeAs;
    82     val inv_fTs = map2 (curry op -->) activeBs activeAs;
    83     val self_fTs = map2 (curry (op -->)) activeAs activeAs;
    83     val self_fTs = map2 (curry op -->) activeAs activeAs;
    84     val gTs = map2 (curry (op -->)) activeBs activeCs;
    84     val gTs = map2 (curry op -->) activeBs activeCs;
    85     val all_gTs = map2 (curry (op -->)) allBs allCs';
    85     val all_gTs = map2 (curry op -->) allBs allCs';
    86     val prodBsAs = map2 (curry HOLogic.mk_prodT) activeBs activeAs;
    86     val prodBsAs = map2 (curry HOLogic.mk_prodT) activeBs activeAs;
    87     val prodFTs = mk_FTs (passiveAs @ prodBsAs);
    87     val prodFTs = mk_FTs (passiveAs @ prodBsAs);
    88     val prod_sTs = map2 (curry (op -->)) prodFTs activeAs;
    88     val prod_sTs = map2 (curry op -->) prodFTs activeAs;
    89 
    89 
    90     (* terms *)
    90     (* terms *)
    91     val mapsAsAs = map4 mk_map_of_bnf Dss Ass Ass bnfs;
    91     val mapsAsAs = map4 mk_map_of_bnf Dss Ass Ass bnfs;
    92     val mapsAsBs = map4 mk_map_of_bnf Dss Ass Bss bnfs;
    92     val mapsAsBs = map4 mk_map_of_bnf Dss Ass Bss bnfs;
    93     val mapsBsAs = map4 mk_map_of_bnf Dss Bss Ass bnfs;
    93     val mapsBsAs = map4 mk_map_of_bnf Dss Bss Ass bnfs;
  1092     val folds = map (Morphism.term phi) fold_frees;
  1092     val folds = map (Morphism.term phi) fold_frees;
  1093     val fold_names = map (fst o dest_Const) folds;
  1093     val fold_names = map (fst o dest_Const) folds;
  1094     fun mk_folds passives actives =
  1094     fun mk_folds passives actives =
  1095       map3 (fn name => fn T => fn active =>
  1095       map3 (fn name => fn T => fn active =>
  1096         Const (name, Library.foldr (op -->)
  1096         Const (name, Library.foldr (op -->)
  1097           (map2 (curry (op -->)) (mk_FTs (passives @ actives)) actives, T --> active)))
  1097           (map2 (curry op -->) (mk_FTs (passives @ actives)) actives, T --> active)))
  1098       fold_names (mk_Ts passives) actives;
  1098       fold_names (mk_Ts passives) actives;
  1099     fun mk_fold Ts ss i = Term.list_comb (Const (nth fold_names (i - 1), Library.foldr (op -->)
  1099     fun mk_fold Ts ss i = Term.list_comb (Const (nth fold_names (i - 1), Library.foldr (op -->)
  1100       (map fastype_of ss, nth Ts (i - 1) --> range_type (fastype_of (nth ss (i - 1))))), ss);
  1100       (map fastype_of ss, nth Ts (i - 1) --> range_type (fastype_of (nth ss (i - 1))))), ss);
  1101     val fold_defs = map (Morphism.thm phi) fold_def_frees;
  1101     val fold_defs = map (Morphism.thm phi) fold_def_frees;
  1102 
  1102