Changeset 4ac997 in git
- Timestamp:
- Dec 22, 2000, 2:43:10 PM (22 years ago)
- Branches:
- (u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
- Children:
- 558eb2e4904ef3d1c00dc5ccf1cdf5d4d5e4532a
- Parents:
- 5a1141ebfb120e63485f9ef6b7dd5dc003ac29bf
- Location:
- Singular/LIB
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/ainvar.lib
r5a1141 r4ac997 1 // $Id: ainvar.lib,v 1. 3 2000-12-19 15:05:15 anneExp $1 // $Id: ainvar.lib,v 1.4 2000-12-22 13:32:17 greuel Exp $ 2 2 ///////////////////////////////////////////////////////////////////////////// 3 4 version="$Id: ainvar.lib,v 1.3 2000-12-19 15:05:15 anne Exp $"; 3 version="$Id: ainvar.lib,v 1.4 2000-12-22 13:32:17 greuel Exp $"; 5 4 category="Invariant theory"; 6 5 info=" 7 LIBRARY: ainvar.lib PROCEDURES FOR COMPUTING INVARIANTS RINGS OF THE ADDITIVE GROUP6 LIBRARY: ainvar.lib Invariant Rings of the Additive Group 8 7 AUTHORS: Gerhard Pfister, email: pfister@mathematik.uni-kl.de 9 8 Gert-Martin Greuel, email: greuel@mathematik.uni-kl.de -
Singular/LIB/algebra.lib
r5a1141 r4ac997 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: algebra.lib,v 1. 6 2000-12-19 14:41:41 anneExp $";2 version="$Id: algebra.lib,v 1.7 2000-12-22 13:34:59 greuel Exp $"; 3 3 category="Commutative Algebra"; 4 4 info=" 5 LIBRARY: algebra.lib PROCEDURES FOR COMPUTING WITH ALGBRAS AND MAPS6 AUTHORS: Gert-Martin Greuel, email:greuel@mathematik.uni-kl.de,7 Agnes Eileen Heydtmann, email:agnes@math.uni-sb.de,8 Gerhard Pfister, email:pfister@mathematik.uni-kl.de5 LIBRARY: algebra.lib Compute with Algbras and Algebra Maps 6 AUTHORS: Gert-Martin Greuel, greuel@mathematik.uni-kl.de, 7 Agnes Eileen Heydtmann, agnes@math.uni-sb.de, 8 Gerhard Pfister, pfister@mathematik.uni-kl.de 9 9 10 10 PROCEDURES: -
Singular/LIB/brnoeth.lib
r5a1141 r4ac997 1 version="$Id: brnoeth.lib,v 1.5 2000-12-19 15:05:16 anne Exp $"; 2 category="Coding theory"; 1 version="$Id: brnoeth.lib,v 1.6 2000-12-22 13:38:23 greuel Exp $"; 3 2 info=" 4 LIBRARY: brnoeth.lib PROCEDURES FOR THE BRILL-NOETHER ALGORITHM 5 6 AUTHORS: Jose Ignacio Farran Martin, ignfar@eis.uva.es 7 Christoph Lossen, lossen@mathematik.uni-kl.de 8 9 SEE ALSO: hnoether_lib, triang_lib 10 11 KEYWORDS: Weierstrass semigroup; Algebraic Geometry codes; 12 Brill-Noether algorithm 13 14 OVERVIEW: Implementation of the Brill-Noether algorithm for solving the 15 Riemann-Roch problem and applications in Algebraic Geometry codes. 16 The computation of Weierstrass semigroups is also implemented.@* 17 The procedures are intended only for plane (singular) curves 18 defined over a prime field of positive charateristic.@* 19 You can get more information about the library just 20 by reading the end of the file brnoeth.lib. 3 LIBRARY: brnoeth.lib Brill-Noether Algorithm, Weierstrass-SG and AG-codes 4 AUTHORS: Jose Ignacio Farran Martin, ignfar@eis.uva.es 5 Christoph Lossen, lossen@mathematik.uni-kl.de 6 7 OVERVIEW: 8 Implementation of the Brill-Noether algorithm for solving the 9 Riemann-Roch problem and applications in Algebraic Geometry codes. 10 The computation of Weierstrass semigroups is also implemented.@* 11 The procedures are intended only for plane (singular) curves defined over 12 a prime field of positive charateristic.@* 13 For more information about the library see the end of the file brnoeth.lib. 21 14 22 15 MAIN PROCEDURES: … … 26 19 Weierstrass(P,m,C); computes the Weierstrass semigroup of C at P up to m 27 20 extcurve(d,C); extends the curve C to an extension of degree d 28 AGcode_L(G,D,E); computes the evaluation AG code with given divisors 29 G and D 30 AGcode_Omega(G,D,E); computes the residual AG code with given divisors 31 G and D 21 AGcode_L(G,D,E); computes the evaluation AG code with divisors G and D 22 AGcode_Omega(G,D,E); computes the residual AG code with divisors G and D 32 23 prepSV(G,D,F,E); preprocessing for the basic decoding algorithm 33 24 decodeSV(y,K); decoding of a word with the basic decoding algorithm … … 38 29 sys_code(C); computes an equivalent systematic code 39 30 permute_L(L,P); applies a permutation to a list 31 32 SEE ALSO: hnoether_lib, triang_lib 33 34 KEYWORDS: Weierstrass semigroup; Algebraic Geometry codes; 35 Brill-Noether algorithm 40 36 "; 41 42 43 // ===========================================================================44 45 37 46 38 LIB "matrix.lib"; 47 39 LIB "triang.lib"; 48 40 LIB "hnoether.lib"; 49 // -> LIB "general.lib","ring.lib"; 50 // maybe useful : LIB "linalg.lib","primdec.lib","normal.lib"; 51 52 53 // =========================================================================== 54 41 42 /////////////////////////////////////////////////////////////////////////////// 55 43 56 44 // ********************************************************** … … 58 46 // ********************************************************** 59 47 60 61 48 proc closed_points (ideal I) 62 "USAGE: closed_points(I), where I is an ideal 63 64 RETURN: list of prime ideals (std), corresponding to the (distinct affine 65 closed) points of V(I). 66 49 "USAGE: closed_points(I); I an ideal 50 RETURN: list of prime ideals (each a Groebner basis), corresponding to 51 the (distinct affine closed) points of V(I) 67 52 NOTE: The ideal must have dimension 0, the basering must have 2 68 53 variables, the ordering must be lp, and the base field must 69 54 be finite and prime.@* 70 55 The option(redSB) is convenient to be set in advance. 71 72 56 SEE ALSO: triang_lib 73 74 57 EXAMPLE: example closed_points; shows an example 75 58 " … … 121 104 L; 122 105 } 123 106 /////////////////////////////////////////////////////////////////////////////// 124 107 125 108 static proc pd2 (poly g1,poly g2) … … 178 161 return(L); 179 162 } 180 181 163 /////////////////////////////////////////////////////////////////////////////// 182 164 static proc isPinL (ideal P,list L) 183 165 { … … 202 184 return(0); 203 185 } 204 205 186 /////////////////////////////////////////////////////////////////////////////// 206 187 static proc s_locus (poly f) 207 188 { … … 222 203 } 223 204 } 224 225 205 /////////////////////////////////////////////////////////////////////////////// 226 206 static proc curve (poly f) 227 "USAGE: curve(f), where f is a polynomial (affine o fprojective)228 CREATE: poly CHI in both ring aff_r=p,(x,y),lp and ringProj_R=p,(x,y,z),lp207 "USAGE: curve(f), where f is a polynomial (affine or projective) 208 CREATE: poly CHI in both rings aff_r=p,(x,y),lp and Proj_R=p,(x,y,z),lp 229 209 also ideal (std) Aff_SLocus of affine singular locus in the ring 230 210 aff_r 231 RETURN: list (size 3) with aff_r,Proj_R anddeg(f)211 RETURN: list (size 3) with two rings aff_r,Proj_R and an integer deg(f) 232 212 NOTE: f must be absolutely irreducible, but this is not checked 233 213 it is not implemented yet for extensions of prime fields … … 282 262 ERROR("basering must have 2 or 3 variables"); 283 263 } 284 285 264 /////////////////////////////////////////////////////////////////////////////// 286 265 static proc Aff_SL (ideal ISL) 287 266 { … … 310 289 return(SL); 311 290 } 312 313 291 /////////////////////////////////////////////////////////////////////////////// 314 292 static proc inf_P (poly f) 315 293 { … … 422 400 return(list(IP_S,IP_NS)); 423 401 } 424 425 402 /////////////////////////////////////////////////////////////////////////////// 426 403 static proc closed_points_ext (poly f,int d,ideal SL) 427 404 { … … 464 441 return(LP); 465 442 } 466 467 443 /////////////////////////////////////////////////////////////////////////////// 468 444 static proc degree_P (list P) 469 445 "USAGE: degree_P(P), where P is either a polynomial or an ideal … … 509 485 } 510 486 } 511 512 487 /////////////////////////////////////////////////////////////////////////////// 513 488 static proc closed_points_deg (poly f,int d,ideal SL) 514 489 { … … 530 505 return(LP); 531 506 } 532 533 507 /////////////////////////////////////////////////////////////////////////////// 534 508 static proc subset (ideal I,ideal J) 535 509 { … … 547 521 return(1); 548 522 } 549 550 523 /////////////////////////////////////////////////////////////////////////////// 551 524 static proc belongs (list P,ideal I) 552 525 { … … 562 535 } 563 536 } 564 565 537 /////////////////////////////////////////////////////////////////////////////// 566 538 static proc equals (ideal I,ideal J) 567 539 { … … 578 550 return(answer); 579 551 } 580 581 552 /////////////////////////////////////////////////////////////////////////////// 582 553 static proc isInLP (ideal P,list LP) 583 554 { … … 603 574 return(0); 604 575 } 605 606 576 /////////////////////////////////////////////////////////////////////////////// 607 577 static proc res_deg () 608 578 { … … 624 594 return(ext); 625 595 } 626 627 596 /////////////////////////////////////////////////////////////////////////////// 628 597 static proc Frobenius (etwas,int r) 629 598 { … … 694 663 return(etwas); 695 664 } 696 697 665 /////////////////////////////////////////////////////////////////////////////// 698 666 static proc conj_b (list L,int r) 699 667 { … … 740 708 return(LL); 741 709 } 742 743 710 /////////////////////////////////////////////////////////////////////////////// 744 711 static proc grad_b (list L,int r) 745 712 { … … 764 731 return(gr); 765 732 } 766 767 733 /////////////////////////////////////////////////////////////////////////////// 768 734 static proc conj_bs (list L,int r) 769 735 { … … 795 761 return(branches); 796 762 } 797 798 763 /////////////////////////////////////////////////////////////////////////////// 799 764 static proc subfield (sf) 800 765 { … … 868 833 } 869 834 } 870 871 835 /////////////////////////////////////////////////////////////////////////////// 872 836 static proc importdatum (sf,string datum,string rel) 873 837 { … … 901 865 } 902 866 } 903 904 867 /////////////////////////////////////////////////////////////////////////////// 905 868 static proc rationalize (lf,string datum,string rel) 906 869 { … … 940 903 } 941 904 } 942 943 905 /////////////////////////////////////////////////////////////////////////////// 944 906 static proc place (intvec Pp,int sing,list CURVE) 945 907 { … … 1728 1690 return(update_CURVE); 1729 1691 } 1730 1731 1692 /////////////////////////////////////////////////////////////////////////////// 1732 1693 static proc local_conductor (int k,SS) 1733 1694 { … … 1854 1815 return(Cq); 1855 1816 } 1856 1857 1817 /////////////////////////////////////////////////////////////////////////////// 1858 1818 static proc max_D (intvec D1,intvec D2) 1859 1819 { … … 1899 1859 } 1900 1860 } 1901 1902 1861 /////////////////////////////////////////////////////////////////////////////// 1903 1862 static proc deg_D (intvec D,list PP) 1904 1863 { … … 1913 1872 return(d); 1914 1873 } 1915 1874 /////////////////////////////////////////////////////////////////////////////// 1916 1875 1917 1876 // ============================================================================ … … 1919 1878 // ============================================================================ 1920 1879 1921 1922 1880 proc Adj_div (poly f,list #) 1923 "USAGE: Adj_div( f [,#] ), where f is a poly, [ # a list ] 1924 1925 RETURN: list L with the computed data: 1881 "USAGE: Adj_div( f [,l] ); f a poly, [l a list] 1882 RETURN: list L with the computed data: 1926 1883 @format 1927 L[1] isa list of rings: L[1][1]=aff_r (affine), L[1][2]=Proj_R (projective),1928 L[2] isan intvec with 2 entries (degree, genus),1929 L[3] isa list of intvec (closed places),1930 L[4] isan intvec (conductor),1931 L[5] isa list of lists:1932 L[5][d][1] isa (local) ring over an extension of degree d,1933 L[5][d][2] isan intvec (degrees of base points of places of degree d)1884 L[1] a list of rings: L[1][1]=aff_r (affine), L[1][2]=Proj_R (projective), 1885 L[2] an intvec with 2 entries (degree, genus), 1886 L[3] a list of intvec (closed places), 1887 L[4] an intvec (conductor), 1888 L[5] a list of lists: 1889 L[5][d][1] a (local) ring over an extension of degree d, 1890 L[5][d][2] an intvec (degrees of base points of places of degree d) 1934 1891 @end format 1935 1936 NOTE: @code{Adj_div(f);} computes and stores the fundamental data of the 1937 plane curve defined by f as needed for AG codes. 1938 In the affine ring you can find the following data: 1892 NOTE: @code{Adj_div(f);} computes and stores the fundamental data of the 1893 plane curve defined by f as needed for AG codes. 1894 In the affine ring you can find the following data: 1939 1895 @format 1940 1896 poly CHI: affine equation of the curve, … … 1945 1901 list Aff_SPoints: affine singular points (if not empty). 1946 1902 @end format 1947 1948 1949 1903 In the projective ring you can find the projective equation 1904 CHI of the curve (poly). 1905 In the local rings L[5][d][1] you find: 1950 1906 @format 1951 1907 list POINTS: base points of the places of degree d, … … 1954 1910 list PARAMETRIZATIONS: local parametrizations of the places, 1955 1911 @end format 1956 1957 1958 1959 1960 1961 1962 1963 1964 1912 Each entry of the list L[3] corresponds to one closed place (i.e., 1913 a place and all its conjugates) which is represented by an intvec 1914 of size two, the first entry is the degree of the place (in 1915 particular, it tells the local ring where to find the data 1916 describing one representative of the closed place), and the 1917 second one is the position of those data in the lists POINTS, etc., 1918 inside this local ring.@* 1919 In the intvec L[4] (conductor) the i-th entry corresponds to the 1920 i-th entry in the list of places L[3].@* 1965 1921 1966 With no optional arguments, the conductor is computed by 1967 local invariants of the singularities; otherwise it is computed 1968 by the Dedekind formula. @* 1969 An affine point is represented by a list P where P[1] is std 1970 of a prime ideal and P[2] is an intvec containing the position 1971 of the places above P in the list of closed places L[3]. @* 1972 If the point is at infinity, P[1] is a homogeneous irreducible 1973 polynomial in two variables. 1974 1975 KEYWORDS: Hamburger-Noether expansions; adjunction divisor 1976 1977 SEE ALSO: closed_points, NSplaces 1978 1979 EXAMPLE: example Adj_div; shows an example 1922 With no optional arguments, the conductor is computed by 1923 local invariants of the singularities; otherwise it is computed 1924 by the Dedekind formula. @* 1925 An affine point is represented by a list P where P[1] is std 1926 of a prime ideal and P[2] is an intvec containing the position 1927 of the places above P in the list of closed places L[3]. @* 1928 If the point is at infinity, P[1] is a homogeneous irreducible 1929 polynomial in two variables. 1930 KEYWORDS: Hamburger-Noether expansions; adjunction divisor 1931 SEE ALSO: closed_points, NSplaces 1932 EXAMPLE: example Adj_div; shows an example 1980 1933 " 1981 1934 { … … 2138 2091 printlevel=plevel; 2139 2092 } 2140 2141 2142 // ============================================================================ 2143 2093 /////////////////////////////////////////////////////////////////////////////// 2144 2094 2145 2095 proc NSplaces (int h,list CURVE) 2146 "USAGE: NSplaces( h, CURVE ), where h is an integer and CURVE is a list 2147 2148 RETURN: list L with updated data of CURVE after computing all 2149 points up to degree H+h (H the maximum degree of the previously 2150 computed places: @* 2096 "USAGE: NSplaces( h, CURVE ), where h is an integer and CURVE is a list 2097 RETURN: list L with updated data of CURVE after computing all 2098 points up to degree H+h (H the maximum degree of the previously 2099 computed places): @* 2151 2100 @format 2152 in affine ring L[1][1]: 2153 lists Aff_Points(d) with affine non-singular points of degree d 2154 (if non-empty) 2155 in L[3]: the newly computed closed places are added, 2156 in L[5]: local rings created/updated to store (represent. of) new places. 2101 in L[1][1]: (affine ring) lists Aff_Points(d) with affine non-singular 2102 points of degree d (if non-empty) 2103 in L[3]: the newly computed closed places are added, 2104 in L[5]: local rings created/updated to store (repres. of) new places. 2157 2105 @end format 2158 See @ref{Adj_div} for a description of the entries in L. 2159 2160 NOTE: The list_expression should be the output of the procedure Adj_div.@* 2161 2162 SEE ALSO: closed_points, Adj_div 2163 EXAMPLE: example NSplaces; shows an example 2106 See @ref{Adj_div} for a description of the entries in L. 2107 NOTE: The list_expression should be the output of the procedure Adj_div.@* 2108 SEE ALSO: closed_points, Adj_div 2109 EXAMPLE: example NSplaces; shows an example 2164 2110 " 2165 2111 { … … 2227 2173 printlevel=plevel; 2228 2174 } 2229 2175 /////////////////////////////////////////////////////////////////////////////// 2230 2176 2231 2177 // ** SPECIAL PROCEDURES FOR LINEAR ALGEBRA ** 2232 2233 2178 2234 2179 static proc Ker (matrix A) … … 2241 2186 return(M); 2242 2187 } 2243 2244 2188 /////////////////////////////////////////////////////////////////////////////// 2245 2189 static proc get_NZsol (matrix A) 2246 2190 { … … 2248 2192 return(submat(sol,1..1,1..ncols(sol))); 2249 2193 } 2250 2251 2194 /////////////////////////////////////////////////////////////////////////////// 2252 2195 static proc supplement (matrix W,matrix V) 2253 2196 "USAGE: supplement(W,V), where W,V are matrices of numbers such that the … … 2281 2224 return(H*V); 2282 2225 } 2283 2284 2226 /////////////////////////////////////////////////////////////////////////////// 2285 2227 static proc supplem (matrix M) 2286 2228 "USAGE: suplement(M), where M is a matrix of numbers with maximal rank … … 2321 2263 return(supl); 2322 2264 } 2323 2324 2265 /////////////////////////////////////////////////////////////////////////////// 2325 2266 static proc mat_rank (matrix A) 2326 2267 { … … 2332 2273 return(r); 2333 2274 } 2334 2275 /////////////////////////////////////////////////////////////////////////////// 2335 2276 2336 2277 // *************************************************************** 2337 2278 // * PROCEDURES FOR INTERPOLATION, INTERSECTION AND EXTRA PLACES * 2338 2279 // *************************************************************** 2339 2340 2280 2341 2281 static proc estim_n (intvec Dplus,int dgX,list PL) … … 2351 2291 return(estim); 2352 2292 } 2353 2354 2293 /////////////////////////////////////////////////////////////////////////////// 2355 2294 static proc nforms (int n) 2356 2295 { … … 2386 2325 return(N-1); 2387 2326 } 2388 2389 2327 /////////////////////////////////////////////////////////////////////////////// 2390 2328 static proc nmultiples (int n,int dgX,poly f) 2391 2329 { … … 2418 2356 return(transpose(lift(nFORMS(n),nmults))); 2419 2357 } 2420 2421 2358 /////////////////////////////////////////////////////////////////////////////// 2422 2359 static proc interpolating_forms (intvec D,int n,list CURVE) 2423 2360 { … … 2720 2657 return(Ker(totalM)); 2721 2658 } 2722 2723 2659 /////////////////////////////////////////////////////////////////////////////// 2724 2660 static proc local_IN (poly h,int m) 2725 2661 { … … 2790 2726 return(answer); 2791 2727 } 2792 2793 2728 /////////////////////////////////////////////////////////////////////////////// 2794 2729 static proc extra_place (ideal P) 2795 2730 { … … 2899 2834 return(answer); 2900 2835 } 2901 2902 2836 /////////////////////////////////////////////////////////////////////////////// 2903 2837 static proc intersection_div (poly H,list CURVE) 2904 2838 "USAGE: intersection_div(H,CURVE), where H is a homogeneous polynomial … … 3176 3110 return(answer); 3177 3111 } 3178 3179 3112 /////////////////////////////////////////////////////////////////////////////// 3180 3113 static proc local_eq (poly H,SS,int m) 3181 3114 { … … 3219 3152 return(str_h); 3220 3153 } 3221 3222 3154 /////////////////////////////////////////////////////////////////////////////// 3223 3155 static proc min_wt_rmat (matrix M) 3224 3156 { … … 3256 3188 return(k); 3257 3189 } 3258 3190 /////////////////////////////////////////////////////////////////////////////// 3259 3191 3260 3192 // ============================================================================ … … 3262 3194 // ============================================================================ 3263 3195 3264 3265 3196 proc BrillNoether (intvec G,list CURVE) 3266 "USAGE: BrillNoether(G,CURVE), where G is an intvec and CURVE is a list 3267 3268 RETURN: list of ideals (each of them with two homogeneous generators, 3269 which represent the nominator, resp. denominator, of a rational 3270 function).@* 3271 The corresponding rational functions form a vector basis of the 3272 linear system L(G), G a rational divisor over a non-singular curve. 3273 3274 NOTE: The procedure must be called from the ring CURVE[1][2], where 3275 CURVE is the output of the procedure @code{NSplaces}. @* 3276 The intvec G represents a rational divisor supported on the closed 3277 places of CURVE[3] (e.g. @code{G=2,0,-1;} means 2 times the closed 3278 place 1 minus 1 times the closed place 3). 3279 3280 SEE ALSO: Adj_div, NSplaces, Weierstrass 3281 3282 EXAMPLE: example BrillNoether; shows an example 3197 "USAGE: BrillNoether(G,CURVE); G an intvec, CURVE a list 3198 RETURN: list of ideals (each of them with two homogeneous generators, 3199 which represent the nominator, resp. denominator, of a rational 3200 function).@* 3201 The corresponding rational functions form a vector basis of the 3202 linear system L(G), G a rational divisor over a non-singular curve. 3203 NOTE: The procedure must be called from the ring CURVE[1][2], where 3204 CURVE is the output of the procedure @code{NSplaces}. @* 3205 The intvec G represents a rational divisor supported on the closed 3206 places of CURVE[3] (e.g. @code{G=2,0,-1;} means 2 times the closed 3207 place 1 minus 1 times the closed place 3). 3208 SEE ALSO: Adj_div, NSplaces, Weierstrass 3209 EXAMPLE: example BrillNoether; shows an example 3283 3210 " 3284 3211 { … … 3386 3313 printlevel=plevel; 3387 3314 } 3388 3315 /////////////////////////////////////////////////////////////////////////////// 3389 3316 3390 3317 // *** procedures for dealing with "RATIONAL FUNCTIONS" over a plane curve *** 3391 3318 // a rational function F may be given by (homogeneous) ideal or (affine) poly 3392 3319 // (or number) 3393 3394 3320 3395 3321 static proc polytoRF (F) … … 3402 3328 return(RF); 3403 3329 } 3404 3405 3330 /////////////////////////////////////////////////////////////////////////////// 3406 3331 static proc simplifyRF (ideal F) 3407 3332 { … … 3412 3337 return(ideal(division(auxp,F)[1])); 3413 3338 } 3414 3415 3339 /////////////////////////////////////////////////////////////////////////////// 3416 3340 static proc sumRF (F,G) 3417 3341 { … … 3452 3376 } 3453 3377 } 3454 3455 3378 /////////////////////////////////////////////////////////////////////////////// 3456 3379 static proc negRF (F) 3457 3380 { … … 3468 3391 } 3469 3392 } 3470 3471 3393 /////////////////////////////////////////////////////////////////////////////// 3472 3394 static proc escprodRF (l,F) 3473 3395 { … … 3485 3407 } 3486 3408 } 3487 3409 /////////////////////////////////////////////////////////////////////////////// 3488 3410 3489 3411 // ******** procedures to compute Weierstrass semigroups ******** 3490 3412 3491 3492 3413 static proc orderRF (ideal F,SS,int m) 3493 "USAGE: orderRF(F,SS,m), where F is an ideal, SS is a ring and m is an 3494 integer 3495 RETURN: list with the order (int) and the leading coefficient (number) 3496 NOTE: F represents a rational function, thus the procedure must be 3497 called from R or R(d). 3498 SS contains the name of a local ring where rational places are 3499 stored, and then we take that which is in position m in the 3500 corresponding lists of data. 3501 The order of F at the place given by SS,m is returned together 3502 with the coefficient of minimum degree in the corresponding power 3503 series. 3414 "USAGE: orderRF(F,SS,m); F an ideal, SS a ring and m an integer 3415 RETURN: list with the order (int) and the leading coefficient (number) 3416 NOTE: F represents a rational function, thus the procedure must be 3417 called from global ring R or R(d). 3418 SS contains the name of a local ring where rational places are 3419 stored, and then we take that which is in position m in the 3420 corresponding lists of data. 3421 The order of F at the place given by SS,m is returned together 3422 with the coefficient of minimum degree in the corresponding power 3423 series. 3504 3424 " 3505 3425 { … … 3525 3445 return(list(oo,LC)); 3526 3446 } 3527 3528 3529 // ============================================================================ 3530 3447 /////////////////////////////////////////////////////////////////////////////// 3531 3448 3532 3449 proc Weierstrass (int P,int m,list CURVE) 3533 "USAGE: Weierstrass( i, m, CURVE ), where i,m are integers and CURVE a list 3534 3535 RETURN: list WS of two lists: 3450 "USAGE: Weierstrass( i, m, CURVE ); i,m integers and CURVE a list 3451 RETURN: list WS of two lists: 3536 3452 @format 3537 WS[1] is a list of integers (the Weierstrass semigroup of the curve 3538 at the place i up to m) 3539 WS[2] is a list of ideals (the associated rational functions) 3453 WS[1] list of integers (Weierstr. semigroup of the curve at place i up to m) 3454 WS[2] list of ideals (the associated rational functions) 3540 3455 @end format 3541 3542 3543 NOTE: The procedure must be called from the ring CURVE[1][2], 3544 where CURVE is the output of the procedure @code{NSplaces}. 3545 i represents the place CURVE[3][i]. 3546 3547 WARNING: the place must be rational, i.e., necessarily 3548 CURVE[3][P][1]=1. 3549 3550 Rational functions are represented by nominator/denominator 3551 in form of ideals with two homogeneous generators. 3552 3553 SEE ALSO: Adj_div, NSplaces, BrillNoether 3554 3555 EXAMPLE: example Weierstrass; shows an example 3456 NOTE: The procedure must be called from the ring CURVE[1][2], 3457 where CURVE is the output of the procedure @code{NSplaces}. 3458 i represents the place CURVE[3][i]. 3459 WARNING: the place must be rational, i.e., necessarily 3460 CURVE[3][P][1]=1. 3461 Rational functions are represented by nominator/denominator 3462 in form of ideals with two homogeneous generators. 3463 SEE ALSO: Adj_div, NSplaces, BrillNoether 3464 EXAMPLE: example Weierstrass; shows an example 3556 3465 " 3557 3466 { … … 3660 3569 printlevel=plevel; 3661 3570 } 3662 3663 3664 // ============================================================================ 3665 3571 /////////////////////////////////////////////////////////////////////////////// 3666 3572 3667 3573 // axiliary procedure for permuting a list or intvec 3668 3574 3669 3670 3575 proc permute_L (L,P) 3671 "USAGE: permute_L( L, P ), where L,P are either intvecs or lists 3672 3673 RETURN: list obtained from L by applying the permutation given by P. 3674 3675 NOTE: If P is a list, all entries must be integers. 3676 3677 SEE ALSO: sys_code, AGcode_Omega, prepSV 3678 3679 EXAMPLE: example permute_L; shows an example 3576 "USAGE: permute_L( L, P ); L,P either intvecs or lists 3577 RETURN: list obtained from L by applying the permutation given by P. 3578 NOTE: If P is a list, all entries must be integers. 3579 SEE ALSO: sys_code, AGcode_Omega, prepSV 3580 EXAMPLE: example permute_L; shows an example 3680 3581 " 3681 3582 { … … 3712 3613 permute_L(L,P); 3713 3614 } 3714 3715 3615 /////////////////////////////////////////////////////////////////////////////// 3716 3616 static proc evalRF (ideal F,SS,int m) 3717 3617 "USAGE: evalRF(F,SS,m), where F is an ideal, SS is a ring and m is an … … 3746 3646 } 3747 3647 } 3748 3749 3648 /////////////////////////////////////////////////////////////////////////////// 3649 // 3750 3650 // ******** procedures for constructing AG codes ******** 3751 3651 // 3652 /////////////////////////////////////////////////////////////////////////////// 3752 3653 3753 3654 static proc gen_mat (list LF,intvec LP,RP) 3754 "USAGE: gen_mat(LF,LP,RP) ,LF list of rational functions,3655 "USAGE: gen_mat(LF,LP,RP); LF list of rational functions, 3755 3656 LP intvec of rational places and RP a local ring 3756 3657 RETURN: a generator matrix of the evaluation code given by LF and LP … … 3777 3678 return(GM); 3778 3679 } 3779 3780 3781 // ============================================================================ 3782 3680 /////////////////////////////////////////////////////////////////////////////// 3783 3681 3784 3682 proc dual_code (matrix G) 3785 "USAGE: dual_code(G), where G is a matrix of numbers 3786 3787 RETURN: a generator matrix of the dual code generated by G. 3788 3789 NOTE: The input should be a matrix G of numbers. @* 3790 The output is also a parity check matrix for the code defined 3791 by G. 3792 3793 KEYWORDS: linear code, dual 3794 3795 EXAMPLE: example dual_code; shows an example 3683 "USAGE: dual_code(G); G a matrix of numbers 3684 RETURN: a generator matrix of the dual code generated by G 3685 NOTE: The input should be a matrix G of numbers. @* 3686 The output is also a parity check matrix for the code defined by G 3687 KEYWORDS: linear code, dual 3688 EXAMPLE: example dual_code; shows an example 3796 3689 " 3797 3690 { … … 3811 3704 print(H); 3812 3705 } 3813 3706 /////////////////////////////////////////////////////////////////////////////// 3814 3707 3815 3708 // ====================================================================== 3816 3709 // *********** initial test for disjointness *************** 3817 3710 // ====================================================================== 3818 3819 3711 3820 3712 static proc disj_divs (intvec H,intvec P,list EC) … … 3891 3783 return(1); 3892 3784 } 3893 3894 3895 3896 3897 // ============================================================================ 3898 3785 /////////////////////////////////////////////////////////////////////////////// 3899 3786 3900 3787 proc AGcode_L (intvec G,intvec D,list EC) 3901 "USAGE: AGcode_L( G, D, EC ), where G,D are intvec and EC is a list 3902 3903 RETURN: a generator matrix for the evaluation AG code defined by the 3904 divisors G and D. 3905 3906 NOTE: The procedure must be called within the ring EC[1][4], 3907 where EC is the output of @code{extcurve(d)} (or within 3908 the ring EC[1][2] if d=1). @* 3909 The entry i in the intvec D refers to the i-th rational 3910 place in EC[1][5] (i.e., to POINTS[i], etc., see @ref{extcurve}).@* 3911 The intvec G represents a rational divisor (see @ref{BrillNoether} 3912 for more details).@* 3913 The code evaluates the vector basis of L(G) at the rational 3914 places given by D. 3915 3916 WARNINGS: G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is 3917 not checked by the algorithm. 3918 G and D should have disjoint supports (checked by the algorithm). 3919 3920 SEE ALSO: Adj_div, BrillNoether, extcurve, AGcode_Omega 3921 3922 EXAMPLE: example AGcode_L; shows an example 3788 "USAGE: AGcode_L( G, D, EC ); G,D intvec, EC a list 3789 RETURN: a generator matrix for the evaluation AG code defined by the 3790 divisors G and D. 3791 NOTE: The procedure must be called within the ring EC[1][4], 3792 where EC is the output of @code{extcurve(d)} (or within 3793 the ring EC[1][2] if d=1). @* 3794 The entry i in the intvec D refers to the i-th rational 3795 place in EC[1][5] (i.e., to POINTS[i], etc., see @ref{extcurve}).@* 3796 The intvec G represents a rational divisor (see @ref{BrillNoether} 3797 for more details).@* 3798 The code evaluates the vector basis of L(G) at the rational 3799 places given by D. 3800 WARNINGS: G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is 3801 not checked by the algorithm. 3802 G and D should have disjoint supports (checked by the algorithm). 3803 SEE ALSO: Adj_div, BrillNoether, extcurve, AGcode_Omega 3804 EXAMPLE: example AGcode_L; shows an example 3923 3805 " 3924 3806 { … … 3976 3858 printlevel=plevel; 3977 3859 } 3978 3979 3980 // ============================================================================= 3981 3860 /////////////////////////////////////////////////////////////////////////////// 3982 3861 3983 3862 proc AGcode_Omega (intvec G,intvec D,list EC) 3984 "USAGE: AGcode_Omega( G, D, EC ), where G,D are intvec and EC is a list 3985 3986 RETURN: a generator matrix for the residual AG code defined by the 3987 divisors G and D. 3988 3989 NOTE: The procedure must be called within the ring EC[1][4], 3990 where EC is the output of @code{extcurve(d)} (or within 3991 the ring EC[1][2] if d=1). @* 3992 The entry i in the intvec D refers to the i-th rational 3993 place in EC[1][5] (i.e., to POINTS[i], etc., see @ref{extcurve}).@* 3994 The intvec G represents a rational divisor (see @ref{BrillNoether} 3995 for more details).@* 3996 The code computes the residues of a vector space basis of 3997 @math{\Omega(G-D)} at the rational places given by D. 3998 3999 WARNINGS: G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is 4000 not checked by the algorithm. 4001 G and D should have disjoint supports (checked by the algorithm). 4002 4003 SEE ALSO: Adj_div, BrillNoether, extcurve, AGcode_L 4004 4005 EXAMPLE: example AGcode_Omega; shows an example 3863 "USAGE: AGcode_Omega( G, D, EC ); G,D intvec, EC a list 3864 RETURN: a generator matrix for the residual AG code defined by the 3865 divisors G and D. 3866 NOTE: The procedure must be called within the ring EC[1][4], 3867 where EC is the output of @code{extcurve(d)} (or within 3868 the ring EC[1][2] if d=1). @* 3869 The entry i in the intvec D refers to the i-th rational 3870 place in EC[1][5] (i.e., to POINTS[i], etc., see @ref{extcurve}).@* 3871 The intvec G represents a rational divisor (see @ref{BrillNoether} 3872 for more details).@* 3873 The code computes the residues of a vector space basis of 3874 @math{\Omega(G-D)} at the rational places given by D. 3875 WARNINGS: G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is 3876 not checked by the algorithm. 3877 G and D should have disjoint supports (checked by the algorithm). 3878 SEE ALSO: Adj_div, BrillNoether, extcurve, AGcode_L 3879 EXAMPLE: example AGcode_Omega; shows an example 4006 3880 " 4007 3881 { … … 4032 3906 printlevel=plevel; 4033 3907 } 4034 3908 /////////////////////////////////////////////////////////////////////////////// 4035 3909 4036 3910 // ============================================================================ … … 4038 3912 // ============================================================================ 4039 3913 4040 4041 3914 proc extcurve (int d,list CURVE) 4042 "USAGE: extcurve( d, CURVE ), where d is an integer and CURVE is a list 4043 4044 RETURN: list L which is the update of the list CURVE with additional 4045 entries 3915 "USAGE: extcurve( d, CURVE ); d an integer, CURVE a list 3916 RETURN: list L which is the update of the list CURVE with additional entries 4046 3917 @format 4047 L[1][3]: 4048 L[1][4]: 4049 L[1][5]: 4050 L[2][3]: 3918 L[1][3]: ring (p,a),(x,y),lp (affine), 3919 L[1][4]: ring (p,a),(x,y,z),lp (projective), 3920 L[1][5]: ring (p,a),(x,y,t),ls (local), 3921 L[2][3]: int (the number of rational places), 4051 3922 @end format 4052 the rings being defined over a field extension of degree d. 4053 4054 If d<2 then @code{extcurve(d,CURVE);} creates a list L which 4055 is the update of the list CURVE with additional entries 3923 the rings being defined over a field extension of degree d. 3924 If d<2 then @code{extcurve(d,CURVE);} creates a list L which 3925 is the update of the list CURVE with additional entries 4056 3926 @format 4057 L[1][5]: 4058 L[2][3]: 3927 L[1][5]: ring p,(x,y,t),ls, 3928 L[2][3]: int (the number of places over the base field). 4059 3929 @end format 4060 4061 4062 3930 In both cases, in the ring L[1][5] lists with the data for all the 3931 rational places (after a field extension of degree d) are 3932 created (see @ref{Adj_div}): 4063 3933 @format 4064 3934 lists POINTS, LOC_EQS, BRANCHES, PARAMETRIZATIONS. 4065 3935 @end format 4066 4067 NOTE: The list CURVE should be the output of @code{NSplaces} and has 4068 to contain (at least) all places up to degree d. @* 4069 This procedure must be executed before constructing AG codes, 4070 even if no extension is needed. The ring L[1][4] must be active 4071 when constructing codes over the field extension.@* 4072 4073 SEE ALSO: closed_points, Adj_div, NSplaces, AGcode_L, AGcode_Omega 4074 4075 EXAMPLE: example extcurve; shows an example 3936 NOTE: The list CURVE should be the output of @code{NSplaces} and has 3937 to contain (at least) all places up to degree d. @* 3938 This procedure must be executed before constructing AG codes, 3939 even if no extension is needed. The ring L[1][4] must be active 3940 when constructing codes over the field extension.@* 3941 SEE ALSO: closed_points, Adj_div, NSplaces, AGcode_L, AGcode_Omega 3942 EXAMPLE: example extcurve; shows an example 4076 3943 " 4077 3944 { … … 4278 4145 printlevel=plevel; 4279 4146 } 4280 4147 /////////////////////////////////////////////////////////////////////////////// 4281 4148 4282 4149 // specific procedures for linear/AG codes 4283 4284 4150 4285 4151 static proc Hamming_wt (matrix A) … … 4308 4174 return(w); 4309 4175 } 4310 4176 /////////////////////////////////////////////////////////////////////////////// 4311 4177 4312 4178 // Basic Algorithm of Skorobogatov and Vladut for decoding AG codes … … 4314 4180 // the decoding since they will never be checked by the procedures 4315 4181 4316 4317 // ============================================================================4318 4319 4320 4182 proc prepSV (intvec G,intvec D,intvec F,list EC) 4321 "USAGE: prepSV( G, D, F, EC ), where G,D,F are intvec and EC is a list 4322 4323 RETURN: list E of size n+3, where n=size(D). All its entries but E[n+3] 4324 are matrices: 4183 "USAGE: prepSV( G, D, F, EC ); G,D,F intvecs and EC a list 4184 RETURN: list E of size n+3, where n=size(D). All its entries but E[n+3] 4185 are matrices: 4325 4186 @format 4326 4187 E[1]: parity check matrix for the current AG code 4327 4188 E[2] ... E[n+2]: matrices used in the procedure decodeSV 4328 4189 E[n+3]: intvec with 4329 E[n+3][1]: 4330 E[n+3][2]: 4190 E[n+3][1]: correction capacity @math{\epsilon} of the algorithm 4191 E[n+3][2]: designed Goppa distance @math{\delta} of the current AG code 4331 4192 @end format 4332 4333 NOTE: Computes the preprocessing for the basic (Skorobogatov-Vladut) 4334 decoding algorithm.@* 4335 The procedure must be called within the ring EC[1][4], 4336 where EC is the output of @code{extcurve(d)} (or within 4337 the ring EC[1][2] if d=1). @* 4338 The intvec G and F represent rational divisors (see 4339 @ref{BrillNoether} for more details).@* 4340 The intvec D refers to rational places (see @ref{AGcode_Omega} 4341 for more details.). 4342 The current AG code is @code{AGcode_Omega(G,D,EC)}.@* 4343 If you know the exact minimum distance d and you want to use it in 4344 @code{decodeSV} instead of @math{\delta}, you can change the value 4345 of E[n+3][2] to d before applying decodeSV. 4346 If you have a systematic encoding for the current code and want to 4347 keep it during the decoding, you must previously permute D (using 4348 @code{permute_L(D,P);}), e.g., according to the permutation 4349 P=L[3], L being the output of @code{sys_code}. 4350 4351 WARNINGS: F must be a divisor with support disjoint to the support of D and 4352 with degree @math{\epsilon + genus}, where 4353 @math{\epsilon:=[(deg(G)-3*genus+1)/2]}.@* 4354 G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is 4355 not checked by the algorithm. 4356 G and D should also have disjoint supports (checked by the 4357 algorithm). 4358 4359 KEYWORDS: SV-decoding algorithm, preprocessing 4360 4361 SEE ALSO: extcurve, AGcode_Omega, decodeSV, sys_code, permute_L 4362 4363 EXAMPLE: example prepSV; shows an example 4193 NOTE: Computes the preprocessing for the basic (Skorobogatov-Vladut) 4194 decoding algorithm.@* 4195 The procedure must be called within the ring EC[1][4], where EC is 4196 the output of @code{extcurve(d)} (or in the ring EC[1][2] if d=1) @* 4197 The intvec G and F represent rational divisors (see 4198 @ref{BrillNoether} for more details).@* 4199 The intvec D refers to rational places (see @ref{AGcode_Omega} 4200 for more details.). 4201 The current AG code is @code{AGcode_Omega(G,D,EC)}.@* 4202 If you know the exact minimum distance d and you want to use it in 4203 @code{decodeSV} instead of @math{\delta}, you can change the value 4204 of E[n+3][2] to d before applying decodeSV. 4205 If you have a systematic encoding for the current code and want to 4206 keep it during the decoding, you must previously permute D (using 4207 @code{permute_L(D,P);}), e.g., according to the permutation 4208 P=L[3], L being the output of @code{sys_code}. 4209 WARNINGS: F must be a divisor with support disjoint to the support of D and 4210 with degree @math{\epsilon + genus}, where 4211 @math{\epsilon:=[(deg(G)-3*genus+1)/2]}.@* 4212 G should satisfy @math{ 2*genus-2 < deg(G) < size(D) }, which is 4213 not checked by the algorithm. 4214 G and D should also have disjoint supports (checked by the 4215 algorithm). 4216 KEYWORDS: SV-decoding algorithm, preprocessing 4217 SEE ALSO: extcurve, AGcode_Omega, decodeSV, sys_code, permute_L 4218 EXAMPLE: example prepSV; shows an example 4364 4219 " 4365 4220 { … … 4437 4292 printlevel=plevel; 4438 4293 } 4439 4440 4441 // ============================================================================ 4442 4294 /////////////////////////////////////////////////////////////////////////////// 4443 4295 4444 4296 proc decodeSV (matrix y,list K) 4445 "USAGE: decodeSV( y, K ), where y is a row-matrix and K is a list 4446 4297 "USAGE: decodeSV( y, K ); y a row-matrix and K a list 4447 4298 RETURN: a codeword (row-matrix) if possible, resp. the 0-matrix (of size 4448 4299 1) if decoding is impossible. 4449 4300 For decoding the basic (Skorobogatov-Vladut) decoding algorithm 4450 4301 is applied. 4451 4452 4302 NOTE: The list_expression should be the output K of the procedure 4453 4303 @code{prepSV}.@* … … 4456 4306 The decoding may fail if the number of errors is greater than 4457 4307 the correction capacity of the algorithm. 4458 4459 4308 KEYWORDS: SV-decoding algorithm 4460 4461 4309 SEE ALSO: extcurve, AGcode_Omega, prepSV 4462 4463 4310 EXAMPLE: example decodeSV; shows an example 4464 4311 " … … 4596 4443 printlevel=plevel; 4597 4444 } 4598 4599 4600 // ============================================================================ 4601 4445 /////////////////////////////////////////////////////////////////////////////// 4602 4446 4603 4447 proc sys_code (matrix C) 4604 "USAGE: sys_code(C) where C is a matrix of constants 4605 4606 RETURN: list L with: 4448 "USAGE: sys_code(C); C is a matrix of constants 4449 RETURN: list L with: 4607 4450 @format 4608 4451 L[1] is the generator matrix in standard form of an equivalent code, … … 4610 4453 L[3] is an intvec which represents the needed permutation. 4611 4454 @end format 4612 4613 NOTE: Computes a systematic code which is equivalent to the given one.@* 4614 The input should be a matrix of numbers.@* 4615 The output has to be interpreted as follows: if the input was 4616 the generator matrix of an AG code then one should apply the 4617 permutation L[3] to the divisor D of rational points by means 4618 of @code{permute_L(D,L[3]);} before continuing to work with the 4619 code (for instance, if you want to use the systematic encoding 4620 together with a decoding algorithm). 4621 4622 KEYWORDS: linear code, systematic 4623 4624 SEE ALSO: permute_L, AGcode_Omega, prepSV 4625 4626 EXAMPLE: example sys_code; shows an example 4455 NOTE: Computes a systematic code which is equivalent to the given one.@* 4456 The input should be a matrix of numbers.@* 4457 The output has to be interpreted as follows: if the input was 4458 the generator matrix of an AG code then one should apply the 4459 permutation L[3] to the divisor D of rational points by means 4460 of @code{permute_L(D,L[3]);} before continuing to work with the 4461 code (for instance, if you want to use the systematic encoding 4462 together with a decoding algorithm). 4463 KEYWORDS: linear code, systematic 4464 SEE ALSO: permute_L, AGcode_Omega, prepSV 4465 EXAMPLE: example sys_code; shows an example 4627 4466 " 4628 4467 { … … 4760 4599 print(L[1]*transpose(L[2])); 4761 4600 } 4762 4601 /////////////////////////////////////////////////////////////////////////////// 4763 4602 4764 4603 /* 4765 4766 4767 4604 // ============================================================================ 4768 4605 // ******* ADDITIONAL INFORMATION ABOUT THE LIBRARY ******** 4769 4606 // ============================================================================ 4770 4607 4771 4772 4608 A SINGULAR library for plane curves, Weierstrass semigroups and AG codes 4773 4609 Also available via http://wmatem.eis.uva.es/~ignfar/singular/ 4774 4775 4610 4776 4611 PREVIOUS WARNINGS : … … 4787 4622 (3) The curve must be absolutely irreducible (but it is not checked) 4788 4623 (4) Only (algebraic projective) plane curves are considered 4789 4790 4624 4791 4625 GENERAL CONCEPTS : … … 4809 4643 in form of ideals with two homogeneous generators 4810 4644 4811 4812 4645 OUTLINE/EXAMPLE OF THE USE OF THE LIBRARY : 4813 4646 … … 4939 4772 } 4940 4773 4941 4942 4774 // **** Other interesting examples : 4943 4775 … … 4954 4786 CURVE=extcurve(6,CURVE); 4955 4787 4956 4957 4788 */ 4958 4959 4960 4789 ; -
Singular/LIB/classify.lib
r5a1141 r4ac997 1 e// $Id: classify.lib,v 1.44 2000-12-19 15:05:17 anne Exp $ 2 // KK, last modified: 04.04.1998 3 /////////////////////////////////////////////////////////////////////////////// 4 5 version = "$Id: classify.lib,v 1.44 2000-12-19 15:05:17 anne Exp $"; 1 // KK,GMG last modified: 17.12.00 2 /////////////////////////////////////////////////////////////////////////////// 3 version = "$Id: classify.lib,v 1.45 2000-12-22 13:39:53 greuel Exp $"; 6 4 category="Singularities"; 7 5 info=" 8 LIBRARY: classify.lib Procedures for the Arnold-Classifier of Singularities 6 LIBRARY: classify.lib Arnold Classifier of Singularties 7 AUTHOR: Kai Krueger, krueger@mathematik.uni-kl.de 9 8 10 9 OVERVIEW: 11 10 A library for classifying isolated hypersurface singularities w.r.t. right 12 11 equivalence, based on the determinator of singularities by V.I. Arnold. 13 14 AUTHOR:15 Kai Krueger, krueger@mathematik.uni-kl.de16 12 17 13 PROCEDURES: -
Singular/LIB/deform.lib
r5a1141 r4ac997 1 // $Id: deform.lib,v 1.2 2 2000-12-19 15:05:19 anneExp $1 // $Id: deform.lib,v 1.23 2000-12-22 13:41:22 greuel Exp $ 2 2 // author: Bernd Martin email: martin@math.tu-cottbus.de 3 3 //(bm, last modified 4/98) 4 4 /////////////////////////////////////////////////////////////////////////////// 5 version="$Id: deform.lib,v 1.2 2 2000-12-19 15:05:19 anneExp $";5 version="$Id: deform.lib,v 1.23 2000-12-22 13:41:22 greuel Exp $"; 6 6 category="Singularities"; 7 7 info=" 8 LIBRARY: deform.lib PROCEDURES FOR COMPUTING MINIVERSAL DEFORMATION 9 10 AUTHOR: Bernd Martin, email: martin@math.tu-cottbus.de 8 LIBRARY: deform.lib Miniversal Deformation of Singularities and Modules 9 AUTHOR: Bernd Martin, email: martin@math.tu-cottbus.de 11 10 12 11 PROCEDURES: … … 17 16 kill_rings([\"prefix\"]) kills the exported rings from above 18 17 "; 19 /////////////////////////////////////////////////////////////////////////////// 18 20 19 LIB "inout.lib"; 21 20 LIB "general.lib"; … … 24 23 LIB "sing.lib"; 25 24 /////////////////////////////////////////////////////////////////////////////// 25 26 26 proc versal (ideal Fo,list #) 27 27 "USAGE: versal(Fo[,d,any]); Fo=ideal, d=int, any=list … … 179 179 Cup = jet(Cup,@d,@jv); 180 180 } 181 //------- express obstructions in kbase of T_2 ------------------------------- -181 //------- express obstructions in kbase of T_2 ------------------------------- 182 182 if ( @noObstr==0 ) 183 183 { Cup' = reduce(Cup,PreO'); … … 294 294 } 295 295 /////////////////////////////////////////////////////////////////////////////// 296 296 297 proc mod_versal(matrix Mo, ideal I, list #) 297 " 298 USAGE: mod_versal(Mo,I[,d,any]); I=ideal, M=module, d=int, any =list 298 "USAGE: mod_versal(Mo,I[,d,any]); I=ideal, M=module, d=int, any =list 299 299 COMUPTE: miniversal deformation of coker(Mo) over Qo=Po/Io, Po=basering; 300 300 CREATE: Ringsr (exported): … … 545 545 kill Px,Qx,So; 546 546 } 547 //=============================================================================548 547 /////////////////////////////////////////////////////////////////////////////// 549 548 proc kill_rings(list #) … … 641 640 return(iv,M1,kb1,lift1,L'); 642 641 } 643 ////////////////////////////////////////////////////////////////////////////// 642 /////////////////////////////////////////////////////////////////////////////// 644 643 proc get_rings(ideal Io,int e1,int switch, list #) 645 644 " … … 678 677 return(); 679 678 } 680 ////////////////////////////////////////////////////////////////////////////// 679 /////////////////////////////////////////////////////////////////////////////// 681 680 proc get_inf_def(list #) 682 681 " … … 705 704 ////////////////////////////////////////////////////////////////////////////// 706 705 proc lift_rel_kb (module N, module M, list #) 707 " 708 USAGE: lift_rel_kb(N,M[,kbaseM,p]); 706 "USAGE: lift_rel_kb(N,M[,kbaseM,p]); 709 707 ASSUME: [p a monomial ] or the product of all variables 710 N, M modules of same rank, 711 M depending only on variables not in p and vdim(M)finite in this ring,708 N, M modules of same rank, M depending only on variables not in p 709 and vdim(M) is finite in this ring, 712 710 [ kbaseM the kbase of M in the subring given by variables not in p ] 713 warning: check that these assumtions are fulfilled!711 warning: these assumtions are not checked by the procedure 714 712 RETURN: matrix A, whose j-th columnes present the coeff's of N[j] in kbaseM, 715 713 i.e. kbaseM*A = reduce(N,std(M)) … … 882 880 return(degA); 883 881 } 884 /////////////////////////////////////////////////////////////////////////////// ///882 /////////////////////////////////////////////////////////////////////////////// 885 883 proc homog_test(intvec w_vec, matrix Mo, matrix A) 886 884 " … … 920 918 return(@nv); 921 919 } 922 /////////////////////////////////////////////////////////////////////////////// ///920 /////////////////////////////////////////////////////////////////////////////// 923 921 proc homog_t(intvec d_vec, matrix Fo, matrix A) 924 922 " … … 951 949 return(dv); 952 950 } 953 951 /////////////////////////////////////////////////////////////////////////////// -
Singular/LIB/elim.lib
r5a1141 r4ac997 1 // $Id: elim.lib,v 1.1 0 2000-12-19 14:41:42 anneExp $1 // $Id: elim.lib,v 1.11 2000-12-22 13:42:34 greuel Exp $ 2 2 // (GMG, last modified 22.06.96) 3 3 /////////////////////////////////////////////////////////////////////////////// 4 5 version="$Id: elim.lib,v 1.10 2000-12-19 14:41:42 anne Exp $"; 4 version="$Id: elim.lib,v 1.11 2000-12-22 13:42:34 greuel Exp $"; 6 5 category="Commutative Algebra"; 7 6 info=" 8 LIBRARY: elim.lib PROCEDURES FOR ELIMINATIOM, SATURATION AND BLOWING UP7 LIBRARY: elim.lib Elimination, Saturation and Blowing up 9 8 10 9 PROCEDURES: … … 142 141 143 142 proc elim1 (id, poly vars) 144 "USAGE: elim1(id,p oly); id ideal/module, poly=product of vars to be eliminated143 "USAGE: elim1(id,p); id ideal/module, p product of vars to be eliminated 145 144 RETURN: ideal/module obtained from id by eliminating vars occuring in poly 146 145 NOTE: no special monomial ordering is required, result is a SB with -
Singular/LIB/equising.lib
r5a1141 r4ac997 1 // $Id: equising.lib,v 1.3 2000-12-19 15:05:20 anne Exp $ 1 version="$Id: equising.lib,v 1.4 2000-12-22 13:43:10 greuel Exp $"; 2 2 category="Singularities"; 3 3 info=" 4 LIBRARY: Equising.lib PROCEDURES FOR EQUISINGULARITY STRATA 5 4 LIBRARY: equising.lib EQUISINGULARITY STRATUM OF A FAMILY OF PLANE CURVES 6 5 AUTHOR: Andrea Mindnich, e-mail:mindnich@mathematik.uni-kl.de 6 7 7 PROCEDURES: 8 8 esStratum computes the equisingularity stratum of a deformation 9 isEquising tests, ifa given deformation is equisingular9 isEquising tests, whether a given deformation is equisingular 10 10 " 11 11 … … 14 14 LIB "hnoether.lib"; 15 15 16 17 /////////////////////////////////////////////////////////////////////////////// 18 /////////////////////////////////////////////////////////////////////////////// 19 20 16 /////////////////////////////////////////////////////////////////////////////// 21 17 // COMPUTES a weight vector. x and y get weight 1 and all other 22 18 // variables get weight 0. … … 29 25 return (iv); 30 26 } 31 32 33 /////////////////////////////////////////////////////////////////////////////// 34 35 27 /////////////////////////////////////////////////////////////////////////////// 36 28 // exchanges the variables x and y in the polynomial p_f 37 29 static proc swapXY(poly f) … … 45 37 return (f); 46 38 } 47 48 49 /////////////////////////////////////////////////////////////////////////////// 50 51 39 /////////////////////////////////////////////////////////////////////////////// 52 40 // ASSUME: p_mon is a monomial 53 41 // and p_g is the product of the variables in p_mon. … … 70 58 return (p_c); 71 59 } 72 73 74 /////////////////////////////////////////////////////////////////////////////// 75 76 60 /////////////////////////////////////////////////////////////////////////////// 77 61 // in p_F the variable p_vari is substituted by the polynomial p_g. 78 62 static proc eSubst(poly p_F, poly p_vari, poly p_g) … … 91 75 return (p_F); 92 76 } 93 94 95 /////////////////////////////////////////////////////////////////////////////// 96 97 77 /////////////////////////////////////////////////////////////////////////////// 98 78 // All ring variables of p_F which occur in (the set of generators of) the 99 79 // ideal Id, are substituted by 0 … … 131 111 return(error); 132 112 } 133 134 /////////////////////////////////////////////////////////////////////////////// 135 136 113 /////////////////////////////////////////////////////////////////////////////// 137 114 static proc getInput (list #) 138 115 { … … 156 133 return(maxStep); 157 134 } 158 159 160 135 ////////////////////////////////////////////////////////////////////////////// 161 162 163 136 // RETURNS: 0, if the ideal cond only depends on the deformation parameters 164 137 // 1, otherwise. … … 186 159 187 160 /////////////////////////////////////////////////////////////////////////////// 188 189 190 161 // COMPUTES string(minpoly) and substitutes the parameter by newParName 191 162 static proc makeMinPolyString (string newParName) … … 218 189 219 190 /////////////////////////////////////////////////////////////////////////////// 220 221 222 191 // Defines a new ring without deformation-parameters. 223 192 static proc createHNERing() … … 234 203 keepring(HNERing); 235 204 } 236 237 238 /////////////////////////////////////////////////////////////////////////////// 239 240 205 /////////////////////////////////////////////////////////////////////////////// 241 206 // RETURNS: 1, if p_f = 0 or char(basering) divides the order of p_f 242 207 // or p_f is not squarefree. … … 271 236 return(0); 272 237 } 273 274 275 /////////////////////////////////////////////////////////////////////////////// 276 277 238 /////////////////////////////////////////////////////////////////////////////// 278 239 // COMPUTES the multiplicity sequence of p_f 279 240 static proc calcMultSequence (poly p_f) … … 321 282 return(multSeq, xNotTransversal, fIrreducible); 322 283 } 323 324 325 /////////////////////////////////////////////////////////////////////////////// 326 327 284 /////////////////////////////////////////////////////////////////////////////// 328 285 // ASSUME: The basering is no qring and has at least 3 variables 329 286 // DEFINES: A new basering, "myRing", … … 406 363 } 407 364 408 409 365 /////////////////////////////////////////////////////////////////////////////// 410 366 /////////// procedures to compute the equisingularity stratum ///////////////// 411 367 /////////////////////////////////////////////////////////////////////////////// 412 413 414 368 // DEFINES a new basering, myRing, which has one variable 415 369 // more than the old ring. … … 463 417 keepring(myRing); 464 418 } 465 466 467 /////////////////////////////////////////////////////////////////////////////// 468 469 419 /////////////////////////////////////////////////////////////////////////////// 470 420 // COMPUTES an ideal equimultCond, such that F_(n-1) mod equimultCond =0, 471 421 // where F_(n-1) is the (nNew-1)-jet of p_F with respect to x,y. … … 494 444 return(equimultCond, p_F); 495 445 } 496 497 498 /////////////////////////////////////////////////////////////////////////////// 499 500 446 /////////////////////////////////////////////////////////////////////////////// 501 447 // COMPUTES smallest integer >= nNew/nOld -1 502 448 static proc calcNZeroSteps (int nOld,int nNew) … … 516 462 return(nZeroSteps); 517 463 } 518 519 520 /////////////////////////////////////////////////////////////////////////////// 521 522 464 /////////////////////////////////////////////////////////////////////////////// 523 465 // ASSUME: ord_(X,Y)(F)=nNew 524 466 // COMPUTES an ideal I such that (p_F mod I)_nNew = p_c*y^nNew. … … 550 492 return(id_help, p_F, p_c); 551 493 } 552 553 554 /////////////////////////////////////////////////////////////////////////////// 555 556 494 /////////////////////////////////////////////////////////////////////////////// 557 495 // ASSUME: ord_(X,Y)(F)=nNew 558 496 // COMPUTES an ideal I such that p_Fn mod I = p_c*(y-p_a*x)^nNew, … … 632 570 return(id_help, HCond, p_F, p_c, p_a); 633 571 } 634 635 636 /////////////////////////////////////////////////////////////////////////////// 637 638 572 /////////////////////////////////////////////////////////////////////////////// 639 573 // eliminates the variables H(1),..,H(nHelpV) from the ideal ES + HCond 640 574 static proc helpVarElim(ideal ES, ideal HCond, int nHelpV) … … 646 580 return(ES); 647 581 } 648 649 650 /////////////////////////////////////////////////////////////////////////////// 651 652 582 /////////////////////////////////////////////////////////////////////////////// 653 583 // ASSUME: ord(F)=nNew and p_c(y-p_a*x)^n is the nNew-jet of F with respect 654 584 // to X,Y … … 674 604 return (p_F); 675 605 } 676 677 678 /////////////////////////////////////////////////////////////////////////////// 679 680 606 /////////////////////////////////////////////////////////////////////////////// 681 607 // ASSUME: p_F in K[t(1)..t(s),x,y] 682 608 // COMPUTES the minimal ideal ES, such that the deformation p_F mod ES is … … 822 748 } 823 749 824 825 // /////////////////////////////////////////////////////////////////////////////826 750 /////////////////////////////////////////////////////////////////////////////// 751 // main procedure 752 /////////////////////////////////////////////////////////////////////////////// 827 753 828 754 proc esStratum (poly p_F, list #) … … 933 859 934 860 /////////////////////////////////////////////////////////////////////////////// 935 //////////////////// procedures for equisingularity test/////////////////////// 936 /////////////////////////////////////////////////////////////////////////////// 937 938 861 // procedures for equisingularity test 862 /////////////////////////////////////////////////////////////////////////////// 939 863 940 864 // DEFINES a new basering, myRing, which has one variable … … 983 907 keepring(myRing); 984 908 } 985 986 987 /////////////////////////////////////////////////////////////////////////////// 988 989 909 /////////////////////////////////////////////////////////////////////////////// 990 910 // tests, if ord p_F = nNew. 991 911 static proc equimultTest (poly p_F, int nHelpV, int nNew, ideal HCond) … … 1018 938 return(1, p_F); 1019 939 } 1020 1021 1022 /////////////////////////////////////////////////////////////////////////////// 1023 1024 940 /////////////////////////////////////////////////////////////////////////////// 1025 941 // ASSUME: ord(p_F)=nNew 1026 942 // tests, if p_F = p_c*y^nNew for some p_c. … … 1055 971 return(1, p_c); 1056 972 } 1057 1058 1059 /////////////////////////////////////////////////////////////////////////////// 1060 1061 973 /////////////////////////////////////////////////////////////////////////////// 1062 974 // ASSUME: ord(p_F)=nNew 1063 975 // tests, if p_F = p_c*(y - p_a*x)^nNew for some p_a, p_c. … … 1106 1018 return(1, p_F, p_c, p_a, HCond); 1107 1019 } 1108 1109 1110 1020 ////////////////////////////////////////////////////////////////////////////// 1111 1112 1113 1021 // eliminates the variables H(1),..,H(nHelpV) from the ideal ES + HCond 1114 1022 static proc T_helpVarElim(ideal ES, ideal HCond, int nHelpV) … … 1162 1070 } 1163 1071 /////////////////////////////////////////////////////////////////////////////// 1164 1165 1166 1072 // ASSUME: F in K[t(1)..t(s),x,y], 1167 1073 // the ringordering is ds … … 1251 1157 return(1); 1252 1158 } 1253 1254 /////////////////////////////////////////////////////////////////////////////// 1255 1159 /////////////////////////////////////////////////////////////////////////////// 1256 1160 1257 1161 proc isEquising (poly p_F, list #) … … 1349 1253 isEquising(F,2); 1350 1254 } 1351 1255 /////////////////////////////////////////////////////////////////////////////// 1256 /* 1257 Weiter Beispiele aus Dipl. von A. Mindnich einfuegen 1258 */
Note: See TracChangeset
for help on using the changeset viewer.