Re: FullSimplify and HypergeometricPFQ

*To*: mathgroup at smc.vnet.net*Subject*: [mg72629] Re: FullSimplify and HypergeometricPFQ*From*: Paul Abbott <paul at physics.uwa.edu.au>*Date*: Sat, 13 Jan 2007 03:45:41 -0500 (EST)*Organization*: The University of Western Australia*References*: <eljas5$7fu$1@smc.vnet.net> <elotea$pck$1@smc.vnet.net>

In article <elotea$pck$1 at smc.vnet.net>, guy.verhofstadt at gmail.com wrote: > 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 > > http://mathworld.wolfram.com/GeneralizedHypergeometricFunction.html > > 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 http://mathworld.wolfram.com/Saalschuetzian.html 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., http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric3F2 and particularly the case where z == 1. > So what happens under the hood? The required transformation is given at http://functions.wolfram.com/07.27.03.0020.01 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 Begin["System`HypergeometricDump`"] (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 Trace[FunctionExpand[ 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 ?F32 a number of special cases of HypergeometricPFQ are listed, and some of these rules call other rules, such as F32Formula50: ?F32Formula50 If you trace the calls to F32 during the evaluation of your example with k -> 0, that is, Trace[FunctionExpand[ HypergeometricPFQ[{1, s, t}, {s + 1, t + 1}, 1]], F32] you can see which rule was used. Cheers, Paul _______________________________________________________________________ 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) AUSTRALIA http://physics.uwa.edu.au/~paul