Skip to content

Commit 2099947

Browse files
author
Release Manager
committed
gh-36396: implement Adams operator for lazy power series Here is a first sketch to implement Adams operators on Lazy formal power series. also working in the multivariate case. This will be useful to implement plethystic Exp and Log later. ### 📝 Checklist - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation accordingly. URL: #36396 Reported by: Frédéric Chapoton Reviewer(s): Frédéric Chapoton, Martin Rubey, Travis Scrimshaw
2 parents 3dd953c + 9967f59 commit 2099947

File tree

13 files changed

+227
-143
lines changed

13 files changed

+227
-143
lines changed

src/doc/en/developer/coding_in_other.rst

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,14 @@ In case you are familiar with gp, please note that the PARI C function
9797
may have a name that is different from the corresponding gp function
9898
(for example, see ``mathnf``), so always check the manual.
9999

100-
We can also add a ``frobenius(flag)`` method to the ``matrix_integer``
100+
We can also add a ``frobenius_form(flag)`` method to the ``matrix_integer``
101101
class where we call the ``matfrobenius()`` method on the PARI object
102102
associated to the matrix after doing some sanity checking. Then we
103103
convert output from PARI to Sage objects:
104104

105105
.. CODE-BLOCK:: cython
106106
107-
def frobenius(self, flag=0, var='x'):
107+
def frobenius_form(self, flag=0, var='x'):
108108
"""
109109
Return the Frobenius form (rational canonical form) of this matrix.
110110
@@ -129,13 +129,13 @@ convert output from PARI to Sage objects:
129129
EXAMPLES::
130130
131131
sage: A = MatrixSpace(ZZ, 3)(range(9))
132-
sage: A.frobenius(0)
132+
sage: A.frobenius_form(0)
133133
[ 0 0 0]
134134
[ 1 0 18]
135135
[ 0 1 12]
136-
sage: A.frobenius(1)
136+
sage: A.frobenius_form(1)
137137
[x^3 - 12*x^2 - 18*x]
138-
sage: A.frobenius(1, var='y')
138+
sage: A.frobenius_form(1, var='y')
139139
[y^3 - 12*y^2 - 18*y]
140140
"""
141141
if not self.is_square():

src/sage/categories/bialgebras_with_basis.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from sage.categories.category_with_axiom import CategoryWithAxiom_over_base_ring
1313
from sage.categories.tensor import tensor
14+
from sage.misc.superseded import deprecated_function_alias
1415

1516

1617
class BialgebrasWithBasis(CategoryWithAxiom_over_base_ring):
@@ -146,7 +147,7 @@ def convolution_product(self, *maps):
146147

147148
class ElementMethods:
148149

149-
def adams_operator(self, n):
150+
def convolution_power_of_id(self, n):
150151
r"""
151152
Compute the `n`-th convolution power of the identity morphism
152153
`\mathrm{Id}` on ``self``.
@@ -176,31 +177,31 @@ def adams_operator(self, n):
176177
177178
sage: # needs sage.combinat sage.modules
178179
sage: h = SymmetricFunctions(QQ).h()
179-
sage: h[5].adams_operator(2)
180+
sage: h[5].convolution_power_of_id(2)
180181
2*h[3, 2] + 2*h[4, 1] + 2*h[5]
181182
sage: h[5].plethysm(2*h[1])
182183
2*h[3, 2] + 2*h[4, 1] + 2*h[5]
183-
sage: h([]).adams_operator(0)
184+
sage: h([]).convolution_power_of_id(0)
184185
h[]
185-
sage: h([]).adams_operator(1)
186+
sage: h([]).convolution_power_of_id(1)
186187
h[]
187-
sage: h[3,2].adams_operator(0)
188+
sage: h[3,2].convolution_power_of_id(0)
188189
0
189-
sage: h[3,2].adams_operator(1)
190+
sage: h[3,2].convolution_power_of_id(1)
190191
h[3, 2]
191192
192193
::
193194
194195
sage: S = NonCommutativeSymmetricFunctions(QQ).S() # needs sage.combinat sage.modules
195-
sage: S[4].adams_operator(5) # needs sage.combinat sage.modules
196+
sage: S[4].convolution_power_of_id(5) # needs sage.combinat sage.modules
196197
5*S[1, 1, 1, 1] + 10*S[1, 1, 2] + 10*S[1, 2, 1]
197198
+ 10*S[1, 3] + 10*S[2, 1, 1] + 10*S[2, 2] + 10*S[3, 1] + 5*S[4]
198199
199200
200201
::
201202
202203
sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m() # needs sage.combinat sage.modules
203-
sage: m[[1,3],[2]].adams_operator(-2) # needs sage.combinat sage.modules
204+
sage: m[[1,3],[2]].convolution_power_of_id(-2) # needs sage.combinat sage.modules
204205
3*m{{1}, {2, 3}} + 3*m{{1, 2}, {3}} + 6*m{{1, 2, 3}} - 2*m{{1, 3}, {2}}
205206
"""
206207
if n < 0:
@@ -213,6 +214,9 @@ def adams_operator(self, n):
213214
T = lambda x: x
214215
return self.convolution_product([T] * n)
215216

217+
adams_operator = deprecated_function_alias(36396,
218+
convolution_power_of_id)
219+
216220
def convolution_product(self, *maps):
217221
r"""
218222
Return the image of ``self`` under the convolution product (map) of

src/sage/combinat/ncsf_qsym/ncsf.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -771,8 +771,8 @@ def verschiebung(self, n):
771771
772772
.. SEEALSO::
773773
774-
:meth:`frobenius method of QSym
775-
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius>`,
774+
:meth:`adams_operator method of QSym
775+
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.adams_operator>`,
776776
:meth:`verschiebung method of Sym
777777
<sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung>`
778778
@@ -825,7 +825,7 @@ def verschiebung(self, n):
825825
826826
sage: QSym = QuasiSymmetricFunctions(ZZ)
827827
sage: M = QSym.M()
828-
sage: all( all( M(I).frobenius(3).duality_pairing(S(J))
828+
sage: all( all( M(I).adams_operator(3).duality_pairing(S(J))
829829
....: == M(I).duality_pairing(S(J).verschiebung(3))
830830
....: for I in Compositions(2) )
831831
....: for J in Compositions(3) )
@@ -2767,8 +2767,8 @@ def verschiebung(self, n):
27672767
27682768
:meth:`verschiebung method of NCSF
27692769
<sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.verschiebung>`,
2770-
:meth:`frobenius method of QSym
2771-
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius>`,
2770+
:meth:`adams_operator method of QSym
2771+
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.adams_operator>`,
27722772
:meth:`verschiebung method of Sym
27732773
<sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung>`
27742774
@@ -3343,8 +3343,8 @@ def verschiebung(self, n):
33433343
33443344
:meth:`verschiebung method of NCSF
33453345
<sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.verschiebung>`,
3346-
:meth:`frobenius method of QSym
3347-
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius>`,
3346+
:meth:`adams_operator method of QSym
3347+
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.adams_operator>`,
33483348
:meth:`verschiebung method of Sym
33493349
<sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung>`
33503350
@@ -3984,8 +3984,8 @@ def verschiebung(self, n):
39843984
39853985
:meth:`verschiebung method of NCSF
39863986
<sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.verschiebung>`,
3987-
:meth:`frobenius method of QSym
3988-
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius>`,
3987+
:meth:`adams_operator method of QSym
3988+
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.adams_operator>`,
39893989
:meth:`verschiebung method of Sym
39903990
<sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung>`
39913991
@@ -4245,8 +4245,8 @@ def verschiebung(self, n):
42454245
42464246
:meth:`verschiebung method of NCSF
42474247
<sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.verschiebung>`,
4248-
:meth:`frobenius method of QSym
4249-
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius>`,
4248+
:meth:`adams_operator method of QSym
4249+
<sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.adams_operator>`,
42504250
:meth:`verschiebung method of Sym
42514251
<sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung>`
42524252

src/sage/combinat/ncsf_qsym/qsym.py

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
from sage.combinat.words.word import Word
103103
from sage.combinat.tableau import StandardTableaux
104104
from sage.misc.cachefunc import cached_method
105+
from sage.misc.superseded import deprecated_function_alias
105106

106107

107108
class QuasiSymmetricFunctions(UniqueRepresentation, Parent):
@@ -1064,12 +1065,12 @@ def internal_coproduct(self):
10641065

10651066
kronecker_coproduct = internal_coproduct
10661067

1067-
def frobenius(self, n):
1068+
def adams_operator(self, n):
10681069
r"""
10691070
Return the image of the quasi-symmetric function ``self``
1070-
under the `n`-th Frobenius operator.
1071+
under the `n`-th Adams operator.
10711072
1072-
The `n`-th Frobenius operator `\mathbf{f}_n` is defined to be
1073+
The `n`-th Adams operator `\mathbf{f}_n` is defined to be
10731074
the map from the `R`-algebra of quasi-symmetric functions
10741075
to itself that sends every symmetric function
10751076
`P(x_1, x_2, x_3, \ldots)` to
@@ -1084,18 +1085,18 @@ def frobenius(self, n):
10841085
for every composition `(i_1, i_2, i_3, \ldots)`
10851086
(where `M` means the monomial basis).
10861087
1087-
The `n`-th Frobenius operator is also called the `n`-th
1088+
The `n`-th Adams operator is also called the `n`-th
10881089
Frobenius endomorphism. It is not related to the Frobenius map
10891090
which connects the ring of symmetric functions with the
10901091
representation theory of the symmetric group.
10911092
1092-
The `n`-th Frobenius operator is also the `n`-th Adams operator
1093+
The `n`-th Adams operator is the `n`-th Adams operator
10931094
of the `\Lambda`-ring of quasi-symmetric functions over the
10941095
integers.
10951096
1096-
The restriction of the `n`-th Frobenius operator to the
1097+
The restriction of the `n`-th Adams operator to the
10971098
subring formed by all symmetric functions is, not
1098-
unexpectedly, the `n`-th Frobenius operator of the ring of
1099+
unexpectedly, the `n`-th Adams operator of the ring of
10991100
symmetric functions.
11001101
11011102
.. SEEALSO::
@@ -1109,50 +1110,50 @@ def frobenius(self, n):
11091110
11101111
OUTPUT:
11111112
1112-
The result of applying the `n`-th Frobenius operator (on the
1113+
The result of applying the `n`-th Adams operator (on the
11131114
ring of quasi-symmetric functions) to ``self``.
11141115
11151116
EXAMPLES::
11161117
11171118
sage: QSym = QuasiSymmetricFunctions(ZZ)
11181119
sage: M = QSym.M()
11191120
sage: F = QSym.F()
1120-
sage: M[3,2].frobenius(2)
1121+
sage: M[3,2].adams_operator(2)
11211122
M[6, 4]
1122-
sage: (M[2,1] - 2*M[3]).frobenius(4)
1123+
sage: (M[2,1] - 2*M[3]).adams_operator(4)
11231124
M[8, 4] - 2*M[12]
1124-
sage: M([]).frobenius(3)
1125+
sage: M([]).adams_operator(3)
11251126
M[]
1126-
sage: F[1,1].frobenius(2)
1127+
sage: F[1,1].adams_operator(2)
11271128
F[1, 1, 1, 1] - F[1, 1, 2] - F[2, 1, 1] + F[2, 2]
11281129
1129-
The Frobenius endomorphisms are multiplicative::
1130+
The Adams endomorphisms are multiplicative::
11301131
1131-
sage: all( all( M(I).frobenius(3) * M(J).frobenius(3)
1132-
....: == (M(I) * M(J)).frobenius(3)
1132+
sage: all( all( M(I).adams_operator(3) * M(J).adams_operator(3)
1133+
....: == (M(I) * M(J)).adams_operator(3)
11331134
....: for I in Compositions(3) )
11341135
....: for J in Compositions(2) )
11351136
True
11361137
1137-
Being Hopf algebra endomorphisms, the Frobenius operators
1138+
Being Hopf algebra endomorphisms, the Adams operators
11381139
commute with the antipode::
11391140
1140-
sage: all( M(I).frobenius(4).antipode()
1141-
....: == M(I).antipode().frobenius(4)
1141+
sage: all( M(I).adams_operator(4).antipode()
1142+
....: == M(I).antipode().adams_operator(4)
11421143
....: for I in Compositions(3) )
11431144
True
11441145
1145-
The restriction of the Frobenius operators to the subring
1146-
of symmetric functions are the Frobenius operators of
1146+
The restriction of the Adams operators to the subring
1147+
of symmetric functions are the Adams operators of
11471148
the latter::
11481149
11491150
sage: e = SymmetricFunctions(ZZ).e()
1150-
sage: all( M(e(lam)).frobenius(3)
1151-
....: == M(e(lam).frobenius(3))
1151+
sage: all( M(e(lam)).adams_operator(3)
1152+
....: == M(e(lam).adams_operator(3))
11521153
....: for lam in Partitions(3) )
11531154
True
11541155
"""
1155-
# Convert to the monomial basis, there apply Frobenius componentwise,
1156+
# Convert to the monomial basis, there apply componentwise,
11561157
# then convert back.
11571158
parent = self.parent()
11581159
M = parent.realization_of().M()
@@ -1162,6 +1163,8 @@ def frobenius(self, n):
11621163
result_in_M_basis = M._from_dict(dct)
11631164
return parent(result_in_M_basis)
11641165

1166+
frobenius = deprecated_function_alias(36396, adams_operator)
1167+
11651168
def star_involution(self):
11661169
r"""
11671170
Return the image of the quasisymmetric function ``self`` under
@@ -1825,8 +1828,8 @@ def lambda_of_monomial(self, I, n):
18251828
`\lambda^i(x_j)` is `x_j` if `i = 1` and `0` if `i > 1`).
18261829
18271830
The Adams operations of this `\lambda`-ring are the
1828-
Frobenius endomorphisms `\mathbf{f}_n` (see
1829-
:meth:`~sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius`
1831+
Adams endomorphisms `\mathbf{f}_n` (see
1832+
:meth:`~sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.adams_operator`
18301833
for their definition). Using these endomorphisms, the
18311834
`\lambda`-operations can be explicitly computed via the formula
18321835

0 commit comments

Comments
 (0)