# Singular

#### D.4.18.4 HomJJ

Procedure from library `normal.lib` (see normal_lib).

Usage:
HomJJ (Li); Li = list: ideal SBid, ideal id, ideal J, poly p

Assume:
R = P/id, P = basering, a polynomial ring, id an ideal of P,
SBid = standard basis of id,
J = ideal of P containing the polynomial p,
p = nonzero divisor of R

Compute:
Endomorphism ring End_R(J)=Hom_R(J,J) with its ring structure as affine ring, together with the map R --> Hom_R(J,J) of affine rings, where R is the quotient ring of P modulo the standard basis SBid.

Return:
a list l of three objects
 ``` l[1] : a polynomial ring, containing two ideals, 'endid' and 'endphi' such that l[1]/endid = Hom_R(J,J) and endphi describes the canonical map R -> Hom_R(J,J) l[2] : an integer which is 1 if phi is an isomorphism, 0 if not l[3] : an integer, = dim_K(Hom_R(J,J)/R) (the contribution to delta) if the dimension is finite, -1 otherwise ```

Note:
printlevel >=1: display comments (default: printlevel=0)

Example:
 ```LIB "normal.lib"; ring r = 0,(x,y),wp(2,3); ideal id = y^2-x^3; ideal J = x,y; poly p = x; list Li = std(id),id,J,p; list L = HomJJ(Li); def end = L[1]; // defines ring L[1], containing ideals endid, endphi setring end; // makes end the basering end; ==> // coefficients: QQ ==> // number of vars : 1 ==> // block 1 : ordering dp ==> // : names T(1) ==> // block 2 : ordering C endid; // end/endid is isomorphic to End(r/id) as ring ==> endid[1]=0 map psi = r,endphi;// defines the canonical map r/id -> End(r/id) psi; ==> psi[1]=T(1)^2 ==> psi[2]=T(1)^3 L[3]; // contribution to delta ==> 1 ```