# isIsomorphic -- Probabilistic test for isomorphism of modules

## Synopsis

• Usage:
t = isIsomorphic (N,M)
t = isIsomorphic (n,m)
• Inputs:
• M, ,
• m, , presentation of M
• N, ,
• n, , presentation of N
• Optional inputs:
• Homogeneous => , default value true
• Verbose => , default value false
• Strict => , default value false
• Outputs:
• t, , (Boolean, Matrix) or (Boolean, null)

## Description

In case both modules are homogeneous the program first uses checkDegrees to see whether an isomorphism is possible. This may be an isomorphism up to shift if Strict => false (the default) or on the nose if Strict => true.

If this test is passed, the program uses a variant of the Hom command to compute a random map of minimal possible degree from M to N, and checks whether this is surjective and injective.

In the inhomogeneous case (or with Homogeneous => false) the random map is a random linear combination of the generators of the module of homomorphisms.

If the output has the form (true, g), then g is guaranteed to be an isomorphism. If the output is (false, null), then the conclusion of non-isomorphism is only probabilistic.

 i1 : setRandomSeed 0 o1 = 0 i2 : S = ZZ/32003[x_0..x_3] o2 = S o2 : PolynomialRing i3 : m = random(S^3, S^{4:-2}); 3 4 o3 : Matrix S <--- S i4 : A = random(target m, target m) o4 = | 12809 6206 -246 | | 15612 9476 12107 | | -1548 5867 4502 | 3 3 o4 : Matrix S <--- S i5 : B = random(source m, source m) o5 = {2} | -4943 -8731 3015 -10261 | {2} | 12762 -4006 -6618 -13024 | {2} | -7974 610 -14394 6893 | {2} | -1112 -5556 -14500 15836 | 4 4 o5 : Matrix S <--- S i6 : m' = A*m*B; 3 4 o6 : Matrix S <--- S i7 : isIsomorphic (S^{-3}**coker m, coker m) o7 = (true, {3} | 7410 0 0 |) {3} | 0 7410 0 | {3} | 0 0 7410 | o7 : Sequence i8 : isIsomorphic (S^{-3}**coker m, coker m, Strict => true) o8 = (false, ) o8 : Sequence i9 : isIsomorphic (coker m, coker m') o9 = (true, | 230 -5422 -3121 |) | 14340 -12104 -190 | | 13380 14919 12098 | o9 : Sequence

The following example checks two of the well-known isomorphism in homological algebra.

 i10 : setRandomSeed 0 o10 = 0 i11 : S = ZZ/32003[x_0..x_3] o11 = S o11 : PolynomialRing i12 : I = monomialCurveIdeal(S,{1,3,5}) 2 2 2 3 2 o12 = ideal (x - x x , x x - x x , x - x x ) 2 1 3 1 2 0 3 1 0 2 o12 : Ideal of S i13 : codim I o13 = 2 i14 : W = Ext^2(S^1/I, S^1) o14 = cokernel {-4} | x_2 x_1 x_0^2 | {-4} | x_3 x_2 x_1^2 | 2 o14 : S-module, quotient of S i15 : W' = Hom(S^1/I, S^1/(I_0,I_1) ) o15 = subquotient (| x_3 x_2 |, | x_2^2-x_1x_3 x_1^2x_2-x_0^2x_3 |) 1 o15 : S-module, subquotient of S i16 : isIsomorphic(W,W') o16 = (true, {-4} | -107 0 |) {-4} | 0 107 | o16 : Sequence i17 : mm = ideal gens S o17 = ideal (x , x , x , x ) 0 1 2 3 o17 : Ideal of S i18 : (isIsomorphic(Tor_1(W, S^1/(mm^3)), Tor_1(S^1/(mm^3), W)))_0 o18 = true

## Caveat

A negative result means that a random choice of homomorphism was not an isomorphism; especially when the ground field is small, this may not be definitive.