equal
deleted
inserted
replaced
198 "Suc n * (n choose k) = (Suc n choose Suc k) * Suc k" |
198 "Suc n * (n choose k) = (Suc n choose Suc k) * Suc k" |
199 apply (induct n arbitrary: k, simp add: binomial.simps) |
199 apply (induct n arbitrary: k, simp add: binomial.simps) |
200 apply (case_tac k) |
200 apply (case_tac k) |
201 apply (auto simp add: add_mult_distrib add_mult_distrib2 le_Suc_eq binomial_eq_0) |
201 apply (auto simp add: add_mult_distrib add_mult_distrib2 le_Suc_eq binomial_eq_0) |
202 done |
202 done |
|
203 |
|
204 lemma binomial_le_pow2: "n choose k \<le> 2^n" |
|
205 apply (induction n arbitrary: k) |
|
206 apply (simp add: binomial.simps) |
|
207 apply (case_tac k) |
|
208 apply (auto simp: power_Suc) |
|
209 by (simp add: add_le_mono mult_2) |
203 |
210 |
204 text{*The absorption property*} |
211 text{*The absorption property*} |
205 lemma Suc_times_binomial: |
212 lemma Suc_times_binomial: |
206 "Suc k * (Suc n choose Suc k) = Suc n * (n choose k)" |
213 "Suc k * (Suc n choose Suc k) = Suc n * (n choose k)" |
207 using Suc_times_binomial_eq by auto |
214 using Suc_times_binomial_eq by auto |
699 lemma gbinomial_reduce_nat: |
706 lemma gbinomial_reduce_nat: |
700 fixes a :: "'a :: field_char_0" |
707 fixes a :: "'a :: field_char_0" |
701 shows "0 < k \<Longrightarrow> a gchoose k = (a - 1) gchoose (k - 1) + ((a - 1) gchoose k)" |
708 shows "0 < k \<Longrightarrow> a gchoose k = (a - 1) gchoose (k - 1) + ((a - 1) gchoose k)" |
702 by (metis Suc_pred' diff_add_cancel gbinomial_Suc_Suc) |
709 by (metis Suc_pred' diff_add_cancel gbinomial_Suc_Suc) |
703 |
710 |
|
711 lemma gchoose_row_sum_weighted: |
|
712 fixes r :: "'a::field_char_0" |
|
713 shows "(\<Sum>k = 0..m. (r gchoose k) * (r/2 - of_nat k)) = of_nat(Suc m) / 2 * (r gchoose (Suc m))" |
|
714 proof (induct m) |
|
715 case 0 show ?case by simp |
|
716 next |
|
717 case (Suc m) |
|
718 from Suc show ?case |
|
719 by (simp add: algebra_simps distrib gbinomial_mult_1) |
|
720 qed |
704 |
721 |
705 lemma binomial_symmetric: |
722 lemma binomial_symmetric: |
706 assumes kn: "k \<le> n" |
723 assumes kn: "k \<le> n" |
707 shows "n choose k = n choose (n - k)" |
724 shows "n choose k = n choose (n - k)" |
708 proof- |
725 proof- |