# HG changeset patch # User desharna # Date 1679332890 -3600 # Node ID 51ed312cabeb724551994be0e50cf9ed74b03ede # Parent f35cbb4da88a69eb74ab5de9f270e24332656c0d added lemmas Finite_Set.bex_least_element and Finite_Set.bex_greatest_element diff -r f35cbb4da88a -r 51ed312cabeb NEWS --- a/NEWS Mon Mar 20 15:02:17 2023 +0100 +++ b/NEWS Mon Mar 20 18:21:30 2023 +0100 @@ -67,6 +67,8 @@ - Imported Relation instead of Product_Type, Sum_Type, and Fields. Minor INCOMPATIBILITY. - Added lemmas. + Finite_Set.bex_greatest_element + Finite_Set.bex_least_element Finite_Set.bex_max_element Finite_Set.bex_min_element is_max_element_in_set_iff diff -r f35cbb4da88a -r 51ed312cabeb src/HOL/Finite_Set.thy --- a/src/HOL/Finite_Set.thy Mon Mar 20 15:02:17 2023 +0100 +++ b/src/HOL/Finite_Set.thy Mon Mar 20 18:21:30 2023 +0100 @@ -2571,6 +2571,103 @@ "asymp_on A R \ (\y \ A. y \ x \ \ R x y) \ (\y. R x y \ y \ A)" by (auto dest: asymp_onD) +context begin + +qualified lemma + assumes "finite A" and "A \ {}" and "transp_on A R" and "totalp_on A R" + shows + bex_least_element: "\l \ A. \x \ A. x \ l \ R l x" and + bex_greatest_element: "\g \ A. \x \ A. x \ g \ R x g" + unfolding atomize_conj + using assms +proof (induction A rule: finite_induct) + case empty + hence False by simp + thus ?case .. +next + case (insert a A') + + from insert.prems(2) have transp_on_A': "transp_on A' R" + by (auto intro: transp_onI dest: transp_onD) + + from insert.prems(3) have + totalp_on_a_A'_raw: "\y \ A'. a \ y \ R a y \ R y a" and + totalp_on_A': "totalp_on A' R" + by (simp_all add: totalp_on_def) + + show ?case + proof (cases "A' = {}") + case True + thus ?thesis by simp + next + case False + then obtain least greatest where + "least \ A'" and least_of_A': "\x\A'. x \ least \ R least x" and + "greatest \ A'" and greatest_of_A': "\x\A'. x \ greatest \ R x greatest" + using insert.IH[OF _ transp_on_A' totalp_on_A'] by auto + + show ?thesis + proof (rule conjI) + show "\l\insert a A'. \x\insert a A'. x \ l \ R l x" + proof (cases "R a least") + case True + show ?thesis + proof (intro bexI ballI impI) + show "a \ insert a A'" + by simp + next + fix x + show "\x. x \ insert a A' \ x \ a \ R a x" + using True \least \ A'\ least_of_A' + using insert.prems(2)[THEN transp_onD, of a least] + by auto + qed + next + case False + show ?thesis + proof (intro bexI ballI impI) + show "least \ insert a A'" + using \least \ A'\ by simp + next + fix x + show "x \ insert a A' \ x \ least \ R least x" + using False \least \ A'\ least_of_A' totalp_on_a_A'_raw + by (cases "x = a") auto + qed + qed + next + show "\g \ insert a A'. \x \ insert a A'. x \ g \ R x g" + proof (cases "R greatest a") + case True + show ?thesis + proof (intro bexI ballI impI) + show "a \ insert a A'" + by simp + next + fix x + show "\x. x \ insert a A' \ x \ a \ R x a" + using True \greatest \ A'\ greatest_of_A' + using insert.prems(2)[THEN transp_onD, of _ greatest a] + by auto + qed + next + case False + show ?thesis + proof (intro bexI ballI impI) + show "greatest \ insert a A'" + using \greatest \ A'\ by simp + next + fix x + show "x \ insert a A' \ x \ greatest \ R x greatest" + using False \greatest \ A'\ greatest_of_A' totalp_on_a_A'_raw + by (cases "x = a") auto + qed + qed + qed + qed +qed + +end subsubsection \Finite orders\