src/HOL/thy_syntax.ML
changeset 1668 8ead1fe65aad
parent 1574 5a63ab90ee8a
child 1788 ca62fab4ce92
equal deleted inserted replaced
1667:6056e9c967d9 1668:8ead1fe65aad
   114     end;
   114     end;
   115 
   115 
   116   fun mk_rules tname cons pre = " map (get_axiom thy) " ^
   116   fun mk_rules tname cons pre = " map (get_axiom thy) " ^
   117     mk_list (map (fn ((s, _), _) => quote (tname ^ pre ^ strip_quotes s)) cons);
   117     mk_list (map (fn ((s, _), _) => quote (tname ^ pre ^ strip_quotes s)) cons);
   118 
   118 
   119   (*generate string for calling add_datatype*)
   119   (*generate string for calling add_datatype and build_record*)
   120   fun mk_params ((ts, tname), cons) =
   120   fun mk_params ((ts, tname), cons) =
   121    ("val (thy, " ^ tname ^ "_add_primrec) = Datatype.add_datatype\n"
   121    ("val (thy, " ^ tname ^ "_add_primrec) = Datatype.add_datatype\n"
   122     ^ mk_triple (mk_list ts, quote tname, mk_list (mk_cons cons)) ^ " thy\n\
   122     ^ mk_triple (mk_list ts, quote tname, mk_list (mk_cons cons)) ^ " thy\n\
   123     \val thy = thy",
   123     \val thy = thy",
   124     "structure " ^ tname ^ " =\n\
   124     "structure " ^ tname ^ " =\n\
   137     \ val cases =" ^ mk_rules tname cons "_case_" ^ ";\n\
   137     \ val cases =" ^ mk_rules tname cons "_case_" ^ ";\n\
   138     \ val recs =" ^ mk_rules tname cons "_rec_" ^ ";\n\
   138     \ val recs =" ^ mk_rules tname cons "_rec_" ^ ";\n\
   139     \ val simps = inject @ distinct @ cases @ recs;\n\
   139     \ val simps = inject @ distinct @ cases @ recs;\n\
   140     \ fun induct_tac a = res_inst_tac [(" ^ quote tname ^ ", a)] induct;\n\
   140     \ fun induct_tac a = res_inst_tac [(" ^ quote tname ^ ", a)] induct;\n\
   141     \end;\n\
   141     \end;\n\
       
   142     \val dummy = datatypes := Dtype.build_record (thy, " ^
       
   143       mk_pair (quote tname, mk_list (map (fst o fst) cons)) ^
       
   144       ", " ^ tname ^ ".induct_tac) :: (!datatypes);\n\
   142     \val dummy = Addsimps " ^ tname ^ ".simps;\n");
   145     \val dummy = Addsimps " ^ tname ^ ".simps;\n");
   143 
   146 
   144   (*parsers*)
   147   (*parsers*)
   145   val tvars = type_args >> map (cat "dtVar");
   148   val tvars = type_args >> map (cat "dtVar");
   146 
   149