simpdata.ML: renamed split_prem_tac to split_asm_tac, added split_if_asm
cladata.ML: unintentinally committed
--- a/src/HOL/cladata.ML Wed Nov 12 12:24:55 1997 +0100
+++ b/src/HOL/cladata.ML Wed Nov 12 12:30:15 1997 +0100
@@ -26,6 +26,9 @@
structure Hypsubst = HypsubstFun(Hypsubst_Data);
open Hypsubst;
+val thin_refl = prove_goal HOL.thy
+ "!!X. [|x=x; PROP W|] ==> PROP W" (K [atac 1]);
+
(*** Applying ClassicalFun to create a classical prover ***)
structure Classical_Data =
struct
@@ -33,7 +36,8 @@
val mp = mp
val not_elim = notE
val classical = classical
- val hyp_subst_tacs=[hyp_subst_tac]
+ val thin_refl = thin_refl
+ val hyp_subst_tacs= [REPEAT_DETERM o ematch_tac [thin_refl] THEN' hyp_subst_tac]
end;
structure Classical = ClassicalFun(Classical_Data);
--- a/src/HOL/simpdata.ML Wed Nov 12 12:24:55 1997 +0100
+++ b/src/HOL/simpdata.ML Wed Nov 12 12:30:15 1997 +0100
@@ -340,11 +340,16 @@
(fn _ => [blast_tac (HOL_cs addIs [select_equality]) 1]);
qed_goal "expand_if" HOL.thy
- "P(if Q then x else y) = ((Q --> P(x)) & (~Q --> P(y)))"
- (fn _=> [ (res_inst_tac [("Q","Q")] (excluded_middle RS disjE) 1),
+ "P(if Q then x else y) = ((Q --> P(x)) & (~Q --> P(y)))" (K [
+ res_inst_tac [("Q","Q")] (excluded_middle RS disjE) 1,
stac if_P 2,
stac if_not_P 1,
- REPEAT(blast_tac HOL_cs 1) ]);
+ ALLGOALS (blast_tac HOL_cs)]);
+
+qed_goal "split_if_asm" HOL.thy
+ "P(if Q then x else y) = (~((Q & ~P x) | (~Q & ~P y)))" (K [
+ stac expand_if 1,
+ blast_tac HOL_cs 1]);
qed_goal "if_bool_eq" HOL.thy
"(if P then Q else R) = ((P-->Q) & (~P-->R))"
@@ -364,8 +369,8 @@
fun split_inside_tac splits = mktac (map mk_meta_eq splits)
end;
-val split_prem_tac = mk_case_split_prem_tac split_tac disjE conjE exE contrapos
- contrapos2 notnotD;
+val split_asm_tac = mk_case_split_asm_tac split_tac
+ (disjE,conjE,exE,contrapos,contrapos2,notnotD);
infix 4 addsplits;
fun ss addsplits splits = ss addloop (split_tac splits);