Skip to content

Commit 069ac77

Browse files
author
Release Manager
committed
gh-35086: move single_valued method of MZV to auxiliary F ring <!-- ^^^^^ Please provide a concise, informative and self-explanatory title. Don't put issue numbers in there, do this in the PR body below. For example, instead of "Fixes #1234" use "Introduce new method to calculate 1+1" --> ### 📚 Description <!-- Describe your changes here in detail --> <!-- Why is this change required? What problem does it solve? --> <!-- If it resolves an open issue, please link to the issue here. For example "Closes #1337" --> This is moving a little piece of code from MZV to a more proper place (auxiliary ring). ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> <!-- If your change requires a documentation PR, please link it appropriately --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> - [x] I have made sure that the title is self-explanatory and the description concisely explains the PR. - [x] I have created tests covering the changes. - [x] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open pull requests that this PR logically depends on --> <!-- - #xyz: short description why this is a dependency - #abc: ... --> URL: #35086 Reported by: Frédéric Chapoton Reviewer(s): Vincent Delecroix
2 parents af6c040 + 875738a commit 069ac77

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

src/doc/en/reference/references/index.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,6 +1184,9 @@ REFERENCES:
11841184
moduli spaces to Feynman integrals*, in Contemporary Mathematics
11851185
vol 539, pages 27-52, 2011.
11861186
1187+
.. [Bro2013] Francis Brown, *Single-valued motivic periods and multiple zeta
1188+
values*, Forum Math. Sigma 2 (2014), :doi:`10.1017/fms.2014.18`.
1189+
11871190
.. [Bro2016] \A.E. Brouwer,
11881191
Personal communication, 2016.
11891192

src/sage/modular/multiple_zeta.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,9 +1083,15 @@ def iterated(self):
10831083
return self.parent().iterated(self)
10841084

10851085
def single_valued(self):
1086-
"""
1086+
r"""
10871087
Return the single-valued version of ``self``.
10881088
1089+
This is the projection map onto the sub-algebra of
1090+
single-valued motivic multiple zeta values, as defined by
1091+
F. Brown in [Bro2013]_.
1092+
1093+
This morphism of algebras sends in particular `\zeta(2)` to `0`.
1094+
10891095
EXAMPLES::
10901096
10911097
sage: M = Multizetas(QQ)
@@ -1108,13 +1114,7 @@ def single_valued(self):
11081114
sage: Z(5,3).single_valued() == 14*Z(3)*Z(5)
11091115
True
11101116
"""
1111-
phi_im = self.phi()
1112-
zin = phi_im.parent()
1113-
phi_no_f2 = phi_im.without_f2()
1114-
sv = zin.sum_of_terms(((0, w), cf)
1115-
for (a, b), cf in phi_no_f2.coproduct()
1116-
for w in shuffle(a[1], b[1].reversal(), False))
1117-
return rho_inverse(sv)
1117+
return rho_inverse(self.phi().single_valued())
11181118

11191119
def simplify(self):
11201120
"""

src/sage/modular/multiple_zeta_F_algebra.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from sage.combinat.free_module import CombinatorialFreeModule
3232
from sage.combinat.words.words import Words
3333
from sage.combinat.words.finite_word import FiniteWord_class
34+
from sage.combinat.words.shuffle_product import ShuffleProduct_w1w2 as shuffle
3435
from sage.misc.cachefunc import cached_method
3536
from sage.misc.lazy_attribute import lazy_attribute
3637
from sage.sets.integer_range import IntegerRange
@@ -715,9 +716,30 @@ def without_f2(self):
715716
716717
sage: from sage.modular.multiple_zeta_F_algebra import F_algebra
717718
sage: F = F_algebra(QQ)
718-
sage: t = 4*F("35")+F("27")
719+
sage: t = 4 * F("35") + F("27")
719720
sage: t.without_f2()
720721
4*f3f5
721722
"""
722723
F = self.parent()
723724
return F._from_dict({(0, w): cf for (p, w), cf in self if not p})
725+
726+
def single_valued(self):
727+
"""
728+
Return the single-valued version of ``self``.
729+
730+
EXAMPLES::
731+
732+
sage: from sage.modular.multiple_zeta_F_algebra import F_algebra
733+
sage: F = F_algebra(QQ)
734+
sage: t = 4 * F("2") + F("3")
735+
sage: t.single_valued()
736+
2*f3
737+
sage: t = 4 * F("35") + F("27")
738+
sage: t.single_valued()
739+
8*f3f5 + 8*f5f3
740+
"""
741+
F = self.parent()
742+
no_f2 = self.without_f2()
743+
return F.sum_of_terms(((0, w), cf)
744+
for (a, b), cf in no_f2.coproduct()
745+
for w in shuffle(a[1], b[1].reversal(), False))

0 commit comments

Comments
 (0)