From 9c34119f1c650df0a4c2c20ea4723152de80edae Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 21 Jul 2019 12:00:08 -0400 Subject: [PATCH] eja: simplify (and cite) the minimal_polynomial() implementation. --- mjo/eja/euclidean_jordan_algebra.py | 33 ++++++++++++----------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index fb92a31..0ea9a4d 100644 --- a/mjo/eja/euclidean_jordan_algebra.py +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -626,6 +626,13 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra): def minimal_polynomial(self): """ + ALGORITHM: + + We restrict ourselves to the associative subalgebra + generated by this element, and then return the minimal + polynomial of this element's operator matrix (in that + subalgebra). This works by Baes Proposition 2.3.16. + EXAMPLES:: sage: set_random_seed() @@ -660,25 +667,13 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra): True """ - # The element we're going to call "minimal_polynomial()" on. - # Either myself, interpreted as an element of a finite- - # dimensional algebra, or an element of an associative - # subalgebra. - elt = None - - if self.parent().is_associative(): - elt = FiniteDimensionalAlgebraElement(self.parent(), self) - else: - V = self.span_of_powers() - assoc_subalg = self.subalgebra_generated_by() - # Mis-design warning: the basis used for span_of_powers() - # and subalgebra_generated_by() must be the same, and in - # the same order! - elt = assoc_subalg(V.coordinates(self.vector())) - - # Recursive call, but should work since elt lives in an - # associative algebra. - return elt.minimal_polynomial() + V = self.span_of_powers() + assoc_subalg = self.subalgebra_generated_by() + # Mis-design warning: the basis used for span_of_powers() + # and subalgebra_generated_by() must be the same, and in + # the same order! + elt = assoc_subalg(V.coordinates(self.vector())) + return elt.operator_matrix().minimal_polynomial() def natural_representation(self): -- 2.44.2