1kill (all);
2done;
3
4(assume_pos_save: assume_pos, assume_pos: true);
5true;
6
7/* Known failure: concat (q, k) => gensym
8 */
9sum (concat (q, k), k, a, b);
10(b - a + 1) * qk;
11
12/* Known failure: concat (q, k) => gensym
13 */
14product (concat (q, k), k, a, b);
15qk ^ (b - a + 1);
16
17/* Known failure: causes asksign to ask an unanswerable question about index variable;
18 * this is a bug in integrate and/or asksign.
19(assume (b > 0, a > 0, b > a), sum (integrate (1/x^k, x, a, b), k, 1, n));
20integrate (1/x, x, a, b) + sum (integrate (1/x^k, x, a, b), k, 2, n);
21 */
22
23/* Known failure: causes asksign to ask an unanswerable question about index variable;
24 * this is a bug in integrate and/or asksign.
25product (integrate (1/x^k, x, a, b), k, 1, n);
26integrate (1/x, x, a, b) * product (integrate (1/x^k, x, a, b), k, 2, n);
27 */
28
29block ([prederror: false], sum(if k < 1 then a else b,k,0,n));
30'( 'sum(if k < 1 then a else b,k,0,n));
31
32/* see SF bug report # 625278 */
33
34'sum(binomial(2,2-k)-binomial(2,1-k),k,1,2),simpsum;
352;
36
37'sum(binomial(2,2-k)-binomial(2,1-k),k,1,2),sum;
382;
39
40'sum(binomial(x,2-k)-binomial(x,1-k),k,1,2),simpsum;
41x;
42
43'sum(binomial(x,2-k)-binomial(x,1-k),k,1,2),sum;
44x;
45
46sum (f(k) + 1, k, 1, n), simpsum;
47n + 'sum (f(k), k, 1, n);
48
49/* further examples in the same vein: part of summand depends on index, part doesn't. */
50
51sum (sin(g(j)) - %pi^j + cos(h(k)) - %e^l, j, 1, m), simpsum;
52m*cos(h(k)) - m*%e^l + sum (sin(g(j)), j, 1, m) - ((%pi^(m + 1) - %pi)/(%pi - 1));
53
54sum (sum (f(j) + g(k), j, 1, m), k, 1, n), simpsum;
55m * 'sum (g(k), k, 1, n) + n * 'sum (f(j), j, 1, m);
56
57sum (sum (f(j) + g(k) - %pi^l + 2, j, 1, m), k, 1, n), simpsum;
58m * 'sum (g(k), k, 1, n) + n * 'sum (f(j), j, 1, m) - m*n*%pi^l + 2*m*n;
59
60sum (sum (sum (%pi + %phi - 1, i, 1, n_i), j, 1, n_j), k, 1, n_k);
61n_i * n_j * n_k * (%pi + %phi - 1);
62
63sum (sum (sum (f(%pi, i) + g(%phi, j) - h(k), i, 1, n_i), j, 1, n_j), k, 1, n_k);
64'sum ('sum ('sum (f(%pi, i) + g(%phi, j) - h(k), i, 1, n_i), j, 1, n_j), k, 1, n_k);
65
66/* see SF bug report # 649428 */
67
68(factsum3 (mt, ej) := sum ((-1)^(k + 1)/(k*mt^k)*sum((1 - l)^k - l^k, l, 1, ej),k,1,inf), t% : taylor (factsum3 (mt, ej), [mt, 0, 3, asymp]));
69'sum(1-2*l,l,1,ej)/mt-('sum(1-2*l,l,1,ej)/(2*mt^2))+'sum(-2*l^3+3*l^2-3*l+1,l,1,ej)/(3*mt^3);
70
71%, simpsum, ratsimp;
72-((6*ej^2*mt^2-3*ej^2*mt+ej^4+ej^2)/(6*mt^3));
73
74/* Known failure: interaction of taylor and simpsum
75 */
76taylor (factsum3 (mt, ej), [mt, 0, 3, asymp]), simpsum;
77-(6*ej^2*mt^2-3*ej^2*mt+ej^4+ej^2)/(6*mt^3);
78
79/* see SF bug report # 740134 */
80
81(foo: i^2, [sum ('foo, i, 0, 2), sum (foo, i, 0, 2), sum (foo, i, 0, n)]);
82[3*foo, 5, 'sum (i^2, i, 0, n)];
83
84/* summand is a function which has a side effect --
85 * outcome here differs from recommendation by Stavros in 740134
86 */
87block ([L:[]], f(i) := (L: append (L, [i]), i), S: sum (f (i), i, 1, 3), [S, L]);
88[6, [1, 2, 3]];
89
90sum (integrate (x^i ,x), i, 0, 2);
91x^3/3 + x^2/2 + x;
92
93sum (integrate (1/(x^i + 1), x), i, 0, 1);
94log(x+1) + x/2;
95
96(f[i](x) := x^i, g[i](x) := x^i, h[i](x) := x^i, 0);
970;
98
99(f[i], g[i](t), 0);
1000;
101
102sum (f[i](x), i, 0, n);
103'sum (x^i, i, 0, n);
104
105sum (g[i](x), i, 0, n);
106'sum (x^i, i, 0, n);
107
108sum (h[i](x), i, 0, n);
109'sum (x^i, i, 0, n);
110
111/* see SF bug report # 817521 */
112
113(kill (foo), foo (n):= block([aaa,m], modedeclare([m,n], fixnum), m:n, [ aaa[1], aaa[n], aaa[m], aaa[1]+aaa[2], sum(aaa[i],i,1,m) ] ), foo (2));
114[aaa[1],aaa[2],aaa[2],aaa[2]+aaa[1], aaa[2]+aaa[1]];
115
116(translate(foo), 0);
1170;
118
119foo (2);
120[aaa[1],aaa[2],aaa[2],aaa[2]+aaa[1], aaa[2]+aaa[1]];
121
122/* see SF bug report # 851765 */
123
124(apply (forget, facts ()), assume (i >= a), sum (i, i, a, b), facts ());
125[i >= a];
126
127is (i >= a);
128true;
129
130(assume (i < 0), sum (abs (i), i, 1, a));
131'sum (i, i, 1, a);
132
133(apply (forget, facts ()), 0);
1340;
135
136/* see SF bug report # 1007094 */
137
138(u: 'sum((-1/(8*i+6)-1/(8*i+5)-2/(8*i+4)+4/ (8*i+1))/16^i,i,1,a), 0);
1390;
140
141u, a=2, simpsum;
1421618091/196035840;
143
144%, numer;
1450.0082540570132481894$
146
147u, a=2, simpsum, numer;
1480.0082540570132481911$
149
150u, a=2, simpsum, bfloat;
1518.25405701324819B-3;
152
153/* see SF bug report # 1192935 */
154
155(f(x) := x^2, b: 1/10, Ak: b*f(k*b), sum (Ak, k, 0, 9));
15657/200;
157
158/* When A(k) is defined as A(k) := b*f(k*b) instead of define(A(k), b*f(k*b)),
159 * A(k) evaluates to k^2/n^3 even if n is bound to something;
160 * this is a consequence of Maxima's evaluation policies:
161 * rhs of := is not evaluated, and variables (b in this case)
162 * are evaluated just once.
163 */
164(b:1/n, define (A(k), b*f(k*b)), A(k));
165k^2/n^3;
166
167sum (A(k), k, 0, n-1);
168('sum (k^2, k, 0, n-1))/n^3;
169
170sum (A(k), k, 0, n-1), simpsum;
171(n+2*(n-1)^3+3*(n-1)^2-1)/(6*n^3);
172
173[''%, sum (A(k), k, 0, n-1)], n=10;
174[57/200, 57/200];
175
176(B(k) := k*f(k*b), B(k));
177k^3/n^2;
178
179sum (B(k), k, 0, n-1), simpsum;
180((n-1)^4 + 2*(n-1)^3 + (n-1)^2) / (4*n^2);
181
182/* see SF bug report # 1363411 */
183
184(kill (f), 'sum(1+f(k),k,1,2)), simpsum;
1852 + f(1) + f(2);
186
187is(equal(block([gcd:subres], ratsimp((-x^3+1)/(2*x^5+2) + (-sqrt(5)+5)/(20*x^2+(-10*sqrt(5)-10)*x+20))),
188         block([gcd:spmod],  ratsimp((-x^3+1)/(2*x^5+2) + (-sqrt(5)+5)/(20*x^2+(-10*sqrt(5)-10)*x+20)))));
189true;
190
191/* General tests from here on */
192
193sum (x, x, p, p + 2);
194p + (p + 1) + (p + 2);
195
196product (x, x, p, p + 2);
197p * (p + 1) * (p + 2);
198
199sum (x, x, %i, %i + 2);
200%i + (%i + 1) + (%i + 2);
201
202product (x, x, %i, %i + 2);
203%i * (%i + 1) * (%i + 2);
204
205sum (imagpart (1 + %i*k), k, 1, n), simpsum;
206(n^2 + n)/2;
207
208product (imagpart (1 + %i*k), k, 1, n), simpproduct;
209n!;
210
211(g(x) := q(x^2), sum (g(k), k, 1, n));
212'sum (q (k^2), k, 1, n);
213
214(g(x) := q(x^2), product (g(k), k, 1, n));
215'product (q (k^2), k, 1, n);
216
217sum (integrate (x^k, x, 0, 1), k, 1, n);
218'sum (1/(k + 1), k, 1, n);
219
220product (integrate (x^k, x, 0, 1), k, 1, n);
221'product (1/(k + 1), k, 1, n);
222
223(kill(b), sum ('concat (q, k), k, a, b));
224'sum ('concat (q, k), k, a, b);
225
226sum ('concat (q, k), k, a, b), nouns, a=1, b=5;
227q5 + q4 + q3 + q2 + q1;
228
229product ('concat (q, k), k, a, b);
230'product ('concat (q, k), k, a, b);
231
232product ('concat (q, k), k, a, b), nouns, a=1, b=5;
233q5 * q4 * q3 * q2 * q1;
234
235(assume (n>= 1), sum (if k <= n then a else b, k, 1, n));
236a * n$
237
238product (if k <= n then a else b, k, 1, n);
239a ^ n$
240
241sum (sin (%pi * k), k, 0, nn);
2420$
243
244product (cos (2 * %pi * k), k, 0, nn);
2451$
246
247sum (lambda ([x], x^i), i, 1, 3);
248lambda ([x], x) + lambda ([x], x^2) + lambda ([x], x^3);
249
250sum (k: k^2, k, 1, 3);
25114;
252
253sum (a, k, inf, minf);
2540;
255
256(assume (i < 0, j < 0, n > 0), sum(sum(abs(i) + abs(j),i,1,j),j,1,n));
257'sum ('sum (i + j, i, 1, j), j, 1, n);
258
259sum (sum (sqrt (i + j), i, 1, j), j, 1, n), simpsum;
260'sum ('sum (sqrt (i + j), i, 1, j), j, 1, n);
261
262sum (1/k, k, rat(1), rat(n));
263'sum (1/k, k, 1, n);
264
265sum (taylor (x^i, x, 0, 5), i, 0, 5);
266''(taylor (x^5 + x^4 + x^3 + x^2 + x + 1,x,0,5));
267
268(i: 888, sum (lambda ([i], i^2), i, 1, 3));
2693 * lambda ([i], i^2);
270
271sum (lambda ([i], i^2), i, 1, n);
272n * lambda ([i], i^2);
273
274(f(x) := sum (x, i, 1, 3), f(-x));
275-3*x;
276
277(ak : k^2,  g(a,n) := sum(a,k,1,n), g(ak, 5));
27855;
279
280(translate (g), g(ak,5));
28155;
282
283sum (integrate (x^i, x), i, 0, n);
284'sum (x^(i+1) / (i+1), i, 0, n);
285
286(assume (k < 0), assume (0 < n, m > n), sum (sqrt (k^2), k, n, m));
287'sum (k, k, n, m);
288
289(assume (i >= n_1, i <= n_2), sum (z(i), i, n_1, n_2));
290'sum (z(i), i, n_1, n_2);
291
292block ([prederror: false], [is (i >= n_1), is (i <= n_2)]);
293[true, true];
294
295/* some examples adapted from describe("sum") */
296
297(old_facts: facts (), foo: 42, bar: 12 + exp(7), baz: 1/quux, 0);
2980;
299
300sum (foo^2, foo, 1, 7);
301140;
302
303sum (aa[bar], bar, 1, 7);
304aa[7] + aa[6] + aa[5] + aa[4] + aa[3] + aa[2] + aa[1];
305
306sum (aa(baz), baz, 1, 7);
307aa(7) + aa(6) + aa(5) + aa(4) + aa(3) + aa(2) + aa(1);
308
309sum (aa(foo), foo, 1, n);
310'sum (aa(foo), foo, 1, n);
311
312sum (2^bar + bar^2, bar, 0, n), simpsum;
3132^(n + 1) + (2*n^3 + 3*n^2 + n)/6 - 1;
314
315sum (1/3^baz, baz, 1, inf), simpsum;
3161/2;
317
318sum (foo^2, foo, 1, 4) * sum (1/foo^2, foo, 1, inf), simpsum;
3195*%pi^2;
320
321(gg(bar) := 1/bar^2, sum (gg(bar)^2, bar, 1, inf));
322sum (1/bar^4, bar, 1, inf);
323
324sum (gg(baz)^2, baz, 1, inf), simpsum;
325%pi^4/90;
326
327[is (foo = 42), is (bar = 12 + exp(7)), is (baz = 1/quux)];
328[true, true, true];
329
330(new_facts: facts(), is (sort (old_facts) = sort (new_facts)));
331true;
332
333/* redo all of the tests, this time with product */
334
335product (lambda ([x], x^i), i, 1, 3);
336lambda ([x], x) * lambda ([x], x^2) * lambda ([x], x^3);
337
338product (k: k^2, k, 1, 3);
33936;
340
341product (a, k, inf, minf);
3421;
343
344(assume (i < 0, j < 0, n > 0), product(product(abs(i) + abs(j),i,1,j),j,1,n));
345'product ('product (i + j, i, 1, j), j, 1, n);
346
347product (1/k, k, rat(1), rat(n));
348'product (1/k, k, 1, n);
349
350product (taylor (x^i, x, 0, 5), i, 0, 5);
351''(taylor (x^15,x,0,15));
352
353(i: 888, product (lambda ([i], i^2), i, 1, 3));
354(lambda ([i], i^2))^3;
355
356product (lambda ([i], i^2), i, 1, n);
357lambda([i],i^2)^n;
358
359(f(x) := product (x, i, 1, 3), f(-x));
360-x^3;
361
362(f(x) := x^2, b: 1/10, Ak: b*f(k*b), product (Ak, k, 1, 9));
363(9!)^2/1000^9;
364
365(A(k) := k*f(k*b), b:1/n, A(k));
366k^3/n^2;
367
368product (A(k), k, 0, n-1);
369('product (k^3/n^2, k, 0, n-1));
370
371(assume (n > 0, m > n), ev (product (k, k, n, m), simpproduct));
372m!/(n - 1)!;
373
374(ak : k^2,  g(a,n) := product(a,k,1,n), g(ak, 5));
375(5!)^2;
376
377(translate (g), g(ak,5));
378(5!)^2;
379
380/* multiplicand is a function which has a side effect */
381
382block ([L:[]], f(i) := (L: append (L, [i]), i), S: product (f (i), i, 1, 3), [S, L]);
383[6, [1, 2, 3]];
384
385product (integrate (x^i ,x), i, 0, 2);
386x^3/3 * x^2/2 * x;
387
388product (integrate (1/(x^i + 1), x), i, 0, 1);
389log(x+1) * x/2;
390
391(f[i](x) := x^i, g[i](x) := x^i, h[i](x) := x^i, 0);
3920;
393
394/* reference f[i] and g[i] -- see 740134 for the effect this has on previous defn of sum */
395
396(f[i], g[i](t), 0);
3970;
398
399product (f[i](x), i, 0, n);
400'product (x^i, i, 0, n);
401
402product (g[i](x), i, 0, n);
403'product (x^i, i, 0, n);
404
405product (h[i](x), i, 0, n);
406'product (x^i, i, 0, n);
407
408product (integrate (x^i, x), i, 0, n);
409'product (x^(i+1) / (i+1), i, 0, n);
410
411(assume (k < 0), assume (0 < n, m > n), ev (product (sqrt (k^2), k, n, m), simpproduct));
412m!/(n - 1)!;
413
414(assume (i >= n_1, i <= n_2), product (z(i), i, n_1, n_2));
415'product (z(i), i, n_1, n_2);
416
417block ([prederror: false], [is (i >= n_1), is (i <= n_2)]);
418[true, true];
419
420/* some examples adapted from describe("sum") */
421
422(old_facts: facts (), foo: 42, bar: 12 + exp(7), baz: 1/quux, 0);
4230;
424
425product (foo^2, foo, 1, 7);
426(7!)^2;
427
428product (aa[bar], bar, 1, 7);
429aa[7] * aa[6] * aa[5] * aa[4] * aa[3] * aa[2] * aa[1];
430
431product (aa(baz), baz, 1, 7);
432aa(7) * aa(6) * aa(5) * aa(4) * aa(3) * aa(2) * aa(1);
433
434product (aa(foo), foo, 1, n);
435product (aa(foo), foo, 1, n);
436
437product (2^bar + bar^2, bar, 0, n), simpsum;
438product (2^bar + bar^2, bar, 0, n);
439
440product (1/3^baz, baz, 1, inf), simpsum;
441product (1/3^baz, baz, 1, inf);
442
443product (foo^2, foo, 1, 4) * product (1/foo^2, foo, 1, inf), simpsum;
444(4!)^2 * 'product (1/'foo^2, 'foo, 1, inf);
445
446(gg(bar) := 1/bar^2, product (gg(bar)^2, bar, 1, inf));
447'product (1/'bar^4, 'bar, 1, inf);
448
449product (gg(baz)^2, baz, 1, inf), simpsum;
450'product (1/'baz^4, 'baz, 1, inf);
451
452[is (foo = 42), is (bar = 12 + exp(7)), is (baz = 1/quux)];
453[true, true, true];
454
455(new_facts: facts(), is (sort (old_facts) = sort (new_facts)));
456true;
457
458/*---- new tests from bw ------*/
459
460sum(0,i,a,b);
4610$
462
463sum(0,i,minf,inf);
4640$
465
466sum(0,i,42,inf);
4670$
468
469sum(sqrt(3),i,0,inf);
470inf$
471
472sum(sqrt(3),i,-1932,inf);
473inf$
474
475sum(5,i,minf, inf);
476inf$
477
478sum(-sqrt(3),i,0,inf);
479minf$
480
481sum(sqrt(3),i,1,3);
4823 * sqrt(3)$
483
484sum(sqrt(3),i,-1,1);
4853 * sqrt(3)$
486
487sum(p(i + 1) - p(i),i,1,5);
488p(6) - p(1)$
489
490product(1,i,a,b);
4911$
492
493product(1,i,minf,inf);
4941$
495
496product(1,i,-42,inf);
4971$
498
499product(%pi,i,1,3);
500%pi^3$
501
502product(%pi,i,-1,1);
503%pi^3$
504
505product(%pi,i,0,inf);
506inf$
507
508product(%pi - 3,i,0,inf);
5090$
510
511product(%pi - 3,i,minf,inf);
5120$
513
514product(-%pi,i,0,inf);
515infinity$
516
517product(0,i,0,n);
5180$
519
520product(-%pi,i,minf,inf);
521infinity$
522
523product((1 + %i)/sqrt(2),k,1,inf);
524und$
525
526product(-1,k,1,inf);
527und$
528
529product(a,i,0,inf);
530'product(a,i,0,inf);
531
532product(p(i + 1) / p(i),i,1,5);
533p(6) / p(1)$
534
535sum(lambda([x],x^i),i,1,3);
536lambda([x],x) + lambda([x],x^2) + lambda([x],x^3);
537
538product(lambda([x],x^i),i,1,3);
539lambda([x],x) * lambda([x],x^2) * lambda([x],x^3);
540
541sum([1,k],k,1,5);
542[5,15];
543
544sum([1,k],k,1,n),simpsum;
545[n, (n^2 + n)/2];
546
547(old_facts : facts(),0);
5480$
549
550errcatch(sum(1/k,k,-1,1));
551[];
552
553(new_facts: facts(), is (sort (old_facts) = sort (new_facts)));
554true;
555
556(old_facts : facts(),0);
5570$
558
559errcatch(product(1/k,k,-1,1));
560[];
561
562(new_facts: facts(), is (sort (old_facts) = sort (new_facts)));
563true;
564
565sum(diff(log(x),x,k),k,1,2);
5661/x - 1/x^2$
567
568product(diff(log(x),x,k),k,1,2);
569-1/x^3;
570
571sum(x^k * at(diff(sin(x),x,k)/k!,x=0),k,0,5) - taylor(sin(x),x,0,5);
572''(taylor(0,x,0,5));
573
574product(%i-x,k,1,inf);
575'product(%i-x,k,1,inf);
576
577sum(%i,k,0,-1);
5780$
579
580sum(%i,k,inf,minf);
5810$
582
583sum(%i,k, 0, minf);
5840$
585
586product(%i,k,0,-1);
5871$
588
589product(%i,k,inf,minf);
5901$
591
592product(%i,k, 0, minf);
5931$
594
595sum(p,p,p,p);
596p$
597
598product(p,p,p,p);
599p$
600
601sum(k,k,p,p+1);
6022*p+1$
603
604sum(k,k,p,p-1);
6050$
606
607sum(k,k,%i,%i+1);
6082*%i + 1$
609
610product(k,k,%i,%i+1);
611%i * (%i + 1)$
612
613product(k,k,p,p+1);
614p*(p+1)$
615
616product(k,k,p,p-1);
6171$
618
619sum(k,k,1,entier(4/3));
6201$
621
622sum(k,k,entier(4/3),1);
6231$
624
625sum(a,k,entier(4/3),entier(5/2));
6262*a$
627
628product(k,k,1,entier(4/3));
6291$
630
631product(k,k,entier(4/3),1);
6321$
633
634product(a,k,entier(4/3),entier(5/2));
635a^2$
636
637sum(q(k),k,n^2 + 1,-n^2 - 1); /* It's an empty sum */
6380$
639
640product(q(k),k,n^2 + 1,-n^2 - 1);
6411$
642
643sum(concat(q,k),k,1,3);
644q1 + q2 + q3$
645
646(s : sum('concat(q,k),k,1,n),0);
6470$
648
649(s : subst(n=3,s), ev(s,nouns));
650q1 + q2 + q3$
651
652sum(product(concat(q,i),i,1,j),j,1,3);
653q1 + q1 * q2 + q1 * q2 * q3$
654
655product(concat(q,k),k,1,3);
656q1 * q2 * q3$
657
658(s : product('concat(q,k),k,1,n),0);
6590$
660
661(s : subst(n=3,s), ev(s,nouns));
662q1 * q2 * q3$
663
664(a : k^2,0);
6650$
666
667sum(realpart(a + %i * k),k,1,3);
66814$
669
670(assume(k < 0),0);
6710$
672
673sum(sum(abs(k),k,1,n),n,1,m);
674sum(sum(k,k,1,n),n,1,m)$
675
676sum(sum(k,k,1,i),i,1,n),simpsum,ratsimp;
677''(ratsimp(n^3/6+n^2/2+n/3))$
678
679sum(sum(abs(k),k,1,n) + sum(abs(k),k,1,n),n,1,m);
6802 * sum(sum(k,k,1,n),n,1,m)$
681
682(forget(k < 0),0);
6830$
684
685(remvalue(a,b),0);
6860$
687
688sum(if k < 1 then a else b,k,0,2);
689a + 2*b$
690
691block ([prederror : true], sum(if k < 1 then a else b,k,0,2));
692a + 2*b$
693
694sum(1/3^k,k,1,inf),simpsum;
6951/2$
696
697sum(3^-i,i,1,inf),simpsum;
6981/2$
699
700(kill(x), assume(abs(x)-1 < 0));
701[abs(x) < 1];
702
703sum(x^k,k,0,inf),simpsum;
7041/(1-x)$
705
706(forget(abs(x) - 1 < 0),0);
7070$
708
709/*--- A few challenging sums ----*/
710
711(assume (n >= 1), sum (if k <= n then a else b, k, 1, n));
712a * n$
713
714(declare(nn,integer), sum(sin(%pi * k),k,0,nn));
7150$
716
717sum(sin(x),x,1/2,1/2 + nn);
718'sum(sin(x),x,1/2,1/2 + nn);
719
720remove (nn, integer);
721done;
722
723(assume_pos: assume_pos_save, apply (forget, facts ()), 0);
7240;
725
726nusum ((n - 1)*(n - 1)!, n, 1, n);
727n! - 1;
728
729nusum (n!, n, 1, n);
730'sum (n!, n, 1, n);
731
732nusum ((2*m)!/(m!*(m + 1)!), m, 0, n);
733'sum ((2*m)!/(m!*(m + 1)!), m, 0, n);
734
735
736/*--- A test for sumcontract ---*/
737
738sumcontract(sum(k,k,1,n) + sum(k^2, k, 1, n));
739sum(k^2+k,k,1,n);
740
741/* Bug ID: 2770575 - rtestsum test 226
742 * This test simplifies correctly after revision 1.12 of sumcon.lisp.
743 */
744sumcontract(sum(k, k, 1, n) + sum(k, k, 1, n+1));
745n+2*sum(k,k,1,n)+1;
746
747/* Tests for bug report [ 1497706 ] sum(1/k^2,k,2,inf), simpsum; */
748
749/* sum (1/k^2, ...) not simplified unless specifically requested */
750(sum (1/k^2, k, 1, inf), [op (%%), args (%%)]);
751[''(nounify (sum)), [1/k^2, k, 1, inf]];
752
753sum (1/k^2, k, 1, inf), simpsum;
754%pi^2/6;
755
756/* this is the case cited in the bug report */
757sum (1/k^2, k, 2, inf), simpsum;
758%pi^2/6 - 1;
759
760sum (1/k^2, k, 1, 9);
7619778141/6350400;
762
763sum (1/k^2, k, 10, inf), simpsum;
764%pi^2/6 - 9778141/6350400;
765
766sum (1/k^4, k, 1, 5);
76714001361/12960000;
768
769sum (1/k^4, k, 6, inf), simpsum;
770%pi^4/90 - 14001361/12960000;
771
772sum (1/k^7, k, 1, inf), simpsum;
773zeta (7);
774
775sum (1/k^7, k, 1, 3);
776282251/279936;
777
778sum (1/k^7, k, 4, inf), simpsum;
779zeta (7) - 282251/279936;
780
781/* Tests for bug report [ 1550985 ] niceindices
782 * Test the cases mentioned in the bug report & some others for good measure
783 */
784
785(reset (niceindicespref), 0);
7860;
787
788niceindices (sum (1/kk, kk, 1, n) - sum (1/ii, ii, 1, n));
7890;
790
791niceindices (sum (1/k, k, 1, n) - sum(1/i, i, 1, n));
7920;
793
794niceindices (sum (F(foo), foo, 1, inf));
795'sum (F(i), i, 1, inf);
796
797(niceindicespref : '[foo, bar, baz, quux], 0);
7980;
799
800niceindices (sum (1/kk, kk, 1, n) - sum (1/ii, ii, 1, n));
8010;
802
803niceindices (sum (1/k, k, 1, n) - sum(1/i, i, 1, n));
8040;
805
806niceindices (sum (F(foo), foo, 1, inf));
807'sum (F(foo), foo, 1, inf);
808
809niceindices (product (sum (product (sum (product (m*F(i) + cos(G(j))^k/sin(l), m, 1, n5), l, 1, n4), k, 1, n3), j, 1, n2), i, 1, n1));
810'product ('sum ('product ('sum ('product (foo*F(foo0) + cos(G(quux))^baz/sin(bar), foo, 1, n5), bar, 1, n4), baz, 1, n3), quux, 1, n2), foo0, 1, n1);
811
812niceindices (sum (sum (foo/foo0, foo, 1, n), foo0, 1, m));
813('sum (1/foo, foo, 1, m)) * 'sum (foo, foo, 1, n);
814
815niceindices (sum (sum (1/(foo + foo0), foo, 1, n), foo0, 1, m));
816'sum ('sum (1/(foo + bar), foo, 1, n), bar, 1, m);
817
818(reset (niceindicespref), 0);
8190;
820
821/* Tests for bashindices, which used to not transform all indices in nested
822 * sums and products (only the outermost)
823 */
824
825(reset (gensumnum), 0);
8260;
827
828bashindices (sum (product (sum (F (l, m, n), l, 0, m), m, 0, n), n, 0, N));
829'sum ('product ('sum (F (j1, j2, j3), j1, 0, j2), j2, 0, j3), j3, 0, N);
830
831(reset (gensumnum), 0);
8320;
833
834/* Test for bug report [ 1552710 ] product(sum(f(i),i,1,inf),j,1,inf) => inf (wrong) */
835
836/* Since sum(f(i), i, 1, inf) is free of j, another result
837 * such as limit(sum(f(i), i, 1, inf)^n, n, inf) would be OK, too.
838 * In any event, inf (observed in the bug report) is not OK.
839 */
840(kill(f), block ([x : product (sum (f(i), i, 1, inf), j, 1, inf)], block ([simp : false], is (x = 'product ('sum (f(i), i, 1, inf), j, 1, inf)))));
841
842true;
843
844/* Test for bug reported by Amit Aronovitch to mailing list 2006/01/06
845 */
846
847(kill(f), f(x) := sum (x^n/n!, n, 0, inf), f(2*x));
848'sum (2^n*x^n/n!, n, 0, inf);
849
850
851/* Test for intosum */
852
853intosum(2*sum(k,k,1,inf));
854sum(2*k,k,1,inf);
855
856/* correct a bug in SUBST-IF-NOT-FREEOF (src/asum.lisp):
857 * array flag in CAR was lost before, but it's OK now
858 */
859(kill (a, i), x : a[i], sum (x, i, 1, 3));
860a[1] + a[2] + a[3];
861
862/* Restore treatment of definite summations as it was before summation
863 * revisions of December 2005: simplify definite summation to explicit
864 * sum only if simpsum is true.
865 */
866
867(kill (f), sum (f(i), i, 1, 3));
868f(1) + f(2) + f(3);
869
870'sum (f(i), i, 1, 3);
871'sum (f(i), i, 1, 3);
872
873'sum (f(i), i, 1, 3), simpsum;
874f(1) + f(2) + f(3);
875
876/* (analogous tests for product) */
877
878product (f(i), i, 1, 3);
879f(1)*f(2)*f(3);
880
881'product (f(i), i, 1, 3);
882'product (f(i), i, 1, 3);
883
884'product (f(i), i, 1, 3), simpproduct;
885f(1)*f(2)*f(3);
886
887/* Differentiate wrt a subscripted symbol in a summation.
888 * Should work the same as for an ordinary symbol.
889 */
890(kill (x, a, a1), 0);
8910;
892
893diff ('sum (sin (a1 * x[i]), i, 1, n), a1);
894'sum (x[i] * cos (a1 * x[i]), i, 1, n);
895
896diff ('sum (x[i]^a1, i, 1, n), a1);
897'sum (x[i]^a1 * log(x[i]), i, 1, n);
898
899diff ('sum (sin (a[1] * x[i]), i, 1, n), a[1]);
900'sum (x[i] * cos (a[1] * x[i]), i, 1, n);
901
902diff ('sum (x[i]^a[1], i, 1, n), a[1]);
903'sum (x[i]^a[1] * log(x[i]), i, 1, n);
904
905/* Feature request 1848704: no way to convert log(product(...)) to sum(log(...)...)
906 */
907
908(kill (u, a, x, T), 0);
9090;
910
911log (product (u[k], k, 1, n));
912log (product (u[k], k, 1, n));
913
914log (product (u[k], k, 1, n)), logexpand=true;
915log (product (u[k], k, 1, n));
916
917log (product (u[k], k, 1, n)), logexpand=all;sum (log (u[k]), k, 1, n);
918
919log (product (u[k], k, 1, n)), logexpand=super;
920sum (log (u[k]), k, 1, n);
921
922log (product (a*%e^x(i), i, 1, T));
923log (product (a*%e^x(i), i, 1, T));
924
925log (product (a*%e^x(i), i, 1, T)), logexpand=all;
926/* Yields sum(const + ...) instead of const*T + sum(...)
927 * since sum is not known to be linear by default.
928 * Change this result if default ever changes.
929 */
930sum (log(a) + x(i), i, 1, T);
931
932/* bug reported to mailing list 2008-04-17:
933 * simpsum causes two evaluations of summand, should be only one
934 */
935(bar (x, y) := sum (F (i, x, y), i, 1, n),
936 ev (bar (y, x), simpsum=false));
937'sum (F (i, y, x), i, 1, n);
938
939ev (bar (y, x), simpsum=true);
940'sum (F (i, y, x), i, 1, n);
941
942/* original problem */
943
944(kill (all),
945 geom(x,m,n):= (x^m-x^(n+1))/(1-x),
946 B(s,sp):=-phi[1](s)*phi[1](s+sp)*phi[0](s+sp)/(1-phi[1](s+sp)*phi[0](s +sp))
947 +(1-phi[1](s))*sum((phi[1](s)*phi[0](s))^n*(
948     geom( (phi[0](s+sp)*phi[1](s+sp))/(phi[0](s)*phi[1](s)), 1, n-1 )
949     -phi[1](s+sp)/phi[1](s)
950     *geom((phi[0](s+sp)*phi[1](s+sp))/(phi[0](s)*phi[1](s)), 0, n-1))
951   , n , 1, inf ),
952 A(s):=phi[1](s)*(1+phi[0](s))/(1-phi[1](s)*phi[0](s)),
953 C(s,sp):=A(s+sp)+B(s,sp)+B(sp,s),
954 0);
9550;
956
957(expr_1 : ev (C (s, sp), simpsum=false),
958 expr_2 : ev (C (s, sp), simpsum=true),
959 is (expr_1 = expr_2));
960true;
961
962(expr_1 : ev (C (sp, s), simpsum=false),
963 expr_2 : ev (C (sp, s), simpsum=true),
964 is (expr_1 = expr_2));
965true;
966
967is (sublis ([s=sp, sp=s], C (s, sp)) = C (s, sp)), simpsum;
968true;
969
970is (sublis ([s=sp, sp=s], C (sp, s)) = C (sp, s)), simpsum;
971true;
972
973is (C (sp, s) = C (s, sp)), simpsum;
974true;
975
976/* Tests for fbino in combin.lisp */
977sum(binomial(2*n-k,k), k, 0, n), simpsum;
978fib(2*n+1);
979
980sum(binomial(n-k,k), k, 1, n), simpsum;
981fib(n+1)-1;
982
983(assume(n>1), 0);
9840;
985
986sum(binomial(n-k,k+1), k, 1, n-1), simpsum;
987fib(n+2)-n-1;
988
989sum(binomial(2*n,2*k), k, 0, n), simpsum;
9902^(2*n-1);
991
992sum(binomial(n,2*k+1), k, 0, n), simpsum;
9932^(n-1);
994
995sum(binomial(n,2*k), k, 0, n), simpsum;
9962^(n-1);
997
998sum(binomial(n,2*k), k, 1, n), simpsum;
9992^(n-1)-1;
1000
1001sum(binomial(n+1,k), k, 1, n), simpsum;
10022^(n+1)-2;
1003
1004sum(binomial(n,k), k, -1, n+1), simpsum;
10052^n;
1006
1007sum(binomial(t+i,t),i,0,k), simpsum;
1008binomial(t+k+1,t+1);
1009
1010/* Because of revision 1.43 of csimp2.lisp binomial(x,x) no longer simplifies
1011 * automatically to 1. The sign must be known not be negative.
1012 * Therefore, we add a fact about the sign of t.
1013 */
1014(assume(t>0),done);
1015done;
1016sum(binomial(t+i,t),i,1,k), simpsum;
1017binomial(t+k+1,t+1)-1;
1018(forget(t>0),done);
1019done;
1020
1021sum(binomial(t+i,i),i,0,k), simpsum;
1022binomial(t+k+1,t+1);
1023
1024(forget(n>1), 0);
10250;
1026
1027/* bug in assume database causes trouble for conditional in summation
1028 * see mailing list 2009-07-29 "Fourier Series using fourie.mac"
1029 */
1030
1031/* If ever the assume stuff is revised, this next test can go away.
1032 * It's here to ensure the underlying problem is fixed.
1033 */
1034?dcomp (1, 1.0);
1035zero;
1036
1037(kill (all), assume (xx >= 1), 0);
10380;
1039
1040is (xx > 1);
1041unknown;
1042
1043if xx > 1 then aa else bb;
1044if xx > 1 then aa else bb;
1045
1046sum (if xx > 1 then aa else bb, xx, 1, 3);
10472*aa + bb;
1048
1049foo : 'sum (if xx > 1 then aa else bb, xx, 1, 3);
1050'sum (if xx > 1 then aa else bb, xx, 1, 3);
1051
1052ev (foo, nouns);
10532*aa + bb;
1054
1055foo : sum (if equal (xx, 1) then aa else bb, xx, 1, nn);
1056'sum (if equal (xx, 1) then aa else bb, xx, 1, nn);
1057
1058ev (foo, nouns, nn=3);
1059aa + 2*bb;
1060
1061(reset(assume_pos),1);
10621;
1063