src/ZF/upair.ML
changeset 572 13c30ac40f8f
parent 485 5e00a676a211
child 673 023cef668158
equal deleted inserted replaced
571:0b03ce5b62f7 572:13c30ac40f8f
    50  (fn major::prems=>
    50  (fn major::prems=>
    51   [ (rtac (major RS UnionE) 1),
    51   [ (rtac (major RS UnionE) 1),
    52     (etac UpairE 1),
    52     (etac UpairE 1),
    53     (REPEAT (EVERY1 [resolve_tac prems, etac subst, assume_tac])) ]);
    53     (REPEAT (EVERY1 [resolve_tac prems, etac subst, assume_tac])) ]);
    54 
    54 
       
    55 (*Stronger version of the rule above*)
       
    56 val UnE' = prove_goal ZF.thy
       
    57     "[| c : A Un B;  c:A ==> P;  [| c:B;  c~:A |] ==> P |] ==> P"
       
    58  (fn major::prems =>
       
    59   [(rtac (major RS UnE) 1),
       
    60    (eresolve_tac prems 1),
       
    61    (rtac classical 1),
       
    62    (eresolve_tac prems 1),
       
    63    (swap_res_tac prems 1),
       
    64    (etac notnotD 1)]);
       
    65 
    55 val Un_iff = prove_goal ZF.thy "c : A Un B <-> (c:A | c:B)"
    66 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) ]);
    67  (fn _ => [ (fast_tac (lemmas_cs addIs [UnI1,UnI2] addSEs [UnE]) 1) ]);
    57 
    68 
    58 (*Classical introduction rule: no commitment to A vs B*)
    69 (*Classical introduction rule: no commitment to A vs B*)
    59 val UnCI = prove_goal ZF.thy "(c ~: B ==> c : A) ==> c : A Un B"
    70 val UnCI = prove_goal ZF.thy "(c ~: B ==> c : A) ==> c : A Un B"
   122 val consE = prove_goalw ZF.thy [cons_def]
   133 val consE = prove_goalw ZF.thy [cons_def]
   123     "[| a : cons(b,A);  a=b ==> P;  a:A ==> P |] ==> P"
   134     "[| a : cons(b,A);  a=b ==> P;  a:A ==> P |] ==> P"
   124  (fn major::prems=>
   135  (fn major::prems=>
   125   [ (rtac (major RS UnE) 1),
   136   [ (rtac (major RS UnE) 1),
   126     (REPEAT (eresolve_tac (prems @ [UpairE]) 1)) ]);
   137     (REPEAT (eresolve_tac (prems @ [UpairE]) 1)) ]);
       
   138 
       
   139 (*Stronger version of the rule above*)
       
   140 val consE' = prove_goal ZF.thy
       
   141     "[| a : cons(b,A);  a=b ==> P;  [| a:A;  a~=b |] ==> P |] ==> P"
       
   142  (fn major::prems =>
       
   143   [(rtac (major RS consE) 1),
       
   144    (eresolve_tac prems 1),
       
   145    (rtac classical 1),
       
   146    (eresolve_tac prems 1),
       
   147    (swap_res_tac prems 1),
       
   148    (etac notnotD 1)]);
   127 
   149 
   128 val cons_iff = prove_goal ZF.thy "a : cons(b,A) <-> (a=b | a:A)"
   150 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) ]);
   151  (fn _ => [ (fast_tac (lemmas_cs addIs [consI1,consI2] addSEs [consE]) 1) ]);
   130 
   152 
   131 (*Classical introduction rule*)
   153 (*Classical introduction rule*)