src/HOL/Binomial.thy
changeset 60141 833adf7db7d8
parent 59867 58043346ca64
child 60301 ff82ba1893c8
equal deleted inserted replaced
60140:a948ee5fb5f4 60141:833adf7db7d8
   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-