1% Test file for the REDUCE package QSUM
2%
3% Copyright (c) Wolfram Koepf, Harald Boeing, Konrad-Zuse-Zentrum Berlin, 1997
4%
5% Implementation of the q-Gosper and q-Zeilberger algorithms
6%
7% Reference:
8%
9% Koornwinder, T. H.:
10% On Zeilberger's algorithm and its q-analogue: a rigorous description.
11% J. of Comput. and Appl. Math. 48, 1993, 91-111.
12%
13% Some examples are from
14%
15% Koekoek, R. and Swarttouw, R.F.:
16% The Askey-scheme of Hypergeometric Orthogonal Polynomials and its q-analogue.
17% Report 94-05, Technische Universiteit Delft, Faculty of Technical Mathematics
18% and Informatics, Delft, 1994.
19%
20% Gasper, G. and Rahman, M.:
21% Basic Hypergeometric Series.
22% Encyclopedia of Mathematics and its Applications 35.
23% Ed. by G.-C. Rota, Cambridge University Press, London and New York, 1990.
24
25
26% Results of manual qsum.tex
27%
28load qsum;
29
30
31qgosper(qpochhammer(a,q,k)*q^k/qpochhammer(q,q,k),q,k);
32
33
34   k
35 (q *a - 1)*qpochhammer(a,q,k)
36-------------------------------
37  (a - 1)*qpochhammer(q,q,k)
38
39qgosper(qpochhammer(a,q,k)*qpochhammer(a*q^2,q^2,k)*
40        qpochhammer(q^(-n),q,k)*q^(n*k)/(qpochhammer(a,q^2,k)*
41        qpochhammer(a*q^(n+1),q,k)*qpochhammer(q,q,k)),q,k);
42
43
44     k*n   k          k    n               1                       2  2
45( - q   *(q *a - 1)*(q  - q )*qpochhammer(----,q,k)*qpochhammer(a*q ,q ,k)
46                                            n
47                                           q
48
49                         2*k          n                   n
50 *qpochhammer(a,q,k))/((q   *a - 1)*(q  - 1)*qpochhammer(q *a*q,q,k)
51
52                   2
53   *qpochhammer(a,q ,k)*qpochhammer(q,q,k))
54
55qgosper(qpochhammer(q^(-n),q,k)*z^k/qpochhammer(q,q,k)*z^n,q,k);
56
57
58***** No q-hypergeometric antidifference exists.
59
60off qgosper_down;
61
62
63qgosper(q^k*qbrackets(k,q),q,k);
64
65
66     k           k
67  - q *(q + 1 - q )*qbrackets(k,q)
68-----------------------------------
69       k
70     (q  - 1)*(q + 1)*(q - 1)
71
72on qgosper_down;
73
74
75qgosper(q^k,q,k,0,n);
76
77
78  n
79 q *q - 1
80----------
81  q - 1
82
83qsumrecursion(qpochhammer(q^(-n),q,k)*z^k/qpochhammer(q,q,k),q,k,n);
84
85
86      n                     n
87 - ((q  - z)*summ(n - 1) - q *summ(n))
88
89on qsumrecursion_certificate;
90
91
92proof:=qsumrecursion(qpochhammer(q^(-n),q,k)*z^k/qpochhammer(q,q,k),q,k,n);
93
94
95                n                     n
96proof := { - ((q  - z)*summ(n - 1) - q *summ(n)),
97
98                k    n
99            - (q  - q )*z
100          ----------------,
101                n
102               q  - 1
103
104            k              1
105           z *qpochhammer(----,q,k)
106                            n
107                           q
108          --------------------------,
109              qpochhammer(q,q,k)
110
111          k,
112
113          downward_antidifference}
114
115off qsumrecursion_certificate;
116
117
118% proof of statement
119lhside:= qsimpcomb(sub(summ(n)=part(proof,3),
120summ(n-1)=sub(n=n-1,part(proof,3)),part(proof,1)));
121
122
123            k   k   n         n                       1
124           z *(q *(q  - z) + q *(z - 1))*qpochhammer(----,q,k)
125                                                       n
126                                                      q
127lhside := -----------------------------------------------------
128                         n
129                       (q  - 1)*qpochhammer(q,q,k)
130
131rhside:= qsimpcomb((part(proof,2)*part(proof,3)-
132sub(k=k-1,part(proof,2)*part(proof,3))));
133
134
135               k    k    n       n   k                    1
136            - z *((q  - q )*z - q *(q  - 1))*qpochhammer(----,q,k)
137                                                           n
138                                                          q
139rhside := ---------------------------------------------------------
140                           n
141                         (q  - 1)*qpochhammer(q,q,k)
142
143qsimpcomb((rhside-lhside)/part(proof,3));
144
145
1460
147
148% proof done
149operator qlaguerre, qcharlier;
150
151
152% q-Laguerre polynomials, Koekoek, Swarttouw (3.21)
153qsumrecursion(qpochhammer(q^(alpha+1),q,n)/qpochhammer(q,q,n),
154   {q^(-n)}, {q^(alpha+1)}, q, -x*q^(n+alpha+1), qlaguerre(n));
155
156
157           n       alpha + n   n
158((q + 1 - q )*q - q         *(q *x + q))*qlaguerre(n - 1)
159
160      alpha + n                           n
161 + ((q          - q)*qlaguerre(n - 2) + (q  - 1)*qlaguerre(n))*q
162
163% q-Charlier polynomials, Koekoek, Swarttouw (3.23)
164qsumrecursion({q^(-n),q^(-x)},{0},q,-q^(n+1)/a,qcharlier(n));
165
166
167      x            n       n       2*n
168 - ((q *((q + 1 - q )*a + q )*q - q   )*qcharlier(n - 1)
169
170        x    n          n
171     + q *((q  + a*q)*(q  - q)*qcharlier(n - 2) - qcharlier(n)*a*q))
172
173% continuous q-Jacobi polynomials, Koekoek, Swarttouw (3.10)
174%% on qsum_nullspace;
175%% term:= qpochhammer(q^(alpha+1),q,n)/qpochhammer(q,q,n)*
176%%    qphihyperterm({q^(-n),q^(n+alpha+beta+1),
177%%    q^(alpha/2+1/4)*exp(I*theta), q^(alpha/2+1/4)*exp(-I*theta)},
178%%    {q^(alpha+1), -q^((alpha+beta+1)/2), -q^((alpha+beta+2)/2)},
179%%     q, q, k)$
180%% qsumrecursion(term,q,k,n,2);
181%% off qsum_nullspace;
182
183
184% Some more qgosper results with proof
185%
186% Gasper, Rahman (2.3.4)
187term:=qpochhammer(a,q,k)*qpochhammer(a*q^2,q^2,k)*qpochhammer(q^(-n),q,k)*
188q^(n*k)/(qpochhammer(a,q^2,k)*qpochhammer(a*q^(n+1),q,k)*qpochhammer(q,q,k));
189
190
191          k*n              1                       2  2
192         q   *qpochhammer(----,q,k)*qpochhammer(a*q ,q ,k)*qpochhammer(a,q,k)
193                            n
194                           q
195term := ----------------------------------------------------------------------
196                         n                         2
197            qpochhammer(q *a*q,q,k)*qpochhammer(a,q ,k)*qpochhammer(q,q,k)
198
199
200result:=qgosper(qpochhammer(a,q,k)*qpochhammer(a*q^2,q^2,k)*
201qpochhammer(q^(-n),q,k)*q^(n*k)/
202(qpochhammer(a,q^2,k)*qpochhammer(a*q^(n+1),q,k)*qpochhammer(q,q,k)),q,k);
203
204
205               k*n   k          k    n               1
206result := ( - q   *(q *a - 1)*(q  - q )*qpochhammer(----,q,k)
207                                                      n
208                                                     q
209
210                           2  2                           2*k          n
211           *qpochhammer(a*q ,q ,k)*qpochhammer(a,q,k))/((q   *a - 1)*(q  - 1)
212
213                           n                         2
214             *qpochhammer(q *a*q,q,k)*qpochhammer(a,q ,k)*qpochhammer(q,q,k))
215
216
217qsimpcomb(result-sub(k=k-1,result)-term);
218
219
2200
221
222
223% Gasper, Rahman (3.8.16)
224term:=(1-a*c*q^(4*k))*(1-b/c*q^(-2*k))*qpochhammer(a,q,k)*qpochhammer(b,q,k)*
225qpochhammer(q^(-3*n),q^3,k)*qpochhammer(a*c^2/b*q^(3*n),q^3,k)*q^(3*k)/
226((1-a*c)*(1-b/c)*qpochhammer(c*q^3,q^3,k)*qpochhammer(a*c/b*q^3,q^3,k)*
227qpochhammer(a*c*q^(3*n+1),q,k)*qpochhammer(b/c*q^(1-3*n),q,k));
228
229
230                          3*n    2
231          k              q   *a*c    3                  1     3
232term := (q *qpochhammer(-----------,q ,k)*qpochhammer(------,q ,k)
233                             b                          3*n
234                                                       q
235
236         *qpochhammer(a,q,k)*qpochhammer(b,q,k)
237
238                                                                       3
239               6*k    2    4*k          2*k                       a*c*q    3
240         *( - q   *a*c  + q   *a*b*c + q   *c - b))/(qpochhammer(--------,q ,k)
241                                                                    b
242
243                          b*q                      3*n
244           *qpochhammer(--------,q,k)*qpochhammer(q   *a*c*q,q,k)
245                          3*n
246                         q   *c
247
248                           3  3                2
249           *qpochhammer(c*q ,q ,k)*(a*b*c - a*c  - b + c))
250
251
252result:=qgosper((1-a*c*q^(4*k))*(1-b/c*q^(-2*k))*qpochhammer(a,q,k)*
253qpochhammer(b,q,k)*qpochhammer(q^(-3*n),q^3,k)*qpochhammer(a*c^2/
254b*q^(3*n),q^3,k)*q^(3*k)/((1-a*c)*(1-b/c)*qpochhammer(c*q^3,q^3,k)*
255qpochhammer(a*c/b*q^3,q^3,k)*qpochhammer(a*c*q^(3*n+1),q,k)*
256qpochhammer(b/c*q^(1-3*n),q,k)),q,k);
257
258
259                3*k + 3*n    2        2*k    k + n    2*n    k          k
260result := ( - (q         *a*c  - b)*(q    + q      + q   )*(q *a - 1)*(q *b - 1)
261
262                                    3*n    2
263              k    n               q   *a*c    3                  1     3
264           *(q  - q )*qpochhammer(-----------,q ,k)*qpochhammer(------,q ,k)
265                                       b                          3*n
266                                                                 q
267
268                                                        3*n
269           *qpochhammer(a,q,k)*qpochhammer(b,q,k)*c)/((q   *a*c - b)
270
271                                                               3
272                3*n                                       a*c*q    3
273             *(q   *c - 1)*(a*c - 1)*(b - c)*qpochhammer(--------,q ,k)
274                                                            b
275
276                            b*q                      3*n
277             *qpochhammer(--------,q,k)*qpochhammer(q   *a*c*q,q,k)
278                            3*n
279                           q   *c
280
281                             3  3
282             *qpochhammer(c*q ,q ,k))
283
284
285qsimpcomb(result-sub(k=k-1,result)-term);
286
287
2880
289
290
291end;
292
293Tested on x86_64-pc-windows CSL
294Time (counter 1): 109 ms
295
296End of Lisp run after 0.10+0.06 seconds
297real 0.32
298user 0.00
299sys 0.06
300