231 val opt_name = Scan.optional (P.name --| P.$$$ ":") "" |
231 val opt_name = Scan.optional (P.name --| P.$$$ ":") "" |
232 val opt_overloaded = P.opt_keyword "overloaded"; |
232 val opt_overloaded = P.opt_keyword "overloaded"; |
233 |
233 |
234 val specification_decl = |
234 val specification_decl = |
235 P.$$$ "(" |-- Scan.repeat1 (opt_name -- P.term -- opt_overloaded) --| P.$$$ ")" -- |
235 P.$$$ "(" |-- Scan.repeat1 (opt_name -- P.term -- opt_overloaded) --| P.$$$ ")" -- |
236 Scan.repeat1 (SpecParse.opt_thm_name ":" -- P.prop) |
236 Scan.repeat1 ((SpecParse.opt_thm_name ":" >> apfst Name.name_of) -- P.prop) |
237 |
237 |
238 val _ = |
238 val _ = |
239 OuterSyntax.command "specification" "define constants by specification" K.thy_goal |
239 OuterSyntax.command "specification" "define constants by specification" K.thy_goal |
240 (specification_decl >> (fn (cos,alt_props) => |
240 (specification_decl >> (fn (cos,alt_props) => |
241 Toplevel.print o (Toplevel.theory_to_proof |
241 Toplevel.print o (Toplevel.theory_to_proof |
242 (process_spec NONE cos alt_props)))) |
242 (process_spec NONE cos alt_props)))) |
243 |
243 |
244 val ax_specification_decl = |
244 val ax_specification_decl = |
245 P.name -- |
245 P.name -- |
246 (P.$$$ "(" |-- Scan.repeat1 (opt_name -- P.term -- opt_overloaded) --| P.$$$ ")" -- |
246 (P.$$$ "(" |-- Scan.repeat1 (opt_name -- P.term -- opt_overloaded) --| P.$$$ ")" -- |
247 Scan.repeat1 (SpecParse.opt_thm_name ":" -- P.prop)) |
247 Scan.repeat1 ((SpecParse.opt_thm_name ":" >> apfst Name.name_of) -- P.prop)) |
248 |
248 |
249 val _ = |
249 val _ = |
250 OuterSyntax.command "ax_specification" "define constants by specification" K.thy_goal |
250 OuterSyntax.command "ax_specification" "define constants by specification" K.thy_goal |
251 (ax_specification_decl >> (fn (axname,(cos,alt_props)) => |
251 (ax_specification_decl >> (fn (axname,(cos,alt_props)) => |
252 Toplevel.print o (Toplevel.theory_to_proof |
252 Toplevel.print o (Toplevel.theory_to_proof |