001/* 002 * $Id: QuotientSolvablePolynomialQLRTest.java 5134 2015-02-28 18:36:43Z kredel 003 * $ 004 */ 005 006package edu.jas.application; 007 008 009import java.util.List; 010 011import junit.framework.Test; 012import junit.framework.TestCase; 013import junit.framework.TestSuite; 014 015 016 017import edu.jas.arith.BigRational; 018import edu.jas.fd.SolvableQuotient; 019import edu.jas.fd.SolvableQuotientRing; 020import edu.jas.kern.ComputerThreads; 021import edu.jas.poly.ExpVector; 022import edu.jas.poly.GenPolynomial; 023import edu.jas.poly.GenSolvablePolynomial; 024import edu.jas.poly.GenSolvablePolynomialRing; 025import edu.jas.poly.QLRSolvablePolynomial; 026import edu.jas.poly.QLRSolvablePolynomialRing; 027import edu.jas.poly.RecSolvablePolynomial; 028import edu.jas.poly.RelationGenerator; 029import edu.jas.poly.TermOrder; 030import edu.jas.poly.WeylRelations; 031 032 033/** 034 * BigRational coefficients QuotientSolvablePolynomial QLR representation tests 035 * with JUnit. 036 * @author Heinz Kredel 037 */ 038 039public class QuotientSolvablePolynomialQLRTest extends TestCase { 040 041 042 /** 043 * main. 044 */ 045 public static void main(String[] args) { 046 047 junit.textui.TestRunner.run(suite()); 048 ComputerThreads.terminate(); 049 } 050 051 052 /** 053 * Constructs a <CODE>QuotientSolvablePolynomialQLRTest</CODE> object. 054 * @param name String. 055 */ 056 public QuotientSolvablePolynomialQLRTest(String name) { 057 super(name); 058 } 059 060 061 /** 062 */ 063 public static Test suite() { 064 TestSuite suite = new TestSuite(QuotientSolvablePolynomialQLRTest.class); 065 return suite; 066 } 067 068 069 QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational> a, b, c, d, e, f, x1, x2; 070 071 072 int rl = 4; 073 074 075 int kl = 1; 076 077 078 int ll = 3; 079 080 081 int el = 3; 082 083 084 float q = 0.15f; 085 086 087 String[] cvars = new String[] { "a", "b" }; 088 089 090 String[] vars = new String[] { "w", "x", "y", "z" }; 091 092 093 QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational> ring; 094 095 096 BigRational cfac; 097 098 099 GenSolvablePolynomialRing<SolvableQuotient<BigRational>> sring; 100 101 102 GenSolvablePolynomialRing<BigRational> cring; 103 104 105 SolvableQuotientRing<BigRational> qcring; 106 107 108 TermOrder tord = new TermOrder(TermOrder.INVLEX); 109 110 111 @Override 112 protected void setUp() { 113 cfac = new BigRational(1); 114 cring = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars); 115 RelationGenerator<BigRational> wc = new WeylRelations<BigRational>(); 116 cring.addRelations(wc); 117 qcring = new SolvableQuotientRing<BigRational>(cring); 118 ring = new QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational>(qcring, tord, vars); 119 RelationGenerator<SolvableQuotient<BigRational>> wl = new WeylRelations<SolvableQuotient<BigRational>>(); 120 ring.addRelations(wl); 121 a = b = c = d = e = null; 122 } 123 124 125 @Override 126 protected void tearDown() { 127 ring = null; 128 a = b = c = d = e = null; 129 } 130 131 132 /** 133 * Test constructor, generators and properties. 134 */ 135 public void testConstructor() { 136 assertFalse("not commutative", ring.isCommutative()); 137 assertTrue("associative", ring.isAssociative()); 138 139 a = new QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>(ring); 140 assertTrue("length( a ) = 0", a.length() == 0); 141 assertTrue("isZERO( a )", a.isZERO()); 142 assertTrue("isONE( a )", !a.isONE()); 143 144 c = ring.getONE(); 145 assertTrue("length( c ) = 1", c.length() == 1); 146 assertTrue("isZERO( c )", !c.isZERO()); 147 assertTrue("isONE( c )", c.isONE()); 148 149 d = ring.getZERO(); 150 assertTrue("length( d ) = 0", d.length() == 0); 151 assertTrue("isZERO( d )", d.isZERO()); 152 assertTrue("isONE( d )", !d.isONE()); 153 //System.out.println("d = " + d); 154 155 //System.out.println(""); 156 for (GenPolynomial<SolvableQuotient<BigRational>> g : ring.generators()) { 157 //System.out.println("g = " + g + ", "); 158 assertFalse("not isZERO( g )", g.isZERO()); 159 } 160 //System.out.println(""); 161 assertTrue("isAssociative: ", ring.isAssociative()); 162 } 163 164 165 /** 166 * Test random polynomial. 167 */ 168 public void testRandom() { 169 for (int i = 0; i < 5; i++) { 170 // a = ring.random(ll+2*i); 171 a = ring.random(kl, ll + 2 * i, el + i, q); 172 //System.out.println("a = " + a); 173 assertTrue("length( a" + i + " ) <> 0", a.length() >= 0); 174 assertTrue(" not isZERO( a" + i + " )", !a.isZERO()); 175 assertTrue(" not isONE( a" + i + " )", !a.isONE()); 176 } 177 } 178 179 180 /** 181 * Test addition. 182 */ 183 @SuppressWarnings("unchecked") 184 public void testAddition() { 185 a = ring.random(kl + 1, ll, el, q); 186 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(a); 187 assertTrue("a-a = 0", c.isZERO()); 188 189 b = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(a); 190 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.subtract(a); 191 assertEquals("a+a-a = a", c, a); 192 193 b = ring.random(kl, ll, el, q); 194 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.sum(a); 195 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b); 196 assertEquals("a+b = b+a", c, d); 197 198 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b); 199 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) c.subtract(b); 200 //System.out.println("a = " + a); 201 //System.out.println("d = " + d); 202 assertEquals("a+b-b = a", a, d); 203 204 c = ring.random(kl, ll, el, q); 205 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b.sum(c)); 206 e = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b).sum(c); 207 assertEquals("a+(b+c) = (a+b)+c", d, e); 208 //System.out.println("a = " + a); 209 //System.out.println("b = " + b); 210 //System.out.println("c = " + c); 211 //System.out.println("d = " + d); 212 //System.out.println("e = " + e); 213 214 ExpVector u = ExpVector.random(rl, el, q); 215 SolvableQuotient<BigRational> x = qcring.random(kl); 216 //System.out.println("x = " + x); 217 //System.out.println("u = " + u); 218 219 b = ring.getONE().multiply(x, u); 220 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b); 221 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(x, u); 222 //System.out.println("a = " + a); 223 //System.out.println("b = " + b); 224 //System.out.println("c = " + c); 225 //System.out.println("d = " + d); 226 assertEquals("a+p(x,u) = a+(x,u)", c, d); 227 228 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(b); 229 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(x, u); 230 assertEquals("a-p(x,u) = a-(x,u)", c, d); 231 232 a = ring.getZERO(); 233 b = ring.getONE().multiply(x, u); 234 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.sum(a); 235 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(x, u); 236 assertEquals("a+p(x,u) = a+(x,u)", c, d); 237 238 c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(b); 239 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(x, u); 240 assertEquals("a-p(x,u) = a-(x,u)", c, d); 241 } 242 243 244 /** 245 * Test multiplication. 246 */ 247 @SuppressWarnings("unchecked") 248 public void testMultiplication() { 249 //System.out.println("ring = " + ring); 250 a = ring.random(kl, ll - 1, el - 1, q); 251 //a = ring.parse(" b y z + a w z "); 252 b = ring.random(kl, ll - 1, el - 1, q); 253 //b = ring.parse(" w x - b x "); 254 255 c = b.multiply(a); 256 d = a.multiply(b); 257 //System.out.println("a = " + a); 258 //System.out.println("b = " + b); 259 //System.out.println("c = " + c); 260 //System.out.println("d = " + d); 261 assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector())); 262 263 c = ring.random(kl, ll - 1, el - 1, q); 264 d = a.multiply(b.multiply(c)); 265 e = a.multiply(b).multiply(c); 266 assertEquals("a(bc) = (ab)c", d, e); 267 //System.out.println("a = " + a); 268 //System.out.println("b = " + b); 269 //System.out.println("c = " + c); 270 //System.out.println("d = " + d); 271 //System.out.println("e = " + e); 272 273 SolvableQuotient<BigRational> xp = a.leadingBaseCoefficient().inverse(); 274 d = a.multiply(xp); 275 assertTrue("monic(a) = a*(1/ldcf(ldcf(a)))", d.leadingBaseCoefficient().isONE()); 276 //System.out.println("a = " + a); 277 //System.out.println("d = " + d); 278 279 d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.monic(); 280 assertTrue("a.monic(): ", d.leadingBaseCoefficient().isONE()); 281 } 282 283 284 /** 285 * Test commutative ring. 286 */ 287 @SuppressWarnings("unchecked") 288 public void testCommutative() { 289 //System.out.println("table = " + ring.table.toString(vars)); 290 //System.out.println("table = " + ring.table.toScript()); 291 //System.out.println("ring = " + ring); 292 //System.out.println("ring.table = " + ring.table.toScript()); 293 //assertEquals("table == ring.table: ", table, ring.table); // ? 294 assertTrue("# relations == 2", ring.table.size() == 2); 295 296 cring = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars); 297 qcring = new SolvableQuotientRing<BigRational>(cring); 298 ring = new QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational>(qcring, ring); 299 //System.out.println("ring = " + ring); 300 301 assertTrue("isCommutative()", ring.isCommutative()); 302 assertTrue("isAssociative()", ring.isAssociative()); 303 304 a = ring.random(kl, ll, el, q); 305 //a = ring.parse(" b x y z + a w z "); 306 //System.out.println("a = " + a); 307 b = ring.random(kl, ll, el, q); 308 //b = ring.parse(" w y z - b x "); 309 //System.out.println("b = " + b); 310 311 // commutative 312 c = b.multiply(a); 313 //System.out.println("c = " + c); 314 d = a.multiply(b); 315 //d = ring.getONE(); 316 //System.out.println("d = " + d); 317 assertEquals("b*a == a*b: ", c, d); 318 } 319 320 321 /** 322 * Test distributive law. 323 */ 324 @SuppressWarnings("unchecked") 325 public void testDistributive() { 326 a = ring.random(kl, ll, el, q); 327 b = ring.random(kl, ll, el, q); 328 c = ring.random(kl, ll, el, q); 329 330 d = a.multiply((QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.sum(c)); 331 e = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.multiply(b).sum( 332 a.multiply(c)); 333 assertEquals("a*(b+c) = a*b+a*c", d, e); 334 } 335 336 337 /** 338 * Test solvable coefficient ring. 339 */ 340 @SuppressWarnings("unchecked") 341 public void testSolvableCoeffs() { 342 GenSolvablePolynomialRing<BigRational> csring = new GenSolvablePolynomialRing<BigRational>(cfac, 343 tord, cvars); 344 //RelationGenerator<BigRational> wc = new WeylRelations<BigRational>(); 345 //no: csring.addRelations(wc); //wc.generate(csring); 346 //assertTrue("# relations == 1", csring.table.size() == 1); 347 assertTrue("isCommutative()", csring.isCommutative()); 348 assertTrue("isAssociative()", csring.isAssociative()); 349 350 SolvableQuotientRing<BigRational> qcsring = new SolvableQuotientRing<BigRational>(csring); 351 assertTrue("isCommutative()", qcsring.isCommutative()); 352 assertTrue("isAssociative()", qcsring.isAssociative()); 353 354 ring = new QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational>(qcsring, ring); 355 RelationGenerator<SolvableQuotient<BigRational>> wl = new WeylRelations<SolvableQuotient<BigRational>>(); 356 ring.addRelations(wl); //wl.generate(ring); 357 assertTrue("# relations == 2", ring.table.size() == 2); 358 assertFalse("isCommutative()", ring.isCommutative()); 359 assertTrue("isAssociative()", ring.isAssociative()); 360 //System.out.println("ring = " + ring); 361 362 RecSolvablePolynomial<BigRational> r1 = ring.polCoeff.parse("x"); 363 GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 364 RecSolvablePolynomial<BigRational> rp = ring.polCoeff.parse("b x + a"); // + a 365 //System.out.println("r1 = " + r1); 366 //System.out.println("r2 = " + r2); 367 //System.out.println("rp = " + rp); 368 ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 369 //System.out.println("ring = " + ring.toScript()); 370 //System.out.println("ring.polCoeff = " + ring.polCoeff); 371 assertFalse("isCommutative()", ring.isCommutative()); 372 assertTrue("isAssociative()", ring.isAssociative()); 373 374 List<GenPolynomial<SolvableQuotient<BigRational>>> gens = ring.generators(); 375 for (GenPolynomial<SolvableQuotient<BigRational>> x : gens) { 376 GenSolvablePolynomial<SolvableQuotient<BigRational>> xx = (GenSolvablePolynomial<SolvableQuotient<BigRational>>) x; 377 a = new QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>(ring, xx); 378 //System.out.println("a = " + a); 379 for (GenPolynomial<SolvableQuotient<BigRational>> y : gens) { 380 GenSolvablePolynomial<SolvableQuotient<BigRational>> yy = (GenSolvablePolynomial<SolvableQuotient<BigRational>>) y; 381 b = new QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>(ring, yy); 382 //System.out.println("b = " + b); 383 c = a.multiply(b); 384 //System.out.println("gens: " + a + " * " + b + " = " + c); 385 ExpVector ev = a.leadingExpVector().sum(b.leadingExpVector()); 386 assertTrue("LT(a)*LT(b) == LT(c)", c.leadingExpVector().equals(ev)); 387 } 388 } 389 //System.out.println("============="); 390 //a = ring.random(kl, ll, el, q); 391 //a = ring.getONE(); 392 a = ring.parse("x^2 + a b"); 393 //System.out.println("a = " + a.toScript()); 394 //b = ring.random(kl, ll, el, q); 395 //b = ring.getONE(); 396 b = ring.parse("a b + a"); // a b^2 + a 397 b = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.inverse(); 398 //System.out.println("b = " + b.toScript()); 399 400 // non-commutative 401 c = b.multiply(a); 402 d = a.multiply(b); 403 //System.out.println("a = " + a.toScript()); 404 //System.out.println("b = " + b.toScript()); 405 //System.out.println("c = " + c.toScript()); 406 //System.out.println("d = " + d.toScript()); 407 assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector())); 408 409 e = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.inverse(); 410 //System.out.println("e = " + e.toScript()); 411 assertTrue("b*b^-1 == 1", e.multiply(b).isONE()); 412 413 c = e.multiply(c); 414 d = d.multiply(e); 415 //System.out.println("a = " + a.toScript()); 416 //System.out.println("b = " + b.toScript()); 417 //System.out.println("c = " + c.toScript()); 418 //System.out.println("d = " + d.toScript()); 419 assertTrue("a == b * 1/b * a", a.equals(c)); 420 assertTrue("a == a * 1/b * b", a.equals(d)); 421 } 422 423 424 /* 425 * Test extension and contraction for Weyl relations. public void 426 * testExtendContractWeyl() { GenSolvablePolynomialRing<BigRational> csring 427 * = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars); 428 * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 429 * wlc.generate(csring); assertFalse("isCommutative()", csring.isCommutative()); 430 * assertTrue("isAssociative()", csring.isAssociative()); 431 * 432 * QLRSolvablePolynomial<BigRational> r1 = ring.parse("x"); 433 * GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 434 * QLRSolvablePolynomial<BigRational> rp = ring.parse("b x + a"); 435 * ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 436 * 437 * int k = rl; QLRSolvablePolynomialRing<BigRational> pfe = ring.extend(k); 438 * //System.out.println("pfe = " + pfe); 439 * QLRSolvablePolynomialRing<BigRational> pfec = pfe.contract(k); 440 * //System.out.println("pfec = " + pfec); assertEquals("ring == pfec", 441 * ring, pfec); 442 * 443 * QLRSolvablePolynomial<BigRational> a = ring.random(kl, ll, el, q); 444 * //System.out.println("a = " + a); 445 * 446 * QLRSolvablePolynomial<BigRational> ae = 447 * (QLRSolvablePolynomial<BigRational>) a.extend(pfe, 0, 0); 448 * //System.out.println("ae = " + ae); 449 * 450 * Map<ExpVector, GenPolynomial<GenPolynomial<BigRational>>> m = 451 * ae.contract(pfec); List<GenPolynomial<GenPolynomial<BigRational>>> ml = 452 * new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>( m.values()); 453 * GenPolynomial<GenPolynomial<BigRational>> aec = ml.get(0); 454 * //System.out.println("ae = " + ae); //System.out.println("aec = " + 455 * aec); assertEquals("a == aec", a, aec); } 456 */ 457 458 459 /* 460 * Test reversion for Weyl relations. public void testReverseWeyl() { 461 * GenSolvablePolynomialRing<BigRational> csring = new 462 * GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars); 463 * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 464 * wlc.generate(csring); assertFalse("isCommutative()", csring.isCommutative()); 465 * assertTrue("isAssociative()", csring.isAssociative()); 466 * 467 * QLRSolvablePolynomial<BigRational> r1 = ring.parse("x"); 468 * GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 469 * QLRSolvablePolynomial<BigRational> rp = ring.parse("b x + a"); 470 * ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 471 * 472 * QLRSolvablePolynomialRing<BigRational> pfr = ring.reverse(); 473 * QLRSolvablePolynomialRing<BigRational> pfrr = pfr.reverse(); 474 * assertEquals("pf == pfrr", ring, pfrr); //System.out.println("ring = " + 475 * ring); //System.out.println("pfr = " + pfr); 476 * 477 * QLRSolvablePolynomial<BigRational> a = ring.random(kl, ll, el, q); 478 * //System.out.println("a = " + a); 479 * 480 * QLRSolvablePolynomial<BigRational> ar = 481 * (QLRSolvablePolynomial<BigRational>) a.reverse(pfr); 482 * QLRSolvablePolynomial<BigRational> arr = 483 * (QLRSolvablePolynomial<BigRational>) ar.reverse(pfrr); 484 * assertEquals("a == arr", a, arr); //System.out.println("ar = " + ar); 485 * //System.out.println("arr = " + arr); } 486 */ 487 488 489 /* 490 * Test recursive for Weyl relations. public void testRecursiveWeyl() { 491 * String[] svars = new String[] { "w", "x", "y", "z" }; 492 * GenSolvablePolynomialRing<BigRational> sring = new 493 * GenSolvablePolynomialRing<BigRational>(cfac, tord, svars); 494 * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 495 * wlc.generate(sring); assertFalse("isCommutative()", sring.isCommutative()); 496 * assertTrue("isAssociative()", sring.isAssociative()); 497 * //System.out.println("sring = " + sring.toScript()); 498 * 499 * GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring = 500 * sring.recursive(2); // 1,2,3 //System.out.println("rsring = " + rsring); 501 * //.toScript()); System.out.println("rsring = " + rsring.toScript()); 502 * 503 * GenSolvablePolynomial<BigRational> ad, bd, cd, dd; 504 * QLRSolvablePolynomial<BigRational> ar, br, cr, dr; ad = sring.random(kl, 505 * ll, el, q); bd = sring.random(kl, ll, el, q); //ad = 506 * sring.parse("7/2 y^2 * z"); // - 15/2 w^2 + 262/225"); //bd = 507 * sring.parse("-10/13 x "); //+ 413/150"); //ad = 508 * (GenSolvablePolynomial<BigRational>) ad.monic(); //bd = 509 * (GenSolvablePolynomial<BigRational>) bd.monic(); 510 * 511 * //System.out.println("ad = " + ad); //System.out.println("bd = " + bd); 512 * 513 * cd = ad.multiply(bd); //System.out.println("cd = " + cd); 514 * 515 * ar = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 516 * recursive(rsring, ad); br = (QLRSolvablePolynomial<BigRational>) 517 * PolyUtil.<BigRational> recursive(rsring, bd); 518 * //System.out.println("ar = " + ar); //System.out.println("br = " + br); 519 * 520 * cr = ar.multiply(br); //System.out.println("cr = " + cr); 521 * //System.out.println("cr.ring = " + cr.ring.toScript()); 522 * 523 * dr = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 524 * recursive(rsring, cd); //System.out.println("dr = " + dr); 525 * 526 * assertEquals("dr.ring == cr.ring", dr.ring, cr.ring); 527 * assertEquals("dr == cr", dr, cr); 528 * 529 * dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 530 * distribute(sring, cr); //System.out.println("dd = " + dd); 531 * assertEquals("dd == cd", dd, cd); } 532 */ 533 534 535 /* 536 * Test recursive for iterated Weyl relations. public void 537 * testRecursiveIteratedWeyl() { String[] svars = new String[] { "w", "x", 538 * "y", "z" }; GenSolvablePolynomialRing<BigRational> sring = new 539 * GenSolvablePolynomialRing<BigRational>(cfac, tord, svars); 540 * RelationGenerator<BigRational> wlc = new WeylRelationsIterated<BigRational>(); 541 * wlc.generate(sring); assertFalse("isCommutative()", 542 * sring.isCommutative()); assertTrue("isAssociative()", 543 * sring.isAssociative()); //System.out.println("sring = " + 544 * sring.toScript()); 545 * 546 * GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring = 547 * sring.recursive(2); // 1,2,3 //System.out.println("rsring = " + rsring); 548 * //.toScript()); System.out.println("rsring = " + rsring.toScript()); 549 * 550 * GenSolvablePolynomial<BigRational> ad, bd, cd, dd; 551 * QLRSolvablePolynomial<BigRational> ar, br, cr, dr; ad = sring.random(kl, 552 * ll, el, q); bd = sring.random(kl, ll, el, q); //ad = 553 * (GenSolvablePolynomial<BigRational>) ad.monic(); //bd = 554 * (GenSolvablePolynomial<BigRational>) bd.monic(); 555 * 556 * //System.out.println("ad = " + ad); //System.out.println("bd = " + bd); 557 * 558 * cd = ad.multiply(bd); //System.out.println("cd = " + cd); 559 * 560 * ar = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 561 * recursive(rsring, ad); br = (QLRSolvablePolynomial<BigRational>) 562 * PolyUtil.<BigRational> recursive(rsring, bd); 563 * //System.out.println("ar = " + ar); //System.out.println("br = " + br); 564 * 565 * cr = ar.multiply(br); //System.out.println("cr = " + cr); 566 * 567 * dr = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 568 * recursive(rsring, cd); //System.out.println("dr = " + dr); 569 * 570 * assertEquals("dr.ring == cr.ring", dr.ring, cr.ring); 571 * assertEquals("dr == cr", dr, cr); 572 * 573 * dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 574 * distribute(sring, cr); //System.out.println("dd = " + dd); 575 * assertEquals("dd == cd", dd, cd); } 576 */ 577 578}