X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_element.py;h=c47156d31e2c6989e1fe863091794520f395523c;hb=02c754829b2f2e8378561e6afd7cbfab2577f3f4;hp=e38012eb3bf9cda640c8cc4c4ef8d822e194ce43;hpb=ac35ac8e17f42d310d32a59859cc5ee5eeff5efa;p=sage.d.git diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index e38012e..c47156d 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -482,15 +482,23 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: J.one().is_invertible() True - The zero element is never invertible:: + The zero element is never invertible in a non-trivial algebra:: sage: set_random_seed() sage: J = random_eja() - sage: J.zero().is_invertible() + sage: (not J.is_trivial()) and J.zero().is_invertible() False """ - zero = self.parent().zero() + if self.is_zero(): + if self.parent().is_trivial(): + return True + else: + return False + + # In fact, we only need to know if the constant term is non-zero, + # so we can pass in the field's zero element instead. + zero = self.base_ring().zero() p = self.minimal_polynomial() return not (p(zero) == zero) @@ -643,6 +651,11 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): True """ + if self.is_zero() and not self.parent().is_trivial(): + # The minimal polynomial of zero in a nontrivial algebra + # is "t"; in a trivial algebra it's "1" by convention + # (it's an empty product). + return 1 return self.subalgebra_generated_by().dimension() @@ -721,6 +734,18 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): 0 """ + if self.is_zero(): + # We would generate a zero-dimensional subalgebra + # where the minimal polynomial would be constant. + # That might be correct, but only if *this* algebra + # is trivial too. + if not self.parent().is_trivial(): + # Pretty sure we know what the minimal polynomial of + # the zero operator is going to be. This ensures + # consistency of e.g. the polynomial variable returned + # in the "normal" case without us having to think about it. + return self.operator().minimal_polynomial() + A = self.subalgebra_generated_by() return A(self).operator().minimal_polynomial() @@ -801,10 +826,12 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): """ P = self.parent() + left_mult_by_self = lambda y: self*y + L = P.module_morphism(function=left_mult_by_self, codomain=P) return FiniteDimensionalEuclideanJordanAlgebraOperator( P, P, - self.to_matrix() ) + L.matrix() ) def quadratic_representation(self, other=None): @@ -960,6 +987,15 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: A(x^2) == A(x)*A(x) True + The subalgebra generated by the zero element is trivial:: + + sage: set_random_seed() + sage: A = random_eja().zero().subalgebra_generated_by() + sage: A + Euclidean Jordan algebra of dimension 0 over Rational Field + sage: A.one() + 0 + """ return FiniteDimensionalEuclideanJordanElementSubalgebra(self)