equal
deleted
inserted
replaced
21 apply (rule setsum_Plus [OF finite finite]) |
21 apply (rule setsum_Plus [OF finite finite]) |
22 done |
22 done |
23 |
23 |
24 lemma setsum_mult_product: |
24 lemma setsum_mult_product: |
25 "setsum h {..<A * B :: nat} = (\<Sum>i\<in>{..<A}. \<Sum>j\<in>{..<B}. h (j + i * B))" |
25 "setsum h {..<A * B :: nat} = (\<Sum>i\<in>{..<A}. \<Sum>j\<in>{..<B}. h (j + i * B))" |
26 unfolding sumr_group[of h B A, unfolded atLeast0LessThan, symmetric] |
26 unfolding setsum_nat_group[of h B A, unfolded atLeast0LessThan, symmetric] |
27 proof (rule setsum_cong, simp, rule setsum_reindex_cong) |
27 proof (rule setsum_cong, simp, rule setsum_reindex_cong) |
28 fix i |
28 fix i |
29 show "inj_on (\<lambda>j. j + i * B) {..<B}" by (auto intro!: inj_onI) |
29 show "inj_on (\<lambda>j. j + i * B) {..<B}" by (auto intro!: inj_onI) |
30 show "{i * B..<i * B + B} = (\<lambda>j. j + i * B) ` {..<B}" |
30 show "{i * B..<i * B + B} = (\<lambda>j. j + i * B) ` {..<B}" |
31 proof safe |
31 proof safe |