|
22 | 22 | from sage.misc.latex import latex |
23 | 23 | from sage.categories.morphism import Morphism |
24 | 24 | from sage.structure.unique_representation import UniqueRepresentation |
| 25 | +from sage.structure.element import coerce_binop |
25 | 26 |
|
26 | 27 | from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing |
27 | 28 | from sage.matrix.constructor import matrix |
@@ -419,6 +420,42 @@ def ore_polynomial(self): |
419 | 420 | """ |
420 | 421 | return self._ore_polynomial |
421 | 422 |
|
| 423 | + @coerce_binop |
| 424 | + def __add__(self, other): |
| 425 | + r""" |
| 426 | + Return the sum of this morphism and ``other``. |
| 427 | +
|
| 428 | + INPUT: |
| 429 | +
|
| 430 | + - ``other`` -- a morphism of Drinfeld modules in the |
| 431 | + same category |
| 432 | +
|
| 433 | + TESTS:: |
| 434 | +
|
| 435 | + sage: Fq = GF(5) |
| 436 | + sage: A.<T> = Fq[] |
| 437 | + sage: K.<z> = Fq.extension(3) |
| 438 | + sage: phi = DrinfeldModule(A, [z, 0, 1, z]) |
| 439 | + sage: t = phi.ore_variable() |
| 440 | + sage: f = phi.hom(t + 1) |
| 441 | + sage: g = T * f |
| 442 | + sage: f + g # indirect doctest |
| 443 | + Drinfeld Module morphism: |
| 444 | + From: Drinfeld module defined by T |--> z*t^3 + t^2 + z |
| 445 | + To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^3 + (3*z^2 + 2*z + 2)*t^2 + (2*z^2 + 3*z + 4)*t + z |
| 446 | + Defn: (2*z^2 + 4*z + 4)*t^4 + (z + 1)*t^3 + t^2 + (2*z^2 + 4*z)*t + z + 1 |
| 447 | +
|
| 448 | + We check that coercion from the function ring works:: |
| 449 | +
|
| 450 | + sage: F = phi.frobenius_endomorphism() |
| 451 | + sage: F + T |
| 452 | + Endomorphism of Drinfeld module defined by T |--> z*t^3 + t^2 + z |
| 453 | + Defn: (z + 1)*t^3 + t^2 + z |
| 454 | +
|
| 455 | + """ |
| 456 | + u = self.ore_polynomial() + other.ore_polynomial() |
| 457 | + return self.parent()(u) |
| 458 | + |
422 | 459 | def _composition_(self, other, H): |
423 | 460 | r""" |
424 | 461 | Return the composite of this morphism and ``other``. |
@@ -718,9 +755,17 @@ def charpoly(self, var='X'): |
718 | 755 | sage: phi = DrinfeldModule(A, [z, 0, 1, z]) |
719 | 756 |
|
720 | 757 | sage: f = phi.frobenius_endomorphism() |
721 | | - sage: f.charpoly() |
| 758 | + sage: chi = f.charpoly() |
| 759 | + sage: chi |
722 | 760 | X^3 + (T + 1)*X^2 + (2*T + 3)*X + 2*T^3 + T + 1 |
723 | 761 |
|
| 762 | + We check that the characteristic polynomial annihilates the |
| 763 | + morphism (Cayley-Hamilton's theorem):: |
| 764 | +
|
| 765 | + sage: chi(f) |
| 766 | + Endomorphism of Drinfeld module defined by T |--> z*t^3 + t^2 + z |
| 767 | + Defn: 0 |
| 768 | +
|
724 | 769 | We verify, on an example, that the caracteristic polynomial |
725 | 770 | of a morphism corresponding to `\phi_a` is `(X-a)^r` where `r` |
726 | 771 | is the rank:: |
|
0 commit comments