isIsomorphic in the inhomogeneous case
Nobody has claimed this yet.
- 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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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