improved errors;
authorwenzelm
Tue, 19 Dec 2000 13:06:49 +0100
changeset 10697 ec197510165a
parent 10696 76d7f6c9a14c
child 10698 dc5e984dfe13
improved errors;
src/HOL/Tools/typedef_package.ML
--- a/src/HOL/Tools/typedef_package.ML	Mon Dec 18 16:45:17 2000 +0100
+++ b/src/HOL/Tools/typedef_package.ML	Tue Dec 19 13:06:49 2000 +0100
@@ -154,9 +154,9 @@
     val typedef_prop = HOLogic.mk_Trueprop (typedefC $ RepC $ AbsC $ set');
 
     (*theory extender*)
-    fun do_typedef theory =
+    fun do_typedef super_theory theory =
       theory
-      |> Theory.assert_super thy
+      |> Theory.assert_super super_theory
       |> add_typedecls [(t, vs, mx)]
       |> Theory.add_consts_i
        ((if no_def then [] else [(name, setT, NoSyn)]) @
@@ -219,7 +219,7 @@
   let
     val (cset, _, do_typedef) = prepare_typedef prep_term no_def name typ set thy;
     val result = prove_nonempty thy cset (names, thms, tac);
-  in check_nonempty cset result; thy |> do_typedef |> #1 end;
+  in check_nonempty cset result; thy |> do_typedef thy |> #1 end;
 
 val add_typedef = gen_add_typedef read_term false;
 val add_typedef_i = gen_add_typedef cert_term false;
@@ -236,9 +236,10 @@
     val (cset, cset_pat, do_typedef) = prepare_typedef prep_term false name typ set thy;
     val goal = Thm.term_of (goal_nonempty true cset);
     val goal_pat = Thm.term_of (goal_nonempty true cset_pat);
+    val test_thy = Theory.copy thy;
   in
-    thy
-    |> IsarThy.theorem_i ((("", [typedef_attribute cset do_typedef]),
+    test_thy |> do_typedef test_thy;  (*preview errors!*)
+    thy |> IsarThy.theorem_i ((("", [typedef_attribute cset (do_typedef thy)]),
       (goal, ([goal_pat], []))), comment) int
   end;