src/ZF/ex/NatSum.ML
author wenzelm
Mon, 22 Oct 2001 17:58:11 +0200
changeset 11879 1a386a1e002c
parent 11316 b4e71bd751e4
permissions -rw-r--r--
javac -depend;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     1
(*  Title:      HOL/ex/NatSum.ML
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     2
    ID:         $Id$
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     3
    Author:     Tobias Nipkow & Lawrence C Paulson
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     4
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     5
Summing natural numbers, squares, cubes, etc.
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     6
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     7
Originally demonstrated permutative rewriting, but add_ac is no longer needed
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     8
  thanks to new simprocs.
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
     9
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    10
Thanks to Sloane's On-Line Encyclopedia of Integer Sequences,
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    11
  http://www.research.att.com/~njas/sequences/
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    12
*)
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    13
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    14
Addsimps [zadd_zmult_distrib, zadd_zmult_distrib2];
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    15
Addsimps [zdiff_zmult_distrib, zdiff_zmult_distrib2];
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    16
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    17
(*The sum of the first n odd numbers equals n squared.*)
11316
b4e71bd751e4 X-symbols for set theory
paulson
parents: 9647
diff changeset
    18
Goal "n \\<in> nat ==> sum (%i. i $+ i $+ #1, n) = $#n $* $#n";
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    19
by (induct_tac "n" 1);
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    20
by Auto_tac;
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    21
qed "sum_of_odds";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    22
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    23
(*The sum of the first n odd squares*)
11316
b4e71bd751e4 X-symbols for set theory
paulson
parents: 9647
diff changeset
    24
Goal "n \\<in> nat ==> #3 $* sum (%i. (i $+ i $+ #1) $* (i $+ i $+ #1), n) = \
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    25
\     $#n $* (#4 $* $#n $* $#n $- #1)";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    26
by (induct_tac "n" 1);
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    27
by Auto_tac;  
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    28
qed "sum_of_odd_squares";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    29
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    30
(*The sum of the first n odd cubes*)
11316
b4e71bd751e4 X-symbols for set theory
paulson
parents: 9647
diff changeset
    31
Goal "n \\<in> nat \
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    32
\     ==> sum (%i. (i $+ i $+ #1) $* (i $+ i $+ #1) $* (i $+ i $+ #1), n) = \
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    33
\         $#n $* $#n $* (#2 $* $#n $* $#n $- #1)";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    34
by (induct_tac "n" 1);
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    35
by Auto_tac;  
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    36
qed "sum_of_odd_cubes";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    37
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    38
(*The sum of the first n positive integers equals n(n+1)/2.*)
11316
b4e71bd751e4 X-symbols for set theory
paulson
parents: 9647
diff changeset
    39
Goal "n \\<in> nat ==> #2 $* sum(%i. i, succ(n)) = $#n $* $#succ(n)";
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    40
by (induct_tac "n" 1);
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    41
by Auto_tac;
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    42
qed "sum_of_naturals";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    43
11316
b4e71bd751e4 X-symbols for set theory
paulson
parents: 9647
diff changeset
    44
Goal "n \\<in> nat ==> #6 $* sum (%i. i$*i, succ(n)) = \
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    45
\                $#n $* ($#n $+ #1) $* (#2 $* $#n $+ #1)";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    46
by (induct_tac "n" 1);
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    47
by Auto_tac;
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    48
qed "sum_of_squares";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    49
11316
b4e71bd751e4 X-symbols for set theory
paulson
parents: 9647
diff changeset
    50
Goal "n \\<in> nat ==> #4 $* sum (%i. i$*i$*i, succ(n)) = \
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    51
\                $#n $* $#n $* ($#n $+ #1) $* ($#n $+ #1)";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    52
by (induct_tac "n" 1);
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    53
by Auto_tac;
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    54
qed "sum_of_cubes";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    55
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    56
(** Sum of fourth powers **)
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    57
11316
b4e71bd751e4 X-symbols for set theory
paulson
parents: 9647
diff changeset
    58
Goal "n \\<in> nat ==> \
9647
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    59
\     #30 $* sum (%i. i$*i$*i$*i, succ(n)) = \
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    60
\     $#n $* ($#n $+ #1) $* (#2 $* $#n $+ #1) $* \
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    61
\     (#3 $* $#n $* $#n $+ #3 $* $#n $- #1)";
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    62
by (induct_tac "n" 1);
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    63
by Auto_tac;
e9623f47275b new example ZF/ex/NatSum
paulson
parents:
diff changeset
    64
qed "sum_of_fourth_powers";