equal
deleted
inserted
replaced
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; |