src/HOL/Multivariate_Analysis/Cartesian_Euclidean_Space.thy
changeset 56193 c726ecfb22b6
parent 56189 c4daa97ac57a
child 56196 32b7eafc5a52
equal deleted inserted replaced
56192:d666cb0e4cf9 56193:c726ecfb22b6
    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