# HG changeset patch # User paulson # Date 1633347170 -3600 # Node ID 5827b91ef30ef16ad85e3f098e3f4e2258171853 # Parent 75d14ac0547e9473279bf6852bd7377700d93ae6 new material from the Roth development, mostly about finite sets, disjoint famillies and partitions diff -r 75d14ac0547e -r 5827b91ef30e src/HOL/Finite_Set.thy --- a/src/HOL/Finite_Set.thy Sun Oct 03 21:29:34 2021 +0200 +++ b/src/HOL/Finite_Set.thy Mon Oct 04 12:32:50 2021 +0100 @@ -373,6 +373,17 @@ lemma finite_vimage_iff: "bij h \ finite (h -` F) \ finite F" unfolding bij_def by (auto elim: finite_vimageD finite_vimageI) +lemma finite_inverse_image_gen: + assumes "finite A" "inj_on f D" + shows "finite {j\D. f j \ A}" + using finite_vimage_IntI [OF assms] + by (simp add: Collect_conj_eq inf_commute vimage_def) + +lemma finite_inverse_image: + assumes "finite A" "inj f" + shows "finite {j. f j \ A}" + using finite_inverse_image_gen [OF assms] by simp + lemma finite_Collect_bex [simp]: assumes "finite A" shows "finite {x. \y\A. Q x y} \ (\y\A. finite {x. Q x y})" diff -r 75d14ac0547e -r 5827b91ef30e src/HOL/Groups_Big.thy --- a/src/HOL/Groups_Big.thy Sun Oct 03 21:29:34 2021 +0200 +++ b/src/HOL/Groups_Big.thy Mon Oct 04 12:32:50 2021 +0100 @@ -1560,6 +1560,20 @@ then show ?case by (force intro: mult_strict_mono' prod_nonneg) qed +lemma prod_le_power: + assumes A: "\i. i \ A \ 0 \ f i \ f i \ n" "card A \ k" and "n \ 1" + shows "prod f A \ n ^ k" + using A +proof (induction A arbitrary: k rule: infinite_finite_induct) + case (insert i A) + then obtain k' where k': "card A \ k'" "k = Suc k'" + using Suc_le_D by force + have "f i * prod f A \ n * n ^ k'" + using insert \n \ 1\ k' by (intro prod_nonneg mult_mono; force) + then show ?case + by (auto simp: \k = Suc k'\ insert.hyps) +qed (use \n \ 1\ in auto) + end lemma prod_mono2: diff -r 75d14ac0547e -r 5827b91ef30e src/HOL/Library/Countable_Set.thy --- a/src/HOL/Library/Countable_Set.thy Sun Oct 03 21:29:34 2021 +0200 +++ b/src/HOL/Library/Countable_Set.thy Mon Oct 04 12:32:50 2021 +0100 @@ -110,6 +110,25 @@ using to_nat_on_infinite[of S, unfolded bij_betw_def] by (auto cong: bij_betw_cong intro: bij_betw_inv_into to_nat_on_infinite) +text \ + The sum/product over the enumeration of a finite set equals simply the sum/product over the set +\ +context comm_monoid_set +begin + +lemma card_from_nat_into: + "F (\i. h (from_nat_into A i)) {..i. h (from_nat_into A i)) {.. 'a" where "A = range f" "inj f" diff -r 75d14ac0547e -r 5827b91ef30e src/HOL/Library/Disjoint_Sets.thy --- a/src/HOL/Library/Disjoint_Sets.thy Sun Oct 03 21:29:34 2021 +0200 +++ b/src/HOL/Library/Disjoint_Sets.thy Mon Oct 04 12:32:50 2021 +0100 @@ -167,6 +167,20 @@ by (intro disjointD[OF d]) auto qed +lemma disjoint_family_on_iff_disjoint_image: + assumes "\i. i \ I \ A i \ {}" + shows "disjoint_family_on A I \ disjoint (A ` I) \ inj_on A I" +proof + assume "disjoint_family_on A I" + then show "disjoint (A ` I) \ inj_on A I" + by (metis (mono_tags, lifting) assms disjoint_family_onD disjoint_family_on_disjoint_image inf.idem inj_onI) +qed (use disjoint_image_disjoint_family_on in metis) + +lemma card_UN_disjoint': + assumes "disjoint_family_on A I" "\i. i \ I \ finite (A i)" "finite I" + shows "card (\i\I. A i) = (\i\I. card (A i))" + using assms by (simp add: card_UN_disjoint disjoint_family_on_def) + lemma disjoint_UN: assumes F: "\i. i \ I \ disjoint (F i)" and *: "disjoint_family_on (\i. \(F i)) I" shows "disjoint (\i\I. F i)" @@ -217,6 +231,25 @@ using disjoint_UN[of "{C, B}" "\x. x"] by (auto simp add: disjoint_family_on_def) text \ + Sum/product of the union of a finite disjoint family +\ +context comm_monoid_set +begin + +lemma UNION_disjoint_family: + assumes "finite I" and "\i\I. finite (A i)" + and "disjoint_family_on A I" + shows "F g (\(A ` I)) = F (\x. F g (A x)) I" + using assms unfolding disjoint_family_on_def by (rule UNION_disjoint) + +lemma Union_disjoint_sets: + assumes "\A\C. finite A" and "disjoint C" + shows "F g (\C) = (F \ F) g C" + using assms unfolding disjoint_def by (rule Union_disjoint) + +end + +text \ The union of an infinite disjoint family of non-empty sets is infinite. \ lemma infinite_disjoint_family_imp_infinite_UNION: @@ -353,6 +386,11 @@ lemma finite_elements: "finite A \ partition_on A P \ finite P" using partition_onD1[of A P] by (simp add: finite_UnionD) +lemma product_partition: + assumes "partition_on A P" and "\p. p \ P \ finite p" + shows "card A = (\p\P. card p)" + using assms unfolding partition_on_def by (meson card_Union_disjoint) + subsection \Equivalence of partitions and equivalence classes\ lemma partition_on_quotient: diff -r 75d14ac0547e -r 5827b91ef30e src/HOL/Power.thy --- a/src/HOL/Power.thy Sun Oct 03 21:29:34 2021 +0200 +++ b/src/HOL/Power.thy Mon Oct 04 12:32:50 2021 +0100 @@ -810,6 +810,10 @@ by (auto intro!: power2_le_imp_le [OF _ abs_ge_zero]) qed +lemma power2_le_iff_abs_le: + "y \ 0 \ x\<^sup>2 \ y\<^sup>2 \ \x\ \ y" + by (metis abs_le_square_iff abs_of_nonneg) + lemma abs_square_le_1:"x\<^sup>2 \ 1 \ \x\ \ 1" using abs_le_square_iff [of x 1] by simp