]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: use the associativity of one-generator subalgebras.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 25 Jun 2019 03:11:10 +0000 (23:11 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 29 Jul 2019 03:19:01 +0000 (23:19 -0400)
mjo/eja/euclidean_jordan_algebra.py

index 1f037688eee6f0f2931ef5ba311de0a96da6cea0..bb460194970e3da92709082a81f78c86a6c88d5c 100644 (file)
@@ -85,6 +85,10 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
         also the left multiplication matrix and must be symmetric::
 
             sage: set_random_seed()
+            sage: n = ZZ.random_element(1,10).abs()
+            sage: J = eja_rn(5)
+            sage: J.random_element().matrix().is_symmetric()
+            True
             sage: J = eja_ln(5)
             sage: J.random_element().matrix().is_symmetric()
             True
@@ -151,7 +155,22 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
 
         def subalgebra_generated_by(self):
             """
-            Return the subalgebra of the parent EJA generated by this element.
+            Return the associative subalgebra of the parent EJA generated
+            by this element.
+
+            TESTS::
+
+                sage: set_random_seed()
+                sage: n = ZZ.random_element(1,10).abs()
+                sage: J = eja_rn(n)
+                sage: x = J.random_element()
+                sage: x.subalgebra_generated_by().is_associative()
+                True
+                sage: J = eja_ln(n)
+                sage: x = J.random_element()
+                sage: x.subalgebra_generated_by().is_associative()
+                True
+
             """
             # First get the subspace spanned by the powers of myself...
             V = self.span_of_powers()
@@ -178,7 +197,9 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
                 b_right_matrix = matrix(F, b_right_rows)
                 mats.append(b_right_matrix)
 
-            return FiniteDimensionalEuclideanJordanAlgebra(F, mats)
+            # It's an algebra of polynomials in one element, and EJAs
+            # are power-associative.
+            return FiniteDimensionalEuclideanJordanAlgebra(F, mats, assume_associative=True)
 
 
         def minimal_polynomial(self):
@@ -221,13 +242,18 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
                 True
 
             """
+            if self.parent().is_associative():
+                return self.matrix().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!
             subalg_self = assoc_subalg(V.coordinates(self.vector()))
-            return subalg_self.matrix().minimal_polynomial()
+            # Recursive call, but should work since the subalgebra is
+            # associative.
+            return subalg_self.minimal_polynomial()
 
 
         def characteristic_polynomial(self):