add lub_maximal lemmas;
authorhuffman
Thu, 03 Jan 2008 22:08:54 +0100
changeset 25813 641b4da8eb9d
parent 25812 687ee352c891
child 25814 eb181909e7a4
add lub_maximal lemmas; modify conclusion of directed_finiteD; declare not_directed_empty [simp]
src/HOLCF/Porder.thy
--- a/src/HOLCF/Porder.thy	Thu Jan 03 20:29:00 2008 +0100
+++ b/src/HOLCF/Porder.thy	Thu Jan 03 22:08:54 2008 +0100
@@ -106,6 +106,17 @@
 notation (xsymbols)
   Lub  (binder "\<Squnion> " 10)
 
+text {* access to some definition as inference rule *}
+
+lemma is_lubD1: "S <<| x \<Longrightarrow> S <| x"
+unfolding is_lub_def by fast
+
+lemma is_lub_lub: "\<lbrakk>S <<| x; S <| u\<rbrakk> \<Longrightarrow> x \<sqsubseteq> u"
+unfolding is_lub_def by fast
+
+lemma is_lubI: "\<lbrakk>S <| x; \<And>u. S <| u \<Longrightarrow> x \<sqsubseteq> u\<rbrakk> \<Longrightarrow> S <<| x"
+unfolding is_lub_def by fast
+
 text {* lubs are unique *}
 
 lemma unique_lub: "\<lbrakk>S <<| x; S <<| y\<rbrakk> \<Longrightarrow> x = y"
@@ -137,16 +148,11 @@
 lemma lub_bin: "x \<sqsubseteq> y \<Longrightarrow> lub {x, y} = y"
 by (rule is_lub_bin [THEN thelubI])
 
-text {* access to some definition as inference rule *}
-
-lemma is_lubD1: "S <<| x \<Longrightarrow> S <| x"
-by (unfold is_lub_def, simp)
+lemma is_lub_maximal: "\<lbrakk>S <| x; x \<in> S\<rbrakk> \<Longrightarrow> S <<| x"
+by (erule is_lubI, erule (1) is_ubD)
 
-lemma is_lub_lub: "\<lbrakk>S <<| x; S <| u\<rbrakk> \<Longrightarrow> x \<sqsubseteq> u"
-by (unfold is_lub_def, simp)
-
-lemma is_lubI: "\<lbrakk>S <| x; \<And>u. S <| u \<Longrightarrow> x \<sqsubseteq> u\<rbrakk> \<Longrightarrow> S <<| x"
-by (unfold is_lub_def, fast)
+lemma lub_maximal: "\<lbrakk>S <| x; x \<in> S\<rbrakk> \<Longrightarrow> lub S = x"
+by (rule is_lub_maximal [THEN thelubI])
 
 subsection {* Countable chains *}
 
@@ -368,7 +374,7 @@
   assumes S: "directed S"
   assumes U: "finite U"
   assumes "U \<subseteq> S"
-  shows "\<exists>z\<in>S. \<forall>x\<in>U. x \<sqsubseteq> z"
+  shows "\<exists>z\<in>S. U <| z"
 proof -
   from U have "U \<subseteq> S \<Longrightarrow> \<exists>z\<in>S. \<forall>x\<in>U. x \<sqsubseteq> z"
   proof (induct set: finite)
@@ -387,10 +393,10 @@
     with xz have "\<forall>a\<in>insert x F. a \<sqsubseteq> z" by simp
     with zS show "\<exists>z\<in>S. \<forall>a\<in>insert x F. a \<sqsubseteq> z" ..
   qed
-  thus ?thesis using prems by fast
+  thus ?thesis using prems unfolding is_ub_def by fast
 qed
 
-lemma not_directed_empty: "\<not> directed {}"
+lemma not_directed_empty [simp]: "\<not> directed {}"
 by (rule notI, drule directedD1, simp)
 
 lemma directed_singleton: "directed {x}"