/usr/share/axiom-20170501/src/algebra/INPRODFF.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | )abbrev package INPRODFF InfiniteProductFiniteField
++ Author: Clifton J. Williamson
++ Date Created: 22 February 1990
++ Date Last Updated: 23 February 1990
++ Description:
++ This package computes infinite products of univariate Taylor series
++ over an arbitrary finite field.
InfiniteProductFiniteField(K,UP,Coef,UTS) : SIG == CODE where
K : Join(Field,Finite,ConvertibleTo Integer)
UP : UnivariatePolynomialCategory K
Coef : MonogenicAlgebra(K,UP)
UTS : UnivariateTaylorSeriesCategory Coef
I ==> Integer
RN ==> Fraction Integer
SAE ==> SimpleAlgebraicExtension
ST ==> Stream
STF ==> StreamTranscendentalFunctions
STT ==> StreamTaylorSeriesOperations
ST2 ==> StreamFunctions2
SUP ==> SparseUnivariatePolynomial
SIG ==> with
infiniteProduct : UTS -> UTS
++ infiniteProduct(f(x)) computes \spad{product(n=1,2,3...,f(x**n))}.
++ The series \spad{f(x)} should have constant coefficient 1.
evenInfiniteProduct : UTS -> UTS
++ evenInfiniteProduct(f(x)) computes \spad{product(n=2,4,6...,f(x**n))}.
++ The series \spad{f(x)} should have constant coefficient 1.
oddInfiniteProduct : UTS -> UTS
++ oddInfiniteProduct(f(x)) computes \spad{product(n=1,3,5...,f(x**n))}.
++ The series \spad{f(x)} should have constant coefficient 1.
generalInfiniteProduct : (UTS,I,I) -> UTS
++ generalInfiniteProduct(f(x),a,d) computes
++ \spad{product(n=a,a+d,a+2*d,...,f(x**n))}.
++ The series \spad{f(x)} should have constant coefficient 1.
CODE ==> add
liftPoly: UP -> SUP RN
liftPoly poly ==
-- lift coefficients of 'poly' to integers
ans : SUP RN := 0
while not zero? poly repeat
coef := convert(leadingCoefficient poly)@I :: RN
ans := ans + monomial(coef,degree poly)
poly := reductum poly
ans
reducePoly: SUP RN -> UP
reducePoly poly ==
-- reduce coefficients of 'poly' to elements of K
ans : UP := 0
while not zero? poly repeat
coef := numer(leadingCoefficient(poly)) :: K
ans := ans + monomial(coef,degree poly)
poly := reductum poly
ans
POLY := liftPoly definingPolynomial()$Coef
ALG := SAE(RN,SUP RN,POLY)
infiniteProduct x ==
stUP := map(lift,coefficients x)$ST2(Coef,UP)
stSUP := map(liftPoly,stUP)$ST2(UP,SUP RN)
stALG := map(reduce,stSUP)$ST2(SUP RN,ALG)
stALG := exp(lambert(log(stALG)$STF(ALG))$STT(ALG))$STF(ALG)
stSUP := map(lift,stALG)$ST2(ALG,SUP RN)
stUP := map(reducePoly,stSUP)$ST2(SUP RN,UP)
series map(reduce,stUP)$ST2(UP,Coef)
evenInfiniteProduct x ==
stUP := map(lift,coefficients x)$ST2(Coef,UP)
stSUP := map(liftPoly,stUP)$ST2(UP,SUP RN)
stALG := map(reduce,stSUP)$ST2(SUP RN,ALG)
stALG := exp(evenlambert(log(stALG)$STF(ALG))$STT(ALG))$STF(ALG)
stSUP := map(lift,stALG)$ST2(ALG,SUP RN)
stUP := map(reducePoly,stSUP)$ST2(SUP RN,UP)
series map(reduce,stUP)$ST2(UP,Coef)
oddInfiniteProduct x ==
stUP := map(lift,coefficients x)$ST2(Coef,UP)
stSUP := map(liftPoly,stUP)$ST2(UP,SUP RN)
stALG := map(reduce,stSUP)$ST2(SUP RN,ALG)
stALG := exp(oddlambert(log(stALG)$STF(ALG))$STT(ALG))$STF(ALG)
stSUP := map(lift,stALG)$ST2(ALG,SUP RN)
stUP := map(reducePoly,stSUP)$ST2(SUP RN,UP)
series map(reduce,stUP)$ST2(UP,Coef)
generalInfiniteProduct(x,a,d) ==
stUP := map(lift,coefficients x)$ST2(Coef,UP)
stSUP := map(liftPoly,stUP)$ST2(UP,SUP RN)
stALG := map(reduce,stSUP)$ST2(SUP RN,ALG)
stALG := generalLambert(log(stALG)$STF(ALG),a,d)$STT(ALG)
stALG := exp(stALG)$STF(ALG)
stSUP := map(lift,stALG)$ST2(ALG,SUP RN)
stUP := map(reducePoly,stSUP)$ST2(SUP RN,UP)
series map(reduce,stUP)$ST2(UP,Coef)
|