equal
deleted
inserted
replaced
30 lemma binomial_Suc_Suc [simp]: "(Suc n choose Suc k) = (n choose k) + (n choose Suc k)" |
30 lemma binomial_Suc_Suc [simp]: "(Suc n choose Suc k) = (n choose k) + (n choose Suc k)" |
31 by simp |
31 by simp |
32 |
32 |
33 lemma choose_reduce_nat: |
33 lemma choose_reduce_nat: |
34 "0 < (n::nat) \<Longrightarrow> 0 < k \<Longrightarrow> |
34 "0 < (n::nat) \<Longrightarrow> 0 < k \<Longrightarrow> |
35 (n choose k) = ((n - 1) choose k) + ((n - 1) choose (k - 1))" |
35 (n choose k) = ((n - 1) choose (k - 1)) + ((n - 1) choose k)" |
36 by (metis Suc_diff_1 binomial.simps(2) add.commute neq0_conv) |
36 by (metis Suc_diff_1 binomial.simps(2) neq0_conv) |
37 |
37 |
38 lemma binomial_eq_0: "n < k \<Longrightarrow> n choose k = 0" |
38 lemma binomial_eq_0: "n < k \<Longrightarrow> n choose k = 0" |
39 by (induct n arbitrary: k) auto |
39 by (induct n arbitrary: k) auto |
40 |
40 |
41 declare binomial.simps [simp del] |
41 declare binomial.simps [simp del] |
522 have eq0: "(\<Prod>i\<in>{1..k}. (a + 1) - of_nat i) = (\<Prod>i\<in>{0..h}. a - of_nat i)" |
522 have eq0: "(\<Prod>i\<in>{1..k}. (a + 1) - of_nat i) = (\<Prod>i\<in>{0..h}. a - of_nat i)" |
523 apply (rule setprod.reindex_cong [where l = Suc]) |
523 apply (rule setprod.reindex_cong [where l = Suc]) |
524 using Suc |
524 using Suc |
525 apply auto |
525 apply auto |
526 done |
526 done |
527 |
|
528 have "of_nat (fact (Suc k)) * (a gchoose k + (a gchoose (Suc k))) = |
527 have "of_nat (fact (Suc k)) * (a gchoose k + (a gchoose (Suc k))) = |
529 ((a gchoose Suc h) * of_nat (fact (Suc h)) * of_nat (Suc k)) + (\<Prod>i\<in>{0\<Colon>nat..Suc h}. a - of_nat i)" |
528 ((a gchoose Suc h) * of_nat (fact (Suc h)) * of_nat (Suc k)) + (\<Prod>i\<in>{0\<Colon>nat..Suc h}. a - of_nat i)" |
530 apply (simp add: Suc field_simps del: fact_Suc) |
529 apply (simp add: Suc field_simps del: fact_Suc) |
531 unfolding gbinomial_mult_fact' |
530 unfolding gbinomial_mult_fact' |
532 apply (subst fact_Suc) |
531 apply (subst fact_Suc) |
544 by (simp add: Suc setprod_nat_ivl_1_Suc) |
543 by (simp add: Suc setprod_nat_ivl_1_Suc) |
545 also have "\<dots> = of_nat (fact (Suc k)) * ((a + 1) gchoose (Suc k))" |
544 also have "\<dots> = of_nat (fact (Suc k)) * ((a + 1) gchoose (Suc k))" |
546 unfolding gbinomial_mult_fact .. |
545 unfolding gbinomial_mult_fact .. |
547 finally show ?thesis by (simp del: fact_Suc) |
546 finally show ?thesis by (simp del: fact_Suc) |
548 qed |
547 qed |
|
548 |
|
549 lemma gbinomial_reduce_nat: |
|
550 "0 < k \<Longrightarrow> (a::'a::field_char_0) gchoose k = (a - 1) gchoose (k - 1) + ((a - 1) gchoose k)" |
|
551 by (metis Suc_pred' diff_add_cancel gbinomial_Suc_Suc) |
549 |
552 |
550 |
553 |
551 lemma binomial_symmetric: |
554 lemma binomial_symmetric: |
552 assumes kn: "k \<le> n" |
555 assumes kn: "k \<le> n" |
553 shows "n choose k = n choose (n - k)" |
556 shows "n choose k = n choose (n - k)" |