Added a number of lemmas
authornipkow
Thu, 11 Apr 1996 08:30:25 +0200
changeset 1655 5be64540f275
parent 1654 faa643c33ee6
child 1656 cbba49da5139
Added a number of lemmas
src/HOL/Arith.ML
src/HOL/Prod.ML
src/HOL/Prod.thy
src/HOL/simpdata.ML
--- 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]);