return ``True``, unless this algebra was constructed with
``check_axioms=False`` and passed an invalid multiplication table.
"""
- return all( (self.monomial(i)**2)*(self.monomial(i)*self.monomial(j))
+ return all( (self.gens()[i]**2)*(self.gens()[i]*self.gens()[j])
==
- (self.monomial(i))*((self.monomial(i)**2)*self.monomial(j))
+ (self.gens()[i])*((self.gens()[i]**2)*self.gens()[j])
for i in range(self.dimension())
for j in range(self.dimension()) )
for i in range(self.dimension()):
for j in range(self.dimension()):
for k in range(self.dimension()):
- x = self.monomial(i)
- y = self.monomial(j)
- z = self.monomial(k)
+ x = self.gens()[i]
+ y = self.gens()[j]
+ z = self.gens()[k]
diff = (x*y).inner_product(z) - x.inner_product(y*z)
if self.base_ring().is_exact():
# And to each subsequent row, prepend an entry that belongs to
# the left-side "header column."
- M += [ [self.monomial(i)] + [ self.product_on_basis(i,j)
- for j in range(n) ]
+ M += [ [self.gens()[i]] + [ self.product_on_basis(i,j)
+ for j in range(n) ]
for i in range(n) ]
return table(M, header_row=True, header_column=True, frame=True)
def L_x_i_j(i,j):
# From a result in my book, these are the entries of the
# basis representation of L_x.
- return sum( vars[k]*self.monomial(k).operator().matrix()[i,j]
+ return sum( vars[k]*self.gens()[k].operator().matrix()[i,j]
for k in range(n) )
L_x = matrix(F, n, n, L_x_i_j)
Real Field (+) Euclidean Jordan algebra of dimension 6 over
Algebraic Real Field
+ Rank is additive on a Cartesian product::
+
+ sage: J1 = HadamardEJA(1)
+ sage: J2 = RealSymmetricEJA(2)
+ sage: J = cartesian_product([J1,J2])
+ sage: J1.rank.clear_cache()
+ sage: J2.rank.clear_cache()
+ sage: J.rank.clear_cache()
+ sage: J.rank()
+ 3
+ sage: J.rank() == J1.rank() + J2.rank()
+ True
+
+ The same rank computation works over the rationals, with whatever
+ basis you like::
+
+ sage: J1 = HadamardEJA(1, field=QQ, orthonormalize=False)
+ sage: J2 = RealSymmetricEJA(2, field=QQ, orthonormalize=False)
+ sage: J = cartesian_product([J1,J2])
+ sage: J1.rank.clear_cache()
+ sage: J2.rank.clear_cache()
+ sage: J.rank.clear_cache()
+ sage: J.rank()
+ 3
+ sage: J.rank() == J1.rank() + J2.rank()
+ True
+
TESTS:
All factors must share the same base field::
True
sage: x.inner_product(y) == J.cartesian_inner_product(x,y)
True
-
"""
def __init__(self, modules, **kwargs):
CombinatorialFreeModule_CartesianProduct.__init__(self,