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), []), |