equal
deleted
inserted
replaced
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") |