assume_associative=False,
category=None,
rank=None):
+ """
+ EXAMPLES:
+
+ By definition, Jordan multiplication commutes::
+
+ sage: set_random_seed()
+ sage: J = random_eja()
+ sage: x = J.random_element()
+ sage: y = J.random_element()
+ sage: x*y == y*x
+ True
+
+ """
self._rank = rank
fda = super(FiniteDimensionalEuclideanJordanAlgebra, self)
fda.__init__(field,
instead of column vectors! We, on the other hand, assume column
vectors everywhere.
- EXAMPLES:
+ EXAMPLES::
+
+ sage: set_random_seed()
+ sage: x = random_eja().random_element()
+ sage: x.matrix()*x.vector() == (x^2).vector()
+ True
+
+ A few examples of power-associativity::
+
+ sage: set_random_seed()
+ sage: x = random_eja().random_element()
+ sage: x*(x*x)*(x*x) == x^5
+ True
+ sage: (x*x)*(x*x*x) == x^5
+ True
+
+ We also know that powers operator-commute (Koecher, Chapter
+ III, Corollary 1)::
sage: set_random_seed()
sage: x = random_eja().random_element()
- sage: x.matrix()*x.vector() == (x**2).vector()
+ sage: m = ZZ.random_element(0,10)
+ sage: n = ZZ.random_element(0,10)
+ sage: Lxm = (x^m).matrix()
+ sage: Lxn = (x^n).matrix()
+ sage: Lxm*Lxn == Lxn*Lxm
True
"""
raise NotImplementedError('irregular element')
+ def operator_commutes_with(self, other):
+ """
+ Return whether or not this element operator-commutes
+ with ``other``.
+
+ EXAMPLES:
+
+ The definition of a Jordan algebra says that any element
+ operator-commutes with its square::
+
+ sage: set_random_seed()
+ sage: x = random_eja().random_element()
+ sage: x.operator_commutes_with(x^2)
+ True
+
+ TESTS:
+
+ Test Lemma 1 from Chapter III of Koecher::
+
+ sage: set_random_seed()
+ sage: J = random_eja()
+ sage: u = J.random_element()
+ sage: v = J.random_element()
+ sage: lhs = u.operator_commutes_with(u*v)
+ sage: rhs = v.operator_commutes_with(u^2)
+ sage: lhs == rhs
+ True
+
+ """
+ if not other in self.parent():
+ raise ArgumentError("'other' must live in the same algebra")
+
+ A = self.matrix()
+ B = other.matrix()
+ return (A*B == B*A)
+
+
def det(self):
"""
Return my determinant, the product of my eigenvalues.
Example 11.11::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,10).abs()
+ sage: n = ZZ.random_element(1,10)
sage: J = JordanSpinSimpleEJA(n)
sage: x = J.random_element()
sage: while x.is_zero():
aren't multiples of the identity are regular::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,10).abs()
+ sage: n = ZZ.random_element(1,10)
sage: J = JordanSpinSimpleEJA(n)
sage: x = J.random_element()
sage: x == x.coefficient(0)*J.one() or x.degree() == 2
We have to override this because the superclass method
returns a matrix that acts on row vectors (that is, on
the right).
+
+ EXAMPLES:
+
+ Test the first polarization identity from my notes, Koecher Chapter
+ III, or from Baes (2.3)::
+
+ sage: set_random_seed()
+ sage: J = random_eja()
+ sage: x = J.random_element()
+ sage: y = J.random_element()
+ sage: Lx = x.matrix()
+ sage: Ly = y.matrix()
+ sage: Lxx = (x*x).matrix()
+ sage: Lxy = (x*y).matrix()
+ sage: bool(2*Lx*Lxy + Ly*Lxx == 2*Lxy*Lx + Lxx*Ly)
+ True
+
+ Test the second polarization identity from my notes or from
+ Baes (2.4)::
+
+ sage: set_random_seed()
+ sage: J = random_eja()
+ sage: x = J.random_element()
+ sage: y = J.random_element()
+ sage: z = J.random_element()
+ sage: Lx = x.matrix()
+ sage: Ly = y.matrix()
+ sage: Lz = z.matrix()
+ sage: Lzy = (z*y).matrix()
+ sage: Lxy = (x*y).matrix()
+ sage: Lxz = (x*z).matrix()
+ sage: bool(Lx*Lzy + Lz*Lxy + Ly*Lxz == Lzy*Lx + Lxy*Lz + Lxz*Ly)
+ True
+
+ Test the third polarization identity from my notes or from
+ Baes (2.5)::
+
+ sage: set_random_seed()
+ sage: J = random_eja()
+ sage: u = J.random_element()
+ sage: y = J.random_element()
+ sage: z = J.random_element()
+ sage: Lu = u.matrix()
+ sage: Ly = y.matrix()
+ sage: Lz = z.matrix()
+ sage: Lzy = (z*y).matrix()
+ sage: Luy = (u*y).matrix()
+ sage: Luz = (u*z).matrix()
+ sage: Luyz = (u*(y*z)).matrix()
+ sage: lhs = Lu*Lzy + Lz*Luy + Ly*Luz
+ sage: rhs = Luyz + Ly*Lu*Lz + Lz*Lu*Ly
+ sage: bool(lhs == rhs)
+ True
+
"""
fda_elt = FiniteDimensionalAlgebraElement(self.parent(), self)
return fda_elt.matrix().transpose()
identity::
sage: set_random_seed()
- sage: n = ZZ.random_element(2,10).abs()
+ sage: n = ZZ.random_element(2,10)
sage: J = JordanSpinSimpleEJA(n)
sage: y = J.random_element()
sage: while y == y.coefficient(0)*J.one():
Alizadeh's Example 11.12::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,10).abs()
+ sage: n = ZZ.random_element(1,10)
sage: J = JordanSpinSimpleEJA(n)
sage: x = J.random_element()
sage: x_vec = x.vector()
Property 6:
- sage: k = ZZ.random_element(1,10).abs()
+ sage: k = ZZ.random_element(1,10)
sage: actual = (x^k).quadratic_representation()
sage: expected = (x.quadratic_representation())^k
sage: actual == expected
Euclidean Jordan algebra of degree...
"""
- n = ZZ.random_element(1,5).abs()
+ n = ZZ.random_element(1,5)
constructor = choice([eja_rn,
JordanSpinSimpleEJA,
RealSymmetricSimpleEJA,
TESTS::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,5).abs()
+ sage: n = ZZ.random_element(1,5)
sage: all( M.is_symmetric() for M in _complex_hermitian_basis(n) )
True
The degree of this algebra is `(n^2 + n) / 2`::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,5).abs()
+ sage: n = ZZ.random_element(1,5)
sage: J = RealSymmetricSimpleEJA(n)
sage: J.degree() == (n^2 + n)/2
True
The degree of this algebra is `n^2`::
sage: set_random_seed()
- sage: n = ZZ.random_element(1,5).abs()
+ sage: n = ZZ.random_element(1,5)
sage: J = ComplexHermitianSimpleEJA(n)
sage: J.degree() == n^2
True