# HG changeset patch # User noschinl # Date 1306444860 -7200 # Node ID da014b00d7a4da407f8586ccfd63c054f3258943 # Parent 4fc15e3217ebaf01832467b2f2fe1e781cb2681c instance inat for complete_lattice diff -r 4fc15e3217eb -r da014b00d7a4 src/HOL/Library/Nat_Infinity.thy --- a/src/HOL/Library/Nat_Infinity.thy Thu May 26 22:02:40 2011 +0200 +++ b/src/HOL/Library/Nat_Infinity.thy Thu May 26 23:21:00 2011 +0200 @@ -453,6 +453,18 @@ end +lemma finite_Fin_bounded: + assumes le_fin: "\y. y \ A \ y \ Fin n" + shows "finite A" +proof (rule finite_subset) + show "finite (Fin ` {..n})" by blast + + have "A \ {..Fin n}" using le_fin by fastsimp + also have "\ \ Fin ` {..n}" + by (rule subsetI) (case_tac x, auto) + finally show "A \ Fin ` {..n}" . +qed + subsection {* Well-ordering *} @@ -492,6 +504,38 @@ show "P n" by (blast intro: inat_less_induct hyp) qed +subsection {* Complete Lattice *} + +instantiation inat :: complete_lattice +begin + +definition inf_inat :: "inat \ inat \ inat" where + "inf_inat \ min" + +definition sup_inat :: "inat \ inat \ inat" where + "sup_inat \ max" + +definition Inf_inat :: "inat set \ inat" where + "Inf_inat A \ if A = {} then \ else (LEAST x. x \ A)" + +definition Sup_inat :: "inat set \ inat" where + "Sup_inat A \ if A = {} then 0 + else if finite A then Max A + else \" +instance proof + fix x :: "inat" and A :: "inat set" + { assume "x \ A" then show "Inf A \ x" + unfolding Inf_inat_def by (auto intro: Least_le) } + { assume "\y. y \ A \ x \ y" then show "x \ Inf A" + unfolding Inf_inat_def + by (cases "A = {}") (auto intro: LeastI2_ex) } + { assume "x \ A" then show "x \ Sup A" + unfolding Sup_inat_def by (cases "finite A") auto } + { assume "\y. y \ A \ y \ x" then show "Sup A \ x" + unfolding Sup_inat_def using finite_Fin_bounded by auto } +qed (simp_all add: inf_inat_def sup_inat_def) +end + subsection {* Traditional theorem names *}