src/HOL/Number_Theory/Binomial.thy
changeset 58833 09974789e483
parent 58713 572a5a870c84
child 58841 e16712bb1d41
equal deleted inserted replaced
58832:ec9550bd5fd7 58833:09974789e483
    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)"