login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Changed derivative of abs(x) to
$$
\frac{\overline{x}}{2\ abs(x)}
$$
Added conjugate(x).

\begin{spad} )abbrev package FSPECX FunctionalSpecialFunction )boot $tryRecompileArguments := nil ++ Provides the special functions ++ Author: Manuel Bronstein ++ Date Created: 18 Apr 1989 ++ Date Last Updated: 4 October 1993 ++ Description: Provides some special functions over an integral domain. ++ Keywords: special, function. FunctionalSpecialFunction(R, F) : Exports == Implementation where R : Join(Comparable, IntegralDomain) F : FunctionSpace R

OP ==> BasicOperator K ==> Kernel F SE ==> Symbol SPECIALDIFF ==> '%specialDiff

Exports ==> with belong? : OP -> Boolean ++ belong?(op) is true if op is a special function operator; operator : OP -> OP ++ operator(op) returns a copy of op with the domain-dependent ++ properties appropriate for F; ++ error if op is not a special function operator abs : F -> F ++ abs(f) returns the absolute value operator applied to f conjugate: F -> F ++ conjugate(f) returns the conjugate value operator applied to f Gamma : F -> F ++ Gamma(f) returns the formal Gamma function applied to f Gamma : (F, F) -> F ++ Gamma(a, x) returns the incomplete Gamma function applied to a and x Beta : (F, F) -> F ++ Beta(x, y) returns the beta function applied to x and y digamma : F->F ++ digamma(x) returns the digamma function applied to x polygamma : (F, F) ->F ++ polygamma(x, y) returns the polygamma function applied to x and y besselJ : (F, F) -> F ++ besselJ(x, y) returns the besselj function applied to x and y besselY : (F, F) -> F ++ besselY(x, y) returns the bessely function applied to x and y besselI : (F, F) -> F ++ besselI(x, y) returns the besseli function applied to x and y besselK : (F, F) -> F ++ besselK(x, y) returns the besselk function applied to x and y airyAi : F -> F ++ airyAi(x) returns the Airy Ai function applied to x airyAiPrime : F -> F ++ airyAiPrime(x) returns the derivative of Airy Ai function applied to x airyBi : F -> F ++ airyBi(x) returns the Airy Bi function applied to x airyBiPrime : F -> F ++ airyBiPrime(x) returns the derivative of Airy Bi function applied to x lambertW : F -> F ++ lambertW(x) is the Lambert W function at x polylog : (F, F) -> F ++ polylog(s, x) is the polylogarithm of order s at x weierstrassP : (F, F, F) -> F ++ weierstrassP(g2, g3, x) weierstrassPPrime : (F, F, F) -> F ++ weierstrassPPrime(g2, g3, x) weierstrassSigma : (F, F, F) -> F ++ weierstrassSigma(g2, g3, x) weierstrassZeta : (F, F, F) -> F ++ weierstrassZeta(g2, g3, x) -- weierstrassPInverse : (F, F, F) -> F -- ++ weierstrassPInverse(g2, g3, z) is the inverse of Weierstrass -- ++ P function, defined by the formula -- ++ \spad{weierstrassP(g2, g3, weierstrassPInverse(g2, g3, z)) = z} whittakerM : (F, F, F) -> F ++ whittakerM(k, m, z) is the Whittaker M function whittakerW : (F, F, F) -> F ++ whittakerW(k, m, z) is the Whittaker W function angerJ : (F, F) -> F ++ angerJ(v, z) is the Anger J function weberE : (F, F) -> F ++ weberE(v, z) is the Weber E function struveH : (F, F) -> F ++ struveH(v, z) is the Struve H function struveL : (F, F) -> F ++ struveL(v, z) is the Struve L function defined by the formula ++ \spad{struveL(v, z) = -%i^exp(-v%pi%i/2)struveH(v, %iz)} hankelH1 : (F, F) -> F ++ hankelH1(v, z) is first Hankel function (Bessel function of ++ the third kind) hankelH2 : (F, F) -> F ++ hankelH2(v, z) is the second Hankel function (Bessel function of ++ the third kind) lommelS1 : (F, F, F) -> F ++ lommelS1(mu, nu, z) is the Lommel s function lommelS2 : (F, F, F) -> F ++ lommelS2(mu, nu, z) is the Lommel S function kummerM : (F, F, F) -> F ++ kummerM(a, b, z) is the Kummer M function kummerU : (F, F, F) -> F ++ kummerU(a, b, z) is the Kummer U function legendreP : (F, F, F) -> F ++ legendreP(nu, mu, z) is the Legendre P function legendreQ : (F, F, F) -> F ++ legendreQ(nu, mu, z) is the Legendre Q function kelvinBei : (F, F) -> F ++ kelvinBei(v, z) is the Kelvin bei function defined by equality ++ \spad{kelvinBei(v, z) = imag(besselJ(v, exp(3%pi%i/4)z))} ++ for z and v real kelvinBer : (F, F) -> F ++ kelvinBer(v, z) is the Kelvin ber function defined by equality ++ \spad{kelvinBer(v, z) = real(besselJ(v, exp(3%pi%i/4)z))} ++ for z and v real kelvinKei : (F, F) -> F ++ kelvinKei(v, z) is the Kelvin kei function defined by equality ++ \spad{kelvinKei(v, z) = ++ imag(exp(-v%pi%i/2)besselK(v, exp(%pi%i/4)z))} ++ for z and v real kelvinKer : (F, F) -> F ++ kelvinKer(v, z) is the Kelvin kei function defined by equality ++ \spad{kelvinKer(v, z) = ++ real(exp(-v%pi%i/2)besselK(v, exp(%pi%i/4)z))} ++ for z and v real ellipticK : F -> F ++ ellipticK(m) is the complete elliptic integral of the ++ first kind: \spad{ellipticK(m) = ++ integrate(1/sqrt((1-t^2)(1-mt^2)), t = 0..1)} ellipticE : F -> F ++ ellipticE(m) is the complete elliptic integral of the ++ second kind: \spad{ellipticE(m) = ++ integrate(sqrt(1-mt^2)/sqrt(1-t^2), t = 0..1)} ellipticE : (F, F) -> F ++ ellipticE(z, m) is the incomplete elliptic integral of the ++ second kind: \spad{ellipticE(z, m) = ++ integrate(sqrt(1-mt^2)/sqrt(1-t^2), t = 0..z)} ellipticF : (F, F) -> F ++ ellipticF(z, m) is the incomplete elliptic integral of the ++ first kind : \spad{ellipticF(z, m) = ++ integrate(1/sqrt((1-t^2)(1-mt^2)), t = 0..z)} ellipticPi : (F, F, F) -> F ++ ellipticPi(z, n, m) is the incomplete elliptic integral of ++ the third kind: \spad{ellipticPi(z, n, m) = ++ integrate(1/((1-nt^2)sqrt((1-t^2)(1-mt^2))), t = 0..z)} jacobiSn : (F, F) -> F ++ jacobiSn(z, m) is the Jacobi elliptic sn function, defined ++ by the formula \spad{jacobiSn(ellipticF(z, m), m) = z} jacobiCn : (F, F) -> F ++ jacobiCn(z, m) is the Jacobi elliptic cn function, defined ++ by \spad{jacobiCn(z, m)^2 + jacobiSn(z, m)^2 = 1} and ++ \spad{jacobiCn(0, m) = 1} jacobiDn : (F, F) -> F ++ jacobiDn(z, m) is the Jacobi elliptic dn function, defined ++ by \spad{jacobiDn(z, m)^2 + m*jacobiSn(z, m)^2 = 1} and ++ \spad{jacobiDn(0, m) = 1} jacobiZeta : (F, F) -> F ++ jacobiZeta(z, m) is the Jacobi elliptic zeta function, defined ++ by \spad{D(jacobiZeta(z, m), z) = ++ jacobiDn(z, m)^2 - ellipticE(m)/ellipticK(m)} and ++ \spad{jacobiZeta(0, m) = 0}. jacobiTheta : (F, F) -> F ++ jacobiTheta(q, z) is the third Jacobi Theta function lerchPhi : (F, F, F) -> F ++ lerchPhi(z, s, a) is the Lerch Phi function riemannZeta : F -> F ++ riemannZeta(z) is the Riemann Zeta function charlierC : (F, F, F) -> F ++ charlierC(n, a, z) is the Charlier polynomial hermiteH : (F, F) -> F ++ hermiteH(n, z) is the Hermite polynomial jacobiP : (F, F, F, F) -> F ++ jacobiP(n, a, b, z) is the Jacobi polynomial laguerreL: (F, F, F) -> F ++ laguerreL(n, a, z) is the Laguerre polynomial meixnerM : (F, F, F, F) -> F ++ meixnerM(n, b, c, z) is the Meixner polynomial if F has RetractableTo(Integer) then hypergeometricF : (List F, List F, F) -> F ++ hypergeometricF(la, lb, z) is the generalized hypergeometric ++ function meijerG : (List F, List F, List F, List F, F) -> F ++ meijerG(la, lb, lc, ld, z) is the meijerG function -- Functions below should be local but conditional iiGamma : F -> F ++ iiGamma(x) should be local but conditional; iiabs : F -> F ++ iiabs(x) should be local but conditional; iiconjugate: F -> F ++ iiconjugate(x) should be local but conditional; iiBeta : List F -> F ++ iiBeta(x) should be local but conditional; iidigamma : F -> F ++ iidigamma(x) should be local but conditional; iipolygamma : List F -> F ++ iipolygamma(x) should be local but conditional; iiBesselJ : List F -> F ++ iiBesselJ(x) should be local but conditional; iiBesselY : List F -> F ++ iiBesselY(x) should be local but conditional; iiBesselI : List F -> F ++ iiBesselI(x) should be local but conditional; iiBesselK : List F -> F ++ iiBesselK(x) should be local but conditional; iiAiryAi : F -> F ++ iiAiryAi(x) should be local but conditional; iiAiryAiPrime : F -> F ++ iiAiryAiPrime(x) should be local but conditional; iiAiryBi : F -> F ++ iiAiryBi(x) should be local but conditional; iiAiryBiPrime : F -> F ++ iiAiryBiPrime(x) should be local but conditional; iAiryAi : F -> F ++ iAiryAi(x) should be local but conditional; iAiryAiPrime : F -> F ++ iAiryAiPrime(x) should be local but conditional; iAiryBi : F -> F ++ iAiryBi(x) should be local but conditional; iAiryBiPrime : F -> F ++ iAiryBiPrime(x) should be local but conditional; iiHypergeometricF : List F -> F ++ iiHypergeometricF(l) should be local but conditional; iiPolylog : (F, F) -> F ++ iiPolylog(x, s) should be local but conditional; iLambertW : F -> F ++ iLambertW(x) should be local but conditional;

Implementation ==> add

SPECIAL := 'special

INP ==> InputForm

SPECIALINPUT ==> '%specialInput

iabs : F -> F iGamma : F -> F iBeta : (F, F) -> F idigamma : F -> F iiipolygamma : (F, F) -> F iiiBesselJ : (F, F) -> F iiiBesselY : (F, F) -> F iiiBesselI : (F, F) -> F iiiBesselK : (F, F) -> F iPolylog : List F -> F

iWeierstrassP : (F, F, F) -> F iWeierstrassPPrime : (F, F, F) -> F iWeierstrassSigma : (F, F, F) -> F iWeierstrassZeta : (F, F, F) -> F

iiWeierstrassP : List F -> F iiWeierstrassPPrime : List F -> F iiWeierstrassSigma : List F -> F iiWeierstrassZeta : List F -> F iiMeijerG : List F -> F

opabs := operator('abs)$CommonOperators opconjugate := operator('conjugate)$CommonOperators opGamma := operator('Gamma)$CommonOperators opGamma2 := operator('Gamma2)$CommonOperators opBeta := operator('Beta)$CommonOperators opdigamma := operator('digamma)$CommonOperators oppolygamma := operator('polygamma)$CommonOperators opBesselJ := operator('besselJ)$CommonOperators opBesselY := operator('besselY)$CommonOperators opBesselI := operator('besselI)$CommonOperators opBesselK := operator('besselK)$CommonOperators opAiryAi := operator('airyAi)$CommonOperators opAiryAiPrime := operator('airyAiPrime)$CommonOperators opAiryBi := operator('airyBi)$CommonOperators opAiryBiPrime := operator('airyBiPrime)$CommonOperators opLambertW := operator('lambertW)$CommonOperators opPolylog := operator('polylog)$CommonOperators opWeierstrassP := operator('weierstrassP)$CommonOperators opWeierstrassPPrime := operator('weierstrassPPrime)$CommonOperators opWeierstrassSigma := operator('weierstrassSigma)$CommonOperators opWeierstrassZeta := operator('weierstrassZeta)$CommonOperators opHypergeometricF := operator('hypergeometricF)$CommonOperators opMeijerG := operator('meijerG)$CommonOperators opCharlierC := operator('charlierC)$CommonOperators opHermiteH := operator('hermiteH)$CommonOperators opJacobiP := operator('jacobiP)$CommonOperators opLaguerreL := operator('laguerreL)$CommonOperators opMeixnerM := operator('meixnerM)$CommonOperators op_log_gamma := operator('%logGamma)$CommonOperators op_eis := operator('%eis)$CommonOperators op_erfs := operator('%erfs)$CommonOperators op_erfis := operator('%erfis)$CommonOperators

abs x == opabs x conjugate x == opconjugate x Gamma(x) == opGamma(x) Gamma(a, x) == opGamma2(a, x) Beta(x, y) == opBeta(x, y) digamma x == opdigamma(x) polygamma(k, x)== oppolygamma(k, x) besselJ(a, x) == opBesselJ(a, x) besselY(a, x) == opBesselY(a, x) besselI(a, x) == opBesselI(a, x) besselK(a, x) == opBesselK(a, x) airyAi(x) == opAiryAi(x) airyAiPrime(x) == opAiryAiPrime(x) airyBi(x) == opAiryBi(x) airyBiPrime(x) == opAiryBiPrime(x) lambertW(x) == opLambertW(x) polylog(s, x) == opPolylog(s, x) weierstrassP(g2, g3, x) == opWeierstrassP(g2, g3, x) weierstrassPPrime(g2, g3, x) == opWeierstrassPPrime(g2, g3, x) weierstrassSigma(g2, g3, x) == opWeierstrassSigma(g2, g3, x) weierstrassZeta(g2, g3, x) == opWeierstrassZeta(g2, g3, x) if F has RetractableTo(Integer) then hypergeometricF(a, b, z) == nai := #a nbi := #b z = 0 and nai <= nbi + 1 => 1 p := (#a)::F q := (#b)::F opHypergeometricF concat(concat(a, concat(b, [z])), [p, q])

meijerG(a, b, c, d, z) == n1 := (#a)::F n2 := (#b)::F m1 := (#c)::F m2 := (#d)::F opMeijerG concat(concat(a, concat(b, concat(c, concat(d, [z])))), [n1, n2, m1, m2])

import from List Kernel(F) opdiff := operator(operator('%diff)$CommonOperators)$F dummy ==> new()$SE :: F

ahalf : F := recip(2::F)::F athird : F := recip(3::F)::F afourth : F := recip(4::F)::F asixth : F := recip(6::F)::F twothirds : F := 2athird threehalfs : F := 3ahalf

-- Helpers for partially defined derivatives

grad2(l : List F, t : SE, op : OP, d2 : (F, F) -> F ) : F == x1 := l(1) x2 := l(2) dm := dummy differentiate(x1, t)*kernel(opdiff, [op [dm, x2], dm, x1]) + differentiate(x2, t)*d2(x1, x2)

grad3(l : List F, t : SE, op : OP, d3 : (F, F, F) -> F ) : F == x1 := l(1) x2 := l(2) x3 := l(3) dm1 := dummy dm2 := dummy differentiate(x1, t)*kernel(opdiff, [op [dm1, x2, x3], dm1, x1]) + differentiate(x2, t)*kernel(opdiff, [op [x1, dm2, x3], dm2, x2]) + differentiate(x3, t)*d3(x1, x2, x3)

grad4(l : List F, t : SE, op : OP, d4 : (F, F, F, F) -> F ) : F == x1 := l(1) x2 := l(2) x3 := l(3) x4 := l(4) dm1 := dummy dm2 := dummy dm3 := dummy kd1 := kernel(opdiff, [op [dm1, x2, x3, x4], dm1, x1]) kd2 := kernel(opdiff, [op [x1, dm2, x3, x4], dm2, x2]) kd3 := kernel(opdiff, [op [x1, x2, dm3, x4], dm3, x3]) differentiate(x1, t)kd1 + differentiate(x2, t)kd2 + differentiate(x3, t)kd3 + differentiate(x4, t)d4(x1, x2, x3, x4)

-- handle WeierstrassPInverse

)if false

opWeierstrassPInverse := operator('weierstrassPInverse)$CommonOperators

weierstrassPInverse(g2, g3, z) == opWeierstrassPInverse(g2, g3, z)

eWeierstrassPInverse(g2 : F, g3 : F, z : F) : F == kernel(opWeierstrassPInverse, [g2, g3, z])

elWeierstrassPInverse(l : List F) : F == eWeierstrassPInverse(l(1), l(2), l(3)) evaluate(opWeierstrassPInverse, elWeierstrassPInverse)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eWeierstrassPInverseGrad_g2(l : List F) : F == g2 := l(1) g3 := l(2) z := l(3) error "unimplemented"

eWeierstrassPInverseGrad_g3(l : List F) : F == g2 := l(1) g3 := l(2) z := l(3) error "unimplemented"

eWeierstrassPInverseGrad_z(l : List F) : F == g2 := l(1) g3 := l(2) z := l(3) 1/sqrt(4z^3 - g2z - g3)

derivative(opWeierstrassPInverse, [eWeierstrassPInverseGrad_g2, eWeierstrassPInverseGrad_g3, eWeierstrassPInverseGrad_z])

)endif

-- handle WhittakerM

opWhittakerM := operator('whittakerM)$CommonOperators

whittakerM(k, m, z) == opWhittakerM(k, m, z)

eWhittakerM(k : F, m : F, z : F) : F == kernel(opWhittakerM, [k, m, z])

elWhittakerM(l : List F) : F == eWhittakerM(l(1), l(2), l(3)) evaluate(opWhittakerM, elWhittakerM)$BasicOperatorFunctions1(F)

eWhittakerMGrad_z(k : F, m : F, z : F) : F == (ahalf - k/z)whittakerM(k, m, z) + (ahalf + k + m)whittakerM(k + 1, m, z)/z

dWhittakerM(l : List F, t : SE) : F == grad3(l, t, opWhittakerM, eWhittakerMGrad_z)

setProperty(opWhittakerM, SPECIALDIFF, dWhittakerM@((List F, SE)->F) pretend None)

-- handle WhittakerW

opWhittakerW := operator('whittakerW)$CommonOperators

whittakerW(k, m, z) == opWhittakerW(k, m, z)

eWhittakerW(k : F, m : F, z : F) : F == kernel(opWhittakerW, [k, m, z])

elWhittakerW(l : List F) : F == eWhittakerW(l(1), l(2), l(3)) evaluate(opWhittakerW, elWhittakerW)$BasicOperatorFunctions1(F)

eWhittakerWGrad_z(k : F, m : F, z : F) : F == (ahalf - k/z)*whittakerW(k, m, z) - whittakerW(k + 1, m, z)/z

dWhittakerW(l : List F, t : SE) : F == grad3(l, t, opWhittakerW, eWhittakerWGrad_z)

setProperty(opWhittakerW, SPECIALDIFF, dWhittakerW@((List F, SE)->F) pretend None)

-- handle AngerJ

opAngerJ := operator('angerJ)$CommonOperators

angerJ(v, z) == opAngerJ(v, z)

if F has TranscendentalFunctionCategory then

eAngerJ(v : F, z : F) : F == z = 0 => sin(vpi())/(vpi()) kernel(opAngerJ, [v, z])

elAngerJ(l : List F) : F == eAngerJ(l(1), l(2)) evaluate(opAngerJ, elAngerJ)$BasicOperatorFunctions1(F)

eAngerJGrad_z(v : F, z : F) : F == -angerJ(v + 1, z) + vangerJ(v, z)/z - sin(vpi())/(pi()*z)

dAngerJ(l : List F, t : SE) : F == grad2(l, t, opAngerJ, eAngerJGrad_z)

setProperty(opAngerJ, SPECIALDIFF, dAngerJ@((List F, SE)->F) pretend None)

else

eeAngerJ(l : List F) : F == kernel(opAngerJ, l) evaluate(opAngerJ, eeAngerJ)$BasicOperatorFunctions1(F)

-- handle WeberE

opWeberE := operator('weberE)$CommonOperators

weberE(v, z) == opWeberE(v, z)

if F has TranscendentalFunctionCategory then

eWeberE(v : F, z : F) : F == z = 0 => 2sin(ahalfvpi())^2/(vpi()) kernel(opWeberE, [v, z])

elWeberE(l : List F) : F == eWeberE(l(1), l(2)) evaluate(opWeberE, elWeberE)$BasicOperatorFunctions1(F)

eWeberEGrad_z(v : F, z : F) : F == -weberE(v + 1, z) + vweberE(v, z)/z - (1 - cos(vpi()))/(pi()*z)

dWeberE(l : List F, t : SE) : F == grad2(l, t, opWeberE, eWeberEGrad_z)

setProperty(opWeberE, SPECIALDIFF, dWeberE@((List F, SE)->F) pretend None)

else

eeWeberE(l : List F) : F == kernel(opWeberE, l) evaluate(opWeberE, eeWeberE)$BasicOperatorFunctions1(F)

-- handle StruveH

opStruveH := operator('struveH)$CommonOperators

struveH(v, z) == opStruveH(v, z)

eStruveH(v : F, z : F) : F == kernel(opStruveH, [v, z])

elStruveH(l : List F) : F == eStruveH(l(1), l(2)) evaluate(opStruveH, elStruveH)$BasicOperatorFunctions1(F)

if F has TranscendentalFunctionCategory and F has RadicalCategory then

eStruveHGrad_z(v : F, z : F) : F == -struveH(v + 1, z) + vstruveH(v, z)/z + (ahalfz)^v/(sqrt(pi())*Gamma(v + threehalfs))

dStruveH(l : List F, t : SE) : F == grad2(l, t, opStruveH, eStruveHGrad_z)

setProperty(opStruveH, SPECIALDIFF, dStruveH@((List F, SE)->F) pretend None)

-- handle StruveL

opStruveL := operator('struveL)$CommonOperators

struveL(v, z) == opStruveL(v, z)

eStruveL(v : F, z : F) : F == kernel(opStruveL, [v, z])

elStruveL(l : List F) : F == eStruveL(l(1), l(2)) evaluate(opStruveL, elStruveL)$BasicOperatorFunctions1(F)

if F has TranscendentalFunctionCategory and F has RadicalCategory then

eStruveLGrad_z(v : F, z : F) : F == struveL(v + 1, z) + vstruveL(v, z)/z + (ahalfz)^v/(sqrt(pi())*Gamma(v + threehalfs))

dStruveL(l : List F, t : SE) : F == grad2(l, t, opStruveL, eStruveLGrad_z)

setProperty(opStruveL, SPECIALDIFF, dStruveL@((List F, SE)->F) pretend None)

-- handle HankelH1

opHankelH1 := operator('hankelH1)$CommonOperators

hankelH1(v, z) == opHankelH1(v, z)

eHankelH1(v : F, z : F) : F == kernel(opHankelH1, [v, z])

elHankelH1(l : List F) : F == eHankelH1(l(1), l(2)) evaluate(opHankelH1, elHankelH1)$BasicOperatorFunctions1(F)

eHankelH1Grad_z(v : F, z : F) : F == -hankelH1(v + 1, z) + v*hankelH1(v, z)/z

dHankelH1(l : List F, t : SE) : F == grad2(l, t, opHankelH1, eHankelH1Grad_z)

setProperty(opHankelH1, SPECIALDIFF, dHankelH1@((List F, SE)->F) pretend None)

-- handle HankelH2

opHankelH2 := operator('hankelH2)$CommonOperators

hankelH2(v, z) == opHankelH2(v, z)

eHankelH2(v : F, z : F) : F == kernel(opHankelH2, [v, z])

elHankelH2(l : List F) : F == eHankelH2(l(1), l(2)) evaluate(opHankelH2, elHankelH2)$BasicOperatorFunctions1(F)

eHankelH2Grad_z(v : F, z : F) : F == -hankelH2(v + 1, z) + v*hankelH2(v, z)/z

dHankelH2(l : List F, t : SE) : F == grad2(l, t, opHankelH2, eHankelH2Grad_z)

setProperty(opHankelH2, SPECIALDIFF, dHankelH2@((List F, SE)->F) pretend None)

-- handle LommelS1

opLommelS1 := operator('lommelS1)$CommonOperators

lommelS1(m, v, z) == opLommelS1(m, v, z)

eLommelS1(m : F, v : F, z : F) : F == kernel(opLommelS1, [m, v, z])

elLommelS1(l : List F) : F == eLommelS1(l(1), l(2), l(3)) evaluate(opLommelS1, elLommelS1)$BasicOperatorFunctions1(F)

eLommelS1Grad_z(m : F, v : F, z : F) : F == -vlommelS1(m, v, z)/z + (m + v - 1)lommelS1(m - 1, v - 1, z)

dLommelS1(l : List F, t : SE) : F == grad3(l, t, opLommelS1, eLommelS1Grad_z)

setProperty(opLommelS1, SPECIALDIFF, dLommelS1@((List F, SE)->F) pretend None)

-- handle LommelS2

opLommelS2 := operator('lommelS2)$CommonOperators

lommelS2(mu, nu, z) == opLommelS2(mu, nu, z)

eLommelS2(mu : F, nu : F, z : F) : F == kernel(opLommelS2, [mu, nu, z])

elLommelS2(l : List F) : F == eLommelS2(l(1), l(2), l(3)) evaluate(opLommelS2, elLommelS2)$BasicOperatorFunctions1(F)

eLommelS2Grad_z(m : F, v : F, z : F) : F == -vlommelS2(m, v, z)/z + (m + v - 1)lommelS2(m - 1, v - 1, z)

dLommelS2(l : List F, t : SE) : F == grad3(l, t, opLommelS2, eLommelS2Grad_z)

setProperty(opLommelS2, SPECIALDIFF, dLommelS2@((List F, SE)->F) pretend None)

-- handle KummerM

opKummerM := operator('kummerM)$CommonOperators

kummerM(mu, nu, z) == opKummerM(mu, nu, z)

eKummerM(a : F, b : F, z : F) : F == z = 0 => 1 kernel(opKummerM, [a, b, z])

elKummerM(l : List F) : F == eKummerM(l(1), l(2), l(3)) evaluate(opKummerM, elKummerM)$BasicOperatorFunctions1(F)

eKummerMGrad_z(a : F, b : F, z : F) : F == ((z + a - b)kummerM(a, b, z)+(b - a)kummerM(a - 1, b, z))/z

dKummerM(l : List F, t : SE) : F == grad3(l, t, opKummerM, eKummerMGrad_z)

setProperty(opKummerM, SPECIALDIFF, dKummerM@((List F, SE)->F) pretend None)

-- handle KummerU

opKummerU := operator('kummerU)$CommonOperators

kummerU(a, b, z) == opKummerU(a, b, z)

eKummerU(a : F, b : F, z : F) : F == kernel(opKummerU, [a, b, z])

elKummerU(l : List F) : F == eKummerU(l(1), l(2), l(3)) evaluate(opKummerU, elKummerU)$BasicOperatorFunctions1(F)

eKummerUGrad_z(a : F, b : F, z : F) : F == ((z + a - b)*kummerU(a, b, z) - kummerU(a - 1, b, z))/z

dKummerU(l : List F, t : SE) : F == grad3(l, t, opKummerU, eKummerUGrad_z)

setProperty(opKummerU, SPECIALDIFF, dKummerU@((List F, SE)->F) pretend None)

-- handle LegendreP

opLegendreP := operator('legendreP)$CommonOperators

legendreP(nu, mu, z) == opLegendreP(nu, mu, z)

eLegendreP(nu : F, mu : F, z : F) : F == kernel(opLegendreP, [nu, mu, z])

elLegendreP(l : List F) : F == eLegendreP(l(1), l(2), l(3)) evaluate(opLegendreP, elLegendreP)$BasicOperatorFunctions1(F)

eLegendrePGrad_z(nu : F, mu : F, z : F) : F == (nu - mu + 1)legendreP(nu + 1, mu, z) - (nu + 1)z*legendreP(nu, mu, z)

dLegendreP(l : List F, t : SE) : F == grad3(l, t, opLegendreP, eLegendrePGrad_z)

setProperty(opLegendreP, SPECIALDIFF, dLegendreP@((List F, SE)->F) pretend None)

-- handle LegendreQ

opLegendreQ := operator('legendreQ)$CommonOperators

legendreQ(nu, mu, z) == opLegendreQ(nu, mu, z)

eLegendreQ(nu : F, mu : F, z : F) : F == kernel(opLegendreQ, [nu, mu, z])

elLegendreQ(l : List F) : F == eLegendreQ(l(1), l(2), l(3)) evaluate(opLegendreQ, elLegendreQ)$BasicOperatorFunctions1(F)

eLegendreQGrad_z(nu : F, mu : F, z : F) : F == (nu - mu + 1)legendreQ(nu + 1, mu, z) - (nu + 1)z*legendreQ(nu, mu, z)

dLegendreQ(l : List F, t : SE) : F == grad3(l, t, opLegendreQ, eLegendreQGrad_z)

setProperty(opLegendreQ, SPECIALDIFF, dLegendreQ@((List F, SE)->F) pretend None)

-- handle KelvinBei

opKelvinBei := operator('kelvinBei)$CommonOperators

kelvinBei(v, z) == opKelvinBei(v, z)

eKelvinBei(v : F, z : F) : F == kernel(opKelvinBei, [v, z])

elKelvinBei(l : List F) : F == eKelvinBei(l(1), l(2)) evaluate(opKelvinBei, elKelvinBei)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinBeiGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinBei(v + 1, z) - kelvinBer(v + 1, z)) + v*kelvinBei(v, z)/z

dKelvinBei(l : List F, t : SE) : F == grad2(l, t, opKelvinBei, eKelvinBeiGrad_z)

setProperty(opKelvinBei, SPECIALDIFF, dKelvinBei@((List F, SE)->F) pretend None)

-- handle KelvinBer

opKelvinBer := operator('kelvinBer)$CommonOperators

kelvinBer(v, z) == opKelvinBer(v, z)

eKelvinBer(v : F, z : F) : F == kernel(opKelvinBer, [v, z])

elKelvinBer(l : List F) : F == eKelvinBer(l(1), l(2)) evaluate(opKelvinBer, elKelvinBer)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinBerGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinBer(v + 1, z) + kelvinBei(v + 1, z)) + v*kelvinBer(v, z)/z

dKelvinBer(l : List F, t : SE) : F == grad2(l, t, opKelvinBer, eKelvinBerGrad_z)

setProperty(opKelvinBer, SPECIALDIFF, dKelvinBer@((List F, SE)->F) pretend None)

-- handle KelvinKei

opKelvinKei := operator('kelvinKei)$CommonOperators

kelvinKei(v, z) == opKelvinKei(v, z)

eKelvinKei(v : F, z : F) : F == kernel(opKelvinKei, [v, z])

elKelvinKei(l : List F) : F == eKelvinKei(l(1), l(2)) evaluate(opKelvinKei, elKelvinKei)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinKeiGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinKei(v + 1, z) - kelvinKer(v + 1, z)) + v*kelvinKei(v, z)/z

dKelvinKei(l : List F, t : SE) : F == grad2(l, t, opKelvinKei, eKelvinKeiGrad_z)

setProperty(opKelvinKei, SPECIALDIFF, dKelvinKei@((List F, SE)->F) pretend None)

-- handle KelvinKer

opKelvinKer := operator('kelvinKer)$CommonOperators

kelvinKer(v, z) == opKelvinKer(v, z)

eKelvinKer(v : F, z : F) : F == kernel(opKelvinKer, [v, z])

elKelvinKer(l : List F) : F == eKelvinKer(l(1), l(2)) evaluate(opKelvinKer, elKelvinKer)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinKerGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinKer(v + 1, z) + kelvinKei(v + 1, z)) + v*kelvinKer(v, z)/z

dKelvinKer(l : List F, t : SE) : F == grad2(l, t, opKelvinKer, eKelvinKerGrad_z)

setProperty(opKelvinKer, SPECIALDIFF, dKelvinKer@((List F, SE)->F) pretend None)

-- handle EllipticK

opEllipticK := operator('ellipticK)$CommonOperators

ellipticK(m) == opEllipticK(m)

eEllipticK(m : F) : F == kernel(opEllipticK, [m])

elEllipticK(l : List F) : F == eEllipticK(l(1)) evaluate(opEllipticK, elEllipticK)$BasicOperatorFunctions1(F)

dEllipticK(m : F) : F == ahalf(ellipticE(m) - (1 - m)ellipticK(m))/(m*(1 - m))

derivative(opEllipticK, dEllipticK)

-- handle one argument EllipticE

opEllipticE := operator('ellipticE)$CommonOperators

ellipticE(m) == opEllipticE(m)

eEllipticE(m : F) : F == kernel(opEllipticE, [m])

elEllipticE(l : List F) : F == eEllipticE(l(1)) evaluate(opEllipticE, elEllipticE)$BasicOperatorFunctions1(F)

dEllipticE(m : F) : F == ahalf*(ellipticE(m) - ellipticK(m))/m

derivative(opEllipticE, dEllipticE)

-- handle two argument EllipticE

opEllipticE2 := operator('ellipticE2)$CommonOperators

ellipticE(z, m) == opEllipticE2(z, m)

eEllipticE2(z : F, m : F) : F == z = 0 => 0 z = 1 => eEllipticE(m) kernel(opEllipticE2, [z, m])

elEllipticE2(l : List F) : F == eEllipticE2(l(1), l(2)) evaluate(opEllipticE2, elEllipticE2)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eEllipticE2Grad_z(l : List F) : F == z := l(1) m := l(2) sqrt(1 - m*z^2)/sqrt(1 - z^2)

eEllipticE2Grad_m(l : List F) : F == z := l(1) m := l(2) ahalf*(ellipticE(z, m) - ellipticF(z, m))/m

derivative(opEllipticE2, [eEllipticE2Grad_z, eEllipticE2Grad_m])

inEllipticE2(li : List INP) : INP == convert cons(convert('ellipticE), li)

input(opEllipticE2, inEllipticE2@((List INP) -> INP))

-- handle EllipticF

opEllipticF := operator('ellipticF)$CommonOperators

ellipticF(z, m) == opEllipticF(z, m)

eEllipticF(z : F, m : F) : F == z = 0 => 0 z = 1 => ellipticK(m) kernel(opEllipticF, [z, m])

elEllipticF(l : List F) : F == eEllipticF(l(1), l(2)) evaluate(opEllipticF, elEllipticF)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eEllipticFGrad_z(l : List F) : F == z := l(1) m := l(2) 1/(sqrt(1 - mz^2)sqrt(1 - z^2))

eEllipticFGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf((ellipticE(z, m) - (1 - m)ellipticF(z, m))/m - zsqrt(1 - z^2)/sqrt(1 - mz^2))/(1 - m)

derivative(opEllipticF, [eEllipticFGrad_z, eEllipticFGrad_m])

-- handle EllipticPi

opEllipticPi := operator('ellipticPi)$CommonOperators

ellipticPi(z, n, m) == opEllipticPi(z, n, m)

eEllipticPi(z : F, n : F, m : F) : F == z = 0 => 0 kernel(opEllipticPi, [z, n, m])

elEllipticPi(l : List F) : F == eEllipticPi(l(1), l(2), l(3)) evaluate(opEllipticPi, elEllipticPi)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eEllipticPiGrad_z(l : List F) : F == z := l(1) n := l(2) m := l(3) 1/((1 - nz^2)sqrt(1 - mz^2)sqrt(1 - z^2))

eEllipticPiGrad_n(l : List F) : F == z := l(1) n := l(2) m := l(3) t1 := -(n^2 - m)ellipticPi(z, n, m)/((n - 1)(n - m)n) t2 := ellipticF(z, m)/((n - 1)n) t3 := -ellipticE(z, m)/((n - 1)(n - m)) t4 := nzsqrt(1 - mz^2)sqrt(1 - z^2)/ ((1 - nz^2)(n - 1)(n - m)) ahalf*(t1 + t2 + t3 + t4)

eEllipticPiGrad_m(l : List F) : F == z := l(1) n := l(2) m := l(3) t1 := mzsqrt(1 - z^2)/sqrt(1 - mz^2) t2 := (-ellipticE(z, m) + t1)/(1 - m) ahalf(ellipticPi(z, n, m) + t2)/(n - m)

derivative(opEllipticPi, [eEllipticPiGrad_z, eEllipticPiGrad_n, eEllipticPiGrad_m])

-- handle JacobiSn

opJacobiSn := operator('jacobiSn)$CommonOperators

jacobiSn(z, m) == opJacobiSn(z, m)

eJacobiSn(z : F, m : F) : F == z = 0 => 0 if is?(z, opEllipticF) then args := argument(retract(z)@K) m = args(2) => return args(1) kernel(opJacobiSn, [z, m])

elJacobiSn : List F -> F elJacobiSn(l : List F) : F == eJacobiSn(l(1), l(2)) evaluate(opJacobiSn, elJacobiSn)$BasicOperatorFunctions1(F)

jacobiGradHelper(z : F, m : F) : F == (z - ellipticE(jacobiSn(z, m), m)/(1 - m))/m

eJacobiSnGrad_z(l : List F) : F == z := l(1) m := l(2) jacobiCn(z, m)*jacobiDn(z, m)

eJacobiSnGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf(eJacobiSnGrad_z(l)jacobiGradHelper(z, m) + jacobiSn(z, m)*jacobiCn(z, m)^2/(1 - m))

derivative(opJacobiSn, [eJacobiSnGrad_z, eJacobiSnGrad_m])

-- handle JacobiCn

opJacobiCn := operator('jacobiCn)$CommonOperators

jacobiCn(z, m) == opJacobiCn(z, m)

eJacobiCn(z : F, m : F) : F == z = 0 => 1 kernel(opJacobiCn, [z, m])

elJacobiCn(l : List F) : F == eJacobiCn(l(1), l(2)) evaluate(opJacobiCn, elJacobiCn)$BasicOperatorFunctions1(F)

eJacobiCnGrad_z(l : List F) : F == z := l(1) m := l(2) -jacobiSn(z, m)*jacobiDn(z, m)

eJacobiCnGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf(eJacobiCnGrad_z(l)jacobiGradHelper(z, m) - jacobiSn(z, m)^2*jacobiCn(z, m)/(1 - m))

derivative(opJacobiCn, [eJacobiCnGrad_z, eJacobiCnGrad_m])

-- handle JacobiDn

opJacobiDn := operator('jacobiDn)$CommonOperators

jacobiDn(z, m) == opJacobiDn(z, m)

eJacobiDn(z : F, m : F) : F == z = 0 => 1 kernel(opJacobiDn, [z, m])

elJacobiDn(l : List F) : F == eJacobiDn(l(1), l(2)) evaluate(opJacobiDn, elJacobiDn)$BasicOperatorFunctions1(F)

eJacobiDnGrad_z(l : List F) : F == z := l(1) m := l(2) -mjacobiSn(z, m)jacobiCn(z, m)

eJacobiDnGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf(eJacobiDnGrad_z(l)jacobiGradHelper(z, m) - jacobiSn(z, m)^2*jacobiDn(z, m)/(1 - m))

derivative(opJacobiDn, [eJacobiDnGrad_z, eJacobiDnGrad_m])

-- handle JacobiZeta

opJacobiZeta := operator('jacobiZeta)$CommonOperators

jacobiZeta(z, m) == opJacobiZeta(z, m)

eJacobiZeta(z : F, m : F) : F == z = 0 => 0 kernel(opJacobiZeta, [z, m])

elJacobiZeta(l : List F) : F == eJacobiZeta(l(1), l(2)) evaluate(opJacobiZeta, elJacobiZeta)$BasicOperatorFunctions1(F)

eJacobiZetaGrad_z(l : List F) : F == z := l(1) m := l(2) dn := jacobiDn(z, m) dn*dn - ellipticE(m)/ellipticK(m)

eJacobiZetaGrad_m(l : List F) : F == z := l(1) m := l(2) ek := ellipticK(m) ee := ellipticE(m) er := ee/ek dn := jacobiDn(z, m) res1 := (dndn + m - 1)jacobiZeta(z, m) res2 := res1 + (m - 1)zdndn res3 := res2 - mjacobiCn(z, m)jacobiDn(z, m)jacobiSn(z, m) res4 := res3 + z(1 - m + dndn)er ahalf(res4 - zerer)/(m*m - m)

derivative(opJacobiZeta, [eJacobiZetaGrad_z, eJacobiZetaGrad_m])

-- handle JacobiTheta

opJacobiTheta := operator('jacobiTheta)$CommonOperators

jacobiTheta(q, z) == opJacobiTheta(q, z)

eJacobiTheta(q : F, z : F) : F == kernel(opJacobiTheta, [q, z])

elJacobiTheta(l : List F) : F == eJacobiTheta(l(1), l(2)) evaluate(opJacobiTheta, elJacobiTheta)$BasicOperatorFunctions1(F)

-- handle LerchPhi

opLerchPhi := operator('lerchPhi)$CommonOperators

lerchPhi(z, s, a) == opLerchPhi(z, s, a)

eLerchPhi(z : F, s : F, a : F) : F ==
z = 0 => 1/a^s a = 1 => polylog(s, z)/z kernel(opLerchPhi, [z, s, a])

elLerchPhi(l : List F) : F == eLerchPhi(l(1), l(2), l(3)) evaluate(opLerchPhi, elLerchPhi)$BasicOperatorFunctions1(F)

dLerchPhi(l : List F, t : SE) : F == z := l(1) s := l(2) a := l(3) dz := differentiate(z, t)(lerchPhi(z, s - 1, a) - alerchPhi(z, s, a))/z da := -differentiate(a, t)slerchPhi(z, s + 1, a) dm := dummy differentiate(s, t)*kernel(opdiff, [opLerchPhi [z, dm, a], dm, s]) + dz + da

setProperty(opLerchPhi, SPECIALDIFF, dLerchPhi@((List F, SE)->F) pretend None)

-- handle RiemannZeta

opRiemannZeta := operator('riemannZeta)$CommonOperators

riemannZeta(z) == opRiemannZeta(z)

eRiemannZeta(z : F) : F == kernel(opRiemannZeta, [z])

elRiemannZeta(l : List F) : F == eRiemannZeta(l(1)) evaluate(opRiemannZeta, elRiemannZeta)$BasicOperatorFunctions1(F)

-- orthogonal polynomials

charlierC(n : F, a : F, z : F) : F == opCharlierC(n, a, z)

eCharlierC(n : F, a : F, z : F) : F == n = 0 => 1 n = 1 => (z - a)/a kernel(opCharlierC, [n, a, z])

elCharlierC(l : List F) : F == eCharlierC(l(1), l(2), l(3))

evaluate(opCharlierC, elCharlierC)$BasicOperatorFunctions1(F)

hermiteH(n : F, z: F) : F == opHermiteH(n, z)

eHermiteH(n : F, z: F) : F == n = -1 => 0 n = 0 => 1 n = 1 => (2::F)*z kernel(opHermiteH, [n, z])

elHermiteH(l : List F) : F == eHermiteH(l(1), l(2))

evaluate(opHermiteH, elHermiteH)$BasicOperatorFunctions1(F)

eHermiteHGrad_z(n : F, z : F) : F == (2::F)nhermiteH(n - 1, z)

dHermiteH(l : List F, t : SE) : F == grad2(l, t, opHermiteH, eHermiteHGrad_z)

setProperty(opHermiteH, SPECIALDIFF, dHermiteH@((List F, SE)->F) pretend None)

jacobiP(n : F, a : F, b : F, z : F) : F == opJacobiP(n, a, b, z)

eJacobiP(n : F, a : F, b : F, z : F) : F == n = -1 => 0 n = 0 => 1 n = 1 => ahalf(a - b) + (1 + ahalf(a + b))*z kernel(opJacobiP, [n, a, b, z])

elJacobiP(l : List F) : F == eJacobiP(l(1), l(2), l(3), l(4))

evaluate(opJacobiP, elJacobiP)$BasicOperatorFunctions1(F)

eJacobiPGrad_z(n : F, a : F, b : F, z : F) : F == ahalf(a + b + n + 1)jacobiP(n - 1, a + 1, b + 1, z)

dJacobiP(l : List F, t : SE) : F == grad4(l, t, opJacobiP, eJacobiPGrad_z)

setProperty(opJacobiP, SPECIALDIFF, dJacobiP@((List F, SE)->F) pretend None)

laguerreL(n : F, a : F, z : F) : F == opLaguerreL(n, a, z)

eLaguerreL(n : F, a : F, z : F) : F == n = -1 => 0 n = 0 => 1 n = 1 => (1 + a - z) kernel(opLaguerreL, [n, a, z])

elLaguerreL(l : List F) : F == eLaguerreL(l(1), l(2), l(3))

evaluate(opLaguerreL, elLaguerreL)$BasicOperatorFunctions1(F)

eLaguerreLGrad_z(n : F, a : F, z : F) : F == laguerreL(n - 1, a + 1, z)

dLaguerreL(l : List F, t : SE) : F == grad3(l, t, opLaguerreL, eLaguerreLGrad_z)

setProperty(opLaguerreL, SPECIALDIFF, dLaguerreL@((List F, SE)->F) pretend None)

meixnerM(n : F, b : F, c : F, z : F) : F == opMeixnerM(n, b, c, z)

eMeixnerM(n : F, b : F, c : F, z : F) : F == n = 0 => 1 n = 1 => (c - 1)z/(cb) + 1 kernel(opMeixnerM, [n, b, c, z])

elMeixnerM(l : List F) : F == eMeixnerM(l(1), l(2), l(3), l(4))

evaluate(opMeixnerM, elMeixnerM)$BasicOperatorFunctions1(F)

-- belong? op == has?(op, SPECIAL)

operator op == is?(op, 'abs) => opabs is?(op, 'conjugate)=> opconjugate is?(op, 'Gamma) => opGamma is?(op, 'Gamma2) => opGamma2 is?(op, 'Beta) => opBeta is?(op, 'digamma) => opdigamma is?(op, 'polygamma)=> oppolygamma is?(op, 'besselJ) => opBesselJ is?(op, 'besselY) => opBesselY is?(op, 'besselI) => opBesselI is?(op, 'besselK) => opBesselK is?(op, 'airyAi) => opAiryAi is?(op, 'airyAiPrime) => opAiryAiPrime is?(op, 'airyBi) => opAiryBi is?(op, 'airyBiPrime) => opAiryBiPrime is?(op, 'lambertW) => opLambertW is?(op, 'polylog) => opPolylog is?(op, 'weierstrassP) => opWeierstrassP is?(op, 'weierstrassPPrime) => opWeierstrassPPrime is?(op, 'weierstrassSigma) => opWeierstrassSigma is?(op, 'weierstrassZeta) => opWeierstrassZeta is?(op, 'hypergeometricF) => opHypergeometricF is?(op, 'meijerG) => opMeijerG -- is?(op, 'weierstrassPInverse) => opWeierstrassPInverse is?(op, 'whittakerM) => opWhittakerM is?(op, 'whittakerW) => opWhittakerW is?(op, 'angerJ) => opAngerJ is?(op, 'weberE) => opWeberE is?(op, 'struveH) => opStruveH is?(op, 'struveL) => opStruveL is?(op, 'hankelH1) => opHankelH1 is?(op, 'hankelH2) => opHankelH2 is?(op, 'lommelS1) => opLommelS1 is?(op, 'lommelS2) => opLommelS2 is?(op, 'kummerM) => opKummerM is?(op, 'kummerU) => opKummerU is?(op, 'legendreP) => opLegendreP is?(op, 'legendreQ) => opLegendreQ is?(op, 'kelvinBei) => opKelvinBei is?(op, 'kelvinBer) => opKelvinBer is?(op, 'kelvinKei) => opKelvinKei is?(op, 'kelvinKer) => opKelvinKer is?(op, 'ellipticK) => opEllipticK is?(op, 'ellipticE) => opEllipticE is?(op, 'ellipticE2) => opEllipticE2 is?(op, 'ellipticF) => opEllipticF is?(op, 'ellipticPi) => opEllipticPi is?(op, 'jacobiSn) => opJacobiSn is?(op, 'jacobiCn) => opJacobiCn is?(op, 'jacobiDn) => opJacobiDn is?(op, 'jacobiZeta) => opJacobiZeta is?(op, 'jacobiTheta) => opJacobiTheta is?(op, 'lerchPhi) => opLerchPhi is?(op, 'riemannZeta) => opRiemannZeta is?(op, 'charlierC) => opCharlierC is?(op, 'hermiteH) => opHermiteH is?(op, 'jacobiP) => opJacobiP is?(op, 'laguerreL) => opLaguerreL is?(op, 'meixnerM) => opMeixnerM is?(op, '%logGamma) => op_log_gamma is?(op, '%eis) => op_eis is?(op, '%erfs) => op_erfs is?(op, '%erfis) => op_erfis

error "Not a special operator"

-- Could put more unconditional special rules for other functions here iGamma x == -- one? x => x (x = 1) => x kernel(opGamma, x)

iabs x == zero? x => 0 one? x => 1 is?(x, opabs) => x is?(x, opconjugate) => kernel(opabs, argument(retract(x)@K)(1)) smaller?(x, 0) => kernel(opabs, -x) kernel(opabs, x)

iconjugate(k:K):F == --output("in: ",k::OutputForm)$OutputPackage if is?(k, opconjugate) then x:=argument(k)(1) else if is?(k, opabs) then x:= k::F else if symbolIfCan(k) case Symbol then x:=kernel(opconjugate, k::F) else if F has RadicalCategory and R has RetractableTo(Integer) and is?(k, 'nthRoot) then x:= 1/nthRoot(1/iiconjugate argument(k)(1),retract(argument(k)(2))@Integer) else -- assume holomorphic x:=map(iiconjugate,k) --output("out: ",x::OutputForm)$OutputPackage return x

iiconjugate(x:F):F == --output("iin: ",x::OutputForm)$OutputPackage if (s:=isPlus(x)) case List F then --output("isPlus: ",s::OutputForm)$OutputPackage x := reduce(_+$F,map(iiconjugate,s)) else if (s:=isTimes(x)) case List F then --output("isTimes: ",s::OutputForm)$OutputPackage x:= reduce(_*$F,map(iiconjugate,s)) else if #(ks:List K:=kernels(x))>0 then --output("kernels: ",ks::OutputForm)$OutputPackage x := eval(x,ks, _ map((k:Kernel F):F +-> (height(k)=0 =>k::F;iconjugate k), _ ks)$ListFunctions2(Kernel F,F)) else if R has conjugate : R -> R then x:=map(conjugate$R,numer x)::F / _ map(conjugate$R,denom x)::F --output("iout: ",x::OutputForm)$OutputPackage return x

iBeta(x, y) == kernel(opBeta, [x, y]) idigamma x == kernel(opdigamma, x) iiipolygamma(n, x) == kernel(oppolygamma, [n, x]) iiiBesselJ(x, y) == kernel(opBesselJ, [x, y]) iiiBesselY(x, y) == kernel(opBesselY, [x, y]) iiiBesselI(x, y) == kernel(opBesselI, [x, y]) iiiBesselK(x, y) == kernel(opBesselK, [x, y])

import from Fraction(Integer)

if F has ElementaryFunctionCategory then iAiryAi x == zero?(x) => 1::F/((3::F)^twothirdsGamma(twothirds)) kernel(opAiryAi, x) iAiryAiPrime x == zero?(x) => -1::F/((3::F)^athirdGamma(athird)) kernel(opAiryAiPrime, x) iAiryBi x == zero?(x) => 1::F/((3::F)^asixth*Gamma(twothirds)) kernel(opAiryBi, x) iAiryBiPrime x == zero?(x) => (3::F)^asixth/Gamma(athird) kernel(opAiryBiPrime, x) else iAiryAi x == kernel(opAiryAi, x) iAiryAiPrime x == kernel(opAiryAiPrime, x) iAiryBi x == kernel(opAiryBi, x) iAiryBiPrime x == kernel(opAiryBiPrime, x)

if F has ElementaryFunctionCategory then iLambertW(x) == zero?(x) => 0 x = exp(1$F) => 1$F x = -exp(-1$F) => -1$F kernel(opLambertW, x) else iLambertW(x) == zero?(x) => 0 kernel(opLambertW, x)

if F has ElementaryFunctionCategory then if F has LiouvillianFunctionCategory then iiPolylog(s, x) == s = 1 => -log(1 - x) s = 2::F => dilog(1 - x) kernel(opPolylog, [s, x]) else iiPolylog(s, x) == s = 1 => -log(1 - x) kernel(opPolylog, [s, x]) else iiPolylog(s, x) == kernel(opPolylog, [s, x])

iPolylog(l) == iiPolylog(first l, second l)

iWeierstrassP(g2, g3, x) == kernel(opWeierstrassP, [g2, g3, x]) iWeierstrassPPrime(g2, g3, x) == kernel(opWeierstrassPPrime, [g2, g3, x])

iWeierstrassSigma(g2, g3, x) == x = 0 => 0 kernel(opWeierstrassSigma, [g2, g3, x])

iWeierstrassZeta(g2, g3, x) == kernel(opWeierstrassZeta, [g2, g3, x])

-- Could put more conditional special rules for other functions here

if R has abs : R -> R then import from Polynomial R iiabs x == (r := retractIfCan(x)@Union(Fraction Polynomial R, "failed")) case "failed" => iabs x f := r::Fraction Polynomial R (a := retractIfCan(numer f)@Union(R, "failed")) case "failed" or (b := retractIfCan(denom f)@Union(R,"failed")) case "failed" => iabs x abs(a::R)::F / abs(b::R)::F else if F has RadicalCategory and R has conjugate : R -> R then iiabs x == (r := retractIfCan(x)@Union(R, "failed")) case "failed" => iabs x sqrt( (r::R*conjugate(r::R))::F) else iiabs x == iabs x

if R has SpecialFunctionCategory then iiGamma x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iGamma x Gamma(r::R)::F

iiBeta l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iBeta(first l, second l) Beta(r::R, s::R)::F

iidigamma x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => idigamma x digamma(r::R)::F

iipolygamma l == (s := retractIfCan(first l)@Union(R,"failed")) case "failed" or (r := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiipolygamma(first l, second l) polygamma(s::R, r::R)::F

iiBesselJ l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselJ(first l, second l) besselJ(r::R, s::R)::F

iiBesselY l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselY(first l, second l) besselY(r::R, s::R)::F

iiBesselI l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselI(first l, second l) besselI(r::R, s::R)::F

iiBesselK l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselK(first l, second l) besselK(r::R, s::R)::F

iiAiryAi x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryAi x airyAi(r::R)::F

iiAiryAiPrime x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryAiPrime x airyAiPrime(r::R)::F

iiAiryBi x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryBi x airyBi(r::R)::F

iiAiryBi x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryBiPrime x airyBiPrime(r::R)::F

else if R has RetractableTo Integer then iiGamma x == (r := retractIfCan(x)@Union(Integer, "failed")) case Integer and (r::Integer >= 1) => factorial(r::Integer - 1)::F iGamma x else iiGamma x == iGamma x

iiBeta l == iBeta(first l, second l) iidigamma x == idigamma x iipolygamma l == iiipolygamma(first l, second l) iiBesselJ l == iiiBesselJ(first l, second l) iiBesselY l == iiiBesselY(first l, second l) iiBesselI l == iiiBesselI(first l, second l) iiBesselK l == iiiBesselK(first l, second l) iiAiryAi x == iAiryAi x iiAiryAiPrime x == iAiryAiPrime x iiAiryBi x == iAiryBi x iiAiryBiPrime x == iAiryBiPrime x

iiWeierstrassP l == iWeierstrassP(first l, second l, third l) iiWeierstrassPPrime l == iWeierstrassPPrime(first l, second l, third l) iiWeierstrassSigma l == iWeierstrassSigma(first l, second l, third l) iiWeierstrassZeta l == iWeierstrassZeta(first l, second l, third l)

-- Default behaviour is to build a kernel evaluate(opGamma, iiGamma)$BasicOperatorFunctions1(F) evaluate(opabs, iiabs)$BasicOperatorFunctions1(F) evaluate(opconjugate, iiconjugate)$BasicOperatorFunctions1(F) -- evaluate(opGamma2 , iiGamma2 )$BasicOperatorFunctions1(F) evaluate(opBeta , iiBeta )$BasicOperatorFunctions1(F) evaluate(opdigamma , iidigamma )$BasicOperatorFunctions1(F) evaluate(oppolygamma , iipolygamma)$BasicOperatorFunctions1(F) evaluate(opBesselJ , iiBesselJ )$BasicOperatorFunctions1(F) evaluate(opBesselY , iiBesselY )$BasicOperatorFunctions1(F) evaluate(opBesselI , iiBesselI )$BasicOperatorFunctions1(F) evaluate(opBesselK , iiBesselK )$BasicOperatorFunctions1(F) evaluate(opAiryAi , iiAiryAi )$BasicOperatorFunctions1(F) evaluate(opAiryAiPrime, iiAiryAiPrime)$BasicOperatorFunctions1(F) evaluate(opAiryBi , iiAiryBi )$BasicOperatorFunctions1(F) evaluate(opAiryBiPrime, iiAiryBiPrime)$BasicOperatorFunctions1(F) evaluate(opLambertW, iLambertW)$BasicOperatorFunctions1(F) evaluate(opPolylog, iPolylog)$BasicOperatorFunctions1(F) evaluate(opWeierstrassP, iiWeierstrassP)$BasicOperatorFunctions1(F) evaluate(opWeierstrassPPrime, iiWeierstrassPPrime)$BasicOperatorFunctions1(F) evaluate(opWeierstrassSigma, iiWeierstrassSigma)$BasicOperatorFunctions1(F) evaluate(opWeierstrassZeta, iiWeierstrassZeta)$BasicOperatorFunctions1(F) evaluate(opHypergeometricF, iiHypergeometricF)$BasicOperatorFunctions1(F) evaluate(opMeijerG, iiMeijerG)$BasicOperatorFunctions1(F)

diff1(op : OP, n : F, x : F) : F == dm := dummy kernel(opdiff, [op [dm, x], dm, n])

iBesselJ(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselJ, n, x) + differentiate(x, t) ahalf * (besselJ (n-1, x) - besselJ (n+1, x))

iBesselY(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselY, n, x) + differentiate(x, t) ahalf * (besselY (n-1, x) - besselY (n+1, x))

iBesselI(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselI, n, x) + differentiate(x, t) ahalf * (besselI (n-1, x) + besselI (n+1, x))

iBesselK(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselK, n, x) - differentiate(x, t) ahalf * (besselK (n-1, x) + besselK (n+1, x))

dPolylog(l : List F, t : SE) : F == s := first l; x := second l differentiate(s, t)diff1(opPolylog, s, x) + differentiate(x, t)polylog(s-1, x)/x

ipolygamma(l : List F, x : SE) : F == import from List(Symbol) member?(x, variables first l) => error "cannot differentiate polygamma with respect to the first argument" n := first l; y := second l differentiate(y, x)polygamma(n+1, y) iBetaGrad1(l : List F) : F == x := first l; y := second l Beta(x, y)(digamma x - digamma(x+y)) iBetaGrad2(l : List F) : F == x := first l; y := second l Beta(x, y)*(digamma y - digamma(x+y))

if F has ElementaryFunctionCategory then iGamma2(l : List F, t : SE) : F == a := first l; x := second l differentiate(a, t)diff1(opGamma2, a, x) - differentiate(x, t) x ^ (a - 1) * exp(-x) setProperty(opGamma2, SPECIALDIFF, iGamma2@((List F, SE)->F) pretend None)

inGamma2(li : List INP) : INP == convert cons(convert('Gamma), li)

input(opGamma2, inGamma2@((List INP) -> INP))

dLambertW(x : F) : F == lw := lambertW(x) lw/(x*(1+lw))

iWeierstrassPGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (weierstrassPPrime(g2, g3, x)(-9ahalfg3 weierstrassZeta(g2, g3, x) + afourthg2^2x) - 9g3wp^2 + ahalfg2^2wp + 3ahalfg2g3)/delta

iWeierstrassPGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (weierstrassPPrime(g2, g3, x)(3g2weierstrassZeta(g2, g3, x) - 9ahalfg3x) + 6g2wp^2 - 9g3*wp-g2^2)/delta

iWeierstrassPGrad3(l : List F) : F == weierstrassPPrime(first l, second l, third l)

iWeierstrassPPrimeGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) wpp := weierstrassPPrime(g2, g3, x) wpp2 := 6wp^2 - ahalfg2 (wpp2(-9ahalfg3weierstrassZeta(g2, g3, x) + afourthg2^2x) + wpp(9ahalfg3wp + afourthg2^2) - 18g3wpwpp + ahalfg2^2*wpp)/delta

iWeierstrassPPrimeGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) wpp := weierstrassPPrime(g2, g3, x) wpp2 := 6wp^2 - ahalfg2 (wpp2(3g2weierstrassZeta(g2, g3, x) - 9ahalfg3x) + wpp(-3g2wp - 9ahalfg3) + 12g2wpwpp - 9g3*wpp)/delta

iWeierstrassPPrimeGrad3(l : List F) : F == g2 := first l 6weierstrassP(g2, second l, third l)^2 - ahalfg2

iWeierstrassSigmaGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 ws := weierstrassSigma(g2, g3, x) wz := weierstrassZeta(g2, g3, x) wsp := wzws wsp2 := - weierstrassP(g2, g3, x)ws + wz^2ws afourth(-9g3wsp2 - g2^2ws - 3afourthg2g3x^2ws + g2^2x*wsp)/delta

iWeierstrassSigmaGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 ws := weierstrassSigma(g2, g3, x) wz := weierstrassZeta(g2, g3, x) wsp := wzws wsp2 := - weierstrassP(g2, g3, x)ws + wz^2ws ahalf(3g2wsp2 + 9g3ws + afourthg2^2x^2ws - 9g3x*wsp)/delta

iWeierstrassSigmaGrad3(l : List F) : F == g2 := first l g3 := second l x := third l weierstrassZeta(g2, g3, x)*weierstrassSigma(g2, g3, x)

iWeierstrassZetaGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (ahalfweierstrassZeta(g2, g3, x)(9g3wp + ahalfg2^2) - ahalfg2x(ahalfg2wp+3afourthg3) + 9afourthg3weierstrassPPrime(g2, g3, x))/delta

iWeierstrassZetaGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (-3weierstrassZeta(g2, g3, x)(g2wp + 3ahalfg3) + ahalfx(9g3wp + ahalfg2^2) - 3ahalfg2weierstrassPPrime(g2, g3, x))/delta

iWeierstrassZetaGrad3(l : List F) : F == -weierstrassP(first l, second l, third l)

OF ==> OutputForm SEX ==> SExpression NNI ==> NonNegativeInteger

dconjugate(lo : List OF) : OF == overbar lo.1 display(opconjugate,dconjugate)

if F has RetractableTo(Integer) then get_int_listf : List F -> List Integer get_int_listo : (Integer, List OF) -> List Integer get_int_listi : (Integer, List INP) -> List Integer

get_int_listf(lf : List F) : List Integer == map(z +-> retract(z)@Integer, lf)$ListFunctions2(F, Integer)

replace_i(lp : List F, v : F, i : NNI) : List F == concat(first(lp, (i - 1)::NNI), cons(v, rest(lp, i)))

iiHypergeometricF(l) == n := #l z := l(n-2) if z = 0 then nn := (n - 2)::NNI pq := rest(l, nn) pqi := get_int_listf(pq) p := first(pqi) q := first(rest(pqi)) p <= q + 1 => return 1 kernel(opHypergeometricF, l)

idvsum(op : BasicOperator, n : Integer, l : List F, x : Symbol) : F == res : F := 0 for i in 1..n for a in l repeat dm := dummy nl := replace_i(l, dm, i) res := res + differentiate(a, x)*kernel(opdiff, [op nl, dm, a]) res

dvhypergeom(l : List F, x : Symbol) : F == n := #l nn := (n - 2)::NNI pq := rest(l, nn) pqi := get_int_listf(pq) ol := l l := first(l, nn) l1 := reverse(l) z := first(l1) p := first(pqi) q := first(rest(pqi)) aprod := 1@F nl := []@(List F) for i in 1..p repeat a := first(l) nl := cons(a + 1, nl) aprod := aprod a l := rest(l) bprod := 1@F for i in 1..q repeat b := first(l) nl := cons(b + 1, nl) bprod := bprod b l := rest(l) nl0 := reverse!(nl) nl1 := cons(z, pq) nl := concat(nl0, nl1) aprod := aprod/bprod idvsum(opHypergeometricF, nn - 1, ol, x) + differentiate(z, x)aprodopHypergeometricF(nl)

add_pairs_to_list(lp : List List F, l : List F) : List F == for p in lp repeat #p ~= 2 => error "not a list of pairs" l := cons(p(2), cons(p(1), l)) l

dvmeijer(l : List F, x : Symbol) : F == n := #l nn := (n - 4)::NNI l0 := l nl := rest(l, nn) nli := get_int_listf(nl) l := first(l, nn) l1 := reverse(l) z := first(l1) n1 := first(nli) n2 := nli(2) a := first l sign : F := 1 if n1 > 0 or n2 > 0 then na := a - 1 if n1 = 0 then sign := -1 l2 := cons(na, rest l) else na := a if nli(3) > 0 then sign := -1 l2 := cons(a + 1, rest l) nm : F := opMeijerG(concat(l2, nl)) om : F := opMeijerG(l0) idvsum(opMeijerG, nn - 1, l0, x) + differentiate(z, x)(signnm + na*om)/z

get_if_list(n : Integer, lf : List INP) : List List INP == a := []@(List INP) for i in 1..n repeat a := cons(first(lf), a) lf := rest(lf) a := cons(convert('construct), reverse!(a)) [a, lf]

get_if_lists(ln : List Integer, lf : List INP) : List List INP == rl := []@(List List INP) for n in ln repeat al := get_if_list(n, lf) rl := cons(first(al), rl) lf := first(rest(al)) rl := reverse!(rl) cons(lf, rl)

get_int_listi(n : Integer, lo : List INP) : List Integer == n0 := (#lo - n)::NNI lo := rest(lo, n0) rl := []@(List Integer) for i in 1..n repeat p := integer(first(lo) pretend SEX)$SEX rl := cons(p, rl) lo := rest(lo) rl := reverse!(rl) rl

get_of_list(n : Integer, lo : List OF) : List List OF == a := []@(List OF) for i in 1..n repeat a := cons(first(lo), a) lo := rest(lo) a := reverse!(a) [a, lo]

get_of_lists(ln : List Integer, lo : List OF) : List List OF == rl := []@(List List OF) for n in ln repeat al := get_of_list(n, lo) rl := cons(first(al), rl) lo := first(rest(al)) rl := reverse!(rl) cons(lo, rl)

get_int_listo(n : Integer, lo : List OF) : List Integer == n0 := (#lo - n)::NNI lo := rest(lo, n0) rl := []@(List Integer) for i in 1..n repeat p := integer(first(lo) pretend SEX)$SEX rl := cons(p, rl) lo := rest(lo) rl := reverse!(rl) rl

dhyper0(op : OF, lo : List OF) : OF == n0 := (#lo - 2)::NNI pql := get_int_listo(2, lo) lo := first(lo, n0) al := get_of_lists(pql, lo) lo := first(al) al := rest(al) a := first al b := first(rest(al)) z := first(lo) prefix(op, [bracket a, bracket b, z])

dhyper(lo : List OF) : OF == dhyper0(hypergeometricF, lo)

ddhyper(lo : List OF) : OF == dhyper0(first lo, rest lo)

dmeijer0(op : OF, lo : List OF) : OF == n0 := (#lo - 4)::NNI nl := get_int_listo(4, lo) lo := first(lo, n0) al := get_of_lists(nl, lo) lo := first(al) al := rest(al) z := first(lo) prefix(op, concat( map(bracket, al)$ListFunctions2(List OF, OF), [z]))

dmeijer(lo : List OF) : OF == dmeijer0('meijerG::OF, lo)

ddmeijer(lo : List OF) : OF == dmeijer0(first lo, rest lo)

setProperty(opHypergeometricF, '%diffDisp, ddhyper@(List OF -> OF) pretend None) setProperty(opMeijerG, '%diffDisp, ddmeijer@(List OF -> OF) pretend None) display(opHypergeometricF, dhyper) display(opMeijerG, dmeijer) setProperty(opHypergeometricF, SPECIALDIFF, dvhypergeom@((List F, Symbol)->F) pretend None) setProperty(opMeijerG, SPECIALDIFF, dvmeijer@((List F, Symbol)->F) pretend None)

inhyper(lf : List INP) : INP == pqi := get_int_listi(2, lf) al := get_if_lists(pqi, lf) lf := first(al) al := rest(al) a := first al ai : INP := convert(a) b := first(rest(al)) bi : INP := convert(b) zi := first(lf) li : List INP := [convert('hypergeometricF), ai, bi, zi] convert(li)

input(opHypergeometricF, inhyper@((List INP) -> INP))

inmeijer(lf : List INP) : INP == pqi := get_int_listi(4, lf) al := get_if_lists(pqi, lf) lf := first(al) al := rest(al) a := first al ai : INP := convert(a) al := rest(al) b := first(al) bi : INP := convert(b) al := rest(al) c := first(al) ci : INP := convert(c) al := rest(al) d := first(al) di : INP := convert(d) zi := first(lf) li : List INP := [convert('meijerG), ai, bi, ci, di, zi] convert(li)

input(opMeijerG, inmeijer@((List INP) -> INP))

else iiHypergeometricF(l) == kernel(opHypergeometricF, l)

iiMeijerG(l) == kernel(opMeijerG, l)

d_eis(x : F) : F == -kernel(op_eis, x) + 1/x

if F has TranscendentalFunctionCategory and F has RadicalCategory then

d_erfs(x : F) : F == 2xkernel(op_erfs, x) - 2::F/sqrt(pi())

d_erfis(x : F) : F == -2xkernel(op_erfis, x) + 2::F/sqrt(pi())

derivative(op_erfs, d_erfs) derivative(op_erfis, d_erfis)

derivative(opabs, (x : F) : F +-> conjugate(x)inv(2abs(x))) derivative(opconjugate, (x : F) : F +-> 0) derivative(opGamma, (x : F) : F +-> digamma(x)*Gamma(x)) derivative(op_log_gamma, (x : F) : F +-> digamma(x)) derivative(opBeta, [iBetaGrad1, iBetaGrad2]) derivative(opdigamma, (x : F) : F +-> polygamma(1, x)) derivative(op_eis, d_eis) derivative(opAiryAi, (x : F) : F +-> airyAiPrime(x)) derivative(opAiryAiPrime, (x : F) : F +-> xairyAi(x)) derivative(opAiryBi, (x : F) : F +-> airyBiPrime(x)) derivative(opAiryBiPrime, (x : F) : F +-> xairyBi(x)) derivative(opLambertW, dLambertW) derivative(opWeierstrassP, [iWeierstrassPGrad1, iWeierstrassPGrad2, iWeierstrassPGrad3]) derivative(opWeierstrassPPrime, [iWeierstrassPPrimeGrad1, iWeierstrassPPrimeGrad2, iWeierstrassPPrimeGrad3]) derivative(opWeierstrassSigma, [iWeierstrassSigmaGrad1, iWeierstrassSigmaGrad2, iWeierstrassSigmaGrad3]) derivative(opWeierstrassZeta, [iWeierstrassZetaGrad1, iWeierstrassZetaGrad2, iWeierstrassZetaGrad3])

setProperty(oppolygamma, SPECIALDIFF, ipolygamma@((List F, SE)->F) pretend None) setProperty(opBesselJ, SPECIALDIFF, iBesselJ@((List F, SE)->F) pretend None) setProperty(opBesselY, SPECIALDIFF, iBesselY@((List F, SE)->F) pretend None) setProperty(opBesselI, SPECIALDIFF, iBesselI@((List F, SE)->F) pretend None) setProperty(opBesselK, SPECIALDIFF, iBesselK@((List F, SE)->F) pretend None) setProperty(opPolylog, SPECIALDIFF, dPolylog@((List F, SE)->F) pretend None) \end{spad}

Testing Display \begin{axiom} conjugate(_\sigma[_\alpha]) )set output algebra on conjugate(x) conjugate(a+%i*b) )set output algebra off \end{axiom}

Assertions \begin{axiom} test(conjugate abs x = abs x) test(abs conjugate x = abs x) test(conjugate conjugate x = x) test(conjugate(a+b)=conjugate(a)+conjugate(b)) test(conjugate(ab)=conjugate(a)conjugate(b)) test(abs(2::Expression Integer)=2) test(abs(-2::Expression Integer)=2) test(abs(3.1415::Expression Float)=3.1415) test(abs(1$Expression Complex Integer)=1) test(abs((1+%i)::Expression Complex Float)=abs(1+%i)) c:=(1+%i)::Expression Complex Integer test(abs(c)=sqrt(cconjugate(c))) test(differentiate(conjugate(x),x)=0) differentiate(abs(x),x)=differentiate(sqrt(xconjugate(x)),x) test(differentiate(abs(x)^2,x)=conjugate(x)) \end{axiom}

Roots of Unity \begin{axiom} test(conjugate(sqrt(-1))::AlgebraicNumber = -sqrt(-1)) test(conjugate(sqrt(-1))+sqrt(-1)=0) conjugate complexNumeric nthRoot(-1,3) complexNumeric conjugate nthRoot(-1,3) conjugate sqrt(complex(-1,0)) \end{axiom}

General roots \begin{axiom} norm(conjugate complexNumeric sqrt(-1+sqrt(-1))-complexNumeric conjugate sqrt(-1+sqrt(-1)))<10.0^(-precision()/2) norm(conjugate complexNumeric sqrt(-1+%i)-complexNumeric conjugate sqrt(-1+%i))<10.0^(-precision()/2) \end{axiom}

Waldek's examples --Bill Page, Mon, 08 Sep 2014 22:09:15 +0000 reply
\begin{axiom} )clear completely )lib FSPECX \end{axiom}

On 8 September 2014 15:15, Waldek Hebisch wrote:

Definitions you gave are debatable. In particular D(conjugate(x), x) = 0 may lead to troubles. For example, D(conjugate(conjugate(x)), x) should be equal to D(x, x) = 1 regardless how we compute it. Consider: \begin{axiom} D(conjugate(conjugate(x)), x) y := operator 'y conjugate(y(x)) D(conjugate(y(x)), x) \end{axiom} substituting conjugate(x) for y(x) and derivative of conjugate(x) for derivative of y(x) should give derivative of conjugate(conjugate(x)).

If what I wrote looks like nitpicking let me note that FriCAS blindly applies rather complex transformations. For example during integration internal form is quite different than user input and final result. Inconsistency in derivative rule will bring all kinds of nasty bugs.

We probably can leave derivative of conjugate unevaluated. But even that needs some thought to make sure there are no inconsistency. Signaling error would be safe from correctness point of view, but would significantly limit usefulness - code handling expressions assumes that it can freely compute derivatives, so when dealing with conjugate we would routinely get errors deep inside library code.

On On 11 September 2014 07:28, Waldek Hebisch wrote:

You clearly allow non-holomorphic arguments to conjugate, otherwise conjugate(conjugate(x)) would be illegal. Rather, you assume that conjugate will be always pushed onto variables/parameters and that in context of differentiation we will substitute only holomorphic functions for variables. But in other context you allow non-holomorphic things. Pushing conjugate to variables in itself is debatable:

\begin{axiom} conjugate(log(-1)) eval(conjugate(log(x)), x = -1) \end{axiom}

you get different result depending on when exactly we plug in constant argument to logarithm.

You have: \begin{axiom} conjugate(log(conjugate(x) + x)) \end{axiom} but when real part of x is negative we are on the conventional branch cut of logarithm and some folks may be upset by such simplification (not that unlike previous example where problem set was of lower dimension here we have problem on open set).

The reason that I wanted D(conjugate(x), x) = 0 is to have D correspond to the first Wirtinger derivative that I mentioned in another email chain. It is not clear to me that this could result in nasty bugs. Maybe this is possible in the cases where the chain rule is applied since in that case the conjugate Wirtinger derivative would be required.

But chain rule is applied automatically when computing derivatives. Consider: \begin{axiom} D(abs(x + conjugate(x)), x) \end{axiom} complex (Wirtinger) derivative of the above is twice of the above.

Actually, it seems that even leaving derivatives of conjugate unevaluated we need to be careful. Namely, given a differential Ring R_0 and any formal operation f we can form differential ring R_1 where f and all its derivative remain unevaluated. But we want to have some simplification so we divide R_1 by appropriate equivalence relation. For the result to be a differential ring equivalence classes should be cosets of a differential ideal, in particular set of elements of R_1 equivalent to 0 should be a differential ideal. So we need to make sure that simplifications are consistent with derivative.

\begin{axiom} )clear completely )lib FSPECX \end{axiom}

I would like to collect some examples of such errors.

With your current code: \begin{axiom} normalize(exp(conjugate(x)+x)+exp(x) + exp(conjugate(x))) \end{axiom}

With derivative of conjugate changes to error: \begin{axiom} integrate(exp(conjugate(y)*x), x) \end{axiom}

\begin{axiom} normalize(exp(conjugate(y)*x)+exp(x)) \end{axiom}

\begin{axiom} limit(exp(conjugate(y)*x), x=%plusInfinity) \end{axiom}

\begin{axiom} series(conjugate(x), x=1) \end{axiom}

conjugate(log(conjugate(x) + x)) --Bill Page, Sat, 13 Sep 2014 00:27:35 +0000 reply
\begin{axiom} )lib FSPECX \end{axiom}

\begin{axiom} conjugate(log(conjugate(x) + x)) x:=(1+%i) x+conjugate(x) conjugate(log(conjugate(x) + x)) x:=(-1+%i) x+conjugate(x) conjugate(log(conjugate(x) + x)) \end{axiom}

Numeric result differs by 2pi --Bill page, Tue, 16 Sep 2014 21:54:20 +0000 reply
\begin{axiom} )lib FSPECX \end{axiom}

\begin{axiom} conjugate(log(complex(-1.0,0))) log(conjugate(complex(-1.0,0))) \end{axiom}


Some or all expressions may not have rendered properly, because Axiom returned the following error:
Error: export HOME=/var/zope2/var/LatexWiki; ulimit -t 600; export LD_LIBRARY_PATH=/usr/local/lib/fricas/target/x86_64-linux-gnu/lib; LANG=en_US.UTF-8 /usr/local/lib/fricas/target/x86_64-linux-gnu/bin/fricas -nosman < /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/6353881970213761161-25px.axm
Heap exhausted during garbage collection: 0 bytes available, 16 requested.
        Immobile Object Counts
 Gen layout fdefn symbol   code  Boxed   Cons    Raw   Code  SmMix  Mixed  LgRaw LgCode  LgMix Waste%       Alloc        Trig   Dirty GCs Mem-age
  3      0      0      0      0      0  20390      2      0      2      3      0      0      0    0.8   662853872   418541194   20397   1  1.4502
  4      0    113      0    420     10  11421     22      1      5     10      0      0      0    0.8   372707744     2000000    9755   0  0.1511
  5      0      0      0      0      0      0      0      0      0      0      0      0      0    0.0           0     2000000       0   0  0.0000
  6    750  25588  26806  25955    472    217     66      5     51     16      0      0     75    2.4    28859328     2000000      16   0  0.0000
Tot    750  25701  26806  26375    482  32028     90      6     58     29      0      0     75    0.9  1064420944 [99.1% of 1073741824 max]
GC control variables:
   GC-INHIBIT = true
   GC-PENDING = true
   STOP-FOR-GC-PENDING = false
fatal error encountered in SBCL pid 698417 tid 698417:
Heap exhausted, game over.

Error opening /dev/tty: No such device or address

Checking for foreign routines FRICAS="/usr/local/lib/fricas/target/x86_64-linux-gnu" spad-lib="/usr/local/lib/fricas/target/x86_64-linux-gnu/lib/libspad.so" foreign routines found openServer result -2 FriCAS Computer Algebra System Version: FriCAS 1.3.10 built with sbcl 2.2.9.debian Timestamp: Wed 10 Jan 02:19:45 CET 2024 ----------------------------------------------------------------------------- Issue )copyright to view copyright notices. Issue )summary for a summary of useful system commands. Issue )quit to leave FriCAS and return to shell. -----------------------------------------------------------------------------

(1) -> (1) -> (1) -> (1) -> (1) -> (1) -> <spad> )abbrev package FSPECX FunctionalSpecialFunction )boot $tryRecompileArguments := nil ++ Provides the special functions ++ Author: Manuel Bronstein ++ Date Created: 18 Apr 1989 ++ Date Last Updated: 4 October 1993 ++ Description: Provides some special functions over an integral domain. ++ Keywords: special, function. FunctionalSpecialFunction(R, F) : Exports == Implementation where R : Join(Comparable, IntegralDomain) F : FunctionSpace R

OP ==> BasicOperator K ==> Kernel F SE ==> Symbol SPECIALDIFF ==> '%specialDiff

Exports ==> with belong? : OP -> Boolean ++ belong?(op) is true if op is a special function operator; operator : OP -> OP ++ operator(op) returns a copy of op with the domain-dependent ++ properties appropriate for F; ++ error if op is not a special function operator abs : F -> F ++ abs(f) returns the absolute value operator applied to f conjugate: F -> F ++ conjugate(f) returns the conjugate value operator applied to f Gamma : F -> F ++ Gamma(f) returns the formal Gamma function applied to f Gamma : (F, F) -> F ++ Gamma(a, x) returns the incomplete Gamma function applied to a and x Beta : (F, F) -> F ++ Beta(x, y) returns the beta function applied to x and y digamma : F->F ++ digamma(x) returns the digamma function applied to x polygamma : (F, F) ->F ++ polygamma(x, y) returns the polygamma function applied to x and y besselJ : (F, F) -> F ++ besselJ(x, y) returns the besselj function applied to x and y besselY : (F, F) -> F ++ besselY(x, y) returns the bessely function applied to x and y besselI : (F, F) -> F ++ besselI(x, y) returns the besseli function applied to x and y besselK : (F, F) -> F ++ besselK(x, y) returns the besselk function applied to x and y airyAi : F -> F ++ airyAi(x) returns the Airy Ai function applied to x airyAiPrime : F -> F ++ airyAiPrime(x) returns the derivative of Airy Ai function applied to x airyBi : F -> F ++ airyBi(x) returns the Airy Bi function applied to x airyBiPrime : F -> F ++ airyBiPrime(x) returns the derivative of Airy Bi function applied to x lambertW : F -> F ++ lambertW(x) is the Lambert W function at x polylog : (F, F) -> F ++ polylog(s, x) is the polylogarithm of order s at x weierstrassP : (F, F, F) -> F ++ weierstrassP(g2, g3, x) weierstrassPPrime : (F, F, F) -> F ++ weierstrassPPrime(g2, g3, x) weierstrassSigma : (F, F, F) -> F ++ weierstrassSigma(g2, g3, x) weierstrassZeta : (F, F, F) -> F ++ weierstrassZeta(g2, g3, x) -- weierstrassPInverse : (F, F, F) -> F -- ++ weierstrassPInverse(g2, g3, z) is the inverse of Weierstrass -- ++ P function, defined by the formula -- ++ \spad{weierstrassP(g2, g3, weierstrassPInverse(g2, g3, z)) = z} whittakerM : (F, F, F) -> F ++ whittakerM(k, m, z) is the Whittaker M function whittakerW : (F, F, F) -> F ++ whittakerW(k, m, z) is the Whittaker W function angerJ : (F, F) -> F ++ angerJ(v, z) is the Anger J function weberE : (F, F) -> F ++ weberE(v, z) is the Weber E function struveH : (F, F) -> F ++ struveH(v, z) is the Struve H function struveL : (F, F) -> F ++ struveL(v, z) is the Struve L function defined by the formula ++ \spad{struveL(v, z) = -%i^exp(-v%pi%i/2)struveH(v, %iz)} hankelH1 : (F, F) -> F ++ hankelH1(v, z) is first Hankel function (Bessel function of ++ the third kind) hankelH2 : (F, F) -> F ++ hankelH2(v, z) is the second Hankel function (Bessel function of ++ the third kind) lommelS1 : (F, F, F) -> F ++ lommelS1(mu, nu, z) is the Lommel s function lommelS2 : (F, F, F) -> F ++ lommelS2(mu, nu, z) is the Lommel S function kummerM : (F, F, F) -> F ++ kummerM(a, b, z) is the Kummer M function kummerU : (F, F, F) -> F ++ kummerU(a, b, z) is the Kummer U function legendreP : (F, F, F) -> F ++ legendreP(nu, mu, z) is the Legendre P function legendreQ : (F, F, F) -> F ++ legendreQ(nu, mu, z) is the Legendre Q function kelvinBei : (F, F) -> F ++ kelvinBei(v, z) is the Kelvin bei function defined by equality ++ \spad{kelvinBei(v, z) = imag(besselJ(v, exp(3%pi%i/4)z))} ++ for z and v real kelvinBer : (F, F) -> F ++ kelvinBer(v, z) is the Kelvin ber function defined by equality ++ \spad{kelvinBer(v, z) = real(besselJ(v, exp(3%pi%i/4)z))} ++ for z and v real kelvinKei : (F, F) -> F ++ kelvinKei(v, z) is the Kelvin kei function defined by equality ++ \spad{kelvinKei(v, z) = ++ imag(exp(-v%pi%i/2)besselK(v, exp(%pi%i/4)z))} ++ for z and v real kelvinKer : (F, F) -> F ++ kelvinKer(v, z) is the Kelvin kei function defined by equality ++ \spad{kelvinKer(v, z) = ++ real(exp(-v%pi%i/2)besselK(v, exp(%pi%i/4)z))} ++ for z and v real ellipticK : F -> F ++ ellipticK(m) is the complete elliptic integral of the ++ first kind: \spad{ellipticK(m) = ++ integrate(1/sqrt((1-t^2)(1-mt^2)), t = 0..1)} ellipticE : F -> F ++ ellipticE(m) is the complete elliptic integral of the ++ second kind: \spad{ellipticE(m) = ++ integrate(sqrt(1-mt^2)/sqrt(1-t^2), t = 0..1)} ellipticE : (F, F) -> F ++ ellipticE(z, m) is the incomplete elliptic integral of the ++ second kind: \spad{ellipticE(z, m) = ++ integrate(sqrt(1-mt^2)/sqrt(1-t^2), t = 0..z)} ellipticF : (F, F) -> F ++ ellipticF(z, m) is the incomplete elliptic integral of the ++ first kind : \spad{ellipticF(z, m) = ++ integrate(1/sqrt((1-t^2)(1-mt^2)), t = 0..z)} ellipticPi : (F, F, F) -> F ++ ellipticPi(z, n, m) is the incomplete elliptic integral of ++ the third kind: \spad{ellipticPi(z, n, m) = ++ integrate(1/((1-nt^2)sqrt((1-t^2)(1-mt^2))), t = 0..z)} jacobiSn : (F, F) -> F ++ jacobiSn(z, m) is the Jacobi elliptic sn function, defined ++ by the formula \spad{jacobiSn(ellipticF(z, m), m) = z} jacobiCn : (F, F) -> F ++ jacobiCn(z, m) is the Jacobi elliptic cn function, defined ++ by \spad{jacobiCn(z, m)^2 + jacobiSn(z, m)^2 = 1} and ++ \spad{jacobiCn(0, m) = 1} jacobiDn : (F, F) -> F ++ jacobiDn(z, m) is the Jacobi elliptic dn function, defined ++ by \spad{jacobiDn(z, m)^2 + m*jacobiSn(z, m)^2 = 1} and ++ \spad{jacobiDn(0, m) = 1} jacobiZeta : (F, F) -> F ++ jacobiZeta(z, m) is the Jacobi elliptic zeta function, defined ++ by \spad{D(jacobiZeta(z, m), z) = ++ jacobiDn(z, m)^2 - ellipticE(m)/ellipticK(m)} and ++ \spad{jacobiZeta(0, m) = 0}. jacobiTheta : (F, F) -> F ++ jacobiTheta(q, z) is the third Jacobi Theta function lerchPhi : (F, F, F) -> F ++ lerchPhi(z, s, a) is the Lerch Phi function riemannZeta : F -> F ++ riemannZeta(z) is the Riemann Zeta function charlierC : (F, F, F) -> F ++ charlierC(n, a, z) is the Charlier polynomial hermiteH : (F, F) -> F ++ hermiteH(n, z) is the Hermite polynomial jacobiP : (F, F, F, F) -> F ++ jacobiP(n, a, b, z) is the Jacobi polynomial laguerreL: (F, F, F) -> F ++ laguerreL(n, a, z) is the Laguerre polynomial meixnerM : (F, F, F, F) -> F ++ meixnerM(n, b, c, z) is the Meixner polynomial if F has RetractableTo(Integer) then hypergeometricF : (List F, List F, F) -> F ++ hypergeometricF(la, lb, z) is the generalized hypergeometric ++ function meijerG : (List F, List F, List F, List F, F) -> F ++ meijerG(la, lb, lc, ld, z) is the meijerG function -- Functions below should be local but conditional iiGamma : F -> F ++ iiGamma(x) should be local but conditional; iiabs : F -> F ++ iiabs(x) should be local but conditional; iiconjugate: F -> F ++ iiconjugate(x) should be local but conditional; iiBeta : List F -> F ++ iiBeta(x) should be local but conditional; iidigamma : F -> F ++ iidigamma(x) should be local but conditional; iipolygamma : List F -> F ++ iipolygamma(x) should be local but conditional; iiBesselJ : List F -> F ++ iiBesselJ(x) should be local but conditional; iiBesselY : List F -> F ++ iiBesselY(x) should be local but conditional; iiBesselI : List F -> F ++ iiBesselI(x) should be local but conditional; iiBesselK : List F -> F ++ iiBesselK(x) should be local but conditional; iiAiryAi : F -> F ++ iiAiryAi(x) should be local but conditional; iiAiryAiPrime : F -> F ++ iiAiryAiPrime(x) should be local but conditional; iiAiryBi : F -> F ++ iiAiryBi(x) should be local but conditional; iiAiryBiPrime : F -> F ++ iiAiryBiPrime(x) should be local but conditional; iAiryAi : F -> F ++ iAiryAi(x) should be local but conditional; iAiryAiPrime : F -> F ++ iAiryAiPrime(x) should be local but conditional; iAiryBi : F -> F ++ iAiryBi(x) should be local but conditional; iAiryBiPrime : F -> F ++ iAiryBiPrime(x) should be local but conditional; iiHypergeometricF : List F -> F ++ iiHypergeometricF(l) should be local but conditional; iiPolylog : (F, F) -> F ++ iiPolylog(x, s) should be local but conditional; iLambertW : F -> F ++ iLambertW(x) should be local but conditional;

Implementation ==> add

SPECIAL := 'special

INP ==> InputForm

SPECIALINPUT ==> '%specialInput

iabs : F -> F iGamma : F -> F iBeta : (F, F) -> F idigamma : F -> F iiipolygamma : (F, F) -> F iiiBesselJ : (F, F) -> F iiiBesselY : (F, F) -> F iiiBesselI : (F, F) -> F iiiBesselK : (F, F) -> F iPolylog : List F -> F

iWeierstrassP : (F, F, F) -> F iWeierstrassPPrime : (F, F, F) -> F iWeierstrassSigma : (F, F, F) -> F iWeierstrassZeta : (F, F, F) -> F

iiWeierstrassP : List F -> F iiWeierstrassPPrime : List F -> F iiWeierstrassSigma : List F -> F iiWeierstrassZeta : List F -> F iiMeijerG : List F -> F

opabs := operator('abs)$CommonOperators opconjugate := operator('conjugate)$CommonOperators opGamma := operator('Gamma)$CommonOperators opGamma2 := operator('Gamma2)$CommonOperators opBeta := operator('Beta)$CommonOperators opdigamma := operator('digamma)$CommonOperators oppolygamma := operator('polygamma)$CommonOperators opBesselJ := operator('besselJ)$CommonOperators opBesselY := operator('besselY)$CommonOperators opBesselI := operator('besselI)$CommonOperators opBesselK := operator('besselK)$CommonOperators opAiryAi := operator('airyAi)$CommonOperators opAiryAiPrime := operator('airyAiPrime)$CommonOperators opAiryBi := operator('airyBi)$CommonOperators opAiryBiPrime := operator('airyBiPrime)$CommonOperators opLambertW := operator('lambertW)$CommonOperators opPolylog := operator('polylog)$CommonOperators opWeierstrassP := operator('weierstrassP)$CommonOperators opWeierstrassPPrime := operator('weierstrassPPrime)$CommonOperators opWeierstrassSigma := operator('weierstrassSigma)$CommonOperators opWeierstrassZeta := operator('weierstrassZeta)$CommonOperators opHypergeometricF := operator('hypergeometricF)$CommonOperators opMeijerG := operator('meijerG)$CommonOperators opCharlierC := operator('charlierC)$CommonOperators opHermiteH := operator('hermiteH)$CommonOperators opJacobiP := operator('jacobiP)$CommonOperators opLaguerreL := operator('laguerreL)$CommonOperators opMeixnerM := operator('meixnerM)$CommonOperators op_log_gamma := operator('%logGamma)$CommonOperators op_eis := operator('%eis)$CommonOperators op_erfs := operator('%erfs)$CommonOperators op_erfis := operator('%erfis)$CommonOperators

abs x == opabs x conjugate x == opconjugate x Gamma(x) == opGamma(x) Gamma(a, x) == opGamma2(a, x) Beta(x, y) == opBeta(x, y) digamma x == opdigamma(x) polygamma(k, x)== oppolygamma(k, x) besselJ(a, x) == opBesselJ(a, x) besselY(a, x) == opBesselY(a, x) besselI(a, x) == opBesselI(a, x) besselK(a, x) == opBesselK(a, x) airyAi(x) == opAiryAi(x) airyAiPrime(x) == opAiryAiPrime(x) airyBi(x) == opAiryBi(x) airyBiPrime(x) == opAiryBiPrime(x) lambertW(x) == opLambertW(x) polylog(s, x) == opPolylog(s, x) weierstrassP(g2, g3, x) == opWeierstrassP(g2, g3, x) weierstrassPPrime(g2, g3, x) == opWeierstrassPPrime(g2, g3, x) weierstrassSigma(g2, g3, x) == opWeierstrassSigma(g2, g3, x) weierstrassZeta(g2, g3, x) == opWeierstrassZeta(g2, g3, x) if F has RetractableTo(Integer) then hypergeometricF(a, b, z) == nai := #a nbi := #b z = 0 and nai <= nbi + 1 => 1 p := (#a)::F q := (#b)::F opHypergeometricF concat(concat(a, concat(b, [z])), [p, q])

meijerG(a, b, c, d, z) == n1 := (#a)::F n2 := (#b)::F m1 := (#c)::F m2 := (#d)::F opMeijerG concat(concat(a, concat(b, concat(c, concat(d, [z])))), [n1, n2, m1, m2])

import from List Kernel(F) opdiff := operator(operator('%diff)$CommonOperators)$F dummy ==> new()$SE :: F

ahalf : F := recip(2::F)::F athird : F := recip(3::F)::F afourth : F := recip(4::F)::F asixth : F := recip(6::F)::F twothirds : F := 2athird threehalfs : F := 3ahalf

-- Helpers for partially defined derivatives

grad2(l : List F, t : SE, op : OP, d2 : (F, F) -> F ) : F == x1 := l(1) x2 := l(2) dm := dummy differentiate(x1, t)*kernel(opdiff, [op [dm, x2], dm, x1]) + differentiate(x2, t)*d2(x1, x2)

grad3(l : List F, t : SE, op : OP, d3 : (F, F, F) -> F ) : F == x1 := l(1) x2 := l(2) x3 := l(3) dm1 := dummy dm2 := dummy differentiate(x1, t)*kernel(opdiff, [op [dm1, x2, x3], dm1, x1]) + differentiate(x2, t)*kernel(opdiff, [op [x1, dm2, x3], dm2, x2]) + differentiate(x3, t)*d3(x1, x2, x3)

grad4(l : List F, t : SE, op : OP, d4 : (F, F, F, F) -> F ) : F == x1 := l(1) x2 := l(2) x3 := l(3) x4 := l(4) dm1 := dummy dm2 := dummy dm3 := dummy kd1 := kernel(opdiff, [op [dm1, x2, x3, x4], dm1, x1]) kd2 := kernel(opdiff, [op [x1, dm2, x3, x4], dm2, x2]) kd3 := kernel(opdiff, [op [x1, x2, dm3, x4], dm3, x3]) differentiate(x1, t)kd1 + differentiate(x2, t)kd2 + differentiate(x3, t)kd3 + differentiate(x4, t)d4(x1, x2, x3, x4)

-- handle WeierstrassPInverse

)if false

opWeierstrassPInverse := operator('weierstrassPInverse)$CommonOperators

weierstrassPInverse(g2, g3, z) == opWeierstrassPInverse(g2, g3, z)

eWeierstrassPInverse(g2 : F, g3 : F, z : F) : F == kernel(opWeierstrassPInverse, [g2, g3, z])

elWeierstrassPInverse(l : List F) : F == eWeierstrassPInverse(l(1), l(2), l(3)) evaluate(opWeierstrassPInverse, elWeierstrassPInverse)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eWeierstrassPInverseGrad_g2(l : List F) : F == g2 := l(1) g3 := l(2) z := l(3) error "unimplemented"

eWeierstrassPInverseGrad_g3(l : List F) : F == g2 := l(1) g3 := l(2) z := l(3) error "unimplemented"

eWeierstrassPInverseGrad_z(l : List F) : F == g2 := l(1) g3 := l(2) z := l(3) 1/sqrt(4z^3 - g2z - g3)

derivative(opWeierstrassPInverse, [eWeierstrassPInverseGrad_g2, eWeierstrassPInverseGrad_g3, eWeierstrassPInverseGrad_z])

)endif

-- handle WhittakerM

opWhittakerM := operator('whittakerM)$CommonOperators

whittakerM(k, m, z) == opWhittakerM(k, m, z)

eWhittakerM(k : F, m : F, z : F) : F == kernel(opWhittakerM, [k, m, z])

elWhittakerM(l : List F) : F == eWhittakerM(l(1), l(2), l(3)) evaluate(opWhittakerM, elWhittakerM)$BasicOperatorFunctions1(F)

eWhittakerMGrad_z(k : F, m : F, z : F) : F == (ahalf - k/z)whittakerM(k, m, z) + (ahalf + k + m)whittakerM(k + 1, m, z)/z

dWhittakerM(l : List F, t : SE) : F == grad3(l, t, opWhittakerM, eWhittakerMGrad_z)

setProperty(opWhittakerM, SPECIALDIFF, dWhittakerM@((List F, SE)->F) pretend None)

-- handle WhittakerW

opWhittakerW := operator('whittakerW)$CommonOperators

whittakerW(k, m, z) == opWhittakerW(k, m, z)

eWhittakerW(k : F, m : F, z : F) : F == kernel(opWhittakerW, [k, m, z])

elWhittakerW(l : List F) : F == eWhittakerW(l(1), l(2), l(3)) evaluate(opWhittakerW, elWhittakerW)$BasicOperatorFunctions1(F)

eWhittakerWGrad_z(k : F, m : F, z : F) : F == (ahalf - k/z)*whittakerW(k, m, z) - whittakerW(k + 1, m, z)/z

dWhittakerW(l : List F, t : SE) : F == grad3(l, t, opWhittakerW, eWhittakerWGrad_z)

setProperty(opWhittakerW, SPECIALDIFF, dWhittakerW@((List F, SE)->F) pretend None)

-- handle AngerJ

opAngerJ := operator('angerJ)$CommonOperators

angerJ(v, z) == opAngerJ(v, z)

if F has TranscendentalFunctionCategory then

eAngerJ(v : F, z : F) : F == z = 0 => sin(vpi())/(vpi()) kernel(opAngerJ, [v, z])

elAngerJ(l : List F) : F == eAngerJ(l(1), l(2)) evaluate(opAngerJ, elAngerJ)$BasicOperatorFunctions1(F)

eAngerJGrad_z(v : F, z : F) : F == -angerJ(v + 1, z) + vangerJ(v, z)/z - sin(vpi())/(pi()*z)

dAngerJ(l : List F, t : SE) : F == grad2(l, t, opAngerJ, eAngerJGrad_z)

setProperty(opAngerJ, SPECIALDIFF, dAngerJ@((List F, SE)->F) pretend None)

else

eeAngerJ(l : List F) : F == kernel(opAngerJ, l) evaluate(opAngerJ, eeAngerJ)$BasicOperatorFunctions1(F)

-- handle WeberE

opWeberE := operator('weberE)$CommonOperators

weberE(v, z) == opWeberE(v, z)

if F has TranscendentalFunctionCategory then

eWeberE(v : F, z : F) : F == z = 0 => 2sin(ahalfvpi())^2/(vpi()) kernel(opWeberE, [v, z])

elWeberE(l : List F) : F == eWeberE(l(1), l(2)) evaluate(opWeberE, elWeberE)$BasicOperatorFunctions1(F)

eWeberEGrad_z(v : F, z : F) : F == -weberE(v + 1, z) + vweberE(v, z)/z - (1 - cos(vpi()))/(pi()*z)

dWeberE(l : List F, t : SE) : F == grad2(l, t, opWeberE, eWeberEGrad_z)

setProperty(opWeberE, SPECIALDIFF, dWeberE@((List F, SE)->F) pretend None)

else

eeWeberE(l : List F) : F == kernel(opWeberE, l) evaluate(opWeberE, eeWeberE)$BasicOperatorFunctions1(F)

-- handle StruveH

opStruveH := operator('struveH)$CommonOperators

struveH(v, z) == opStruveH(v, z)

eStruveH(v : F, z : F) : F == kernel(opStruveH, [v, z])

elStruveH(l : List F) : F == eStruveH(l(1), l(2)) evaluate(opStruveH, elStruveH)$BasicOperatorFunctions1(F)

if F has TranscendentalFunctionCategory and F has RadicalCategory then

eStruveHGrad_z(v : F, z : F) : F == -struveH(v + 1, z) + vstruveH(v, z)/z + (ahalfz)^v/(sqrt(pi())*Gamma(v + threehalfs))

dStruveH(l : List F, t : SE) : F == grad2(l, t, opStruveH, eStruveHGrad_z)

setProperty(opStruveH, SPECIALDIFF, dStruveH@((List F, SE)->F) pretend None)

-- handle StruveL

opStruveL := operator('struveL)$CommonOperators

struveL(v, z) == opStruveL(v, z)

eStruveL(v : F, z : F) : F == kernel(opStruveL, [v, z])

elStruveL(l : List F) : F == eStruveL(l(1), l(2)) evaluate(opStruveL, elStruveL)$BasicOperatorFunctions1(F)

if F has TranscendentalFunctionCategory and F has RadicalCategory then

eStruveLGrad_z(v : F, z : F) : F == struveL(v + 1, z) + vstruveL(v, z)/z + (ahalfz)^v/(sqrt(pi())*Gamma(v + threehalfs))

dStruveL(l : List F, t : SE) : F == grad2(l, t, opStruveL, eStruveLGrad_z)

setProperty(opStruveL, SPECIALDIFF, dStruveL@((List F, SE)->F) pretend None)

-- handle HankelH1

opHankelH1 := operator('hankelH1)$CommonOperators

hankelH1(v, z) == opHankelH1(v, z)

eHankelH1(v : F, z : F) : F == kernel(opHankelH1, [v, z])

elHankelH1(l : List F) : F == eHankelH1(l(1), l(2)) evaluate(opHankelH1, elHankelH1)$BasicOperatorFunctions1(F)

eHankelH1Grad_z(v : F, z : F) : F == -hankelH1(v + 1, z) + v*hankelH1(v, z)/z

dHankelH1(l : List F, t : SE) : F == grad2(l, t, opHankelH1, eHankelH1Grad_z)

setProperty(opHankelH1, SPECIALDIFF, dHankelH1@((List F, SE)->F) pretend None)

-- handle HankelH2

opHankelH2 := operator('hankelH2)$CommonOperators

hankelH2(v, z) == opHankelH2(v, z)

eHankelH2(v : F, z : F) : F == kernel(opHankelH2, [v, z])

elHankelH2(l : List F) : F == eHankelH2(l(1), l(2)) evaluate(opHankelH2, elHankelH2)$BasicOperatorFunctions1(F)

eHankelH2Grad_z(v : F, z : F) : F == -hankelH2(v + 1, z) + v*hankelH2(v, z)/z

dHankelH2(l : List F, t : SE) : F == grad2(l, t, opHankelH2, eHankelH2Grad_z)

setProperty(opHankelH2, SPECIALDIFF, dHankelH2@((List F, SE)->F) pretend None)

-- handle LommelS1

opLommelS1 := operator('lommelS1)$CommonOperators

lommelS1(m, v, z) == opLommelS1(m, v, z)

eLommelS1(m : F, v : F, z : F) : F == kernel(opLommelS1, [m, v, z])

elLommelS1(l : List F) : F == eLommelS1(l(1), l(2), l(3)) evaluate(opLommelS1, elLommelS1)$BasicOperatorFunctions1(F)

eLommelS1Grad_z(m : F, v : F, z : F) : F == -vlommelS1(m, v, z)/z + (m + v - 1)lommelS1(m - 1, v - 1, z)

dLommelS1(l : List F, t : SE) : F == grad3(l, t, opLommelS1, eLommelS1Grad_z)

setProperty(opLommelS1, SPECIALDIFF, dLommelS1@((List F, SE)->F) pretend None)

-- handle LommelS2

opLommelS2 := operator('lommelS2)$CommonOperators

lommelS2(mu, nu, z) == opLommelS2(mu, nu, z)

eLommelS2(mu : F, nu : F, z : F) : F == kernel(opLommelS2, [mu, nu, z])

elLommelS2(l : List F) : F == eLommelS2(l(1), l(2), l(3)) evaluate(opLommelS2, elLommelS2)$BasicOperatorFunctions1(F)

eLommelS2Grad_z(m : F, v : F, z : F) : F == -vlommelS2(m, v, z)/z + (m + v - 1)lommelS2(m - 1, v - 1, z)

dLommelS2(l : List F, t : SE) : F == grad3(l, t, opLommelS2, eLommelS2Grad_z)

setProperty(opLommelS2, SPECIALDIFF, dLommelS2@((List F, SE)->F) pretend None)

-- handle KummerM

opKummerM := operator('kummerM)$CommonOperators

kummerM(mu, nu, z) == opKummerM(mu, nu, z)

eKummerM(a : F, b : F, z : F) : F == z = 0 => 1 kernel(opKummerM, [a, b, z])

elKummerM(l : List F) : F == eKummerM(l(1), l(2), l(3)) evaluate(opKummerM, elKummerM)$BasicOperatorFunctions1(F)

eKummerMGrad_z(a : F, b : F, z : F) : F == ((z + a - b)kummerM(a, b, z)+(b - a)kummerM(a - 1, b, z))/z

dKummerM(l : List F, t : SE) : F == grad3(l, t, opKummerM, eKummerMGrad_z)

setProperty(opKummerM, SPECIALDIFF, dKummerM@((List F, SE)->F) pretend None)

-- handle KummerU

opKummerU := operator('kummerU)$CommonOperators

kummerU(a, b, z) == opKummerU(a, b, z)

eKummerU(a : F, b : F, z : F) : F == kernel(opKummerU, [a, b, z])

elKummerU(l : List F) : F == eKummerU(l(1), l(2), l(3)) evaluate(opKummerU, elKummerU)$BasicOperatorFunctions1(F)

eKummerUGrad_z(a : F, b : F, z : F) : F == ((z + a - b)*kummerU(a, b, z) - kummerU(a - 1, b, z))/z

dKummerU(l : List F, t : SE) : F == grad3(l, t, opKummerU, eKummerUGrad_z)

setProperty(opKummerU, SPECIALDIFF, dKummerU@((List F, SE)->F) pretend None)

-- handle LegendreP

opLegendreP := operator('legendreP)$CommonOperators

legendreP(nu, mu, z) == opLegendreP(nu, mu, z)

eLegendreP(nu : F, mu : F, z : F) : F == kernel(opLegendreP, [nu, mu, z])

elLegendreP(l : List F) : F == eLegendreP(l(1), l(2), l(3)) evaluate(opLegendreP, elLegendreP)$BasicOperatorFunctions1(F)

eLegendrePGrad_z(nu : F, mu : F, z : F) : F == (nu - mu + 1)legendreP(nu + 1, mu, z) - (nu + 1)z*legendreP(nu, mu, z)

dLegendreP(l : List F, t : SE) : F == grad3(l, t, opLegendreP, eLegendrePGrad_z)

setProperty(opLegendreP, SPECIALDIFF, dLegendreP@((List F, SE)->F) pretend None)

-- handle LegendreQ

opLegendreQ := operator('legendreQ)$CommonOperators

legendreQ(nu, mu, z) == opLegendreQ(nu, mu, z)

eLegendreQ(nu : F, mu : F, z : F) : F == kernel(opLegendreQ, [nu, mu, z])

elLegendreQ(l : List F) : F == eLegendreQ(l(1), l(2), l(3)) evaluate(opLegendreQ, elLegendreQ)$BasicOperatorFunctions1(F)

eLegendreQGrad_z(nu : F, mu : F, z : F) : F == (nu - mu + 1)legendreQ(nu + 1, mu, z) - (nu + 1)z*legendreQ(nu, mu, z)

dLegendreQ(l : List F, t : SE) : F == grad3(l, t, opLegendreQ, eLegendreQGrad_z)

setProperty(opLegendreQ, SPECIALDIFF, dLegendreQ@((List F, SE)->F) pretend None)

-- handle KelvinBei

opKelvinBei := operator('kelvinBei)$CommonOperators

kelvinBei(v, z) == opKelvinBei(v, z)

eKelvinBei(v : F, z : F) : F == kernel(opKelvinBei, [v, z])

elKelvinBei(l : List F) : F == eKelvinBei(l(1), l(2)) evaluate(opKelvinBei, elKelvinBei)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinBeiGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinBei(v + 1, z) - kelvinBer(v + 1, z)) + v*kelvinBei(v, z)/z

dKelvinBei(l : List F, t : SE) : F == grad2(l, t, opKelvinBei, eKelvinBeiGrad_z)

setProperty(opKelvinBei, SPECIALDIFF, dKelvinBei@((List F, SE)->F) pretend None)

-- handle KelvinBer

opKelvinBer := operator('kelvinBer)$CommonOperators

kelvinBer(v, z) == opKelvinBer(v, z)

eKelvinBer(v : F, z : F) : F == kernel(opKelvinBer, [v, z])

elKelvinBer(l : List F) : F == eKelvinBer(l(1), l(2)) evaluate(opKelvinBer, elKelvinBer)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinBerGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinBer(v + 1, z) + kelvinBei(v + 1, z)) + v*kelvinBer(v, z)/z

dKelvinBer(l : List F, t : SE) : F == grad2(l, t, opKelvinBer, eKelvinBerGrad_z)

setProperty(opKelvinBer, SPECIALDIFF, dKelvinBer@((List F, SE)->F) pretend None)

-- handle KelvinKei

opKelvinKei := operator('kelvinKei)$CommonOperators

kelvinKei(v, z) == opKelvinKei(v, z)

eKelvinKei(v : F, z : F) : F == kernel(opKelvinKei, [v, z])

elKelvinKei(l : List F) : F == eKelvinKei(l(1), l(2)) evaluate(opKelvinKei, elKelvinKei)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinKeiGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinKei(v + 1, z) - kelvinKer(v + 1, z)) + v*kelvinKei(v, z)/z

dKelvinKei(l : List F, t : SE) : F == grad2(l, t, opKelvinKei, eKelvinKeiGrad_z)

setProperty(opKelvinKei, SPECIALDIFF, dKelvinKei@((List F, SE)->F) pretend None)

-- handle KelvinKer

opKelvinKer := operator('kelvinKer)$CommonOperators

kelvinKer(v, z) == opKelvinKer(v, z)

eKelvinKer(v : F, z : F) : F == kernel(opKelvinKer, [v, z])

elKelvinKer(l : List F) : F == eKelvinKer(l(1), l(2)) evaluate(opKelvinKer, elKelvinKer)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eKelvinKerGrad_z(v : F, z : F) : F == ahalfsqrt(2::F)(kelvinKer(v + 1, z) + kelvinKei(v + 1, z)) + v*kelvinKer(v, z)/z

dKelvinKer(l : List F, t : SE) : F == grad2(l, t, opKelvinKer, eKelvinKerGrad_z)

setProperty(opKelvinKer, SPECIALDIFF, dKelvinKer@((List F, SE)->F) pretend None)

-- handle EllipticK

opEllipticK := operator('ellipticK)$CommonOperators

ellipticK(m) == opEllipticK(m)

eEllipticK(m : F) : F == kernel(opEllipticK, [m])

elEllipticK(l : List F) : F == eEllipticK(l(1)) evaluate(opEllipticK, elEllipticK)$BasicOperatorFunctions1(F)

dEllipticK(m : F) : F == ahalf(ellipticE(m) - (1 - m)ellipticK(m))/(m*(1 - m))

derivative(opEllipticK, dEllipticK)

-- handle one argument EllipticE

opEllipticE := operator('ellipticE)$CommonOperators

ellipticE(m) == opEllipticE(m)

eEllipticE(m : F) : F == kernel(opEllipticE, [m])

elEllipticE(l : List F) : F == eEllipticE(l(1)) evaluate(opEllipticE, elEllipticE)$BasicOperatorFunctions1(F)

dEllipticE(m : F) : F == ahalf*(ellipticE(m) - ellipticK(m))/m

derivative(opEllipticE, dEllipticE)

-- handle two argument EllipticE

opEllipticE2 := operator('ellipticE2)$CommonOperators

ellipticE(z, m) == opEllipticE2(z, m)

eEllipticE2(z : F, m : F) : F == z = 0 => 0 z = 1 => eEllipticE(m) kernel(opEllipticE2, [z, m])

elEllipticE2(l : List F) : F == eEllipticE2(l(1), l(2)) evaluate(opEllipticE2, elEllipticE2)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eEllipticE2Grad_z(l : List F) : F == z := l(1) m := l(2) sqrt(1 - m*z^2)/sqrt(1 - z^2)

eEllipticE2Grad_m(l : List F) : F == z := l(1) m := l(2) ahalf*(ellipticE(z, m) - ellipticF(z, m))/m

derivative(opEllipticE2, [eEllipticE2Grad_z, eEllipticE2Grad_m])

inEllipticE2(li : List INP) : INP == convert cons(convert('ellipticE), li)

input(opEllipticE2, inEllipticE2@((List INP) -> INP))

-- handle EllipticF

opEllipticF := operator('ellipticF)$CommonOperators

ellipticF(z, m) == opEllipticF(z, m)

eEllipticF(z : F, m : F) : F == z = 0 => 0 z = 1 => ellipticK(m) kernel(opEllipticF, [z, m])

elEllipticF(l : List F) : F == eEllipticF(l(1), l(2)) evaluate(opEllipticF, elEllipticF)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eEllipticFGrad_z(l : List F) : F == z := l(1) m := l(2) 1/(sqrt(1 - mz^2)sqrt(1 - z^2))

eEllipticFGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf((ellipticE(z, m) - (1 - m)ellipticF(z, m))/m - zsqrt(1 - z^2)/sqrt(1 - mz^2))/(1 - m)

derivative(opEllipticF, [eEllipticFGrad_z, eEllipticFGrad_m])

-- handle EllipticPi

opEllipticPi := operator('ellipticPi)$CommonOperators

ellipticPi(z, n, m) == opEllipticPi(z, n, m)

eEllipticPi(z : F, n : F, m : F) : F == z = 0 => 0 kernel(opEllipticPi, [z, n, m])

elEllipticPi(l : List F) : F == eEllipticPi(l(1), l(2), l(3)) evaluate(opEllipticPi, elEllipticPi)$BasicOperatorFunctions1(F)

if F has RadicalCategory then

eEllipticPiGrad_z(l : List F) : F == z := l(1) n := l(2) m := l(3) 1/((1 - nz^2)sqrt(1 - mz^2)sqrt(1 - z^2))

eEllipticPiGrad_n(l : List F) : F == z := l(1) n := l(2) m := l(3) t1 := -(n^2 - m)ellipticPi(z, n, m)/((n - 1)(n - m)n) t2 := ellipticF(z, m)/((n - 1)n) t3 := -ellipticE(z, m)/((n - 1)(n - m)) t4 := nzsqrt(1 - mz^2)sqrt(1 - z^2)/ ((1 - nz^2)(n - 1)(n - m)) ahalf*(t1 + t2 + t3 + t4)

eEllipticPiGrad_m(l : List F) : F == z := l(1) n := l(2) m := l(3) t1 := mzsqrt(1 - z^2)/sqrt(1 - mz^2) t2 := (-ellipticE(z, m) + t1)/(1 - m) ahalf(ellipticPi(z, n, m) + t2)/(n - m)

derivative(opEllipticPi, [eEllipticPiGrad_z, eEllipticPiGrad_n, eEllipticPiGrad_m])

-- handle JacobiSn

opJacobiSn := operator('jacobiSn)$CommonOperators

jacobiSn(z, m) == opJacobiSn(z, m)

eJacobiSn(z : F, m : F) : F == z = 0 => 0 if is?(z, opEllipticF) then args := argument(retract(z)@K) m = args(2) => return args(1) kernel(opJacobiSn, [z, m])

elJacobiSn : List F -> F elJacobiSn(l : List F) : F == eJacobiSn(l(1), l(2)) evaluate(opJacobiSn, elJacobiSn)$BasicOperatorFunctions1(F)

jacobiGradHelper(z : F, m : F) : F == (z - ellipticE(jacobiSn(z, m), m)/(1 - m))/m

eJacobiSnGrad_z(l : List F) : F == z := l(1) m := l(2) jacobiCn(z, m)*jacobiDn(z, m)

eJacobiSnGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf(eJacobiSnGrad_z(l)jacobiGradHelper(z, m) + jacobiSn(z, m)*jacobiCn(z, m)^2/(1 - m))

derivative(opJacobiSn, [eJacobiSnGrad_z, eJacobiSnGrad_m])

-- handle JacobiCn

opJacobiCn := operator('jacobiCn)$CommonOperators

jacobiCn(z, m) == opJacobiCn(z, m)

eJacobiCn(z : F, m : F) : F == z = 0 => 1 kernel(opJacobiCn, [z, m])

elJacobiCn(l : List F) : F == eJacobiCn(l(1), l(2)) evaluate(opJacobiCn, elJacobiCn)$BasicOperatorFunctions1(F)

eJacobiCnGrad_z(l : List F) : F == z := l(1) m := l(2) -jacobiSn(z, m)*jacobiDn(z, m)

eJacobiCnGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf(eJacobiCnGrad_z(l)jacobiGradHelper(z, m) - jacobiSn(z, m)^2*jacobiCn(z, m)/(1 - m))

derivative(opJacobiCn, [eJacobiCnGrad_z, eJacobiCnGrad_m])

-- handle JacobiDn

opJacobiDn := operator('jacobiDn)$CommonOperators

jacobiDn(z, m) == opJacobiDn(z, m)

eJacobiDn(z : F, m : F) : F == z = 0 => 1 kernel(opJacobiDn, [z, m])

elJacobiDn(l : List F) : F == eJacobiDn(l(1), l(2)) evaluate(opJacobiDn, elJacobiDn)$BasicOperatorFunctions1(F)

eJacobiDnGrad_z(l : List F) : F == z := l(1) m := l(2) -mjacobiSn(z, m)jacobiCn(z, m)

eJacobiDnGrad_m(l : List F) : F == z := l(1) m := l(2) ahalf(eJacobiDnGrad_z(l)jacobiGradHelper(z, m) - jacobiSn(z, m)^2*jacobiDn(z, m)/(1 - m))

derivative(opJacobiDn, [eJacobiDnGrad_z, eJacobiDnGrad_m])

-- handle JacobiZeta

opJacobiZeta := operator('jacobiZeta)$CommonOperators

jacobiZeta(z, m) == opJacobiZeta(z, m)

eJacobiZeta(z : F, m : F) : F == z = 0 => 0 kernel(opJacobiZeta, [z, m])

elJacobiZeta(l : List F) : F == eJacobiZeta(l(1), l(2)) evaluate(opJacobiZeta, elJacobiZeta)$BasicOperatorFunctions1(F)

eJacobiZetaGrad_z(l : List F) : F == z := l(1) m := l(2) dn := jacobiDn(z, m) dn*dn - ellipticE(m)/ellipticK(m)

eJacobiZetaGrad_m(l : List F) : F == z := l(1) m := l(2) ek := ellipticK(m) ee := ellipticE(m) er := ee/ek dn := jacobiDn(z, m) res1 := (dndn + m - 1)jacobiZeta(z, m) res2 := res1 + (m - 1)zdndn res3 := res2 - mjacobiCn(z, m)jacobiDn(z, m)jacobiSn(z, m) res4 := res3 + z(1 - m + dndn)er ahalf(res4 - zerer)/(m*m - m)

derivative(opJacobiZeta, [eJacobiZetaGrad_z, eJacobiZetaGrad_m])

-- handle JacobiTheta

opJacobiTheta := operator('jacobiTheta)$CommonOperators

jacobiTheta(q, z) == opJacobiTheta(q, z)

eJacobiTheta(q : F, z : F) : F == kernel(opJacobiTheta, [q, z])

elJacobiTheta(l : List F) : F == eJacobiTheta(l(1), l(2)) evaluate(opJacobiTheta, elJacobiTheta)$BasicOperatorFunctions1(F)

-- handle LerchPhi

opLerchPhi := operator('lerchPhi)$CommonOperators

lerchPhi(z, s, a) == opLerchPhi(z, s, a)

eLerchPhi(z : F, s : F, a : F) : F ==
z = 0 => 1/a^s a = 1 => polylog(s, z)/z kernel(opLerchPhi, [z, s, a])

elLerchPhi(l : List F) : F == eLerchPhi(l(1), l(2), l(3)) evaluate(opLerchPhi, elLerchPhi)$BasicOperatorFunctions1(F)

dLerchPhi(l : List F, t : SE) : F == z := l(1) s := l(2) a := l(3) dz := differentiate(z, t)(lerchPhi(z, s - 1, a) - alerchPhi(z, s, a))/z da := -differentiate(a, t)slerchPhi(z, s + 1, a) dm := dummy differentiate(s, t)*kernel(opdiff, [opLerchPhi [z, dm, a], dm, s]) + dz + da

setProperty(opLerchPhi, SPECIALDIFF, dLerchPhi@((List F, SE)->F) pretend None)

-- handle RiemannZeta

opRiemannZeta := operator('riemannZeta)$CommonOperators

riemannZeta(z) == opRiemannZeta(z)

eRiemannZeta(z : F) : F == kernel(opRiemannZeta, [z])

elRiemannZeta(l : List F) : F == eRiemannZeta(l(1)) evaluate(opRiemannZeta, elRiemannZeta)$BasicOperatorFunctions1(F)

-- orthogonal polynomials

charlierC(n : F, a : F, z : F) : F == opCharlierC(n, a, z)

eCharlierC(n : F, a : F, z : F) : F == n = 0 => 1 n = 1 => (z - a)/a kernel(opCharlierC, [n, a, z])

elCharlierC(l : List F) : F == eCharlierC(l(1), l(2), l(3))

evaluate(opCharlierC, elCharlierC)$BasicOperatorFunctions1(F)

hermiteH(n : F, z: F) : F == opHermiteH(n, z)

eHermiteH(n : F, z: F) : F == n = -1 => 0 n = 0 => 1 n = 1 => (2::F)*z kernel(opHermiteH, [n, z])

elHermiteH(l : List F) : F == eHermiteH(l(1), l(2))

evaluate(opHermiteH, elHermiteH)$BasicOperatorFunctions1(F)

eHermiteHGrad_z(n : F, z : F) : F == (2::F)nhermiteH(n - 1, z)

dHermiteH(l : List F, t : SE) : F == grad2(l, t, opHermiteH, eHermiteHGrad_z)

setProperty(opHermiteH, SPECIALDIFF, dHermiteH@((List F, SE)->F) pretend None)

jacobiP(n : F, a : F, b : F, z : F) : F == opJacobiP(n, a, b, z)

eJacobiP(n : F, a : F, b : F, z : F) : F == n = -1 => 0 n = 0 => 1 n = 1 => ahalf(a - b) + (1 + ahalf(a + b))*z kernel(opJacobiP, [n, a, b, z])

elJacobiP(l : List F) : F == eJacobiP(l(1), l(2), l(3), l(4))

evaluate(opJacobiP, elJacobiP)$BasicOperatorFunctions1(F)

eJacobiPGrad_z(n : F, a : F, b : F, z : F) : F == ahalf(a + b + n + 1)jacobiP(n - 1, a + 1, b + 1, z)

dJacobiP(l : List F, t : SE) : F == grad4(l, t, opJacobiP, eJacobiPGrad_z)

setProperty(opJacobiP, SPECIALDIFF, dJacobiP@((List F, SE)->F) pretend None)

laguerreL(n : F, a : F, z : F) : F == opLaguerreL(n, a, z)

eLaguerreL(n : F, a : F, z : F) : F == n = -1 => 0 n = 0 => 1 n = 1 => (1 + a - z) kernel(opLaguerreL, [n, a, z])

elLaguerreL(l : List F) : F == eLaguerreL(l(1), l(2), l(3))

evaluate(opLaguerreL, elLaguerreL)$BasicOperatorFunctions1(F)

eLaguerreLGrad_z(n : F, a : F, z : F) : F == laguerreL(n - 1, a + 1, z)

dLaguerreL(l : List F, t : SE) : F == grad3(l, t, opLaguerreL, eLaguerreLGrad_z)

setProperty(opLaguerreL, SPECIALDIFF, dLaguerreL@((List F, SE)->F) pretend None)

meixnerM(n : F, b : F, c : F, z : F) : F == opMeixnerM(n, b, c, z)

eMeixnerM(n : F, b : F, c : F, z : F) : F == n = 0 => 1 n = 1 => (c - 1)z/(cb) + 1 kernel(opMeixnerM, [n, b, c, z])

elMeixnerM(l : List F) : F == eMeixnerM(l(1), l(2), l(3), l(4))

evaluate(opMeixnerM, elMeixnerM)$BasicOperatorFunctions1(F)

-- belong? op == has?(op, SPECIAL)

operator op == is?(op, 'abs) => opabs is?(op, 'conjugate)=> opconjugate is?(op, 'Gamma) => opGamma is?(op, 'Gamma2) => opGamma2 is?(op, 'Beta) => opBeta is?(op, 'digamma) => opdigamma is?(op, 'polygamma)=> oppolygamma is?(op, 'besselJ) => opBesselJ is?(op, 'besselY) => opBesselY is?(op, 'besselI) => opBesselI is?(op, 'besselK) => opBesselK is?(op, 'airyAi) => opAiryAi is?(op, 'airyAiPrime) => opAiryAiPrime is?(op, 'airyBi) => opAiryBi is?(op, 'airyBiPrime) => opAiryBiPrime is?(op, 'lambertW) => opLambertW is?(op, 'polylog) => opPolylog is?(op, 'weierstrassP) => opWeierstrassP is?(op, 'weierstrassPPrime) => opWeierstrassPPrime is?(op, 'weierstrassSigma) => opWeierstrassSigma is?(op, 'weierstrassZeta) => opWeierstrassZeta is?(op, 'hypergeometricF) => opHypergeometricF is?(op, 'meijerG) => opMeijerG -- is?(op, 'weierstrassPInverse) => opWeierstrassPInverse is?(op, 'whittakerM) => opWhittakerM is?(op, 'whittakerW) => opWhittakerW is?(op, 'angerJ) => opAngerJ is?(op, 'weberE) => opWeberE is?(op, 'struveH) => opStruveH is?(op, 'struveL) => opStruveL is?(op, 'hankelH1) => opHankelH1 is?(op, 'hankelH2) => opHankelH2 is?(op, 'lommelS1) => opLommelS1 is?(op, 'lommelS2) => opLommelS2 is?(op, 'kummerM) => opKummerM is?(op, 'kummerU) => opKummerU is?(op, 'legendreP) => opLegendreP is?(op, 'legendreQ) => opLegendreQ is?(op, 'kelvinBei) => opKelvinBei is?(op, 'kelvinBer) => opKelvinBer is?(op, 'kelvinKei) => opKelvinKei is?(op, 'kelvinKer) => opKelvinKer is?(op, 'ellipticK) => opEllipticK is?(op, 'ellipticE) => opEllipticE is?(op, 'ellipticE2) => opEllipticE2 is?(op, 'ellipticF) => opEllipticF is?(op, 'ellipticPi) => opEllipticPi is?(op, 'jacobiSn) => opJacobiSn is?(op, 'jacobiCn) => opJacobiCn is?(op, 'jacobiDn) => opJacobiDn is?(op, 'jacobiZeta) => opJacobiZeta is?(op, 'jacobiTheta) => opJacobiTheta is?(op, 'lerchPhi) => opLerchPhi is?(op, 'riemannZeta) => opRiemannZeta is?(op, 'charlierC) => opCharlierC is?(op, 'hermiteH) => opHermiteH is?(op, 'jacobiP) => opJacobiP is?(op, 'laguerreL) => opLaguerreL is?(op, 'meixnerM) => opMeixnerM is?(op, '%logGamma) => op_log_gamma is?(op, '%eis) => op_eis is?(op, '%erfs) => op_erfs is?(op, '%erfis) => op_erfis

error "Not a special operator"

-- Could put more unconditional special rules for other functions here iGamma x == -- one? x => x (x = 1) => x kernel(opGamma, x)

iabs x == zero? x => 0 one? x => 1 is?(x, opabs) => x is?(x, opconjugate) => kernel(opabs, argument(retract(x)@K)(1)) smaller?(x, 0) => kernel(opabs, -x) kernel(opabs, x)

iconjugate(k:K):F == --output("in: ",k::OutputForm)$OutputPackage if is?(k, opconjugate) then x:=argument(k)(1) else if is?(k, opabs) then x:= k::F else if symbolIfCan(k) case Symbol then x:=kernel(opconjugate, k::F) else if F has RadicalCategory and R has RetractableTo(Integer) and is?(k, 'nthRoot) then x:= 1/nthRoot(1/iiconjugate argument(k)(1),retract(argument(k)(2))@Integer) else -- assume holomorphic x:=map(iiconjugate,k) --output("out: ",x::OutputForm)$OutputPackage return x

iiconjugate(x:F):F == --output("iin: ",x::OutputForm)$OutputPackage if (s:=isPlus(x)) case List F then --output("isPlus: ",s::OutputForm)$OutputPackage x := reduce(_+$F,map(iiconjugate,s)) else if (s:=isTimes(x)) case List F then --output("isTimes: ",s::OutputForm)$OutputPackage x:= reduce(*$F,map(iiconjugate,s)) else if #(ks:List K:=kernels(x))>0 then --output("kernels: ",ks::OutputForm)$OutputPackage x := eval(x,ks, map((k:Kernel F):F +-> (height(k)=0 =>k::F;iconjugate k), ks)$ListFunctions2(Kernel F,F)) else if R has conjugate : R -> R then x:=map(conjugate$R,numer x)::F / map(conjugate$R,denom x)::F --output("iout: ",x::OutputForm)$OutputPackage return x

iBeta(x, y) == kernel(opBeta, [x, y]) idigamma x == kernel(opdigamma, x) iiipolygamma(n, x) == kernel(oppolygamma, [n, x]) iiiBesselJ(x, y) == kernel(opBesselJ, [x, y]) iiiBesselY(x, y) == kernel(opBesselY, [x, y]) iiiBesselI(x, y) == kernel(opBesselI, [x, y]) iiiBesselK(x, y) == kernel(opBesselK, [x, y])

import from Fraction(Integer)

if F has ElementaryFunctionCategory then iAiryAi x == zero?(x) => 1::F/((3::F)^twothirdsGamma(twothirds)) kernel(opAiryAi, x) iAiryAiPrime x == zero?(x) => -1::F/((3::F)^athirdGamma(athird)) kernel(opAiryAiPrime, x) iAiryBi x == zero?(x) => 1::F/((3::F)^asixth*Gamma(twothirds)) kernel(opAiryBi, x) iAiryBiPrime x == zero?(x) => (3::F)^asixth/Gamma(athird) kernel(opAiryBiPrime, x) else iAiryAi x == kernel(opAiryAi, x) iAiryAiPrime x == kernel(opAiryAiPrime, x) iAiryBi x == kernel(opAiryBi, x) iAiryBiPrime x == kernel(opAiryBiPrime, x)

if F has ElementaryFunctionCategory then iLambertW(x) == zero?(x) => 0 x = exp(1$F) => 1$F x = -exp(-1$F) => -1$F kernel(opLambertW, x) else iLambertW(x) == zero?(x) => 0 kernel(opLambertW, x)

if F has ElementaryFunctionCategory then if F has LiouvillianFunctionCategory then iiPolylog(s, x) == s = 1 => -log(1 - x) s = 2::F => dilog(1 - x) kernel(opPolylog, [s, x]) else iiPolylog(s, x) == s = 1 => -log(1 - x) kernel(opPolylog, [s, x]) else iiPolylog(s, x) == kernel(opPolylog, [s, x])

iPolylog(l) == iiPolylog(first l, second l)

iWeierstrassP(g2, g3, x) == kernel(opWeierstrassP, [g2, g3, x]) iWeierstrassPPrime(g2, g3, x) == kernel(opWeierstrassPPrime, [g2, g3, x])

iWeierstrassSigma(g2, g3, x) == x = 0 => 0 kernel(opWeierstrassSigma, [g2, g3, x])

iWeierstrassZeta(g2, g3, x) == kernel(opWeierstrassZeta, [g2, g3, x])

-- Could put more conditional special rules for other functions here

if R has abs : R -> R then import from Polynomial R iiabs x == (r := retractIfCan(x)@Union(Fraction Polynomial R, "failed")) case "failed" => iabs x f := r::Fraction Polynomial R (a := retractIfCan(numer f)@Union(R, "failed")) case "failed" or (b := retractIfCan(denom f)@Union(R,"failed")) case "failed" => iabs x abs(a::R)::F / abs(b::R)::F else if F has RadicalCategory and R has conjugate : R -> R then iiabs x == (r := retractIfCan(x)@Union(R, "failed")) case "failed" => iabs x sqrt( (r::R*conjugate(r::R))::F) else iiabs x == iabs x

if R has SpecialFunctionCategory then iiGamma x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iGamma x Gamma(r::R)::F

iiBeta l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iBeta(first l, second l) Beta(r::R, s::R)::F

iidigamma x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => idigamma x digamma(r::R)::F

iipolygamma l == (s := retractIfCan(first l)@Union(R,"failed")) case "failed" or (r := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiipolygamma(first l, second l) polygamma(s::R, r::R)::F

iiBesselJ l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselJ(first l, second l) besselJ(r::R, s::R)::F

iiBesselY l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselY(first l, second l) besselY(r::R, s::R)::F

iiBesselI l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselI(first l, second l) besselI(r::R, s::R)::F

iiBesselK l == (r := retractIfCan(first l)@Union(R,"failed")) case "failed" or (s := retractIfCan(second l)@Union(R,"failed")) case "failed" => iiiBesselK(first l, second l) besselK(r::R, s::R)::F

iiAiryAi x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryAi x airyAi(r::R)::F

iiAiryAiPrime x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryAiPrime x airyAiPrime(r::R)::F

iiAiryBi x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryBi x airyBi(r::R)::F

iiAiryBi x == (r := retractIfCan(x)@Union(R,"failed")) case "failed" => iAiryBiPrime x airyBiPrime(r::R)::F

else if R has RetractableTo Integer then iiGamma x == (r := retractIfCan(x)@Union(Integer, "failed")) case Integer and (r::Integer >= 1) => factorial(r::Integer - 1)::F iGamma x else iiGamma x == iGamma x

iiBeta l == iBeta(first l, second l) iidigamma x == idigamma x iipolygamma l == iiipolygamma(first l, second l) iiBesselJ l == iiiBesselJ(first l, second l) iiBesselY l == iiiBesselY(first l, second l) iiBesselI l == iiiBesselI(first l, second l) iiBesselK l == iiiBesselK(first l, second l) iiAiryAi x == iAiryAi x iiAiryAiPrime x == iAiryAiPrime x iiAiryBi x == iAiryBi x iiAiryBiPrime x == iAiryBiPrime x

iiWeierstrassP l == iWeierstrassP(first l, second l, third l) iiWeierstrassPPrime l == iWeierstrassPPrime(first l, second l, third l) iiWeierstrassSigma l == iWeierstrassSigma(first l, second l, third l) iiWeierstrassZeta l == iWeierstrassZeta(first l, second l, third l)

-- Default behaviour is to build a kernel evaluate(opGamma, iiGamma)$BasicOperatorFunctions1(F) evaluate(opabs, iiabs)$BasicOperatorFunctions1(F) evaluate(opconjugate, iiconjugate)$BasicOperatorFunctions1(F) -- evaluate(opGamma2 , iiGamma2 )$BasicOperatorFunctions1(F) evaluate(opBeta , iiBeta )$BasicOperatorFunctions1(F) evaluate(opdigamma , iidigamma )$BasicOperatorFunctions1(F) evaluate(oppolygamma , iipolygamma)$BasicOperatorFunctions1(F) evaluate(opBesselJ , iiBesselJ )$BasicOperatorFunctions1(F) evaluate(opBesselY , iiBesselY )$BasicOperatorFunctions1(F) evaluate(opBesselI , iiBesselI )$BasicOperatorFunctions1(F) evaluate(opBesselK , iiBesselK )$BasicOperatorFunctions1(F) evaluate(opAiryAi , iiAiryAi )$BasicOperatorFunctions1(F) evaluate(opAiryAiPrime, iiAiryAiPrime)$BasicOperatorFunctions1(F) evaluate(opAiryBi , iiAiryBi )$BasicOperatorFunctions1(F) evaluate(opAiryBiPrime, iiAiryBiPrime)$BasicOperatorFunctions1(F) evaluate(opLambertW, iLambertW)$BasicOperatorFunctions1(F) evaluate(opPolylog, iPolylog)$BasicOperatorFunctions1(F) evaluate(opWeierstrassP, iiWeierstrassP)$BasicOperatorFunctions1(F) evaluate(opWeierstrassPPrime, iiWeierstrassPPrime)$BasicOperatorFunctions1(F) evaluate(opWeierstrassSigma, iiWeierstrassSigma)$BasicOperatorFunctions1(F) evaluate(opWeierstrassZeta, iiWeierstrassZeta)$BasicOperatorFunctions1(F) evaluate(opHypergeometricF, iiHypergeometricF)$BasicOperatorFunctions1(F) evaluate(opMeijerG, iiMeijerG)$BasicOperatorFunctions1(F)

diff1(op : OP, n : F, x : F) : F == dm := dummy kernel(opdiff, [op [dm, x], dm, n])

iBesselJ(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselJ, n, x) + differentiate(x, t) ahalf * (besselJ (n-1, x) - besselJ (n+1, x))

iBesselY(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselY, n, x) + differentiate(x, t) ahalf * (besselY (n-1, x) - besselY (n+1, x))

iBesselI(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselI, n, x) + differentiate(x, t) ahalf * (besselI (n-1, x) + besselI (n+1, x))

iBesselK(l : List F, t : SE) : F == n := first l; x := second l differentiate(n, t)diff1(opBesselK, n, x) - differentiate(x, t) ahalf * (besselK (n-1, x) + besselK (n+1, x))

dPolylog(l : List F, t : SE) : F == s := first l; x := second l differentiate(s, t)diff1(opPolylog, s, x) + differentiate(x, t)polylog(s-1, x)/x

ipolygamma(l : List F, x : SE) : F == import from List(Symbol) member?(x, variables first l) => error "cannot differentiate polygamma with respect to the first argument" n := first l; y := second l differentiate(y, x)polygamma(n+1, y) iBetaGrad1(l : List F) : F == x := first l; y := second l Beta(x, y)(digamma x - digamma(x+y)) iBetaGrad2(l : List F) : F == x := first l; y := second l Beta(x, y)*(digamma y - digamma(x+y))

if F has ElementaryFunctionCategory then iGamma2(l : List F, t : SE) : F == a := first l; x := second l differentiate(a, t)diff1(opGamma2, a, x) - differentiate(x, t) x ^ (a - 1) * exp(-x) setProperty(opGamma2, SPECIALDIFF, iGamma2@((List F, SE)->F) pretend None)

inGamma2(li : List INP) : INP == convert cons(convert('Gamma), li)

input(opGamma2, inGamma2@((List INP) -> INP))

dLambertW(x : F) : F == lw := lambertW(x) lw/(x*(1+lw))

iWeierstrassPGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (weierstrassPPrime(g2, g3, x)(-9ahalfg3 weierstrassZeta(g2, g3, x) + afourthg2^2x) - 9g3wp^2 + ahalfg2^2wp + 3ahalfg2g3)/delta

iWeierstrassPGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (weierstrassPPrime(g2, g3, x)(3g2weierstrassZeta(g2, g3, x) - 9ahalfg3x) + 6g2wp^2 - 9g3*wp-g2^2)/delta

iWeierstrassPGrad3(l : List F) : F == weierstrassPPrime(first l, second l, third l)

iWeierstrassPPrimeGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) wpp := weierstrassPPrime(g2, g3, x) wpp2 := 6wp^2 - ahalfg2 (wpp2(-9ahalfg3weierstrassZeta(g2, g3, x) + afourthg2^2x) + wpp(9ahalfg3wp + afourthg2^2) - 18g3wpwpp + ahalfg2^2*wpp)/delta

iWeierstrassPPrimeGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) wpp := weierstrassPPrime(g2, g3, x) wpp2 := 6wp^2 - ahalfg2 (wpp2(3g2weierstrassZeta(g2, g3, x) - 9ahalfg3x) + wpp(-3g2wp - 9ahalfg3) + 12g2wpwpp - 9g3*wpp)/delta

iWeierstrassPPrimeGrad3(l : List F) : F == g2 := first l 6weierstrassP(g2, second l, third l)^2 - ahalfg2

iWeierstrassSigmaGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 ws := weierstrassSigma(g2, g3, x) wz := weierstrassZeta(g2, g3, x) wsp := wzws wsp2 := - weierstrassP(g2, g3, x)ws + wz^2ws afourth(-9g3wsp2 - g2^2ws - 3afourthg2g3x^2ws + g2^2x*wsp)/delta

iWeierstrassSigmaGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 ws := weierstrassSigma(g2, g3, x) wz := weierstrassZeta(g2, g3, x) wsp := wzws wsp2 := - weierstrassP(g2, g3, x)ws + wz^2ws ahalf(3g2wsp2 + 9g3ws + afourthg2^2x^2ws - 9g3x*wsp)/delta

iWeierstrassSigmaGrad3(l : List F) : F == g2 := first l g3 := second l x := third l weierstrassZeta(g2, g3, x)*weierstrassSigma(g2, g3, x)

iWeierstrassZetaGrad1(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (ahalfweierstrassZeta(g2, g3, x)(9g3wp + ahalfg2^2) - ahalfg2x(ahalfg2wp+3afourthg3) + 9afourthg3weierstrassPPrime(g2, g3, x))/delta

iWeierstrassZetaGrad2(l : List F) : F == g2 := first l g3 := second l x := third l delta := g2^3 - 27g3^2 wp := weierstrassP(g2, g3, x) (-3weierstrassZeta(g2, g3, x)(g2wp + 3ahalfg3) + ahalfx(9g3wp + ahalfg2^2) - 3ahalfg2weierstrassPPrime(g2, g3, x))/delta

iWeierstrassZetaGrad3(l : List F) : F == -weierstrassP(first l, second l, third l)

OF ==> OutputForm SEX ==> SExpression NNI ==> NonNegativeInteger

dconjugate(lo : List OF) : OF == overbar lo.1 display(opconjugate,dconjugate)

if F has RetractableTo(Integer) then get_int_listf : List F -> List Integer get_int_listo : (Integer, List OF) -> List Integer get_int_listi : (Integer, List INP) -> List Integer

get_int_listf(lf : List F) : List Integer == map(z +-> retract(z)@Integer, lf)$ListFunctions2(F, Integer)

replace_i(lp : List F, v : F, i : NNI) : List F == concat(first(lp, (i - 1)::NNI), cons(v, rest(lp, i)))

iiHypergeometricF(l) == n := #l z := l(n-2) if z = 0 then nn := (n - 2)::NNI pq := rest(l, nn) pqi := get_int_listf(pq) p := first(pqi) q := first(rest(pqi)) p <= q + 1 => return 1 kernel(opHypergeometricF, l)

idvsum(op : BasicOperator, n : Integer, l : List F, x : Symbol) : F == res : F := 0 for i in 1..n for a in l repeat dm := dummy nl := replace_i(l, dm, i) res := res + differentiate(a, x)*kernel(opdiff, [op nl, dm, a]) res

dvhypergeom(l : List F, x : Symbol) : F == n := #l nn := (n - 2)::NNI pq := rest(l, nn) pqi := get_int_listf(pq) ol := l l := first(l, nn) l1 := reverse(l) z := first(l1) p := first(pqi) q := first(rest(pqi)) aprod := 1@F nl := []@(List F) for i in 1..p repeat a := first(l) nl := cons(a + 1, nl) aprod := aprod a l := rest(l) bprod := 1@F for i in 1..q repeat b := first(l) nl := cons(b + 1, nl) bprod := bprod b l := rest(l) nl0 := reverse!(nl) nl1 := cons(z, pq) nl := concat(nl0, nl1) aprod := aprod/bprod idvsum(opHypergeometricF, nn - 1, ol, x) + differentiate(z, x)aprodopHypergeometricF(nl)

add_pairs_to_list(lp : List List F, l : List F) : List F == for p in lp repeat #p ~= 2 => error "not a list of pairs" l := cons(p(2), cons(p(1), l)) l

dvmeijer(l : List F, x : Symbol) : F == n := #l nn := (n - 4)::NNI l0 := l nl := rest(l, nn) nli := get_int_listf(nl) l := first(l, nn) l1 := reverse(l) z := first(l1) n1 := first(nli) n2 := nli(2) a := first l sign : F := 1 if n1 > 0 or n2 > 0 then na := a - 1 if n1 = 0 then sign := -1 l2 := cons(na, rest l) else na := a if nli(3) > 0 then sign := -1 l2 := cons(a + 1, rest l) nm : F := opMeijerG(concat(l2, nl)) om : F := opMeijerG(l0) idvsum(opMeijerG, nn - 1, l0, x) + differentiate(z, x)(signnm + na*om)/z

get_if_list(n : Integer, lf : List INP) : List List INP == a := []@(List INP) for i in 1..n repeat a := cons(first(lf), a) lf := rest(lf) a := cons(convert('construct), reverse!(a)) [a, lf]

get_if_lists(ln : List Integer, lf : List INP) : List List INP == rl := []@(List List INP) for n in ln repeat al := get_if_list(n, lf) rl := cons(first(al), rl) lf := first(rest(al)) rl := reverse!(rl) cons(lf, rl)

get_int_listi(n : Integer, lo : List INP) : List Integer == n0 := (#lo - n)::NNI lo := rest(lo, n0) rl := []@(List Integer) for i in 1..n repeat p := integer(first(lo) pretend SEX)$SEX rl := cons(p, rl) lo := rest(lo) rl := reverse!(rl) rl

get_of_list(n : Integer, lo : List OF) : List List OF == a := []@(List OF) for i in 1..n repeat a := cons(first(lo), a) lo := rest(lo) a := reverse!(a) [a, lo]

get_of_lists(ln : List Integer, lo : List OF) : List List OF == rl := []@(List List OF) for n in ln repeat al := get_of_list(n, lo) rl := cons(first(al), rl) lo := first(rest(al)) rl := reverse!(rl) cons(lo, rl)

get_int_listo(n : Integer, lo : List OF) : List Integer == n0 := (#lo - n)::NNI lo := rest(lo, n0) rl := []@(List Integer) for i in 1..n repeat p := integer(first(lo) pretend SEX)$SEX rl := cons(p, rl) lo := rest(lo) rl := reverse!(rl) rl

dhyper0(op : OF, lo : List OF) : OF == n0 := (#lo - 2)::NNI pql := get_int_listo(2, lo) lo := first(lo, n0) al := get_of_lists(pql, lo) lo := first(al) al := rest(al) a := first al b := first(rest(al)) z := first(lo) prefix(op, [bracket a, bracket b, z])

dhyper(lo : List OF) : OF == dhyper0(hypergeometricF, lo)

ddhyper(lo : List OF) : OF == dhyper0(first lo, rest lo)

dmeijer0(op : OF, lo : List OF) : OF == n0 := (#lo - 4)::NNI nl := get_int_listo(4, lo) lo := first(lo, n0) al := get_of_lists(nl, lo) lo := first(al) al := rest(al) z := first(lo) prefix(op, concat( map(bracket, al)$ListFunctions2(List OF, OF), [z]))

dmeijer(lo : List OF) : OF == dmeijer0('meijerG::OF, lo)

ddmeijer(lo : List OF) : OF == dmeijer0(first lo, rest lo)

setProperty(opHypergeometricF, '%diffDisp, ddhyper@(List OF -> OF) pretend None) setProperty(opMeijerG, '%diffDisp, ddmeijer@(List OF -> OF) pretend None) display(opHypergeometricF, dhyper) display(opMeijerG, dmeijer) setProperty(opHypergeometricF, SPECIALDIFF, dvhypergeom@((List F, Symbol)->F) pretend None) setProperty(opMeijerG, SPECIALDIFF, dvmeijer@((List F, Symbol)->F) pretend None)

inhyper(lf : List INP) : INP == pqi := get_int_listi(2, lf) al := get_if_lists(pqi, lf) lf := first(al) al := rest(al) a := first al ai : INP := convert(a) b := first(rest(al)) bi : INP := convert(b) zi := first(lf) li : List INP := [convert('hypergeometricF), ai, bi, zi] convert(li)

input(opHypergeometricF, inhyper@((List INP) -> INP))

inmeijer(lf : List INP) : INP == pqi := get_int_listi(4, lf) al := get_if_lists(pqi, lf) lf := first(al) al := rest(al) a := first al ai : INP := convert(a) al := rest(al) b := first(al) bi : INP := convert(b) al := rest(al) c := first(al) ci : INP := convert(c) al := rest(al) d := first(al) di : INP := convert(d) zi := first(lf) li : List INP := [convert('meijerG), ai, bi, ci, di, zi] convert(li)

input(opMeijerG, inmeijer@((List INP) -> INP))

else iiHypergeometricF(l) == kernel(opHypergeometricF, l)

iiMeijerG(l) == kernel(opMeijerG, l)

d_eis(x : F) : F == -kernel(op_eis, x) + 1/x

if F has TranscendentalFunctionCategory and F has RadicalCategory then

d_erfs(x : F) : F == 2xkernel(op_erfs, x) - 2::F/sqrt(pi())

d_erfis(x : F) : F == -2xkernel(op_erfis, x) + 2::F/sqrt(pi())

derivative(op_erfs, d_erfs) derivative(op_erfis, d_erfis)

derivative(opabs, (x : F) : F +-> conjugate(x)inv(2abs(x))) derivative(opconjugate, (x : F) : F +-> 0) derivative(opGamma, (x : F) : F +-> digamma(x)*Gamma(x)) derivative(op_log_gamma, (x : F) : F +-> digamma(x)) derivative(opBeta, [iBetaGrad1, iBetaGrad2]) derivative(opdigamma, (x : F) : F +-> polygamma(1, x)) derivative(op_eis, d_eis) derivative(opAiryAi, (x : F) : F +-> airyAiPrime(x)) derivative(opAiryAiPrime, (x : F) : F +-> xairyAi(x)) derivative(opAiryBi, (x : F) : F +-> airyBiPrime(x)) derivative(opAiryBiPrime, (x : F) : F +-> xairyBi(x)) derivative(opLambertW, dLambertW) derivative(opWeierstrassP, [iWeierstrassPGrad1, iWeierstrassPGrad2, iWeierstrassPGrad3]) derivative(opWeierstrassPPrime, [iWeierstrassPPrimeGrad1, iWeierstrassPPrimeGrad2, iWeierstrassPPrimeGrad3]) derivative(opWeierstrassSigma, [iWeierstrassSigmaGrad1, iWeierstrassSigmaGrad2, iWeierstrassSigmaGrad3]) derivative(opWeierstrassZeta, [iWeierstrassZetaGrad1, iWeierstrassZetaGrad2, iWeierstrassZetaGrad3])

setProperty(oppolygamma, SPECIALDIFF, ipolygamma@((List F, SE)->F) pretend None) setProperty(opBesselJ, SPECIALDIFF, iBesselJ@((List F, SE)->F) pretend None) setProperty(opBesselY, SPECIALDIFF, iBesselY@((List F, SE)->F) pretend None) setProperty(opBesselI, SPECIALDIFF, iBesselI@((List F, SE)->F) pretend None) setProperty(opBesselK, SPECIALDIFF, iBesselK@((List F, SE)->F) pretend None) setProperty(opPolylog, SPECIALDIFF, dPolylog@((List F, SE)->F) pretend None)</spad> Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1600462418712884080-25px001.spad using old system compiler. FSPECX abbreviates package FunctionalSpecialFunction Your user access level is compiler and this command is therefore not available. See the )set userlevel command for more information. ------------------------------------------------------------------------ initializing NRLIB FSPECX for FunctionalSpecialFunction compiling into NRLIB FSPECX ****** Domain: R already in scope processing macro definition INP ==> InputForm processing macro definition SPECIALINPUT ==> QUOTE %specialInput compiling exported abs : F -> F Time: 0.04 SEC.

compiling exported conjugate : F -> F Time: 0 SEC.

compiling exported Gamma : F -> F Time: 0 SEC.

compiling exported Gamma : (F,F) -> F Time: 0 SEC.

compiling exported Beta : (F,F) -> F Time: 0 SEC.

compiling exported digamma : F -> F Time: 0 SEC.

compiling exported polygamma : (F,F) -> F Time: 0 SEC.

compiling exported besselJ : (F,F) -> F Time: 0 SEC.

compiling exported besselY : (F,F) -> F Time: 0 SEC.

compiling exported besselI : (F,F) -> F Time: 0 SEC.

compiling exported besselK : (F,F) -> F Time: 0 SEC.

compiling exported airyAi : F -> F Time: 0 SEC.

compiling exported airyAiPrime : F -> F Time: 0 SEC.

compiling exported airyBi : F -> F Time: 0 SEC.

compiling exported airyBiPrime : F -> F Time: 0 SEC.

compiling exported lambertW : F -> F Time: 0 SEC.

compiling exported polylog : (F,F) -> F Time: 0 SEC.

compiling exported weierstrassP : (F,F,F) -> F Time: 0 SEC.

compiling exported weierstrassPPrime : (F,F,F) -> F Time: 0 SEC.

compiling exported weierstrassSigma : (F,F,F) -> F Time: 0 SEC.

compiling exported weierstrassZeta : (F,F,F) -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RetractableTo (Integer)) compiling exported hypergeometricF : (List F,List F,F) -> F Time: 0.03 SEC.

compiling exported meijerG : (List F,List F,List F,List F,F) -> F Time: 0.01 SEC.

importing List Kernel F processing macro definition dummy ==> ::((Sel (Symbol) new),F) compiling local grad2 : (List F,Symbol,BasicOperator,(F,F) -> F) -> F Time: 0.04 SEC.

compiling local grad3 : (List F,Symbol,BasicOperator,(F,F,F) -> F) -> F Time: 0.03 SEC.

compiling local grad4 : (List F,Symbol,BasicOperator,(F,F,F,F) -> F) -> F Time: 0.02 SEC.

compiling exported whittakerM : (F,F,F) -> F Time: 0 SEC.

compiling local eWhittakerM : (F,F,F) -> F Time: 0 SEC.

compiling local elWhittakerM : List F -> F Time: 0 SEC.

compiling local eWhittakerMGrad_z : (F,F,F) -> F Time: 0.03 SEC.

compiling local dWhittakerM : (List F,Symbol) -> F Time: 0 SEC.

compiling exported whittakerW : (F,F,F) -> F Time: 0 SEC.

compiling local eWhittakerW : (F,F,F) -> F Time: 0 SEC.

compiling local elWhittakerW : List F -> F Time: 0 SEC.

compiling local eWhittakerWGrad_z : (F,F,F) -> F Time: 0 SEC.

compiling local dWhittakerW : (List F,Symbol) -> F Time: 0 SEC.

compiling exported angerJ : (F,F) -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (TranscendentalFunctionCategory) compiling local eAngerJ : (F,F) -> F Time: 0 SEC.

compiling local elAngerJ : List F -> F Time: 0 SEC.

compiling local eAngerJGrad_z : (F,F) -> F Time: 0 SEC.

compiling local dAngerJ : (List F,Symbol) -> F Time: 0 SEC.

compiling local eeAngerJ : List F -> F Time: 0 SEC.

compiling exported weberE : (F,F) -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (TranscendentalFunctionCategory) compiling local eWeberE : (F,F) -> F Time: 0.21 SEC.

compiling local elWeberE : List F -> F Time: 0 SEC.

compiling local eWeberEGrad_z : (F,F) -> F Time: 0.01 SEC.

compiling local dWeberE : (List F,Symbol) -> F Time: 0 SEC.

compiling local eeWeberE : List F -> F Time: 0 SEC.

compiling exported struveH : (F,F) -> F Time: 0 SEC.

compiling local eStruveH : (F,F) -> F Time: 0 SEC.

compiling local elStruveH : List F -> F Time: 0 SEC.

**** Domain: F already in scope augmenting F: (TranscendentalFunctionCategory) **** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eStruveHGrad_z : (F,F) -> F Time: 0 SEC.

compiling local dStruveH : (List F,Symbol) -> F Time: 0 SEC.

compiling exported struveL : (F,F) -> F Time: 0 SEC.

compiling local eStruveL : (F,F) -> F Time: 0 SEC.

compiling local elStruveL : List F -> F Time: 0 SEC.

**** Domain: F already in scope augmenting F: (TranscendentalFunctionCategory) **** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eStruveLGrad_z : (F,F) -> F Time: 0 SEC.

compiling local dStruveL : (List F,Symbol) -> F Time: 0 SEC.

compiling exported hankelH1 : (F,F) -> F Time: 0 SEC.

compiling local eHankelH1 : (F,F) -> F Time: 0 SEC.

compiling local elHankelH1 : List F -> F Time: 0 SEC.

compiling local eHankelH1Grad_z : (F,F) -> F Time: 0 SEC.

compiling local dHankelH1 : (List F,Symbol) -> F Time: 0 SEC.

compiling exported hankelH2 : (F,F) -> F Time: 0 SEC.

compiling local eHankelH2 : (F,F) -> F Time: 0 SEC.

compiling local elHankelH2 : List F -> F Time: 0 SEC.

compiling local eHankelH2Grad_z : (F,F) -> F Time: 0 SEC.

compiling local dHankelH2 : (List F,Symbol) -> F Time: 0 SEC.

compiling exported lommelS1 : (F,F,F) -> F Time: 0 SEC.

compiling local eLommelS1 : (F,F,F) -> F Time: 0 SEC.

compiling local elLommelS1 : List F -> F Time: 0 SEC.

compiling local eLommelS1Grad_z : (F,F,F) -> F Time: 0 SEC.

compiling local dLommelS1 : (List F,Symbol) -> F Time: 0 SEC.

compiling exported lommelS2 : (F,F,F) -> F Time: 0 SEC.

compiling local eLommelS2 : (F,F,F) -> F Time: 0 SEC.

compiling local elLommelS2 : List F -> F Time: 0 SEC.

compiling local eLommelS2Grad_z : (F,F,F) -> F Time: 0 SEC.

compiling local dLommelS2 : (List F,Symbol) -> F Time: 0 SEC.

compiling exported kummerM : (F,F,F) -> F Time: 0 SEC.

compiling local eKummerM : (F,F,F) -> F Time: 0 SEC.

compiling local elKummerM : List F -> F Time: 0 SEC.

compiling local eKummerMGrad_z : (F,F,F) -> F Time: 0.04 SEC.

compiling local dKummerM : (List F,Symbol) -> F Time: 0 SEC.

compiling exported kummerU : (F,F,F) -> F Time: 0 SEC.

compiling local eKummerU : (F,F,F) -> F Time: 0 SEC.

compiling local elKummerU : List F -> F Time: 0 SEC.

compiling local eKummerUGrad_z : (F,F,F) -> F Time: 0.03 SEC.

compiling local dKummerU : (List F,Symbol) -> F Time: 0 SEC.

compiling exported legendreP : (F,F,F) -> F Time: 0 SEC.

compiling local eLegendreP : (F,F,F) -> F Time: 0 SEC.

compiling local elLegendreP : List F -> F Time: 0 SEC.

compiling local eLegendrePGrad_z : (F,F,F) -> F Time: 0.04 SEC.

compiling local dLegendreP : (List F,Symbol) -> F Time: 0 SEC.

compiling exported legendreQ : (F,F,F) -> F Time: 0 SEC.

compiling local eLegendreQ : (F,F,F) -> F Time: 0 SEC.

compiling local elLegendreQ : List F -> F Time: 0 SEC.

compiling local eLegendreQGrad_z : (F,F,F) -> F Time: 0.04 SEC.

compiling local dLegendreQ : (List F,Symbol) -> F Time: 0 SEC.

compiling exported kelvinBei : (F,F) -> F Time: 0 SEC.

compiling local eKelvinBei : (F,F) -> F Time: 0 SEC.

compiling local elKelvinBei : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eKelvinBeiGrad_z : (F,F) -> F Time: 0 SEC.

compiling local dKelvinBei : (List F,Symbol) -> F Time: 0 SEC.

compiling exported kelvinBer : (F,F) -> F Time: 0 SEC.

compiling local eKelvinBer : (F,F) -> F Time: 0 SEC.

compiling local elKelvinBer : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eKelvinBerGrad_z : (F,F) -> F Time: 0.03 SEC.

compiling local dKelvinBer : (List F,Symbol) -> F Time: 0 SEC.

compiling exported kelvinKei : (F,F) -> F Time: 0 SEC.

compiling local eKelvinKei : (F,F) -> F Time: 0 SEC.

compiling local elKelvinKei : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eKelvinKeiGrad_z : (F,F) -> F Time: 0.01 SEC.

compiling local dKelvinKei : (List F,Symbol) -> F Time: 0 SEC.

compiling exported kelvinKer : (F,F) -> F Time: 0 SEC.

compiling local eKelvinKer : (F,F) -> F Time: 0 SEC.

compiling local elKelvinKer : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eKelvinKerGrad_z : (F,F) -> F Time: 0.02 SEC.

compiling local dKelvinKer : (List F,Symbol) -> F Time: 0 SEC.

compiling exported ellipticK : F -> F Time: 0 SEC.

compiling local eEllipticK : F -> F Time: 0 SEC.

compiling local elEllipticK : List F -> F Time: 0 SEC.

compiling local dEllipticK : F -> F Time: 0.03 SEC.

compiling exported ellipticE : F -> F Time: 0 SEC.

compiling local eEllipticE : F -> F Time: 0 SEC.

compiling local elEllipticE : List F -> F Time: 0 SEC.

compiling local dEllipticE : F -> F Time: 0 SEC.

compiling exported ellipticE : (F,F) -> F Time: 0 SEC.

compiling local eEllipticE2 : (F,F) -> F Time: 0 SEC.

compiling local elEllipticE2 : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eEllipticE2Grad_z : List F -> F Time: 0 SEC.

compiling local eEllipticE2Grad_m : List F -> F Time: 0 SEC.

compiling local inEllipticE2 : List InputForm -> InputForm Time: 0 SEC.

compiling exported ellipticF : (F,F) -> F Time: 0 SEC.

compiling local eEllipticF : (F,F) -> F Time: 0 SEC.

compiling local elEllipticF : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eEllipticFGrad_z : List F -> F Time: 0.10 SEC.

compiling local eEllipticFGrad_m : List F -> F Time: 0.18 SEC.

compiling exported ellipticPi : (F,F,F) -> F Time: 0 SEC.

compiling local eEllipticPi : (F,F,F) -> F Time: 0 SEC.

compiling local elEllipticPi : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) compiling local eEllipticPiGrad_z : List F -> F Time: 1.63 SEC.

compiling local eEllipticPiGrad_n : List F -> F Time: 0.94 SEC.

compiling local eEllipticPiGrad_m : List F -> F Time: 0.04 SEC.

compiling exported jacobiSn : (F,F) -> F Time: 0 SEC.

compiling local eJacobiSn : (F,F) -> F Time: 0 SEC.

compiling local elJacobiSn : List F -> F Time: 0 SEC.

compiling local jacobiGradHelper : (F,F) -> F Time: 0 SEC.

compiling local eJacobiSnGrad_z : List F -> F Time: 0 SEC.

compiling local eJacobiSnGrad_m : List F -> F Time: 0.07 SEC.

compiling exported jacobiCn : (F,F) -> F Time: 0 SEC.

compiling local eJacobiCn : (F,F) -> F Time: 0 SEC.

compiling local elJacobiCn : List F -> F Time: 0 SEC.

compiling local eJacobiCnGrad_z : List F -> F Time: 0 SEC.

compiling local eJacobiCnGrad_m : List F -> F Time: 0.17 SEC.

compiling exported jacobiDn : (F,F) -> F Time: 0 SEC.

compiling local eJacobiDn : (F,F) -> F Time: 0 SEC.

compiling local elJacobiDn : List F -> F Time: 0 SEC.

compiling local eJacobiDnGrad_z : List F -> F Time: 0 SEC.

compiling local eJacobiDnGrad_m : List F -> F Time: 0.17 SEC.

compiling exported jacobiZeta : (F,F) -> F Time: 0 SEC.

compiling local eJacobiZeta : (F,F) -> F Time: 0 SEC.

compiling local elJacobiZeta : List F -> F Time: 0 SEC.

compiling local eJacobiZetaGrad_z : List F -> F Time: 0 SEC.

compiling local eJacobiZetaGrad_m : List F -> F Time: 0.67 SEC.

compiling exported jacobiTheta : (F,F) -> F Time: 0 SEC.

compiling local eJacobiTheta : (F,F) -> F Time: 0 SEC.

compiling local elJacobiTheta : List F -> F Time: 0 SEC.

compiling exported lerchPhi : (F,F,F) -> F Time: 0 SEC.

compiling local eLerchPhi : (F,F,F) -> F Time: 0 SEC.

compiling local elLerchPhi : List F -> F Time: 0 SEC.

compiling local dLerchPhi : (List F,Symbol) -> F Time: 0.45 SEC.

compiling exported riemannZeta : F -> F Time: 0 SEC.

compiling local eRiemannZeta : F -> F Time: 0 SEC.

compiling local elRiemannZeta : List F -> F Time: 0 SEC.

compiling exported charlierC : (F,F,F) -> F Time: 0 SEC.

compiling local eCharlierC : (F,F,F) -> F Time: 0 SEC.

compiling local elCharlierC : List F -> F Time: 0 SEC.

compiling exported hermiteH : (F,F) -> F Time: 0 SEC.

compiling local eHermiteH : (F,F) -> F Time: 0 SEC.

compiling local elHermiteH : List F -> F Time: 0 SEC.

compiling local eHermiteHGrad_z : (F,F) -> F Time: 0.01 SEC.

compiling local dHermiteH : (List F,Symbol) -> F Time: 0 SEC.

compiling exported jacobiP : (F,F,F,F) -> F Time: 0 SEC.

compiling local eJacobiP : (F,F,F,F) -> F Time: 0.03 SEC.

compiling local elJacobiP : List F -> F Time: 0 SEC.

compiling local eJacobiPGrad_z : (F,F,F,F) -> F Time: 0.09 SEC.

compiling local dJacobiP : (List F,Symbol) -> F Time: 0 SEC.

compiling exported laguerreL : (F,F,F) -> F Time: 0 SEC.

compiling local eLaguerreL : (F,F,F) -> F Time: 0 SEC.

compiling local elLaguerreL : List F -> F Time: 0 SEC.

compiling local eLaguerreLGrad_z : (F,F,F) -> F Time: 0 SEC.

compiling local dLaguerreL : (List F,Symbol) -> F Time: 0 SEC.

compiling exported meixnerM : (F,F,F,F) -> F Time: 0 SEC.

compiling local eMeixnerM : (F,F,F,F) -> F Time: 0.02 SEC.

compiling local elMeixnerM : List F -> F Time: 0 SEC.

compiling exported belong? : BasicOperator -> Boolean Time: 0 SEC.

compiling exported operator : BasicOperator -> BasicOperator Time: 0.01 SEC.

compiling local iGamma : F -> F Time: 0 SEC.

compiling local iabs : F -> F Time: 0 SEC.

compiling local iconjugate : Kernel F -> F **** Domain: F already in scope augmenting F: (RadicalCategory) **** Domain: R already in scope augmenting R: (RetractableTo (Integer)) Time: 0 SEC.

compiling exported iiconjugate : F -> F augmenting R: (SIGNATURE R conjugate (R R)) Time: 0.01 SEC.

compiling local iBeta : (F,F) -> F Time: 0 SEC.

compiling local idigamma : F -> F Time: 0 SEC.

compiling local iiipolygamma : (F,F) -> F Time: 0 SEC.

compiling local iiiBesselJ : (F,F) -> F Time: 0 SEC.

compiling local iiiBesselY : (F,F) -> F Time: 0 SEC.

compiling local iiiBesselI : (F,F) -> F Time: 0 SEC.

compiling local iiiBesselK : (F,F) -> F Time: 0 SEC.

importing Fraction Integer ****** Domain: F already in scope augmenting F: (ElementaryFunctionCategory) compiling exported iAiryAi : F -> F Time: 0 SEC.

compiling exported iAiryAiPrime : F -> F Time: 0 SEC.

compiling exported iAiryBi : F -> F Time: 0 SEC.

compiling exported iAiryBiPrime : F -> F Time: 0 SEC.

compiling exported iAiryAi : F -> F Time: 0 SEC.

compiling exported iAiryAiPrime : F -> F Time: 0 SEC.

compiling exported iAiryBi : F -> F Time: 0 SEC.

compiling exported iAiryBiPrime : F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (ElementaryFunctionCategory) compiling exported iLambertW : F -> F Time: 0 SEC.

compiling exported iLambertW : F -> F Time: 0 SEC.

**** Domain: F already in scope augmenting F: (ElementaryFunctionCategory) **** Domain: F already in scope augmenting F: (LiouvillianFunctionCategory) compiling exported iiPolylog : (F,F) -> F Time: 0 SEC.

compiling exported iiPolylog : (F,F) -> F Time: 0 SEC.

compiling exported iiPolylog : (F,F) -> F Time: 0 SEC.

compiling local iPolylog : List F -> F Time: 0 SEC.

compiling local iWeierstrassP : (F,F,F) -> F Time: 0 SEC.

compiling local iWeierstrassPPrime : (F,F,F) -> F Time: 0 SEC.

compiling local iWeierstrassSigma : (F,F,F) -> F Time: 0 SEC.

compiling local iWeierstrassZeta : (F,F,F) -> F Time: 0 SEC.

augmenting R: (SIGNATURE R abs (R R)) importing Polynomial R compiling exported iiabs : F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (RadicalCategory) augmenting R: (SIGNATURE R conjugate (R R)) compiling exported iiabs : F -> F Time: 0 SEC.

compiling exported iiabs : F -> F Time: 0 SEC.

compiling exported iiabs : F -> F Time: 0 SEC.

****** Domain: R already in scope augmenting R: (SpecialFunctionCategory) compiling exported iiGamma : F -> F Time: 0 SEC.

compiling exported iiBeta : List F -> F Time: 0 SEC.

compiling exported iidigamma : F -> F Time: 0 SEC.

compiling exported iipolygamma : List F -> F Time: 0 SEC.

compiling exported iiBesselJ : List F -> F Time: 0 SEC.

compiling exported iiBesselY : List F -> F Time: 0 SEC.

compiling exported iiBesselI : List F -> F Time: 0 SEC.

compiling exported iiBesselK : List F -> F Time: 0 SEC.

compiling exported iiAiryAi : F -> F Time: 0 SEC.

compiling exported iiAiryAiPrime : F -> F Time: 0 SEC.

compiling exported iiAiryBi : F -> F Time: 0 SEC.

compiling exported iiAiryBi : F -> F Time: 0 SEC.

****** Domain: R already in scope augmenting R: (RetractableTo (Integer)) compiling exported iiGamma : F -> F Time: 0 SEC.

compiling exported iiGamma : F -> F Time: 0 SEC.

compiling exported iiBeta : List F -> F Time: 0 SEC.

compiling exported iidigamma : F -> F Time: 0 SEC.

compiling exported iipolygamma : List F -> F Time: 0 SEC.

compiling exported iiBesselJ : List F -> F Time: 0 SEC.

compiling exported iiBesselY : List F -> F Time: 0 SEC.

compiling exported iiBesselI : List F -> F Time: 0 SEC.

compiling exported iiBesselK : List F -> F Time: 0 SEC.

compiling exported iiAiryAi : F -> F Time: 0 SEC.

compiling exported iiAiryAiPrime : F -> F Time: 0 SEC.

compiling exported iiAiryBi : F -> F Time: 0 SEC.

compiling exported iiAiryBiPrime : F -> F Time: 0 SEC.

compiling local iiWeierstrassP : List F -> F Time: 0 SEC.

compiling local iiWeierstrassPPrime : List F -> F Time: 0 SEC.

compiling local iiWeierstrassSigma : List F -> F Time: 0 SEC.

compiling local iiWeierstrassZeta : List F -> F Time: 0 SEC.

compiling local diff1 : (BasicOperator,F,F) -> F Time: 0.32 SEC.

compiling local iBesselJ : (List F,Symbol) -> F Time: 0.03 SEC.

compiling local iBesselY : (List F,Symbol) -> F Time: 0.04 SEC.

compiling local iBesselI : (List F,Symbol) -> F Time: 0.03 SEC.

compiling local iBesselK : (List F,Symbol) -> F Time: 0.04 SEC.

compiling local dPolylog : (List F,Symbol) -> F Time: 0.02 SEC.

compiling local ipolygamma : (List F,Symbol) -> F Time: 0 SEC.

compiling local iBetaGrad1 : List F -> F Time: 0 SEC.

compiling local iBetaGrad2 : List F -> F Time: 0 SEC.

****** Domain: F already in scope augmenting F: (ElementaryFunctionCategory) compiling local iGamma2 : (List F,Symbol) -> F Time: 0.04 SEC.

compiling local inGamma2 : List InputForm -> InputForm Time: 0 SEC.

compiling local dLambertW : F -> F Time: 0 SEC.

compiling local iWeierstrassPGrad1 : List F -> F Time: 104.52 SEC.

compiling local iWeierstrassPGrad2 : List F -> F Time: 9.71 SEC.

compiling local iWeierstrassPGrad3 : List F -> F Time: 0 SEC.

compiling local iWeierstrassPPrimeGrad1 : List F -> F Time: 126.21 SEC.

compiling local iWeierstrassPPrimeGrad2 : List F -> F Time: 17.52 SEC.

compiling local iWeierstrassPPrimeGrad3 : List F -> F Time: 0 SEC.

compiling local iWeierstrassSigmaGrad1 : List F -> F Welcome to LDB, a low-level debugger for the Lisp runtime environment. (GC in progress, oldspace=3, newspace=4) ldb>


Some or all expressions may not have rendered properly, because Latex returned the following error:
! Missing $ inserted.
<inserted text> 
                $
l.137 

Overfull \hbox (99.52426pt too wide) in paragraph at lines 126--137 \OML/cmm/m/it/12 ManuelBronstein \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 DateCreate d \OT1/cmr/m/n/12 : 18\OML/cmm/m/it/12 Apr\OT1/cmr/m/n/12 1989 + +\OML/cmm/m/it /12 DateLastUpdated \OT1/cmr/m/n/12 : 4\OML/cmm/m/it/12 October\OT1/cmr/m/n/12 1993 + +\OML/cmm/m/it/12 Description \OT1/cmr/m/n/12 : \OML/cmm/m/it/12 Provide ssomespecialfunctionsoveranintegraldomain: \OT1/cmr/m/n/12 +

Overfull \hbox (40.15955pt too wide) in paragraph at lines 126--137 \OT1/cmr/m/n/12 +\OML/cmm/m/it/12 Keywords \OT1/cmr/m/n/12 : \OML/cmm/m/it/12 s pecial; function:FunctionalSpecialFunction\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 R; F\OT1/cmr/m/n/12 ) : \OML/cmm/m/it/12 Exports \OT1/cmr/m/n/12 == \OML/cmm/m/it/ 12 ImplementationwhereR \OT1/cmr/m/n/12 : \OML/cmm/m/it/12 Join\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 Comparable; IntegralDomain\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 F \OT1/cmr/m/n/12 : Missing $ inserted. <inserted text> $ l.248 ++ integrate(1/sqrt((1-t^ 2)(1-mt^2)), t = 0..1)} Extra }, or forgotten $. l.248 ...ate(1/sqrt((1-t^2)(1-mt^2)), t = 0..1)}

Missing $ inserted. <inserted text> $ l.346

Overfull \hbox (45.2345pt too wide) in paragraph at lines 143--346 []\OML/cmm/m/it/12 ellipticE \OT1/cmr/m/n/12 : (\OML/cmm/m/it/12 F; F\OT1/cmr/m /n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/ it/12 ellipticE\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z; m\OT1/cmr/m/n/12 )\OML/cmm/ m/it/12 istheincompleteellipticintegralofthe \OT1/cmr/m/n/12 +

Overfull \hbox (133.79897pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 +\OML/cmm/m/it/12 secondkind \OT1/cmr/m/n/12 : []\OML/cmm/m/it/ 12 ellipticF \OT1/cmr/m/n/12 : (\OML/cmm/m/it/12 F; F\OT1/cmr/m/n/12 )\OMS/cmsy /m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 ellipticF\ OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z; m\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 istheinc ompleteellipticintegralofthe \OT1/cmr/m/n/12 +

Overfull \hbox (147.59161pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 +\OML/cmm/m/it/12 firstkind \OT1/cmr/m/n/12 : []\OML/cmm/m/it/1 2 ellipticPi \OT1/cmr/m/n/12 : (\OML/cmm/m/it/12 F; F; F\OT1/cmr/m/n/12 )\OMS/c msy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 ellipti cPi\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z; n; m\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 i stheincompleteellipticintegralof \OT1/cmr/m/n/12 +

Overfull \hbox (253.87451pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 +\OML/cmm/m/it/12 thethirdkind \OT1/cmr/m/n/12 : []\OML/cmm/m/i t/12 jacobiSn \OT1/cmr/m/n/12 : (\OML/cmm/m/it/12 F; F\OT1/cmr/m/n/12 )\OMS/cms y/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 jacobiSn\ OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z; m\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 istheJac obiellipticsnfunction; defined \OT1/cmr/m/n/12 +

Overfull \hbox (208.28894pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 +\OML/cmm/m/it/12 bytheformula[]jacobiCn \OT1/cmr/m/n/12 : (\OM L/cmm/m/it/12 F; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \O T1/cmr/m/n/12 + +\OML/cmm/m/it/12 jacobiCn\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z; m\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 istheJacobiellipticcnfunction; defined \OT1/ cmr/m/n/12 + +\OML/cmm/m/it/12 by[]and \OT1/cmr/m/n/12 +

Overfull \hbox (91.54376pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 +[]\OML/cmm/m/it/12 jacobiDn \OT1/cmr/m/n/12 : (\OML/cmm/m/it/1 2 F; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/1 2 + +\OML/cmm/m/it/12 jacobiDn\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z; m\OT1/cmr/m/ n/12 )\OML/cmm/m/it/12 istheJacobiellipticdnfunction; defined \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 by[]and \OT1/cmr/m/n/12 +

Overfull \hbox (285.62952pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 +[]\OML/cmm/m/it/12 jacobiZeta \OT1/cmr/m/n/12 : (\OML/cmm/m/it /12 F; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n /12 + +\OML/cmm/m/it/12 jacobiZeta\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z; m\OT1/cm r/m/n/12 )\OML/cmm/m/it/12 istheJacobiellipticzetafunction; defined \OT1/cmr/m/ n/12 + +\OML/cmm/m/it/12 by[]and \OT1/cmr/m/n/12 +

Overfull \hbox (246.00099pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 +[]\OML/cmm/m/it/12 :jacobiTheta \OT1/cmr/m/n/12 : (\OML/cmm/m/ it/12 F; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m /n/12 + +\OML/cmm/m/it/12 jacobiTheta\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 q; z\OT1 /cmr/m/n/12 )\OML/cmm/m/it/12 isthethirdJacobiThetafunctionlerchPhi \OT1/cmr/m/ n/12 : (\OML/cmm/m/it/12 F; F; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/ m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 lerchPhi\OT1/cmr/m/n/12 (\OML/c mm/m/it/12 z; s; a\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 istheLerchPhifunctionrieman nZeta \OT1/cmr/m/n/12 :

Overfull \hbox (10.80869pt too wide) in paragraph at lines 143--346 \OML/cmm/m/it/12 F\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + + \OML/cmm/m/it/12 riemannZeta\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 z\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 istheRiemannZetafunctioncharlierC \OT1/cmr/m/n/12 : (\OML/cmm /m/it/12 F; F; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1 /cmr/m/n/12 + +\OML/cmm/m/it/12 charlierC\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 n; a ; z\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 istheCharlierpolynomialhermiteH \OT1/cmr/m /n/12 :

Overfull \hbox (296.92938pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 (\OML/cmm/m/it/12 F; F; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 laguerreL\OT1/cmr/m/n/ 12 (\OML/cmm/m/it/12 n; a; z\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 istheLaguerrepoly nomialmeixnerM \OT1/cmr/m/n/12 : (\OML/cmm/m/it/12 F; F; F; F\OT1/cmr/m/n/12 )\ OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 me ixnerM\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 n; b; c; z\OT1/cmr/m/n/12 )\OML/cmm/m/i t/12 istheMeixnerpolynomialifFhasRetractableTo\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 Integer\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 thenhypergeometricF \OT1/cmr/m/n/12 :

Overfull \hbox (22.96898pt too wide) in paragraph at lines 143--346 \OT1/cmr/m/n/12 (\OML/cmm/m/it/12 ListF; ListF; F\OT1/cmr/m/n/12 )\OMS/cmsy/m/n /12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 hypergeometric F\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 la; lb; z\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 i sthegeneralizedhypergeometric \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 functionmeije rG \OT1/cmr/m/n/12 : (\OML/cmm/m/it/12 ListF; ListF; ListF; ListF; F\OT1/cmr/m/ n/12 )\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 >

Overfull \hbox (156.48994pt too wide) in paragraph at lines 143--346 \OML/cmm/m/it/12 F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 meijerG\OT1/cmr/m/n/12 ( \OML/cmm/m/it/12 la; lb; lc; ld; z\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 isthemeijer Gfunction \OMS/cmsy/m/n/12 ^^@ ^^@\OML/cmm/m/it/12 Functionsbelowshouldbelocalb utconditionaliiGamma \OT1/cmr/m/n/12 : \OML/cmm/m/it/12 F\OMS/cmsy/m/n/12 ^^@ \ OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 iiGamma\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 x\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 shouldbelocalbutconditiona l\OT1/cmr/m/n/12 ; \OML/cmm/m/it/12 iiabs \OT1/cmr/m/n/12 :

Overfull \hbox (14.12987pt too wide) in paragraph at lines 143--346 \OML/cmm/m/it/12 F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 iipolygamma\OT1/cmr/m/n/ 12 (\OML/cmm/m/it/12 x\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 shouldbelocalbutconditi onal\OT1/cmr/m/n/12 ; \OML/cmm/m/it/12 iiBesselJ \OT1/cmr/m/n/12 : \OML/cmm/m/i t/12 ListF\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm /m/it/12 iiBesselJ\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 x\OT1/cmr/m/n/12 )\OML/cmm/ m/it/12 shouldbelocalbutconditional\OT1/cmr/m/n/12 ; \OML/cmm/m/it/12 iiBesselY \OT1/cmr/m/n/12 : \OML/cmm/m/it/12 ListF\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 >

Overfull \hbox (62.82597pt too wide) in paragraph at lines 143--346 \OML/cmm/m/it/12 F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 iAiryBiPrime\OT1/cmr/m/n /12 (\OML/cmm/m/it/12 x\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 shouldbelocalbutcondit ional\OT1/cmr/m/n/12 ; \OML/cmm/m/it/12 iiHypergeometricF \OT1/cmr/m/n/12 : \OM L/cmm/m/it/12 ListF\OMS/cmsy/m/n/12 ^^@ \OML/cmm/m/it/12 > F \OT1/cmr/m/n/12 + +\OML/cmm/m/it/12 iiHypergeometricF\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 l\OT1/cmr/ m/n/12 )\OML/cmm/m/it/12 shouldbelocalbutconditional\OT1/cmr/m/n/12 ; \OML/cmm/ m/it/12 iiPolylog \OT1/cmr/m/n/12 : [2] Missing $ inserted. <inserted text> $ l.406 op_ log_gamma := operator('%logGamma)$CommonOperators Missing $ inserted. <inserted text> $ l.410

Overfull \hbox (151.08142pt too wide) in paragraph at lines 378--410 []\T1/cmr/m/n/12 opabs := operator('abs)$\OML/cmm/m/it/12 CommonOperatorsopconj ugate \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 operator\OT1/cmr/m/n/12 ([]\OML/cmm/m /it/12 conjugate\OT1/cmr/m/n/12 )$\T1/cmr/m/n/12 CommonOperators opGamma := ope rator('Gamma)$\OML/cmm/m/it/12 CommonOperatorsopGamma\OT1/cmr/m/n/12 2 :=

Overfull \hbox (186.6305pt too wide) in paragraph at lines 378--410 \T1/cmr/m/n/12 op-polygamma := operator('polygamma)$\OML/cmm/m/it/12 CommonOper atorsopBesselJ \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 operator\OT1/cmr/m/n/12 ([]\ OML/cmm/m/it/12 besselJ\OT1/cmr/m/n/12 )$\T1/cmr/m/n/12 CommonOperators opBesse lY := operator('besselY)$\OML/cmm/m/it/12 CommonOperatorsopBesselI \OT1/cmr/m/n /12 :=

Overfull \hbox (253.7869pt too wide) in paragraph at lines 378--410 \T1/cmr/m/n/12 opAiryAiPrime := operator('airyAiPrime)$\OML/cmm/m/it/12 CommonO peratorsopAiryBi \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 operator\OT1/cmr/m/n/12 ([ ]\OML/cmm/m/it/12 airyBi\OT1/cmr/m/n/12 )$\T1/cmr/m/n/12 CommonOperators opAiry -BiPrime := operator('airyBiPrime)$\OML/cmm/m/it/12 CommonOperatorsopLambertW \ OT1/cmr/m/n/12 :=

Overfull \hbox (80.33168pt too wide) in paragraph at lines 378--410 \OML/cmm/m/it/12 operator\OT1/cmr/m/n/12 ([]\OML/cmm/m/it/12 lambertW\OT1/cmr/m /n/12 )$\T1/cmr/m/n/12 CommonOperators op-Poly-log := operator('polylog)$\OML/c mm/m/it/12 CommonOperatorsopWeierstrassP \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 op erator\OT1/cmr/m/n/12 ([]\OML/cmm/m/it/12 weierstrassP\OT1/cmr/m/n/12 )$\T1/cmr /m/n/12 CommonOperators

Overfull \hbox (37.12933pt too wide) in paragraph at lines 378--410 \T1/cmr/m/n/12 op-Weier-strassP-Prime := operator('weierstrassPPrime)$\OML/cmm/ m/it/12 CommonOperatorsopWeierstrassSigma \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 o perator\OT1/cmr/m/n/12 ([]\OML/cmm/m/it/12 weierstrassSigma\OT1/cmr/m/n/12 )$\T 1/cmr/m/n/12 CommonOperators

Overfull \hbox (197.80972pt too wide) in paragraph at lines 378--410 \T1/cmr/m/n/12 op-Mei-jerG := operator('meijerG)$\OML/cmm/m/it/12 CommonOperato rsopCharlierC \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 operator\OT1/cmr/m/n/12 ([]\O ML/cmm/m/it/12 charlierC\OT1/cmr/m/n/12 )$\T1/cmr/m/n/12 CommonOperators opHer- miteH := operator('hermiteH)$\OML/cmm/m/it/12 CommonOperatorsopJacobiP \OT1/cmr /m/n/12 :=

Overfull \hbox (63.8742pt too wide) in paragraph at lines 378--410 \OML/cmm/m/it/12 operator\OT1/cmr/m/n/12 ([]\OML/cmm/m/it/12 jacobiP\OT1/cmr/m/ n/12 )$\T1/cmr/m/n/12 CommonOperators opLa-guer-reL := operator('laguerreL)$\OM L/cmm/m/it/12 CommonOperatorsopMeixnerM \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 ope rator\OT1/cmr/m/n/12 ([]\OML/cmm/m/it/12 meixnerM\OT1/cmr/m/n/12 )$\T1/cmr/m/n/ 12 CommonOperators [3] You can't use `macro parameter character #' in horizontal mode. l.434 nai := # a You can't use `macro parameter character #' in horizontal mode. l.435 nbi := # b You can't use `macro parameter character #' in horizontal mode. l.437 p := (# a)::F You can't use `macro parameter character #' in horizontal mode. l.438 q := (# b)::F You can't use `macro parameter character #' in horizontal mode. l.442 n1 := (# a)::F You can't use `macro parameter character #' in horizontal mode. l.443 n2 := (# b)::F You can't use `macro parameter character #' in horizontal mode. l.444 m1 := (# c)::F You can't use `macro parameter character #' in horizontal mode. l.445 m2 := (# d)::F Missing $ inserted. <inserted text> $ l.452

Missing $ inserted. <inserted text> $ l.499

Missing $ inserted. <inserted text> $ l.507

Overfull \hbox (124.11664pt too wide) in paragraph at lines 505--507 []\T1/cmr/m/n/12 elWeierstrassPInverse(l : List F) : F == eWeier-strassPIn-vers e(l(1), l(2), l(3)) eval-u-ate(opWeierstrassPInverse, elWeierstrassPInverse)$\O ML/cmm/m/it/12 BasicOperatorFunctions\OT1/cmr/m/n/12 1(\OML/cmm/m/it/12 F\OT1/c mr/m/n/12 )$ Missing $ inserted. <inserted text> $ l.510 eWeierstrassPInverseGrad_ g2(l : List F) : F == Missing $ inserted. <inserted text> $ l.515

Missing $ inserted. <inserted text> $ l.516 eWeierstrassPInverseGrad_ g3(l : List F) : F == Missing $ inserted. <inserted text> $ l.521

Missing $ inserted. <inserted text> $ l.522 eWeierstrassPInverseGrad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.527

Missing $ inserted. <inserted text> $ l.528 ...trassPInverse, [eWeierstrassPInverseGrad_ g2, Missing $ inserted. <inserted text> $ l.530

Missing $ inserted. <inserted text> $ l.536

[4] Missing $ inserted. <inserted text> $ l.544

Missing $ inserted. <inserted text> $ l.545 eWhittakerMGrad_ z(k : F, m : F, z : F) : F == Missing $ inserted. <inserted text> $ l.548

Missing $ inserted. <inserted text> $ l.550 ...rad3(l, t, opWhittakerM, eWhittakerMGrad_ z) Missing $ inserted. <inserted text> $ l.551

Missing $ inserted. <inserted text> $ l.558

Missing $ inserted. <inserted text> $ l.566

Missing $ inserted. <inserted text> $ l.567 eWhittakerWGrad_ z(k : F, m : F, z : F) : F == Missing $ inserted. <inserted text> $ l.569

Missing $ inserted. <inserted text> $ l.571 ...rad3(l, t, opWhittakerW, eWhittakerWGrad_ z) Missing $ inserted. <inserted text> $ l.572

Missing $ inserted. <inserted text> $ l.579

Missing $ inserted. <inserted text> $ l.590

Missing $ inserted. <inserted text> $ l.591 eAngerJGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.593

Missing $ inserted. <inserted text> $ l.595 ... grad2(l, t, opAngerJ, eAngerJGrad_ z) Missing $ inserted. <inserted text> $ l.596

Missing $ inserted. <inserted text> $ l.604

Missing $ inserted. <inserted text> $ l.608

Missing $ inserted. <inserted text> $ l.614 z = 0 => 2sin(ahalfvpi())^ 2/(vpi()) Missing $ inserted. <inserted text> $ l.616

Missing $ inserted. <inserted text> $ l.619

Missing $ inserted. <inserted text> $ l.620 eWeberEGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.622

Missing $ inserted. <inserted text> $ l.624 ... grad2(l, t, opWeberE, eWeberEGrad_ z) Missing $ inserted. <inserted text> $ l.625

Missing $ inserted. <inserted text> $ l.633

Missing $ inserted. <inserted text> $ l.637

[5] Missing $ inserted. <inserted text> $ l.645

Missing $ inserted. <inserted text> $ l.649 eStruveHGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.652

Missing $ inserted. <inserted text> $ l.654 ... grad2(l, t, opStruveH, eStruveHGrad_ z) Missing $ inserted. <inserted text> $ l.655

Missing $ inserted. <inserted text> $ l.662

Missing $ inserted. <inserted text> $ l.670

Missing $ inserted. <inserted text> $ l.674 eStruveLGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.677

Missing $ inserted. <inserted text> $ l.679 ... grad2(l, t, opStruveL, eStruveLGrad_ z) Missing $ inserted. <inserted text> $ l.680

Missing $ inserted. <inserted text> $ l.687

Missing $ inserted. <inserted text> $ l.695

Missing $ inserted. <inserted text> $ l.696 eHankelH1Grad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.698

Missing $ inserted. <inserted text> $ l.700 ... grad2(l, t, opHankelH1, eHankelH1Grad_ z) Missing $ inserted. <inserted text> $ l.701

Missing $ inserted. <inserted text> $ l.708

Missing $ inserted. <inserted text> $ l.716

Missing $ inserted. <inserted text> $ l.717 eHankelH2Grad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.719

Missing $ inserted. <inserted text> $ l.721 ... grad2(l, t, opHankelH2, eHankelH2Grad_ z) Missing $ inserted. <inserted text> $ l.722

Missing $ inserted. <inserted text> $ l.729

Missing $ inserted. <inserted text> $ l.737

Missing $ inserted. <inserted text> $ l.738 eLommelS1Grad_ z(m : F, v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.740

[6] Missing $ inserted. <inserted text> $ l.742 ... grad3(l, t, opLommelS1, eLommelS1Grad_ z) Missing $ inserted. <inserted text> $ l.743

Missing $ inserted. <inserted text> $ l.750

Missing $ inserted. <inserted text> $ l.758

Missing $ inserted. <inserted text> $ l.759 eLommelS2Grad_ z(m : F, v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.761

Missing $ inserted. <inserted text> $ l.763 ... grad3(l, t, opLommelS2, eLommelS2Grad_ z) Missing $ inserted. <inserted text> $ l.764

Missing $ inserted. <inserted text> $ l.771

Missing $ inserted. <inserted text> $ l.780

Missing $ inserted. <inserted text> $ l.781 eKummerMGrad_ z(a : F, b : F, z : F) : F == Missing $ inserted. <inserted text> $ l.783

Missing $ inserted. <inserted text> $ l.785 grad3(l, t, opKummerM, eKummerMGrad_ z) Missing $ inserted. <inserted text> $ l.786

Missing $ inserted. <inserted text> $ l.793

Missing $ inserted. <inserted text> $ l.801

Missing $ inserted. <inserted text> $ l.802 eKummerUGrad_ z(a : F, b : F, z : F) : F == Missing $ inserted. <inserted text> $ l.804

Missing $ inserted. <inserted text> $ l.806 grad3(l, t, opKummerU, eKummerUGrad_ z) Missing $ inserted. <inserted text> $ l.807

Missing $ inserted. <inserted text> $ l.814

Missing $ inserted. <inserted text> $ l.822

Missing $ inserted. <inserted text> $ l.823 eLegendrePGrad_ z(nu : F, mu : F, z : F) : F == Missing $ inserted. <inserted text> $ l.826

Missing $ inserted. <inserted text> $ l.828 ... grad3(l, t, opLegendreP, eLegendrePGrad_ z) Missing $ inserted. <inserted text> $ l.829

Missing $ inserted. <inserted text> $ l.836

[7] Missing $ inserted. <inserted text> $ l.844

Missing $ inserted. <inserted text> $ l.845 eLegendreQGrad_ z(nu : F, mu : F, z : F) : F == Missing $ inserted. <inserted text> $ l.848

Missing $ inserted. <inserted text> $ l.850 ... grad3(l, t, opLegendreQ, eLegendreQGrad_ z) Missing $ inserted. <inserted text> $ l.851

Missing $ inserted. <inserted text> $ l.858

Missing $ inserted. <inserted text> $ l.866

Missing $ inserted. <inserted text> $ l.869 eKelvinBeiGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.872

Missing $ inserted. <inserted text> $ l.874 ... grad2(l, t, opKelvinBei, eKelvinBeiGrad_ z) Missing $ inserted. <inserted text> $ l.875

Missing $ inserted. <inserted text> $ l.882

Missing $ inserted. <inserted text> $ l.890

Missing $ inserted. <inserted text> $ l.893 eKelvinBerGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.896

Missing $ inserted. <inserted text> $ l.898 ... grad2(l, t, opKelvinBer, eKelvinBerGrad_ z) Missing $ inserted. <inserted text> $ l.899

Missing $ inserted. <inserted text> $ l.906

Missing $ inserted. <inserted text> $ l.914

Missing $ inserted. <inserted text> $ l.917 eKelvinKeiGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.920

Missing $ inserted. <inserted text> $ l.922 ... grad2(l, t, opKelvinKei, eKelvinKeiGrad_ z) Missing $ inserted. <inserted text> $ l.923

Missing $ inserted. <inserted text> $ l.930

Missing $ inserted. <inserted text> $ l.938

Missing $ inserted. <inserted text> $ l.941 eKelvinKerGrad_ z(v : F, z : F) : F == Missing $ inserted. <inserted text> $ l.944

[8] Missing $ inserted. <inserted text> $ l.946 ... grad2(l, t, opKelvinKer, eKelvinKerGrad_ z) Missing $ inserted. <inserted text> $ l.947

Missing $ inserted. <inserted text> $ l.954

Missing $ inserted. <inserted text> $ l.962

Missing $ inserted. <inserted text> $ l.971

Missing $ inserted. <inserted text> $ l.979

Missing $ inserted. <inserted text> $ l.988

Missing $ inserted. <inserted text> $ l.998

Missing $ inserted. <inserted text> $ l.1001 eEllipticE2Grad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.1005

Missing $ inserted. <inserted text> $ l.1006 eEllipticE2Grad_ m(l : List F) : F == Missing $ inserted. <inserted text> $ l.1010

Missing $ inserted. <inserted text> $ l.1011 ...rivative(opEllipticE2, [eEllipticE2Grad_ z, eEllipticE2Grad_m]) Missing $ inserted. <inserted text> $ l.1012

Missing $ inserted. <inserted text> $ l.1021

Missing $ inserted. <inserted text> $ l.1031

Missing $ inserted. <inserted text> $ l.1034 eEllipticFGrad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.1038

Missing $ inserted. <inserted text> $ l.1039 eEllipticFGrad_ m(l : List F) : F == Missing $ inserted. <inserted text> $ l.1044

Missing $ inserted. <inserted text> $ l.1045 ...derivative(opEllipticF, [eEllipticFGrad_ z, eEllipticFGrad_m]) Missing $ inserted. <inserted text> $ l.1046

[9] Missing $ inserted. <inserted text> $ l.1050

Missing $ inserted. <inserted text> $ l.1059

Missing $ inserted. <inserted text> $ l.1062 eEllipticPiGrad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.1067

Missing $ inserted. <inserted text> $ l.1068 eEllipticPiGrad_ n(l : List F) : F == Missing $ inserted. <inserted text> $ l.1078

Missing $ inserted. <inserted text> $ l.1079 eEllipticPiGrad_ m(l : List F) : F == Missing $ inserted. <inserted text> $ l.1086

Missing $ inserted. <inserted text> $ l.1087 ...rivative(opEllipticPi, [eEllipticPiGrad_ z, eEllipticPiGrad_n, Missing $ inserted. <inserted text> $ l.1089

Missing $ inserted. <inserted text> $ l.1093

Missing $ inserted. <inserted text> $ l.1106

Missing $ inserted. <inserted text> $ l.1110 eJacobiSnGrad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.1114

Missing $ inserted. <inserted text> $ l.1115 eJacobiSnGrad_ m(l : List F) : F == Missing $ inserted. <inserted text> $ l.1120

Missing $ inserted. <inserted text> $ l.1121 derivative(opJacobiSn, [eJacobiSnGrad_ z, eJacobiSnGrad_m]) Missing $ inserted. <inserted text> $ l.1122

Missing $ inserted. <inserted text> $ l.1126

Missing $ inserted. <inserted text> $ l.1135

Missing $ inserted. <inserted text> $ l.1136 eJacobiCnGrad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.1140

Missing $ inserted. <inserted text> $ l.1141 eJacobiCnGrad_ m(l : List F) : F == Missing $ inserted. <inserted text> $ l.1146

Missing $ inserted. <inserted text> $ l.1147 derivative(opJacobiCn, [eJacobiCnGrad_ z, eJacobiCnGrad_m]) Missing $ inserted. <inserted text> $ l.1148

Missing $ inserted. <inserted text> $ l.1152

Missing $ inserted. <inserted text> $ l.1161

Missing $ inserted. <inserted text> $ l.1162 eJacobiDnGrad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.1166

[10] Missing $ inserted. <inserted text> $ l.1167 eJacobiDnGrad_ m(l : List F) : F == Missing $ inserted. <inserted text> $ l.1172

Missing $ inserted. <inserted text> $ l.1173 derivative(opJacobiDn, [eJacobiDnGrad_ z, eJacobiDnGrad_m]) Missing $ inserted. <inserted text> $ l.1174

Missing $ inserted. <inserted text> $ l.1178

Missing $ inserted. <inserted text> $ l.1187

Missing $ inserted. <inserted text> $ l.1188 eJacobiZetaGrad_ z(l : List F) : F == Missing $ inserted. <inserted text> $ l.1193

Missing $ inserted. <inserted text> $ l.1194 eJacobiZetaGrad_ m(l : List F) : F == Missing $ inserted. <inserted text> $ l.1206

Missing $ inserted. <inserted text> $ l.1207 ...rivative(opJacobiZeta, [eJacobiZetaGrad_ z, eJacobiZetaGrad_m]) Missing $ inserted. <inserted text> $ l.1208

Missing $ inserted. <inserted text> $ l.1212

Missing $ inserted. <inserted text> $ l.1220

Missing $ inserted. <inserted text> $ l.1224

Missing $ inserted. <inserted text> $ l.1228 -- z = 0 => 1/a^ s Missing $ inserted. <inserted text> $ l.1231

Missing $ inserted. <inserted text> $ l.1234

Missing $ inserted. <inserted text> $ l.1252

Missing $ inserted. <inserted text> $ l.1260

Missing $ inserted. <inserted text> $ l.1274

[11] Missing $ inserted. <inserted text> $ l.1287

Missing $ inserted. <inserted text> $ l.1288 eHermiteHGrad_ z(n : F, z : F) : F == (2::F)nhermiteH(n - 1, z) Missing $ inserted. <inserted text> $ l.1289

Missing $ inserted. <inserted text> $ l.1291 ... grad2(l, t, opHermiteH, eHermiteHGrad_ z) Missing $ inserted. <inserted text> $ l.1292

Missing $ inserted. <inserted text> $ l.1308

Missing $ inserted. <inserted text> $ l.1309 eJacobiPGrad_ z(n : F, a : F, b : F, z : F) : F == Missing $ inserted. <inserted text> $ l.1311

Missing $ inserted. <inserted text> $ l.1313 ... grad4(l, t, opJacobiP, eJacobiPGrad_ z) Missing $ inserted. <inserted text> $ l.1314

Missing $ inserted. <inserted text> $ l.1330

Missing $ inserted. <inserted text> $ l.1331 eLaguerreLGrad_ z(n : F, a : F, z : F) : F == Missing $ inserted. <inserted text> $ l.1333

Missing $ inserted. <inserted text> $ l.1335 ...grad3(l, t, opLaguerreL, eLaguerreLGrad_ z) Missing $ inserted. <inserted text> $ l.1336

Missing $ inserted. <inserted text> $ l.1351

[12] Overfull \hbox (34.30756pt too wide) in paragraph at lines 1437--1451 []\T1/cmr/m/n/12 iconjugate(k:K):F == --output("in: ",k::OutputForm)$\OML/cmm/m /it/12 OutputPackageifis\OT1/cmr/m/n/12 ?(\OML/cmm/m/it/12 k; opconjugate\OT1/c mr/m/n/12 )\OML/cmm/m/it/12 thenx \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 argument\ OT1/cmr/m/n/12 (\OML/cmm/m/it/12 k\OT1/cmr/m/n/12 )(1)\OML/cmm/m/it/12 elseifis \OT1/cmr/m/n/12 ?(\OML/cmm/m/it/12 k; opabs\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 th enx \OT1/cmr/m/n/12 :=

Overfull \hbox (140.67513pt too wide) in paragraph at lines 1437--1451 \OML/cmm/m/it/12 k \OT1/cmr/m/n/12 :: \OML/cmm/m/it/12 FelseifsymbolIfCan\OT1/c mr/m/n/12 (\OML/cmm/m/it/12 k\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 caseSymbolthenx \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 kernel\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 opc onjugate; k \OT1/cmr/m/n/12 :: \OML/cmm/m/it/12 F\OT1/cmr/m/n/12 )\OML/cmm/m/it /12 elseifFhasRadicalCategoryandRhasRetractableTo\OT1/cmr/m/n/12 (\OML/cmm/m/it /12 Integer\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 andis\OT1/cmr/m/n/12 ?(\OML/cmm/m/ it/12 k;[] nthRoot\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 thenx \OT1/cmr/m/n/12 :=

Overfull \hbox (34.8454pt too wide) in paragraph at lines 1437--1451 \OT1/cmr/m/n/12 1\OML/cmm/m/it/12 =nthRoot\OT1/cmr/m/n/12 (1\OML/cmm/m/it/12 =i iconjugateargument\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 k\OT1/cmr/m/n/12 )(1)\OML/c mm/m/it/12 ; retract\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 argument\OT1/cmr/m/n/12 ( \OML/cmm/m/it/12 k\OT1/cmr/m/n/12 )(2))@\OML/cmm/m/it/12 Integer\OT1/cmr/m/n/12 )\OML/cmm/m/it/12 else \OMS/cmsy/m/n/12 ^^@ ^^@\OML/cmm/m/it/12 assumeholomorp hicx \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 map\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 i iconjugate; k\OT1/cmr/m/n/12 ) \OMS/cmsy/m/n/12 ^^@ ^^@\OML/cmm/m/it/12 output\ OT1/cmr/m/n/12 ("\OML/cmm/m/it/12 out \OT1/cmr/m/n/12 : Missing $ inserted. <inserted text> $ l.1456 x := reduce(_ +$F,map(iiconjugate,s)) You can't use `macro parameter character #' in horizontal mode. l.1460 else if # (ks:List K:=kernels(x))>0 then Missing $ inserted. <inserted text> $ l.1470

Overfull \hbox (100.31317pt too wide) in paragraph at lines 1452--1470 \OML/cmm/m/it/12 OutputForm\OT1/cmr/m/n/12 )$\T1/cmr/m/n/12 OutputPackage x := reduce($[]$F,map(iiconjugate,s)) else if (s:=isTimes(x)) case List F then --out put("isTimes: ",s::OutputForm)$\OML/cmm/m/it/12 OutputPackagex \OT1/cmr/m/n/12 :=

Overfull \hbox (20.36736pt too wide) in paragraph at lines 1452--1470 \OML/cmm/m/it/12 reduce\OT1/cmr/m/n/12 ([]$\T1/cmr/m/n/12 F,map(iiconjugate,s)) else if (ks:List K:=kernels(x))>0 then --output("kernels: ",ks::OutputForm)$\O ML/cmm/m/it/12 OutputPackagex \OT1/cmr/m/n/12 := \OML/cmm/m/it/12 eval\OT1/cmr/ m/n/12 (\OML/cmm/m/it/12 x; ks;[] ap\OT1/cmr/m/n/12 ((\OML/cmm/m/it/12 k \OT1/c mr/m/n/12 : Missing $ inserted. <inserted text> $ l.1483 zero?(x) => 1::F/((3::F)^ twothirds*Gamma(twothirds)) Missing $ inserted. <inserted text> $ l.1499

Overfull \hbox (79.65605pt too wide) in paragraph at lines 1481--1499 []\T1/cmr/m/n/12 if F has El-e-men-tary-Func-tion-Cat-e-gory then iAiryAi x == zero?(x) => 1::F/((3::F)$[]\OML/cmm/m/it/12 wothirds \OMS/cmsy/m/n/12 ^^C \OML/ cmm/m/it/12 Gamma\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 twothirds\OT1/cmr/m/n/12 ))\ OML/cmm/m/it/12 kernel\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 opAiryAi; x\OT1/cmr/m/n /12 )\OML/cmm/m/it/12 iAiryAiPrimex \OT1/cmr/m/n/12 ==

Overfull \hbox (54.76915pt too wide) in paragraph at lines 1481--1499 \OML/cmm/m/it/12 Gamma\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 twothirds\OT1/cmr/m/n/1 2 ))\OML/cmm/m/it/12 kernel\OT1/cmr/m/n/12 (\OML/cmm/m/it/12 opAiryBi; x\OT1/cm r/m/n/12 )\OML/cmm/m/it/12 iAiryBiPrimex \OT1/cmr/m/n/12 == \OML/cmm/m/it/12 ze ro\OT1/cmr/m/n/12 ?




  Subject: (replying)   Be Bold !!
  ( 15 subscribers )  
Please rate this page: