src/HOLCF/pcpodef_package.ML
changeset 19247 ff585297e9f5
parent 19134 47d337aefc21
child 19349 36e537f89585
equal deleted inserted replaced
19246:aa45f5e456d3 19247:ff585297e9f5
    96       | option_fold_rule (SOME def) = fold_rule [def];
    96       | option_fold_rule (SOME def) = fold_rule [def];
    97     
    97     
    98     fun make_po tac thy =
    98     fun make_po tac thy =
    99       thy
    99       thy
   100       |> TypedefPackage.add_typedef_i def (SOME name) (t, vs, mx) set opt_morphs tac
   100       |> TypedefPackage.add_typedef_i def (SOME name) (t, vs, mx) set opt_morphs tac
   101       |>> AxClass.add_inst_arity_i (full_tname, lhs_sorts, ["Porder.sq_ord"])
   101       |>> AxClass.prove_arity (full_tname, lhs_sorts, ["Porder.sq_ord"])
   102            (ClassPackage.intro_classes_tac [])
   102            (ClassPackage.intro_classes_tac [])
   103       |>>> (PureThy.add_defs_i true [Thm.no_attributes less_def] #> Library.swap)
   103       |>>> (PureThy.add_defs_i true [Thm.no_attributes less_def] #> Library.swap)
   104       |> (fn (thy', ({type_definition, set_def, ...}, [less_definition])) =>
   104       |> (fn (thy', ({type_definition, set_def, ...}, [less_definition])) =>
   105            thy'
   105            thy'
   106            |> AxClass.add_inst_arity_i (full_tname, lhs_sorts, ["Porder.po"])
   106            |> AxClass.prove_arity (full_tname, lhs_sorts, ["Porder.po"])
   107              (Tactic.rtac (typedef_po OF [type_definition, less_definition]) 1)
   107              (Tactic.rtac (typedef_po OF [type_definition, less_definition]) 1)
   108            |> rpair (type_definition, less_definition, set_def));
   108            |> rpair (type_definition, less_definition, set_def));
   109     
   109     
   110     fun make_cpo admissible (theory, defs as (type_def, less_def, set_def)) =
   110     fun make_cpo admissible (theory, defs as (type_def, less_def, set_def)) =
   111       let
   111       let
   112         val admissible' = option_fold_rule set_def admissible;
   112         val admissible' = option_fold_rule set_def admissible;
   113         val cpo_thms = [type_def, less_def, admissible'];
   113         val cpo_thms = [type_def, less_def, admissible'];
   114         val (_, theory') =
   114         val (_, theory') =
   115           theory
   115           theory
   116           |> AxClass.add_inst_arity_i (full_tname, lhs_sorts, ["Pcpo.cpo"])
   116           |> AxClass.prove_arity (full_tname, lhs_sorts, ["Pcpo.cpo"])
   117             (Tactic.rtac (typedef_cpo OF cpo_thms) 1)
   117             (Tactic.rtac (typedef_cpo OF cpo_thms) 1)
   118           |> Theory.add_path name
   118           |> Theory.add_path name
   119           |> PureThy.add_thms
   119           |> PureThy.add_thms
   120             ([(("adm_" ^ name, admissible'), []),
   120             ([(("adm_" ^ name, admissible'), []),
   121               (("cont_" ^ Rep_name, cont_Rep OF cpo_thms), []),
   121               (("cont_" ^ Rep_name, cont_Rep OF cpo_thms), []),
   130       let
   130       let
   131         val UUmem' = option_fold_rule set_def UUmem;
   131         val UUmem' = option_fold_rule set_def UUmem;
   132         val pcpo_thms = [type_def, less_def, UUmem'];
   132         val pcpo_thms = [type_def, less_def, UUmem'];
   133         val (_, theory') =
   133         val (_, theory') =
   134           theory
   134           theory
   135           |> AxClass.add_inst_arity_i (full_tname, lhs_sorts, ["Pcpo.pcpo"])
   135           |> AxClass.prove_arity (full_tname, lhs_sorts, ["Pcpo.pcpo"])
   136             (Tactic.rtac (typedef_pcpo OF pcpo_thms) 1)
   136             (Tactic.rtac (typedef_pcpo OF pcpo_thms) 1)
   137           |> Theory.add_path name
   137           |> Theory.add_path name
   138           |> PureThy.add_thms
   138           |> PureThy.add_thms
   139             ([((Rep_name ^ "_strict", Rep_strict OF pcpo_thms), []),
   139             ([((Rep_name ^ "_strict", Rep_strict OF pcpo_thms), []),
   140               ((Abs_name ^ "_strict", Abs_strict OF pcpo_thms), []),
   140               ((Abs_name ^ "_strict", Abs_strict OF pcpo_thms), []),