The usual map function does not check whether the map for the ground field is a well-defined map.
i1 : R = GF(8)[x,y,z]/(x*y-z^2); S = GF(64)[u,v]/(v^2); |
i3 : f = map(S, R, {u, 0, v}) o3 = map (S, R, {u, 0, v, a}) o3 : RingMap S <--- R |
i4 : t = (coefficientRing R)_0; |
i5 : f(t^3+t+1) o5 = 0 o5 : S |
i6 : f(t)^3+f(t)+1 3 o6 = a + a + 1 o6 : S |
Our function provides a fix to this issue. See below
i7 : R = GF(8)[x,y,z]/(x*y-z^2); S = GF(64)[u,v]/(v^2); |
i9 : f = switchFieldMap(S, R, {u, 0, v}) 5 4 2 o9 = map (S, R, {u, 0, v, a + a + a + 1}) o9 : RingMap S <--- R |
i10 : t = (coefficientRing R)_0; |
i11 : f(t)^3+f(t)+1 o11 = 0 o11 : S |
The switchFieldMap makes the user defined map compatible with the natural map between the coefficient fields.
The object switchFieldMap is a method function with options.