src/ZF/upair.ML
changeset 9180 3bda56c0d70d
parent 8551 5c22595bc599
child 9211 6236c5285bd8
--- a/src/ZF/upair.ML	Wed Jun 28 12:16:36 2000 +0200
+++ b/src/ZF/upair.ML	Wed Jun 28 12:34:08 2000 +0200
@@ -26,17 +26,19 @@
 
 Addsimps [Upair_iff];
 
-qed_goal "UpairI1" thy "a : Upair(a,b)"
- (fn _ => [ Simp_tac 1 ]);
-
-qed_goal "UpairI2" thy "b : Upair(a,b)"
- (fn _ => [ Simp_tac 1 ]);
+Goal "a : Upair(a,b)";
+by (Simp_tac 1);
+qed "UpairI1";
 
-qed_goal "UpairE" thy
-    "[| a : Upair(b,c);  a=b ==> P;  a=c ==> P |] ==> P"
- (fn major::prems=>
-  [ (rtac (major RS (Upair_iff RS iffD1 RS disjE)) 1),
-    (REPEAT (eresolve_tac prems 1)) ]);
+Goal "b : Upair(a,b)";
+by (Simp_tac 1);
+qed "UpairI2";
+
+val major::prems= Goal
+    "[| a : Upair(b,c);  a=b ==> P;  a=c ==> P |] ==> P";
+by (rtac (major RS (Upair_iff RS iffD1 RS disjE)) 1);
+by (REPEAT (eresolve_tac prems 1)) ;
+qed "UpairE";
 
 AddSIs [UpairI1,UpairI2];
 AddSEs [UpairE];
@@ -44,37 +46,40 @@
 (*** Rules for binary union -- Un -- defined via Upair ***)
 
 qed_goalw "Un_iff" thy [Un_def] "c : A Un B <-> (c:A | c:B)"
- (fn _ => [ Blast_tac 1 ]);
+ (fn _ => [(Blast_tac 1)]);
 
 Addsimps [Un_iff];
 
-qed_goal "UnI1" thy "!!c. c : A ==> c : A Un B"
- (fn _ => [ Asm_simp_tac 1 ]);
-
-qed_goal "UnI2" thy "!!c. c : B ==> c : A Un B"
- (fn _ => [ Asm_simp_tac 1 ]);
+Goal "c : A ==> c : A Un B";
+by (Asm_simp_tac 1);
+qed "UnI1";
 
-qed_goal "UnE" thy 
-    "[| c : A Un B;  c:A ==> P;  c:B ==> P |] ==> P"
- (fn major::prems=>
-  [ (rtac (major RS (Un_iff RS iffD1 RS disjE)) 1),
-    (REPEAT (eresolve_tac prems 1)) ]);
+Goal "c : B ==> c : A Un B";
+by (Asm_simp_tac 1);
+qed "UnI2";
+
+val major::prems= Goal 
+    "[| c : A Un B;  c:A ==> P;  c:B ==> P |] ==> P";
+by (rtac (major RS (Un_iff RS iffD1 RS disjE)) 1);
+by (REPEAT (eresolve_tac prems 1)) ;
+qed "UnE";
 
 (*Stronger version of the rule above*)
-qed_goal "UnE'" 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 major::prems = Goal
+    "[| c : A Un B;  c:A ==> P;  [| c:B;  c~:A |] ==> P |] ==> P";
+by (rtac (major RS UnE) 1);
+by (eresolve_tac prems 1);
+by (rtac classical 1);
+by (eresolve_tac prems 1);
+by (swap_res_tac prems 1);
+by (etac notnotD 1);
+qed "UnE'";
 
 (*Classical introduction rule: no commitment to A vs B*)
-qed_goal "UnCI" thy "(c ~: B ==> c : A) ==> c : A Un B"
- (fn prems=>
-  [ Simp_tac 1, blast_tac (claset() addSIs prems) 1 ]);
+val prems = Goal "(c ~: B ==> c : A) ==> c : A Un B";
+by (Simp_tac 1);
+by (blast_tac (claset() addSIs prems) 1);
+qed "UnCI";
 
 AddSIs [UnCI];
 AddSEs [UnE];
@@ -83,24 +88,26 @@
 (*** Rules for small intersection -- Int -- defined via Upair ***)
 
 qed_goalw "Int_iff" thy [Int_def] "c : A Int B <-> (c:A & c:B)"
- (fn _ => [ Blast_tac 1 ]);
+ (fn _ => [(Blast_tac 1)]);
 
 Addsimps [Int_iff];
 
-qed_goal "IntI" thy "!!c. [| c : A;  c : B |] ==> c : A Int B"
- (fn _ => [ Asm_simp_tac 1 ]);
+Goal "[| c : A;  c : B |] ==> c : A Int B";
+by (Asm_simp_tac 1);
+qed "IntI";
 
-qed_goal "IntD1" thy "!!c. c : A Int B ==> c : A"
- (fn _ => [ Asm_full_simp_tac 1 ]);
+Goal "c : A Int B ==> c : A";
+by (Asm_full_simp_tac 1);
+qed "IntD1";
 
-qed_goal "IntD2" thy "!!c. c : A Int B ==> c : B"
- (fn _ => [ Asm_full_simp_tac 1 ]);
+Goal "c : A Int B ==> c : B";
+by (Asm_full_simp_tac 1);
+qed "IntD2";
 
-qed_goal "IntE" thy
-    "[| c : A Int B;  [| c:A; c:B |] ==> P |] ==> P"
- (fn prems=>
-  [ (resolve_tac prems 1),
-    (REPEAT (resolve_tac (prems RL [IntD1,IntD2]) 1)) ]);
+val prems = Goal "[| c : A Int B;  [| c:A; c:B |] ==> P |] ==> P";
+by (resolve_tac prems 1);
+by (REPEAT (resolve_tac (prems RL [IntD1,IntD2]) 1)) ;
+qed "IntE";
 
 AddSIs [IntI];
 AddSEs [IntE];
@@ -108,24 +115,26 @@
 (*** Rules for set difference -- defined via Upair ***)
 
 qed_goalw "Diff_iff" thy [Diff_def] "c : A-B <-> (c:A & c~:B)"
- (fn _ => [ Blast_tac 1 ]);
+ (fn _ => [(Blast_tac 1)]);
 
 Addsimps [Diff_iff];
 
-qed_goal "DiffI" thy "!!c. [| c : A;  c ~: B |] ==> c : A - B"
- (fn _ => [ Asm_simp_tac 1 ]);
+Goal "[| c : A;  c ~: B |] ==> c : A - B";
+by (Asm_simp_tac 1);
+qed "DiffI";
 
-qed_goal "DiffD1" thy "!!c. c : A - B ==> c : A"
- (fn _ => [ Asm_full_simp_tac 1 ]);
+Goal "c : A - B ==> c : A";
+by (Asm_full_simp_tac 1);
+qed "DiffD1";
 
-qed_goal "DiffD2" thy "!!c. c : A - B ==> c ~: B"
- (fn _ => [ Asm_full_simp_tac 1 ]);
+Goal "c : A - B ==> c ~: B";
+by (Asm_full_simp_tac 1);
+qed "DiffD2";
 
-qed_goal "DiffE" thy
-    "[| c : A - B;  [| c:A; c~:B |] ==> P |] ==> P"
- (fn prems=>
-  [ (resolve_tac prems 1),
-    (REPEAT (ares_tac (prems RL [DiffD1, DiffD2]) 1)) ]);
+val prems = Goal "[| c : A - B;  [| c:A; c~:B |] ==> P |] ==> P";
+by (resolve_tac prems 1);
+by (REPEAT (ares_tac (prems RL [DiffD1, DiffD2]) 1)) ;
+qed "DiffE";
 
 AddSIs [DiffI];
 AddSEs [DiffE];
@@ -133,47 +142,51 @@
 (*** Rules for cons -- defined via Un and Upair ***)
 
 qed_goalw "cons_iff" thy [cons_def] "a : cons(b,A) <-> (a=b | a:A)"
- (fn _ => [ Blast_tac 1 ]);
+ (fn _ => [(Blast_tac 1)]);
 
 Addsimps [cons_iff];
 
-qed_goal "consI1" thy "a : cons(a,B)"
- (fn _ => [ Simp_tac 1 ]);
+Goal "a : cons(a,B)";
+by (Simp_tac 1);
+qed "consI1";
 
 Addsimps [consI1];
 AddTCs   [consI1];   (*risky as a typechecking rule, but solves otherwise
 		       unconstrained goals of the form  x : ?A*)
 
-qed_goal "consI2" thy "!!B. a : B ==> a : cons(b,B)"
- (fn _ => [ Asm_simp_tac 1 ]);
+Goal "a : B ==> a : cons(b,B)";
+by (Asm_simp_tac 1);
+qed "consI2";
 
-qed_goal "consE" thy
-    "[| a : cons(b,A);  a=b ==> P;  a:A ==> P |] ==> P"
- (fn major::prems=>
-  [ (rtac (major RS (cons_iff RS iffD1 RS disjE)) 1),
-    (REPEAT (eresolve_tac (prems @ [UpairE]) 1)) ]);
+val major::prems= Goal
+    "[| a : cons(b,A);  a=b ==> P;  a:A ==> P |] ==> P";
+by (rtac (major RS (cons_iff RS iffD1 RS disjE)) 1);
+by (REPEAT (eresolve_tac (prems @ [UpairE]) 1)) ;
+qed "consE";
 
 (*Stronger version of the rule above*)
-qed_goal "consE'" 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 major::prems = Goal
+    "[| a : cons(b,A);  a=b ==> P;  [| a:A;  a~=b |] ==> P |] ==> P";
+by (rtac (major RS consE) 1);
+by (eresolve_tac prems 1);
+by (rtac classical 1);
+by (eresolve_tac prems 1);
+by (swap_res_tac prems 1);
+by (etac notnotD 1);
+qed "consE'";
 
 (*Classical introduction rule*)
-qed_goal "consCI" thy "(a~:B ==> a=b) ==> a: cons(b,B)"
- (fn prems=>
-  [ Simp_tac 1, blast_tac (claset() addSIs prems) 1 ]);
+val prems = Goal "(a~:B ==> a=b) ==> a: cons(b,B)";
+by (Simp_tac 1);
+by (blast_tac (claset() addSIs prems) 1);
+qed "consCI";
 
 AddSIs [consCI];
 AddSEs [consE];
 
-qed_goal "cons_not_0" thy "cons(a,B) ~= 0"
- (fn _ => [ (blast_tac (claset() addEs [equalityE]) 1) ]);
+Goal "cons(a,B) ~= 0";
+by (blast_tac (claset() addEs [equalityE]) 1) ;
+qed "cons_not_0";
 
 bind_thm ("cons_neq_0", cons_not_0 RS notE);
 
@@ -182,11 +195,13 @@
 
 (*** Singletons - using cons ***)
 
-qed_goal "singleton_iff" thy "a : {b} <-> a=b"
- (fn _ => [ Simp_tac 1 ]);
+Goal "a : {b} <-> a=b";
+by (Simp_tac 1);
+qed "singleton_iff";
 
-qed_goal "singletonI" thy "a : {a}"
- (fn _=> [ (rtac consI1 1) ]);
+Goal "a : {a}";
+by (rtac consI1 1) ;
+qed "singletonI";
 
 bind_thm ("singletonE", make_elim (singleton_iff RS iffD1));
 
@@ -217,7 +232,7 @@
   (THE x.P(x))  rewrites to  (THE x. Q(x))  *)
 
 (*If it's "undefined", it's zero!*)
-Goalw  [the_def] "!!P. ~ (EX! x. P(x)) ==> (THE x. P(x))=0";
+Goalw  [the_def] "~ (EX! x. P(x)) ==> (THE x. P(x))=0";
 by (blast_tac (claset() addSEs [ReplaceE]) 1);
 qed "the_0";
 
@@ -262,11 +277,11 @@
 
 Addsimps [if_true, if_false];
 
-qed_goal "split_if" thy
-    "P(if Q then x else y) <-> ((Q --> P(x)) & (~Q --> P(y)))"
- (fn _=> [ (case_tac "Q" 1),
-           (Asm_simp_tac 1),
-           (Asm_simp_tac 1) ]);
+Goal "P(if Q then x else y) <-> ((Q --> P(x)) & (~Q --> P(y)))";
+by (case_tac "Q" 1);
+by (Asm_simp_tac 1);
+by (Asm_simp_tac 1) ;
+qed "split_if";
 
 (** Rewrite rules for boolean case-splitting: faster than 
 	addsplits[split_if]
@@ -282,42 +297,48 @@
 		 split_if_mem1, split_if_mem2];
 
 (*Logically equivalent to split_if_mem2*)
-qed_goal "if_iff" thy "a: (if P then x else y) <-> P & a:x | ~P & a:y"
- (fn _=> [ (simp_tac (simpset() addsplits [split_if]) 1) ]);
+Goal "a: (if P then x else y) <-> P & a:x | ~P & a:y";
+by (simp_tac (simpset() addsplits [split_if]) 1) ;
+qed "if_iff";
 
-qed_goal "if_type" thy
-    "[| P ==> a: A;  ~P ==> b: A |] ==> (if P then a else b): A"
- (fn prems=> [ (simp_tac 
-                (simpset() addsimps prems addsplits [split_if]) 1) ]);
+val prems = Goal
+    "[| P ==> a: A;  ~P ==> b: A |] ==> (if P then a else b): A";
+by (simp_tac (simpset() addsimps prems addsplits [split_if]) 1) ;
+qed "if_type";
+
 AddTCs [if_type];
 
 (*** Foundation lemmas ***)
 
 (*was called mem_anti_sym*)
-qed_goal "mem_asym" thy "[| a:b;  ~P ==> b:a |] ==> P"
- (fn prems=>
-  [ (rtac classical 1),
-    (res_inst_tac [("A1","{a,b}")] (foundation RS disjE) 1),
-    REPEAT (blast_tac (claset() addIs prems addSEs [equalityE]) 1) ]);
+val prems = Goal "[| a:b;  ~P ==> b:a |] ==> P";
+by (rtac classical 1);
+by (res_inst_tac [("A1","{a,b}")] (foundation RS disjE) 1);
+by (REPEAT (blast_tac (claset() addIs prems addSEs [equalityE]) 1));
+qed "mem_asym";
 
 (*was called mem_anti_refl*)
-qed_goal "mem_irrefl" thy "a:a ==> P"
- (fn [major]=> [ (rtac ([major,major] MRS mem_asym) 1) ]);
+Goal "a:a ==> P";
+by (blast_tac (claset() addIs [mem_asym]) 1);
+qed "mem_irrefl";
 
 (*mem_irrefl should NOT be added to default databases:
       it would be tried on most goals, making proofs slower!*)
 
-qed_goal "mem_not_refl" thy "a ~: a"
- (K [ (rtac notI 1), (etac mem_irrefl 1) ]);
+Goal "a ~: a";
+by (rtac notI 1);
+by (etac mem_irrefl 1);
+qed "mem_not_refl";
 
 (*Good for proving inequalities by rewriting*)
-qed_goal "mem_imp_not_eq" thy "!!a A. a:A ==> a ~= A"
- (fn _=> [ blast_tac (claset() addSEs [mem_irrefl]) 1 ]);
+Goal "a:A ==> a ~= A";
+by (blast_tac (claset() addSEs [mem_irrefl]) 1);
+qed "mem_imp_not_eq";
 
 (*** Rules for succ ***)
 
 qed_goalw "succ_iff" thy [succ_def] "i : succ(j) <-> i=j | i:j"
- (fn _ => [ Blast_tac 1 ]);
+ (fn _ => [(Blast_tac 1)]);
 
 qed_goalw "succI1" thy [succ_def] "i : succ(i)"
  (fn _=> [ (rtac consI1 1) ]);
@@ -335,16 +356,17 @@
     (REPEAT (eresolve_tac prems 1)) ]);
 
 (*Classical introduction rule*)
-qed_goal "succCI" thy "(i~:j ==> i=j) ==> i: succ(j)"
- (fn [prem]=>
-  [ (rtac (disjCI RS (succ_iff RS iffD2)) 1),
-    (etac prem 1) ]);
+val [prem]= Goal "(i~:j ==> i=j) ==> i: succ(j)";
+by (rtac (disjCI RS (succ_iff RS iffD2)) 1);
+by (etac prem 1) ;
+qed "succCI";
 
 AddSIs [succCI];
 AddSEs [succE];
 
-qed_goal "succ_not_0" thy "succ(n) ~= 0"
- (fn _=> [ (blast_tac (claset() addSEs [equalityE]) 1) ]);
+Goal "succ(n) ~= 0";
+by (blast_tac (claset() addSEs [equalityE]) 1) ;
+qed "succ_not_0";
 
 bind_thm ("succ_neq_0", succ_not_0 RS notE);
 
@@ -358,9 +380,9 @@
 (* succ(b) ~= b *)
 bind_thm ("succ_neq_self", succI1 RS mem_imp_not_eq RS not_sym);
 
-
-qed_goal "succ_inject_iff" thy "succ(m) = succ(n) <-> m=n"
- (fn _=> [ (blast_tac (claset() addEs [mem_asym] addSEs [equalityE]) 1) ]);
+Goal "succ(m) = succ(n) <-> m=n";
+by (blast_tac (claset() addEs [mem_asym] addSEs [equalityE]) 1) ;
+qed "succ_inject_iff";
 
 bind_thm ("succ_inject", succ_inject_iff RS iffD1);