# Singular

Procedure from library `multigrading.lib` (see multigrading_lib).

Usage:
isGradedRingHomomorphism(R, f, A); ring R, ideal f, group homomorphism A

Purpose:
test a multigraded group ring homomorphism defined by a ring map from R to the current ring, given by generators images f and a group homomorphism A between grading groups

Return:
int, 1 for TRUE, 0 otherwise

Example:
 ```LIB "multigrading.lib"; ring r = 0, (x, y, z), dp; intmat S1[3][3] = 1, 0, 0, 0, 1, 0, 0, 0, 1; intmat L1[3][1] = 0, 0, 0; def G1 = createGroup(S1, L1); // (S1 + L1)/L1 printGroup(G1); ==> Generators: ==> 1 0 0 ==> 0 1 0 ==> 0 0 1 ==> Relations: ==> 0 ==> 0 ==> 0 setBaseMultigrading(S1, L1); // to change... ring R = 0, (a, b, c), dp; intmat S2[2][3] = 1, 0, 0, 1; intmat L2[2][1] = 0, 2; def G2 = createGroup(S2, L2); printGroup(G2); ==> Generators: ==> 1 0 0 ==> 1 0 0 ==> Relations: ==> 0 ==> 2 setBaseMultigrading(S2, L2); // to change... map F = r, a, b, c; intmat A[nrows(L2)][nrows(L1)] = 1, 0, 0, 3, 2, -6; // graded ring homomorphism is given by (compatible): print(F); ==> F[1]=a ==> F[2]=b ==> F[3]=c print(A); ==> 1 0 0 ==> 3 2 -6 isGradedRingHomomorphism(r, ideal(F), A); ==> 1 def h = createGradedRingHomomorphism(r, ideal(F), A); print(h); ==> [1]: ==> // characteristic : 0 ==> // number of vars : 3 ==> // block 1 : ordering dp ==> // : names x y z ==> // block 2 : ordering C ==> [2]: ==> _[1]=a ==> _[2]=b ==> _[3]=c ==> [3]: ==> 1,0,0, ==> 3,2,-6 // not a homo.. intmat B[nrows(L2)][nrows(L1)] = 1, 1, 1, 0, 0, 0; print(B); ==> 1 1 1 ==> 0 0 0 isGradedRingHomomorphism(r, ideal(F), B); // FALSE: there is no such homomorphism! ==> 0 // Therefore: the following command should return an error // createGradedRingHomomorphism(r, ideal(F), B); ```