diff -r 58ccbc73a172 -r a662e8139804 src/HOL/Library/Infinite_Set.thy --- a/src/HOL/Library/Infinite_Set.thy Thu Jul 14 12:21:12 2016 +0200 +++ b/src/HOL/Library/Infinite_Set.thy Thu Jul 14 14:48:49 2016 +0100 @@ -307,5 +307,36 @@ unfolding bij_betw_def by (auto intro: enumerate_in_set) qed +text\A pair of weird and wonderful lemmas from HOL Light\ +lemma finite_transitivity_chain: + assumes "finite A" + and R: "\x. ~ R x x" "\x y z. \R x y; R y z\ \ R x z" + and A: "\x. x \ A \ \y. y \ A \ R x y" + shows "A = {}" +using \finite A\ A +proof (induction A) + case (insert a A) + with R show ?case + by (metis empty_iff insert_iff) +qed simp + +corollary Union_maximal_sets: + assumes "finite \" + shows "\{T \ \. \U\\. \ T \ U} = \\" + (is "?lhs = ?rhs") +proof + show "?rhs \ ?lhs" + proof (rule Union_subsetI) + fix S + assume "S \ \" + have "{T \ \. S \ T} = {}" if "~ (\y. y \ {T \ \. \U\\. \ T \ U} \ S \ y)" + apply (rule finite_transitivity_chain [of _ "\T U. S \ T \ T \ U"]) + using assms that apply auto + by (blast intro: dual_order.trans psubset_imp_subset) + then show "\y. y \ {T \ \. \U\\. \ T \ U} \ S \ y" + using \S \ \\ by blast + qed +qed force + end