X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_element.py;h=276eab040db20d1df1715eed782db7dfe2acd481;hb=269f872019b616287c4cf1878477879019f8bbd0;hp=166c9d217cf71d43fe4bfc0911e6fe6c3e1ec9d2;hpb=5d646c586de50b571d2983b546a05899bf0c20c2;p=sage.d.git diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index 166c9d2..276eab0 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -9,7 +9,7 @@ from sage.modules.with_basis.indexed_element import IndexedFreeModuleElement # TODO: make this unnecessary somehow. from sage.misc.lazy_import import lazy_import lazy_import('mjo.eja.eja_algebra', 'FiniteDimensionalEuclideanJordanAlgebra') -lazy_import('mjo.eja.eja_subalgebra', +lazy_import('mjo.eja.eja_element_subalgebra', 'FiniteDimensionalEuclideanJordanElementSubalgebra') from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator from mjo.eja.eja_utils import _mat2vec @@ -546,6 +546,115 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): return not (p(zero) == zero) + def is_primitive_idempotent(self): + """ + Return whether or not this element is a primitive (or minimal) + idempotent. + + A primitive idempotent is a non-zero idempotent that is not + the sum of two other non-zero idempotents. Remark 2.7.15 in + Baes shows that this is what he refers to as a "minimal + idempotent." + + An element of a Euclidean Jordan algebra is a minimal idempotent + if it :meth:`is_idempotent` and if its Peirce subalgebra + corresponding to the eigenvalue ``1`` has dimension ``1`` (Baes, + Proposition 2.7.17). + + SETUP:: + + sage: from mjo.eja.eja_algebra import (JordanSpinEJA, + ....: RealSymmetricEJA, + ....: TrivialEJA, + ....: random_eja) + + WARNING:: + + This method is sloooooow. + + EXAMPLES: + + The spectral decomposition of a non-regular element should always + contain at least one non-minimal idempotent:: + + sage: J = RealSymmetricEJA(3, AA) + sage: x = sum(J.gens()) + sage: x.is_regular() + False + sage: [ c.is_primitive_idempotent() + ....: for (l,c) in x.spectral_decomposition() ] + [False, True] + + On the other hand, the spectral decomposition of a regular + element should always be in terms of minimal idempotents:: + + sage: J = JordanSpinEJA(4, AA) + sage: x = sum( i*J.gens()[i] for i in range(len(J.gens())) ) + sage: x.is_regular() + True + sage: [ c.is_primitive_idempotent() + ....: for (l,c) in x.spectral_decomposition() ] + [True, True] + + TESTS: + + The identity element is minimal only in an EJA of rank one:: + + sage: set_random_seed() + sage: J = random_eja() + sage: J.rank() == 1 or not J.one().is_primitive_idempotent() + True + + A non-idempotent cannot be a minimal idempotent:: + + sage: set_random_seed() + sage: J = JordanSpinEJA(4) + sage: x = J.random_element() + sage: (not x.is_idempotent()) and x.is_primitive_idempotent() + False + + Proposition 2.7.19 in Baes says that an element is a minimal + idempotent if and only if it's idempotent with trace equal to + unity:: + + sage: set_random_seed() + sage: J = JordanSpinEJA(4) + sage: x = J.random_element() + sage: expected = (x.is_idempotent() and x.trace() == 1) + sage: actual = x.is_primitive_idempotent() + sage: actual == expected + True + + Primitive idempotents must be non-zero:: + + sage: set_random_seed() + sage: J = random_eja() + sage: J.zero().is_idempotent() + True + sage: J.zero().is_primitive_idempotent() + False + + As a consequence of the fact that primitive idempotents must + be non-zero, there are no primitive idempotents in a trivial + Euclidean Jordan algebra:: + + sage: J = TrivialEJA() + sage: J.one().is_idempotent() + True + sage: J.one().is_primitive_idempotent() + False + + """ + if not self.is_idempotent(): + return False + + if self.is_zero(): + return False + + (_,_,J1) = self.parent().peirce_decomposition(self) + return (J1.dimension() == 1) + + def is_nilpotent(self): """ Return whether or not some power of this element is zero. @@ -1180,10 +1289,13 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: from mjo.eja.eja_algebra import random_eja - TESTS:: + TESTS: + + Ensure that we can find an idempotent in a non-trivial algebra + where there are non-nilpotent elements:: sage: set_random_seed() - sage: J = random_eja() + sage: J = random_eja(nontrivial=True) sage: x = J.random_element() sage: while x.is_nilpotent(): ....: x = J.random_element() @@ -1192,6 +1304,9 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): True """ + if self.parent().is_trivial(): + return self + if self.is_nilpotent(): raise ValueError("this only works with non-nilpotent elements!")