Fixed lattice defns
authornipkow
Tue, 08 Feb 2005 09:46:00 +0100
changeset 15505 c929e1cbef88
parent 15504 5bc81e50f2c5
child 15506 864238c95b56
Fixed lattice defns
src/HOL/Finite_Set.thy
--- a/src/HOL/Finite_Set.thy	Mon Feb 07 18:20:46 2005 +0100
+++ b/src/HOL/Finite_Set.thy	Tue Feb 08 09:46:00 2005 +0100
@@ -2112,10 +2112,7 @@
 lemma (in Lattice) inf_absorb: "x \<sqsubseteq> y \<Longrightarrow> x \<sqinter> y = x"
 by(blast intro: antisym inf_le1 inf_least refl)
 
-text{* Distributive lattices: *}
-
-locale DistribLattice = Lattice +
-  assumes sup_inf_distrib1: "x \<squnion> (y \<sqinter> z) = (x \<squnion> y) \<sqinter> (x \<squnion> z)"
+text{* Towards distributivity: if you have one of them, you have them all. *}
 
 lemma (in Lattice) distrib_imp1:
 assumes D: "!!x y z. x \<sqinter> (y \<squnion> z) = (x \<sqinter> y) \<squnion> (x \<sqinter> z)"
@@ -2141,12 +2138,6 @@
   finally show ?thesis .
 qed
 
-
-lemma (in DistribLattice) inf_sup_distrib1:
- "x \<sqinter> (y \<squnion> z) = (x \<sqinter> y) \<squnion> (x \<sqinter> z)"
-by(rule distrib_imp2[OF sup_inf_distrib1])
-
-
 text{* Lattices are semilattices *}
 
 lemma (in Lattice) ACf_inf: "ACf inf"
@@ -2191,7 +2182,29 @@
 apply(rule sup_ge2)
 done
 
-text{* Fold laws in lattices *}
+text{* A package of rewrite rules for deciding equivalence wrt ACI: *}
+
+lemmas (in Lattice) ACI = ACIf.ACI[OF ACIf_inf] ACIf.ACI[OF ACIf_sup]
+
+subsubsection{* Distributive lattices *}
+
+locale DistribLattice = Lattice +
+  assumes sup_inf_distrib1: "x \<squnion> (y \<sqinter> z) = (x \<squnion> y) \<sqinter> (x \<squnion> z)"
+
+lemma (in DistribLattice) sup_inf_distrib2: "(y \<sqinter> z) \<squnion> x = (y \<squnion> x) \<sqinter> (z \<squnion> x)"
+by(simp add:ACI sup_inf_distrib1)
+
+lemma (in DistribLattice) inf_sup_distrib1: "x \<sqinter> (y \<squnion> z) = (x \<sqinter> y) \<squnion> (x \<sqinter> z)"
+by(rule distrib_imp2[OF sup_inf_distrib1])
+
+lemma (in DistribLattice) inf_sup_distrib2: "(y \<squnion> z) \<sqinter> x = (y \<sqinter> x) \<squnion> (z \<sqinter> x)"
+by(simp add:ACI inf_sup_distrib1)
+
+lemmas (in DistribLattice) distrib =
+  sup_inf_distrib1 sup_inf_distrib2 inf_sup_distrib1 inf_sup_distrib2
+
+
+subsubsection{* Fold laws in lattices *}
 
 lemma (in Lattice) Inf_le_Sup: "\<lbrakk> finite A; A \<noteq> {} \<rbrakk> \<Longrightarrow> \<Sqinter>A \<sqsubseteq> \<Squnion>A"
 apply(unfold Sup_def Inf_def)
@@ -2235,7 +2248,6 @@
   finally show ?case .
 qed
 
-(* FIXME
 lemma (in DistribLattice) sup_Inf2_distrib:
 assumes A: "finite A" "A \<noteq> {}" and B: "finite B" "B \<noteq> {}"
 shows "(\<Sqinter>A \<squnion> \<Sqinter>B) = \<Sqinter>{a \<squnion> b|a b. a \<in> A \<and> b \<in> B}"
@@ -2267,7 +2279,6 @@
     by blast
   finally show ?case .
 qed
-*)
 
 
 subsection{*Min and Max*}