--- a/src/HOL/Arith.ML Tue Apr 09 12:12:27 1996 +0200
+++ b/src/HOL/Arith.ML Thu Apr 11 08:30:25 1996 +0200
@@ -27,7 +27,7 @@
(** Difference **)
-val diff_0 = diff_def RS def_nat_rec_0;
+bind_thm("diff_0", diff_def RS def_nat_rec_0);
qed_goalw "diff_0_eq_0" Arith.thy [diff_def, pred_def]
"0 - n = 0"
--- a/src/HOL/Prod.ML Tue Apr 09 12:12:27 1996 +0200
+++ b/src/HOL/Prod.ML Thu Apr 11 08:30:25 1996 +0200
@@ -110,6 +110,9 @@
by (Asm_simp_tac 1);
qed "surjective_pairing2";
+qed_goal "split_eta" Prod.thy "(%(x,y). f(x,y)) = f"
+ (fn _ => [rtac ext 1, split_all_tac 1, rtac split 1]);
+
(*For use with split_tac and the simplifier*)
goal Prod.thy "R(split c p) = (! x y. p = (x,y) --> R(c x y))";
by (stac surjective_pairing 1);
--- a/src/HOL/Prod.thy Tue Apr 09 12:12:27 1996 +0200
+++ b/src/HOL/Prod.thy Thu Apr 11 08:30:25 1996 +0200
@@ -61,7 +61,7 @@
Pair_def "Pair a b == Abs_Prod(Pair_Rep a b)"
fst_def "fst(p) == @a. ? b. p = (a, b)"
snd_def "snd(p) == @b. ? a. p = (a, b)"
- split_def "split c p == c (fst p) (snd p)"
+ split_def "split == (%c p. c (fst p) (snd p))"
prod_fun_def "prod_fun f g == split(%x y.(f(x), g(y)))"
Sigma_def "Sigma A B == UN x:A. UN y:B(x). {(x, y)}"
--- a/src/HOL/simpdata.ML Tue Apr 09 12:12:27 1996 +0200
+++ b/src/HOL/simpdata.ML Thu Apr 11 08:30:25 1996 +0200
@@ -181,3 +181,15 @@
prove "de_Morgan_disj" "(~(P | Q)) = (~P & ~Q)";
prove "de_Morgan_conj" "(~(P & Q)) = (~P | ~Q)";
+prove "ex_disj_distrib" "(? x. P(x) | Q(x)) = ((? x. P(x)) | (? x. Q(x)))";
+prove "all_conj_distrib" "(!x. P(x) & Q(x)) = ((! x. P(x)) & (! x. Q(x)))";
+
+qed_goal "if_cancel" HOL.thy "(if c then x else x) = x"
+ (fn _ => [simp_tac (HOL_ss setloop (split_tac [expand_if])) 1]);
+
+qed_goal "if_distrib" HOL.thy
+ "f(if c then x else y) = (if c then f x else f y)"
+ (fn _ => [simp_tac (HOL_ss setloop (split_tac [expand_if])) 1]);
+
+qed_goalw "o_assoc" HOL.thy [o_def] "(f o g) o h = (f o g o h)"
+ (fn _=>[rtac ext 1, rtac refl 1]);