20 |
20 |
21 val prems = goal Set.thy "[| a : {x.P(x)} |] ==> P(a)"; |
21 val prems = goal Set.thy "[| a : {x.P(x)} |] ==> P(a)"; |
22 by (resolve_tac (prems RL [mem_Collect_iff RS iffD1]) 1); |
22 by (resolve_tac (prems RL [mem_Collect_iff RS iffD1]) 1); |
23 val CollectD = result(); |
23 val CollectD = result(); |
24 |
24 |
|
25 val CollectE = make_elim CollectD; |
|
26 |
25 val [prem] = goal Set.thy "[| !!x. x:A <-> x:B |] ==> A = B"; |
27 val [prem] = goal Set.thy "[| !!x. x:A <-> x:B |] ==> A = B"; |
26 by (rtac (set_extension RS iffD2) 1); |
28 by (rtac (set_extension RS iffD2) 1); |
27 by (rtac (prem RS allI) 1); |
29 by (rtac (prem RS allI) 1); |
28 val set_ext = result(); |
30 val set_ext = result(); |
29 |
|
30 val prems = goal Set.thy "[| !!x. P(x) <-> Q(x) |] ==> {x. P(x)} = {x. Q(x)}"; |
|
31 by (REPEAT (ares_tac [set_ext,iffI,CollectI] 1 ORELSE |
|
32 eresolve_tac ([CollectD] RL (prems RL [iffD1,iffD2])) 1)); |
|
33 val Collect_cong = result(); |
|
34 |
|
35 val CollectE = make_elim CollectD; |
|
36 |
31 |
37 (*** Bounded quantifiers ***) |
32 (*** Bounded quantifiers ***) |
38 |
33 |
39 val prems = goalw Set.thy [Ball_def] |
34 val prems = goalw Set.thy [Ball_def] |
40 "[| !!x. x:A ==> P(x) |] ==> ALL x:A. P(x)"; |
35 "[| !!x. x:A ==> P(x) |] ==> ALL x:A. P(x)"; |