Skip to content

Commit

Permalink
gh-35086: move single_valued method of MZV to auxiliary F ring
Browse files Browse the repository at this point in the history
    
<!-- ^^^^^
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
  • Loading branch information
Release Manager committed Mar 17, 2023
2 parents af6c040 + 875738a commit 069ac77
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 9 deletions.
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 @@ -1184,6 +1184,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))

0 comments on commit 069ac77

Please sign in to comment.