Skip to content

SpectralSequences v1.2: clean up and trim #3922

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 21 commits into
base: development
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions M2/Macaulay2/m2/matrix2.m2
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,7 @@ Matrix \\ Matrix := Matrix => (g, f) -> quotient'(f, g)
quotient(Matrix, Matrix) := Matrix => opts -> (f, g) -> (
-- given f: A-->C and g: B-->C, then find (f//g): A-->B such that g o (f//g) + r = f
if target f != target g then error "quotient: expected maps with the same target";
if f == 0 then return map(source g, source f, 0);
c := runHooks((quotient, Matrix, Matrix), (opts, f, g), Strategy => opts.Strategy);
if c =!= null then c else error "quotient: no method implemented for this type of input")

Expand All @@ -408,11 +409,19 @@ addHook((quotient, Matrix, Matrix), Strategy => Default,
MinimalGenerators => opts.MinimalGenerators };
map(source g, source f, homomorphism(homomorphism'(f, opts) // Hom(source f, g, opts)))))

-- FIXME: this is still causing unreasonable slow downs, e.g. for (large m) // (scalar)
addHook((quotient, Matrix, Matrix), Strategy => "Reflexive", (opts, f, g) -> if f == 0 or isFreeModule source f then (
L := source f; -- result may not be well-defined if L is not free
addHook((quotient, Matrix, Matrix), Strategy => "Reflexive", (opts, f, g) -> (
L := source f;
M := target f;
N := source g;
-- TODO: should this be a separate strategy?
if not isFreeModule L then return (
-- result may not be well-defined if L is not free,
-- unless the composition h * syz p is zero
p := coverMap L;
h := quotient(f * p, g, Strategy => "Reflexive");
-- TODO: does h * gens ker p != 0 suffice?
if h * inducedMap(source p, kernel p) == 0 then map(N, L, h));
--
if M.?generators then (
M = cokernel presentation M; -- this doesn't change the cover
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,8 @@ Node
reduction of @TT "f"@ modulo a Gröbner basis for the image of @TT "dual g"@.
See @TO quotient@ for the dual notion.

If the remainder @TT "f - h*g"@ is zero, then the quotient @TT "g\\f"@
satisfies the equation @TT "f === (g\\f) * g"@. Otherwise, the equation
If the remainder @TT "f - h*g"@ is zero, then the quotient @TT "g\\\\f"@
satisfies the equation @TT "f === (g\\\\f) * g"@. Otherwise, the equation
@TT "h * g + r === f"@ will hold, where @TT "r"@ is the map provided by
@TO remainder'@.
Example
Expand Down
7 changes: 6 additions & 1 deletion M2/Macaulay2/packages/Macaulay2Doc/ov_system.m2
Original file line number Diff line number Diff line change
Expand Up @@ -1870,7 +1870,12 @@ document { Key => "loadedFiles",
PARA { "After each source file is successfully loaded, the full path to the file is stored in the hash table ", TO "loadedFiles", ". It is stored as the
value, with the corresponding key being a small integer, consecutively assigned, starting at 0."
},
EXAMPLE "peek loadedFiles"}
EXAMPLE lines ///
loadedFiles#0
#loadedFiles
///,
--SeeAlso => { "filesLoaded" },
}

document { Key => "homeDirectory",
Headline => "the home directory of the user",
Expand Down
Loading
Loading