Added kernel

This commit is contained in:
Montessinos Mickael Gerard Bernard 2024-03-13 11:08:38 +02:00
parent 48e50dcd72
commit dadf7da90e
1 changed files with 45 additions and 0 deletions

View File

@ -377,6 +377,51 @@ class HomBundle(VectorBundle):
image = VectorBundle(K, ideals, g_fi, identity_matrix(K, g_fi.ncols()))
return image, C_inf
def kernel(self, f):
r"""
Return a kernel of global homomorphism ``f`` which is an element of
`H^0(\mathrm{self})`.
That is, a vector bundle `V` together with an injective morphism of `V`
into ``self.domain`` such that the image of `V` in ``self.domain``
is the kernel of ``f``.
EXAMPLES ::
sage: from vector_bundle import trivial_bundle, canonical_bundle
sage: F.<x> = FunctionField(GF(7))
sage: R.<y> = F[]
sage: K.<y> = F.extension(y^2 - x^3 - x)
sage: triv = trivial_bundle(K)
sage: can = canonical_bundle(K)
sage: V1 = triv.direct_sum(can)
sage: V2 = can.direct_sum(triv)
sage: hom = V1.hom(V2)
sage: kernel, map = hom.kernel(matrix(K, [[0, 1], [0, 0]]))
sage: kernel.isomorphism_to(triv) is not None
True
sage: kernel.hom(V1).coordinates_in_h0(map)
(1, 0)
"""
dom = self._domain
cod = self._codomain
ideals, _, U_fi = function_field_utility.pseudo_hermite_form(
dom._ideals,
f*dom._g_finite,
transformation=True)
_, U_inf = function_field_utility.hermite_form_infinite_polymod(
f*dom._g_infinite,
transformation=True)
r = f.rank()
n = f.ncols()
ideals = ideals[:n-r]
C_fi = U_fi[:,:n-r]
C_inf = U_inf[:,:n-r]
g_fi = C_inf.solve_right(C_fi)
K = self._function_field
image = VectorBundle(K, ideals, g_fi, identity_matrix(K, g_fi.ncols()))
return image, C_inf
def is_isomorphism(self, f):
r"""
Check if f is an isomorphism from ``self.domain()`` to