t = isIsomorphic (N,M)
t = isIsomorphic (n,m)
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.
|
|
|
|
|
|
|
|
|
The following example checks two of the well-known isomorphism in homological algebra.
|
|
|
|
|
|
|
|
|
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.
The object isIsomorphic is a method function with options.