Changeset ec91414 in git for Singular/LIB/brnoeth.lib


Ignore:
Timestamp:
Feb 9, 2001, 2:11:35 PM (23 years ago)
Author:
Christoph Lossen <lossen@…>
Branches:
(u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
Children:
d41bd828c3f8515900152109d59cc5dffdd4b26a
Parents:
111d4f879aaa88154657dcaa159d59abf19d9d02
Message:
* lossen : output of examples shortened


git-svn-id: file:///usr/local/Singular/svn/trunk@5216 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/brnoeth.lib

    r111d4f rec91414  
    1 version="$Id: brnoeth.lib,v 1.10 2001-01-17 09:07:28 lossen Exp $";
     1version="$Id: brnoeth.lib,v 1.11 2001-02-09 13:11:35 lossen Exp $";
    22info="
    33LIBRARY:   brnoeth.lib  Brill-Noether Algorithm, Weierstrass-SG and AG-codes
     
    3939LIB "triang.lib";
    4040LIB "hnoether.lib";
     41LIB "inout.lib";
    4142
    4243///////////////////////////////////////////////////////////////////////////////
     
    5354            variables, the ordering must be lp, and the base field must
    5455            be finite and prime.@*
    55             The option(redSB) is convenient to be set in advance.
     56            It might be convenient to set the option(redSB) in advance.
    5657SEE ALSO:   triang_lib
    5758EXAMPLE:    example closed_points; shows an example
     
    19791980          inside this local ring.@*
    19801981          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         
    19831984          With no optional arguments, the conductor is computed by
    19841985          local invariants of the singularities; otherwise it is computed
     
    19881989          of the places above P in the list of closed places L[3]. @*
    19891990          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}).
    19911995KEYWORDS: Hamburger-Noether expansions; adjunction divisor
    19921996SEE ALSO: closed_points, NSplaces
     
    21162120  ring s=2,(x,y),lp;
    21172121  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
    21212123  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
    21322133  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
    21522149  printlevel=plevel;
    21532150}
     
    21672164          See @ref{Adj_div} for a description of the entries in L.
    21682165NOTE:     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}).
    21692168SEE ALSO: closed_points, Adj_div
    21702169EXAMPLE:  example NSplaces; shows an example
     
    22222221  ring s=2,(x,y),lp;
    22232222  list C=Adj_div(x3y+y3+x);
     2223  // The list of computed places:
     2224  C[3];
    22242225  // create places up to degree 1+3
    22252226  list L=NSplaces(3,C);
    2226   L;
    2227   // for example, here is the list with the affine non-singular
    2228   // 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 :
    22292230  def aff_r=L[1][1];
    22302231  setring aff_r;
    22312232  Aff_Points(4);
    2232   // for example, we check the places of degree 4 :
     2233  // e.g., base point of the 1st place of degree 4 :
    22332234  def S(4)=L[5][4][1];
    22342235  setring S(4);
    2235   // and for example, the base points of such places :
    2236   POINTS;
     2236  POINTS[1];
    22372237  printlevel=plevel;
    22382238}
     
    32633263"USAGE:    BrillNoether(G,CURVE); G an intvec, CURVE a list
    32643264RETURN:   list of ideals (each of them with two homogeneous generators,
    3265           which represent the nominator, resp. denominator, of a rational
     3265          which represent the numerator, resp. denominator, of a rational
    32663266          function).@*
    32673267          The corresponding rational functions form a vector basis of the
     
    33693369  list C=Adj_div(x3y+y3+x);
    33703370  C=NSplaces(3,C);
    3371   // Places C[3][1] and C[3][2] are rational,
    3372   // so that we define a divisor of degree 8
    3373   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;
    33743374  def R=C[1][2];
    33753375  setring R;
    33763376  list LG=BrillNoether(G,C);
    3377   // here is the vector basis :
     3377  // here is the vector basis of L(G):
    33783378  LG;
    33793379  printlevel=plevel;
     
    34073407{
    34083408  // sum of two "rational functions" F,G given by either a pair
    3409   // nominator/denominator or a poly
     3409  // numerator/denominator or a poly
    34103410  if ( typeof(F)=="ideal" && typeof(G)=="ideal" )
    34113411  {
     
    35223522NOTE:     The procedure must be called from the ring CURVE[1][2],
    35233523          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
    35283526          in form of ideals with two homogeneous generators.
     3527WARNING:  The place must be rational, i.e., necessarily CURVE[3][i][1]=1. @*
    35293528SEE ALSO: Adj_div, NSplaces, BrillNoether
    35303529EXAMPLE:  example Weierstrass; shows an example
     
    36283627  setring R;
    36293628  // 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 :
    36323631  WS[1];
    36333632  // and the second part are the corresponding functions :
     
    39163915  def ER=HC[1][4];
    39173916  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
    39213919  // let us construct the corresponding evaluation AG code :
    39223920  matrix C=AGcode_L(G,D,HC);
     
    39643962  def ER=HC[1][4];
    39653963  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
    39693966  // let us construct the corresponding residual AG code :
    39703967  matrix C=AGcode_Omega(G,D,HC);
     
    39883985   L[2][3]: int  (the number of rational places),
    39893986   @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. @*
    39913988          If d<2 then @code{extcurve(d,CURVE);} creates a list L which
    39923989          is the update of the list CURVE with additional entries
     
    42334230  // to that extension, in order to get rational points over F_16;
    42344231  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];
    42354236  printlevel=plevel;
    42364237}
     
    42784279   E[2] ... E[n+2]:  matrices used in the procedure decodeSV
    42794280   E[n+3]:  intvec with
    4280        E[n+3][1]: correction capacity @math{\epsilon} of the algorithm
    4281        E[n+3][2]: designed Goppa distance @math{\delta} of the current AG code
     4281       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
    42824283   @end format
    42834284NOTE:     Computes the preprocessing for the basic (Skorobogatov-Vladut)
     
    42914292          The current AG code is @code{AGcode_Omega(G,D,EC)}.@*
    42924293          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 value
     4294          @code{decodeSV} instead of @math{delta}, you can change the value
    42944295          of E[n+3][2] to d before applying decodeSV.
    42954296          If you have a systematic encoding for the current code and want to
     
    42974298          @code{permute_L(D,P);}), e.g., according to the permutation
    42984299          P=L[3], L being the output of @code{sys_code}.
    4299 WARNINGS: F must be a divisor with support disjoint to the support of D and
    4300           with degree @math{\epsilon + genus}, where
    4301           @math{\epsilon:=[(deg(G)-3*genus+1)/2]}.@*
     4300WARNINGS: 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]}.@*
    43024303          G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is
    43034304          not checked by the algorithm.
     
    43654366  def ER=HC[1][4];
    43664367  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:
    43724371  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 to that 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;
    43754374  intvec F=2;
    43764375  list SV=prepSV(G,D,F,HC);
     
    43794378  print(SV[1]);
    43804379  // and here you have the correction capacity of the algorithm :
    4381   int epsilon=SV[11][1];
     4380  int epsilon=SV[size(D)+3][1];
    43824381  epsilon;
    43834382  printlevel=plevel;
     
    45174516  def ER=HC[1][4];
    45184517  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:
    45244521  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
    45274524  intvec F=2;
    45284525  list SV=prepSV(G,D,F,HC);
     
    46874684  // here is the control matrix in standard form
    46884685  print(L[2]);
    4689   // we can check that both codes are dual each other
     4686  // we can check that both codes are dual to each other
    46904687  print(L[1]*transpose(L[2]));
    46914688}
Note: See TracChangeset for help on using the changeset viewer.