ex/NatSum.ML
changeset 82 0dbbf4426782
parent 65 52771c21d9ca
child 171 16c4ea954511
equal deleted inserted replaced
81:fded09018308 82:0dbbf4426782
     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