Macaulay2 / Macaulay2/M2

isIsomorphic in the inhomogeneous case

Open
#4,415 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

package issue
Dominant language
Macaulay2
Stars
435
Forks
297
Avg merge
4d 20h
Merged PRs (30d)
11

Description

I think there's some confusing behavior in `isIsomorphic(M, N, Homogeneous => false)`, arising from the following lines (where `g` is some potential isomorphism $M\to N$ that earlier code cooked up):
```
--test g to see if it's surjective
kmodule := coker vars S;
gbar := kmodule ** g;

if coker gbar != 0 or kernel g != 0 then false
else setIsomorphism(N, M, isoN * g * inverse isoM, o)
```
The issue is we're only checking that `g` is surjective after localizing at the ideal of variables of `S`, i.e., that `g` is surjective in a neighborhood of this ideal, rather than surjective globally. In other words, `isIsomorphic(M, N, Homogeneous => false)` is really telling us whether $M_{\mathfrak m}$ and $N_{\mathfrak m}$ are isomorphic $S$-modules (equivalently, $S_{\mathfrak m}$-modules), rather than whether $M$ and $N$ are isomorphic $S$-modules. Perhaps this is the desired behavior in the inhomogeneous case, but it's not documented anywhere that this is what going on. I would suggest instead that we have an option `Local` which behave as above when on, but when off checks ker and coker of `g` rather than `gbar`.

As a silly example of the current behavior:
```
S=(ZZ/5)[x]
isIsomorphic(S^1/(x-1)++S^1/(x-3), S^1/(x-1), Homogeneous=>false) -- returns true, essentially because both modules are 0 after localizing at ideal gens S
```
It might be nice to be able to check that these modules are not isomorphic globally.

Edit: actually, there's an additional problem: currently `isIsomorphic(M, N, Homogeneous => false)` is asymmetric in `M` and `N`: in the example above `isIsomorphic(S^1/(x-1),S^1/(x-1)++S^1/(x-3), Homogeneous=>false)` fails, because there's no globally defined injection `S^1/(x-1)++S^1/(x-3)` to `S^1/(x-1)`, but there is in the other direction.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the isIsomorphic entry point and inspect the shown localization, kernel, and cokernel checks. Reproduce both example calls, including the reversed argument order, to confirm the global and asymmetric behavior. Done should resolve whether this is intended, document it, or define and implement the proposed Local behavior.

Written by the indexing model from the issue text.

Assessment

Domain
backend
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.