Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

move single_valued method of MZV to auxiliary F ring #35086

Merged
merged 2 commits into from
Mar 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/doc/en/reference/references/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1180,6 +1180,9 @@ REFERENCES:
moduli spaces to Feynman integrals*, in Contemporary Mathematics
vol 539, pages 27-52, 2011.

.. [Bro2013] Francis Brown, *Single-valued motivic periods and multiple zeta
values*, Forum Math. Sigma 2 (2014), :doi:`10.1017/fms.2014.18`.

.. [Bro2016] \A.E. Brouwer,
Personal communication, 2016.

Expand Down
16 changes: 8 additions & 8 deletions src/sage/modular/multiple_zeta.py
Original file line number Diff line number Diff line change
Expand Up @@ -1083,9 +1083,15 @@ def iterated(self):
return self.parent().iterated(self)

def single_valued(self):
"""
r"""
Return the single-valued version of ``self``.

This is the projection map onto the sub-algebra of
single-valued motivic multiple zeta values, as defined by
F. Brown in [Bro2013]_.

This morphism of algebras sends in particular `\zeta(2)` to `0`.

EXAMPLES::

sage: M = Multizetas(QQ)
Expand All @@ -1108,13 +1114,7 @@ def single_valued(self):
sage: Z(5,3).single_valued() == 14*Z(3)*Z(5)
True
"""
phi_im = self.phi()
zin = phi_im.parent()
phi_no_f2 = phi_im.without_f2()
sv = zin.sum_of_terms(((0, w), cf)
for (a, b), cf in phi_no_f2.coproduct()
for w in shuffle(a[1], b[1].reversal(), False))
return rho_inverse(sv)
return rho_inverse(self.phi().single_valued())

def simplify(self):
"""
Expand Down
24 changes: 23 additions & 1 deletion src/sage/modular/multiple_zeta_F_algebra.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from sage.combinat.free_module import CombinatorialFreeModule
from sage.combinat.words.words import Words
from sage.combinat.words.finite_word import FiniteWord_class
from sage.combinat.words.shuffle_product import ShuffleProduct_w1w2 as shuffle
from sage.misc.cachefunc import cached_method
from sage.misc.lazy_attribute import lazy_attribute
from sage.sets.integer_range import IntegerRange
Expand Down Expand Up @@ -715,9 +716,30 @@ def without_f2(self):

sage: from sage.modular.multiple_zeta_F_algebra import F_algebra
sage: F = F_algebra(QQ)
sage: t = 4*F("35")+F("27")
sage: t = 4 * F("35") + F("27")
sage: t.without_f2()
4*f3f5
"""
F = self.parent()
return F._from_dict({(0, w): cf for (p, w), cf in self if not p})

def single_valued(self):
"""
Return the single-valued version of ``self``.

EXAMPLES::

sage: from sage.modular.multiple_zeta_F_algebra import F_algebra
sage: F = F_algebra(QQ)
sage: t = 4 * F("2") + F("3")
sage: t.single_valued()
2*f3
sage: t = 4 * F("35") + F("27")
sage: t.single_valued()
8*f3f5 + 8*f5f3
"""
F = self.parent()
no_f2 = self.without_f2()
return F.sum_of_terms(((0, w), cf)
for (a, b), cf in no_f2.coproduct()
for w in shuffle(a[1], b[1].reversal(), False))