Skip to content

Commit e64d954

Browse files
author
Release Manager
committed
sagemathgh-40434: gcd and lcm of isogenies of Drinfeld modules We add methods to compute right gcds and left lcms of isogenies between Drinfeld modules. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [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 and checked the documentation preview. ### ⌛ Dependencies sagemath#40430 URL: sagemath#40434 Reported by: Xavier Caruso Reviewer(s): Antoine Leudière
2 parents c761ecf + 43a7920 commit e64d954

File tree

1 file changed

+93
-0
lines changed
  • src/sage/rings/function_field/drinfeld_modules

1 file changed

+93
-0
lines changed

src/sage/rings/function_field/drinfeld_modules/morphism.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,99 @@ def __invert__(self):
551551
H = self.codomain().Hom(self.domain())
552552
return H(~(self.ore_polynomial()[0]))
553553

554+
def right_gcd(self, other):
555+
r"""
556+
Return the right gcd of this morphism and ``other``.
557+
558+
If `u` and `v` are separable isogenies with the same domain,
559+
their right gcd is the separable isogeny whose kernel is
560+
`\ker u \cap \ker v`.
561+
562+
INPUT:
563+
564+
- ``other`` -- a morphism of Drinfeld modules with the
565+
same domain
566+
567+
EXAMPLES::
568+
569+
sage: Fq = GF(7)
570+
sage: A.<T> = Fq[]
571+
sage: F.<z> = Fq.extension(2)
572+
sage: phi = DrinfeldModule(A, [z, z, z, 1])
573+
sage: tau = phi.ore_variable()
574+
sage: u = phi.hom(tau + 3)
575+
sage: v = phi.hom(tau + 5)
576+
sage: u.right_gcd(v)
577+
Identity morphism of Drinfeld module defined by T |--> τ^3 + z*τ^2 + z*τ + z
578+
579+
We underline that the right gcd of isogenies does not make sense
580+
when the isogenies have different domains::
581+
582+
sage: psi = DrinfeldModule(A, [z, z, 1, 1])
583+
sage: w = psi.hom(tau + 1)
584+
sage: u.right_gcd(w)
585+
Traceback (most recent call last):
586+
...
587+
ValueError: the two morphisms must have the same domain
588+
589+
SEEALSO::
590+
591+
:meth:`left_lcm`
592+
"""
593+
if (not isinstance(other, DrinfeldModuleMorphism)
594+
or other.domain() is not self.domain()):
595+
raise ValueError("the two morphisms must have the same domain")
596+
u = self.ore_polynomial().right_gcd(other.ore_polynomial())
597+
return self.domain().hom(u)
598+
599+
def left_lcm(self, other):
600+
r"""
601+
Return the left lcm of this morphism and ``other``.
602+
603+
If `u` and `v` are separable isogenies with the same domain,
604+
their right gcd is the separable isogeny whose kernel is
605+
`\ker u + \ker v`.
606+
607+
INPUT:
608+
609+
- ``other`` -- a morphism of Drinfeld modules with the
610+
same domain
611+
612+
EXAMPLES::
613+
614+
sage: Fq = GF(7)
615+
sage: A.<T> = Fq[]
616+
sage: F.<z> = Fq.extension(2)
617+
sage: phi = DrinfeldModule(A, [z, z, z, 1])
618+
sage: tau = phi.ore_variable()
619+
sage: u = phi.hom(tau + 3)
620+
sage: v = phi.hom(tau + 5)
621+
sage: u.left_lcm(v)
622+
Drinfeld Module morphism:
623+
From: Drinfeld module defined by T |--> τ^3 + z*τ^2 + z*τ + z
624+
To: Drinfeld module defined by T |--> τ^3 + z*τ^2 + (6*z + 1)*τ + z
625+
Defn: τ^2 + τ + 1
626+
627+
We underline that the left lcm of isogenies does not make sense
628+
when the isogenies have different domains::
629+
630+
sage: psi = DrinfeldModule(A, [z, z, 1, 1])
631+
sage: w = psi.hom(tau + 1)
632+
sage: v.left_lcm(w)
633+
Traceback (most recent call last):
634+
...
635+
ValueError: the two morphisms must have the same domain
636+
637+
SEEALSO::
638+
639+
:meth:`right_gcd`
640+
"""
641+
if (not isinstance(other, DrinfeldModuleMorphism)
642+
or other.domain() is not self.domain()):
643+
raise ValueError("the two morphisms must have the same domain")
644+
u = self._ore_polynomial.left_lcm(other._ore_polynomial)
645+
return self.domain().hom(u)
646+
554647
def _motive_matrix(self):
555648
r"""
556649
Return the matrix giving the action of this morphism

0 commit comments

Comments
 (0)