X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feuclidean_jordan_algebra.py;h=bb460194970e3da92709082a81f78c86a6c88d5c;hb=556690d808d614f2c271dc431dd909e353530594;hp=a1b28a20b8d7a8a487212e1e2da800b76c750edd;hpb=bae00775f40f06d945413ee39109f4c5b06c62b6;p=sage.d.git diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index a1b28a2..bb46019 100644 --- a/mjo/eja/euclidean_jordan_algebra.py +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -27,10 +27,6 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra): b.set_immutable() if not (is_Matrix(b) and b.dimensions() == (n, n)): raise ValueError("input is not a multiplication table") - if not (b.is_symmetric()): - # Euclidean jordan algebras are commutative, so left/right - # multiplication is the same. - raise ValueError("multiplication table must be symmetric") mult_table = tuple(mult_table) cat = MagmaticAlgebras(field).FiniteDimensional().WithBasis() @@ -89,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 @@ -155,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() @@ -182,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): @@ -225,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): @@ -321,4 +343,8 @@ def eja_ln(dimension, field=QQ): Qi[0,0] = Qi[0,0] * ~field(2) Qs.append(Qi) - return FiniteDimensionalEuclideanJordanAlgebra(field,Qs,rank=2) + # The rank of the spin factor algebra is two, UNLESS we're in a + # one-dimensional ambient space (the rank is bounded by the + # ambient dimension). + rank = min(dimension,2) + return FiniteDimensionalEuclideanJordanAlgebra(field,Qs,rank=rank)