stronger version of theI2
authorpaulson
Fri, 18 Sep 1998 15:11:05 +0200
changeset 5506 e07254044384
parent 5505 b0856ff6fc69
child 5507 2fd99b2d41e1
stronger version of theI2
src/ZF/upair.ML
--- a/src/ZF/upair.ML	Fri Sep 18 15:09:46 1998 +0200
+++ b/src/ZF/upair.ML	Fri Sep 18 15:11:05 1998 +0200
@@ -198,11 +198,12 @@
  (fn [pa,eq] =>
   [ (fast_tac (claset() addSIs [pa] addEs [eq RS subst]) 1) ]);
 
+AddIs [the_equality];
+
 (* Only use this if you already know EX!x. P(x) *)
 qed_goal "the_equality2" thy
     "!!P. [| EX! x. P(x);  P(a) |] ==> (THE x. P(x)) = a"
- (fn _ =>
-  [ (deepen_tac (claset() addSIs [the_equality]) 1 1) ]);
+ (fn _ => [ (Blast_tac 1) ]);
 
 qed_goal "theI" thy "EX! x. P(x) ==> P(THE x. P(x))"
  (fn [major]=>
@@ -210,13 +211,6 @@
     (resolve_tac [major RS the_equality2 RS ssubst] 1),
     (REPEAT (assume_tac 1)) ]);
 
-(*Easier to apply than theI: conclusion has only one occurrence of P*)
-qed_goal "theI2" thy
-    "[| EX! x. P(x);  !!x. P(x) ==> Q(x) |] ==> Q(THE x. P(x))"
- (fn prems => [ resolve_tac prems 1, 
-                rtac theI 1, 
-                resolve_tac prems 1 ]);
-
 (*the_cong is no longer necessary: if (ALL y.P(y)<->Q(y)) then 
   (THE x.P(x))  rewrites to  (THE x. Q(x))  *)
 
@@ -226,14 +220,26 @@
  (fn _ => [ (blast_tac (claset() addSEs [ReplaceE]) 1) ]);
 
 
+(*Easier to apply than theI: conclusion has only one occurrence of P*)
+val prems = 
+Goal "[| ~ Q(0) ==> EX! x. P(x);  !!x. P(x) ==> Q(x) |] ==> Q(THE x. P(x))";
+by (rtac classical 1);
+by (resolve_tac prems 1);
+by (rtac theI 1);
+by (rtac classical 1);
+by (resolve_tac prems 1);
+be (the_0 RS subst) 1;
+ba 1;
+qed "theI2";
+
 (*** if -- a conditional expression for formulae ***)
 
 Goalw [if_def] "if(True,a,b) = a";
-by (blast_tac (claset() addSIs [the_equality]) 1);
+by (Blast_tac 1);
 qed "if_true";
 
 Goalw [if_def] "if(False,a,b) = b";
-by (blast_tac (claset() addSIs [the_equality]) 1);
+by (Blast_tac 1);
 qed "if_false";
 
 (*Never use with case splitting, or if P is known to be true or false*)
@@ -244,12 +250,12 @@
 
 (*Not needed for rewriting, since P would rewrite to True anyway*)
 Goalw [if_def] "P ==> if(P,a,b) = a";
-by (blast_tac (claset() addSIs [the_equality]) 1);
+by (Blast_tac 1);
 qed "if_P";
 
 (*Not needed for rewriting, since P would rewrite to False anyway*)
 Goalw [if_def] "~P ==> if(P,a,b) = b";
-by (blast_tac (claset() addSIs [the_equality]) 1);
+by (Blast_tac 1);
 qed "if_not_P";
 
 Addsimps [if_true, if_false];