equal
deleted
inserted
replaced
40 use "simpdata.ML" |
40 use "simpdata.ML" |
41 setup simpsetup |
41 setup simpsetup |
42 setup "Simplifier.method_setup Splitter.split_modifiers" |
42 setup "Simplifier.method_setup Splitter.split_modifiers" |
43 setup Splitter.setup |
43 setup Splitter.setup |
44 setup Clasimp.setup |
44 setup Clasimp.setup |
|
45 |
|
46 subsection {* Other simple lemmas *} |
|
47 |
|
48 lemma [simp]: "((P-->R) <-> (Q-->R)) <-> ((P<->Q) | R)" |
|
49 by blast |
|
50 |
|
51 lemma [simp]: "((P-->Q) <-> (P-->R)) <-> (P --> (Q<->R))" |
|
52 by blast |
|
53 |
|
54 lemma not_disj_iff_imp: "~P | Q <-> (P-->Q)" |
|
55 by blast |
|
56 |
|
57 (** Monotonicity of implications **) |
|
58 |
|
59 lemma conj_mono: "[| P1-->Q1; P2-->Q2 |] ==> (P1&P2) --> (Q1&Q2)" |
|
60 by fast (*or (IntPr.fast_tac 1)*) |
|
61 |
|
62 lemma disj_mono: "[| P1-->Q1; P2-->Q2 |] ==> (P1|P2) --> (Q1|Q2)" |
|
63 by fast (*or (IntPr.fast_tac 1)*) |
|
64 |
|
65 lemma imp_mono: "[| Q1-->P1; P2-->Q2 |] ==> (P1-->P2)-->(Q1-->Q2)" |
|
66 by fast (*or (IntPr.fast_tac 1)*) |
|
67 |
|
68 lemma imp_refl: "P-->P" |
|
69 by (rule impI, assumption) |
|
70 |
|
71 (*The quantifier monotonicity rules are also intuitionistically valid*) |
|
72 lemma ex_mono: "(!!x. P(x) --> Q(x)) ==> (EX x. P(x)) --> (EX x. Q(x))" |
|
73 by blast |
|
74 |
|
75 lemma all_mono: "(!!x. P(x) --> Q(x)) ==> (ALL x. P(x)) --> (ALL x. Q(x))" |
|
76 by blast |
45 |
77 |
46 |
78 |
47 subsection {* Proof by cases and induction *} |
79 subsection {* Proof by cases and induction *} |
48 |
80 |
49 text {* Proper handling of non-atomic rule statements. *} |
81 text {* Proper handling of non-atomic rule statements. *} |