Lazy Laurent Series Rings¶
The ring of lazy Laurent series over a ring has usual arithmetic operations, but it is actually not a ring in the usual sense since every arithmetic operation gives a new series.
EXAMPLES:
The definition of Laurent series rings is not initially imported into the global namespace. You need to import it explicitly to use it:
sage: L.<z> = LazyLaurentSeriesRing(QQ)
sage: L.category()
Category of magmas and additive magmas
sage: 1/(1 - z)
1 + z + z^2 + z^3 + z^4 + z^5 + z^6 + ...
sage: 1/(1 - z) == 1/(1 - z)
True
Lazy Laurent series ring over a finite field:
sage: L.<z> = LazyLaurentSeriesRing(GF(3)); L
Lazy Laurent Series Ring in z over Finite Field of size 3
sage: e = 1/(1 + z)
sage: e.coefficient(100)
1
sage: e.coefficient(100).parent()
Finite Field of size 3
Generating functions of integer sequences are Laurent series over the integer ring:
sage: L.<z> = LazyLaurentSeriesRing(ZZ); L
Lazy Laurent Series Ring in z over Integer Ring
sage: 1/(1 - 2*z)^3
1 + 6*z + 24*z^2 + 80*z^3 + 240*z^4 + 672*z^5 + 1792*z^6 + ...
Power series can be defined recursively:
sage: L.<z> = LazyLaurentSeriesRing(ZZ)
sage: L.series(lambda s,n: (1 + z*s^2)[n], valuation=0)
1 + z + 2*z^2 + 5*z^3 + 14*z^4 + 42*z^5 + 132*z^6 + ...
AUTHORS:
Kwankyu Lee (2019-02-24): initial version
- class sage.rings.lazy_laurent_series_ring.LazyLaurentSeriesRing(base_ring, names, category=None)¶
Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
Lazy Laurent series ring.
INPUT:
base_ring
– base ring of this Laurent series ringnames
– name of the generator of this Laurent series ring
EXAMPLES:
sage: LazyLaurentSeriesRing(ZZ, 't') Lazy Laurent Series Ring in t over Integer Ring
- Element¶
- gen(n=0)¶
Return the generator of this Laurent series ring.
EXAMPLES:
sage: L = LazyLaurentSeriesRing(ZZ, 'z') sage: L.gen() z sage: L.gen(3) Traceback (most recent call last): ... IndexError: there is only one generator
- gens()¶
Return the tuple of the generator.
EXAMPLES:
sage: L.<z> = LazyLaurentSeriesRing(ZZ) sage: 1/(1 - z) 1 + z + z^2 + z^3 + z^4 + z^5 + z^6 + ...
- ngens()¶
Return the number of generators of this Laurent series ring.
This is always 1.
EXAMPLES:
sage: L.<z> = LazyLaurentSeriesRing(ZZ) sage: L.ngens() 1
- one()¶
Return the constant series \(1\).
EXAMPLES:
sage: L = LazyLaurentSeriesRing(ZZ, 'z') sage: L.one() 1
- series(coefficient, valuation, constant=None)¶
Return a lazy Laurent series.
INPUT:
coefficient
– Python function that computes coefficientsvaluation
– integer; approximate valuation of the seriesconstant
– eitherNone
or pair of an element of the base ring and an integer
Let the coefficient of index \(i\) mean the coefficient of the term of the series with exponent \(i\).
Python function
coefficient
returns the value of the coefficient of index \(i\) from input \(s\) and \(i\) where \(s\) is the series itself.Let
valuation
be \(n\). All coefficients of index below \(n\) are zero. Ifconstant
isNone
, then thecoefficient
function is responsible to compute the values of all coefficients of index \(\ge n\). Ifconstant
is a pair \((c,m)\), then thecoefficient
function is responsible to compute the values of all coefficients of index \(\ge n\) and \(< m\) and all the coefficients of index \(\ge m\) is the constant \(c\).EXAMPLES:
sage: L = LazyLaurentSeriesRing(ZZ, 'z') sage: L.series(lambda s, i: i, 5, (1,10)) 5*z^5 + 6*z^6 + 7*z^7 + 8*z^8 + 9*z^9 + z^10 + z^11 + z^12 + ... sage: def g(s, i): ....: if i < 0: ....: return 1 ....: else: ....: return s.coefficient(i - 1) + i sage: e = L.series(g, -5); e z^-5 + z^-4 + z^-3 + z^-2 + z^-1 + 1 + 2*z + ... sage: f = e^-1; f z^5 - z^6 - z^11 + ... sage: f.coefficient(10) 0 sage: f.coefficient(20) 9 sage: f.coefficient(30) -219
Alternatively, the
coefficient
can be a list of elements of the base ring. Then these elements are read as coefficients of the terms of degrees starting from thevaluation
. In this case,constant
may be just an element of the base ring instead of a tuple or can be simply omitted if it is zero.EXAMPLES:
sage: L = LazyLaurentSeriesRing(ZZ, 'z') sage: f = L.series([1,2,3,4], -5) sage: f z^-5 + 2*z^-4 + 3*z^-3 + 4*z^-2 sage: g = L.series([1,3,5,7,9], 5, -1) sage: g z^5 + 3*z^6 + 5*z^7 + 7*z^8 + 9*z^9 - z^10 - z^11 - z^12 + ...
- zero()¶
Return the zero series.
EXAMPLES:
sage: L = LazyLaurentSeriesRing(ZZ, 'z') sage: L.zero() 0