src/HOL/ex/NatSum.thy
author wenzelm
Sat, 06 Jan 2018 16:56:07 +0100
changeset 67352 5f7f339f3d7e
parent 64974 d0e55f85fd8a
child 67443 3abf6a722518
permissions -rw-r--r--
inner syntax comments may be written as "\<comment> \<open>text\<close>";
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
     1
(*  Title:      HOL/ex/NatSum.thy
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
     2
    Author:     Tobias Nipkow
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
     3
*)
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
     4
61343
5b5656a63bd6 isabelle update_cartouches;
wenzelm
parents: 58889
diff changeset
     5
section \<open>Summing natural numbers\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
     6
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
     7
theory NatSum
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
     8
  imports Main
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
     9
begin
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    10
61343
5b5656a63bd6 isabelle update_cartouches;
wenzelm
parents: 58889
diff changeset
    11
text \<open>
11786
51ce34ef5113 setsum syntax;
wenzelm
parents: 11704
diff changeset
    12
  Summing natural numbers, squares, cubes, etc.
51ce34ef5113 setsum syntax;
wenzelm
parents: 11704
diff changeset
    13
51ce34ef5113 setsum syntax;
wenzelm
parents: 11704
diff changeset
    14
  Thanks to Sloane's On-Line Encyclopedia of Integer Sequences,
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    15
  \<^url>\<open>http://oeis.org\<close>.
61343
5b5656a63bd6 isabelle update_cartouches;
wenzelm
parents: 58889
diff changeset
    16
\<close>
11786
51ce34ef5113 setsum syntax;
wenzelm
parents: 11704
diff changeset
    17
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
    18
lemmas [simp] =
23477
f4b83f03cac9 tuned and renamed group_eq_simps and ring_eq_simps
nipkow
parents: 23431
diff changeset
    19
  ring_distribs
61933
cf58b5b794b2 isabelle update_cartouches -c -t;
wenzelm
parents: 61343
diff changeset
    20
  diff_mult_distrib diff_mult_distrib2 \<comment>\<open>for type nat\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    21
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    22
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    23
text \<open>\<^medskip> The sum of the first \<open>n\<close> odd numbers equals \<open>n\<close> squared.\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    24
16593
0115764233e4 stylistic improvements
paulson
parents: 16417
diff changeset
    25
lemma sum_of_odds: "(\<Sum>i=0..<n. Suc (i + i)) = n * n"
16993
wenzelm
parents: 16593
diff changeset
    26
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    27
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    28
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    29
text \<open>\<^medskip> The sum of the first \<open>n\<close> odd squares.\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    30
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    31
lemma sum_of_odd_squares:
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
    32
  "3 * (\<Sum>i=0..<n. Suc(2*i) * Suc(2*i)) = n * (4 * n * n - 1)"
16993
wenzelm
parents: 16593
diff changeset
    33
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    34
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    35
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    36
text \<open>\<^medskip> The sum of the first \<open>n\<close> odd cubes.\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    37
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    38
lemma sum_of_odd_cubes:
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
    39
  "(\<Sum>i=0..<n. Suc (2*i) * Suc (2*i) * Suc (2*i)) =
11786
51ce34ef5113 setsum syntax;
wenzelm
parents: 11704
diff changeset
    40
    n * n * (2 * n * n - 1)"
16993
wenzelm
parents: 16593
diff changeset
    41
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    42
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    43
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    44
text \<open>\<^medskip> The sum of the first \<open>n\<close> positive integers equals \<open>n (n + 1) / 2\<close>.\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    45
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    46
lemma sum_of_naturals: "2 * (\<Sum>i=0..n. i) = n * Suc n"
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    47
  by (induct n) auto
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    48
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    49
lemma sum_of_squares: "6 * (\<Sum>i=0..n. i * i) = n * Suc n * Suc (2 * n)"
16993
wenzelm
parents: 16593
diff changeset
    50
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    51
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    52
lemma sum_of_cubes: "4 * (\<Sum>i=0..n. i * i * i) = n * n * Suc n * Suc n"
16993
wenzelm
parents: 16593
diff changeset
    53
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    54
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    55
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    56
text \<open>\<^medskip> A cute identity:\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    57
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    58
lemma sum_squared: "(\<Sum>i=0..n. i)^2 = (\<Sum>i=0..n. i^3)" for n :: nat
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    59
proof (induct n)
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    60
  case 0
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    61
  show ?case by simp
21144
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    62
next
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    63
  case (Suc n)
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    64
  have "(\<Sum>i = 0..Suc n. i)^2 =
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    65
        (\<Sum>i = 0..n. i^3) + (2*(\<Sum>i = 0..n. i)*(n+1) + (n+1)^2)"
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    66
    (is "_ = ?A + ?B")
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    67
    using Suc by (simp add: eval_nat_numeral)
21144
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    68
  also have "?B = (n+1)^3"
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    69
    using sum_of_naturals by (simp add: eval_nat_numeral)
21144
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    70
  also have "?A + (n+1)^3 = (\<Sum>i=0..Suc n. i^3)" by simp
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    71
  finally show ?case .
17b0b4c6491b added sum_squared
nipkow
parents: 16993
diff changeset
    72
qed
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    73
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    74
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    75
text \<open>\<^medskip> Sum of fourth powers: three versions.\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    76
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    77
lemma sum_of_fourth_powers:
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
    78
  "30 * (\<Sum>i=0..n. i * i * i * i) =
11786
51ce34ef5113 setsum syntax;
wenzelm
parents: 11704
diff changeset
    79
    n * Suc n * Suc (2 * n) * (3 * n * n + 3 * n - 1)"
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    80
proof (induct n)
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    81
  case 0
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    82
  show ?case by simp
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    83
next
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    84
  case (Suc n)
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    85
  then show ?case
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    86
    by (cases n)  \<comment> \<open>eliminates the subtraction\<close>
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    87
      simp_all
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    88
qed
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    89
61343
5b5656a63bd6 isabelle update_cartouches;
wenzelm
parents: 58889
diff changeset
    90
text \<open>
16593
0115764233e4 stylistic improvements
paulson
parents: 16417
diff changeset
    91
  Two alternative proofs, with a change of variables and much more
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    92
  subtraction, performed using the integers.
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    93
\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    94
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
    95
lemma int_sum_of_fourth_powers:
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
    96
  "30 * int (\<Sum>i=0..<m. i * i * i * i) =
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
    97
    int m * (int m - 1) * (int(2 * m) - 1) *
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
    98
    (int(3 * m * m) - int(3 * m) - 1)"
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
    99
  by (induct m) simp_all
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
   100
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
   101
lemma of_nat_sum_of_fourth_powers:
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
   102
  "30 * of_nat (\<Sum>i=0..<m. i * i * i * i) =
15114
70d1f5b7d0ad an updated treatment of the simprules
paulson
parents: 15045
diff changeset
   103
    of_nat m * (of_nat m - 1) * (of_nat (2 * m) - 1) *
70d1f5b7d0ad an updated treatment of the simprules
paulson
parents: 15045
diff changeset
   104
    (of_nat (3 * m * m) - of_nat (3 * m) - (1::int))"
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
   105
  by (induct m) simp_all
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
   106
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
   107
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
   108
text \<open>\<^medskip> Sums of geometric series: \<open>2\<close>, \<open>3\<close> and the general case.\<close>
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
   109
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
   110
lemma sum_of_2_powers: "(\<Sum>i=0..<n. 2^i) = 2^n - (1::nat)"
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
   111
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
   112
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15114
diff changeset
   113
lemma sum_of_3_powers: "2 * (\<Sum>i=0..<n. 3^i) = 3^n - (1::nat)"
16993
wenzelm
parents: 16593
diff changeset
   114
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
   115
64974
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
   116
lemma sum_of_powers: "0 < k \<Longrightarrow> (k - 1) * (\<Sum>i=0..<n. k^i) = k^n - 1"
d0e55f85fd8a misc tuning and modernization;
wenzelm
parents: 63680
diff changeset
   117
  for k :: nat
16993
wenzelm
parents: 16593
diff changeset
   118
  by (induct n) auto
11024
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
   119
23bf8d787b04 converted to new-style theories;
wenzelm
parents: 8944
diff changeset
   120
end