src/HOL/Nominal/nominal_atoms.ML
changeset 58112 8081087096ad
parent 58111 82db9ad610b9
child 58225 f5144942a83a
equal deleted inserted replaced
58111:82db9ad610b9 58112:8081087096ad
    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