Hi, I would suggest doing the preimage algorithm on your own. Take the Singular book and look for the algorithm; in it, having phi: S->r, you construct the ring T := r tensor S (tensor over the groundfield). Specify a nice elimination ordering on T.
In what follows I use the notation from your example.
Indeed you can start with Singular operation, which will do the job:
Code:
def T = r+S; setring T;
Then, take your input ideal I from S, imap it to T and add to I the set of generators {x_i - \phi(x_i): x_i are generators of R} as well as the part of the known answer from R.
Code:
ideal Q = imap(r,Q);
int i; ideal K;
for(i=1; i<=size(Q);i++)
{ K = K, var(3+i) - Q[i]; }
Run slimgb or your favourite Groebner command with
Code:
option(prot); option(mem); // will show protocol of computation and memory usage
K = interred(K); // helps removing linear dependencies
ideal L = groebner(K);
and see what happens. In case of termination you obtain a big ideal and have to extract from it elements with leading monomial lying in R (thus just invoking the elimination lemma, cf. the Singular book).
Have fun! Regards,
Viktor