Skip to content

Commit 219355b

Browse files
committed
Added synonym for frobeniusPushforward
1 parent a4b4c80 commit 219355b

File tree

1 file changed

+52
-40
lines changed

1 file changed

+52
-40
lines changed

M2/Macaulay2/packages/ToricHigherDirectImages.m2

Lines changed: 52 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ newPackage(
3434
export {
3535
-- types
3636
-- methods
37+
"frobeniusPushforward",
3738
"frobeniusDirectImage",
3839
"nefContraction",
3940
"nefRayContractions",
@@ -55,11 +56,12 @@ importFrom(Core, {"sortBy", "raw", "rawHilbertBasis"})
5556
-- M - a module over a multigraded polynomial ring.
5657
-- OUTPUT: the module (F_p)_* M, i.e. the pushforward of M under the p-th toric
5758
-- Frobenius map.
58-
frobeniusDirectImage = method();
59-
frobeniusDirectImage (ZZ, Module) := Module => (p, M) -> (
59+
frobeniusPushforward = method();
60+
frobeniusDirectImage = frobeniusPushforward;
61+
frobeniusPushforward (ZZ, Module) := Module => (p, M) -> (
6062
if M == 0 then return M;
6163
-- If it isn't free
62-
if not isFreeModule M then coker frobeniusDirectImage_p presentation M else (
64+
if not isFreeModule M then coker frobeniusPushforward_p presentation M else (
6365
S := ring M;
6466
X := variety S;
6567
A := matrix rays X;
@@ -76,7 +78,7 @@ frobeniusDirectImage (ZZ, Module) := Module => (p, M) -> (
7678
);
7779
dSum := directSum apply(B, b -> S^b);
7880
-- We should remember our choice of Cartier divisors.
79-
dSum.cache.frobeniusDirectImage = D;
81+
dSum.cache.frobeniusPushforward = D;
8082
dSum
8183
)
8284
)
@@ -86,22 +88,22 @@ frobeniusDirectImage (ZZ, Module) := Module => (p, M) -> (
8688
-- INPUT: p - an integer
8789
-- f - a map between multigraded modules f : M -> N.
8890
-- OUTPUT: the map between modules (F_p)_* f : (F_p)_* M -> (F_p)_* N.
89-
frobeniusDirectImage (ZZ, Matrix) := (p, f) -> (
91+
frobeniusPushforward (ZZ, Matrix) := (p, f) -> (
9092
S := ring f;
9193
-- easy way to access the variety which these modules are over.
9294
X := variety S;
9395
-- these index the characters splitting the source and target.
9496
pts := toList (toList (dim X:{0})..toList (dim X:{p-1}));
9597
-- our map will be a block matrix
9698
blocksize := #pts;
97-
src := frobeniusDirectImage_p source f;
98-
tgt := frobeniusDirectImage_p target f;
99+
src := frobeniusPushforward_p source f;
100+
tgt := frobeniusPushforward_p target f;
99101
A := matrix rays X;
100102
-- this is the main reason to keep track of the divisors.
101103
-- we need them to make sure that the map is sending terms to the correct place.
102104
-- e.g. the trivial summand should map to the trivial summand.
103-
Dsrc := src.cache.frobeniusDirectImage;
104-
Dtgt := tgt.cache.frobeniusDirectImage;
105+
Dsrc := src.cache.frobeniusPushforward;
106+
Dtgt := tgt.cache.frobeniusPushforward;
105107
-- to make the direct image of the map
106108
matrix table(numrows f, numcols f, (r,c) -> (
107109
-- we want to convert the entries of the input map
@@ -141,10 +143,10 @@ frobeniusDirectImage (ZZ, Matrix) := (p, f) -> (
141143
-- OUTPUT: the pushforward of the complex C, by applying the functor to each differential.
142144
-- NOTE: since the Frobenius is a finite map, the pushforward is an exact functor, i.e.
143145
-- there are no higher direct images.
144-
frobeniusDirectImage (ZZ, Complex) := Complex => (p, K) -> (
146+
frobeniusPushforward (ZZ, Complex) := Complex => (p, K) -> (
145147
complex (
146-
if length K == 0 then map(frobeniusDirectImage_p K_0, 0, 0)
147-
else apply(length K, i -> frobeniusDirectImage(p, K.dd_(i+1)))
148+
if length K == 0 then map(frobeniusPushforward_p K_0, 0, 0)
149+
else apply(length K, i -> frobeniusPushforward(p, K.dd_(i+1)))
148150
)
149151
)
150152

@@ -559,13 +561,13 @@ doc ///
559561
Text
560562
2) When $\varphi \colon Y \rightarrow Y$ is a toric Frobenius map, i.e.
561563
induced from the natural morphism on the dense torus given by raising all
562-
of the coordinates to the same power, then the method \texttt{frobeniusDirectImage}
564+
of the coordinates to the same power, then the method \texttt{frobeniusPushforward}
563565
allows one to compute pushforwards of any coherent sheaf. For instance,
564566
the pushforward of the trivial bundle on $\mathbb{P}^2$ by the second Frobenius map
565567
splits into 4 line bundles.
566568
Example
567569
S = ring Y;
568-
frobeniusDirectImage(2,S^1)
570+
frobeniusPushforward(2,S^1)
569571
Text
570572
@SUBSECTION "References"@
571573
Text
@@ -585,13 +587,17 @@ doc ///
585587

586588
doc ///
587589
Key
590+
frobeniusPushforward
588591
frobeniusDirectImage
592+
(frobeniusPushforward, ZZ, Module)
589593
(frobeniusDirectImage, ZZ, Module)
590594
Headline
591595
compute the pushforward of a module under the $p$th toric Frobenius map
592596
Usage
593-
frobeniusDirectImage(p, M)
594-
frobeniusDirectImage_p M
597+
frobeniusPushforward(p, M)
598+
frobeniusPushforward_p M
599+
frobeniusDirectImage(p,M)
600+
frobeniusDirectImage_p M
595601
Inputs
596602
p : ZZ
597603
M : Module
@@ -611,43 +617,46 @@ doc ///
611617
Example
612618
X = hirzebruchSurface 1;
613619
R = ring X;
614-
frobeniusDirectImage(4, R^1)
620+
frobeniusPushforward(4, R^1)
615621
Text
616622
We can pushforward many kinds of modules. Here is the pushforward of an ideal.
617623
Example
618624
I = module ideal {R_0, R_2};
619-
prune frobeniusDirectImage(2, I)
625+
prune frobeniusPushforward(2, I)
620626
Text
621627
Here is the pushforward of a free module.
622628
Example
623629
F = R^{{1,0},{0,1}};
624-
frobeniusDirectImage(2, F)
630+
frobeniusPushforward(2, F)
625631
Text
626632
Here is the pushforward of a torsion module.
627633
Example
628634
M = R^1/(module I)
629-
prune frobeniusDirectImage(2, M)
635+
prune frobeniusPushforward(2, M)
630636
Text
631637
As mentioned, $p$ is not related to the characteristic of the field, and the
632638
outputs will be the same modules over a different coefficient ring.
633639
Example
634640
Y = hirzebruchSurface(1, CoefficientRing => ZZ/2);
635641
S = ring Y;
636642
I' = module ideal {S_0, S_2};
637-
prune frobeniusDirectImage(2, I')
643+
prune frobeniusPushforward(2, I')
638644
SeeAlso
639-
(frobeniusDirectImage, ZZ, Matrix)
640-
(frobeniusDirectImage, ZZ, Complex)
645+
(frobeniusPushforward, ZZ, Matrix)
646+
(frobeniusPushforward, ZZ, Complex)
641647
///
642648

643649
doc ///
644650
Key
651+
(frobeniusPushforward, ZZ, Matrix)
645652
(frobeniusDirectImage, ZZ, Matrix)
646653
Headline
647654
compute the pushforward of map of modules under the $p$th toric Frobenius map
648655
Usage
649-
frobeniusDirectImage(p, M)
650-
frobeniusDirectImage_p M
656+
frobeniusPushforward(p, M)
657+
frobeniusPushforward_p M
658+
frobeniusDirectImage(p, M)
659+
frobeniusDirectImage_p M
651660
Inputs
652661
p : ZZ
653662
f : Matrix
@@ -670,20 +679,23 @@ doc ///
670679
X = hirzebruchSurface 1;
671680
R = ring X;
672681
M = koszul_1 vars R
673-
frobeniusDirectImage_2 M
682+
frobeniusPushforward_2 M
674683
SeeAlso
675-
(frobeniusDirectImage, ZZ, Module)
676-
(frobeniusDirectImage, ZZ, Complex)
684+
(frobeniusPushforward, ZZ, Module)
685+
(frobeniusPushforward, ZZ, Complex)
677686
///
678687

679688
doc ///
680689
Key
690+
(frobeniusPushforward, ZZ, Complex)
681691
(frobeniusDirectImage, ZZ, Complex)
682692
Headline
683693
compute the pushforward of a complex of modules under the $p$th toric Frobenius map
684694
Usage
685-
frobeniusDirectImage(p, C)
686-
frobeniusDirectImage_p C
695+
frobeniusPushforward(p, C)
696+
frobeniusPushforward_p C
697+
frobeniusDirectImage(p, C)
698+
frobeniusDirectImage_p C
687699
Inputs
688700
p : ZZ
689701
C : Complex
@@ -706,10 +718,10 @@ doc ///
706718
X = hirzebruchSurface 1;
707719
R = ring X;
708720
C = complex koszul vars R
709-
frobeniusDirectImage_2 C
721+
frobeniusPushforward_2 C
710722
SeeAlso
711-
(frobeniusDirectImage, ZZ, Module)
712-
(frobeniusDirectImage, ZZ, Matrix)
723+
(frobeniusPushforward, ZZ, Module)
724+
(frobeniusPushforward, ZZ, Matrix)
713725
///
714726

715727
doc ///
@@ -931,9 +943,9 @@ doc ///
931943
RL = prune phi_*^1 L
932944
annihilator RL
933945
SeeAlso
934-
(frobeniusDirectImage, ZZ, Module)
935-
(frobeniusDirectImage, ZZ, Matrix)
936-
(frobeniusDirectImage, ZZ, Complex)
946+
(frobeniusPushforward, ZZ, Module)
947+
(frobeniusPushforward, ZZ, Matrix)
948+
(frobeniusPushforward, ZZ, Complex)
937949
///
938950

939951
------------------------------------------------------------------------------
@@ -943,7 +955,7 @@ doc ///
943955
TEST ///
944956
X = toricProjectiveSpace 2;
945957
S = ring X;
946-
FS = frobeniusDirectImage_2 S^1;
958+
FS = frobeniusPushforward_2 S^1;
947959
assert(degrees FS == {{0}, {1}, {1}, {1}})
948960
///
949961

@@ -952,14 +964,14 @@ X = smoothFanoToricVariety(3,7);
952964
d = dim X;
953965
p = 4;
954966
S = ring X;
955-
FS = frobeniusDirectImage_p S^1
967+
FS = frobeniusPushforward_p S^1
956968
assert(rank FS == p^d)
957969
///
958970

959971
TEST ///
960972
X = hirzebruchSurface 3;
961973
S = ring X;
962-
M = frobeniusDirectImage_2 koszul_1 vars S;
974+
M = frobeniusPushforward_2 koszul_1 vars S;
963975
M' = map(S^{{0, 0}, {1, -1}, {-1, 0}, {1, -1}},
964976
S^{{-1, 0}, {0, -1}, {-1, 0}, {1, -1}, {1, -1}, {2, -1}, {1, -1}, {3, -1},
965977
{-1, 0}, {0, -1}, {-1, 0}, {1, -1}, {0, -1}, {1, -1}, {-1, -1}, {1, -1}},
@@ -976,7 +988,7 @@ d = dim X;
976988
p = 2;
977989
S = ring X;
978990
C = complex koszul vars S;
979-
FC = frobeniusDirectImage_p C;
991+
FC = frobeniusPushforward_p C;
980992
assert(isWellDefined FC)
981993
assert(length FC == length C)
982994
assert(all(length C, i -> rank FC_i == (rank C_i) * p^d))

0 commit comments

Comments
 (0)