class Element(FiniteDimensionalAlgebraElement):
"""
An element of a Euclidean Jordan algebra.
-
- Since EJAs are commutative, the "right multiplication" matrix is
- 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
-
"""
def __pow__(self, n):
EXAMPLES:
sage: set_random_seed()
- sage: J = eja_ln(5)
- sage: x = J.random_element()
+ sage: x = random_eja().random_element()
sage: x.matrix()*x.vector() == (x**2).vector()
True
The identity element is never nilpotent::
sage: set_random_seed()
- sage: n = ZZ.random_element(2,10).abs()
- sage: J = eja_rn(n)
- sage: J.one().is_nilpotent()
- False
- sage: J = eja_ln(n)
- sage: J.one().is_nilpotent()
+ sage: random_eja().one().is_nilpotent()
False
The additive identity is always nilpotent::
sage: set_random_seed()
- sage: n = ZZ.random_element(2,10).abs()
- sage: J = eja_rn(n)
- sage: J.zero().is_nilpotent()
- True
- sage: J = eja_ln(n)
- sage: J.zero().is_nilpotent()
+ sage: random_eja().zero().is_nilpotent()
True
"""
EXAMPLES::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,10).abs()
- sage: J = eja_rn(n)
- sage: x = J.random_element()
+ sage: x = random_eja().random_element()
sage: x.degree() == x.minimal_polynomial().degree()
True
::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,10).abs()
- sage: J = eja_ln(n)
- sage: x = J.random_element()
+ sage: x = random_eja().random_element()
sage: x.degree() == x.minimal_polynomial().degree()
True
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 = random_eja().random_element()
sage: x.subalgebra_generated_by().is_associative()
True
squaring in the superalgebra::
sage: set_random_seed()
- sage: J = eja_ln(5)
- sage: x = J.random_element()
+ sage: x = random_eja().random_element()
sage: u = x.subalgebra_generated_by().random_element()
sage: u.matrix()*u.vector() == (u**2).vector()
True
def mat2vec(m):
return vector(field, m.list())
+ def vec2mat(v):
+ return matrix(field, dimension, v.list())
+
W = V.span( mat2vec(s) for s in S )
+ # Taking the span above reorders our basis (thanks, jerk!) so we
+ # need to put our "matrix basis" in the same order as the
+ # (reordered) vector basis.
+ S = [ vec2mat(b) for b in W.basis() ]
+
for s in S:
# Brute force the multiplication-by-s matrix by looping
# through all elements of the basis and doing the computation