001/* 002 * $Id: SolvableIdealTest.java 5338 2015-12-06 13:06:47Z kredel $ 003 */ 004 005package edu.jas.application; 006 007 008import java.util.ArrayList; 009import java.util.List; 010 011import junit.framework.Test; 012import junit.framework.TestCase; 013import junit.framework.TestSuite; 014 015import org.apache.log4j.BasicConfigurator; 016 017import edu.jas.arith.BigRational; 018import edu.jas.gb.SolvableGroebnerBase; 019import edu.jas.gb.SolvableGroebnerBaseSeq; 020import edu.jas.kern.ComputerThreads; 021import edu.jas.poly.GenSolvablePolynomial; 022import edu.jas.poly.GenSolvablePolynomialRing; 023import edu.jas.poly.PolynomialList; 024import edu.jas.poly.RelationGenerator; 025import edu.jas.poly.TermOrder; 026import edu.jas.poly.WeylRelations; 027import edu.jas.util.KsubSet; 028 029 030/** 031 * SolvableIdeal tests with JUnit. 032 * @author Heinz Kredel. 033 */ 034public class SolvableIdealTest extends TestCase { 035 036 037 //private static final Logger logger = Logger.getLogger(SolvableIdealTest.class); 038 039 040 /** 041 * main 042 */ 043 public static void main(String[] args) { 044 BasicConfigurator.configure(); 045 junit.textui.TestRunner.run(suite()); 046 } 047 048 049 /** 050 * Constructs a <CODE>SolvableIdealTest</CODE> object. 051 * @param name String. 052 */ 053 public SolvableIdealTest(String name) { 054 super(name); 055 } 056 057 058 /** 059 * suite. 060 */ 061 public static Test suite() { 062 TestSuite suite = new TestSuite(SolvableIdealTest.class); 063 return suite; 064 } 065 066 067 TermOrder to; 068 069 070 GenSolvablePolynomialRing<BigRational> fac; 071 072 073 List<GenSolvablePolynomial<BigRational>> L, M; 074 075 076 PolynomialList<BigRational> F; 077 078 079 List<GenSolvablePolynomial<BigRational>> G; 080 081 082 SolvableGroebnerBase<BigRational> bb; 083 084 085 GenSolvablePolynomial<BigRational> a, b, c, d, e; 086 087 088 int rl = 4; // even for Weyl relations 089 090 091 int kl = 2; //10 092 093 094 int ll = 3; //7 095 096 097 int el = 3; 098 099 100 float q = 0.15f; //0.4f 101 102 103 @Override 104 protected void setUp() { 105 BigRational coeff = new BigRational(17, 1); 106 to = new TermOrder( /*TermOrder.INVLEX*/); 107 String[] vars = new String[] { "w", "x", "y", "z" }; 108 fac = new GenSolvablePolynomialRing<BigRational>(coeff, rl, to, vars); 109 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 110 wl.generate(fac); 111 bb = new SolvableGroebnerBaseSeq<BigRational>(); 112 //bb = GBFactory.getImplementation(coeff); 113 a = b = c = d = e = null; 114 } 115 116 117 @Override 118 protected void tearDown() { 119 a = b = c = d = e = null; 120 fac = null; 121 bb = null; 122 ComputerThreads.terminate(); 123 } 124 125 126 /** 127 * Test Ideal sum. 128 */ 129 public void testIdealSum() { 130 SolvableIdeal<BigRational> I, J, K; 131 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 132 133 a = fac.random(kl, ll, el, q); 134 b = fac.random(kl, ll, el, q); 135 c = fac.random(kl, ll, el, q); 136 d = fac.random(kl, ll, el, q); 137 e = d; //fac.random(kl, ll, el, q ); 138 139 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 140 return; 141 } 142 143 assertTrue("not isZERO( a )", !a.isZERO()); 144 L.add(a); 145 146 I = new SolvableIdeal<BigRational>(fac, L, true); 147 assertTrue("not isZERO( I )", !I.isZERO()); 148 assertTrue("not isONE( I )", !I.isONE()); 149 assertTrue("isGB( I )", I.isGB()); 150 151 I = new SolvableIdeal<BigRational>(fac, L, false); 152 assertTrue("not isZERO( I )", !I.isZERO()); 153 assertTrue("not isONE( I )", !I.isONE()); 154 assertTrue("isGB( I )", I.isGB()); 155 156 L = bb.leftGB(L); 157 assertTrue("isGB( { a } )", bb.isLeftGB(L)); 158 159 I = new SolvableIdeal<BigRational>(fac, L, true); 160 assertTrue("not isZERO( I )", !I.isZERO()); 161 //assertTrue("not isONE( I )", !I.isONE() ); 162 assertTrue("isGB( I )", I.isGB()); 163 164 I = new SolvableIdeal<BigRational>(fac, L, false); 165 assertTrue("not isZERO( I )", !I.isZERO()); 166 //assertTrue("not isONE( I )", !I.isONE() ); 167 assertTrue("isGB( I )", I.isGB()); 168 169 assertTrue("not isZERO( b )", !b.isZERO()); 170 L.add(b); 171 //System.out.println("L = " + L.size() ); 172 173 I = new SolvableIdeal<BigRational>(fac, L, false); 174 assertTrue("not isZERO( I )", !I.isZERO()); 175 //assertTrue("not isONE( I )", !I.isONE() ); 176 //assertTrue("not isGB( I )", !I.isGB() ); 177 178 L = bb.leftGB(L); 179 assertTrue("isGB( { a, b } )", bb.isLeftGB(L)); 180 181 I = new SolvableIdeal<BigRational>(fac, L, true); 182 assertTrue("not isZERO( I )", !I.isZERO()); 183 // assertTrue("not isONE( I )", !I.isONE() ); 184 assertTrue("isGB( I )", I.isGB()); 185 186 J = I; 187 K = J.sum(I); 188 assertTrue("not isZERO( K )", !K.isZERO()); 189 assertTrue("isGB( K )", K.isGB()); 190 assertTrue("equals( K, I )", K.equals(I)); 191 192 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 193 assertTrue("not isZERO( c )", !c.isZERO()); 194 L.add(c); 195 assertTrue("isGB( { c } )", bb.isLeftGB(L)); 196 197 J = new SolvableIdeal<BigRational>(fac, L, true); 198 K = J.sum(I); 199 assertTrue("not isZERO( K )", !K.isZERO()); 200 assertTrue("isGB( K )", K.isGB()); 201 assertTrue("K contains(I)", K.contains(I)); 202 assertTrue("K contains(J)", K.contains(J)); 203 204 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 205 assertTrue("not isZERO( d )", !d.isZERO()); 206 L.add(d); 207 208 assertTrue("isGB( { d } )", bb.isLeftGB(L)); 209 J = new SolvableIdeal<BigRational>(fac, L, true); 210 I = K; 211 K = J.sum(I); 212 assertTrue("not isZERO( K )", !K.isZERO()); 213 assertTrue("isGB( K )", K.isGB()); 214 assertTrue("K contains(I)", K.contains(I)); 215 assertTrue("K contains(J)", K.contains(J)); 216 217 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 218 assertTrue("not isZERO( e )", !e.isZERO()); 219 L.add(e); 220 221 assertTrue("isGB( { e } )", bb.isLeftGB(L)); 222 J = new SolvableIdeal<BigRational>(fac, L, true); 223 I = K; 224 K = J.sum(I); 225 assertTrue("not isZERO( K )", !K.isZERO()); 226 assertTrue("isGB( K )", K.isGB()); 227 assertTrue("equals( K, I )", K.equals(I)); 228 assertTrue("K contains(J)", K.contains(I)); 229 assertTrue("I contains(K)", I.contains(K)); 230 } 231 232 233 /** 234 * Test SolvableIdeal product. 235 */ 236 public void testSolvableIdealProduct() { 237 SolvableIdeal<BigRational> I, J, K, H; 238 a = fac.random(kl, ll, el, q); 239 b = fac.random(kl, ll, el - 1, q); 240 c = fac.random(kl, ll, el - 1, q); 241 d = c; //fac.random(kl, ll, el, q); 242 e = d; //fac.random(kl, ll, el, q ); 243 244 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 245 return; 246 } 247 248 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 249 //assertTrue("not isZERO( a )", !a.isZERO()); 250 L.add(a); 251 252 I = new SolvableIdeal<BigRational>(fac, L, false); 253 assertTrue("not isZERO( I )", !I.isZERO()); 254 assertTrue("not isONE( I )", !I.isONE() || a.isConstant()); 255 assertTrue("isGB( I )", I.isGB()); 256 257 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 258 assertTrue("not isZERO( b )", !a.isZERO()); 259 L.add(b); 260 261 J = new SolvableIdeal<BigRational>(fac, L, false); 262 assertTrue("not isZERO( J )", !J.isZERO()); 263 assertTrue("not isONE( J )", !J.isONE() || a.isConstant() || b.isConstant()); 264 assertTrue("isGB( J )", J.isGB()); 265 266 K = I.product(J); 267 //System.out.println("I = " + I); 268 //System.out.println("J = " + J); 269 //System.out.println("K = " + K); 270 assertTrue("not isZERO( K )", !K.isZERO()); 271 assertTrue("isGB( K )", K.isGB()); 272 //non-com assertTrue("I contains(K)", I.contains(K)); 273 assertTrue("J contains(K)", J.contains(K)); 274 275 H = I.intersect(J); 276 assertTrue("not isZERO( H )", !H.isZERO()); 277 assertTrue("isGB( H )", H.isGB()); 278 assertTrue("I contains(H)", I.contains(H)); 279 assertTrue("J contains(H)", J.contains(H)); 280 //non-com assertTrue("H contains(K)", H.contains(K)); 281 282 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 283 assertTrue("not isZERO( a )", !a.isZERO()); 284 L.add(a); 285 assertTrue("not isZERO( c )", !c.isZERO()); 286 L.add(c); 287 L = bb.leftGB(L); 288 289 I = new SolvableIdeal<BigRational>(fac, L, true); 290 assertTrue("not isZERO( I )", !I.isZERO()); 291 //assertTrue("not isONE( I )", !I.isONE() ); 292 assertTrue("isGB( I )", I.isGB()); 293 294 K = I.product(J); 295 assertTrue("not isZERO( K )", !K.isZERO()); 296 assertTrue("isGB( K )", K.isGB()); 297 //non-com assertTrue("I contains(K)", I.contains(K)); 298 assertTrue("J contains(K)", J.contains(K)); 299 300 H = I.intersect(J); 301 assertTrue("not isZERO( H )", !H.isZERO()); 302 assertTrue("isGB( H )", H.isGB()); 303 assertTrue("I contains(H)", I.contains(H)); 304 assertTrue("J contains(H)", J.contains(H)); 305 //non-com assertTrue("H contains(K)", H.contains(K)); 306 307 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 308 assertTrue("not isZERO( b )", !b.isZERO()); 309 L.add(b); 310 assertTrue("not isZERO( d )", !d.isZERO()); 311 L.add(d); 312 L = bb.leftGB(L); 313 314 J = new SolvableIdeal<BigRational>(fac, L, true); 315 assertTrue("not isZERO( J )", !J.isZERO()); 316 //assertTrue("not isONE( J )", !J.isONE() ); 317 assertTrue("isGB( J )", J.isGB()); 318 319 K = I.product(J); 320 assertTrue("not isZERO( K )", !K.isZERO()); 321 assertTrue("isGB( K )", K.isGB()); 322 //non-com assertTrue("I contains(K)", I.contains(K)); 323 assertTrue("J contains(K)", J.contains(K)); 324 325 H = I.intersect(J); 326 assertTrue("not isZERO( H )", !H.isZERO()); 327 assertTrue("isGB( H )", H.isGB()); 328 assertTrue("I contains(H)", I.contains(H)); 329 assertTrue("J contains(H)", J.contains(H)); 330 //non-com assertTrue("H contains(K)", H.contains(K)); 331 } 332 333 334 /** 335 * Test SolvableIdeal quotient. 336 */ 337 public void testSolvableIdealQuotient() { 338 SolvableIdeal<BigRational> I, J, K, H; 339 a = fac.random(kl, ll - 2, el, q); 340 b = fac.random(kl, ll, el, q / 2); 341 c = fac.random(kl, ll, el - 1, q); 342 d = c; //fac.random(kl, ll, el, q); 343 e = d; //fac.random(kl, ll, el, q ); 344 345 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 346 return; 347 } 348 349 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 350 assertTrue("not isZERO( a )", !a.isZERO()); 351 L.add(a); 352 L = bb.leftGB(L); 353 354 I = new SolvableIdeal<BigRational>(fac, L, true); 355 assertTrue("not isZERO( I )", !I.isZERO()); 356 //assertTrue("not isONE( I )", !I.isONE() ); 357 assertTrue("isGB( I )", I.isGB()); 358 359 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 360 assertTrue("not isZERO( b )", !a.isZERO()); 361 L.add(b); 362 L = bb.leftGB(L); 363 364 J = new SolvableIdeal<BigRational>(fac, L, true); 365 assertTrue("not isZERO( J )", !J.isZERO()); 366 //assertTrue("not isONE( J )", !J.isONE() ); 367 assertTrue("isGB( J )", J.isGB()); 368 369 K = I.product(J); 370 assertTrue("not isZERO( K )", !K.isZERO()); 371 assertTrue("isGB( K )", K.isGB()); 372 //non-com assertTrue("I contains(K)", I.contains(K)); 373 assertTrue("J contains(K)", J.contains(K)); 374 375 H = K.quotient(J.getList().get(0)); 376 assertTrue("not isZERO( H )", !H.isZERO()); 377 assertTrue("isGB( H )", H.isGB()); 378 //non-com assertTrue("equals(H,I)", H.equals(I)); // GBs only 379 380 H = K.quotient(J); 381 assertTrue("not isZERO( H )", !H.isZERO()); 382 assertTrue("isGB( H )", H.isGB()); 383 //non-com assertTrue("equals(H,I)", H.equals(I)); // GBs only 384 385 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 386 assertTrue("not isZERO( b )", !b.isZERO()); 387 L.add(b); 388 assertTrue("not isZERO( c )", !c.isZERO()); 389 L.add(c); 390 L = bb.leftGB(L); 391 392 J = new SolvableIdeal<BigRational>(fac, L, true); 393 assertTrue("not isZERO( J )", !J.isZERO()); 394 //assertTrue("not isONE( J )", !J.isONE() ); 395 assertTrue("isGB( J )", J.isGB()); 396 397 K = I.product(J); 398 assertTrue("not isZERO( K )", !K.isZERO()); 399 assertTrue("isGB( K )", K.isGB()); 400 //non-com assertTrue("I contains(K)", I.contains(K)); 401 assertTrue("J contains(K)", J.contains(K)); 402 403 H = K.quotient(J); 404 assertTrue("not isZERO( H )", !H.isZERO()); 405 assertTrue("isGB( H )", H.isGB()); 406 //non-com assertTrue("equals(H,I)", H.equals(I)); // GBs only 407 408 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 409 assertTrue("not isZERO( a )", !a.isZERO()); 410 L.add(a); 411 assertTrue("not isZERO( d )", !d.isZERO()); 412 L.add(d); 413 L = bb.leftGB(L); 414 415 I = new SolvableIdeal<BigRational>(fac, L, true); 416 assertTrue("not isZERO( I )", !I.isZERO()); 417 //assertTrue("not isONE( J )", !J.isONE() ); 418 assertTrue("isGB( I )", I.isGB()); 419 420 K = I.product(J); 421 assertTrue("not isZERO( K )", !K.isZERO()); 422 assertTrue("isGB( K )", K.isGB()); 423 //non-com assertTrue("I contains(K)", I.contains(K)); 424 assertTrue("J contains(K)", J.contains(K)); 425 426 H = K.quotient(J); 427 assertTrue("not isZERO( H )", !H.isZERO()); 428 assertTrue("isGB( H )", H.isGB()); 429 //non-com assertTrue("equals(H,I)", H.equals(I)); // GBs only 430 } 431 432 433 /** 434 * Test SolvableIdeal infinite quotient. 435 */ 436 public void testSolvableIdealInfiniteQuotient() { 437 SolvableIdeal<BigRational> I, J, K; 438 a = fac.random(kl, ll - 2, el, q); 439 b = fac.random(kl, ll - 1, el - 1, q); 440 c = fac.random(kl, ll / 2, el - 1, q / 2); 441 //a = fac.parse(" -1/2 w"); 442 //b = fac.parse(" y - 2/3"); 443 //c = fac.parse(" -2 w * y + 4/3 w + 2"); 444 //c = fac.parse(" -2 y^2 + 8/3 y - 8/9"); 445 d = c; //fac.random(kl, ll, el, q); 446 e = d; //fac.random(kl, ll, el, q ); 447 448 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 449 return; 450 } 451 452 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 453 assertTrue("not isZERO( b )", !b.isZERO()); 454 L.add(b); 455 L = bb.leftGB(L); 456 I = new SolvableIdeal<BigRational>(fac, L, true); 457 assertTrue("not isZERO( I )", !I.isZERO()); 458 //assertTrue("not isONE( I )", !I.isONE() ); 459 assertTrue("isGB( I )", I.isGB()); 460 461 J = I.infiniteQuotient(a); 462 463 assertTrue("not isZERO( c )", !c.isZERO()); 464 L.add(c); 465 L = bb.leftGB(L); 466 I = new SolvableIdeal<BigRational>(fac, L, true); 467 assertTrue("not isZERO( I )", !I.isZERO()); 468 //assertTrue("not isONE( I )", !I.isONE() ); 469 assertTrue("isGB( I )", I.isGB()); 470 471 J = I.infiniteQuotient(a); 472 assertTrue("equals(J,I)", J.equals(I)); // GBs only 473 474 assertTrue("not isZERO( d )", !d.isZERO()); 475 L.add(d); 476 L = bb.leftGB(L); 477 I = new SolvableIdeal<BigRational>(fac, L, true); 478 assertTrue("not isZERO( I )", !I.isZERO()); 479 //assertTrue("not isONE( I )", !I.isONE() ); 480 assertTrue("isGB( I )", I.isGB()); 481 482 J = I.infiniteQuotient(a); 483 assertTrue("isGB( J )", J.isGB()); 484 assertTrue("equals(J,I)", J.equals(I)); // GBs only 485 486 G = new ArrayList<GenSolvablePolynomial<BigRational>>(); 487 assertTrue("not isZERO( a )", !a.isZERO()); 488 G.add(a); 489 G = bb.leftGB(G); 490 K = new SolvableIdeal<BigRational>(fac, G, true); 491 assertTrue("not isZERO( K )", !K.isZERO()); 492 //assertTrue("not isONE( I )", !I.isONE() ); 493 assertTrue("isGB( K )", K.isGB()); 494 495 J = I.infiniteQuotient(K); 496 assertTrue("equals(J,I)", J.equals(I)); // GBs only 497 498 assertTrue("not isZERO( e )", !e.isZERO()); 499 G.add(e); 500 G = bb.leftGB(G); 501 K = new SolvableIdeal<BigRational>(fac, G, true); 502 assertTrue("not isZERO( K )", !K.isZERO()); 503 //assertTrue("not isONE( I )", !I.isONE() ); 504 assertTrue("isGB( K )", K.isGB()); 505 506 J = I.infiniteQuotient(K); 507 assertTrue("equals(J,I)", J.equals(I)); // GBs only 508 } 509 510 511 /** 512 * Test (commutative) SolvableIdeal infinite quotient with Rabinowich trick. 513 */ 514 public void testSolvableIdealInfiniteQuotientRabi() { 515 fac = new GenSolvablePolynomialRing<BigRational>(fac.coFac, rl, fac.tord, fac.getVars()); 516 SolvableIdeal<BigRational> I, J, K, JJ; 517 a = fac.random(kl - 1, ll - 1, el - 1, q / 2); 518 b = fac.random(kl - 1, ll - 1, el, q / 2); 519 c = fac.random(kl - 1, ll - 1, el, q / 2); 520 d = fac.random(kl - 1, ll - 1, el, q / 2); 521 e = a; //fac.random(kl, ll-1, el, q ); 522 523 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 524 return; 525 } 526 527 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 528 assertTrue("not isZERO( b )", !b.isZERO()); 529 L.add(b); 530 L = bb.leftGB(L); 531 I = new SolvableIdeal<BigRational>(fac, L, true); 532 assertTrue("not isZERO( I )", !I.isZERO()); 533 //assertTrue("not isONE( I )", !I.isONE() ); 534 assertTrue("isGB( I )", I.isGB()); 535 536 J = I.infiniteQuotientRab(a); 537 JJ = I.infiniteQuotient(a); 538 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 539 540 assertTrue("not isZERO( c )", !c.isZERO()); 541 L.add(c); 542 L = bb.leftGB(L); 543 I = new SolvableIdeal<BigRational>(fac, L, true); 544 assertTrue("not isZERO( I )", !I.isZERO()); 545 //assertTrue("not isONE( I )", !I.isONE() ); 546 assertTrue("isGB( I )", I.isGB()); 547 548 J = I.infiniteQuotientRab(a); 549 assertTrue("equals(J,I)", J.equals(I)); // GBs only 550 JJ = I.infiniteQuotient(a); 551 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 552 553 assertTrue("not isZERO( d )", !d.isZERO()); 554 L.add(d); 555 L = bb.leftGB(L); 556 I = new SolvableIdeal<BigRational>(fac, L, true); 557 assertTrue("not isZERO( I )", !I.isZERO()); 558 //assertTrue("not isONE( I )", !I.isONE() ); 559 assertTrue("isGB( I )", I.isGB()); 560 561 J = I.infiniteQuotientRab(a); 562 assertTrue("isGB( J )", J.isGB()); 563 assertTrue("equals(J,I)", J.equals(I)); // GBs only 564 JJ = I.infiniteQuotient(a); 565 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 566 567 G = new ArrayList<GenSolvablePolynomial<BigRational>>(); 568 assertTrue("not isZERO( a )", !a.isZERO()); 569 G.add(a); 570 G = bb.leftGB(G); 571 K = new SolvableIdeal<BigRational>(fac, G, true); 572 assertTrue("not isZERO( K )", !K.isZERO()); 573 //assertTrue("not isONE( I )", !I.isONE() ); 574 assertTrue("isGB( K )", K.isGB()); 575 576 J = I.infiniteQuotientRab(K); 577 assertTrue("equals(J,I)", J.equals(I)); // GBs only 578 JJ = I.infiniteQuotient(a); 579 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 580 581 assertTrue("not isZERO( e )", !e.isZERO()); 582 G.add(e); 583 G = bb.leftGB(G); 584 K = new SolvableIdeal<BigRational>(fac, G, true); 585 assertTrue("not isZERO( K )", !K.isZERO()); 586 //assertTrue("not isONE( I )", !I.isONE() ); 587 assertTrue("isGB( K )", K.isGB()); 588 589 J = I.infiniteQuotientRab(K); 590 assertTrue("equals(J,I)", J.equals(I)); // GBs only 591 JJ = I.infiniteQuotient(a); 592 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 593 } 594 595 596 /** 597 * Test (commutative) SolvableIdeal radical membership. 598 */ 599 public void testSolvableIdealRadicalMember() { 600 fac = new GenSolvablePolynomialRing<BigRational>(fac.coFac, rl, fac.tord, fac.getVars()); 601 SolvableIdeal<BigRational> I; 602 a = fac.random(kl - 1, ll, el - 1, q); 603 b = fac.random(kl - 1, ll, el, q); 604 c = fac.random(kl - 1, ll - 1, el, q / 2); 605 //d = fac.random(kl - 1, ll - 1, el, q / 2); 606 //e = a; //fac.random(kl, ll-1, el, q ); 607 608 if (a.isZERO() || b.isZERO() || c.isZERO()) { 609 return; 610 } 611 612 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 613 L.add(b); 614 L = bb.leftGB(L); 615 I = new SolvableIdeal<BigRational>(fac, L, true); 616 assertTrue("not isZERO( I )", !I.isZERO()); 617 //assertTrue("not isONE( I )", !I.isONE() ); 618 assertTrue("isGB( I )", I.isGB()); 619 620 //System.out.println("a = " + a); 621 //System.out.println("b = " + b); 622 //System.out.println("I = " + I); 623 624 if (!I.isONE() && !a.equals(b)) { 625 assertFalse("a in radical(b)", I.isRadicalMember(a)); 626 assertTrue("b in radical(b)", I.isRadicalMember(b)); 627 } 628 629 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 630 L.add(b.multiply(b)); 631 L = bb.leftGB(L); 632 I = new SolvableIdeal<BigRational>(fac, L, true); 633 assertTrue("not isZERO( I )", !I.isZERO()); 634 //assertTrue("not isONE( I )", !I.isONE() ); 635 assertTrue("isGB( I )", I.isGB()); 636 637 //System.out.println("I = " + I); 638 639 if (!I.isONE() && !a.equals(b)) { 640 assertFalse("a in radical(b*b)", I.isRadicalMember(a)); 641 assertTrue("b in radical(b*b)", I.isRadicalMember(b)); 642 } 643 644 //System.out.println("c = " + c); 645 L.add(c); 646 L = bb.leftGB(L); 647 I = new SolvableIdeal<BigRational>(fac, L, true); 648 assertTrue("not isZERO( I )", !I.isZERO()); 649 //assertTrue("not isONE( I )", !I.isONE() ); 650 assertTrue("isGB( I )", I.isGB()); 651 652 //System.out.println("I = " + I); 653 654 if (!I.isONE() && !a.equals(b)) { 655 assertFalse("a in radical(b*b,c)", I.isRadicalMember(a)); 656 assertTrue("b in radical(b*b,c)", I.isRadicalMember(b)); 657 } 658 } 659 660 661 /** 662 * Test SolvableIdeal common zeros. 663 */ 664 @SuppressWarnings("cast") 665 public void testSolvableIdealCommonZeros() { 666 SolvableIdeal<BigRational> I; 667 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 668 669 I = new SolvableIdeal<BigRational>(fac, L, true); 670 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 671 672 a = fac.getZERO(); 673 L.add(a); 674 I = new SolvableIdeal<BigRational>(fac, L, true); 675 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 676 677 b = fac.getONE(); 678 L.add(b); 679 I = new SolvableIdeal<BigRational>(fac, L, true); 680 assertEquals("commonZeroTest( I )", I.commonZeroTest(), -1); 681 682 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 683 a = fac.random(kl, ll, el, q); 684 if (!a.isZERO() && !a.isConstant()) { 685 L.add(a); 686 I = new SolvableIdeal<BigRational>(fac, L, true); 687 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 688 } 689 690 L = (List<GenSolvablePolynomial<BigRational>>) fac.univariateList(); 691 I = new SolvableIdeal<BigRational>(fac, L, true); 692 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 0); 693 694 L.remove(0); 695 I = new SolvableIdeal<BigRational>(fac, L, true); 696 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 697 } 698 699 700 /** 701 * Test SolvableIdeal dimension. 702 */ 703 @SuppressWarnings("cast") 704 public void testSolvableIdealDimension() { 705 SolvableIdeal<BigRational> I; 706 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 707 Dimension dim; 708 709 I = new SolvableIdeal<BigRational>(fac, L, true); 710 assertEquals("dimension( I )", rl, I.dimension().d); 711 712 a = fac.getZERO(); 713 L.add(a); 714 I = new SolvableIdeal<BigRational>(fac, L, true); 715 assertEquals("dimension( I )", rl, I.dimension().d); 716 717 b = fac.getONE(); 718 L.add(b); 719 I = new SolvableIdeal<BigRational>(fac, L, true); 720 assertEquals("dimension( I )", -1, I.dimension().d); 721 722 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 723 a = fac.random(kl, ll, el, q); 724 if (!a.isZERO() && !a.isConstant()) { 725 L.add(a); 726 I = new SolvableIdeal<BigRational>(fac, L, true); 727 //System.out.println("a = " + a); 728 dim = I.dimension(); 729 //System.out.println("dim(I) = " + dim); 730 assertTrue("dimension( I )", dim.d >= 1); 731 } 732 733 L = (List<GenSolvablePolynomial<BigRational>>) fac.univariateList(); 734 I = new SolvableIdeal<BigRational>(fac, L, true); 735 dim = I.dimension(); 736 assertEquals("dimension( I )", 0, dim.d); 737 738 while (L.size() > 0) { 739 L.remove(0); 740 I = new SolvableIdeal<BigRational>(fac, L, true); 741 //System.out.println("I = " + I); 742 dim = I.dimension(); 743 //System.out.println("dim(I) = " + dim); 744 assertEquals("dimension( I )", rl - L.size(), dim.d); 745 } 746 747 L = (List<GenSolvablePolynomial<BigRational>>) fac.univariateList(); 748 I = new SolvableIdeal<BigRational>(fac, L, true); 749 I = I.product(I); 750 //System.out.println("I = " + I); 751 dim = I.dimension(); 752 //System.out.println("dim(I) = " + dim); 753 assertTrue("dimension( I )", 0 >= dim.d); 754 755 L = I.getList(); 756 while (L.size() > 0) { 757 L.remove(0); 758 I = new SolvableIdeal<BigRational>(fac, L, true); 759 //System.out.println("I = " + I); 760 dim = I.dimension(); 761 //System.out.println("dim(I) = " + dim); 762 assertTrue("dimension( I )", dim.d > 0); 763 } 764 } 765 766 767 /** 768 * Test elimination SolvableIdeals. 769 */ 770 public void testElimSolvableIdeal() { 771 String[] vars = fac.getVars(); 772 //System.out.println("vars = " + Arrays.toString(vars)); 773 //System.out.println("fac = " + fac); 774 775 SolvableIdeal<BigRational> I, J; 776 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 777 //non-com 778 a = fac.univariate(0, 3L); //fac.random(kl, ll, el, q ); 779 b = fac.univariate(1, 2L); //fac.random(kl, ll, el, q ); 780 c = fac.univariate(0, 1L); //fac.random(kl, ll, el, q ); 781 782 if (a.isZERO() || b.isZERO() || c.isZERO()) { 783 return; 784 } 785 786 L.add(a); 787 L.add(b); 788 L.add(c); 789 790 I = new SolvableIdeal<BigRational>(fac, L); 791 I.doGB(); 792 assertTrue("not isZERO( I )", !I.isZERO()); 793 assertTrue("not isONE( I )", !I.isONE()); 794 assertTrue("isGB( I )", I.isGB()); 795 //System.out.println("I = " + I); 796 797 List<String> sv = new ArrayList<String>(vars.length); 798 for (int i = 0; i < vars.length; i++) { 799 sv.add(vars[i]); 800 } 801 //System.out.println("sv = " + sv); 802 803 for (int i = 2; i <= vars.length; i = i + 2) { 804 KsubSet<String> ps = new KsubSet<String>(sv, i); 805 //System.out.println("========================== ps : " + i); 806 for (List<String> ev : ps) { 807 //System.out.println("ev = " + ev); 808 809 String[] evars = new String[ev.size()]; 810 for (int j = 0; j < ev.size(); j++) { 811 evars[j] = ev.get(j); 812 } 813 GenSolvablePolynomialRing<BigRational> efac; 814 efac = new GenSolvablePolynomialRing<BigRational>(fac.coFac, evars.length, fac.tord, evars); 815 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 816 wl.generate(efac); 817 //System.out.println("efac = " + efac); 818 819 J = I.eliminate(efac); 820 //System.out.println("J = " + J); 821 assertTrue("isGB( J )", J.isGB()); 822 assertTrue("size( J ) <= |ev|", J.getList().size() <= ev.size()); 823 //System.out.println("J = " + J); 824 break; // non-com 825 } 826 } 827 } 828 829 830 /** 831 * Test univariate polynomials in ideal. 832 */ 833 public void testUnivPoly() { 834 String[] vars; 835 BigRational coeff = new BigRational(17, 1); 836 to = new TermOrder(TermOrder.INVLEX); 837 vars = new String[] { "w", "x", "y", "z" }; 838 fac = new GenSolvablePolynomialRing<BigRational>(coeff, rl, to, vars); 839 840 vars = fac.getVars(); 841 //System.out.println("vars = " + Arrays.toString(vars)); 842 //System.out.println("fac = " + fac); 843 assertTrue("vars.length == 4 ", vars.length == 4); 844 845 SolvableIdeal<BigRational> I; 846 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 847 848 a = fac.parse("( x^3 + 34/55 x^2 + 1/9 x + 99 )"); 849 b = fac.parse("( y^4 - x )"); 850 c = fac.parse("( z^3 - x y )"); 851 d = fac.parse("( w^2 + 3 )"); 852 853 if (a.isZERO() || b.isZERO() || c.isZERO()) { 854 return; 855 } 856 857 L.add(a); 858 L.add(b); 859 L.add(c); 860 L.add(d); 861 I = new SolvableIdeal<BigRational>(fac, L); 862 //I.doGB(); 863 assertTrue("not isZERO( I )", !I.isZERO()); 864 assertTrue("isGB( I )", I.isGB()); 865 //System.out.println("I = " + I); 866 867 for (int i = 0; i < rl; i++) { // rl 868 GenSolvablePolynomial<BigRational> u = I.constructUnivariate(rl - 1 - i); 869 //System.out.println("u = " + u); 870 GenSolvablePolynomial<BigRational> U = fac.parse(u.toString()); 871 //System.out.println("U = " + U + "\n"); 872 assertTrue("I.contains(U) ", I.contains(U)); 873 } 874 875 List<GenSolvablePolynomial<BigRational>> Us = I.constructUnivariate(); 876 for (GenSolvablePolynomial<BigRational> u : Us) { 877 //System.out.println("u = " + u); 878 GenSolvablePolynomial<BigRational> U = fac.parse(u.toString()); 879 //System.out.println("U = " + U + "\n"); 880 assertTrue("I.contains(U) ", I.contains(U)); 881 } 882 } 883 884 885 /** 886 * Test SolvableIdeal annihilator. 887 */ 888 public void testAnnihilator() { 889 SolvableIdeal<BigRational> I, J, K; 890 do { 891 a = fac.random(kl, ll, el, q); 892 } while (a.isZERO() || a.isConstant()); 893 b = fac.univariate(1); 894 c = fac.univariate(rl - 1); 895 //b = fac.random(kl - 1, ll, el, q); 896 //c = fac.random(kl - 1, ll - 1, el, q / 2); 897 898 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 899 L.add(a); 900 L.add(b); 901 //L.add(c); 902 //System.out.println("L = " + L); 903 L = bb.leftGB(L); 904 I = new SolvableIdeal<BigRational>(fac, L, true); 905 assertTrue("isGB( I )", I.isGB()); 906 //System.out.println("I = " + I + "\n"); 907 908 J = I.annihilator(c); 909 //System.out.println("J = " + J + "\n"); 910 J.doGB(); 911 //System.out.println("c = " + c); 912 //System.out.println("J = " + J + "\n"); 913 assertTrue("isAnnihilator(c,J)", I.isAnnihilator(c, J)); 914 915 d = fac.univariate(rl - 2); 916 //d = fac.random(kl - 1, ll, el, q); 917 M = new ArrayList<GenSolvablePolynomial<BigRational>>(); 918 M.add(c); 919 M.add(d); 920 //System.out.println("M = " + M); 921 K = new SolvableIdeal<BigRational>(fac, M); 922 //System.out.println("K = " + K + "\n"); 923 924 J = I.annihilator(K); 925 //System.out.println("J = " + J + "\n"); 926 J.doGB(); 927 //System.out.println("K = " + K); 928 //System.out.println("J = " + J + "\n"); 929 assertTrue("isAnnihilator(M,J)", I.isAnnihilator(K, J)); 930 } 931 932}