7 *) |
7 *) |
8 |
8 |
9 val natsum_ss = arith_ss addsimps |
9 val natsum_ss = arith_ss addsimps |
10 ([NatSum.sum_0,NatSum.sum_Suc] @ add_ac); |
10 ([NatSum.sum_0,NatSum.sum_Suc] @ add_ac); |
11 |
11 |
|
12 (*The sum of the first n positive integers equals n(n+1)/2.*) |
12 goal NatSum.thy "Suc(Suc(0))*sum(%i.i,Suc(n)) = n*Suc(n)"; |
13 goal NatSum.thy "Suc(Suc(0))*sum(%i.i,Suc(n)) = n*Suc(n)"; |
13 by (simp_tac natsum_ss 1); |
14 by (simp_tac natsum_ss 1); |
14 by (nat_ind_tac "n" 1); |
15 by (nat_ind_tac "n" 1); |
15 by (simp_tac natsum_ss 1); |
16 by (simp_tac natsum_ss 1); |
16 by (asm_simp_tac natsum_ss 1); |
17 by (asm_simp_tac natsum_ss 1); |
17 result(); |
18 val sum_of_naturals = result(); |
18 |
19 |
19 goal NatSum.thy |
20 goal NatSum.thy |
20 "Suc(Suc(Suc(Suc(Suc(Suc(0))))))*sum(%i.i*i,Suc(n)) = \ |
21 "Suc(Suc(Suc(Suc(Suc(Suc(0))))))*sum(%i.i*i,Suc(n)) = \ |
21 \ n*Suc(n)*Suc(Suc(Suc(0))*n)"; |
22 \ n*Suc(n)*Suc(Suc(Suc(0))*n)"; |
22 by (simp_tac natsum_ss 1); |
23 by (simp_tac natsum_ss 1); |
23 by (nat_ind_tac "n" 1); |
24 by (nat_ind_tac "n" 1); |
24 by (simp_tac natsum_ss 1); |
25 by (simp_tac natsum_ss 1); |
25 by (asm_simp_tac natsum_ss 1); |
26 by (asm_simp_tac natsum_ss 1); |
26 result(); |
27 val sum_of_squares = result(); |
27 |
28 |
28 goal NatSum.thy |
29 goal NatSum.thy |
29 "Suc(Suc(Suc(Suc(0))))*sum(%i.i*i*i,Suc(n)) = n*n*Suc(n)*Suc(n)"; |
30 "Suc(Suc(Suc(Suc(0))))*sum(%i.i*i*i,Suc(n)) = n*n*Suc(n)*Suc(n)"; |
30 by (simp_tac natsum_ss 1); |
31 by (simp_tac natsum_ss 1); |
31 by (nat_ind_tac "n" 1); |
32 by (nat_ind_tac "n" 1); |
32 by (simp_tac natsum_ss 1); |
33 by (simp_tac natsum_ss 1); |
33 by (asm_simp_tac natsum_ss 1); |
34 by (asm_simp_tac natsum_ss 1); |
34 result(); |
35 val sum_of_cubes = result(); |
|
36 |
|
37 (*The sum of the first n odd numbers equals n squared.*) |
|
38 goal NatSum.thy "sum(%i.Suc(i+i), n) = n*n"; |
|
39 by (nat_ind_tac "n" 1); |
|
40 by (simp_tac natsum_ss 1); |
|
41 by (asm_simp_tac natsum_ss 1); |
|
42 val sum_of_odds = result(); |
|
43 |