src/ZF/upair.ML
changeset 37 cebe01deba80
parent 14 1c0926788772
child 435 ca5356bd315a
equal deleted inserted replaced
36:70c6014c9b6f 37:cebe01deba80
    54 
    54 
    55 val Un_iff = prove_goal ZF.thy "c : A Un B <-> (c:A | c:B)"
    55 val Un_iff = prove_goal ZF.thy "c : A Un B <-> (c:A | c:B)"
    56  (fn _ => [ (fast_tac (lemmas_cs addIs [UnI1,UnI2] addSEs [UnE]) 1) ]);
    56  (fn _ => [ (fast_tac (lemmas_cs addIs [UnI1,UnI2] addSEs [UnE]) 1) ]);
    57 
    57 
    58 (*Classical introduction rule: no commitment to A vs B*)
    58 (*Classical introduction rule: no commitment to A vs B*)
    59 val UnCI = prove_goal ZF.thy "(~c : B ==> c : A) ==> c : A Un B"
    59 val UnCI = prove_goal ZF.thy "(c ~: B ==> c : A) ==> c : A Un B"
    60  (fn [prem]=>
    60  (fn [prem]=>
    61   [ (rtac (disjCI RS (Un_iff RS iffD2)) 1),
    61   [ (rtac (disjCI RS (Un_iff RS iffD2)) 1),
    62     (etac prem 1) ]);
    62     (etac prem 1) ]);
    63 
    63 
    64 
    64 
    89 
    89 
    90 
    90 
    91 (*** Rules for set difference -- defined via Upair ***)
    91 (*** Rules for set difference -- defined via Upair ***)
    92 
    92 
    93 val DiffI = prove_goalw ZF.thy [Diff_def]
    93 val DiffI = prove_goalw ZF.thy [Diff_def]
    94     "[| c : A;  ~ c : B |] ==> c : A - B"
    94     "[| c : A;  c ~: B |] ==> c : A - B"
    95  (fn prems=> [ (REPEAT (resolve_tac (prems @ [CollectI]) 1)) ]);
    95  (fn prems=> [ (REPEAT (resolve_tac (prems @ [CollectI]) 1)) ]);
    96 
    96 
    97 val DiffD1 = prove_goalw ZF.thy [Diff_def]
    97 val DiffD1 = prove_goalw ZF.thy [Diff_def]
    98     "c : A - B ==> c : A"
    98     "c : A - B ==> c : A"
    99  (fn [major]=> [ (rtac (major RS CollectD1) 1) ]);
    99  (fn [major]=> [ (rtac (major RS CollectD1) 1) ]);
   101 val DiffD2 = prove_goalw ZF.thy [Diff_def]
   101 val DiffD2 = prove_goalw ZF.thy [Diff_def]
   102     "[| c : A - B;  c : B |] ==> P"
   102     "[| c : A - B;  c : B |] ==> P"
   103  (fn [major,minor]=> [ (rtac (minor RS (major RS CollectD2 RS notE)) 1) ]);
   103  (fn [major,minor]=> [ (rtac (minor RS (major RS CollectD2 RS notE)) 1) ]);
   104 
   104 
   105 val DiffE = prove_goal ZF.thy
   105 val DiffE = prove_goal ZF.thy
   106     "[| c : A - B;  [| c:A; ~ c:B |] ==> P |] ==> P"
   106     "[| c : A - B;  [| c:A; c~:B |] ==> P |] ==> P"
   107  (fn prems=>
   107  (fn prems=>
   108   [ (resolve_tac prems 1),
   108   [ (resolve_tac prems 1),
   109     (REPEAT (ares_tac (prems RL [DiffD1, DiffD2 RS notI]) 1)) ]);
   109     (REPEAT (ares_tac (prems RL [DiffD1, DiffD2 RS notI]) 1)) ]);
   110 
   110 
   111 val Diff_iff = prove_goal ZF.thy "c : A-B <-> (c:A & ~ c:B)"
   111 val Diff_iff = prove_goal ZF.thy "c : A-B <-> (c:A & c~:B)"
   112  (fn _ => [ (fast_tac (lemmas_cs addSIs [DiffI] addSEs [DiffE]) 1) ]);
   112  (fn _ => [ (fast_tac (lemmas_cs addSIs [DiffI] addSEs [DiffE]) 1) ]);
   113 
   113 
   114 (*** Rules for cons -- defined via Un and Upair ***)
   114 (*** Rules for cons -- defined via Un and Upair ***)
   115 
   115 
   116 val consI1 = prove_goalw ZF.thy [cons_def] "a : cons(a,B)"
   116 val consI1 = prove_goalw ZF.thy [cons_def] "a : cons(a,B)"
   127 
   127 
   128 val cons_iff = prove_goal ZF.thy "a : cons(b,A) <-> (a=b | a:A)"
   128 val cons_iff = prove_goal ZF.thy "a : cons(b,A) <-> (a=b | a:A)"
   129  (fn _ => [ (fast_tac (lemmas_cs addIs [consI1,consI2] addSEs [consE]) 1) ]);
   129  (fn _ => [ (fast_tac (lemmas_cs addIs [consI1,consI2] addSEs [consE]) 1) ]);
   130 
   130 
   131 (*Classical introduction rule*)
   131 (*Classical introduction rule*)
   132 val consCI = prove_goal ZF.thy "(~ a:B ==> a=b) ==> a: cons(b,B)"
   132 val consCI = prove_goal ZF.thy "(a~:B ==> a=b) ==> a: cons(b,B)"
   133  (fn [prem]=>
   133  (fn [prem]=>
   134   [ (rtac (disjCI RS (cons_iff RS iffD2)) 1),
   134   [ (rtac (disjCI RS (cons_iff RS iffD2)) 1),
   135     (etac prem 1) ]);
   135     (etac prem 1) ]);
   136 
   136 
   137 (*** Singletons - using cons ***)
   137 (*** Singletons - using cons ***)
   221 		         addSEs [consE,equalityE]) 1) ]);
   221 		         addSEs [consE,equalityE]) 1) ]);
   222 
   222 
   223 val mem_anti_refl = prove_goal ZF.thy "a:a ==> P"
   223 val mem_anti_refl = prove_goal ZF.thy "a:a ==> P"
   224  (fn [major]=> [ (rtac (major RS (major RS mem_anti_sym)) 1) ]);
   224  (fn [major]=> [ (rtac (major RS (major RS mem_anti_sym)) 1) ]);
   225 
   225 
   226 val mem_not_refl = prove_goal ZF.thy "~ a:a"
   226 val mem_not_refl = prove_goal ZF.thy "a~:a"
   227  (K [ (rtac notI 1), (etac mem_anti_refl 1) ]);
   227  (K [ (rtac notI 1), (etac mem_anti_refl 1) ]);
   228 
   228 
   229 (*** Rules for succ ***)
   229 (*** Rules for succ ***)
   230 
   230 
   231 val succI1 = prove_goalw ZF.thy [succ_def] "i : succ(i)"
   231 val succI1 = prove_goalw ZF.thy [succ_def] "i : succ(i)"
   243 
   243 
   244 val succ_iff = prove_goal ZF.thy "i : succ(j) <-> i=j | i:j"
   244 val succ_iff = prove_goal ZF.thy "i : succ(j) <-> i=j | i:j"
   245  (fn _ => [ (fast_tac (lemmas_cs addIs [succI1,succI2] addSEs [succE]) 1) ]);
   245  (fn _ => [ (fast_tac (lemmas_cs addIs [succI1,succI2] addSEs [succE]) 1) ]);
   246 
   246 
   247 (*Classical introduction rule*)
   247 (*Classical introduction rule*)
   248 val succCI = prove_goal ZF.thy "(~ i:j ==> i=j) ==> i: succ(j)"
   248 val succCI = prove_goal ZF.thy "(i~:j ==> i=j) ==> i: succ(j)"
   249  (fn [prem]=>
   249  (fn [prem]=>
   250   [ (rtac (disjCI RS (succ_iff RS iffD2)) 1),
   250   [ (rtac (disjCI RS (succ_iff RS iffD2)) 1),
   251     (etac prem 1) ]);
   251     (etac prem 1) ]);
   252 
   252 
   253 val succ_neq_0 = prove_goal ZF.thy "succ(n)=0 ==> P"
   253 val succ_neq_0 = prove_goal ZF.thy "succ(n)=0 ==> P"
   254  (fn [major]=>
   254  (fn [major]=>
   255   [ (rtac (major RS equalityD1 RS subsetD RS emptyE) 1),
   255   [ (rtac (major RS equalityD1 RS subsetD RS emptyE) 1),
   256     (rtac succI1 1) ]);
   256     (rtac succI1 1) ]);
   257 
   257 
   258 (*Useful for rewriting*)
   258 (*Useful for rewriting*)
   259 val succ_not_0 = prove_goal ZF.thy "~ succ(n)=0"
   259 val succ_not_0 = prove_goal ZF.thy "succ(n) ~= 0"
   260  (fn _=> [ (rtac notI 1), (etac succ_neq_0 1) ]);
   260  (fn _=> [ (rtac notI 1), (etac succ_neq_0 1) ]);
   261 
   261 
   262 (* succ(c) <= B ==> c : B *)
   262 (* succ(c) <= B ==> c : B *)
   263 val succ_subsetD = succI1 RSN (2,subsetD);
   263 val succ_subsetD = succI1 RSN (2,subsetD);
   264 
   264