Homspaces between free modules¶
EXAMPLES:
We create \(\mathrm{End}(\ZZ^2)\) and compute a basis.
sage: M = FreeModule(IntegerRing(), 2)
sage: E = End(M)
sage: B = E.basis()
sage: len(B)
4
sage: B[0]
Free module morphism defined by the matrix
[1 0]
[0 0]
Domain: Ambient free module of rank 2 over the principal ideal domain ...
Codomain: Ambient free module of rank 2 over the principal ideal domain ...
>>> from sage.all import *
>>> M = FreeModule(IntegerRing(), Integer(2))
>>> E = End(M)
>>> B = E.basis()
>>> len(B)
4
>>> B[Integer(0)]
Free module morphism defined by the matrix
[1 0]
[0 0]
Domain: Ambient free module of rank 2 over the principal ideal domain ...
Codomain: Ambient free module of rank 2 over the principal ideal domain ...
We create \(\mathrm{Hom}(\ZZ^3, \ZZ^2)\) and compute a basis.
sage: V3 = FreeModule(IntegerRing(), 3)
sage: V2 = FreeModule(IntegerRing(), 2)
sage: H = Hom(V3, V2)
sage: H
Set of Morphisms
from Ambient free module of rank 3 over the principal ideal domain Integer Ring
to Ambient free module of rank 2 over the principal ideal domain Integer Ring
in Category of finite dimensional modules with basis over
(Dedekind domains and euclidean domains
and noetherian rings
and infinite enumerated sets and metric spaces)
sage: B = H.basis()
sage: len(B)
6
sage: B[0]
Free module morphism defined by the matrix
[1 0]
[0 0]
[0 0]...
>>> from sage.all import *
>>> V3 = FreeModule(IntegerRing(), Integer(3))
>>> V2 = FreeModule(IntegerRing(), Integer(2))
>>> H = Hom(V3, V2)
>>> H
Set of Morphisms
from Ambient free module of rank 3 over the principal ideal domain Integer Ring
to Ambient free module of rank 2 over the principal ideal domain Integer Ring
in Category of finite dimensional modules with basis over
(Dedekind domains and euclidean domains
and noetherian rings
and infinite enumerated sets and metric spaces)
>>> B = H.basis()
>>> len(B)
6
>>> B[Integer(0)]
Free module morphism defined by the matrix
[1 0]
[0 0]
[0 0]...
- class sage.modules.free_module_homspace.FreeModuleHomspace(X, Y, category=None, check=True, base=None)[source]¶
Bases:
HomsetWithBase
- basis(side='left')[source]¶
Return a basis for this space of free module homomorphisms.
INPUT:
side
– side of the vectors acted on by the matrix (default:'left'
)
OUTPUT: tuple
EXAMPLES:
sage: H = Hom(ZZ^2, ZZ^1) sage: H.basis() (Free module morphism defined by the matrix [1] [0] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ..., Free module morphism defined by the matrix [0] [1] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ...) sage: H.basis("right") (Free module morphism defined as left-multiplication by the matrix [1 0] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ..., Free module morphism defined as left-multiplication by the matrix [0 1] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ...)
>>> from sage.all import * >>> H = Hom(ZZ**Integer(2), ZZ**Integer(1)) >>> H.basis() (Free module morphism defined by the matrix [1] [0] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ..., Free module morphism defined by the matrix [0] [1] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ...) >>> H.basis("right") (Free module morphism defined as left-multiplication by the matrix [1 0] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ..., Free module morphism defined as left-multiplication by the matrix [0 1] Domain: Ambient free module of rank 2 over the principal ideal domain ... Codomain: Ambient free module of rank 1 over the principal ideal domain ...)
- identity(side='left')[source]¶
Return identity morphism in an endomorphism ring.
INPUT:
side
– side of the vectors acted on by the matrix (default:'left'
)
EXAMPLES:
sage: V = FreeModule(ZZ,5) sage: H = V.Hom(V) sage: H.identity() Free module morphism defined by the matrix [1 0 0 0 0] [0 1 0 0 0] [0 0 1 0 0] [0 0 0 1 0] [0 0 0 0 1] Domain: Ambient free module of rank 5 over the principal ideal domain ... Codomain: Ambient free module of rank 5 over the principal ideal domain ...
>>> from sage.all import * >>> V = FreeModule(ZZ,Integer(5)) >>> H = V.Hom(V) >>> H.identity() Free module morphism defined by the matrix [1 0 0 0 0] [0 1 0 0 0] [0 0 1 0 0] [0 0 0 1 0] [0 0 0 0 1] Domain: Ambient free module of rank 5 over the principal ideal domain ... Codomain: Ambient free module of rank 5 over the principal ideal domain ...
- zero(side='left')[source]¶
INPUT:
side
– side of the vectors acted on by the matrix (default:'left'
)
EXAMPLES:
sage: E = ZZ^2 sage: F = ZZ^3 sage: H = Hom(E, F) sage: f = H.zero() sage: f Free module morphism defined by the matrix [0 0 0] [0 0 0] Domain: Ambient free module of rank 2 over the principal ideal domain Integer Ring Codomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring sage: f(E.an_element()) (0, 0, 0) sage: f(E.an_element()) == F.zero() True sage: H.zero("right") Free module morphism defined as left-multiplication by the matrix [0 0] [0 0] [0 0] Domain: Ambient free module of rank 2 over the principal ideal domain Integer Ring Codomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring
>>> from sage.all import * >>> E = ZZ**Integer(2) >>> F = ZZ**Integer(3) >>> H = Hom(E, F) >>> f = H.zero() >>> f Free module morphism defined by the matrix [0 0 0] [0 0 0] Domain: Ambient free module of rank 2 over the principal ideal domain Integer Ring Codomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring >>> f(E.an_element()) (0, 0, 0) >>> f(E.an_element()) == F.zero() True >>> H.zero("right") Free module morphism defined as left-multiplication by the matrix [0 0] [0 0] [0 0] Domain: Ambient free module of rank 2 over the principal ideal domain Integer Ring Codomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring
- sage.modules.free_module_homspace.is_FreeModuleHomspace(x)[source]¶
Return
True
ifx
is a free module homspace.Notice that every vector space is a free module, but when we construct a set of morphisms between two vector spaces, it is a
VectorSpaceHomspace
, which qualifies as aFreeModuleHomspace
, since the former is special case of the latter.EXAMPLES:
sage: H = Hom(ZZ^3, ZZ^2) sage: type(H) <class 'sage.modules.free_module_homspace.FreeModuleHomspace_with_category'> sage: sage.modules.free_module_homspace.is_FreeModuleHomspace(H) doctest:warning... DeprecationWarning: the function is_FreeModuleHomspace is deprecated; use 'isinstance(..., FreeModuleHomspace)' instead See https://github.com/sagemath/sage/issues/37924 for details. True sage: K = Hom(QQ^3, ZZ^2) sage: type(K) <class 'sage.modules.free_module_homspace.FreeModuleHomspace_with_category'> sage: sage.modules.free_module_homspace.is_FreeModuleHomspace(K) True sage: L = Hom(ZZ^3, QQ^2) sage: type(L) <class 'sage.modules.free_module_homspace.FreeModuleHomspace_with_category'> sage: sage.modules.free_module_homspace.is_FreeModuleHomspace(L) True sage: P = Hom(QQ^3, QQ^2) sage: type(P) <class 'sage.modules.vector_space_homspace.VectorSpaceHomspace_with_category'> sage: sage.modules.free_module_homspace.is_FreeModuleHomspace(P) True sage: sage.modules.free_module_homspace.is_FreeModuleHomspace('junk') False
>>> from sage.all import * >>> H = Hom(ZZ**Integer(3), ZZ**Integer(2)) >>> type(H) <class 'sage.modules.free_module_homspace.FreeModuleHomspace_with_category'> >>> sage.modules.free_module_homspace.is_FreeModuleHomspace(H) doctest:warning... DeprecationWarning: the function is_FreeModuleHomspace is deprecated; use 'isinstance(..., FreeModuleHomspace)' instead See https://github.com/sagemath/sage/issues/37924 for details. True >>> K = Hom(QQ**Integer(3), ZZ**Integer(2)) >>> type(K) <class 'sage.modules.free_module_homspace.FreeModuleHomspace_with_category'> >>> sage.modules.free_module_homspace.is_FreeModuleHomspace(K) True >>> L = Hom(ZZ**Integer(3), QQ**Integer(2)) >>> type(L) <class 'sage.modules.free_module_homspace.FreeModuleHomspace_with_category'> >>> sage.modules.free_module_homspace.is_FreeModuleHomspace(L) True >>> P = Hom(QQ**Integer(3), QQ**Integer(2)) >>> type(P) <class 'sage.modules.vector_space_homspace.VectorSpaceHomspace_with_category'> >>> sage.modules.free_module_homspace.is_FreeModuleHomspace(P) True >>> sage.modules.free_module_homspace.is_FreeModuleHomspace('junk') False