src/ZF/Tools/primrec_package.ML
changeset 30364 577edc39b501
parent 30280 eb98b49ef835
child 33037 b22e44496dc2
equal deleted inserted replaced
30363:9b8d9b6ef803 30364:577edc39b501
   137     val recursor = head_of (#1 (hd recursor_pairs))
   137     val recursor = head_of (#1 (hd recursor_pairs))
   138 
   138 
   139     (** make definition **)
   139     (** make definition **)
   140 
   140 
   141     (*the recursive argument*)
   141     (*the recursive argument*)
   142     val rec_arg = Free (Name.variant (map #1 (ls@rs)) (NameSpace.base_name big_rec_name),
   142     val rec_arg = Free (Name.variant (map #1 (ls@rs)) (Long_Name.base_name big_rec_name),
   143                         Ind_Syntax.iT)
   143                         Ind_Syntax.iT)
   144 
   144 
   145     val def_tm = Logic.mk_equals
   145     val def_tm = Logic.mk_equals
   146                     (subst_bound (rec_arg, fabs),
   146                     (subst_bound (rec_arg, fabs),
   147                      list_comb (recursor,
   147                      list_comb (recursor,
   151   in
   151   in
   152       if !Ind_Syntax.trace then
   152       if !Ind_Syntax.trace then
   153             writeln ("primrec def:\n" ^
   153             writeln ("primrec def:\n" ^
   154                      Syntax.string_of_term_global thy def_tm)
   154                      Syntax.string_of_term_global thy def_tm)
   155       else();
   155       else();
   156       (NameSpace.base_name fname ^ "_" ^ NameSpace.base_name big_rec_name ^ "_def",
   156       (Long_Name.base_name fname ^ "_" ^ Long_Name.base_name big_rec_name ^ "_def",
   157        def_tm)
   157        def_tm)
   158   end;
   158   end;
   159 
   159 
   160 
   160 
   161 (* prepare functions needed for definitions *)
   161 (* prepare functions needed for definitions *)
   166     val SOME (fname, ftype, ls, rs, con_info, eqns) =
   166     val SOME (fname, ftype, ls, rs, con_info, eqns) =
   167       List.foldr (process_eqn thy) NONE eqn_terms;
   167       List.foldr (process_eqn thy) NONE eqn_terms;
   168     val def = process_fun thy (fname, ftype, ls, rs, con_info, eqns);
   168     val def = process_fun thy (fname, ftype, ls, rs, con_info, eqns);
   169 
   169 
   170     val ([def_thm], thy1) = thy
   170     val ([def_thm], thy1) = thy
   171       |> Sign.add_path (NameSpace.base_name fname)
   171       |> Sign.add_path (Long_Name.base_name fname)
   172       |> PureThy.add_defs false [Thm.no_attributes (apfst Binding.name def)];
   172       |> PureThy.add_defs false [Thm.no_attributes (apfst Binding.name def)];
   173 
   173 
   174     val rewrites = def_thm :: map mk_meta_eq (#rec_rewrites con_info)
   174     val rewrites = def_thm :: map mk_meta_eq (#rec_rewrites con_info)
   175     val eqn_thms =
   175     val eqn_thms =
   176       eqn_terms |> map (fn t =>
   176       eqn_terms |> map (fn t =>