src/FOL/IFOL.ML
changeset 12 f17d542276b6
parent 0 a5a9c433f639
child 779 4ab9176b45b7
equal deleted inserted replaced
11:d0e17c42dbb4 12:f17d542276b6
    22   val disj_cong: thm
    22   val disj_cong: thm
    23   val disj_impE: thm
    23   val disj_impE: thm
    24   val eq_cong: thm
    24   val eq_cong: thm
    25   val eq_mp_tac: int -> tactic
    25   val eq_mp_tac: int -> tactic
    26   val ex1I: thm
    26   val ex1I: thm
       
    27   val ex_ex1I: thm
    27   val ex1E: thm
    28   val ex1E: thm
    28   val ex1_equalsE: thm
    29   val ex1_equalsE: thm
    29   val ex1_cong: thm
    30   val ex1_cong: thm
    30   val ex_cong: thm
    31   val ex_cong: thm
    31   val ex_impE: thm
    32   val ex_impE: thm
   178 
   179 
   179 val ex1I = prove_goalw IFOL.thy [ex1_def]
   180 val ex1I = prove_goalw IFOL.thy [ex1_def]
   180     "[| P(a);  !!x. P(x) ==> x=a |] ==> EX! x. P(x)"
   181     "[| P(a);  !!x. P(x) ==> x=a |] ==> EX! x. P(x)"
   181  (fn prems => [ (REPEAT (ares_tac (prems@[exI,conjI,allI,impI]) 1)) ]);
   182  (fn prems => [ (REPEAT (ares_tac (prems@[exI,conjI,allI,impI]) 1)) ]);
   182 
   183 
       
   184 (*Sometimes easier to use: the premises have no shared variables*)
       
   185 val ex_ex1I = prove_goal IFOL.thy
       
   186     "[| EX x.P(x);  !!x y. [| P(x); P(y) |] ==> x=y |] ==> EX! x. P(x)"
       
   187  (fn [ex,eq] => [ (rtac (ex RS exE) 1),
       
   188 		  (REPEAT (ares_tac [ex1I,eq] 1)) ]);
       
   189 
   183 val ex1E = prove_goalw IFOL.thy [ex1_def]
   190 val ex1E = prove_goalw IFOL.thy [ex1_def]
   184     "[| EX! x.P(x);  !!x. [| P(x);  ALL y. P(y) --> y=x |] ==> R |] ==> R"
   191     "[| EX! x.P(x);  !!x. [| P(x);  ALL y. P(y) --> y=x |] ==> R |] ==> R"
   185  (fn prems =>
   192  (fn prems =>
   186   [ (cut_facts_tac prems 1),
   193   [ (cut_facts_tac prems 1),
   187     (REPEAT (eresolve_tac [exE,conjE] 1 ORELSE ares_tac prems 1)) ]);
   194     (REPEAT (eresolve_tac [exE,conjE] 1 ORELSE ares_tac prems 1)) ]);