src/ZF/upair.ML
changeset 437 435875e4b21d
parent 435 ca5356bd315a
child 485 5e00a676a211
equal deleted inserted replaced
436:0cdc840297bb 437:435875e4b21d
   205 
   205 
   206 val if_ss = FOL_ss addsimps  [if_true,if_false];
   206 val if_ss = FOL_ss addsimps  [if_true,if_false];
   207 
   207 
   208 val expand_if = prove_goal ZF.thy
   208 val expand_if = prove_goal ZF.thy
   209     "P(if(Q,x,y)) <-> ((Q --> P(x)) & (~Q --> P(y)))"
   209     "P(if(Q,x,y)) <-> ((Q --> P(x)) & (~Q --> P(y)))"
   210  (fn _=> [ (res_inst_tac [("Q","Q")] (excluded_middle RS disjE) 1),
   210  (fn _=> [ (excluded_middle_tac "Q" 1),
   211 	   (asm_simp_tac if_ss 1),
   211 	   (asm_simp_tac if_ss 1),
   212 	   (asm_simp_tac if_ss 1) ]);
   212 	   (asm_simp_tac if_ss 1) ]);
   213 
   213 
   214 val prems = goal ZF.thy
   214 val prems = goal ZF.thy
   215     "[| P ==> a: A;  ~P ==> b: A |] ==> if(P,a,b): A";
   215     "[| P ==> a: A;  ~P ==> b: A |] ==> if(P,a,b): A";
   216 by (res_inst_tac [("Q","P")] (excluded_middle RS disjE) 1);
   216 by (excluded_middle_tac "P" 1);
   217 by (ALLGOALS (asm_simp_tac (if_ss addsimps prems)));
   217 by (ALLGOALS (asm_simp_tac (if_ss addsimps prems)));
   218 val if_type = result();
   218 val if_type = result();
   219 
   219 
   220 
   220 
   221 (*** Foundation lemmas ***)
   221 (*** Foundation lemmas ***)
   222 
   222 
   223 val mem_anti_sym = prove_goal ZF.thy "[| a:b;  b:a |] ==> P"
   223 (*was called mem_anti_sym*)
       
   224 val mem_asym = prove_goal ZF.thy "[| a:b;  b:a |] ==> P"
   224  (fn prems=>
   225  (fn prems=>
   225   [ (rtac disjE 1),
   226   [ (rtac disjE 1),
   226     (res_inst_tac [("A","{a,b}")] foundation 1),
   227     (res_inst_tac [("A","{a,b}")] foundation 1),
   227     (etac equals0D 1),
   228     (etac equals0D 1),
   228     (rtac consI1 1),
   229     (rtac consI1 1),
   229     (fast_tac (lemmas_cs addIs (prems@[consI1,consI2]) 
   230     (fast_tac (lemmas_cs addIs (prems@[consI1,consI2]) 
   230 		         addSEs [consE,equalityE]) 1) ]);
   231 		         addSEs [consE,equalityE]) 1) ]);
   231 
   232 
   232 val mem_anti_refl = prove_goal ZF.thy "a:a ==> P"
   233 (*was called mem_anti_refl*)
   233  (fn [major]=> [ (rtac (major RS (major RS mem_anti_sym)) 1) ]);
   234 val mem_irrefl = prove_goal ZF.thy "a:a ==> P"
   234 
   235  (fn [major]=> [ (rtac (major RS (major RS mem_asym)) 1) ]);
   235 val mem_not_refl = prove_goal ZF.thy "a~:a"
   236 
   236  (K [ (rtac notI 1), (etac mem_anti_refl 1) ]);
   237 val mem_not_refl = prove_goal ZF.thy "a ~: a"
       
   238  (K [ (rtac notI 1), (etac mem_irrefl 1) ]);
   237 
   239 
   238 (*Good for proving inequalities by rewriting*)
   240 (*Good for proving inequalities by rewriting*)
   239 val mem_imp_not_eq = prove_goal ZF.thy "!!a A. a:A ==> a ~= A"
   241 val mem_imp_not_eq = prove_goal ZF.thy "!!a A. a:A ==> a ~= A"
   240  (fn _=> [ fast_tac (lemmas_cs addSEs [mem_anti_refl]) 1 ]);
   242  (fn _=> [ fast_tac (lemmas_cs addSEs [mem_irrefl]) 1 ]);
   241 
   243 
   242 (*** Rules for succ ***)
   244 (*** Rules for succ ***)
   243 
   245 
   244 val succI1 = prove_goalw ZF.thy [succ_def] "i : succ(i)"
   246 val succI1 = prove_goalw ZF.thy [succ_def] "i : succ(i)"
   245  (fn _=> [ (rtac consI1 1) ]);
   247  (fn _=> [ (rtac consI1 1) ]);
   277 
   279 
   278 val succ_inject = prove_goal ZF.thy "succ(m) = succ(n) ==> m=n"
   280 val succ_inject = prove_goal ZF.thy "succ(m) = succ(n) ==> m=n"
   279  (fn [major]=>
   281  (fn [major]=>
   280   [ (rtac (major RS equalityE) 1),
   282   [ (rtac (major RS equalityE) 1),
   281     (REPEAT (eresolve_tac [asm_rl, sym, succE, make_elim succ_subsetD,
   283     (REPEAT (eresolve_tac [asm_rl, sym, succE, make_elim succ_subsetD,
   282 			   mem_anti_sym] 1)) ]);
   284 			   mem_asym] 1)) ]);
   283 
   285 
   284 val succ_inject_iff = prove_goal ZF.thy "succ(m) = succ(n) <-> m=n"
   286 val succ_inject_iff = prove_goal ZF.thy "succ(m) = succ(n) <-> m=n"
   285  (fn _=> [ (fast_tac (FOL_cs addSEs [succ_inject]) 1) ]);
   287  (fn _=> [ (fast_tac (FOL_cs addSEs [succ_inject]) 1) ]);
   286 
   288 
   287 (*UpairI1/2 should become UpairCI;  mem_anti_refl as a hazE? *)
   289 (*UpairI1/2 should become UpairCI;  mem_irrefl as a hazE? *)
   288 val upair_cs = lemmas_cs
   290 val upair_cs = lemmas_cs
   289   addSIs [singletonI, DiffI, IntI, UnCI, consCI, succCI, UpairI1,UpairI2]
   291   addSIs [singletonI, DiffI, IntI, UnCI, consCI, succCI, UpairI1,UpairI2]
   290   addSEs [singletonE, DiffE, IntE, UnE, consE, succE, UpairE];
   292   addSEs [singletonE, DiffE, IntE, UnE, consE, succE, UpairE];
   291 
   293