thy_syntax.ML
changeset 201 4d0545e93c0d
parent 196 61620d959717
child 215 5f9d7ed4ea0c
equal deleted inserted replaced
200:c480add17d52 201:4d0545e93c0d
     7 TODO:
     7 TODO:
     8   move datatype / primrec stuff to pre_datatype.ML (?)
     8   move datatype / primrec stuff to pre_datatype.ML (?)
     9 *)
     9 *)
    10 
    10 
    11 (*the kind of distinctiveness axioms depends on number of constructors*)
    11 (*the kind of distinctiveness axioms depends on number of constructors*)
    12 val dtK = 5;  (* FIXME remove from datatype.ML, rename *)
    12 val dtK = 5;  (* FIXME rename?, move? *)
    13 
    13 
    14 structure ThySynData: THY_SYN_DATA =
    14 structure ThySynData: THY_SYN_DATA =
    15 struct
    15 struct
    16 
    16 
    17 open ThyParse;
    17 open ThyParse;
   151 
   151 
   152 
   152 
   153 
   153 
   154 (** primrec **)
   154 (** primrec **)
   155 
   155 
   156 (* FIXME add_thms_as_axms (?) *)
       
   157 
       
   158 fun mk_primrec_decl ((fname, tname), axms) =
   156 fun mk_primrec_decl ((fname, tname), axms) =
   159   let
   157   let
   160     fun mk_prove (name, eqn) =
   158     fun mk_prove (name, eqn) =
   161       "val " ^ name ^ " = prove_goalw thy [get_def thy " ^ fname ^ "] " ^ eqn ^ "\n\
   159       "val " ^ name ^ " = store_thm (" ^ quote name ^ ", prove_goalw thy [get_def thy " 
   162       \  (fn _ => [simp_tac (HOL_ss addsimps " ^ tname ^ ".recs) 1])";
   160       ^ fname ^ "] " ^ eqn ^ "\n\
       
   161       \  (fn _ => [simp_tac (HOL_ss addsimps " ^ tname ^ ".recs) 1]));";
   163     val axs = mk_list (map (fn (n, a) => mk_pair (quote n, a)) axms);
   162     val axs = mk_list (map (fn (n, a) => mk_pair (quote n, a)) axms);
   164   in ("|> " ^ tname ^ "_add_primrec " ^ axs, cat_lines (map mk_prove axms)) end;
   163   in ("|> " ^ tname ^ "_add_primrec " ^ axs, cat_lines (map mk_prove axms)) end;
   165 
   164 
   166 val primrec_decl =
   165 val primrec_decl =
   167   name -- long_id -- repeat1 (ident -- string) >> mk_primrec_decl;
   166   name -- long_id -- repeat1 (ident -- string) >> mk_primrec_decl;