From: Michael Orlitzky Date: Wed, 27 Nov 2024 23:32:43 +0000 (-0500) Subject: mjo/eja/eja_operator.py: add is_isomorphism() for operators X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=62993dca80213c50274ef224c8eb416c3384d965;p=sage.d.git mjo/eja/eja_operator.py: add is_isomorphism() for operators --- diff --git a/mjo/eja/eja_operator.py b/mjo/eja/eja_operator.py index 8ee8dea..5eaa5b7 100644 --- a/mjo/eja/eja_operator.py +++ b/mjo/eja/eja_operator.py @@ -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