src/FOL/simpdata.ML
changeset 3835 9a5a4e123859
parent 3610 7e5300420b03
child 3910 1cc9b8ab161c
equal deleted inserted replaced
3834:278f0a1e5986 3835:9a5a4e123859
    40  ["(True <-> P) <-> P",         "(P <-> True) <-> P",
    40  ["(True <-> P) <-> P",         "(P <-> True) <-> P",
    41   "(P <-> P) <-> True",
    41   "(P <-> P) <-> True",
    42   "(False <-> P) <-> ~P",       "(P <-> False) <-> ~P"];
    42   "(False <-> P) <-> ~P",       "(P <-> False) <-> ~P"];
    43 
    43 
    44 val quant_simps = map int_prove_fun
    44 val quant_simps = map int_prove_fun
    45  ["(ALL x.P) <-> P",    "(EX x.P) <-> P"];
    45  ["(ALL x. P) <-> P",    "(EX x. P) <-> P"];
    46 
    46 
    47 (*These are NOT supplied by default!*)
    47 (*These are NOT supplied by default!*)
    48 val distrib_simps  = map int_prove_fun
    48 val distrib_simps  = map int_prove_fun
    49  ["P & (Q | R) <-> P&Q | P&R", 
    49  ["P & (Q | R) <-> P&Q | P&R", 
    50   "(Q | R) & P <-> Q&P | R&P",
    50   "(Q | R) & P <-> Q&P | R&P",
   101 
   101 
   102 (*Miniscoping: pushing in existential quantifiers*)
   102 (*Miniscoping: pushing in existential quantifiers*)
   103 val ex_simps = map prove_fun 
   103 val ex_simps = map prove_fun 
   104                 ["(EX x. x=t & P(x)) <-> P(t)",
   104                 ["(EX x. x=t & P(x)) <-> P(t)",
   105                  "(EX x. t=x & P(x)) <-> P(t)",
   105                  "(EX x. t=x & P(x)) <-> P(t)",
   106                  "(EX x. P(x) & Q) <-> (EX x.P(x)) & Q",
   106                  "(EX x. P(x) & Q) <-> (EX x. P(x)) & Q",
   107                  "(EX x. P & Q(x)) <-> P & (EX x.Q(x))",
   107                  "(EX x. P & Q(x)) <-> P & (EX x. Q(x))",
   108                  "(EX x. P(x) | Q) <-> (EX x.P(x)) | Q",
   108                  "(EX x. P(x) | Q) <-> (EX x. P(x)) | Q",
   109                  "(EX x. P | Q(x)) <-> P | (EX x.Q(x))",
   109                  "(EX x. P | Q(x)) <-> P | (EX x. Q(x))",
   110                  "(EX x. P(x) --> Q) <-> (ALL x.P(x)) --> Q",
   110                  "(EX x. P(x) --> Q) <-> (ALL x. P(x)) --> Q",
   111                  "(EX x. P --> Q(x)) <-> P --> (EX x.Q(x))"];
   111                  "(EX x. P --> Q(x)) <-> P --> (EX x. Q(x))"];
   112 
   112 
   113 (*Miniscoping: pushing in universal quantifiers*)
   113 (*Miniscoping: pushing in universal quantifiers*)
   114 val all_simps = map prove_fun
   114 val all_simps = map prove_fun
   115                 ["(ALL x. x=t --> P(x)) <-> P(t)",
   115                 ["(ALL x. x=t --> P(x)) <-> P(t)",
   116                  "(ALL x. t=x --> P(x)) <-> P(t)",
   116                  "(ALL x. t=x --> P(x)) <-> P(t)",
   117                  "(ALL x. P(x) & Q) <-> (ALL x.P(x)) & Q",
   117                  "(ALL x. P(x) & Q) <-> (ALL x. P(x)) & Q",
   118                  "(ALL x. P & Q(x)) <-> P & (ALL x.Q(x))",
   118                  "(ALL x. P & Q(x)) <-> P & (ALL x. Q(x))",
   119                  "(ALL x. P(x) | Q) <-> (ALL x.P(x)) | Q",
   119                  "(ALL x. P(x) | Q) <-> (ALL x. P(x)) | Q",
   120                  "(ALL x. P | Q(x)) <-> P | (ALL x.Q(x))",
   120                  "(ALL x. P | Q(x)) <-> P | (ALL x. Q(x))",
   121                  "(ALL x. P(x) --> Q) <-> (EX x.P(x)) --> Q",
   121                  "(ALL x. P(x) --> Q) <-> (EX x. P(x)) --> Q",
   122                  "(ALL x. P --> Q(x)) <-> P --> (ALL x.Q(x))"];
   122                  "(ALL x. P --> Q(x)) <-> P --> (ALL x. Q(x))"];
   123 
   123 
   124 fun int_prove nm thm  = qed_goal nm IFOL.thy thm
   124 fun int_prove nm thm  = qed_goal nm IFOL.thy thm
   125     (fn prems => [ (cut_facts_tac prems 1), 
   125     (fn prems => [ (cut_facts_tac prems 1), 
   126                    (IntPr.fast_tac 1) ]);
   126                    (IntPr.fast_tac 1) ]);
   127 
   127 
   148 int_prove "de_Morgan_disj" "(~(P | Q)) <-> (~P & ~Q)";
   148 int_prove "de_Morgan_disj" "(~(P | Q)) <-> (~P & ~Q)";
   149 prove     "de_Morgan_conj" "(~(P & Q)) <-> (~P | ~Q)";
   149 prove     "de_Morgan_conj" "(~(P & Q)) <-> (~P | ~Q)";
   150 
   150 
   151 prove     "not_iff" "~(P <-> Q) <-> (P <-> ~Q)";
   151 prove     "not_iff" "~(P <-> Q) <-> (P <-> ~Q)";
   152 
   152 
   153 prove     "not_all" "(~ (ALL x.P(x))) <-> (EX x.~P(x))";
   153 prove     "not_all" "(~ (ALL x. P(x))) <-> (EX x.~P(x))";
   154 prove     "imp_all" "((ALL x.P(x)) --> Q) <-> (EX x.P(x) --> Q)";
   154 prove     "imp_all" "((ALL x. P(x)) --> Q) <-> (EX x. P(x) --> Q)";
   155 int_prove "not_ex"  "(~ (EX x.P(x))) <-> (ALL x.~P(x))";
   155 int_prove "not_ex"  "(~ (EX x. P(x))) <-> (ALL x.~P(x))";
   156 int_prove "imp_ex" "((EX x. P(x)) --> Q) <-> (ALL x. P(x) --> Q)";
   156 int_prove "imp_ex" "((EX x. P(x)) --> Q) <-> (ALL x. P(x) --> Q)";
   157 
   157 
   158 int_prove "ex_disj_distrib"
   158 int_prove "ex_disj_distrib"
   159     "(EX x. P(x) | Q(x)) <-> ((EX x. P(x)) | (EX x. Q(x)))";
   159     "(EX x. P(x) | Q(x)) <-> ((EX x. P(x)) | (EX x. Q(x)))";
   160 int_prove "all_conj_distrib"
   160 int_prove "all_conj_distrib"