98 let |
98 let |
99 |
99 |
100 val (_,thy1) = |
100 val (_,thy1) = |
101 fold_map (fn ak => fn thy => |
101 fold_map (fn ak => fn thy => |
102 let val dt = ((Binding.name ak, [], NoSyn), [(Binding.name ak, [@{typ nat}], NoSyn)]) |
102 let val dt = ((Binding.name ak, [], NoSyn), [(Binding.name ak, [@{typ nat}], NoSyn)]) |
103 val (dt_names, thy1) = Datatype.add_datatype Datatype_Aux.default_config [dt] thy; |
103 val (dt_names, thy1) = |
|
104 Old_Datatype.add_datatype Old_Datatype_Aux.default_config [dt] thy; |
104 |
105 |
105 val injects = maps (#inject o Datatype_Data.the_info thy1) dt_names; |
106 val injects = maps (#inject o Old_Datatype_Data.the_info thy1) dt_names; |
106 val ak_type = Type (Sign.intern_type thy1 ak,[]) |
107 val ak_type = Type (Sign.intern_type thy1 ak,[]) |
107 val ak_sign = Sign.intern_const thy1 ak |
108 val ak_sign = Sign.intern_const thy1 ak |
108 |
109 |
109 val inj_type = @{typ nat} --> ak_type |
110 val inj_type = @{typ nat} --> ak_type |
110 val inj_on_type = inj_type --> @{typ "nat set"} --> @{typ bool} |
111 val inj_on_type = inj_type --> @{typ "nat set"} --> @{typ bool} |
188 (Free (swap_name, swapT) $ HOLogic.mk_prod (a,b) $ c, |
189 (Free (swap_name, swapT) $ HOLogic.mk_prod (a,b) $ c, |
189 cif $ HOLogic.mk_eq (a,c) $ b $ (cif $ HOLogic.mk_eq (b,c) $ a $ c))) |
190 cif $ HOLogic.mk_eq (a,c) $ b $ (cif $ HOLogic.mk_eq (b,c) $ a $ c))) |
190 val def2 = Logic.mk_equals (cswap $ ab $ c, cswap_akname $ ab $ c) |
191 val def2 = Logic.mk_equals (cswap $ ab $ c, cswap_akname $ ab $ c) |
191 in |
192 in |
192 thy' |> |
193 thy' |> |
193 Primrec.add_primrec_global |
194 Old_Primrec.add_primrec_global |
194 [(Binding.name swap_name, SOME swapT, NoSyn)] |
195 [(Binding.name swap_name, SOME swapT, NoSyn)] |
195 [(Attrib.empty_binding, def1)] ||> |
196 [(Attrib.empty_binding, def1)] ||> |
196 Sign.parent_path ||>> |
197 Sign.parent_path ||>> |
197 Global_Theory.add_defs_unchecked true |
198 Global_Theory.add_defs_unchecked true |
198 [((Binding.name name, def2), [])] |>> (snd o fst) |
199 [((Binding.name name, def2), [])] |>> (snd o fst) |
222 val def2 = HOLogic.mk_Trueprop (HOLogic.mk_eq |
223 val def2 = HOLogic.mk_Trueprop (HOLogic.mk_eq |
223 (prm $ mk_Cons x xs $ a, |
224 (prm $ mk_Cons x xs $ a, |
224 Const (swap_name, swapT) $ x $ (prm $ xs $ a))); |
225 Const (swap_name, swapT) $ x $ (prm $ xs $ a))); |
225 in |
226 in |
226 thy' |> |
227 thy' |> |
227 Primrec.add_primrec_global |
228 Old_Primrec.add_primrec_global |
228 [(Binding.name prm_name, SOME prmT, NoSyn)] |
229 [(Binding.name prm_name, SOME prmT, NoSyn)] |
229 [(Attrib.empty_binding, def1), (Attrib.empty_binding, def2)] ||> |
230 [(Attrib.empty_binding, def1), (Attrib.empty_binding, def2)] ||> |
230 Sign.parent_path |
231 Sign.parent_path |
231 end) ak_names_types thy3; |
232 end) ak_names_types thy3; |
232 |
233 |