# 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 ...


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 modules with basis over Integer Ring
sage: B = H.basis()
sage: len(B)
6
sage: B[0]
Free module morphism defined by the matrix
[1 0]
[0 0]
[0 0]...


TESTS:

sage: H = Hom(QQ^2, QQ^1)
True


See trac 5886:

sage: V = (ZZ^2).span_of_basis([[1,2],[3,4]])
sage: V.hom([V.0, V.1])
Free module morphism defined by the matrix
[1 0]
[0 1]...

class sage.modules.free_module_homspace.FreeModuleHomspace(X, Y, category=None, check=True, base=None)

TESTS:

sage: X = ZZ['x']; X.rename("X")
sage: Y = ZZ['y']; Y.rename("Y")
sage: class MyHomset(HomsetWithBase):
...       def my_function(self, x):
...           return Y(x[0])
...       def _an_element_(self):
...           return sage.categories.morphism.SetMorphism(self, self.my_function)
...
sage: import __main__; __main__.MyHomset = MyHomset # fakes MyHomset being defined in a Python module
sage: H = MyHomset(X, Y, category=Monoids())
sage: H
Set of Morphisms from X to Y in Category of monoids
sage: H.base()
Integer Ring
sage: TestSuite(H).run()

basis()

Return a basis for this space of free module homomorphisms.

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 ...)

identity()

Return identity morphism in an endomorphism ring.

EXAMPLE:

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 ...

zero()

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


TESTS:

We check that H.zero() is picklable:

sage: loads(dumps(f.parent().zero()))
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.modules.free_module_homspace.is_FreeModuleHomspace(x)

Return True if x is a free module homspace.

EXAMPLES:

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 a FreeModuleHomspace, since the former is special case of the latter.

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) 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

#### Previous topic

Vector Space Morphisms (aka Linear Transformations)

#### Next topic

Morphisms of free modules