equal
deleted
inserted
replaced
210 let |
210 let |
211 val rhs = fold_rev (fn T => fn t => Abs ("", T, t)) |
211 val rhs = fold_rev (fn T => fn t => Abs ("", T, t)) |
212 ((map snd ls) @ [dummyT]) |
212 ((map snd ls) @ [dummyT]) |
213 (list_comb (Const (rec_name, dummyT), |
213 (list_comb (Const (rec_name, dummyT), |
214 fs @ map Bound (0 ::(length ls downto 1)))) |
214 fs @ map Bound (0 ::(length ls downto 1)))) |
215 val def_name = NameSpace.base_name fname ^ "_" ^ NameSpace.base_name tname ^ "_def"; |
215 val def_name = Long_Name.base_name fname ^ "_" ^ Long_Name.base_name tname ^ "_def"; |
216 val def_prop = |
216 val def_prop = |
217 singleton (Syntax.check_terms (ProofContext.init thy)) |
217 singleton (Syntax.check_terms (ProofContext.init thy)) |
218 (Logic.mk_equals (Const (fname, dummyT), rhs)); |
218 (Logic.mk_equals (Const (fname, dummyT), rhs)); |
219 in (def_name, def_prop) end; |
219 in (def_name, def_prop) end; |
220 |
220 |
267 val nameTs2 = map fst rec_eqns; |
267 val nameTs2 = map fst rec_eqns; |
268 val _ = if gen_eq_set (op =) (nameTs1, nameTs2) then () |
268 val _ = if gen_eq_set (op =) (nameTs1, nameTs2) then () |
269 else primrec_err ("functions " ^ commas_quote (map fst nameTs2) ^ |
269 else primrec_err ("functions " ^ commas_quote (map fst nameTs2) ^ |
270 "\nare not mutually recursive"); |
270 "\nare not mutually recursive"); |
271 val primrec_name = |
271 val primrec_name = |
272 if alt_name = "" then (space_implode "_" (map (NameSpace.base_name o #1) defs)) else alt_name; |
272 if alt_name = "" then (space_implode "_" (map (Long_Name.base_name o #1) defs)) else alt_name; |
273 val (defs_thms', thy') = |
273 val (defs_thms', thy') = |
274 thy |
274 thy |
275 |> Sign.add_path primrec_name |
275 |> Sign.add_path primrec_name |
276 |> fold_map def (map (fn (name, t) => ((name, []), t)) defs'); |
276 |> fold_map def (map (fn (name, t) => ((name, []), t)) defs'); |
277 val rewrites = (map mk_meta_eq rec_rewrites) @ map snd defs_thms'; |
277 val rewrites = (map mk_meta_eq rec_rewrites) @ map snd defs_thms'; |