MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: FullSimplify and HypergeometricPFQ

  • To: mathgroup at
  • Subject: [mg72629] Re: FullSimplify and HypergeometricPFQ
  • From: Paul Abbott <paul at>
  • Date: Sat, 13 Jan 2007 03:45:41 -0500 (EST)
  • Organization: The University of Western Australia
  • References: <eljas5$7fu$> <elotea$pck$>

In article <elotea$pck$1 at>, guy.verhofstadt at 

> You were right, FunctionExpand is the one that does most of the work.
> Still, I don't know the answer to my original question. Here is the
> specific problem:
> My all problem boils down to how Mathematica, for this input
> In[1]:= FunctionExpand[HypergeometricPFQ[{1, s,k+t},{s+k+1,1+t},1]]
> returns something that I consider almost a solution:

What do you mean, "almost a solution"?

>           t         s t        Gamma[1 + k + s] Gamma[1 + t]
> Out[1]= ------ + ---------- + -------------------------------
>         -s + t   k (-s + t)   k (s - t) Gamma[s] Gamma[k + t]

> (it probably won't display right)

It displays fine in fixed-width font.

> This is definitely exceptional among the HypergeometricPFQ. There are
> identities that involve them, see for instance
> but none of those matches the simplification that occured above, and
> the mere fact that they are listed separately like this on Mathworld
> should convince anyone who doesn't know about them that this isn't
> common.

I'm not sure what you mean by "uncommon". The function

  HypergeometricPFQ[{1, s, k+t},{s+k+1, 1+t}, 1]

is Saalschützian, see

and this _is_ a common situation. 

Moreover, the ThreeJSymbol and ClebschGordan functions (both built-in to 
Mathematica) are related to special cases of 

  HypergeometricPFQ[{a, b, c},{d, e},1].

There are a large number of identities and transformations for 
HypergeometricPFQ functions. See, e.g.,

and particularly the case where z == 1.

> So what happens under the hood?

The required transformation is given at

Re-writing this identity as a transformation rule, one obtains an 
equivalent solution to that obtained above:

 HypergeometricPFQ[{1, s, k + t}, {k + s + 1, t + 1}, 1] /. 
  HypergeometricPFQ[{1, a_, b_}, {d_, e_}, 1] :> ((a + b - d + 1)*
   (-d + (Gamma[d] Gamma[a + b - d + 1])/(Gamma[a] Gamma[b]) + 1))/
    ((a - d + 1)*(b - d + 1)) /; e == a + b - d + 2

To see more of what happens under the hood, if you do


(to change context) and then

 SetOptions[Trace, TraceInternal -> True]

tracing hypergeometric computations becomes (a little) easier to follow 
(because variables in the "System`HypergeometricDump`" context have 
short names). In the output of

   HypergeometricPFQ[{1, s, k + t}, {k + s + 1, t + 1}, 1]]]

you will see a number of rules being tried, such as F32. If you enter


a number of special cases of HypergeometricPFQ are listed, and some of 
these rules call other rules, such as F32Formula50:


If you trace the calls to F32 during the evaluation of your example with 
k -> 0, that is,

    HypergeometricPFQ[{1, s, t}, {s + 1, t + 1}, 1]], F32]

you can see which rule was used.


Paul Abbott                                      Phone:  61 8 6488 2734
School of Physics, M013                            Fax: +61 8 6488 1014
The University of Western Australia         (CRICOS Provider No 00126G)    

  • Prev by Date: Re: speed of multiplying polynomials
  • Next by Date: Re: Nminimize: Give Initial values to Decision Variables
  • Previous by thread: Re: Re: Re: Re: Re: Limit and Root Objects
  • Next by thread: Re: interpolation of a matrix function