Changeset ec91414 in git for Singular/LIB/brnoeth.lib
- Timestamp:
- Feb 9, 2001, 2:11:35 PM (23 years ago)
- Branches:
- (u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
- Children:
- d41bd828c3f8515900152109d59cc5dffdd4b26a
- Parents:
- 111d4f879aaa88154657dcaa159d59abf19d9d02
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/brnoeth.lib
r111d4f rec91414 1 version="$Id: brnoeth.lib,v 1.1 0 2001-01-17 09:07:28lossen Exp $";1 version="$Id: brnoeth.lib,v 1.11 2001-02-09 13:11:35 lossen Exp $"; 2 2 info=" 3 3 LIBRARY: brnoeth.lib Brill-Noether Algorithm, Weierstrass-SG and AG-codes … … 39 39 LIB "triang.lib"; 40 40 LIB "hnoether.lib"; 41 LIB "inout.lib"; 41 42 42 43 /////////////////////////////////////////////////////////////////////////////// … … 53 54 variables, the ordering must be lp, and the base field must 54 55 be finite and prime.@* 55 The option(redSB) is convenient to be setin advance.56 It might be convenient to set the option(redSB) in advance. 56 57 SEE ALSO: triang_lib 57 58 EXAMPLE: example closed_points; shows an example … … 1979 1980 inside this local ring.@* 1980 1981 In the intvec L[4] (conductor) the i-th entry corresponds to the 1981 i-th entry in the list of places L[3]. @*1982 1982 i-th entry in the list of places L[3]. 1983 1983 1984 With no optional arguments, the conductor is computed by 1984 1985 local invariants of the singularities; otherwise it is computed … … 1988 1989 of the places above P in the list of closed places L[3]. @* 1989 1990 If the point is at infinity, P[1] is a homogeneous irreducible 1990 polynomial in two variables. 1991 polynomial in two variables. 1992 1993 If @code{printlevel>=0} additional comments are displayed (default: 1994 @code{printlevel=0}). 1991 1995 KEYWORDS: Hamburger-Noether expansions; adjunction divisor 1992 1996 SEE ALSO: closed_points, NSplaces … … 2116 2120 ring s=2,(x,y),lp; 2117 2121 list C=Adj_div(y9+y8+xy6+x2y3+y2+x3); 2118 C; 2119 // affine ring 2120 def aff_R=C[1][1]; 2122 def aff_R=C[1][1]; // the affine ring 2121 2123 setring aff_R; 2122 // the affine equation of the curve 2123 CHI; 2124 // the ideal of affine singular locus 2125 Aff_SLocus; 2126 // the list of affine singular points 2127 Aff_SPoints; 2128 // the list of singular/non-singular points at infinity 2129 Inf_Points; 2130 // the projective ring 2131 def proj_R=C[1][2]; 2124 listvar(aff_R); // data in the affine ring 2125 CHI; // affine equation of the curve 2126 Aff_SLocus; // ideal of the affine singular locus 2127 Aff_SPoints[1]; // 1st affine singular point: (1:1:1), no.1 2128 Inf_Points[1]; // singular point(s) at infinity: (1:0:0), no.4 2129 Inf_Points[2]; // list of non-singular points at infinity 2130 // 2131 pause("press RETURN"); 2132 def proj_R=C[1][2]; // the projective ring 2132 2133 setring proj_R; 2133 // the projective equation of the curve 2134 CHI; 2135 // the degree of the curve : 2136 C[2][1]; 2137 // the genus of the curve : 2138 C[2][2]; 2139 // the adjunction divisor : 2140 C[4]; 2141 // the list of computed places 2142 C[3]; 2143 // the list of local rings and degrees of base points 2144 C[5]; 2145 // we look at some places 2146 def S(1)=C[5][1][1]; 2147 setring S(1); 2148 POINTS; 2149 LOC_EQS; 2150 PARAMETRIZATIONS; 2151 BRANCHES; 2134 CHI; // projective equation of the curve 2135 C[2][1]; // degree of the curve 2136 C[2][2]; // genus of the curve 2137 C[3]; // list of computed places 2138 C[4]; // adjunction divisor (all points are singular!) 2139 // 2140 pause("press RETURN"); 2141 // we look at the place(s) of degree 2 by changing to the ring 2142 C[5][2][1]; 2143 def S(2)=C[5][2][1]; 2144 setring S(2); 2145 POINTS; // base point(s) of place(s) of degree 2: (1:a:1) 2146 LOC_EQS; // local equation(s) 2147 PARAMETRIZATIONS; // parametrization(s) and exactness 2148 BRANCHES; // Hamburger-Noether development 2152 2149 printlevel=plevel; 2153 2150 } … … 2167 2164 See @ref{Adj_div} for a description of the entries in L. 2168 2165 NOTE: The list_expression should be the output of the procedure Adj_div.@* 2166 If @code{printlevel>=0} additional comments are displayed (default: 2167 @code{printlevel=0}). 2169 2168 SEE ALSO: closed_points, Adj_div 2170 2169 EXAMPLE: example NSplaces; shows an example … … 2222 2221 ring s=2,(x,y),lp; 2223 2222 list C=Adj_div(x3y+y3+x); 2223 // The list of computed places: 2224 C[3]; 2224 2225 // create places up to degree 1+3 2225 2226 list L=NSplaces(3,C); 2226 L;2227 // for example, here is the list with the affine non-singular2228 // points of degree 4 :2227 // The list of computed places is now: 2228 L[3]; 2229 // e.g., affine non-singular points of degree 4 : 2229 2230 def aff_r=L[1][1]; 2230 2231 setring aff_r; 2231 2232 Aff_Points(4); 2232 // for example, we check the placesof degree 4 :2233 // e.g., base point of the 1st place of degree 4 : 2233 2234 def S(4)=L[5][4][1]; 2234 2235 setring S(4); 2235 // and for example, the base points of such places : 2236 POINTS; 2236 POINTS[1]; 2237 2237 printlevel=plevel; 2238 2238 } … … 3263 3263 "USAGE: BrillNoether(G,CURVE); G an intvec, CURVE a list 3264 3264 RETURN: list of ideals (each of them with two homogeneous generators, 3265 which represent the n ominator, resp. denominator, of a rational3265 which represent the numerator, resp. denominator, of a rational 3266 3266 function).@* 3267 3267 The corresponding rational functions form a vector basis of the … … 3369 3369 list C=Adj_div(x3y+y3+x); 3370 3370 C=NSplaces(3,C); 3371 // Places C[3][1] and C[3][2] are rational,3372 // so that we define a divisor of degree 83373 intvec G=4, 4;3371 // the first 3 Places in C[3] are of degree 1. 3372 // we define the rational divisor G = 4*C[3][1]+4*C[3][3] (of degree 8): 3373 intvec G=4,0,4; 3374 3374 def R=C[1][2]; 3375 3375 setring R; 3376 3376 list LG=BrillNoether(G,C); 3377 // here is the vector basis :3377 // here is the vector basis of L(G): 3378 3378 LG; 3379 3379 printlevel=plevel; … … 3407 3407 { 3408 3408 // sum of two "rational functions" F,G given by either a pair 3409 // n ominator/denominator or a poly3409 // numerator/denominator or a poly 3410 3410 if ( typeof(F)=="ideal" && typeof(G)=="ideal" ) 3411 3411 { … … 3522 3522 NOTE: The procedure must be called from the ring CURVE[1][2], 3523 3523 where CURVE is the output of the procedure @code{NSplaces}. 3524 i represents the place CURVE[3][i]. 3525 WARNING: the place must be rational, i.e., necessarily 3526 CURVE[3][P][1]=1. 3527 Rational functions are represented by nominator/denominator 3524 @* i represents the place CURVE[3][i]. 3525 @* Rational functions are represented by numerator/denominator 3528 3526 in form of ideals with two homogeneous generators. 3527 WARNING: The place must be rational, i.e., necessarily CURVE[3][i][1]=1. @* 3529 3528 SEE ALSO: Adj_div, NSplaces, BrillNoether 3530 3529 EXAMPLE: example Weierstrass; shows an example … … 3628 3627 setring R; 3629 3628 // Place C[3][1] has degree 1 (i.e it is rational); 3630 list WS=Weierstrass(1, 10,C);3631 // the first part of the list is the Weierstrass semigroup up to 10:3629 list WS=Weierstrass(1,7,C); 3630 // the first part of the list is the Weierstrass semigroup up to 7 : 3632 3631 WS[1]; 3633 3632 // and the second part are the corresponding functions : … … 3916 3915 def ER=HC[1][4]; 3917 3916 setring ER; 3918 intvec G=5; 3919 intvec D=2..9; 3920 // we already have a rational divisor G and 8 more points over F_4; 3917 intvec G=5; // the rational divisor G = 5*HC[3][1] 3918 intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 3921 3919 // let us construct the corresponding evaluation AG code : 3922 3920 matrix C=AGcode_L(G,D,HC); … … 3964 3962 def ER=HC[1][4]; 3965 3963 setring ER; 3966 intvec G=5; 3967 intvec D=2..9; 3968 // we already have a rational divisor G and 8 more points over F_4; 3964 intvec G=5; // the rational divisor G = 5*HC[3][1] 3965 intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 3969 3966 // let us construct the corresponding residual AG code : 3970 3967 matrix C=AGcode_Omega(G,D,HC); … … 3988 3985 L[2][3]: int (the number of rational places), 3989 3986 @end format 3990 the rings being defined over a field extension of degree d. 3987 the rings being defined over a field extension of degree d. @* 3991 3988 If d<2 then @code{extcurve(d,CURVE);} creates a list L which 3992 3989 is the update of the list CURVE with additional entries … … 4233 4230 // to that extension, in order to get rational points over F_16; 4234 4231 C=extcurve(4,C); 4232 // e.g., display the basepoint of place no. 32: 4233 def R=C[1][5]; 4234 setring R; 4235 POINTS[32]; 4235 4236 printlevel=plevel; 4236 4237 } … … 4278 4279 E[2] ... E[n+2]: matrices used in the procedure decodeSV 4279 4280 E[n+3]: intvec with 4280 E[n+3][1]: correction capacity @math{ \epsilon} of the algorithm4281 E[n+3][2]: designed Goppa distance @math{ \delta} of the current AG code4281 E[n+3][1]: correction capacity @math{epsilon} of the algorithm 4282 E[n+3][2]: designed Goppa distance @math{delta} of the current AG code 4282 4283 @end format 4283 4284 NOTE: Computes the preprocessing for the basic (Skorobogatov-Vladut) … … 4291 4292 The current AG code is @code{AGcode_Omega(G,D,EC)}.@* 4292 4293 If you know the exact minimum distance d and you want to use it in 4293 @code{decodeSV} instead of @math{ \delta}, you can change the value4294 @code{decodeSV} instead of @math{delta}, you can change the value 4294 4295 of E[n+3][2] to d before applying decodeSV. 4295 4296 If you have a systematic encoding for the current code and want to … … 4297 4298 @code{permute_L(D,P);}), e.g., according to the permutation 4298 4299 P=L[3], L being the output of @code{sys_code}. 4299 WARNINGS: F must be a divisor with support disjoint tothe support of D and4300 with degree @math{ \epsilon + genus}, where4301 @math{ \epsilon:=[(deg(G)-3*genus+1)/2]}.@*4300 WARNINGS: F must be a divisor with support disjoint from the support of D and 4301 with degree @math{epsilon + genus}, where 4302 @math{epsilon:=[(deg(G)-3*genus+1)/2]}.@* 4302 4303 G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is 4303 4304 not checked by the algorithm. … … 4365 4366 def ER=HC[1][4]; 4366 4367 setring ER; 4367 intvec G=5; 4368 intvec D=2..9; 4369 // we already have a rational divisor G and 8 more points over F_4; 4370 // let us construct the corresponding residual AG code of type 4371 // [8,3,>=5] over F_4 4368 intvec G=5; // the rational divisor G = 5*HC[3][1] 4369 intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 4370 // construct the corresp. residual AG code of type [8,3,>=5] over F_4: 4372 4371 matrix C=AGcode_Omega(G,D,HC); 4373 // we can correct 1 error and the genus is 1, thus F must have 4374 // degree 2 and support disjoint tothat of D;4372 // we can correct 1 error and the genus is 1, thus F must have degree 2 4373 // and support disjoint from that of D; 4375 4374 intvec F=2; 4376 4375 list SV=prepSV(G,D,F,HC); … … 4379 4378 print(SV[1]); 4380 4379 // and here you have the correction capacity of the algorithm : 4381 int epsilon=SV[ 11][1];4380 int epsilon=SV[size(D)+3][1]; 4382 4381 epsilon; 4383 4382 printlevel=plevel; … … 4517 4516 def ER=HC[1][4]; 4518 4517 setring ER; 4519 intvec G=5; 4520 intvec D=2..9; 4521 // we already have a rational divisor G and 8 more points over F_4; 4522 // let us construct the corresponding residual AG code of type 4523 // [8,3,>=5] over F_4 4518 intvec G=5; // the rational divisor G = 5*HC[3][1] 4519 intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 4520 // construct the corresp. residual AG code of type [8,3,>=5] over F_4: 4524 4521 matrix C=AGcode_Omega(G,D,HC); 4525 // we can correct 1 error and the genus is 1, thus F must have 4526 // degree 2 and support disjoint to that of D;4522 // we can correct 1 error and the genus is 1, thus F must have degree 2 4523 // and support disjoint from that of D 4527 4524 intvec F=2; 4528 4525 list SV=prepSV(G,D,F,HC); … … 4687 4684 // here is the control matrix in standard form 4688 4685 print(L[2]); 4689 // we can check that both codes are dual each other4686 // we can check that both codes are dual to each other 4690 4687 print(L[1]*transpose(L[2])); 4691 4688 }
Note: See TracChangeset
for help on using the changeset viewer.