]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/eja/eja_operator.py: add is_isomorphism() for operators
authorMichael Orlitzky <michael@orlitzky.com>
Wed, 27 Nov 2024 23:32:43 +0000 (18:32 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Wed, 27 Nov 2024 23:32:43 +0000 (18:32 -0500)
mjo/eja/eja_operator.py

index 8ee8dea986c6ddac918611220ea5fac85dcd986f..5eaa5b7bb7e7dc8cac8b27c10f520bb6f1e9004e 100644 (file)
@@ -717,6 +717,57 @@ class EJAOperator(Map):
         )
 
 
+    def is_isomorphism(self):
+        r"""
+        Return whether or not this operator is a Jordan isomorphism.
+
+        SETUP::
+
+            sage: from mjo.eja.eja_algebra import (HadamardEJA,
+            ....:                                  TrivialEJA,
+            ....:                                  random_eja)
+            sage: from mjo.eja.eja_operator import EJAOperator
+
+        EXAMPLES:
+
+        The zero operator is a Jordan isomorphism in the trivial algebra::
+
+            sage: J = TrivialEJA()
+            sage: J.zero().operator().is_isomorphism()
+            True
+
+        This counterexample in Section III.5 of Faraut & Koranyi is a
+        Jordan automorphism but not an isometry (which is tested
+        independently in :meth:`is_isometry`)::
+
+            sage: J1 = HadamardEJA(1)
+            sage: J2 = HadamardEJA(1, prefix='c')  # ensures J2 is not J1
+            sage: J2._inner_product_matrix = 2*J1._inner_product_matrix
+            sage: J = cartesian_product([J1,J2])
+            sage: M = matrix(J1.base_ring(), [[0,1],[1,0]])
+            sage: L = EJAOperator(J,J,M)
+            sage: L.is_isomorphism()
+            True
+
+        TESTS:
+
+        The identity operator is always a Jordan isomorphism::
+
+            sage: J = random_eja()
+            sage: J.one().operator().is_isomorphism()
+            True
+
+        The zero operator is never a Jordan isomorphism in a
+        nontrivial algebra::
+
+            sage: J = random_eja()
+            sage: not J.is_trivial() and J.zero().operator().is_isomorphism()
+            False
+
+        """
+        return self.is_invertible() and self.is_homomorphism()
+
+
     def matrix(self):
         """
         Return the matrix representation of this operator with respect