diff -r 51ed312cabeb -r d5060a919b3f src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Mon Mar 20 18:21:30 2023 +0100 +++ b/src/HOL/Library/Multiset.thy Mon Mar 20 18:33:56 2023 +0100 @@ -1614,51 +1614,14 @@ qualified lemma assumes + "M \ {#}" and "transp_on (set_mset M) R" and - "totalp_on (set_mset M) R" and - "M \ {#}" + "totalp_on (set_mset M) R" shows - bex_least_element: "(\least \# M. \x \# M. least \ x \ R least x)" and - bex_greatest_element: "(\greatest \# M. \x \# M. greatest \ x \ R x greatest)" - unfolding atomize_conj + bex_least_element: "(\l \# M. \x \# M. x \ l \ R l x)" and + bex_greatest_element: "(\g \# M. \x \# M. x \ g \ R x g)" using assms -proof (induction M rule: multiset_induct) - case empty - hence False by simp - thus ?case .. -next - case (add x M) - from add.prems(1) have - transp_on_x_M_raw: "\y\#M. \z\#M. R x y \ R y z \ R x z" and - transp_on_R_M: "transp_on (set_mset M) R" - by (auto intro: transp_onI dest: transp_onD) - - from add.prems(2) have - totalp_on_x_M_raw: "\y \# M. x \ y \ R x y \ R y x" and - totalp_on_M_R: "totalp_on (set_mset M) R" - by (simp_all add: totalp_on_def) - - show ?case - proof (cases "M = {#}") - case True - thus ?thesis by simp - next - case False - then obtain least greatest where - least_of_M: "least \# M" "\y\#M. least \ y \ R least y" and - greatest_of_M: "greatest\#M" "\y\#M. greatest \ y \ R y greatest" - using add.IH[OF transp_on_R_M totalp_on_M_R] by blast - - show ?thesis - proof (rule conjI) - from least_of_M show "\y\#add_mset x M. \z\#add_mset x M. y \ z \ R y z" - by (metis insert_iff set_mset_add_mset_insert totalp_on_x_M_raw transp_on_x_M_raw) - next - from greatest_of_M show "\y\#add_mset x M. \z\#add_mset x M. y \ z \ R z y" - by (metis insert_iff set_mset_add_mset_insert totalp_on_x_M_raw transp_on_x_M_raw) - qed - qed -qed + by (auto intro: Finite_Set.bex_least_element Finite_Set.bex_greatest_element) end