161 ((if def then [(name, setT', NoSyn)] else []) @ |
161 ((if def then [(name, setT', NoSyn)] else []) @ |
162 [(Rep_name, newT --> oldT, NoSyn), |
162 [(Rep_name, newT --> oldT, NoSyn), |
163 (Abs_name, oldT --> newT, NoSyn)]) |
163 (Abs_name, oldT --> newT, NoSyn)]) |
164 |> add_def (Logic.mk_defpair (setC, set)) |
164 |> add_def (Logic.mk_defpair (setC, set)) |
165 ||>> PureThy.add_axioms_i [((typedef_name, typedef_prop), |
165 ||>> PureThy.add_axioms_i [((typedef_name, typedef_prop), |
166 [apsnd (fn cond_axm => Drule.standard (nonempty RS cond_axm))])] |
166 [apsnd (fn cond_axm => nonempty RS cond_axm)])] |
167 ||> Theory.add_deps "" (dest_Const RepC) typedef_deps |
167 ||> Theory.add_deps "" (dest_Const RepC) typedef_deps |
168 ||> Theory.add_deps "" (dest_Const AbsC) typedef_deps |
168 ||> Theory.add_deps "" (dest_Const AbsC) typedef_deps |
169 |-> (fn (set_def, [type_definition]) => fn thy1 => |
169 |-> (fn (set_def, [type_definition]) => fn thy1 => |
170 let |
170 let |
171 fun make th = Drule.standard (th OF [type_definition]); |
171 fun make th = Drule.standard (th OF [type_definition]); |
241 let |
241 let |
242 val name = the_default (#1 typ) opt_name; |
242 val name = the_default (#1 typ) opt_name; |
243 val (cset, goal, _, typedef_result) = |
243 val (cset, goal, _, typedef_result) = |
244 prepare_typedef prep_term def name typ set opt_morphs thy; |
244 prepare_typedef prep_term def name typ set opt_morphs thy; |
245 val _ = message ("Proving non-emptiness of set " ^ quote (string_of_cterm cset) ^ " ..."); |
245 val _ = message ("Proving non-emptiness of set " ^ quote (string_of_cterm cset) ^ " ..."); |
246 val non_empty = Goal.prove thy [] [] goal (K tac) handle ERROR msg => |
246 val non_empty = Goal.prove_global thy [] [] goal (K tac) handle ERROR msg => |
247 cat_error msg ("Failed to prove non-emptiness of " ^ quote (string_of_cterm cset)); |
247 cat_error msg ("Failed to prove non-emptiness of " ^ quote (string_of_cterm cset)); |
248 in |
248 in |
249 Context.Theory thy |
249 Context.Theory thy |
250 |> typedef_result non_empty |
250 |> typedef_result non_empty |
251 ||> Context.the_theory |
251 ||> Context.the_theory |