Singular

D.15.14.46 pushForward

Usage:
pushForward(f);

Purpose:
Computes the finest grading of the image ring which makes the map f a map of graded rings. The group map between the two grading groups is given by transpose( (Id, 0) ). Pay attention that the group spanned by the columns of the grading group matrix may not be a subgroup of the grading group. Still all columns are needed to find the correct image of the preimage gradings.

Example:
 LIB "multigrading.lib"; ring r = 0,(x,y,z),dp; // Setting degrees for preimage ring.; intmat grad[3][3] = 1,0,0, 0,1,0, 0,0,1; setBaseMultigrading(grad); // grading on r: getVariableWeights(); ==> 1,0,0, ==> 0,1,0, ==> 0,0,1 getLattice(); ==> 0,0,0 // only for the purpose of this example if( voice > 1 ){ /*keepring(r);*/ export(r); } ring R = 0,(a,b),dp; ideal i = a2-b2+a6-b5+ab3,a7b+b15-ab6+a6b6; // The quotient ring by this ideal will become our image ring.; qring Q = std(i); listvar(); ==> // Q [0] *ring ==> // R [0] ring ==> // grad [0] intmat 3 x 3 ==> // r [0] ring map f = r,-a2b6+b5+a3b+a2+ab,-a2b7-3a2b5+b4+a,a6-b6-b3+a2; f; ==> f[1]=-a2b6+b5+a3b+a2+ab ==> f[2]=-a2b7-3a2b5+b4+a ==> f[3]=a6-b6-b3+a2 // TODO: Unfortunately this is not a very spectacular example...: // Pushing forward f: pushForward(f); // due to pushForward we have got new grading on Q getVariableWeights(); ==> 0,0, ==> 0,0, ==> 0,0, ==> 1,0, ==> 0,1 getLattice(); ==> 1,0,0,0,0, ==> 0,1,0,0,0, ==> 0,0,1,0,0, ==> 1,1,1,1,0, ==> 1,1,1,1,1 // only for the purpose of this example if( voice > 1 ){ kill r; }