src/HOL/Binomial.thy
changeset 69064 5840724b1d71
parent 68787 b129052644e9
child 69107 c2de7a5c8de9
equal deleted inserted replaced
69045:8c240fdeffcb 69064:5840724b1d71
  1297 
  1297 
  1298 lemma binomial_code [code]:
  1298 lemma binomial_code [code]:
  1299   "n choose k =
  1299   "n choose k =
  1300       (if k > n then 0
  1300       (if k > n then 0
  1301        else if 2 * k > n then n choose (n - k)
  1301        else if 2 * k > n then n choose (n - k)
  1302        else (fold_atLeastAtMost_nat ( * ) (n - k + 1) n 1 div fact k))"
  1302        else (fold_atLeastAtMost_nat (*) (n - k + 1) n 1 div fact k))"
  1303 proof -
  1303 proof -
  1304   {
  1304   {
  1305     assume "k \<le> n"
  1305     assume "k \<le> n"
  1306     then have "{1..n} = {1..n-k} \<union> {n-k+1..n}" by auto
  1306     then have "{1..n} = {1..n-k} \<union> {n-k+1..n}" by auto
  1307     then have "(fact n :: nat) = fact (n-k) * \<Prod>{n-k+1..n}"
  1307     then have "(fact n :: nat) = fact (n-k) * \<Prod>{n-k+1..n}"