ZF/upair/consE', UnE': new
authorlcp
Mon, 22 Aug 1994 11:27:23 +0200
changeset 572 13c30ac40f8f
parent 571 0b03ce5b62f7
child 573 2fa5ef27bd0a
ZF/upair/consE', UnE': new
src/ZF/upair.ML
--- a/src/ZF/upair.ML	Mon Aug 22 11:11:17 1994 +0200
+++ b/src/ZF/upair.ML	Mon Aug 22 11:27:23 1994 +0200
@@ -52,6 +52,17 @@
     (etac UpairE 1),
     (REPEAT (EVERY1 [resolve_tac prems, etac subst, assume_tac])) ]);
 
+(*Stronger version of the rule above*)
+val UnE' = prove_goal ZF.thy
+    "[| c : A Un B;  c:A ==> P;  [| c:B;  c~:A |] ==> P |] ==> P"
+ (fn major::prems =>
+  [(rtac (major RS UnE) 1),
+   (eresolve_tac prems 1),
+   (rtac classical 1),
+   (eresolve_tac prems 1),
+   (swap_res_tac prems 1),
+   (etac notnotD 1)]);
+
 val Un_iff = prove_goal ZF.thy "c : A Un B <-> (c:A | c:B)"
  (fn _ => [ (fast_tac (lemmas_cs addIs [UnI1,UnI2] addSEs [UnE]) 1) ]);
 
@@ -125,6 +136,17 @@
   [ (rtac (major RS UnE) 1),
     (REPEAT (eresolve_tac (prems @ [UpairE]) 1)) ]);
 
+(*Stronger version of the rule above*)
+val consE' = prove_goal ZF.thy
+    "[| a : cons(b,A);  a=b ==> P;  [| a:A;  a~=b |] ==> P |] ==> P"
+ (fn major::prems =>
+  [(rtac (major RS consE) 1),
+   (eresolve_tac prems 1),
+   (rtac classical 1),
+   (eresolve_tac prems 1),
+   (swap_res_tac prems 1),
+   (etac notnotD 1)]);
+
 val cons_iff = prove_goal ZF.thy "a : cons(b,A) <-> (a=b | a:A)"
  (fn _ => [ (fast_tac (lemmas_cs addIs [consI1,consI2] addSEs [consE]) 1) ]);