author | paulson |
Mon, 10 Oct 2005 15:35:29 +0200 | |
changeset 17819 | 1241e5d31d5b |
parent 16774 | 515b6020cf5d |
child 18171 | c4f873d65603 |
permissions | -rw-r--r-- |
7357 | 1 |
|
2 |
(*Better then ex1E for classical reasoner: needs no quantifier duplication!*) |
|
3 |
val major::prems = goal (the_context ()) |
|
4 |
"[| ?! x. P(x); \ |
|
5 |
\ !!x. [| P(x); ALL y y'. P(y) & P(y') --> y=y' |] ==> R \ |
|
6 |
\ |] ==> R"; |
|
7 |
by (rtac (major RS ex1E) 1); |
|
8 |
by (REPEAT (ares_tac (allI::prems) 1)); |
|
9 |
by (etac (dup_elim allE) 1); |
|
10 |
by (Fast_tac 1); |
|
11 |
qed "alt_ex1E"; |
|
12 |
||
13 |
AddSEs [alt_ex1E]; |
|
14 |
||
15 |
(*** Applying BlastFun to create Blast_tac ***) |
|
16 |
structure Blast_Data = |
|
17 |
struct |
|
18 |
type claset = Classical.claset |
|
16774
515b6020cf5d
experimental code to reduce the amount of type information in blast
paulson
parents:
13550
diff
changeset
|
19 |
val is_hol = true |
7357 | 20 |
val notE = notE |
21 |
val ccontr = ccontr |
|
22 |
val contr_tac = Classical.contr_tac |
|
23 |
val dup_intr = Classical.dup_intr |
|
24 |
val hyp_subst_tac = Hypsubst.blast_hyp_subst_tac |
|
25 |
val claset = Classical.claset |
|
26 |
val rep_cs = Classical.rep_cs |
|
27 |
val cla_modifiers = Classical.cla_modifiers; |
|
28 |
val cla_meth' = Classical.cla_meth' |
|
29 |
end; |
|
30 |
||
31 |
structure Blast = BlastFun(Blast_Data); |
|
32 |
||
33 |
val Blast_tac = Blast.Blast_tac |
|
34 |
and blast_tac = Blast.blast_tac; |