# HG changeset patch # User huffman # Date 1199404452 -3600 # Node ID 228c53fdb3b426dde5599388b1d01fc9d3f78e1f # Parent c2adeb1bae5cec25aa912eb92aa5f5fa26ce451f add new is_ub lemmas; clean up directed_finite proofs diff -r c2adeb1bae5c -r 228c53fdb3b4 src/HOLCF/Porder.thy --- a/src/HOLCF/Porder.thy Fri Jan 04 00:01:02 2008 +0100 +++ b/src/HOLCF/Porder.thy Fri Jan 04 00:54:12 2008 +0100 @@ -80,6 +80,15 @@ lemma ub_rangeD: "range S <| x \ S i \ x" unfolding is_ub_def by fast +lemma is_ub_empty [simp]: "{} <| u" +unfolding is_ub_def by fast + +lemma is_ub_insert [simp]: "(insert x A) <| y = (x \ y \ A <| y)" +unfolding is_ub_def by fast + +lemma is_ub_upward: "\S <| x; x \ y\ \ S <| y" +unfolding is_ub_def by (fast intro: trans_less) + subsection {* Least upper bounds *} definition @@ -356,44 +365,38 @@ by (insert directedD2 [OF S x y], fast) lemma directed_finiteI: - assumes U: "\U. \finite U; U \ S\ \ \z\S. \x\U. x \ z" + assumes U: "\U. \finite U; U \ S\ \ \z\S. U <| z" shows "directed S" proof (rule directedI) have "finite {}" and "{} \ S" by simp_all - hence "\z\S. \x\{}. x \ z" by (rule U) + hence "\z\S. {} <| z" by (rule U) thus "\z. z \ S" by simp next fix x y assume "x \ S" and "y \ S" hence "finite {x, y}" and "{x, y} \ S" by simp_all - hence "\z\S. \x\{x, y}. x \ z" by (rule U) + hence "\z\S. {x, y} <| z" by (rule U) thus "\z\S. x \ z \ y \ z" by simp qed lemma directed_finiteD: assumes S: "directed S" - assumes U: "finite U" - assumes "U \ S" - shows "\z\S. U <| z" -proof - - from U have "U \ S \ \z\S. \x\U. x \ z" - proof (induct set: finite) - case empty - from S have "\z. z \ S" by (rule directedD1) - thus "\z\S. \x\{}. x \ z" by simp - next - case (insert x F) - from `insert x F \ S` - have xS: "x \ S" and FS: "F \ S" by simp_all - from FS have "\y\S. \a\F. a \ y" by fact - then obtain y where yS: "y \ S" and Fy: "\a\F. a \ y" .. - from directedD2 [OF S xS yS] - obtain z where zS: "z \ S" and xz: "x \ z" and yz: "y \ z" by fast - from Fy yz have "\a\F. a \ z" by (fast elim: trans_less) - with xz have "\a\insert x F. a \ z" by simp - with zS show "\z\S. \a\insert x F. a \ z" .. - qed - thus ?thesis using prems unfolding is_ub_def by fast + shows "\finite U; U \ S\ \ \z\S. U <| z" +proof (induct U set: finite) + case empty + from S have "\z. z \ S" by (rule directedD1) + thus "\z\S. {} <| z" by simp +next + case (insert x F) + from `insert x F \ S` + have xS: "x \ S" and FS: "F \ S" by simp_all + from FS have "\y\S. F <| y" by fact + then obtain y where yS: "y \ S" and Fy: "F <| y" .. + obtain z where zS: "z \ S" and xz: "x \ z" and yz: "y \ z" + using S xS yS by (rule directedE2) + from Fy yz have "F <| z" by (rule is_ub_upward) + with xz have "insert x F <| z" by simp + with zS show "\z\S. insert x F <| z" .. qed lemma not_directed_empty [simp]: "\ directed {}"