src/HOL/Binomial.thy
changeset 68786 134be95e5787
parent 68785 862b1288020f
child 68787 b129052644e9
equal deleted inserted replaced
68785:862b1288020f 68786:134be95e5787
   340   by (simp_all add: gbinomial_prod_rev prod.atLeast0_lessThan_Suc_shift)
   340   by (simp_all add: gbinomial_prod_rev prod.atLeast0_lessThan_Suc_shift)
   341 
   341 
   342 lemma gbinomial_Suc: "a gchoose (Suc k) = prod (\<lambda>i. a - of_nat i) {0..k} div fact (Suc k)"
   342 lemma gbinomial_Suc: "a gchoose (Suc k) = prod (\<lambda>i. a - of_nat i) {0..k} div fact (Suc k)"
   343   by (simp add: gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost)
   343   by (simp add: gbinomial_prod_rev atLeastLessThanSuc_atLeastAtMost)
   344 
   344 
       
   345 lemma gbinomial_1 [simp]: "a gchoose 1 = a"
       
   346   by (simp add: gbinomial_prod_rev lessThan_Suc)
       
   347 
       
   348 lemma gbinomial_Suc0 [simp]: "a gchoose Suc 0 = a"
       
   349   by (simp add: gbinomial_prod_rev lessThan_Suc)
       
   350 
   345 lemma gbinomial_mult_fact: "fact n * (a gchoose n) = (\<Prod>i = 0..<n. a - of_nat i)"
   351 lemma gbinomial_mult_fact: "fact n * (a gchoose n) = (\<Prod>i = 0..<n. a - of_nat i)"
   346   for a :: "'a::field_char_0"
   352   for a :: "'a::field_char_0"
   347   by (simp_all add: gbinomial_prod_rev field_simps)
   353   by (simp_all add: gbinomial_prod_rev field_simps)
   348 
   354 
   349 lemma gbinomial_mult_fact': "(a gchoose n) * fact n = (\<Prod>i = 0..<n. a - of_nat i)"
   355 lemma gbinomial_mult_fact': "(a gchoose n) * fact n = (\<Prod>i = 0..<n. a - of_nat i)"
   418 lemma binomial_gbinomial: "of_nat (n choose k) = (of_nat n gchoose k :: 'a::field_char_0)"
   424 lemma binomial_gbinomial: "of_nat (n choose k) = (of_nat n gchoose k :: 'a::field_char_0)"
   419   by (simp add: gbinomial_binomial [symmetric] of_nat_gbinomial)
   425   by (simp add: gbinomial_binomial [symmetric] of_nat_gbinomial)
   420 
   426 
   421 setup
   427 setup
   422   \<open>Sign.add_const_constraint (@{const_name gbinomial}, SOME @{typ "'a::field_char_0 \<Rightarrow> nat \<Rightarrow> 'a"})\<close>
   428   \<open>Sign.add_const_constraint (@{const_name gbinomial}, SOME @{typ "'a::field_char_0 \<Rightarrow> nat \<Rightarrow> 'a"})\<close>
   423 
       
   424 lemma gbinomial_1[simp]: "a gchoose 1 = a"
       
   425   by (simp add: gbinomial_prod_rev lessThan_Suc)
       
   426 
       
   427 lemma gbinomial_Suc0[simp]: "a gchoose (Suc 0) = a"
       
   428   by (simp add: gbinomial_prod_rev lessThan_Suc)
       
   429 
   429 
   430 lemma gbinomial_mult_1:
   430 lemma gbinomial_mult_1:
   431   fixes a :: "'a::field_char_0"
   431   fixes a :: "'a::field_char_0"
   432   shows "a * (a gchoose n) = of_nat n * (a gchoose n) + of_nat (Suc n) * (a gchoose (Suc n))"
   432   shows "a * (a gchoose n) = of_nat n * (a gchoose n) + of_nat (Suc n) * (a gchoose (Suc n))"
   433   (is "?l = ?r")
   433   (is "?l = ?r")