src/HOL/Tools/BNF/bnf_gfp.ML
changeset 55415 05f5fdb8d093
parent 55414 eab03e9cee8a
child 55416 dd7992d4a61a
equal deleted inserted replaced
55414:eab03e9cee8a 55415:05f5fdb8d093
   523           end;
   523           end;
   524 
   524 
   525         val Suc = Term.absdummy HOLogic.natT (Term.absfree hrec'
   525         val Suc = Term.absdummy HOLogic.natT (Term.absfree hrec'
   526           (HOLogic.mk_tuple (map4 mk_Suc ss setssAs zs zs')));
   526           (HOLogic.mk_tuple (map4 mk_Suc ss setssAs zs zs')));
   527 
   527 
   528         val rhs = mk_nat_rec Zero Suc;
   528         val rhs = mk_rec_nat Zero Suc;
   529       in
   529       in
   530         fold_rev (Term.absfree o Term.dest_Free) ss rhs
   530         fold_rev (Term.absfree o Term.dest_Free) ss rhs
   531       end;
   531       end;
   532 
   532 
   533     val ((hset_rec_frees, (_, hset_rec_def_frees)), (lthy, lthy_old)) =
   533     val ((hset_rec_frees, (_, hset_rec_def_frees)), (lthy, lthy_old)) =
   553         val hset_recT = Library.foldr (op -->) (Ts, HOLogic.natT --> hrecT);
   553         val hset_recT = Library.foldr (op -->) (Ts, HOLogic.natT --> hrecT);
   554       in
   554       in
   555         mk_nthN n (Term.list_comb (Const (nth hset_recs (j - 1), hset_recT), args)) i
   555         mk_nthN n (Term.list_comb (Const (nth hset_recs (j - 1), hset_recT), args)) i
   556       end;
   556       end;
   557 
   557 
   558     val hset_rec_0ss = mk_rec_simps n @{thm nat_rec_0_imp} hset_rec_defs;
   558     val hset_rec_0ss = mk_rec_simps n @{thm rec_nat_0_imp} hset_rec_defs;
   559     val hset_rec_Sucss = mk_rec_simps n @{thm nat_rec_Suc_imp} hset_rec_defs;
   559     val hset_rec_Sucss = mk_rec_simps n @{thm rec_nat_Suc_imp} hset_rec_defs;
   560     val hset_rec_0ss' = transpose hset_rec_0ss;
   560     val hset_rec_0ss' = transpose hset_rec_0ss;
   561     val hset_rec_Sucss' = transpose hset_rec_Sucss;
   561     val hset_rec_Sucss' = transpose hset_rec_Sucss;
   562 
   562 
   563     fun hset_binds j = mk_internal_bs (hsetN ^ (if m = 1 then "" else string_of_int j))
   563     fun hset_binds j = mk_internal_bs (hsetN ^ (if m = 1 then "" else string_of_int j))
   564     fun hset_bind i j = nth (hset_binds j) (i - 1);
   564     fun hset_bind i j = nth (hset_binds j) (i - 1);
  1200           end;
  1200           end;
  1201 
  1201 
  1202         val Suc = Term.absdummy HOLogic.natT (Term.absfree Lev_rec'
  1202         val Suc = Term.absdummy HOLogic.natT (Term.absfree Lev_rec'
  1203           (HOLogic.mk_tuple (map5 mk_Suc ks ss setssAs zs zs')));
  1203           (HOLogic.mk_tuple (map5 mk_Suc ks ss setssAs zs zs')));
  1204 
  1204 
  1205         val rhs = mk_nat_rec Zero Suc;
  1205         val rhs = mk_rec_nat Zero Suc;
  1206       in
  1206       in
  1207         fold_rev (Term.absfree o Term.dest_Free) ss rhs
  1207         fold_rev (Term.absfree o Term.dest_Free) ss rhs
  1208       end;
  1208       end;
  1209 
  1209 
  1210     val ((Lev_free, (_, Lev_def_free)), (lthy, lthy_old)) =
  1210     val ((Lev_free, (_, Lev_def_free)), (lthy, lthy_old)) =