001/* 002 * $Id$ 003 */ 004 005package edu.jas.gbufd; 006 007 008import java.io.IOException; 009import java.io.Reader; 010import java.io.StringReader; 011import java.util.ArrayList; 012import java.util.List; 013 014import junit.framework.Test; 015import junit.framework.TestCase; 016import junit.framework.TestSuite; 017 018 019import edu.jas.arith.BigRational; 020import edu.jas.arith.BigQuaternion; 021import edu.jas.arith.BigQuaternionRing; 022import edu.jas.gb.SolvableGroebnerBaseAbstract; 023import edu.jas.gb.SolvableGroebnerBase; 024import edu.jas.gb.SolvableGroebnerBaseSeq; 025import edu.jas.gbufd.SGBFactory; 026import edu.jas.gbufd.SolvableSyzygyAbstract; 027import edu.jas.gbufd.SolvableSyzygySeq; 028import edu.jas.poly.GenPolynomialTokenizer; 029import edu.jas.poly.GenSolvablePolynomial; 030import edu.jas.poly.GenSolvablePolynomialRing; 031import edu.jas.poly.ModuleList; 032import edu.jas.poly.PolynomialList; 033import edu.jas.poly.RelationGenerator; 034import edu.jas.poly.RelationTable; 035import edu.jas.poly.TermOrder; 036import edu.jas.poly.WeylRelations; 037 038 039/** 040 * SolvableSyzygy tests with JUnit. 041 * @author Heinz Kredel 042 */ 043 044public class SolvableSyzygyTest extends TestCase { 045 046 047 /** 048 * main. 049 */ 050 public static void main(String[] args) { 051 junit.textui.TestRunner.run(suite()); 052 } 053 054 055 /** 056 * Constructs a <CODE>SolvableSyzygyTest</CODE> object. 057 * @param name String. 058 */ 059 public SolvableSyzygyTest(String name) { 060 super(name); 061 } 062 063 064 /** 065 */ 066 public static Test suite() { 067 TestSuite suite = new TestSuite(SolvableSyzygyTest.class); 068 return suite; 069 } 070 071 072 BigRational cfac; 073 074 075 GenSolvablePolynomialRing<BigRational> fac; 076 077 078 PolynomialList<BigRational> F; 079 080 081 List<GenSolvablePolynomial<BigRational>> G; 082 083 084 GenSolvablePolynomial<BigRational> a, b, c, d, e; 085 086 087 GenSolvablePolynomial<BigRational> zero, one; 088 089 090 TermOrder tord; 091 092 093 RelationTable table; 094 095 096 List<GenSolvablePolynomial<BigRational>> L; 097 098 099 List<List<GenSolvablePolynomial<BigRational>>> K; 100 101 102 List<GenSolvablePolynomial<BigRational>> V; 103 104 105 List<List<GenSolvablePolynomial<BigRational>>> W; 106 107 108 ModuleList<BigRational> M, N, Z; 109 110 111 SolvableGroebnerBaseAbstract<BigRational> sbb; 112 113 114 SolvableGroebnerBase<BigRational> msbb; 115 116 117 SolvableSyzygyAbstract<BigRational> ssz; 118 119 120 int rl = 4; //4; //3; 121 122 123 int kl = 3; 124 125 126 int ll = 7; 127 128 129 int el = 2; 130 131 132 float q = 0.3f; //0.4f 133 134 135 @Override 136 protected void setUp() { 137 cfac = new BigRational(1); 138 tord = new TermOrder(); 139 String[] vars = new String[]{ "w", "x", "y", "z" }; 140 fac = new GenSolvablePolynomialRing<BigRational>(cfac, tord, vars); 141 //RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 142 //wl.generate(fac); 143 table = fac.table; 144 a = b = c = d = e = null; 145 L = null; 146 K = null; 147 V = null; 148 do { 149 a = fac.random(kl, ll, el, q); 150 } while (a.isZERO()); 151 do { 152 b = fac.random(kl, ll, el, q); 153 } while (b.isZERO()); 154 do { 155 c = fac.random(kl, ll, el, q); 156 } while (c.isZERO()); 157 do { 158 d = fac.random(kl, ll, el, q); 159 } while (d.isZERO()); 160 e = d; //fac.random(kl, ll, el, q ); 161 one = fac.getONE(); 162 zero = fac.getZERO(); 163 sbb = SGBFactory.getImplementation(cfac); 164 msbb = new SolvableGroebnerBaseSeq<BigRational>(); //cfac); 165 ssz = new SolvableSyzygySeq<BigRational>(cfac); 166 } 167 168 169 @Override 170 protected void tearDown() { 171 a = b = c = d = e = null; 172 L = null; 173 K = null; 174 V = null; 175 fac = null; 176 tord = null; 177 table = null; 178 sbb = null; 179 msbb = null; 180 ssz = null; 181 } 182 183 184 /** 185 * Test sequential SolvableSyzygy. 186 */ 187 public void testSequentialSolvableSyzygy() { 188 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 189 190 assertTrue("not isZERO( a )", !a.isZERO()); 191 L.add(a); 192 assertTrue("isGB( { a } )", sbb.isLeftGB(L)); 193 K = ssz.leftZeroRelations(L); 194 assertTrue("is ZR( { a } )", ssz.isLeftZeroRelation(K, L)); 195 196 assertTrue("not isZERO( b )", !b.isZERO()); 197 L.add(b); 198 L = sbb.leftGB(L); 199 assertTrue("isGB( { a, b } )", sbb.isLeftGB(L)); 200 //System.out.println("\nL = " + L ); 201 K = ssz.leftZeroRelations(L); 202 //System.out.println("\nK = " + K ); 203 assertTrue("is ZR( { a, b } )", ssz.isLeftZeroRelation(K, L)); 204 205 assertTrue("not isZERO( c )", !c.isZERO()); 206 L.add(c); 207 L = sbb.leftGB(L); 208 //System.out.println("\nL = " + L ); 209 assertTrue("isGB( { a, b, c } )", sbb.isLeftGB(L)); 210 K = ssz.leftZeroRelations(L); 211 //System.out.println("\nK = " + K ); 212 assertTrue("is ZR( { a, b, c } )", ssz.isLeftZeroRelation(K, L)); 213 214 assertTrue("not isZERO( d )", !d.isZERO()); 215 L.add(d); 216 L = sbb.leftGB(L); 217 //System.out.println("\nL = " + L ); 218 assertTrue("isGB( { a, b, c, d } )", sbb.isLeftGB(L)); 219 K = ssz.leftZeroRelations(L); 220 //System.out.println("\nK = " + K ); 221 assertTrue("is ZR( { a, b, c, d } )", ssz.isLeftZeroRelation(K, L)); 222 } 223 224 225 /** 226 * Test sequential Weyl SolvableSyzygy. 227 */ 228 public void testSequentialWeylSolvableSyzygy() { 229 int rloc = 4; 230 fac = new GenSolvablePolynomialRing<BigRational>(cfac, rloc); 231 232 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 233 wl.generate(fac); 234 table = fac.table; 235 236 a = fac.random(kl, ll, el, q); 237 b = fac.random(kl, ll, el, q); 238 c = fac.random(kl, ll, el, q); 239 d = fac.random(kl, ll, el, q); 240 e = d; //fac.random(kl, ll, el, q ); 241 242 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 243 244 assertTrue("not isZERO( a )", !a.isZERO()); 245 L.add(a); 246 assertTrue("isGB( { a } )", sbb.isLeftGB(L)); 247 K = ssz.leftZeroRelations(L); 248 assertTrue("is ZR( { a } )", ssz.isLeftZeroRelation(K, L)); 249 250 assertTrue("not isZERO( b )", !b.isZERO()); 251 L.add(b); 252 L = sbb.leftGB(L); 253 assertTrue("isGB( { a, b } )", sbb.isLeftGB(L)); 254 //System.out.println("\nL = " + L ); 255 K = ssz.leftZeroRelations(L); 256 //System.out.println("\nK = " + K ); 257 assertTrue("is ZR( { a, b } )", ssz.isLeftZeroRelation(K, L)); 258 259 // useless since 1 in GB 260 assertTrue("not isZERO( c )", !c.isZERO()); 261 L.add(c); 262 L = sbb.leftGB(L); 263 //System.out.println("\nL = " + L ); 264 assertTrue("isGB( { a, b, c } )", sbb.isLeftGB(L)); 265 K = ssz.leftZeroRelations(L); 266 //System.out.println("\nK = " + K ); 267 assertTrue("is ZR( { a, b, c } )", ssz.isLeftZeroRelation(K, L)); 268 269 // useless since 1 in GB 270 assertTrue("not isZERO( d )", !d.isZERO()); 271 L.add(d); 272 L = sbb.leftGB(L); 273 //System.out.println("\nL = " + L ); 274 assertTrue("isGB( { a, b, c, d } )", sbb.isLeftGB(L)); 275 K = ssz.leftZeroRelations(L); 276 //System.out.println("\nK = " + K ); 277 assertTrue("is ZR( { a, b, c, d } )", ssz.isLeftZeroRelation(K, L)); 278 } 279 280 281 /** 282 * Test sequential module SolvableSyzygy. 283 */ 284 public void testSequentialModSolvableSyzygy() { 285 W = new ArrayList<List<GenSolvablePolynomial<BigRational>>>(); 286 287 assertTrue("not isZERO( a )", !a.isZERO()); 288 V = new ArrayList<GenSolvablePolynomial<BigRational>>(); 289 V.add(a); 290 V.add(zero); 291 V.add(one); 292 W.add(V); 293 M = new ModuleList<BigRational>(fac, W); 294 assertTrue("isGB( { (a,0,1) } )", msbb.isLeftGB(M)); 295 296 N = msbb.leftGB(M); 297 assertTrue("isGB( { (a,0,1) } )", msbb.isLeftGB(N)); 298 299 Z = ssz.leftZeroRelations(N); 300 //System.out.println("Z = " + Z); 301 assertTrue("is ZR( { a) } )", ssz.isLeftZeroRelation(Z, N)); 302 303 assertTrue("not isZERO( b )", !b.isZERO()); 304 V = new ArrayList<GenSolvablePolynomial<BigRational>>(); 305 V.add(b); 306 V.add(one); 307 V.add(zero); 308 W.add(V); 309 M = new ModuleList<BigRational>(fac, W); 310 //System.out.println("W = " + W.size() ); 311 312 N = msbb.leftGB(M); 313 assertTrue("isGB( { a, b } )", msbb.isLeftGB(N)); 314 315 Z = ssz.leftZeroRelations(N); 316 //System.out.println("Z = " + Z); 317 assertTrue("is ZR( { a, b } )", ssz.isLeftZeroRelation(Z, N)); 318 319 assertTrue("not isZERO( c )", !c.isZERO()); 320 V = new ArrayList<GenSolvablePolynomial<BigRational>>(); 321 V.add(c); 322 V.add(one); 323 V.add(zero); 324 W.add(V); 325 M = new ModuleList<BigRational>(fac, W); 326 //System.out.println("W = " + W.size() ); 327 328 N = msbb.leftGB(M); 329 //System.out.println("GB(M) = " + N); 330 assertTrue("isGB( { a,b,c) } )", msbb.isLeftGB(N)); 331 332 Z = ssz.leftZeroRelations(N); 333 //System.out.println("Z = " + Z); 334 //boolean b = ssz.isLeftZeroRelation(Z,N); 335 //System.out.println("boolean = " + b); 336 assertTrue("is ZR( { a,b,c } )", ssz.isLeftZeroRelation(Z, N)); 337 } 338 339 340 /** 341 * Test sequential arbitrary base Syzygy. 342 */ 343 public void testSequentialArbitrarySyzygy() { 344 L = new ArrayList<GenSolvablePolynomial<BigRational>>(); 345 346 assertTrue("not isZERO( a )", !a.isZERO()); 347 L.add(a); 348 assertTrue("isGB( { a } )", sbb.isLeftGB(L)); 349 K = ssz.leftZeroRelationsArbitrary(L); 350 assertTrue("is ZR( { a } )", ssz.isLeftZeroRelation(K, L)); 351 352 assertTrue("not isZERO( b )", !b.isZERO()); 353 L.add(b); 354 K = ssz.leftZeroRelationsArbitrary(L); 355 //System.out.println("\nN = " + N ); 356 assertTrue("is ZR( { a, b } )", ssz.isLeftZeroRelation(K, L)); 357 358 assertTrue("not isZERO( c )", !c.isZERO()); 359 L.add(c); 360 K = ssz.leftZeroRelationsArbitrary(L); 361 //System.out.println("\nN = " + N ); 362 assertTrue("is ZR( { a, b, c } )", ssz.isLeftZeroRelation(K, L)); 363 364 assertTrue("not isZERO( d )", !d.isZERO()); 365 L.add(d); 366 K = ssz.leftZeroRelationsArbitrary(L); 367 //System.out.println("\nN = " + N ); 368 assertTrue("is ZR( { a, b, c, d } )", ssz.isLeftZeroRelation(K, L)); 369 } 370 371 372 /** 373 * Test sequential arbitrary base Syzygy, ex CLO 2, p 214 ff. 374 */ 375 @SuppressWarnings("unchecked") 376 public void testSequentialArbitrarySyzygyCLO() { 377 PolynomialList<BigRational> F = null; 378 379 String exam = "Rat(x,y) G " + "( " + "( x y + x ), " + "( y^2 + 1 ) " + ") "; 380 Reader source = new StringReader(exam); 381 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 382 try { 383 F = (PolynomialList<BigRational>) parser.nextSolvablePolynomialSet(); 384 } catch (ClassCastException e) { 385 fail("" + e); 386 } catch (IOException e) { 387 fail("" + e); 388 } 389 //System.out.println("F = " + F); 390 391 L = F.castToSolvableList(); 392 K = ssz.leftZeroRelationsArbitrary(L); 393 assertTrue("is ZR( { a, b } )", ssz.isLeftZeroRelation(K, L)); 394 } 395 396 397 /** 398 * Test sequential arbitrary base Syzygy, ex WA_32. 399 */ 400 @SuppressWarnings("unchecked") 401 public void testSequentialArbitrarySyzygyWA32() { 402 PolynomialList<BigRational> F = null; 403 404 String exam = "Rat(e1,e2,e3) L " + "RelationTable " + "( " + " ( e3 ), ( e1 ), ( e1 e3 - e1 ), " 405 + " ( e3 ), ( e2 ), ( e2 e3 - e2 ) " + ")" + "( " + " ( e1 e3^3 + e2^2 ), " 406 + " ( e1^3 e2^2 + e3 ), " + " ( e3^3 + e3^2 ) " + ") "; 407 Reader source = new StringReader(exam); 408 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 409 try { 410 F = (PolynomialList<BigRational>) parser.nextSolvablePolynomialSet(); 411 } catch (ClassCastException e) { 412 fail("" + e); 413 } catch (IOException e) { 414 fail("" + e); 415 } 416 //System.out.println("F = " + F); 417 418 L = F.castToSolvableList(); 419 K = ssz.leftZeroRelationsArbitrary(L); 420 assertTrue("is ZR( { a, b } )", ssz.isLeftZeroRelation(K, L)); 421 } 422 423 424 /** 425 * Test sequential arbitrary module SolvableSyzygy. 426 */ 427 public void testSequentialArbitraryModSolvableSyzygy() { 428 W = new ArrayList<List<GenSolvablePolynomial<BigRational>>>(); 429 430 assertTrue("not isZERO( a )", !a.isZERO()); 431 V = new ArrayList<GenSolvablePolynomial<BigRational>>(); 432 V.add(a); 433 V.add(zero); 434 V.add(one); 435 W.add(V); 436 M = new ModuleList<BigRational>(fac, W); 437 assertTrue("isGB( { (a,0,1) } )", msbb.isLeftGB(M)); 438 439 Z = ssz.leftZeroRelationsArbitrary(M); 440 //System.out.println("Z = " + Z); 441 assertTrue("is ZR( { a) } )", ssz.isLeftZeroRelation(Z, M)); 442 443 assertTrue("not isZERO( b )", !b.isZERO()); 444 V = new ArrayList<GenSolvablePolynomial<BigRational>>(); 445 V.add(b); 446 V.add(one); 447 V.add(zero); 448 W.add(V); 449 M = new ModuleList<BigRational>(fac, W); 450 //System.out.println("W = " + W.size() ); 451 452 Z = ssz.leftZeroRelationsArbitrary(M); 453 //System.out.println("Z = " + Z); 454 assertTrue("is ZR( { a, b } )", ssz.isLeftZeroRelation(Z, M)); 455 456 assertTrue("not isZERO( c )", !c.isZERO()); 457 V = new ArrayList<GenSolvablePolynomial<BigRational>>(); 458 V.add(c); 459 V.add(one); 460 V.add(zero); 461 W.add(V); 462 M = new ModuleList<BigRational>(fac, W); 463 //System.out.println("W = " + W.size() ); 464 465 Z = ssz.leftZeroRelationsArbitrary(M); 466 //System.out.println("Z = " + Z); 467 //boolean b = ssz.isLeftZeroRelation(Z,N); 468 //System.out.println("boolean = " + b); 469 assertTrue("is ZR( { a,b,c } )", ssz.isLeftZeroRelation(Z, M)); 470 } 471 472 473 /** 474 * Test Ore conditions. 475 */ 476 public void testOreConditions() { 477 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 478 wl.generate(fac); 479 do { 480 a = fac.random(kl, ll - 1, el, q); 481 } while (a.isZERO()); 482 do { 483 b = fac.random(kl, ll - 1, el, q); 484 } while (b.isZERO()); 485 //System.out.println("a = " + a); 486 //System.out.println("b = " + b); 487 488 GenSolvablePolynomial<BigRational>[] oc = ssz.leftOreCond(a, b); 489 //System.out.println("oc[0] = " + oc[0]); 490 //System.out.println("oc[1] = " + oc[1]); 491 c = oc[0].multiply(a); 492 d = oc[1].multiply(b); 493 //System.out.println("c = " + c); 494 //System.out.println("d = " + d); 495 assertEquals("c_0 * a = c_1 * b: ", c, d); 496 assertTrue("left Ore condition: ", ssz.isLeftOreCond(a, b, oc)); 497 498 oc = ssz.rightOreCond(a, b); 499 //System.out.println("oc[0] = " + oc[0]); 500 //System.out.println("oc[1] = " + oc[1]); 501 c = a.multiply(oc[0]); 502 d = b.multiply(oc[1]); 503 //System.out.println("c = " + c); 504 //System.out.println("d = " + d); 505 assertEquals("a * c_0 = b * c_1: ", c, d); 506 assertTrue("right Ore condition: ", ssz.isRightOreCond(a, b, oc)); 507 } 508 509 510 /** 511 * Test Ore conditions for residues. 512 */ 513 public void testResidueOreConditions() { 514 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 515 wl.generate(fac); 516 517 // construct ideal { x_i^2 - i, ... } for generators x_i 518 F = new PolynomialList<BigRational>(fac, fac.generators()); 519 //System.out.println("F = " + F); 520 List<GenSolvablePolynomial<BigRational>> gens = F.castToSolvableList(); 521 //System.out.println("gens = " + gens); 522 L = new ArrayList<GenSolvablePolynomial<BigRational>>(gens.size() - 1); 523 long i = 2; 524 for (GenSolvablePolynomial<BigRational> g : gens) { 525 if (g.isONE()) { 526 continue; 527 } 528 GenSolvablePolynomial<BigRational> p = g.multiply(g); 529 p = (GenSolvablePolynomial<BigRational>) p.subtract(fac.fromInteger(i++)); 530 L.add(p); 531 } 532 //System.out.println("L = " + L); 533 534 do { 535 a = fac.random(kl, ll - 2, el, q); 536 } while (a.isZERO()); 537 do { 538 b = fac.random(kl, ll - 2, el, q); 539 } while (b.isZERO()); 540 //System.out.println("a = " + a); 541 //System.out.println("b = " + b); 542 543 GenSolvablePolynomial<BigRational>[] oc = ssz.leftOreCond(a, b); 544 //System.out.println("oc[0] = " + oc[0]); 545 //System.out.println("oc[1] = " + oc[1]); 546 c = oc[0].multiply(a); 547 d = oc[1].multiply(b); 548 //System.out.println("c = " + c); 549 //System.out.println("d = " + d); 550 assertEquals("c_0 * a = c_1 * b: ", c, d); 551 assertTrue("left Ore condition: ", ssz.isLeftOreCond(a, b, oc)); 552 553 // now mod ideal(L): 554 GenSolvablePolynomial<BigRational> ar, br, cr, dr, or0, or1; 555 ar = sbb.sred.leftNormalform(L, a); 556 br = sbb.sred.leftNormalform(L, b); 557 //System.out.println("ar = " + ar); 558 //System.out.println("br = " + br); 559 cr = oc[0].multiply(ar); 560 dr = oc[1].multiply(br); 561 //System.out.println("cr = " + cr); 562 //System.out.println("dr = " + dr); 563 //this is not true: assertEquals("c_0 * a = c_1 * b: ", cr, dr); 564 cr = sbb.sred.leftNormalform(L, cr); 565 dr = sbb.sred.leftNormalform(L, dr); 566 //System.out.println("cr = " + cr); 567 //System.out.println("dr = " + dr); 568 assertEquals("cr_0 * ar = cr_1 * br: ", cr, dr); 569 570 or0 = sbb.sred.leftNormalform(L, oc[0]); 571 or1 = sbb.sred.leftNormalform(L, oc[1]); 572 //System.out.println("oc0 = " + oc[0]); 573 //System.out.println("oc1 = " + oc[1]); 574 //System.out.println("or0 = " + or0); 575 //System.out.println("or1 = " + or1); 576 cr = or0.multiply(ar); 577 dr = or1.multiply(br); 578 //okay w/o: cr = sbb.sred.leftNormalform(L,cr); 579 //okay w/o: dr = sbb.sred.leftNormalform(L,dr); 580 //System.out.println("cr = " + cr); 581 //System.out.println("dr = " + dr); 582 //not okay: assertEquals("cr_0 * ar = cr_1 * br: ", cr, dr); 583 oc[0] = or0; 584 oc[1] = or1; 585 //not okay: assertTrue("left Ore condition: ", ssz.isLeftOreCond(ar,br,oc)); 586 587 //System.out.println("new Ore Condition:"); 588 oc = ssz.leftOreCond(ar, br); 589 //System.out.println("oc[0] = " + oc[0]); 590 //System.out.println("oc[1] = " + oc[1]); 591 cr = oc[0].multiply(ar); 592 dr = oc[1].multiply(br); 593 //System.out.println("cr = " + cr); 594 //System.out.println("dr = " + dr); 595 //this is true: 596 assertEquals("c_0 * a = c_1 * b: ", cr, dr); 597 cr = sbb.sred.leftNormalform(L, cr); 598 dr = sbb.sred.leftNormalform(L, dr); 599 //System.out.println("cr = " + cr); 600 //System.out.println("dr = " + dr); 601 assertEquals("cr_0 * ar = cr_1 * br: ", cr, dr); 602 603 /* not okay: 604 or0 = sbb.sred.leftNormalform(L,oc[0]); 605 or1 = sbb.sred.leftNormalform(L,oc[1]); 606 //System.out.println("oc0 = " + oc[0]); 607 //System.out.println("oc1 = " + oc[1]); 608 //System.out.println("or0 = " + or0); 609 //System.out.println("or1 = " + or1); 610 cr = or0.multiply(ar); 611 dr = or1.multiply(br); 612 //okay w/o: cr = sbb.sred.leftNormalform(L,cr); 613 //okay w/o: dr = sbb.sred.leftNormalform(L,dr); 614 //System.out.println("cr = " + cr); 615 //System.out.println("dr = " + dr); 616 assertEquals("cr_0 * ar = cr_1 * br: ", cr, dr); 617 oc[0] = or0; 618 oc[1] = or1; 619 assertTrue("left Ore condition: ", ssz.isLeftOreCond(ar,br,oc)); 620 */ 621 } 622 623 624 /** 625 * Test Ore conditions quaternion coefficients. 626 */ 627 public void testOreConditionsQuat() { 628 BigQuaternionRing qri = new BigQuaternionRing(); 629 GenSolvablePolynomialRing<BigQuaternion> qfac = new GenSolvablePolynomialRing<BigQuaternion>(qri, fac); 630 //System.out.println("qfac = " + qfac.toScript()); 631 SolvableSyzygyAbstract<BigQuaternion> ssz = new SolvableSyzygySeq<BigQuaternion>(qri); 632 633 RelationGenerator<BigQuaternion> wl = new WeylRelations<BigQuaternion>(); 634 wl.generate(qfac); 635 636 GenSolvablePolynomial<BigQuaternion> a, b, c, d; 637 638 do { 639 a = qfac.random(1, 3, el, q); 640 //a = qfac.parse(" -1i1j-2k-1 "); // wrong parse of starting - 641 } while (a.isZERO()); 642 do { 643 b = qfac.random(1, 3, el, q); 644 //b = qfac.parse(" -1i1/2j1k-1/2 x + 3/2i1j-1/2k1 "); // wrong parse of starting - 645 } while (b.isZERO()); 646 System.out.println("a = " + a); 647 System.out.println("b = " + b); 648 649 GenSolvablePolynomial<BigQuaternion>[] oc = ssz.leftOreCond(a, b); 650 System.out.println("oc[0] = " + oc[0]); 651 System.out.println("oc[1] = " + oc[1]); 652 c = oc[0].multiply(a); 653 d = oc[1].multiply(b); 654 //System.out.println("c = " + c); 655 //System.out.println("d = " + d); 656 assertEquals("c_0 * a = c_1 * b: " + qfac.toScript(), c, d); 657 assertTrue("left Ore condition: ", ssz.isLeftOreCond(a, b, oc)); 658 659 oc = ssz.rightOreCond(a, b); 660 System.out.println("oc[0] = " + oc[0]); 661 System.out.println("oc[1] = " + oc[1]); 662 c = a.multiply(oc[0]); 663 d = b.multiply(oc[1]); 664 //System.out.println("c = " + c); 665 //System.out.println("d = " + d); 666 assertEquals("a * c_0 = b * c_1: " + qfac.toScript(), c, d); 667 assertTrue("right Ore condition: ", ssz.isRightOreCond(a, b, oc)); 668 } 669 670}