AC and other rewrite rules for Un and Int
authorpaulson
Sat, 07 Feb 1998 14:38:57 +0100
changeset 4609 b435c5a320b0
parent 4608 cdf16a9fb2ce
child 4610 b1322be47244
AC and other rewrite rules for Un and Int
src/HOL/equalities.ML
--- a/src/HOL/equalities.ML	Sat Feb 07 14:38:15 1998 +0100
+++ b/src/HOL/equalities.ML	Sat Feb 07 14:38:57 1998 +0100
@@ -133,14 +133,25 @@
 qed "Int_absorb";
 Addsimps[Int_absorb];
 
+goal thy " A Int (A Int B) = A Int B";
+by (Blast_tac 1);
+qed "Int_left_absorb";
+
 goal thy "A Int B  =  B Int A";
 by (Blast_tac 1);
 qed "Int_commute";
 
+goal thy "A Int (B Int C) = B Int (A Int C)";
+by (Blast_tac 1);
+qed "Int_left_commute";
+
 goal thy "(A Int B) Int C  =  A Int (B Int C)";
 by (Blast_tac 1);
 qed "Int_assoc";
 
+(*Intersection is an AC-operator*)
+val Int_ac = [Int_assoc, Int_left_absorb, Int_commute, Int_left_commute];
+
 goal thy "{} Int B = {}";
 by (Blast_tac 1);
 qed "Int_empty_left";
@@ -197,7 +208,7 @@
 by (Blast_tac 1);
 qed "Un_commute";
 
-goal thy " A Un (B Un C) = B Un (A Un C)";
+goal thy "A Un (B Un C) = B Un (A Un C)";
 by (Blast_tac 1);
 qed "Un_left_commute";
 
@@ -205,6 +216,9 @@
 by (Blast_tac 1);
 qed "Un_assoc";
 
+(*Union is an AC-operator*)
+val Un_ac = [Un_assoc, Un_left_absorb, Un_commute, Un_left_commute];
+
 goal thy "{} Un B = B";
 by (Blast_tac 1);
 qed "Un_empty_left";
@@ -247,10 +261,14 @@
 by (Blast_tac 1);
 qed "Int_insert_right";
 
-goal thy "(A Int B) Un C  =  (A Un C) Int (B Un C)";
+goal thy "A Un (B Int C)  =  (A Un B) Int (A Un C)";
 by (Blast_tac 1);
 qed "Un_Int_distrib";
 
+goal thy "(B Int C) Un A =  (B Un A) Int (C Un A)";
+by (Blast_tac 1);
+qed "Un_Int_distrib2";
+
 goal thy
  "(A Int B) Un (B Int C) Un (C Int A) = (A Un B) Int (B Un C) Int (C Un A)";
 by (Blast_tac 1);
@@ -507,6 +525,10 @@
 
 section "-";
 
+goal thy "A-B = A Int Compl B";
+by (Blast_tac 1);
+qed "Diff_eq_Int_Compl";
+
 goal thy "A-A = {}";
 by (Blast_tac 1);
 qed "Diff_cancel";