Changeset f90180 in git
- Timestamp:
- Apr 20, 2015, 11:01:28 AM (8 years ago)
- Branches:
- (u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
- Children:
- 9fce789c50beb6e5e309f48b6b7f2ce7e57597ae
- Parents:
- f52bd59412a399cb6c4ca21c965dd68c19aa5def
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/classify.lib
rf52bd59 rf90180 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="version classify.lib 4.0. 0.0 Jun_2013"; // $Id$2 version="version classify.lib 4.0.2.0 Apr_2015 "; // $Id$ 3 3 category="Singularities"; 4 4 info=" … … 46 46 link l="DBM:r NFlist"; 47 47 s = read(l,"VERSION"); 48 if (s == "" ) { 48 if (s == "" ) 49 { 49 50 if (printlevel > 0) 50 51 { … … 101 102 102 103 v = Klassifiziere(conv_ext2top(f_in)); 103 if(typeof(v[1])=="poly") { 104 if(typeof(v[1])=="poly") 105 { 104 106 poly f_out = v[1]; 105 107 s2 = v[2]; // s2: Typ des Polynoms f z.b: E[18] 106 108 corank = v[3]; 107 109 } 108 else { 110 else 111 { 109 112 s2="NoClass"; 110 113 } 111 114 112 115 //---------------- collect results and create return-value -------------------- 113 if( s2=="error!" || s2=="NoClass") { 116 if( s2=="error!" || s2=="NoClass") 117 { 114 118 setring ring_ext; 115 119 return(f_in); 116 120 } 117 121 118 if(show_nf==1) { 122 if(show_nf==1) 123 { 119 124 poly f_nf = normalform(s2); 120 125 for(i=corank+1;i<=n;i=i+1) { f_nf = f_nf + x(i)^2; } … … 233 238 234 239 //-------------------- apply morsesplit if n>corank --------------------------- 235 if( n > corank) { 240 if( n > corank) 241 { 236 242 debug_log(0, 237 243 "I have to apply the splitting lemma. This will take some time....:-)"); … … 256 262 setring ring_rest; 257 263 } 258 else { 264 else 265 { 259 266 ring ring_rest=char(basering),(x(1..corank)),(c,ds); 260 267 map PhiG=ring_top,maxideal(1); … … 266 273 cstn[4] = phi; 267 274 if(corank == 2) { v_class = Funktion3(G, cstn); } 268 else { 275 else 276 { 269 277 if(corank == 3) { v_class = Funktion50(G, cstn); } 270 278 else { v_class = printresult(1, f, "error!", cstn, -1); } 271 279 } 272 280 //-------------------------- classification done ------------------------------ 273 if(typeof(v_class[1])!="poly") { 274 return(v); 275 } 281 if(typeof(v_class[1])!="poly") { return(v); } 276 282 poly f_result = v_class[1]; 277 283 v[2] = v_class[2]; … … 304 310 Mult = mult(Jf); 305 311 Mu = cstn[2]; 306 if(Dim == 1) { 312 if(Dim == 1) 313 { 307 314 if( Mult == 1) { return(printresult(5,f,"D["+string(Mu)+"]", cstn, 0)); } 308 315 if( Mult == 2) { return(Funktion6(f, cstn));} // series E,J … … 343 350 344 351 //---------------------------- begin of loop ---------------------------------- 345 while( (6*k) <= Mu ) { 352 while( (6*k) <= Mu ) 353 { 346 354 JetId = x(1)^3+x(2)^(3*k); 347 355 fk = jet(f, 3*k, weight(JetId)); 348 356 //--------------------------- step 6(k) --------------------------------- 349 if( fk == Coeff(fk,x(1), x(1)^3)*x(1)^3 ) { 357 if( fk == Coeff(fk,x(1), x(1)^3)*x(1)^3 ) 358 { 350 359 JetId = x(1)^3+x(2)^(3*k+1); // check jet x3,y3k+1 : E[6k] 351 360 fk = jet(f, 3*(3*k+1), weight(JetId)); 352 if( Coeff(fk,x(2),x(2)^(3*k+1)) != 0 ) { 361 if( Coeff(fk,x(2),x(2)^(3*k+1)) != 0 ) 362 { 353 363 return(printresult(7, f, "E["+string(6*k)+"]", cstn, k-1)); 354 364 } … … 356 366 JetId = x(1)^3+x(1)*x(2)^(2*k+1); // check jet x3,xy2k+1 : E[6k+1] 357 367 fk = jet(f, 3*(2*k+1), weight(JetId)); 358 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(2*k+1)) != 0 ) { 368 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(2*k+1)) != 0 ) 369 { 359 370 return(printresult(8, f,"E["+string(6*k+1)+"]", cstn, k-1)); 360 371 } … … 362 373 JetId = x(1)^3+x(2)^(3*k+2); // check jet x3,y3k+1 : E[6k+2] 363 374 fk = jet(f, 3*(3*k+2), weight(JetId)); 364 if( Coeff(fk,x(2),x(2)^(3*k+2)) != 0 ) { 375 if( Coeff(fk,x(2),x(2)^(3*k+2)) != 0 ) 376 { 365 377 return(printresult(9, f,"E["+string(6*k+2)+"]", cstn, k-1)); 366 378 } … … 375 387 if(Dim==0) { return(printresult(11,f,"J["+string(k)+",0]",cstn,k-1)); } 376 388 Mult = mult(Jf); 377 if( Dim ==1 && Mult==1) { 389 if( Dim ==1 && Mult==1) 390 { 378 391 return(printresult(12,f,"J["+string(k)+","+string(Mu - 6*k +2)+"]", 379 392 cstn, k-1)); 380 393 } 381 if( Dim == 1 && Mult == 2) { 382 if(Coeff(fk, x(2), x(2)^(3*k)) != 0) { 394 if( Dim == 1 && Mult == 2) 395 { 396 if(Coeff(fk, x(2), x(2)^(3*k)) != 0) 397 { 383 398 v = Faktorisiere(f, fk, 3, k, RFlg); 384 399 f = v[1]; … … 413 428 if(Dim==0) { return(printresult(14,f,"X[9] = X[1,0] = T[2,4,4]",cstn,1)); } 414 429 Mult = mult(Jf); 415 if( Dim == 1) { 416 if( Mult == 1 ) { 430 if( Dim == 1) 431 { 432 if( Mult == 1 ) 433 { 417 434 return(printresult(15, f, 418 435 "X[1,"+string(Mu-9)+"] = T[2,4,"+string(Mu-5)+"]", cstn, 1)); 419 436 } 420 if( Mult == 2 ) { 437 if( Mult == 2 ) 438 { 421 439 Jf = Jf, jacob(Jf); 422 440 Jf = std(Jf); … … 449 467 450 468 //---------------------------- begin of loop ---------------------------------- 451 while( 3*p<= Mu) { 469 while( 3*p<= Mu) 470 { 452 471 debug_log(1, " Step 18("+string(p)+")"); 453 472 v = Isomorphie_s17(f, fk, p, 1); … … 456 475 cstn[4] = PhiG; 457 476 458 if ( p>1) { 477 if ( p>1) 478 { 459 479 JetId = x(1)^3*x(2) + x(2)^(3*p); 460 480 fk = jet(f, 3*p, weight(JetId)); … … 463 483 JetId = x(1)^3*x(2) + x(2)^(3*p+2); // check jet x3y,y3k+2 : Z[6p+5] 464 484 fk = jet(f, 3*(3*p+2), weight(JetId)); 465 if( Coeff(fk, x(2), x(2)^(3*p+2)) != 0) { 485 if( Coeff(fk, x(2), x(2)^(3*p+2)) != 0) 486 { 466 487 return(printresult(19,f, "Z["+string(6*p+5)+"]", cstn, p)); 467 488 } … … 469 490 JetId = x(1)^3*x(2)+x(1)*x(2)^(2*p+2); // check jet x3y,xy2k+2 : Z[6p+6] 470 491 fk = jet(f, 2*(3*p+2)+1, weight(JetId)); 471 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(2*p+2)) != 0) { 492 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(2*p+2)) != 0) 493 { 472 494 return(printresult(20, f, "Z["+string(6*p+6)+"]", cstn, p)); 473 495 } … … 475 497 JetId = x(1)^3*x(2) + x(2)^(3*p+3); // check jet x3y,y3k+3 : Z[6p+7] 476 498 fk = jet(f, 3*(3*p+3), weight(JetId)); 477 if( Coeff(fk, x(2), x(2)^(3*p+3)) != 0) { 499 if( Coeff(fk, x(2), x(2)^(3*p+3)) != 0) 500 { 478 501 return(printresult(21, f, "Z["+string(6*p+7)+"]", cstn, p)); 479 502 } … … 488 511 Mult = mult(Jf); 489 512 if(Dim==0) { return(printresult(23,f,"Z["+string(p-1)+",0]", cstn, p)); } 490 if( Mult == 1 ) { 513 if( Mult == 1 ) 514 { 491 515 return(printresult(24, f, "Z["+string(p-1)+","+string(Mu-3-6*p)+"]", 492 516 cstn, p)); … … 517 541 518 542 //---------------------------- begin of loop ---------------------------------- 519 while (k<Mu) { 543 while (k<Mu) 544 { 520 545 v = Faktorisiere(f, fk, 4 , k, RFlg); 521 546 f, Phi = v[1..2]; … … 526 551 JetId = x(1)^4 + x(2)^(4*k+1); // check jet x4,y4k+1 : W[12k] 527 552 fk = jet(f, 4*(4*k+1), weight(JetId)); 528 if( Coeff(fk, x(2), x(2)^(4*k+1)) != 0) { 553 if( Coeff(fk, x(2), x(2)^(4*k+1)) != 0) 554 { 529 555 return(printresult(27, f, "W["+string(12*k)+"]", cstn, 3*k-2)); 530 556 } … … 532 558 JetId = x(1)^4 + x(1)*x(2)^(3*k+1); // check jet x4,xy3k+1 : W[12k+1] 533 559 fk = jet(f, 4*(3*k+1), weight(JetId)); 534 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(3*k+1)) != 0) { 560 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(3*k+1)) != 0) 561 { 535 562 return(printresult(28, f, "W["+string(12*k+1)+"]", cstn, 3*k-2)); 536 563 } … … 539 566 JetId = x(1)^4 + x(2)^(4*k+2); 540 567 fk = jet(f, 2*(4*k+2), weight(JetId)); 541 if( Coeff(fk, x(2), x(2)^(4*k+2)) != 0) { 568 if( Coeff(fk, x(2), x(2)^(4*k+2)) != 0) 569 { 542 570 Jf = std(jacob(fk)); 543 571 Dim = dim(Jf); 544 572 if(Dim==0) {return(printresult(30,f,"W["+string(k)+",0]",cstn,3*k-1));} 545 if(Dim==1) { 573 if(Dim==1) 574 { 546 575 return(printresult(32, f, 547 576 "W#["+string(k)+","+string(Mu-12*k-3)+"]", cstn, 3*k-1)); … … 549 578 return(printresult(29, f, "error!", cstn, -1)); 550 579 } 551 else { 580 else 581 { 552 582 // x^4 oder x^2(x^2+x(2)^2k+1) 553 583 ft = Teile(fk, x(1)^2); 554 584 Jf = std(jacob(ft)); 555 585 Dim = dim(Jf); 556 if( Dim == 0 ) { 586 if( Dim == 0 ) 587 { 557 588 return(printresult(31, f, "W["+string(k)+","+string(Mu-12*k-3)+"]", 558 589 cstn, 3*k-1)); … … 563 594 JetId = x(1)^4 + x(1)*x(2)^(3*k+2); // check jet x4,xy3k+2 : W[12k+5] 564 595 fk = jet(f, 4*(3*k+2), weight(JetId)); 565 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(3*k+2)) != 0) { 596 if( Coeff(fk, x(1)*x(2), x(1)*x(2)^(3*k+2)) != 0) 597 { 566 598 return(printresult(34, f,"W["+string(12*k+5)+"]", cstn, 3*k-1)); 567 599 } … … 569 601 JetId = x(1)^4 + x(2)^(4*k+3); // check jet x4,y4k+3 : W[12k+6] 570 602 fk = jet(f, 4*(4*k+3), weight(JetId)); 571 if( Coeff(fk, x(2), x(2)^(4*k+3)) != 0){ 603 if( Coeff(fk, x(2), x(2)^(4*k+3)) != 0) 604 { 572 605 return(printresult(35, f,"W["+string(12*k+6)+"]", cstn, 3*k-1)); 573 606 } … … 581 614 Mult = mult(Jf); 582 615 if(Dim==0) {return(printresult(37,f,"X["+string(k)+",0]",cstn,3*k-1));} 583 if(Dim==1) { 584 if(Mult==1) { 616 if(Dim==1) 617 { 618 if(Mult==1) 619 { 585 620 return(printresult(38, f,"X["+string(k)+","+string(Mu-12*k+3)+"]", 586 621 cstn, 3*k-1)); 587 622 } 588 if(Mult==2) { 623 if(Mult==2) 624 { 589 625 ft = Teile(fk, x(1)^2); 590 626 Jf = std(jacob(ft)); 591 627 Dim = dim(Jf); 592 628 if( Dim == 0) { return(Funktion40(f, cstn, k)); } 593 if( Dim == 1) { 629 if( Dim == 1) 630 { 594 631 return(printresult(39, f, "Y["+string(k)+",r,s]", cstn,3*k-1)); 595 632 } 596 633 } 597 if(Mult!=3) { 634 if(Mult!=3) 635 { 598 636 return(printresult(36, f, "error!", cstn, -1)); } 599 637 } … … 638 676 r = kr-k; 639 677 setring ring_top; 640 if( Typ == "E[6k]" ) { 678 if( Typ == "E[6k]" ) 679 { 641 680 return(printresult(42, f, "Z["+string(k)+","+string(12*k+6*r-1)+"]", 642 681 cstn, 3*k+r-2)); 643 682 } 644 if( Typ == "E[6k+1]" ) { 683 if( Typ == "E[6k+1]" ) 684 { 645 685 return(printresult(43, f, "Z["+string(k)+","+string(12*k+6*r)+"]", 646 686 cstn, 3*k+r-2)); 647 687 } 648 if( Typ == "E[6k+2]" ) { 688 if( Typ == "E[6k+2]" ) 689 { 649 690 return(printresult(44, f, "Z["+string(k)+","+string(12*k+6*r+1)+"]", 650 691 cstn, 3*k+r-2)); 651 692 } 652 if( Typ == "J[k,0]" ) { 693 if( Typ == "J[k,0]" ) 694 { 653 695 return(printresult(45, f, "Z["+string(k)+","+string(r)+",0]", 654 696 cstn, 3*k+r-2)); 655 697 } 656 if( Typ == "J[k,r]" ) { 698 if( Typ == "J[k,r]" ) 699 { 657 700 return(printresult(46,f,"Z["+string(k)+","+string(r)+","+string(rr)+"]", 658 701 cstn, 3*k+r-2)); … … 681 724 Mu = cstn[2]; 682 725 683 if(Dim == 0) { 726 if(Dim == 0) 727 { 684 728 return(printresult(51, f, "P[8] = T[3,3,3]", cstn, 1)); 685 729 } // x3 + y3 + z3 + axyz 686 if(Dim == 1) { 687 if (Mult == 1) { 730 if(Dim == 1) 731 { 732 if (Mult == 1) 733 { 688 734 return(printresult(52, f,"P["+string(Mu)+"] = T[3,3,"+string(Mu-5)+"]", 689 735 cstn, 1)); 690 736 } // x3 + y3 + xyz 691 if(Mult == 2) { 737 if(Mult == 2) 738 { 692 739 Jf2 = wedge(jacob(Jf1),3-Dim), Jf1; 693 740 Jf2 = std(Jf2); … … 696 743 if (Dim==1) { return(Funktion58(f, cstn)); } // x3 + yz2 697 744 } 698 if(Mult == 3) { 745 if(Mult == 3) 746 { 699 747 Jf2 = wedge(jacob(Jf1),3-Dim), Jf1; 700 748 Jf2 = std(Jf2); … … 705 753 if(Mult == 4) { return(Funktion82(f, cstn)); } // x3 + xz2 706 754 } 707 if(Dim == 2) { 755 if(Dim == 2) 756 { 708 757 if(Mult == 1) { return(Funktion97(f, cstn)); } // x2y 709 758 if(Mult == 2) { return(printresult(103,f,"NoClass", cstn, -1));} … … 758 807 759 808 debug_log(6, "f3,s1=", Show(f3)); 760 if( b1 != 0) { 809 if( b1 != 0) 810 { 761 811 VERT=ring_top,-1*b1*x(1), -1*b2*x(1)+x(2), -1*b3*x(1) + x(3); 762 812 kx=1; ky=2; kz=3; 763 813 } 764 else { 765 if( b2 != 0) { 814 else 815 { 816 if( b2 != 0) 817 { 766 818 VERT=ring_top, x(1) + -1*b1*x(2), -1*b2*x(2), -1*b3*x(2) + x(3); 767 819 kx=2; ky=1; kz=3; 768 820 } 769 else { 770 if( b3 != 0) { 821 else 822 { 823 if( b3 != 0) 824 { 771 825 VERT=ring_top,x(1) + -1*b1*x(3), x(2) + -1*b2*x(3), -1*b3*x(3); 772 826 kx=3; ky=1; kz=2; … … 786 840 fb=C[2,1]; // Coeff von x^1 787 841 fc=C[1,1]; // Coeff von x^0 788 if(diff(fb, x(ky)) != 0) { 842 if(diff(fb, x(ky)) != 0) 843 { 789 844 Jfsyz = fb, diff(fb, x(ky)); 790 845 matrix Mat = matrix(syz(Jfsyz)); 791 846 B = maxideal(1); // setze Abbildungs-ideal 792 if( nrows(Mat) == 2) { 847 if( nrows(Mat) == 2) 848 { 793 849 poly Relation = -2 * Mat[2,1] / Mat[1,1]; 794 850 b = Coeff(Relation, x(kz), x(kz)); 795 851 B[rvar(x(ky))] = x(ky)-b*x(kz); 796 852 } 797 else { 853 else 854 { 798 855 Jfsyz = fb, diff(fb, x(kz)); 799 856 Mat = matrix(syz(Jfsyz)); … … 827 884 fc=(x(kx)-1*(Coeffs(fb,x(ky))[2,1])*x(ky)-1*(Coeffs(fb,x(kz))[2,1])*x(kz)); 828 885 fa = Coeffs(fb, x(kx))[2,1]; 829 if ( fa != 0 ) { 886 if ( fa != 0 ) 887 { 830 888 B = maxideal(1); 831 889 B[rvar(x(kx))] = fc / fa; … … 838 896 839 897 //--------------------- permutation of x,y,z ----------------------------- 840 if(Coeffs(f3, x(1))[4,1]!=0) { 898 if(Coeffs(f3, x(1))[4,1]!=0) 899 { 841 900 kx=1; 842 901 if(Coeffs(f3, x(2))[3,1]==0) { ky=2; kz=3; } 843 902 else { ky=3; kz=2; } 844 903 } 845 else { 846 if(Coeffs(f3, x(2))[4,1]!=0) { 904 else 905 { 906 if(Coeffs(f3, x(2))[4,1]!=0) 907 { 847 908 kx=2; 848 909 if(Coeffs(f3, x(3))[3,1]==0) { ky=3; kz=1; } 849 910 else { ky=1; kz=3; } 850 911 } 851 else { 912 else 913 { 852 914 kx=3; 853 915 if(Coeffs(f3, x(1))[3,1]==0) { ky=1; kz=2; } … … 892 954 893 955 //---------------------------- begin of loop ---------------------------------- 894 while(6*p<Mu) { 956 while(6*p<Mu) 957 { 895 958 JetId = x(2)^(3*p+1); 896 959 JetId = phi + x(2)^(3*p+1); … … 919 982 Mult = mult(JetId); 920 983 if(Dim==0) { return(printresult(64, f, "Q["+string(p)+",0]", cstn, p)); } 921 if(Dim==1) { 922 if(Mult == 1) { 984 if(Dim==1) 985 { 986 if(Mult == 1) 987 { 923 988 return(printresult(65, f, "Q["+string(p)+","+string(Mu-(6*p+2))+"]", 924 989 cstn, p)); 925 990 } 926 if(Mult == 2) { 991 if(Mult == 2) 992 { 927 993 fk = jet(fr, 3*w[1], w); 928 994 f_tmp = Coeffs(phi, x(1))[4,1] *x(1)^3+fk; … … 997 1063 if (diff(f3, x(3)) == 0) { kz, ky = swap(kz, ky); } 998 1064 if ( (diff(f3, x(1)) != 0) && (diff(f3, x(2)) != 0) && 999 (diff(f3, x(3)) != 0) ) { 1065 (diff(f3, x(3)) != 0) ) 1066 { 1000 1067 Mat = matrix(syz(Jfsyz)); 1001 1068 b1 = Mat[1,1]; … … 1003 1070 b3 = Mat[3,1]; 1004 1071 1005 if( b1 != 0) { 1072 if( b1 != 0) 1073 { 1006 1074 VERT = ring_top,b1*x(kx), b2*x(kx)+x(ky), b3*x(kx) + x(kz); 1007 1075 kx, ky = swap(kx, ky); 1008 1076 } 1009 else { 1077 else 1078 { 1010 1079 if(b2!=0) { VERT = ring_top,x(kx)+b1*x(ky),b2*x(ky),b3*x(ky)+x(kz); } 1011 else { 1080 else 1081 { 1012 1082 if(b3!=0) { VERT = ring_top,x(kx)+b1*x(kz),x(ky)+b2*x(kz),b3*x(kz); } 1013 1083 else { VERT = ring_top,B; } … … 1035 1105 if(C[1,1] != 0 && C[3,1] == 0 ) { Fall = 2; kx,kz=swap(kx, kz); } 1036 1106 1037 if(Fall == 1) { 1107 if(Fall == 1) 1108 { 1038 1109 VERT=ring_top,x(kx),x(ky),x(kz); 1039 1110 } 1040 if(Fall == 2) { 1111 if(Fall == 2) 1112 { 1041 1113 v = tschirnhaus(f3/x(kz), x(kx)); 1042 1114 b1, VERT = v[1..2]; 1043 1115 } 1044 if(Fall == 3) { 1116 if(Fall == 3) 1117 { 1045 1118 v = tschirnhaus(f3/x(kx), x(kx)); 1046 1119 b1, VERT = [1..2]; … … 1057 1130 //------------- if f3 ~ x3+xz2 then continue with classification ------------- 1058 1131 C = coeffs(f3, x(1)); 1059 if( C[1,1] == 0 && C[2,1] != 0 && C[3,1] == 0 && C[4,1] != 0 ) { 1132 if( C[1,1] == 0 && C[2,1] != 0 && C[3,1] == 0 && C[4,1] != 0 ) 1133 { 1060 1134 return(Funktion83(f, cstn)); 1061 1135 } … … 1135 1209 PhiG = cstn[4]; 1136 1210 //---------------------------- begin of loop ---------------------------------- 1137 while(k<10) { 1211 while(k<10) 1212 { 1138 1213 phi = jet(f, 3); 1139 1214 //--------------------------- step 83(k) -------------------------------- … … 1145 1220 fk = jet(f, 3*w[1], weight(JetId)) ; 1146 1221 //--------------------------- step 85(k) -------------------------------- 1147 if ( fk != phi ) { 1222 if ( fk != phi ) 1223 { 1148 1224 Jf = std(jacob(fk)); 1149 1225 Dim = dim(Jf); … … 1165 1241 Mult = mult(Jf); 1166 1242 if ( Dim == 0 ) { return(printresult(83, f, "NoClass", cstn, -1)); } 1167 if ( Dim == 1 ) { 1168 if ( Mult == 4 ) { 1169 if( fk - phi != 0) { // b!=0 und/oder b'!=0 1170 if( Coeff(fk,x(1)*x(2), x(1)^2*x(2)^k) == 0 ) { // b=0 und b'!=0 1243 if ( Dim == 1 ) 1244 { 1245 if ( Mult == 4 ) 1246 { 1247 if( fk - phi != 0) 1248 { // b!=0 und/oder b'!=0 1249 if( Coeff(fk,x(1)*x(2), x(1)^2*x(2)^k) == 0 ) 1250 { // b=0 und b'!=0 1171 1251 a = (fk - Coeff(fk, x(1), x(1)^3)*x(1)^3) / x(1); 1172 1252 v = Isomorphie_s82_z(f, a, k); 1173 1253 } 1174 else { 1175 if( Coeff(fk,x(1)*x(2)*x(3), x(1)*x(2)^k*x(3)) == 0 ){ 1254 else 1255 { 1256 if( Coeff(fk,x(1)*x(2)*x(3), x(1)*x(2)^k*x(3)) == 0 ) 1257 { 1176 1258 // b!=0 und b'=0 1177 1259 a = subst(fk, x(3), 0); 1178 1260 v = Isomorphie_s82_x(f, a, k); 1179 1261 } 1180 else { 1262 else 1263 { 1181 1264 a = Coeff(fk,x(1)*x(2)*x(3), x(1)*x(2)^k*x(3)); 1182 1265 b = Coeff(fk,x(2)*x(3), x(2)^(2*k)*x(3)); … … 1228 1311 //--------------------------- compute f3 ~ x2y -------------------------------- 1229 1312 // vertausche 2 Koordinaten sodass d2f/dx2 <>0 ist. 1230 for(i=1;i<4;i=i+1) { 1313 for(i=1;i<4;i=i+1) 1314 { 1231 1315 if(diff(diff(f3, x(i)), x(i)) != 0) { kx = i; i=4; } 1232 1316 } … … 1237 1321 Jfsyz = f3, diff(f3, x(kx)); 1238 1322 Mat = matrix(syz(Jfsyz)); 1239 if(deg(Mat[2,1])>1) { 1323 if(deg(Mat[2,1])>1) 1324 { 1240 1325 Jfsyz = f3, Mat[2,1]; 1241 1326 Mat = matrix(syz(Jfsyz)); … … 1280 1365 Mult = mult(Jf); 1281 1366 if( Dim == 0) { return(printresult(99, f, "V[1,0]", cstn, 3)); } 1282 if( Dim == 1) { 1367 if( Dim == 1) 1368 { 1283 1369 if(Mult==1) {return(printresult(100,f,"V[1,"+string(Mu-15)+"]",cstn,3));} 1284 1370 if(Mult==2){return(printresult(101,f,"V#[1,"+string(Mu-15)+"]",cstn,3));} … … 1340 1426 debug_log(2, "Faktor: f=",Show(f)," Jet=",Show(fk)," k=",k, "cnt=", ct); 1341 1427 1342 if( k == 1) { 1428 if( k == 1) 1429 { 1343 1430 Jfsyz = fk, diff(fk, x(1)); 1344 1431 Matx = matrix(syz(Jfsyz)); … … 1351 1438 d = Coeff(fk, x(1)*x(2), x(1)*x(2)^3); 1352 1439 1353 if( (a != 0) && (b != 0) ) { 1440 if( (a != 0) && (b != 0) ) 1441 { 1354 1442 B = -int(Coeff(Matx[1,1], x(2), x(2))); 1355 1443 C = -int(Coeff(Maty[1,1], x(1), x(1))); … … 1358 1446 gamma = int(Coeff(Matx[2,1], x(2), x(2)^2)); 1359 1447 1360 bb[rvar(x(1))] = x(1) - (2* gamma/ (B - beta))*x(2);1361 bb[rvar(x(2))] = x(2) - ((C - beta) / (2*gamma))*x(1);1448 bb[rvar(x(1))] = x(1) - (2*number(gamma) / (B - beta))*x(2); 1449 bb[rvar(x(2))] = x(2) - ((C - number(beta)) / (2*gamma))*x(1); 1362 1450 VERT = ring_top,bb; 1363 1451 Relation = VERT(f); … … 1381 1469 } 1382 1470 1383 if( (a == 0) || (b == 0) ) { 1384 if( a == 0) { 1385 if( c == 0) { // y3(ax+by) 1471 if( (a == 0) || (b == 0) ) 1472 { 1473 if( a == 0) 1474 { 1475 if( c == 0) 1476 { // y3(ax+by) 1386 1477 Relation = - Matx[2,1] / Matx[1,1]; 1387 1478 a = Coeff(Relation, x(1), x(1)); … … 1389 1480 VERT=ring_top,a*x(2)^k - b*x(1), x(1); 1390 1481 } 1391 else { // (ax+by)^3y 1482 else 1483 { // (ax+by)^3y 1392 1484 Relation = - 3*Matx[2,1] / Matx[1,1]; 1393 1485 a = Coeff(Relation, x(1), x(1)); … … 1396 1488 } 1397 1489 } 1398 else { 1399 if( d == 0) { // x3(ax+by) 1490 else 1491 { 1492 if( d == 0) 1493 { // x3(ax+by) 1400 1494 Relation = - Maty[2,1] / Maty[1,1]; 1401 1495 a = Coeff(Relation, x(1), x(1)); … … 1403 1497 VERT=ring_top,x(1), b*x(2)^k - a*x(1); 1404 1498 } 1405 else { // x(ax+by)^3 1499 else 1500 { // x(ax+by)^3 1406 1501 Relation = - 3*Maty[2,1] / Maty[1,1]; 1407 1502 a = Coeff(Relation, x(1), x(1)); … … 1413 1508 PhiG = VERT(PhiG); 1414 1509 } 1415 else { // "Weder b noch a sind 0"; 1510 else 1511 { // "Weder b noch a sind 0"; 1416 1512 if(ct > 5) { v[1]=f; v[2]=PhiG; return(v); } 1417 1513 fk = jet(f, 4); … … 1419 1515 } 1420 1516 } 1421 else { // k >1 1517 else 1518 { // k >1 1422 1519 a = fk/x(2); 1423 1520 Jfsyz = a, diff(a, x(1)); … … 1763 1860 while( (i<=ncols(K)) && (K[1,i] != term) ) 1764 1861 { i++; 1765 if(i>ncols(K)) { break; }1862 if(i>ncols(K)) break; 1766 1863 } 1767 1864 if(i<=ncols(K)) { a = K[2,i]; } … … 1812 1909 // check basic condition on the basering. 1813 1910 if(checkring()) { return(f); } 1814 if( f==0 ) { 1911 if( f==0 ) 1912 { 1815 1913 "Normal form : 0"; 1816 1914 return(f); 1817 1915 } 1818 if( jet(f,0)!=0 ) { 1916 if( jet(f,0)!=0 ) 1917 { 1819 1918 "Normal form : 1"; 1820 1919 return(f); 1821 1920 } 1822 1921 K, Mu, corank = basicinvariants(f); 1823 if(Mu<0) { 1922 if(Mu<0) 1923 { 1824 1924 debug_log(0, "The Milnor number of the function is infinite."); 1825 1925 return(f); … … 1832 1932 Typ, cnt = v[1..2]; 1833 1933 "Singularity R-equivalent to :",Typ; 1834 if(cnt==0) { 1934 if(cnt==0) 1935 { 1835 1936 "Hilbert polynomial not recognised. Milnor code = ", milnorcode(f); 1836 1937 return(); 1837 1938 } 1838 if(cnt==1) { 1939 if(cnt==1) 1940 { 1839 1941 debug_log(1,"Getting normal form from database."); 1840 1942 "normal form :",A_L(Typ); … … 1939 2041 1940 2042 if(Dim == 0) { return("P[8]:smooth cubic"); } // x3 + y3 + z3 + axyz 1941 if(Dim == 1) { 1942 if(Mult == 2) { 2043 if(Dim == 1) 2044 { 2045 if(Mult == 2) 2046 { 1943 2047 Jf2 = wedge(jacob(Jf1),3-Dim), Jf1; 1944 2048 Jf2 = std(Jf2); … … 1947 2051 if (Dim == 1) { return("Q:cuspidal cubic"); } // x3 + yz2 1948 2052 } 1949 if(Mult == 3) { 2053 if(Mult == 3) 2054 { 1950 2055 Jf2 = wedge(jacob(Jf1),3-Dim), Jf1; 1951 2056 Jf2 = std(Jf2); … … 1956 2061 if(Mult == 4) { return("U:three concurrent lines"); } // x3 + xz2 1957 2062 } 1958 if(Dim == 2) { 2063 if(Dim == 2) 2064 { 1959 2065 if(Mult == 1) { return("V:doubleline + line"); } // x2y 1960 2066 if(Mult == 2) { return("V': tripple line"); } // x3 … … 2012 2118 debug_log(2, "entering HKclass3_teil_1", sg); 2013 2119 if(sg[2]==1) { SG_Typ=SG_Typ+" D[k]=D["+string(sg[3]+3)+"]";cnt++;} // D[k] 2014 if(sg[2]>=1) { 2015 if( parity(sg[2])) { // sg[2] ist ungerade 2016 if(sg[2]<=sg[3]) { 2120 if(sg[2]>=1) 2121 { 2122 if( parity(sg[2])) 2123 { // sg[2] ist ungerade 2124 if(sg[2]<=sg[3]) 2125 { 2017 2126 k = (sg[2]+1) div 2; 2018 if(k>1) { 2127 if(k>1) 2128 { 2019 2129 cnt++; 2020 2130 SG_Typ=SG_Typ+" J[k,r]=J["+string(k)+","+string(sg[3]+1-2*k)+"]"; 2021 2131 }// J[k,r] 2022 2132 } 2023 if(sg[2]==sg[3]+2) { // E[6k+2] 2133 if(sg[2]==sg[3]+2) 2134 { // E[6k+2] 2024 2135 k = (sg[2]-1) div 2; 2025 2136 if(k>0) {cnt++; SG_Typ=SG_Typ+" E[6k+2]=E[" + string(6*k+2) + "]"; } 2026 2137 } 2027 2138 } 2028 else { // sg[2] ist gerade 2029 if( sg[2] == sg[3]+1) { // E[6k] 2030 k = sg[2] div 2; cnt++; SG_Typ=SG_Typ + " E[6k]=E[" + string(6*k) + "]"; } 2031 if( sg[2] == sg[3]) { // E[6k+1] 2139 else 2140 { // sg[2] ist gerade 2141 if( sg[2] == sg[3]+1) 2142 { // E[6k] 2143 k = sg[2] div 2; cnt++; SG_Typ=SG_Typ + " E[6k]=E[" + string(6*k) + "]"; 2144 } 2145 if( sg[2] == sg[3]) 2146 { // E[6k+1] 2032 2147 k=sg[2] div 2; cnt++; SG_Typ=SG_Typ+" E[6k+1]=E["+string(6*k+1)+"]"; } 2033 2148 } … … 2058 2173 2059 2174 debug_log(2, "entering HKclass5_teil_1", sg); 2060 if(parity(sg[3])) { // Dritte Stelle soll ungerade sein 2175 if(parity(sg[3])) 2176 { // Dritte Stelle soll ungerade sein 2061 2177 k = (sg[3]+1) div 2; 2062 if(sg[3] > sg[4]) { 2178 if(sg[3] > sg[4]) 2179 { 2063 2180 k--; 2064 if( (sg[4]==sg[5]) && (sg[3] == sg[4]+1) && k>0 ) { // W[12k+6] 2181 if( (sg[4]==sg[5]) && (sg[3] == sg[4]+1) && k>0 ) 2182 { // W[12k+6] 2065 2183 SG_Typ = SG_Typ + " W[12k+6]=W["+string(12*k+6)+"]"; cnt++; 2066 2184 } 2067 if( (sg[3]==sg[5]) && (sg[3] == sg[4]+2) && k>0 ) { // W[12k+5] 2185 if( (sg[3]==sg[5]) && (sg[3] == sg[4]+2) && k>0 ) 2186 { // W[12k+5] 2068 2187 SG_Typ = SG_Typ + " W[12k+5]=W["+string(12*k+5)+"]"; cnt++; 2069 2188 } 2070 2189 } 2071 else { // sg[3] <= sg[4] 2072 if( (sg[3]==sg[4]) && (sg[5] >= sg[3]) ) { 2190 else 2191 { // sg[3] <= sg[4] 2192 if( (sg[3]==sg[4]) && (sg[5] >= sg[3]) ) 2193 { 2073 2194 r = sg[5] - sg[4]; 2074 2195 SG_Typ=SG_Typ +" X[k,r]=X["+string(k)+","+string(r)+"]"; cnt++; 2075 2196 } 2076 if( (sg[3]==1) && (sg[4]==3) && (sg[5]>=sg[4])){ // Z[1,r] 2197 if( (sg[3]==1) && (sg[4]==3) && (sg[5]>=sg[4])) 2198 { // Z[1,r] 2077 2199 r = sg[5] - sg[4]; 2078 2200 SG_Typ = SG_Typ + " Z[1,r]=Z[1,"+string(r)+"]"; cnt++; 2079 2201 } 2080 2202 2081 if( sg[4] == sg[5]) { 2082 if(parity(sg[4])) { // Z[k,r,0] 2203 if( sg[4] == sg[5]) 2204 { 2205 if(parity(sg[4])) 2206 { // Z[k,r,0] 2083 2207 r = (sg[4] - sg[3]) div 2; 2084 if( r>0 ) { cnt++; 2208 if( r>0 ) 2209 { cnt++; 2085 2210 SG_Typ = SG_Typ + " Z[k,r,0]=Z["+string(k)+","+string(r)+",0]"; 2086 2211 } 2087 2212 } 2088 else { // Z[k,12k+6r] 2213 else 2214 { // Z[k,12k+6r] 2089 2215 r = (sg[4] - 2*k) div 2; cnt++; 2090 2216 SG_Typ = SG_Typ+" Z[k,12k+6r]=Z["+string(k)+","+string(12*k+6*r)+"]"; … … 2092 2218 } 2093 2219 2094 if( parity(sg[4]) ) { // 4. Stelle ist ungerade 2095 if(sg[4] == sg[5]+2) { // Z[k,12k+6r+1] 2220 if( parity(sg[4]) ) 2221 { // 4. Stelle ist ungerade 2222 if(sg[4] == sg[5]+2) 2223 { // Z[k,12k+6r+1] 2096 2224 r = (sg[4]-2*k-1) div 2; cnt++; 2097 2225 SG_Typ=SG_Typ+" Z[k,12k+6r+1]=Z["+string(k)+","; 2098 2226 SG_Typ=SG_Typ+string(12*k+6*r+1)+"]"; 2099 2227 } 2100 if( (sg[5]>sg[4]) && (sg[4]>sg[3]) ) { // Z[k,r,s] 2228 if( (sg[5]>sg[4]) && (sg[4]>sg[3]) ) 2229 { // Z[k,r,s] 2101 2230 r = (sg[4] - sg[3]) div 2; cnt++; 2102 2231 s = sg[5] - sg[4]; … … 2105 2234 } 2106 2235 } 2107 else { // 4. Stelle ist gerade 2108 if( sg[4] == sg[5]+1) { // Z[k,12k+6r-1] 2236 else 2237 { // 4. Stelle ist gerade 2238 if( sg[4] == sg[5]+1) 2239 { // Z[k,12k+6r-1] 2109 2240 r = (sg[4] - 2*k) div 2; cnt++; 2110 2241 SG_Typ=SG_Typ+" Z[k,12k+6r-1]=Z["+string(k)+","; … … 2113 2244 } 2114 2245 2115 if(sg[4]>sg[3]) { // Y[k,r,s] 2246 if(sg[4]>sg[3]) 2247 { // Y[k,r,s] 2116 2248 r = sg[4] - sg[3]; 2117 2249 s = sg[5] - sg[3] + r; … … 2122 2254 } 2123 2255 } 2124 else { // Dritte Stelle soll gerade sein 2256 else 2257 { // Dritte Stelle soll gerade sein 2125 2258 k = sg[3] div 2; 2126 2259 // sortiere verschiedene W's 2127 if(k>0) { 2128 if( (sg[4]==2*k-1) && (sg[4]==sg[5]) ) { // W[12k] 2260 if(k>0) 2261 { 2262 if( (sg[4]==2*k-1) && (sg[4]==sg[5]) ) 2263 { // W[12k] 2129 2264 SG_Typ = SG_Typ + " W[12k]=W["+string(12*k)+"]"; cnt++; 2130 2265 } 2131 if( (sg[4]==2*k-1) && (sg[3]==sg[5]) ) { // W[12k+1] 2266 if( (sg[4]==2*k-1) && (sg[3]==sg[5]) ) 2267 { // W[12k+1] 2132 2268 SG_Typ = SG_Typ + " W[12k+1]=W["+string(12*k+1)+"]"; cnt++; 2133 2269 } 2134 if( (sg[4]==2*k) && (sg[5]>=sg[4]) ) { // W[k,r] 2270 if( (sg[4]==2*k) && (sg[5]>=sg[4]) ) 2271 { // W[k,r] 2135 2272 r = sg[5] - sg[4]; 2136 2273 SG_Typ=SG_Typ+" W[k,r]=W["+string(k)+","+string(r)+"]"; cnt++; 2137 2274 } 2138 if( (sg[5]==2*k-1) && (sg[4]>sg[3]) ) { // W#[k,2r-1] 2275 if( (sg[5]==2*k-1) && (sg[4]>sg[3]) ) 2276 { // W#[k,2r-1] 2139 2277 r = sg[4] - sg[3]; cnt++; 2140 2278 SG_Typ = SG_Typ + " W#[k,2r-1]=W["+string(k)+","+string(2*r-1)+"]"; 2141 2279 } 2142 if( (sg[5]==2*k) && (sg[4]>sg[3]) ) { // W#[k,2r] 2280 if( (sg[5]==2*k) && (sg[4]>sg[3]) ) 2281 { // W#[k,2r] 2143 2282 r = sg[4] - sg[3]; cnt++; 2144 2283 SG_Typ = SG_Typ + " W#[k,2r]=W["+string(k)+","+string(2*r)+"]"; … … 2163 2302 r = sg[4] + k; 2164 2303 s = sg[5] + r - 1; 2165 if(k>2 && r>2 && s>2) { // T[k,r,s] 2304 if(k>2 && r>2 && s>2) 2305 { // T[k,r,s] 2166 2306 cnt++; 2167 2307 SG_Typ = SG_Typ + " T[k,r,s]=T["+string(k)+","+string(r)+","+string(s)+"]"; … … 2169 2309 2170 2310 // finde weitere Moeglicjkeiten. 2171 if(sg[3]==2) { // Q[...] 2172 if(parity(sg[4])) { // 4. Stelle ist ungerade. 2173 if(sg[4]==sg[5]) { // Q[6k+4] 2311 if(sg[3]==2) 2312 { // Q[...] 2313 if(parity(sg[4])) 2314 { // 4. Stelle ist ungerade. 2315 if(sg[4]==sg[5]) 2316 { // Q[6k+4] 2174 2317 k=(sg[4]+1) div 2; cnt++; SG_Typ=SG_Typ+" Q[6k+4]=Q["+string(6*k+4)+"]"; 2175 2318 } 2176 if(sg[4]+1==sg[5]) { // Q[6k+5] 2319 if(sg[4]+1==sg[5]) 2320 { // Q[6k+5] 2177 2321 k=sg[5] div 2; cnt++; SG_Typ=SG_Typ+" Q[6k+5]=Q["+string(6*k+5)+"]"; 2178 2322 } 2179 2323 } 2180 else { // 4. Stelle ist gerade. 2181 if(sg[4]==sg[5]+1) { // Q[6k+6] 2324 else 2325 { // 4. Stelle ist gerade. 2326 if(sg[4]==sg[5]+1) 2327 { // Q[6k+6] 2182 2328 k=sg[4] div 2; cnt++; SG_Typ=SG_Typ+" Q[6k+6]=Q["+string(6*k+6)+"]"; 2183 2329 } 2184 if(sg[4]<sg[5]) { // Q[k,r] 2330 if(sg[4]<sg[5]) 2331 { // Q[k,r] 2185 2332 k = (sg[4]+2) div 2; 2186 if(k>=2) { 2333 if(k>=2) 2334 { 2187 2335 r=sg[5]+1-2*k; cnt++; 2188 2336 SG_Typ=SG_Typ+" Q[k,r]=Q["+string(k)+","+string(r)+"]"; … … 2191 2339 } 2192 2340 } 2193 else { // S[...] 2194 if(parity(sg[3])) { // 3. Stelle ist ungerade. 2341 else 2342 { // S[...] 2343 if(parity(sg[3])) 2344 { // 3. Stelle ist ungerade. 2195 2345 k = (sg[3]-1) div 2; 2196 if(sg[3]==sg[4]+3 && sg[3]==sg[5]+2) { // S[12k-1] 2346 if(sg[3]==sg[4]+3 && sg[3]==sg[5]+2) 2347 { // S[12k-1] 2197 2348 cnt++; SG_Typ = SG_Typ + " S[12k-1]=S["+string(12*k-1)+"]"; 2198 2349 } 2199 if(sg[3]==sg[4]+3 && sg[3]==sg[5]+1) { // s[12k] 2350 if(sg[3]==sg[4]+3 && sg[3]==sg[5]+1) 2351 { // s[12k] 2200 2352 cnt++; SG_Typ = SG_Typ + " S[12k]=S["+string(12*k)+"]"; 2201 2353 } 2202 if(sg[3]==sg[4]+2 && sg[5]>=sg[4]+1) { // S[k,r] 2354 if(sg[3]==sg[4]+2 && sg[5]>=sg[4]+1) 2355 { // S[k,r] 2203 2356 r = sg[5] - 2*k; cnt++; 2204 2357 SG_Typ = SG_Typ + " S[k,r]=S["+string(k)+","+string(r)+"]"; 2205 2358 } 2206 if(sg[3]==sg[5]+2 && sg[4]>=sg[5]) { // S#[k,2r-1] 2359 if(sg[3]==sg[5]+2 && sg[4]>=sg[5]) 2360 { // S#[k,2r-1] 2207 2361 r = sg[4] - 2*k + 1; cnt++; 2208 2362 SG_Typ = SG_Typ + " S#[k,2r-1]=S#["+string(k)+","+string(2*r-1)+"]"; 2209 2363 } 2210 if(sg[3]==sg[5]+1 && sg[4]>=sg[5]) { // S#[k,2r] 2364 if(sg[3]==sg[5]+1 && sg[4]>=sg[5]) 2365 { // S#[k,2r] 2211 2366 r = sg[4] - 2*k + 1; cnt++; 2212 2367 SG_Typ = SG_Typ + " S#[k,2r]=S#["+string(k)+","+string(2*r)+"]"; 2213 2368 } 2214 2369 } 2215 else { // 3. Stelle ist gerade. 2216 if(sg[3]==sg[5]+1 && sg[5]==sg[4]+3) { // S[12k+4] 2370 else 2371 { // 3. Stelle ist gerade. 2372 if(sg[3]==sg[5]+1 && sg[5]==sg[4]+3) 2373 { // S[12k+4] 2217 2374 k = (sg[3]-2) div 2; cnt++; 2218 2375 SG_Typ = SG_Typ + " S[12k+4]=S["+string(12*k+4)+"]"; 2219 2376 } 2220 if(sg[3]==sg[5]+2 && sg[5]==sg[4]+1) { // S[12k+5] 2377 if(sg[3]==sg[5]+2 && sg[5]==sg[4]+1) 2378 { // S[12k+5] 2221 2379 k = (sg[3]-2) div 2; cnt++; 2222 2380 SG_Typ = SG_Typ + " S[12k+5]=S["+string(12*k+5)+"]"; … … 2235 2393 list v; 2236 2394 2237 if(sg[1]==1 && sg[2]==0 && sg[3]==1) { 2395 if(sg[1]==1 && sg[2]==0 && sg[3]==1) 2396 { 2238 2397 v=HKclass7_teil_1(sg, SG_Typ, cnt); 2239 2398 } 2240 else { 2399 else 2400 { 2241 2401 v[1]="not in list"; 2242 2402 v[2]=0; … … 2253 2413 2254 2414 debug_log(2, "entering HKclass7_teil_1", sg); 2255 if(sg[4] == 2) { // V[...] 2256 if(sg[5] == 0 && sg[6] == 1 && sg[7]>0) { // V[1,r] 2415 if(sg[4] == 2) 2416 { // V[...] 2417 if(sg[5] == 0 && sg[6] == 1 && sg[7]>0) 2418 { // V[1,r] 2257 2419 r = sg[7] - 1; cnt++; SG_Typ = SG_Typ + " V[1,r]=V[1,"+string(r)+"]"; 2258 2420 } 2259 if(sg[5] == 1 && sg[7] == 1) { // V#[1,2r-1] 2421 if(sg[5] == 1 && sg[7] == 1) 2422 { // V#[1,2r-1] 2260 2423 r=sg[6]+1; cnt++; SG_Typ=SG_Typ+" V#[1,2r-1]=V#[1,"+string(2*r-1)+"]"; 2261 2424 } 2262 if(sg[5] == 1 && sg[7] == 2) { // V#[1,2r] 2425 if(sg[5] == 1 && sg[7] == 2) 2426 { // V#[1,2r] 2263 2427 r=sg[6]+1; cnt++; SG_Typ=SG_Typ+" V#[1,2r]=V#[1,"+string(2*r)+"]"; 2264 2428 } … … 2266 2430 // Moegliche U[...]'s 2267 2431 k = sg[4]; 2268 if(sg[5]==2*k-1 && sg[6]==0 && sg[7]==sg[5]) { // U[12k] 2432 if(sg[5]==2*k-1 && sg[6]==0 && sg[7]==sg[5]) 2433 { // U[12k] 2269 2434 cnt++;SG_Typ = SG_Typ + " U[12k]=U["+string(12*k)+"]"; 2270 2435 } 2271 if(sg[5]==2*k && sg[6]==0 && sg[7]==sg[5]) { // U[12k+4] 2436 if(sg[5]==2*k && sg[6]==0 && sg[7]==sg[5]) 2437 { // U[12k+4] 2272 2438 cnt++;SG_Typ = SG_Typ + " U[12k+4]=U["+string(12*k+4)+"]"; 2273 2439 } 2274 if(sg[5]==2*k-1 && sg[6]>0 && sg[7]==sg[5]) { // U[k,2r-1] 2440 if(sg[5]==2*k-1 && sg[6]>0 && sg[7]==sg[5]) 2441 { // U[k,2r-1] 2275 2442 r=sg[6]-1; cnt++; 2276 2443 SG_Typ=SG_Typ+" U[k,2r-1]=U["+string(k)+","+string(2*r-1)+"]"; 2277 2444 } 2278 if(sg[5]==2*k-1 && sg[6]>0 && sg[7]==2*k) { // U[k,2r] 2445 if(sg[5]==2*k-1 && sg[6]>0 && sg[7]==2*k) 2446 { // U[k,2r] 2279 2447 r = sg[6]; cnt++; 2280 2448 SG_Typ = SG_Typ + " U[k,2r]=U["+string(k)+","+string(2*r)+"]"; … … 2312 2480 if(len>=3) { s = #[3]; } 2313 2481 else { s = 0; } 2314 if( k<0 || r<0 || s<0) { 2482 if( k<0 || r<0 || s<0) 2483 { 2315 2484 "Initial condition failed: k>=0; r>=0; s>=0"; 2316 2485 "k="+string(k)+" r="+string(r)+" s="+string(s); … … 2375 2544 Tp = read(dbmLink, typ); 2376 2545 debug_log(2,"DBMread(", typ, ")=", Tp, "."); 2377 if( Tp != "(null)" && Tp !="" ) { 2546 if( Tp != "(null)" && Tp !="" ) 2547 { 2378 2548 string Key = "I_", typ; 2379 2549 S = "f = ", Tp, ";"; … … 2385 2555 v = f, crk, Mu, MlnCd; 2386 2556 } 2387 else { 2557 else 2558 { 2388 2559 v = 0, 0, 0, 0; 2389 2560 } … … 2428 2599 2429 2600 r=1; 2430 for(i=n; i>0; i--,r++) { 2601 for(i=n; i>0; i--,r++) 2602 { 2431 2603 // for(i=1; i<=n; i=i+1) 2432 2604 B[rvar(x(r))] = x(i); 2433 2605 if(i>2 && random(1,10)<3) { B[rvar(x(r))] = B[rvar(x(r))] + x(i-1); } 2434 2606 // if(i==1 && random(1,10)<4) { B[rvar(x(r))] = B[rvar(x(r))]- x(n); } 2435 if(i>0) { 2436 for(b=3; b<5; b=b+1) { 2607 if(i>0) 2608 { 2609 for(b=3; b<5; b=b+1) 2610 { 2437 2611 // B[rvar(x(r))] = B[rvar(x(r))] + random(0,9) * x(i)^(b+2); 2438 if(random(1,20)<3) { 2612 if(random(1,20)<3) 2613 { 2439 2614 B[rvar(x(r))] = B[rvar(x(r))] - random(-2,2)*x(b)^2; 2440 2615 } … … 2461 2636 int len = size(#); 2462 2637 // int printresult = printlevel - level +1; 2463 // if(level>1) { 2638 // if(level>1) 2639 // { 2464 2640 // dbprint(printresult, "Debug:("+ string(level)+ "): ", #[2..len]); 2465 2641 // } 2466 2642 // else { dbprint(printresult, #[1..len]); } 2467 2643 if( defined(@DeBug) == 0 ) { init_debug(); } 2468 if(@DeBug>=level) { 2644 if(@DeBug>=level) 2645 { 2469 2646 if(level>1) { "Debug:("+ string(level)+ "): ", #[1..len]; } 2470 2647 else { #[1..len]; } … … 2490 2667 if( defined(@DeBug) != 0 ) { newDebug = @DeBug; } 2491 2668 2492 if( size(#) > 0 ) { 2669 if( size(#) > 0 ) 2670 { 2493 2671 newDebug=#[1]; 2494 2672 } 2495 else { 2673 else 2674 { 2496 2675 string s=system("getenv", "SG_DEBUG"); 2497 if( s != "" && defined(@DeBug)==0) { 2676 if( s != "" && defined(@DeBug)==0) 2677 { 2498 2678 s="newDebug="+s; 2499 2679 execute(s); 2500 2680 } 2501 2681 } 2502 if( defined(@DeBug) == 0) { 2682 if( defined(@DeBug) == 0) 2683 { 2503 2684 int @DeBug = newDebug; 2504 2685 export @DeBug; 2505 2686 if(@DeBug>0) { "Debugging level is set to ", @DeBug; } 2506 2687 } 2507 else { 2688 else 2689 { 2508 2690 if( (size(#) == 0) && (newDebug < @DeBug) ) { return(); } 2509 if( @DeBug != newDebug) { 2691 if( @DeBug != newDebug) 2692 { 2510 2693 int oldDebug = @DeBug; 2511 2694 @DeBug = newDebug; 2512 2695 if(@DeBug>0) { "Debugging level change from ", oldDebug, " to ",@DeBug; } 2513 else { 2696 else 2697 { 2514 2698 if( @DeBug==0 && oldDebug>0 ) { "Debugging switched off."; } 2515 2699 } … … 2589 2773 Jfsyz = fk, diff(fk, x(1)); 2590 2774 Mat = matrix(syz(Jfsyz)); 2591 if( (fk-subst(fk,x(1),0)) != 0 && (fk-subst(fk,x(2),0)) != 0 ) { 2775 if( (fk-subst(fk,x(1),0)) != 0 && (fk-subst(fk,x(2),0)) != 0 ) 2776 { 2592 2777 // Wenn k>0 ist die Wahl fuer x & y bereits getroffen 2593 2778 // sonst bestimmen x und y … … 2606 2791 2607 2792 //------------------- permutation of x and y, if needed ----------------------- 2608 if( k==1 ) { 2793 if( k==1 ) 2794 { 2609 2795 debug_log(2, "Fak-7:",Show(f)," jet=",Show(fk)); 2610 if(Coeff(jet(f, pt), x(1), x(1)^pt) == 0) { 2796 if(Coeff(jet(f, pt), x(1), x(1)^pt) == 0) 2797 { 2611 2798 VERT = basering,x(2),x(1); 2612 2799 f = VERT(f); … … 2643 2830 intvec Haeufigkeit = RFlg; 2644 2831 2645 for( j=1; j<=n ; j=j+1) { 2832 for( j=1; j<=n ; j=j+1) 2833 { 2646 2834 Koef = coef(fi, x(j)); 2647 2835 Haeufigkeit[j] = ncols(Koef); 2648 2836 if(Coeff(fi, x(j),0) == 0) { Haeufigkeit[j] = Haeufigkeit[j] + 1;} 2649 2837 } 2650 for( j=n; j>0 ; j=j-1) { 2838 for( j=n; j>0 ; j=j-1) 2839 { 2651 2840 l1 = 0; 2652 2841 l1w = 0; … … 2676 2865 { 2677 2866 int CH = char(basering); 2678 if(CH >= 2 && CH<=13) { 2867 if(CH >= 2 && CH<=13) 2868 { 2679 2869 "Ring has characteristic ",CH; 2680 2870 "Characteristic other than 0 or 0<char<13 is not yet implemented"; … … 2710 2900 debug_log(6, "Suche Type:", Typ); 2711 2901 //---------------------- decode between brackets ---------------------------- 2712 if( find(s1, ",") == 0) { 2902 if( find(s1, ",") == 0) 2903 { 2713 2904 debug_log(8, " Number of columns: 0"); 2714 2905 s2 = "k = "+s1+";"; … … 2720 2911 if( Typ == "Z[") { t = 6; } 2721 2912 if( Typ == "U[") { t = 12; } 2722 if( t > 1 ) { 2913 if( t > 1 ) 2914 { 2723 2915 i = k; 2724 2916 k = k div t; 2725 2917 b = i - t*k; 2726 2918 if( (s1 == "Q[") && (b==0) ) { k=k-1; b=6; } 2727 if(Typ == "Z[") { 2919 if(Typ == "Z[") 2920 { 2728 2921 if(b==0) { k=k-1; b=6; } 2729 2922 if(b==1) { k=k-1; b=7; } … … 2732 2925 else { s3 = string(t)+"k+"+string(b); } 2733 2926 } 2734 if( Typ == "S[") { 2927 if( Typ == "S[") 2928 { 2735 2929 i = k+1; 2736 2930 k = i/12; 2737 2931 b = i - 12*k; 2738 2932 if( b == 1 ) { s3 = "k"; } 2739 else { 2933 else 2934 { 2740 2935 if(b==0) { s3 = "12k"+string(b-1); } 2741 2936 else { s3 = "12k+"+string(b-1); } … … 2745 2940 } // es kommt mindestens ein komma vor... 2746 2941 //----------------------- more than 1 parameter ----------------------------- 2747 else { 2942 else 2943 { 2748 2944 b = find(s1, ","); 2749 2945 s2 = "k = ",s1[1..b-1],";"; 2750 2946 execute(s2); 2751 2947 s1 = s1[b+1..size(s1)]; 2752 if(find(s1, ",") == 0) { 2948 if(find(s1, ",") == 0) 2949 { 2753 2950 debug_log(8, " Number of columns 1"); 2754 2951 s2 = "r = "+s1+";"; … … 2758 2955 if(r==0) { s4 = string(0); } 2759 2956 if(k==0 && Typ=="Z[") { s3 = string(1); } 2760 if(Typ[2] == "#") { 2957 if(Typ[2] == "#") 2958 { 2761 2959 i = r+1; 2762 2960 r = i div 2; … … 2768 2966 } // es kommt mindestens zwei komma vor... 2769 2967 //----------------------- get third parameter ----------------------------- 2770 else { 2968 else 2969 { 2771 2970 debug_log(8, " Number of columns >=2"); 2772 2971 debug_log(2, "Y[k,r,s] / Z[k,r,s] / T[k,r,s]"); 2773 2972 b = find(s1, ","); 2774 2973 s2 = "r = ",s1[1..b-1],";"; 2775 execute(s2);2974 if ((s2[5]>"0") && (s2[5]<="9")) { execute(s2); } 2776 2975 s2 = "s = ",s1[b+1..size(s1)],";"; 2777 execute(s2);2976 if ((s2[5]>"0") && (s2[5]<="9")) { execute(s2); } 2778 2977 if(Typ=="Y[") { s2 = "Y[k,r,s]"; } 2779 2978 if(Typ=="Z[") { s2 = "Z[k,r,s]"; } … … 2802 3001 init_debug(); 2803 3002 2804 if( typeof(#[1]) == "string" ) { 3003 if( typeof(#[1]) == "string" ) 3004 { 2805 3005 if(checkring()) { return(#[1]); } 2806 3006 return(normalform(#[1])); 2807 3007 } 2808 if( typeof(#[1]) == "poly" ) { 3008 if( typeof(#[1]) == "poly" ) 3009 { 2809 3010 if(checkring()) { return(#[1]); } 2810 3011 return(quickclass(#[1])); … … 2836 3037 2837 3038 if(checkring()) { return(s_in); } 2838 if(nvars(basering)<=1) { 3039 if(nvars(basering)<=1) 3040 { 2839 3041 "We need at least 2 variables in basering, you have",nvars(basering),"."; 2840 3042 return();
Note: See TracChangeset
for help on using the changeset viewer.