Vector bundle¶
This module implements algebraic algorithms for manipulating vector bundles as pairs of lattices over its function field. Follows the algorithmic methods discussed in [Mon24]
EXAMPLES
sage: from vector_bundle import VectorBundle
sage: F.<x> = FunctionField(GF(3))
sage: R.<y> = F[]
sage: K.<y> = F.extension(y^2 - x^3 - x)
sage: order = K.maximal_order()
sage: ideals = [K.places_finite()[0].prime_ideal()^-1, order.ideal(1)]
sage: g_finite = identity_matrix(K,2)
sage: g_infinite = matrix(K,[[1, 0], [0, 1/x^2*y]])
sage: V = VectorBundle(K, ideals, g_finite, g_infinite); V
Vector bundle of rank 2 over Function field in y defined by y^2 + 2*x^3 + 2*x
We can compute a basis of the space of global sections of V
:
sage: h0 = V.h0(); h0
[(1, 0)]
We can also compute a basis of the group of
V
. First, a basis of its
dual is computed:
sage: h1_dual, _ = V.h1_dual(); h1_dual
[[0 1]]
Then, we compute a representent of a linear form over h1_dual
:
sage: V.h1_element([1])
[0, (x/(x^2 + 1))*y]
We can verify the Riemann-Roch theorem:
sage: len(h0) - len(h1_dual) == V.degree() + V.rank()*(1 - K.genus())
True
REFERENCES:
M. F. Atiyah Vector Bundles on Elliptic Curves Proc. Lond. Math. Soc. 3(1):414-452, 1957
M. Montessinos Algebraic algorithms for vector bundles over algebraic curves In preparation
V. Savin Algebraic-Geometric Codes from Vector Bundles and their Decoding
M. S. Narasimhan and S. Ramanan Moduli of vector bundles on a compact Riemann surface Ann. of Math. 89(1):14-51, 1969
AUTHORS:
_Mickaël Montessinos: initial implementation
- class vector_bundle.vector_bundle.VectorBundle(function_field, ideals, g_finite=None, g_infinite=None, check=True)¶
Bases:
SageObject
A vector bundle defined over a normal curve with function field K.
If
g_finite
andg_infinite
are None and ideals is a divisor, the line bundleis returned.
If the constructed vector bundle is to have rank one,
ideals
may be an ideal instead of a list. Likewise,g_finite
andg_infinite
can be elements ofrather that matrices of size
.
INPUT:
function_field
– FunctionField; the function field of the bundleideals
– list of coefficient ideals of the finite part of the bundleg_finite
– matrix; a basis of the finite part of the bundleg_infinite
– matrix; a basis of the infinite part of the bundle
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: VectorBundle(F,x.poles()[0].divisor()) Vector bundle of rank 1 over Rational function field in x over Finite Field of size 3 sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [y, 2]]) sage: g_infinite = matrix([[x, y], [x + y, 1]]) sage: VectorBundle(K, ideals, g_finite, g_infinite) Vector bundle of rank 2 over Function field in y defined by y^2 + 2*x^3 + 2*x
A line bundle may be defined without using lists and matrices:
sage: VectorBundle(K, K.maximal_order().ideal(1), 1, 1) Vector bundle of rank 1 over Function field in y defined by y^2 + 2*x^3 + 2*x
It may also be defined using a divisor:
sage: VectorBundle(K, K.one().divisor()) Vector bundle of rank 1 over Function field in y defined by y^2 + 2*x^3 + 2*x
- apply_isomorphism(isom)¶
Isom is an invertible square matrix of order
self.rank()
. Return the image ofself
byisom
.EXAMPLES
sage: from vector_bundle import (trivial_bundle, canonical_bundle, ....: atiyah_bundle) sage: F.<x> = FunctionField(GF(3)) 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: iso = triv.isomorphism_to(can) sage: triv.hom(can).is_isomorphism(iso) True sage: V = can.direct_sum(atiyah_bundle(K, 2, 0, can))\ ....: .direct_sum(triv) sage: W = can.direct_sum(atiyah_bundle(K, 2, 0)).direct_sum(can) sage: iso = V.isomorphism_to(W) sage: V.apply_isomorphism(iso) == W True
- basis_finite()¶
Return the basis vectors of the finite part of self.
The basis elements may not be in the corresponding lattice over the finite maximal order: the lattice may not be free and one must account for the coefficient ideals.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: V.basis_finite() [(1, 2), (x, y)]
- basis_infinite()¶
Return the basis vectors of the infinite part of self.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: V.basis_infinite() [(x, 2), (1, y)]
- basis_local(place)¶
Return a local basis of self at prime.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: V.basis_local(K.places_finite()[0]) [(x, 2*x), (x, y)]
- coefficient_ideals()¶
Return the coefficient ideals of the finite part of self.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: Is = V.coefficient_ideals() sage: Is == [P.prime_ideal() for P in K.places_finite()[:2]] True
- conorm(K)¶
Return the conorm of the vector bundle over an extension of its base
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in F.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, x]]) sage: g_infinite = matrix([[x, 1], [2, x]]) sage: V = VectorBundle(F, ideals, g_finite, g_infinite) sage: VK = V.conorm(K) sage: VK.rank() 2 sage: VK.degree() == K.degree() * V.degree() True
- coordinates_in_h0(f, check=True)¶
Return a vector of coordinates of
f
in the basis returned byself.h0()
If
check
isTrue
, it is check whetherf
actually lies in thespace, and None is output if
f
is not in. If
check
is set toFalse
the result may be garbage.EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(7)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1,1 / (x**5 + y)],[2, y]]) sage: g_infinite = matrix([[x, 1], [2, y**3]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: h0 = V.h0() sage: v = sum([i*e for i, e in enumerate(h0)]) sage: V.coordinates_in_h0(v) (0, 1, 2, 3, 4, 5)
- degree()¶
Returns the degree of the vector bundle.
This is defined as the degree of the divisor of the determinant bundle.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: V.degree() -1
- determinant¶
File: /home/mickael/Math/Code/Published/vector_bundles/vector_bundle/vector_bundle.py (starting at line 357)
Return the determinant bundle.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: d = V.determinant() sage: d._ideals [Ideal (x) of Maximal order of Function field in y defined by y^2 + x + 2] sage: d._g_finite [y + x] sage: d._g_infinite [x*y + 1]
- direct_sum(other)¶
Returns the direct sum of two vector bundles
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V1 = VectorBundle(K, ideals, g_finite, g_infinite) sage: O = K.maximal_order() sage: V2 = VectorBundle(K, O.ideal(1), 1, x^2) sage: V = V1.direct_sum(V2) sage: V.rank() == V1.rank() + V2.rank() True sage: V.degree() == V1.degree() + V2.degree() True
- direct_sum_repeat(n)¶
Return the direct sum of
n
copies ofself
.EXAMPLES
sage: from vector_bundle import trivial_bundle sage: F.<x> = FunctionField(GF(3)) sage: L = trivial_bundle(F) sage: V = L.direct_sum_repeat(3) sage: V.rank() 3 sage: V.degree() 0 sage: V.h0() [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
- dual()¶
Returns the dual vector bundle of
self
.EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: Vd = V.dual() sage: Vd.rank() == V.rank() True sage: Vd.degree() == -V.degree() True
- end()¶
Return the hom bundle of endomorphisms of
self
.Examples
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: L1 = VectorBundle(F, x.zeros()[0].divisor()) sage: L2 = VectorBundle(F, x.poles()[0].divisor()) sage: E = L1.direct_sum(L2).end(); E.h0() [ [1 0] [0 0] [ 0 1/x] [0 0] [0 0], [x 0], [ 0 0], [0 1] ]
- extension_by_global_sections()¶
Return the canonical extension of
self
bywhere
is the canonical line bundle and
is
.
This extension is defined in [At57] for elliptic curves, but the constructions generalises to arbitrary genus if one replaces the trivial line bundle with a canonical line bundle.
EXAMPLES
sage: from vector_bundle import trivial_bundle, VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: T = trivial_bundle(K) sage: E = T.extension_by_global_sections() sage: E.rank() 2 sage: E.end().h0() [ [0 1] [1 0] [0 0], [0 1] ] sage: L = VectorBundle(K,K.places_infinite()[0].divisor()) sage: E = (E.tensor_product(L)).extension_by_global_sections() sage: E.rank() 4 sage: E.degree() 2 sage: E.hom(E).h0() [ [0 1 0 0] [1 0 0 0] [0 0 0 0] [0 1 0 0] [0 0 0 1] [0 0 1 0] [0 0 0 0], [0 0 0 1] ]
- extension_group¶
File: /home/mickael/Math/Code/Published/vector_bundles/vector_bundle/vector_bundle.py (starting at line 996)
Return the extension group of
self
byother
. Ifprecompute_basis
is set toTrue
, a basis of the extension group is precomputed. Extensions may be constructed without using a precomputed basis, but each construction is a bit costlier this way. You should precompute a basis if you are planning to compute an number of extensions larger than the dimension of the ext group.EXAMPLES:
sage: from vector_bundle import trivial_bundle, canonical_bundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: trivial_bundle(K).extension_group(canonical_bundle(K)) Extension group of Vector bundle of rank 1 over Function field in y defined by y^2 + 2*x^3 + 2*x by Vector bundle of rank 1 over Function field in y defined by y^2 + 2*x^3 + 2*x.
- function_field()¶
Return the function field of the vector bundle
EXAMPLES
sage: from vector_bundle import trivial_bundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: V = trivial_bundle(K) sage: V.function_field() Function field in y defined by y^2 + 2*x^3 + 2*x
- h0()¶
Returns a basis of the 0th cohomology group of
self
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1,1 / (x**5 + y)],[2, y]]) sage: g_infinite = matrix([[x, 1], [2, y**3]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: V.degree() 6 sage: h0 = V.h0(); len(h0) 6 sage: all([all([c in ideals[i] for i,c in enumerate(list(g_finite**-1 * v))]) for v in h0]) True sage: O_infinity = K.maximal_order_infinite() sage: all([all([c in O_infinity for c in g_infinite**-1 * v]) for v in h0]) True
TESTS
sage: from vector_bundle import VectorBundle sage: from vector_bundle import canonical_bundle sage: F.<x> = FunctionField(GF(3)) sage: ideals = [F.maximal_order().ideal(x), F.maximal_order().ideal(1 / (1+x^3))] sage: g_finite = matrix([[x^-5, x^-1], [2 + x^-2, 1]]) sage: g_infinite = matrix([[2*x + x^-2, 2], [x^3 + 2*x^-1, 1]]) sage: V = VectorBundle(F, ideals, g_finite, g_infinite) sage: V.degree() 6 sage: h0 = V.h0(); len(h0) 8 sage: all([all([c in ideals[i] for i,c in enumerate(list(g_finite**-1 * v))]) for v in h0]) True sage: O_infinite = F.maximal_order_infinite() sage: all([all([c in O_infinite for c in g_infinite**-1 * v]) for v in h0]) True sage: R.<y> = F[] sage: K.<y> = F.extension(y^4 - x**-2 - 1) sage: L = canonical_bundle(K) sage: len(L.h0()) 1
- h0_from_vector(v)¶
Return an element of
from a vector of coordinates in the basis given by
self.h0()
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(7)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1,1 / (x**5 + y)],[2, y]]) sage: g_infinite = matrix([[x, 1], [2, y**3]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: h0 = V.h0() sage: v = vector(list(range(6))) sage: V.coordinates_in_h0(V.h0_from_vector(v)) (0, 1, 2, 3, 4, 5)
- h1_dimension()¶
Return the dimension of the 1st cohomology group of the vector bundle.
EXAMPLES
sage: from vector_bundle import trivial_bundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: L = trivial_bundle(K) sage: L.h1_dimension() 1 sage: K.genus() 1
- h1_dual¶
File: /home/mickael/Math/Code/Published/vector_bundles/vector_bundle/vector_bundle.py (starting at line 884)
Return the dual of the 1st cohomology group of the vector bundle. By Serre duality, this is the 0th cohomology group of
canonical_bundle(self._function_field).tensor_product(self.dual())
OUTPUT:
a basis of the dual of the h1 of self
the hom bundle whose h0 has basis the first output
EXAMPLES
sage: from vector_bundle import trivial_bundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: L = trivial_bundle(K) sage: L.h1_dual() ([[1]], Homomorphism bundle from Vector bundle of rank 1 over Function field in y defined by y^2 + 2*x^3 + 2*x to Vector bundle of rank 1 over Function field in y defined by y^2 + 2*x^3 + 2*x)
- h1_element(form=None)¶
Represent a linear form over
self.h1_dual()
under Serre duality.INPUT:
form
– vector of elements of self._function_field.constant_base_field() representing a linear form over self.h1_dual(). (default: [1,0,…,0])
OUTPUT:
‘’res’’ – vector of elements of K such that the corresponding infinite répartition vectorcorresponds to form under Serre duality with respect to
safe_uniformizers(self._function_field)[0].differential()
.
EXAMPLES
sage: from vector_bundle import trivial_bundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: triv = trivial_bundle(K) sage: triv.h1_element([1]) [(x/(x^2 + 1))*y]
- hom(other)¶
Returns the hom bundle
Hom(self,other)
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V1 = VectorBundle(K, ideals, g_finite, g_infinite) sage: O = K.maximal_order() sage: V2 = VectorBundle(K, O.ideal(1), 1, x^2) sage: V = V1.hom(V2) sage: V.rank() == V1.rank() * V2.rank() True sage: V.degree() == V2.degree()*V1.rank() - V1.degree()*V2.rank() True
- is_in_h0(v)¶
Check if vector
v
with coefficients inself.function_field()
lies in the-vector space spanned by the output of
self.h0()
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(7)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1,1 / (x**5 + y)],[2, y]]) sage: g_infinite = matrix([[x, 1], [2, y**3]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: V.is_in_h0(V.h0_from_vector(vector(list(range(6))))) True sage: V.is_in_h0(vector([x^i for i in range(6)])) False
- is_locally_trivial(place)¶
Check if the vector bundle is the trivial lattice at place
place
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(7)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 - x^3 - x) sage: L1 = VectorBundle(K, K.places_finite()[0].divisor()) sage: L2 = VectorBundle(K, K.places_finite()[1].divisor()) sage: V = L1.direct_sum(L2) sage: V.is_locally_trivial(K.places_finite()[0]) False sage: V.is_locally_trivial(K.places_finite()[2]) True sage: V.is_locally_trivial(K.places_infinite()[0]) True sage: L = VectorBundle(K,K.places_infinite()[0].divisor()) sage: L.is_locally_trivial(K.places_infinite()[0]) False
- isomorphism_to(other)¶
Return an isomorphism from self to other if it exists and None otherwise
EXAMPLES
sage: from vector_bundle import (trivial_bundle, canonical_bundle, ....: atiyah_bundle) sage: F.<x> = FunctionField(GF(3)) 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: iso = triv.isomorphism_to(can) sage: triv.hom(can).is_isomorphism(iso) True sage: V = can.direct_sum(atiyah_bundle(K, 2, 0, can))\ ....: .direct_sum(triv) sage: W = can.direct_sum(atiyah_bundle(K, 2, 0)).direct_sum(can) sage: iso = V.isomorphism_to(W) sage: V.hom(W).is_isomorphism(iso) True
WARNING:
Not well implemented for infinite fields: need to specify how to chose random elements and adequatly set the sample size.
- non_trivial_extension(other)¶
Return any nontrivial extension of self by other.
EXAMPLES:
sage: from vector_bundle import trivial_bundle, canonical_bundle sage: F.<x> = FunctionField(GF(3)) 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: V = triv.non_trivial_extension(can) sage: V.rank() 2 sage: V.degree() 0 sage: V.h0() [(1, 0)] sage: V.end().h0() [ [0 1] [1 0] [0 0], [0 1] ]
- rank()¶
Return the rank of a vector bundle.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: O = K.maximal_order() sage: V = VectorBundle(K, O.ideal(1), x, y) sage: V.rank() 1
- restriction()¶
Return the Weil restriction of the vector bundle over the base field of
self._function_field
As a vector bundle is seen as a pair of lattices, the Weil restriction of a bundle is the pair of lattices seen above the maximal orders of the base field. Equivalently, if the field extension K in L corresponds to a morphism of curves f from Y to X, the restriction is the direct image under f.
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V = VectorBundle(K, ideals, g_finite, g_infinite) sage: VF = V.restriction() sage: VF._ideals [Ideal (1) of Maximal order of Rational function field in x over Finite Field of size 3, Ideal (1) of Maximal order of Rational function field in x over Finite Field of size 3, Ideal (1) of Maximal order of Rational function field in x over Finite Field of size 3, Ideal (1) of Maximal order of Rational function field in x over Finite Field of size 3] sage: VF._g_finite [ x 1 x^2 2*x] [ 0 1 0 x] [ 2*x 2 0 2*x + 1] [ 0 2 x 2] sage: VF._g_infinite [ x 0 1 0] [ 0 1 0 1/x] [ 2 0 0 (2*x + 1)/x] [ 0 2/x 1 0]
- slope()¶
Return the slop of the vector bundle.
The slope is the ratio rank/degree
EXAMPLES
sage: from vector_bundle import VectorBundle sage: from vector_bundle import trivial_bundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2-x^3-x) sage: E = VectorBundle(K, K.places_infinite()[0].divisor()) sage: V = E.non_trivial_extension(trivial_bundle(K)) sage: V.slope() 1/2
- split()¶
Return a list of indecomposable bundles
inds
, a list of integersand an isomorphism from
to
self
.EXAMPLES:
sage: # long time (20 seconds) sage: from vector_bundle import atiyah_bundle, trivial_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: V = atiyah_bundle(K, 2, 0) sage: W = triv.direct_sum_repeat(2).direct_sum(V) sage: T = matrix(K, 4, 4, ....: [x+1, 4, 3*x+4, 6*x+6, ....: 4*x+5, 6*x+5, 2*x+1, 4*x+3, ....: 3*x+1, 5*x, 3*x+1, x+6, ....: 5*x+4, 6*x, 5*x+2, 6*x+6]) sage: W = W.apply_isomorphism(T) sage: inds, ns, isom = W.split() sage: b1 = [ind.rank() for ind in inds] == [1, 2] sage: b2 = [ind.rank() for ind in inds] == [2, 1] sage: b1 or b2 True sage: b1 = ns == [1, 2] sage: b2 = ns == [2, 1] sage: b1 or b2 True sage: sum = inds[0].direct_sum_repeat(ns[0]) sage: sum = sum.direct_sum(inds[1].direct_sum_repeat(ns[1])) sage: sum.hom(W).is_isomorphism(isom) True
- tensor_power(n)¶
Return the n-th tensor power of
self
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: L = VectorBundle(F, x.poles()[0].divisor()) sage: E = L.tensor_power(3) sage: E.rank() 1 sage: E.degree() 3 sage: E.h0() [(1), (x), (x^2), (x^3)]
- tensor_product(other)¶
Returns the tensor product of two vector bundles
EXAMPLES
sage: from vector_bundle import VectorBundle sage: F.<x> = FunctionField(GF(3)) sage: R.<y> = F[] sage: K.<y> = F.extension(y^2 + x + 2) sage: ideals = [P.prime_ideal() for P in K.places_finite()[:2]] sage: g_finite = matrix([[1, x], [2, y]]) sage: g_infinite = matrix([[x, 1], [2, y]]) sage: V1 = VectorBundle(K, ideals, g_finite, g_infinite) sage: O = K.maximal_order() sage: V2 = VectorBundle(K, O.ideal(1), 1, x^2) sage: V = V1.tensor_product(V2) sage: V.rank() == V1.rank() * V2.rank() True sage: V.degree() == V1.degree()*V2.rank() + V2.degree()*V1.rank() True