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}
\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}
\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}
\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 1140091 tid 1140091:
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.02 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.01 SEC.
   compiling exported meijerG : (List F,List F,List F,List F,F) -> F
Time: 0 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.02 SEC.
   compiling local grad3 : (List F,Symbol,BasicOperator,(F,F,F) -> F) -> F
Time: 0.02 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.02 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.03 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.01 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.01 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.01 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.04 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.46 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 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.04 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.01 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.01 SEC.
   compiling local dLambertW : F -> F
Time: 0 SEC.
   compiling local iWeierstrassPGrad1 : List F -> F
Time: 104.76 SEC.
   compiling local iWeierstrassPGrad2 : List F -> F
Time: 9.74 SEC.
   compiling local iWeierstrassPGrad3 : List F -> F
Time: 0 SEC.
   compiling local iWeierstrassPPrimeGrad1 : List F -> F
Time: 126.45 SEC.
   compiling local iWeierstrassPPrimeGrad2 : List F -> F
Time: 17.56 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 ?