src/HOLCF/Tools/pcpodef_package.ML
changeset 24867 e5b55d7be9bb
parent 24712 64ed05609568
child 24920 2a45e400fdad
equal deleted inserted replaced
24866:6e6d9e80ebb4 24867:e5b55d7be9bb
   182 
   182 
   183 (** outer syntax **)
   183 (** outer syntax **)
   184 
   184 
   185 local structure P = OuterParse and K = OuterKeyword in
   185 local structure P = OuterParse and K = OuterKeyword in
   186 
   186 
   187 (* copied from HOL/Tools/typedef_package.ML *)
   187 (* cf. HOL/Tools/typedef_package.ML *)
   188 val typedef_proof_decl =
   188 val typedef_proof_decl =
   189   Scan.optional (P.$$$ "(" |--
   189   Scan.optional (P.$$$ "(" |--
   190       ((P.$$$ "open" >> K false) -- Scan.option P.name || P.name >> (fn s => (true, SOME s)))
   190       ((P.$$$ "open" >> K false) -- Scan.option P.name || P.name >> (fn s => (true, SOME s)))
   191         --| P.$$$ ")") (true, NONE) --
   191         --| P.$$$ ")") (true, NONE) --
   192     (P.type_args -- P.name) -- P.opt_infix -- (P.$$$ "=" |-- P.term) --
   192     (P.type_args -- P.name) -- P.opt_infix -- (P.$$$ "=" |-- P.term) --
   194 
   194 
   195 fun mk_pcpodef_proof pcpo ((((((def, opt_name), (vs, t)), mx), A), morphs)) =
   195 fun mk_pcpodef_proof pcpo ((((((def, opt_name), (vs, t)), mx), A), morphs)) =
   196   (if pcpo then pcpodef_proof else cpodef_proof)
   196   (if pcpo then pcpodef_proof else cpodef_proof)
   197     ((def, the_default (Syntax.type_name t mx) opt_name), (t, vs, mx), A, morphs);
   197     ((def, the_default (Syntax.type_name t mx) opt_name), (t, vs, mx), A, morphs);
   198 
   198 
   199 val pcpodefP =
   199 val _ =
   200   OuterSyntax.command "pcpodef" "HOLCF type definition (requires admissibility proof)" K.thy_goal
   200   OuterSyntax.command "pcpodef" "HOLCF type definition (requires admissibility proof)" K.thy_goal
   201     (typedef_proof_decl >>
   201     (typedef_proof_decl >>
   202       (Toplevel.print oo (Toplevel.theory_to_proof o mk_pcpodef_proof true)));
   202       (Toplevel.print oo (Toplevel.theory_to_proof o mk_pcpodef_proof true)));
   203 
   203 
   204 val cpodefP =
   204 val _ =
   205   OuterSyntax.command "cpodef" "HOLCF type definition (requires admissibility proof)" K.thy_goal
   205   OuterSyntax.command "cpodef" "HOLCF type definition (requires admissibility proof)" K.thy_goal
   206     (typedef_proof_decl >>
   206     (typedef_proof_decl >>
   207       (Toplevel.print oo (Toplevel.theory_to_proof o mk_pcpodef_proof false)));
   207       (Toplevel.print oo (Toplevel.theory_to_proof o mk_pcpodef_proof false)));
   208 
   208 
   209 val _ = OuterSyntax.add_parsers [pcpodefP, cpodefP];
       
   210 
       
   211 end;
   209 end;
   212 
   210 
   213 end;
   211 end;