src/HOL/Tools/specification_package.ML
changeset 28083 103d9282a946
parent 27691 ce171cbd4b93
child 29006 abe0f11cfa4e
equal deleted inserted replaced
28082:37350f301128 28083:103d9282a946
   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