233 (reccomb_names ~~ recTs ~~ rec_result_Ts); |
233 (reccomb_names ~~ recTs ~~ rec_result_Ts); |
234 |
234 |
235 val (reccomb_defs, thy2) = |
235 val (reccomb_defs, thy2) = |
236 thy1 |
236 thy1 |
237 |> Sign.add_consts_i (map (fn ((name, T), T') => |
237 |> Sign.add_consts_i (map (fn ((name, T), T') => |
238 (NameSpace.base_name name, reccomb_fn_Ts @ [T] ---> T', NoSyn)) |
238 (Binding.name (NameSpace.base_name name), reccomb_fn_Ts @ [T] ---> T', NoSyn)) |
239 (reccomb_names ~~ recTs ~~ rec_result_Ts)) |
239 (reccomb_names ~~ recTs ~~ rec_result_Ts)) |
240 |> (PureThy.add_defs false o map Thm.no_attributes) (map (fn ((((name, comb), set), T), T') => |
240 |> (PureThy.add_defs false o map Thm.no_attributes) (map (fn ((((name, comb), set), T), T') => |
241 (Binding.name (NameSpace.base_name name ^ "_def"), Logic.mk_equals (comb, absfree ("x", T, |
241 (Binding.name (NameSpace.base_name name ^ "_def"), Logic.mk_equals (comb, absfree ("x", T, |
242 Const ("The", (T' --> HOLogic.boolT) --> T') $ absfree ("y", T', |
242 Const ("The", (T' --> HOLogic.boolT) --> T') $ absfree ("y", T', |
243 set $ Free ("x", T) $ Free ("y", T')))))) |
243 set $ Free ("x", T) $ Free ("y", T')))))) |