]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/euclidean_jordan_algebra.py
eja: add quadratic_representation() for elements.
[sage.d.git] / mjo / eja / euclidean_jordan_algebra.py
index 802171fb0c4cc029c43d4fb4b17004d76bb938ed..d07425f6516e0261030afc3052ddbfd8660e6722 100644 (file)
@@ -80,19 +80,6 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
     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):
@@ -111,8 +98,7 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
             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
 
@@ -181,23 +167,13 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
             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
 
             """
@@ -295,18 +271,14 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
             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
 
@@ -351,6 +323,35 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
             return elt.minimal_polynomial()
 
 
+        def quadratic_representation(self):
+            """
+            Return the quadratic representation of this element.
+
+            EXAMPLES:
+
+            The explicit form in the spin factor algebra is given by
+            Alizadeh's Example 11.12::
+
+                sage: n = ZZ.random_element(1,10).abs()
+                sage: J = eja_ln(n)
+                sage: x = J.random_element()
+                sage: x_vec = x.vector()
+                sage: x0 = x_vec[0]
+                sage: x_bar = x_vec[1:]
+                sage: A = matrix(QQ, 1, [x_vec.inner_product(x_vec)])
+                sage: B = 2*x0*x_bar.row()
+                sage: C = 2*x0*x_bar.column()
+                sage: D = identity_matrix(QQ, n-1)
+                sage: D = (x0^2 - x_bar.inner_product(x_bar))*D
+                sage: D = D + 2*x_bar.tensor_product(x_bar)
+                sage: Q = block_matrix(2,2,[A,B,C,D])
+                sage: Q == x.quadratic_representation()
+                True
+
+            """
+            return 2*(self.matrix()**2) - (self**2).matrix()
+
+
         def span_of_powers(self):
             """
             Return the vector space spanned by successive powers of
@@ -371,13 +372,7 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
             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
 
@@ -385,8 +380,7 @@ class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra):
             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