Description
i1 : A = QQ[i]/(i^2+1);

i2 : L = toField A
o2 = L
o2 : PolynomialRing

i3 : B = L[x,y,z]
o3 = B
o3 : PolynomialRing

i4 : I = ideal(i*x^2yi, i*y^2zi)
2 2
o4 = ideal (i*x  y  i, i*y  z  i)
o4 : Ideal of B

i5 : gens gb I
o5 =  y2+iz1 x2+iy1 
1 2
o5 : Matrix B < B

If the engine eventually discovers that some nonzero element of L is not a unit, an error will be signalled. The user may then use getNonUnit to obtain a noninvertible element of L. If a ring probably is a field, it can be used as a field until a contradiction is found, and this may be a good way of discovering whether a ring is a field.
i6 : A = ZZ[a]/(a^2+3);

i7 : L = toField A
o7 = L
o7 : PolynomialRing

i8 : L[x,y,z]
o8 = L[x..z]
o8 : PolynomialRing

i9 : try gb ideal (a*x^2y^2z^2, y^3, z^3) else getNonUnit L
o9 = a
o9 : L
