equal
deleted
inserted
replaced
52 val notE : thm |
52 val notE : thm |
53 val notI : thm |
53 val notI : thm |
54 val notnotD : thm |
54 val notnotD : thm |
55 val rev_mp : thm |
55 val rev_mp : thm |
56 val select_equality : thm |
56 val select_equality : thm |
|
57 val selectI2 : thm |
57 val spec : thm |
58 val spec : thm |
58 val sstac : thm list -> int -> tactic |
59 val sstac : thm list -> int -> tactic |
59 val ssubst : thm |
60 val ssubst : thm |
60 val stac : thm -> int -> tactic |
61 val stac : thm -> int -> tactic |
61 val strip_tac : int -> tactic |
62 val strip_tac : int -> tactic |
269 [rtac (major RS exE) 1, REPEAT (etac conjE 1 ORELSE ares_tac prems 1)]); |
270 [rtac (major RS exE) 1, REPEAT (etac conjE 1 ORELSE ares_tac prems 1)]); |
270 |
271 |
271 |
272 |
272 (** Select: Hilbert's Epsilon-operator **) |
273 (** Select: Hilbert's Epsilon-operator **) |
273 |
274 |
274 val select_equality = prove_goal HOL.thy |
275 (*Easier to apply than selectI: conclusion has only one occurrence of P*) |
275 "[| P(a); !!x. P(x) ==> x=a |] ==> (@x.P(x)) = a" |
276 val selectI2 = prove_goal HOL.thy |
|
277 "[| P(a); !!x. P(x) ==> Q(x) |] ==> Q(@x.P(x))" |
276 (fn prems => [ resolve_tac prems 1, |
278 (fn prems => [ resolve_tac prems 1, |
277 rtac selectI 1, |
279 rtac selectI 1, |
278 resolve_tac prems 1 ]); |
280 resolve_tac prems 1 ]); |
|
281 |
|
282 val select_equality = prove_goal HOL.thy |
|
283 "[| P(a); !!x. P(x) ==> x=a |] ==> (@x.P(x)) = a" |
|
284 (fn prems => [ rtac selectI2 1, |
|
285 REPEAT (ares_tac prems 1) ]); |
|
286 |
279 |
287 |
280 (** Classical intro rules for disjunction and existential quantifiers *) |
288 (** Classical intro rules for disjunction and existential quantifiers *) |
281 |
289 |
282 val disjCI = prove_goal HOL.thy "(~Q ==> P) ==> P|Q" |
290 val disjCI = prove_goal HOL.thy "(~Q ==> P) ==> P|Q" |
283 (fn prems=> |
291 (fn prems=> |