equal
deleted
inserted
replaced
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)) ]); |