]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/eja/eja_operator.py: add is_homomorphism() for operators
authorMichael Orlitzky <michael@orlitzky.com>
Wed, 27 Nov 2024 01:02:56 +0000 (20:02 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Wed, 27 Nov 2024 01:02:56 +0000 (20:02 -0500)
mjo/eja/eja_operator.py

index 0b1e9a8a78d45e90bf28e2bb463868417fd834ad..8ee8dea986c6ddac918611220ea5fac85dcd986f 100644 (file)
@@ -663,6 +663,60 @@ class EJAOperator(Map):
         )
 
 
+    def is_homomorphism(self):
+        r"""
+        Return whether or not this operator is an algebra homomorphism.
+
+        SETUP::
+
+            sage: from mjo.eja.eja_operator import EJAOperator
+            sage: from mjo.eja.eja_algebra import (random_eja,
+            ....:                                  JordanSpinEJA,
+            ....:                                  RealSymmetricEJA)
+
+        EXAMPLES:
+
+        The identity and zero operators are trivially homomorphisms::
+
+            sage: J = random_eja()
+            sage: J.zero().operator().is_homomorphism()
+            True
+            sage: J.one().operator().is_homomorphism()
+            True
+
+        Sending one factor of a cartesian product to zero is a
+        homomorphism::
+
+            sage: J1 = random_eja(field=QQ, orthonormalize=False)
+            sage: J2 = random_eja(field=QQ, orthonormalize=False)
+            sage: J = cartesian_product([J1,J2])
+            sage: I1 = matrix.identity(QQ, J1.dimension())
+            sage: Z1 = matrix.zero(QQ, J1.dimension())
+            sage: I2 = matrix.identity(QQ, J2.dimension())
+            sage: Z2 = matrix.zero(QQ, J2.dimension())
+            sage: M = block_matrix([
+            ....:       [I1, 0],
+            ....:       [0, Z2]
+            ....: ])
+            sage: L = EJAOperator(J,J,M)
+            sage: L.is_homomorphism()
+            True
+            sage: M = block_matrix([
+            ....:       [Z1, 0],
+            ....:       [0, I2]
+            ....: ])
+            sage: L = EJAOperator(J,J,M)
+            sage: L.is_homomorphism()
+            True
+
+        """
+        return all(
+            self(b1*b2) == self(b1)*self(b2)
+            for b1 in self.domain().basis()
+            for b2 in self.domain().basis()
+        )
+
+
     def matrix(self):
         """
         Return the matrix representation of this operator with respect