diff -r 698b58513fd1 -r b037517c815b src/HOL/Finite_Set.thy --- a/src/HOL/Finite_Set.thy Mon Oct 05 22:53:40 2020 +0100 +++ b/src/HOL/Finite_Set.thy Tue Oct 06 16:55:56 2020 +0200 @@ -2057,6 +2057,58 @@ qed qed +subsubsection \Finite orders\ + +context order +begin + +lemma finite_has_maximal: + "\ finite A; A \ {} \ \ \ m \ A. \ b \ A. m \ b \ m = b" +proof (induction rule: finite_psubset_induct) + case (psubset A) + from \A \ {}\ obtain a where "a \ A" by auto + let ?B = "{b \ A. a < b}" + show ?case + proof cases + assume "?B = {}" + hence "\ b \ A. a \ b \ a = b" using le_neq_trans by blast + thus ?thesis using \a \ A\ by blast + next + assume "?B \ {}" + have "a \ ?B" by auto + hence "?B \ A" using \a \ A\ by blast + from psubset.IH[OF this \?B \ {}\] show ?thesis using order.strict_trans2 by blast + qed +qed + +lemma finite_has_maximal2: + "\ finite A; a \ A \ \ \ m \ A. a \ m \ (\ b \ A. m \ b \ m = b)" +using finite_has_maximal[of "{b \ A. a \ b}"] by fastforce + +lemma finite_has_minimal: + "\ finite A; A \ {} \ \ \ m \ A. \ b \ A. b \ m \ m = b" +proof (induction rule: finite_psubset_induct) + case (psubset A) + from \A \ {}\ obtain a where "a \ A" by auto + let ?B = "{b \ A. b < a}" + show ?case + proof cases + assume "?B = {}" + hence "\ b \ A. b \ a \ a = b" using le_neq_trans by blast + thus ?thesis using \a \ A\ by blast + next + assume "?B \ {}" + have "a \ ?B" by auto + hence "?B \ A" using \a \ A\ by blast + from psubset.IH[OF this \?B \ {}\] show ?thesis using order.strict_trans1 by blast + qed +qed + +lemma finite_has_minimal2: + "\ finite A; a \ A \ \ \ m \ A. m \ a \ (\ b \ A. b \ m \ m = b)" +using finite_has_minimal[of "{b \ A. b \ a}"] by fastforce + +end subsubsection \Relating injectivity and surjectivity\