i1 : R = QQ[a,b,c,d]/ideal{a*b+c*d}
o1 = R
o1 : QuotientRing
|
i2 : A = R {x,y,z}
o2 = A
o2 : NCPolynomialRing
|
i3 : I = ncIdeal {a*x*y,b*z^2}
2
o3 = Two-sided ideal {axy, bz }
o3 : NCIdeal
|
i4 : Igb = ncGroebnerBasis(I, InstallGB=>true)
2 2
o4 = bz ; Lead Term = (z , b)
axy; Lead Term = (xy, a)
o4 : NCGroebnerBasis
|
i5 : c*z^2 % Igb
2
o5 = cz
o5 : A
|
i6 : b*z^2 % Igb o6 = 0 o6 : A |
Note that after the InstallGB flag is set, no checking is done to ensure that the input is in fact a Groebner basis.
i7 : A = QQ{x,y,z}
o7 = A
o7 : NCPolynomialRing
|
i8 : p = y*z + z*y - x^2
2
o8 = zy+yz-x
o8 : A
|
i9 : q = x*z + z*x - y^2
2
o9 = zx-y +xz
o9 : A
|
i10 : r = z^2 - x*y - y*x
2
o10 = z -yx-xy
o10 : A
|
i11 : I = ncIdeal {p,q,r}
2 2 2
o11 = Two-sided ideal {zy+yz-x , zx-y +xz, z -yx-xy}
o11 : NCIdeal
|
i12 : Igb = ncGroebnerBasis I
--Calling Bergman for NCGB calculation.
Complete!
2 2 2
o12 = y x-xy ; Lead Term = (y x, 1)
2 2 2
yx -x y; Lead Term = (yx , 1)
2
zx-y +xz; Lead Term = (zx, 1)
2
zy+yz-x ; Lead Term = (zy, 1)
2 2
z -yx-xy; Lead Term = (z , 1)
o12 : NCGroebnerBasis
|
If the InstallGB flag is not set, then a call to Bergman is made, if the base ring is QQ or a finite field of characteristic p. Otherwise, an error is raised.
Now we can do things with an ncgb, like compute normal forms (using the Bergman interface).
i13 : normalFormBergman(z^17,Igb)
--Calling Bergman for NF calculation for 1 elements.
Complete!
Writing bergman input file.
Writing bergman init file.
2 2 3 3 4 4 5 5 6 6 7 7 8 8
o13 = yxyxyxyxyxyxyxyxz+xyxyxyxyxyxyxyxyz+8x yxyxyxyxyxyxy z+8x yxyxyxyxyxy z+28x yxyxyxyxy z+28x yxyxyxy z+56x yxyxy z+56x yxy z+70x y z
o13 : A
|
Or using the built in reduction code:
i14 : z^17 % Igb
2 2 3 3 4 4 5 5 6 6 7 7 8 8
o14 = yxyxyxyxyxyxyxyxz+xyxyxyxyxyxyxyxyz+8x yxyxyxyxyxyxy z+8x yxyxyxyxyxy z+28x yxyxyxyxy z+28x yxyxyxy z+56x yxyxy z+56x yxy z+70x y z
o14 : A
|
Calls to Bergman are usually faster, except for when the polynomial is small. See the documentation for NCRingElement % NCGroebnerBasis for details on controlling when Bergman is called.
The object ncGroebnerBasis is a method function with options.