12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271 |
- \documentstyle[11pt,reduce]{article}
- \title{{\tt ZEILBERG}\\
- A Package for the Indefinite\\
- and Definite Summation}
- \date{}
- \author{Wolfram Koepf\\
- Gregor St\"olting \\
- ZIB Berlin \\
- email: {\tt Koepf@ZIB-Berlin.de}
- }
- \begin{document}
- \maketitle
- \newcommand{\N} {{\rm {\mbox{\protect\makebox[.15em][l]{I}N}}}}
- \newcommand{\funkdef}[3]{\left\{\!\!\!\begin{array}{cc}
- #1 & \!\!\!\mbox{\rm{if} $#2$ } \\
- #3 & \!\!\!\mbox{\rm{otherwise}}
- \end{array}
- \right.}
- \section{Introduction}
- This package is a careful implementation of the Gosper%
- \footnote{The {\tt sum} package contains also a partial implementation
- of the Gosper algorithm.}
- and Zeilberger algorithms for indefinite, and definite summation of
- hypergeometric terms, respectively. Further, extensions of these algorithms
- given by the first author are covered. An expression $a_k$ is called a
- {\sl hypergeometric term} (or {\sl closed form}),
- if $a_{k}/a_{k-1}$ is a rational function with respect to $k$.
- Typical hypergeometric terms are ratios of products of powers, factorials,
- $\Gamma$ function terms, binomial coefficients, and shifted factorials
- (Pochhammer symbols) that are integer-linear in their arguments.
- The extensions of Gosper's and Zeilberger's algorithm mentioned
- in particular are valid for ratios of products of powers, factorials,
- $\Gamma$ function terms, binomial coefficients, and shifted factorials
- that are rational-linear in their arguments.
- \section{Gosper Algorithm}
- The Gosper algorithm \cite{Gos} is a {\sl decision procedure}, that
- decides by algebraic calculations whether or not a given hypergeometric term
- $a_k$ has a hypergeometric term antidifference $g_k$, i.\ e.\
- $g_{k}-g_{k-1}=a_k$ with rational $g_k/g_{k-1}$,
- and returns $g_k$ if the procedure is successful, in which
- case we call $a_k$ {\sl Gosper-summable}. Otherwise
- {\sl no hypergeometric term antidifference exists}. Therefore
- if the Gosper algorithm does not return a closed form solution,
- it has {\sl proved} that no such solution exists, an information
- that may be quite useful and important.
- The Gosper algorithm is the discrete analogue of the Risch algorithm
- for integration in terms of elementary functions.
- Any antidifference is uniquely determined up to a constant, and is
- denoted by
- \[
- g_k=\sum\nolimits_k a_k
- \;.
- \]
- Finding $g_k$ given $a_k$ is called {\sl indefinite summation}.
- The antidifference operator $\Sigma$ is the inverse of the downward
- difference operator $\nabla a_k=a_{k}-a_{k-1}$. There is an analogous
- summation theory corresponding to the upward difference operator
- $\Delta a_k=a_{k+1}-a_k$.
- In case, an antidifference $g_k$ of $a_k$ is known, any sum
- \[
- \sum_{k=m}^{n} a_k=g_{n}-g_{m-1}
- \]
- can be easily calculated by an evaluation of $g$ at the boundary points
- like in the integration case. Note, however, that the sum
- \begin{equation}
- \sum_{k=0}^n {{n}\choose{k}}
- \label{eq:nchoosek}
- \end{equation}
- e.\ g.\
- is not of this type since the summand ${{n}\choose{k}}$ depends on the upper
- boundary point $n$ explicitly. This is an example of a definite sum
- that we consider in the next section.
- Our package supports the input of powers ({\tt a\verb+^+k)},
- factorials ({\tt factorial(k)}),
- $\Gamma$ function terms ({\tt gamma(a)}), binomial coefficients
- ({\tt binomial(n,k)}), shifted factorials
- ({\tt pochhammer(a,k)$=a(a+1)\cdots(a+k-1)=\Gamma (a+k)/\Gamma (a)$}), and
- partially products ({\tt prod(f,k,k1,k2)}).
- It takes care of the necessary simplifications, and therefore
- provides you with the solution of the decision problem
- as long as the memory or time requirements are not too high for the
- computer used.
- \section{Zeilberger Algorithm}
- The (fast) Zeilberger algorithm \cite{Zei2}--\cite{Zei3}
- deals with the {\sl definite summation} of
- hypergeometric terms. Zeilberger's paradigm is to find (and return)
- a linear homogeneous recurrence equation with polynomial coefficients
- (called {\sl holonomic equation}) for an {\sl infinite sum}
- \[
- s(n)=\sum_{k=-\infty}^{\infty} f(n,k)
- \;,
- \]
- the summation to be understood over all integers $k$,
- if $f(n,k)$ is a hypergeometric term with respect to both $k$ and $n$.
- The existence of a holonomic recurrence equation for $s(n)$ is then
- generally guaranteed.
- If one is lucky, and the resulting recurrence equation is of first order
- \[
- p(n)\,s(n-1)+q(n)\,s(n)=0
- \quad\quad(p,q\;\mbox{polynomials})
- \;,
- \]
- $s(n)$ turns out to be a hypergeometric term, and a closed form solution
- can be easily established using a suitable initial value, and is
- represented by a ratio of Pochhammer or $\Gamma$ function terms if the
- polynomials $p$, and $q$ can be factored.
- Zeilberger's algorithm does not guarantee to find the holonomic equation
- of lowest order, but often it does.
- If the resulting recurrence equation has order larger than one,
- this information can be used for identification purposes:
- Any other expression satisfying the same recurrence equation, and the same
- initial values, represents the same function.
- Note that a {\sl definite sum} $\sum\limits_{k=m_1}^{m_2} f(n,k)$ is an
- infinite sum if $f(n,k)=0$ for $k<m_1$ and $k>m_2$.
- This is often the case, an example of which is the sum (\ref{eq:nchoosek})
- considered above, for which the hypergeometric recurrence equation
- $2 s(n-1) - s(n) = 0$ is generated by Zeilberger's algorithm, leading
- to the closed form solution $s(n)=2^n$.
- Definite summation is trivial if the corresponding indefinite sum
- is Gosper-summable analogously to the fact that definite integration
- is trivial as soon as an elementary antiderivative is known. If this is
- not the case, the situation is much more difficult, and it is therefore
- quite remarkable and non-obvious
- that Zeilberger's method is just a clever application of Gosper's algorithm.
- Our implementation is mainly based on \cite{Koornwinder} and \cite{Koepf}.
- More examples can be found in \cite{PS}, \cite{Strehl2}, \cite{Wil1},
- and \cite{Wilf} many of which are contained in the test file
- {\tt zeilberg.tst}.
- \section{\REDUCE{} operator {\tt GOSPER}}
- The ZEILBERG package must be loaded by:
- {\small
- \begin{verbatim}
- 1: load zeilberg;
- \end{verbatim}
- }\noindent
- The {\tt gosper} operator is an implementation of the Gosper algorithm.
- \begin{itemize}
- \item
- {\tt gosper(a,k)} determines a closed
- form antidifference. If it does not return a closed form solution, then
- a closed form solution does not exist.
- \item
- {\tt gosper(a,k,m,n)} determines
- \[
- \sum_{k=m}^n a_k
- \]
- using Gosper's algorithm. This is only successful if Gosper's algorithm applies.
- \end{itemize}
- Example:
- {\small
- \begin{verbatim}
- 2: gosper((-1)^(k+1)*(4*k+1)*factorial(2*k)/
- (factorial(k)*4^k*(2*k-1)*factorial(k+1)),k);
- k
- - ( - 1) *factorial(2*k)
- ------------------------------------
- 2*k
- 2 *factorial(k + 1)*factorial(k)
- \end{verbatim}
- }\noindent
- This solves a problem given in SIAM Review (\cite{SR}, Problem 94--2)
- where it was asked to determine the infinite sum
- \[
- S=\lim_{n\rightarrow\infty} S_n
- \;,
- \quad\quad\quad
- S_n=\sum_{k=1}^n
- \frac{(-1)^{k+1}(4k+1)(2k-1)!!}{2^k(2k-1)(k+1)!}
- \;,
- \]
- ($(2k-1)!!=1\cdot 3 \cdots (2k-1)=\frac{(2k)!}{2^k\,k!}$).
- The above calculation shows that the summand is Gosper-summable,
- and the limit $S=1$ is easily established using Stirling's formula.
- The implementation solves further deep and difficult problems some examples of
- which are:%
- {\small
- \begin{verbatim}
- 3: gosper(sub(n=n+1,binomial(n,k)^2/binomial(2*n,n))-
- binomial(n,k)^2/binomial(2*n,n),k);
- 2
- ((binomial(n + 1,k) *binomial(2*n,n)
- 2
- - binomial(2*(n + 1),n + 1)*binomial(n,k) )*(2*k - 3*n - 1)
- 2 3 2
- *(k - n - 1) )/((2*(2*(n + 1) - k)*(2*n + 1)*k - 3*n - 7*n - 5*n
- - 1)*binomial(2*(n + 1),n + 1)*binomial(2*n,n))
- 4: gosper(binomial(k,n),k);
- (k + 1)*binomial(k,n)
- -----------------------
- n + 1
- 5: gosper((-25+15*k+18*k^2-2*k^3-k^4)/
- (-23+479*k+613*k^2+137*k^3+53*k^4+5*k^5+k^6),k);
- 2
- - (2*k - 15*k + 8)*k
- ----------------------------
- 3 2
- 23*(k + 4*k + 27*k + 23)
- \end{verbatim}
- }\noindent
- The Gosper algorithm is not capable to give antidifferences depending
- on the harmonic numbers
- \[
- H_k:=\sum_{j=1}^k\frac{1}{j}
- \;,
- \]
- e.\ g.\ $\sum_k H_k=(k+1)(H_{k+1}-1)$, but, is able to give a proof, instead,
- for the fact that $H_k$ does not possess a closed form evaluation:
- {\small
- \begin{verbatim}
- 6: gosper(1/k,k);
- ***** Gosper algorithm: no closed form solution exists
- \end{verbatim}
- }\noindent
- The following code gives the solution to a summation problem proposed in
- Gosper's original paper \cite{Gos}. Let
- \[
- f_k=\prod_{j=1}^k (a+b\,j+c\,j^2)
- \quad\quad\mbox{and}\quad\quad
- g_k=\prod_{j=1}^k (e+b\,j+c\,j^2)
- \;.
- \]
- Then a closed form solution for
- \[
- \sum\nolimits_k\frac{f_{k-1}}{g_{k}}
- \]
- is found by the definitions
- {\small
- \begin{verbatim}
- 7: operator ff,gg$
- 8: let {ff(~k+~m) => ff(k+m-1)*(c*(k+m)^2+b*(k+m)+a)
- when (fixp(m) and m>0),
- ff(~k+~m) => ff(k+m+1)/(c*(k+m+1)^2+b*(k+m+1)+a)
- when (fixp(m) and m<0)}$
- 9: let {gg(~k+~m) => gg(k+m-1)*(c*(k+m)^2+b*(k+m)+e)
- when (fixp(m) and m>0),
- gg(~k+~m) => gg(k+m+1)/(c*(k+m+1)^2+b*(k+m+1)+e)
- when (fixp(m) and m<0)}$
- \end{verbatim}
- }\noindent
- and the calculation
- {\small
- \begin{verbatim}
- 10: gosper(ff(k-1)/gg(k),k);
- ff(k)
- ---------------
- (a - e)*gg(k)
- 11: clear ff,gg$
- \end{verbatim}
- }\noindent
- Similarly closed form solutions of $\sum\nolimits_k\frac{f_{k-m}}{g_{k}}$
- for positive integers $m$ can be obtained, as well as of
- $\sum_k\frac{f_{k-1}}{g_{k}}$ for
- \[
- f_k=\prod_{j=1}^k (a+b\,j+c\,j^2+d\,j^3)
- \quad\quad\mbox{and}\quad\quad
- g_k=\prod_{j=1}^k (e+b\,j+c\,j^2+d\,j^3)
- \]
- and for analogous expressions of higher degree polynomials.
- \section{\REDUCE{} operator {\tt EXTENDED\_GOSPER}}
- The {\tt extended\verb+_+gosper} operator is an implementation of an extended
- version of Gosper's algorithm given by Koepf \cite{Koepf}.
- \begin{itemize}
- \item
- {\tt extended\verb+_+gosper(a,k)} determines an antidifference $g_k$ of $a_k$
- whenever there is a number $m$ such that $h_{k}-h_{k-m}=a_k$, and $h_k$ is an
- {\sl $m$-fold hypergeometric term}, i.\ e.
- \[
- h_{k}/h_{k-m}\quad\mbox{is a rational function with respect to $k$.}
- \]
- If it does not return a solution, then such a solution does not exist.
- \item
- {\tt extended\verb+_+gosper(a,k,m)}
- determines an {\sl $m$-fold antidifference} $h_k$ of $a_k$,
- i.\ e.\ $h_{k}-h_{k-m}=a_k$, if it is an $m$-fold hypergeometric term.
- \end{itemize}
- Examples:
- {\small
- \begin{verbatim}
- 12: extended_gosper(binomial(k/2,n),k);
- k k - 1
- (k + 2)*binomial(---,n) + (k + 1)*binomial(-------,n)
- 2 2
- -------------------------------------------------------
- 2*(n + 1)
- 13: extended_gosper(k*factorial(k/7),k,7);
- k
- (k + 7)*factorial(---)
- 7
- \end{verbatim}
- }\noindent
- \section{\REDUCE{} operator {\tt SUMRECURSION}}
- The {\tt sumrecursion} operator is an implementation of the (fast)
- Zeilberger algorithm.
- \begin{itemize}
- \item
- {\tt sumrecursion(f,k,n)} determines a holonomic recurrence equation
- for
- \[
- {\tt sum(n)} =\sum\limits_{k=-\infty}^\infty f(n,k)
- \]
- with respect to $n$, applying
- {\tt extended\verb+_+sumrecursion} if necessary,
- see \S~\ref{sec:EXTENDED_SUMRECURSION}.
- The resulting expression equals zero.
- \item
- {\tt sumrecursion(f,k,n,j)} % $(j\in\N)$
- searches for a holonomic recurrence equation of order $j$. This
- operator does not use {\tt extended\verb+_+sumrecursion} automatically.
- Note that if $j$ is too large, the recurrence equation
- may not be unique, and only one particular solution is returned.
- \end{itemize}
- A simple example deals with Equation (\ref{eq:nchoosek})%
- \footnote{Note that with \REDUCE{} Version 3.5 we use the global operator
- {\tt summ} instead of {\tt sum} to denote the sum.}
- {\small
- \begin{verbatim}
- 14: sumrecursion(binomial(n,k),k,n);
- 2*sum(n - 1) - sum(n)
- \end{verbatim}
- }\noindent
- The whole {\sl hypergeometric database} of the {\sl
- Vandermonde, Gau{\ss}, Kummer, Saalsch\"utz, Dixon, Clausen} and {\sl Dougall
- identities} (see \cite{Wilf}), and many more identities (see e.\ g.\
- \cite{Koepf}), can be obtained using {\tt sumrecursion}.
- As examples, we consider the difficult cases of Clausen and Dougall:%
- {\small
- \begin{verbatim}
- 15: summand:=factorial(a+k-1)*factorial(b+k-1)/(factorial(k)*
- factorial(-1/2+a+b+k))*factorial(a+n-k-1)*factorial(b+n-k-1)/
- (factorial(n-k)*factorial(-1/2+a+b+n-k))$
- 16: sumrecursion(summand,k,n);
- (2*a + 2*b + 2*n - 1)*(2*a + 2*b + n - 1)*sum(n)*n
- - 2*(2*a + n - 1)*(a + b + n - 1)*(2*b + n - 1)*sum(n - 1)
- 17: summand:=pochhammer(d,k)*pochhammer(1+d/2,k)*pochhammer(d+b-a,k)*
- pochhammer(d+c-a,k)*pochhammer(1+a-b-c,k)*pochhammer(n+a,k)*
- pochhammer(-n,k)/(factorial(k)*pochhammer(d/2,k)*
- pochhammer(1+a-b,k)*pochhammer(1+a-c,k)*pochhammer(b+c+d-a,k)*
- pochhammer(1+d-a-n,k)*pochhammer(1+d+n,k))$
- 18: sumrecursion(summand,k,n);
- (2*a - b - c - d + n)*(b + n - 1)*(c + n - 1)*(d + n)*sum(n - 1) +
- (a - b - c - d - n + 1)*(a - b + n)*(a - c + n)*(a - d + n - 1)
- *sum(n)
- \end{verbatim}
- }\noindent
- corresponding to the statements
- \[
- _4 F_3\left.
- \!\!
- \left(
- \!\!\!\!
- \begin{array}{c}
- \multicolumn{1}{c}{\begin{array}{c}
- a\;, b\;, 1/2-a-b-n\;, -n
- \end{array}}\\[1mm]
- \multicolumn{1}{c}{\begin{array}{c}
- 1/2+a+b \;, 1-a-n\;, 1-b-n
- \end{array}}\end{array}
- \!\!\!\!
- \right| 1\right)
- =\frac{(2a)_n\,(a+b)_n\,(2b)_n}
- {(2a+2b)_n\,(a)_n\,(b)_n}
- \]
- and
- \[
- _7 F_6\left.
- \!\!
- \left(
- \!\!\!\!
- \begin{array}{c}
- \multicolumn{1}{c}{\begin{array}{c}
- d\;, 1+d/2\;, d+b-a\;, d+c-a\;, 1+a-b-c\;, n+a\;, -n
- \end{array}}\\[1mm]
- \multicolumn{1}{c}{\begin{array}{c}
- d/2\;, 1+a-b\;, 1+a-c\;, b+c+d-a \;, 1+d-a-n\;, 1+d+n
- \end{array}}\end{array}
- \!\!\!\!
- \right| 1\right)
- \]
- \[
- =\frac{(d+1)_n\,(b)_n\,(c)_n\,(1+2\,a-b-c-d)_n}
- {(a-d)_n\,(1+a-b)_n\,(1+a-c)_n\,(b+c+d-a)_n}
- \]
- (compare next section), respectively.
- Other applications of the Zeilberger algorithm are connected with
- the verification of identities. To prove the identity
- \[
- \sum_{k=0}^n
- {{n}\choose{k}}^3
- =
- \sum_{k=0}^n
- {{n}\choose{k}}^2 {{2k}\choose{n}}
- \;,
- \]
- e.\ g., we may prove that both sums satisfy the same recurrence equation
- {\small
- \begin{verbatim}
- 19: sumrecursion(binomial(n,k)^3,k,n);
- 2 2 2
- (7*n - 7*n + 2)*sum(n - 1) + 8*(n - 1) *sum(n - 2) - sum(n)*n
- 20: sumrecursion(binomial(n,k)^2*binomial(2*k,n),k,n);
- 2 2 2
- (7*n - 7*n + 2)*sum(n - 1) + 8*(n - 1) *sum(n - 2) - sum(n)*n
- \end{verbatim}
- }\noindent
- and finally check the initial conditions:
- {\small
- \begin{verbatim}
- 21: sub(n=0,k=0,binomial(n,k)^3);
- 1
- 22: sub(n=0,k=0,binomial(n,k)^2*binomial(2*k,n));
- 1
- 23: sub(n=1,k=0,binomial(n,k)^3)+sub(n=1,k=1,binomial(n,k)^3);
- 2
- 24: sub(n=1,k=0,binomial(n,k)^2*binomial(2*k,n))+
- sub(n=1,k=1,binomial(n,k)^2*binomial(2*k,n));
- 2
- \end{verbatim}
- }\noindent
- \section{\REDUCE{} operator {\tt EXTENDED\_SUMRECURSION}}
- \label{sec:EXTENDED_SUMRECURSION}
- The {\tt extended\verb+_+sumrecursion} operator is an implementation
- of an extension of the (fast) Zeilberger algorithm given by Koepf
- \cite{Koepf}.
- \begin{itemize}
- \item
- {\tt extended\verb+_+sumrecursion(f,k,n,m,l)} determines a holonomic recurrence
- equation for ${\tt sum(n)} =\sum\limits_{k=-\infty}^\infty f(n,k)$
- with respect to $n$ if $f(n,k)$ is an {\sl $(m,l)$-fold hypergeometric term}
- with respect to $(n,k)$, i.\ e.\
- \[
- \frac{F(n,k)}{F(n-m,k)}
- \quad
- \mbox{and}
- \quad
- \frac{F(n,k)}{F(n,k-l)}
- \]
- are rational functions with respect to both $n$ and $k$.
- The resulting expression equals zero.
- \item
- {\tt sumrecursion(f,k,n)} invokes {\tt extended\verb+_+sumrecursion(f,k,n,m,l)}
- with suitable values $m$ and $l$, and covers therefore the extended
- algorithm completely.
- \end{itemize}
- Examples:
- {\small
- \begin{verbatim}
- 25: extended_sumrecursion(binomial(n,k)*binomial(k/2,n),k,n,1,2);
- sum(n - 1) + 2*sum(n)
- \end{verbatim}
- }\noindent
- which can be obtained automatically by
- {\small
- \begin{verbatim}
- 26: sumrecursion(binomial(n,k)*binomial(k/2,n),k,n);
- sum(n - 1) + 2*sum(n)
- \end{verbatim}
- }\noindent
- Similarly, we get
- {\small
- \begin{verbatim}
- 27: extended_sumrecursion(binomial(n/2,k),k,n,2,1);
- 2*sum(n - 2) - sum(n)
- 28: sumrecursion(binomial(n/2,k),k,n);
- 2*sum(n - 2) - sum(n)
- 29: sumrecursion(hyperterm({a,b,a+1/2-b,1+2*a/3,-n},
- {2*a+1-2*b,2*b,2/3*a,1+a+n/2},4,k)/(factorial(n)*2^(-n)/
- factorial(n/2))/hyperterm({a+1,1},{a-b+1,b+1/2},1,n/2),k,n);
- sum(n - 2) - sum(n)
- \end{verbatim}
- }\noindent
- In the last example, the progam chooses $m=2$, and $l=1$ to derive the
- resulting recurrence equation (see \cite{Koepf}, Table 3, (1.3)).
- \section{\REDUCE{} operator {\tt HYPERRECURSION}}
- Sums to which the Zeilberger algorithm applies, in general are
- special cases of the {\sl generalized hypergeometric function}
- \[
- _{p}F_{q}\left.\left(\begin{array}{cccc}
- a_{1},&a_{2},&\cdots,&a_{p}\\
- b_{1},&b_{2},&\cdots,&b_{q}\\
- \end{array}\right| x\right)
- :=
- \sum_{k=0}^\infty \frac
- {(a_{1})_{k}\cdot(a_{2})_{k}\cdots(a_{p})_{k}}
- {(b_{1})_{k}\cdot(b_{2})_{k}\cdots(b_{q})_{k}\,k!}x^{k}
- \label{eq:coefficientformula}
- \]
- with upper parameters $\{a_{1}, a_{2}, \ldots, a_{p}\}$, and lower
- parameters $\{b_{1}, b_{2}, \ldots, b_{q}\}$. If a recursion for a
- generalized hypergeometric function is to be established, you can use
- the following \REDUCE{} operator:
- \begin{itemize}
- \item
- {\tt hyperrecursion(upper,lower,x,n)} determines a holonomic recurrence
- equation with respect to $n$ for
- $_{p}F_{q}\left.\left(\begin{array}{cccc}
- a_{1},&a_{2},&\cdots,&a_{p}\\
- b_{1},&b_{2},&\cdots,&b_{q}\\
- \end{array}\right| x\right)
- $, where {\tt upper}$=\{a_{1}, a_{2}, \ldots, a_{p}\}$
- is the list of upper parameters, and
- {\tt lower}$=\{b_{1}, b_{2}, \ldots, b_{q}\}$
- is the list of lower parameters depending on $n$. If Zeilberger's algorithm
- does not apply, {\tt extended\verb+_+sumrecursion}
- of \S~\ref{sec:EXTENDED_SUMRECURSION} is used.
- \item
- {\tt hyperrecursion(upper,lower,x,n,j)} $(j\in\N)$
- searches only for a holonomic recurrence equation of order $j$. This
- operator does not use {\tt extended\verb+_+sumrecursion} automatically.
- \end{itemize}
- Therefore
- {\small
- \begin{verbatim}
- 30: hyperrecursion({-n,b},{c},1,n);
- (b - c - n + 1)*sum(n - 1) + (c + n - 1)*sum(n)
- \end{verbatim}
- }\noindent
- establishes the Vandermonde identity
- \[
- _2 F_1\left.
- \!\!
- \left(
- \!\!\!\!
- \begin{array}{c}
- \multicolumn{1}{c}{\begin{array}{cc} -n\;, & b \end{array}}\\[1mm]
- \multicolumn{1}{c}{ c}
- \end{array}
- \!\!\!\!
- \right| 1\right)
- =\frac{(c-b)_n}{(c)_n}
- \;,
- \]
- whereas
- {\small
- \begin{verbatim}
- 31: hyperrecursion({d,1+d/2,d+b-a,d+c-a,1+a-b-c,n+a,-n},
- {d/2,1+a-b,1+a-c,b+c+d-a,1+d-a-n,1+d+n},1,n);
- (2*a - b - c - d + n)*(b + n - 1)*(c + n - 1)*(d + n)*sum(n - 1) +
- (a - b - c - d - n + 1)*(a - b + n)*(a - c + n)*(a - d + n - 1)
- *sum(n)
- \end{verbatim}
- }\noindent
- proves Dougall's identity, again.
- If a hypergeometric expression is given in hypergeometric notation, then
- the use of {\tt hyperrecursion} is more natural than the use of
- {\tt sumrecursion}.
- Moreover you may use the \REDUCE{} operator
- \begin{itemize}
- \item
- {\tt hyperterm(upper,lower,x,k)} that yields the hypergeometric term
- \[
- \frac
- {(a_{1})_{k}\cdot(a_{2})_{k}\cdots(a_{p})_{k}}
- {(b_{1})_{k}\cdot(b_{2})_{k}\cdots(b_{q})_{k}\,k!}x^{k}
- \]
- with upper parameters {\tt upper}$=\{a_{1}, a_{2}, \ldots, a_{p}\}$,
- and lower parameters {\tt lower}$=\{b_{1}, b_{2}, \ldots, b_{q}\}$
- \end{itemize}
- in connection with hypergeometric terms.
- The operator {\tt sumrecursion} can also be used to
- obtain three-term recurrence equations for systems of orthogonal polynomials
- with the aid of known hypergeometric representations. By
- (\cite{NSU}, (2.7.11a)), the discrete Krawtchouk polynomials $k_n^{(p)}(x,N)$
- have the hypergeometric representation
- \[
- k_n^{(p)}(x,N)=
- (-1)^n\,p^n\,{{N}\choose{n}}\;
- _2 F_1\left.
- \!\!
- \left(
- \!\!\!\!
- \begin{array}{c}
- \multicolumn{1}{c}{\begin{array}{cc} -n\;, & -x \end{array}}\\[1mm]
- \multicolumn{1}{c}{ -N}
- \end{array}
- \!\!\!\!
- \right| \frac{1}{p}\right)
- \;,
- \]
- and therefore we declare
- {\small
- \begin{verbatim}
- 32: krawtchoukterm:=
- (-1)^n*p^n*binomial(NN,n)*hyperterm({-n,-x},{-NN},1/p,k)$
- \end{verbatim}
- }\noindent
- and get the three three-term recurrence equations
- {\small
- \begin{verbatim}
- 33: sumrecursion(krawtchoukterm,k,n);
- ((2*p - 1)*n - nn*p - 2*p + x + 1)*sum(n - 1)
- - (n - nn - 2)*(p - 1)*sum(n - 2)*p - sum(n)*n
- 34: sumrecursion(krawtchoukterm,k,x);
- (2*(x - 1)*p + n - nn*p - x + 1)*sum(x - 1)
- - ((x - 1) - nn)*sum(x)*p - (p - 1)*(x - 1)*sum(x - 2)
- 35: sumrecursion(krawtchoukterm,k,NN);
- ((p - 2)*nn + n + x + 1)*sum(nn - 1) + (n - nn)*(p - 1)*sum(nn)
- + (nn - x - 1)*sum(nn - 2)
- \end{verbatim}
- }\noindent
- with respect to the parameters $n$, $x$, and $N$ respectively.
- \section{\REDUCE{} operator {\tt HYPERSUM}}
- With the operator {\tt hypersum}, hypergeometric sums are directly
- evaluated in closed form whenever the extended
- Zeilberger algorithm leads to a recurrence equation containing only
- two terms:
- \begin{itemize}
- \item
- {\tt hypersum(upper,lower,x,n)} determines a closed form representation
- for
- $_{p}F_{q}\left.\left(\begin{array}{cccc}
- a_{1},&a_{2},&\cdots,&a_{p}\\
- b_{1},&b_{2},&\cdots,&b_{q}\\
- \end{array}\right| x\right)
- $, where {\tt upper}$=\{a_{1}, a_{2}, \ldots, a_{p}\}$
- is the list of upper parameters, and
- {\tt lower}$=\{b_{1}, b_{2}, \ldots, b_{q}\}$
- is the list of lower parameters depending on $n$. The result is given as a
- hypergeometric term with respect to $n$.
- If the result is a list of length $m$, we call it $m$-{\sl fold symmetric},
- which is to be interpreted as follows:
- Its $j^{th}$ part is the solution valid for all $n$ of the form $n=mk+j-1
- \;(k\in\N_0)$.
- In particular, if the resulting list contains two terms, then
- the first part is the solution for even $n$, and the second part is the
- solution for odd $n$.
- \end{itemize}
- Examples \cite{Koepf}:
- {\small
- \begin{verbatim}
- 36: hypersum({a,1+a/2,c,d,-n},{a/2,1+a-c,1+a-d,1+a+n},1,n);
- pochhammer(a - c - d + 1,n)*pochhammer(a + 1,n)
- -------------------------------------------------
- pochhammer(a - c + 1,n)*pochhammer(a - d + 1,n)
- 37: hypersum({a,1+a/2,d,-n},{a/2,1+a-d,1+a+n},-1,n);
- pochhammer(a + 1,n)
- -------------------------
- pochhammer(a - d + 1,n)
- \end{verbatim}
- }\noindent
- Note that the operator {\tt togamma} converts expressions given in
- factorial-$\Gamma$-binomial-Pochhammer notation
- into a pure $\Gamma$ function representation:
- {\small
- \begin{verbatim}
- 38: togamma(ws);
- gamma(a - d + 1)*gamma(a + n + 1)
- -----------------------------------
- gamma(a - d + n + 1)*gamma(a + 1)
- \end{verbatim}
- }\noindent
- Here are some $m$-fold symmetric results:
- {\small
- \begin{verbatim}
- 39: hypersum({-n,-n,-n},{1,1},1,n);
- n/2 2 n 1 n
- ( - 27) *pochhammer(---,---)*pochhammer(---,---)
- 3 2 3 2
- {----------------------------------------------------,
- n 2
- factorial(---)
- 2
- 0}
- 40: hypersum({-n,n+3*a,a},{3*a/2,(3*a+1)/2},3/4,n);
- 2 n 1 n
- pochhammer(---,---)*pochhammer(---,---)
- 3 3 3 3
- {-----------------------------------------------------,
- 3*a + 2 n 3*a + 1 n
- pochhammer(---------,---)*pochhammer(---------,---)
- 3 3 3 3
- 0,
- 0}
- \end{verbatim}
- }\noindent
- These results correspond to the formulas (compare \cite{Koepf})
- \[
- _3 F_2\left.
- \!\!
- \left(
- \!\!\!\!
- \begin{array}{c}
- \multicolumn{1}{c}{\begin{array}{c}
- -n\;, -n\;, -n
- \end{array}}\\[1mm]
- \multicolumn{1}{c}{\begin{array}{c}
- 1 \;, 1
- \end{array}}\end{array}
- \!\!\!\!
- \right| 1\right)
- =
- \funkdef{0}{n\;\mbox{odd}}{\displaystyle
- \frac{(1/3)_{n/2}\,(2/3)_{n/2}}{(n/2)!^2}\,(-27)^{n/2}
- }
- \]
- and
- \[
- _3 F_2\left.
- \!\!
- \left(
- \!\!\!\!
- \begin{array}{c}
- \multicolumn{1}{c}{\begin{array}{c}
- -n\;, n+3a\;, a
- \end{array}}\\[1mm]
- \multicolumn{1}{c}{\begin{array}{c}
- 3a/2\;,(3a+1)/2
- \end{array}}\end{array}
- \!\!\!\!
- \right| \frac{3}{4}\right)
- =
- \funkdef{0}{n\neq 0 {\mbox{ (mod }} 3)}{\displaystyle
- \frac{(1/3)_{n/3}\,(2/3)_{n/3}}
- {(a+1/3)_{n/3}\,(a+2/3)_{n/3}}
- }
- \!\!\!\!\!\!\!\!.
- \]
- \section{\REDUCE{} operator {\tt SUMTOHYPER}}
- With the operator {\tt sumtohyper}, sums given in
- factorial-$\Gamma$-binomial-Poch\-hammer notation
- are converted into hypergeometric notation.
- \begin{itemize}
- \item
- {\tt sumtohyper(f,k)} determines the hypergeometric representation
- of\linebreak
- $\sum\limits_{k=-\infty}^\infty f_k$, i.\ e.\
- its output is {\tt c*hypergeometric(upper,lower,x)}, corresponding to
- the representation
- \[
- \sum\limits_{k=-\infty}^\infty f_k=c\cdot\;
- _{p}F_{q}\left.\left(\begin{array}{cccc}
- a_{1},&a_{2},&\cdots,&a_{p}\\
- b_{1},&b_{2},&\cdots,&b_{q}\\
- \end{array}\right| x\right)
- \;,
- \]
- where {\tt upper}$=\{a_{1}, a_{2}, \ldots, a_{p}\}$
- and {\tt lower}$=\{b_{1}, b_{2}, \ldots, b_{q}\}$
- are the lists of upper and lower parameters.
- \end{itemize}
- Examples:
- {\small
- \begin{verbatim}
- 41: sumtohyper(binomial(n,k)^3,k);
- hypergeometric({ - n, - n, - n},{1,1},-1)
- 42: sumtohyper(binomial(n,k)/2^n-sub(n=n-1,binomial(n,k)/2^n),k);
- - n + 2 - n
- - hypergeometric({----------, - n,1},{1,------},-1)
- 2 2
- ------------------------------------------------------
- n
- 2
- \end{verbatim}
- }\noindent
- \section{Simplification Operators}
- For the decision that an expression $a_k$ is a hypergeometric term, it is
- necessary to find out whether or not $a_{k}/a_{k-1}$ is a rational
- function with respect to $k$. For the purpose to decide
- whether or not an expression involving powers, factorials,
- $\Gamma$ function terms,
- binomial coefficients, and Pochhammer symbols is a hypergeometric term,
- the following simplification operators can be used:
- \begin{itemize}
- \item
- {\tt simplify\verb+_+gamma(f)} simplifies an expression {\tt f} involving
- only rational, powers and $\Gamma$ function terms according to a recursive
- application of the simplification rule $\Gamma\:(a+1)=a\,\Gamma\:(a)$
- to the expression tree. Since all $\Gamma$ arguments with integer difference
- are transformed, this gives a decision procedure for rationality
- for integer-linear $\Gamma$ term product ratios.
- \item
- {\tt simplify\verb+_+combinatorial(f)} simplifies an expression {\tt f}
- involving powers, factorials, $\Gamma$ function terms,
- binomial coefficients, and Pochhammer symbols by converting
- factorials, binomial coefficients, and Poch\-hammer symbols into
- $\Gamma$ function terms, and applying {\tt simplify\verb+_+gamma} to its
- result. If the output is not rational,
- it is given in terms of $\Gamma$ functions. If you prefer factorials
- you may use
- \item
- {\tt gammatofactorial} (rule) converting $\Gamma$ function terms into
- factorials using $\Gamma\:(x)\rightarrow (x-1)!$.
- \item
- {\tt simplify\verb+_+gamma2(f)}
- uses the duplication formula of the $\Gamma$ function to simplify $f$.
- \item
- {\tt simplify\verb+_+gamman(f,n)}
- uses the multiplication formula of the $\Gamma$ function to simplify $f$.
- \end{itemize}
- The use of {\tt simplify\verb+_+combinatorial(f)} is a safe way to
- decide the rationality for any ratio of products of powers, factorials,
- $\Gamma$ function terms, binomial coefficients, and Pochhammer symbols.
- Example:
- {\small
- \begin{verbatim}
- 43: simplify_combinatorial(sub(k=k+1,krawtchoukterm)/krawtchoukterm);
- (k - n)*(k - x)
- --------------------
- (k - nn)*(k + 1)*p
- \end{verbatim}
- }\noindent
- From this calculation, we see again that the upper parameters of
- the hypergeometric representation of the Krawtchouk polynomials are given by
- $\{-n,-x\}$, its lower parameter is $\{-N\}$, and the argument of the
- hypergeometric function is $1/p$.
- Other examples are
- {\small
- \begin{verbatim}
- 44: simplify_combinatorial(binomial(n,k)/binomial(2*n,k-1));
- gamma( - (k - 2*n - 2))*gamma(n + 1)
- ----------------------------------------
- gamma( - (k - n - 1))*gamma(2*n + 1)*k
- 45: ws where gammatofactorial;
- factorial( - k + 2*n + 1)*factorial(n)
- ----------------------------------------
- factorial( - k + n)*factorial(2*n)*k
- 46: simplify_gamma2(gamma(2*n)/gamma(n));
- 2*n 2*n + 1
- 2 *gamma(---------)
- 2
- -----------------------
- 2*sqrt(pi)
- 47: simplify_gamman(gamma(3*n)/gamma(n),3);
- 3*n 3*n + 2 3*n + 1
- 3 *gamma(---------)*gamma(---------)
- 3 3
- ----------------------------------------
- 2*sqrt(3)*pi
- \end{verbatim}
- }\noindent
- \section{Tracing}
- If you set
- {\small
- \begin{verbatim}
- 48: on zb_trace;
- \end{verbatim}
- }\noindent
- tracing is enabled, and you get intermediate results, see \cite{Koepf}.
- Example for the Gosper algorithm:
- {\small
- \begin{verbatim}
- 49: gosper(pochhammer(k-n,n),k);
- k - 1
- a(k)/a(k-1):= -----------
- k - n - 1
- Gosper algorithm applicable
- p:= 1
- q:= k - 1
- r:= k - n - 1
- degreebound := 0
- 1
- f:= -------
- n + 1
- Gosper algorithm successful
- pochhammer(k - n,n)*k
- -----------------------
- n + 1
- \end{verbatim}
- }\noindent
- \vspace*{3mm}\noindent
- Example for the Zeilberger algorithm:
- \vspace*{3mm}
- {\footnotesize
- \begin{verbatim}
- 50: sumrecursion(binomial(n,k)^2,k,n);
- 2
- n
- F(n,k)/F(n-1,k):= ----------
- 2
- (k - n)
- 2
- (k - n - 1)
- F(n,k)/F(n,k-1):= --------------
- 2
- k
- Zeilberger algorithm applicable
- applying Zeilberger algorithm for order:= 1
- 2 2 2
- p:= zb_sigma(1)*k - 2*zb_sigma(1)*k*n + zb_sigma(1)*n + n
- 2 2
- q:= k - 2*k*n - 2*k + n + 2*n + 1
- 2
- r:= k
- degreebound := 1
- 2*k - 3*n + 2
- f:= ---------------
- n
- 2 2 2 3 2
- - 4*k *n + 2*k + 8*k*n - 4*k*n - 3*n + 2*n
- p:= -------------------------------------------------
- n
- Zeilberger algorithm successful
- 4*sum(n - 1)*n - 2*sum(n - 1) - sum(n)*n
- 51: off zb_trace;
- \end{verbatim}
- }\noindent
- \section{Global Variables and Switches}
- The following global variables and switches can be used in connection with
- the {\tt ZEILBERG} package:
- \begin{itemize}
- \item
- {\tt zb\verb+_+trace}, switch; default setting {\tt off}.
- Turns tracing on and off.
- \item
- {\tt zb\verb+_+direction}, variable; settings: {\tt down}, {\tt up};
- default setting {\tt down}.
- In the case of the Gosper algorithm, either a downward or a forward
- antidifference is calculated, i.\ e., {\tt gosper} finds $g_k$ with either
- \[
- a_k=g_k-g_{k-1}
- \quad\quad\mbox{or}\quad\quad
- a_k=g_{k+1}-g_{k},
- \]
- respectively.
- In the case of the Zeilberger algorithm, either a downward or an upward
- recurrence equation is returned. Example:
- {\small
- \begin{verbatim}
- 52: zb_direction:=up$
- 53: sumrecursion(binomial(n,k)^2,k,n);
- sum(n + 1)*n + sum(n + 1) - 4*sum(n)*n - 2*sum(n)
- 54: zb_direction:=down$
- \end{verbatim}
- }\noindent
- \item
- {\tt zb\verb+_+order}, variable; settings: any nonnegative integer;
- default setting~{\tt 5}.
- Gives the maximal order for the recurrence
- equation that {\tt sumrecursion} searches for.
- \item
- {\tt zb\verb+_+factor}, switch; default setting {\tt on}.
- If {\tt off}, the factorization of the output usually producing nicer results
- is suppressed.
- \item
- {\tt zb\verb+_+proof}, switch; default setting {\tt off}. If {\tt on},
- then several intermediate results are stored in global variables:
- \item
- {\tt gosper\verb+_+representation}, variable; default setting {\tt nil}.
- If a {\tt gosper} command is issued, and if the Gosper algorithm is applicable,
- then the variable {\tt gosper\verb+_+representation} is set to the
- list of polynomials (with respect to $k$) {\tt \{p,q,r,f\}}
- corresponding to the representation
- \[
- \frac{a_k}{a_{k-1}}=\frac{p_k}{p_{k-1}}\,\frac{q_k}{r_k}
- \;,
- \quad\quad\quad
- g_k=\frac{q_{k+1}}{p_k}\,f_k\,a_k
- \;,
- \]
- see \cite{Gos}. Examples:
- {\small
- \begin{verbatim}
- 55: on zb_proof;
- 56: gosper(k*factorial(k),k);
- (k + 1)*factorial(k)
- 57: gosper_representation;
- {k,k,1,1}
- 58: gosper(
- 1/(k+1)*binomial(2*k,k)/(n-k+1)*binomial(2*n-2*k,n-k),k);
- ((2*k - n + 1)*(2*k + 1)*binomial( - 2*(k - n), - (k - n))
- *binomial(2*k,k))/((k + 1)*(n + 2)*(n + 1))
- 59: gosper_representation;
- {1,
- (2*k - 1)*(k - n - 2),
- (2*k - 2*n - 1)*(k + 1),
- - (2*k - n + 1)
- ------------------}
- (n + 2)*(n + 1)
- \end{verbatim}
- }\noindent
- \item
- {\tt zeilberger\verb+_+representation}, variable; default setting {\tt nil}.
- If a {\tt sumrecursion} command is issued, and if the Zeilberger
- algorithm is successful, then the variable
- {\tt zeilberger\verb+_+representation} is set to the final Gosper
- representation used, see \cite{Koornwinder}.
- \end{itemize}
- \section{Messages}
- The following messages may occur:
- \begin{itemize}
- \item
- {\tt ***** Gosper algorithm:\ no closed form solution exists}
- Example input:
- {\tt gosper(factorial(k),k)}.
- \item
- {\tt ***** Gosper algorithm not applicable}
- Example input:
- {\tt gosper(factorial(k/2),k)}.
- The term ratio $a_k/a_{k-1}$ is not rational.
- \item
- {\tt ***** illegal number of arguments}
- Example input:
- {\tt gosper(k)}.
- \item
- {\tt ***** Zeilberger algorithm fails.\ Enlarge zb\verb+_+order}
- Example input:
- {\tt sumrecursion(binomial(n,k)*binomial(6*k,n),k,n)}
- For this example a setting {\tt zb\verb+_+order:=6} is needed.
- \item
- {\tt ***** Zeilberger algorithm not applicable}
- Example input:
- {\tt sumrecursion(binomial(n/2,k),k,n)}
- One of the term ratios $f(n,k)/f(n-1,k)$ or $f(n,k)/f(n,k-1)$
- is not rational.
- \item
- {\tt ***** SOLVE given inconsistent equations}
- You can ignore this message that occurs with Version 3.5.
- \end{itemize}
- \begin{thebibliography}{99}
- \bibitem{Gos}
- Gosper Jr., R.\ W.:
- Decision procedure for indefinite hypergeometric
- summation. Proc.\ Natl.\ Acad.\ Sci.\ USA {\bf 75}, 1978, 40--42.
- \bibitem{Koepf}
- Koepf, W.:
- Algorithms for the indefinite and definite summation.
- Konrad-Zuse-Zentrum Berlin (ZIB), Preprint SC 94-33, 1994.
- \bibitem{Koornwinder}
- Koornwinder, T.\ H.:
- On Zeilberger's algorithm and its $q$-analogue: a rigorous description.
- J.\ of Comput.\ and Appl.\ Math.\ {\bf 48}, 1993, 91--111.
- \bibitem{NSU}
- Nikiforov, A.\ F., Suslov, S.\ K,\ and Uvarov, V.\ B.: {\sl Classical
- orthogonal polynomials of a discrete variable.} Springer-Verlag,
- Berlin--Heidelberg--New York, 1991.
- \bibitem{PS}
- Paule, P.\ and Schorn, M.: A {\sc Mathematica} version of Zeilberger's
- algorithm for proving binomial coefficient identities. J.\ Symbolic
- Computation, 1994, to appear.
- \bibitem{SR}
- Problem 94--2, SIAM Review {\bf 36}, March 1994.
- \bibitem{Strehl2}
- Strehl, V.:
- Binomial sums and identities. Maple Technical Newsletter {\bf 10}, 1993, 37--49.
- \bibitem{Wil1}
- Wilf, H.\ S.:
- {\sl Generatingfunctionology}. Academic Press, Boston, 1990.
- \bibitem{Wilf}
- Wilf, H.\ S.:
- Identities and their computer proofs. ``SPICE'' Lecture Notes,
- August 31--September 2, 1993.
- Anonymous ftp file {\tt pub/wilf/lecnotes.ps} on
- the server {\tt ftp.cis.upenn.edu}.
- \bibitem{Zei2}
- Zeilberger, D.:
- A fast algorithm for proving terminating hypergeometric identities.
- Discrete Math.\ {\bf 80}, 1990, 207--211.
- \bibitem{Zei3}
- Zeilberger, D.:
- The method of creative telescoping.
- J.\ Symbolic Computation {\bf 11}, 1991, 195--204.
- \end{thebibliography}
- \end{document}
|