equal
deleted
inserted
replaced
249 |
249 |
250 qed_goal "trans" (the_context ()) "[| a=b; b=c |] ==> a=c" |
250 qed_goal "trans" (the_context ()) "[| a=b; b=c |] ==> a=c" |
251 (fn [prem1,prem2] => [ (rtac (prem2 RS subst) 1), (rtac prem1 1) ]); |
251 (fn [prem1,prem2] => [ (rtac (prem2 RS subst) 1), (rtac prem1 1) ]); |
252 |
252 |
253 (** ~ b=a ==> ~ a=b **) |
253 (** ~ b=a ==> ~ a=b **) |
254 val [not_sym] = compose(sym,2,contrapos); |
254 bind_thm ("not_sym", hd (compose(sym,2,contrapos))); |
255 |
255 |
256 |
256 |
257 (* Two theorms for rewriting only one instance of a definition: |
257 (* Two theorms for rewriting only one instance of a definition: |
258 the first for definitions of formulae and the second for terms *) |
258 the first for definitions of formulae and the second for terms *) |
259 |
259 |
356 map (fn th => read_instantiate [("P",c)] th) |
356 map (fn th => read_instantiate [("P",c)] th) |
357 [pred1_cong,pred2_cong,pred3_cong]) |
357 [pred1_cong,pred2_cong,pred3_cong]) |
358 (explode"PQRS")); |
358 (explode"PQRS")); |
359 |
359 |
360 (*special case for the equality predicate!*) |
360 (*special case for the equality predicate!*) |
361 val eq_cong = read_instantiate [("P","op =")] pred2_cong; |
361 bind_thm ("eq_cong", read_instantiate [("P","op =")] pred2_cong); |
362 |
362 |
363 |
363 |
364 (*** Simplifications of assumed implications. |
364 (*** Simplifications of assumed implications. |
365 Roy Dyckhoff has proved that conj_impE, disj_impE, and imp_impE |
365 Roy Dyckhoff has proved that conj_impE, disj_impE, and imp_impE |
366 used with mp_tac (restricted to atomic formulae) is COMPLETE for |
366 used with mp_tac (restricted to atomic formulae) is COMPLETE for |