206 |
206 |
207 prove "de_Morgan_disj" "(~(P | Q)) = (~P & ~Q)"; |
207 prove "de_Morgan_disj" "(~(P | Q)) = (~P & ~Q)"; |
208 prove "de_Morgan_conj" "(~(P & Q)) = (~P | ~Q)"; |
208 prove "de_Morgan_conj" "(~(P & Q)) = (~P | ~Q)"; |
209 prove "not_imp" "(~(P --> Q)) = (P & ~Q)"; |
209 prove "not_imp" "(~(P --> Q)) = (P & ~Q)"; |
210 prove "not_iff" "(P~=Q) = (P = (~Q))"; |
210 prove "not_iff" "(P~=Q) = (P = (~Q))"; |
211 prove "not1_or" "(~P | Q) = (P --> Q)"; |
211 prove "disj_not1" "(~P | Q) = (P --> Q)"; |
212 prove "not2_or" "(P | ~Q) = (Q --> P)"; (* changes orientation :-( *) |
212 prove "disj_not2" "(P | ~Q) = (Q --> P)"; (* changes orientation :-( *) |
213 |
213 |
214 (*Avoids duplication of subgoals after expand_if, when the true and false |
214 (*Avoids duplication of subgoals after expand_if, when the true and false |
215 cases boil down to the same thing.*) |
215 cases boil down to the same thing.*) |
216 prove "cases_simp" "((P --> Q) & (~P --> Q)) = Q"; |
216 prove "cases_simp" "((P --> Q) & (~P --> Q)) = Q"; |
217 |
217 |
408 ([triv_forall_equality, (* prunes params *) |
408 ([triv_forall_equality, (* prunes params *) |
409 True_implies_equals, (* prune asms `True' *) |
409 True_implies_equals, (* prune asms `True' *) |
410 if_True, if_False, if_cancel, if_eq_cancel, |
410 if_True, if_False, if_cancel, if_eq_cancel, |
411 o_apply, imp_disjL, conj_assoc, disj_assoc, |
411 o_apply, imp_disjL, conj_assoc, disj_assoc, |
412 de_Morgan_conj, de_Morgan_disj, imp_disj1, imp_disj2, not_imp, |
412 de_Morgan_conj, de_Morgan_disj, imp_disj1, imp_disj2, not_imp, |
413 not1_or, not_all, not_ex, cases_simp] |
413 disj_not1, not_all, not_ex, cases_simp] |
414 @ ex_simps @ all_simps @ simp_thms) |
414 @ ex_simps @ all_simps @ simp_thms) |
415 addsimprocs [defALL_regroup,defEX_regroup] |
415 addsimprocs [defALL_regroup,defEX_regroup] |
416 addcongs [imp_cong]; |
416 addcongs [imp_cong]; |
417 |
417 |
418 qed_goal "if_distrib" HOL.thy |
418 qed_goal "if_distrib" HOL.thy |