next | previous | forward | backward | up | top | index | toc | Macaulay2 website
Isomorphism :: isIsomorphic

isIsomorphic -- Probabalistic test for isomorphism of modules

Synopsis

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.

See also

Ways to use isIsomorphic :

For the programmer

The object isIsomorphic is a method function with options.