@@ -34,6 +34,7 @@ newPackage(
3434export {
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
586588doc ///
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
643649doc ///
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
679688doc ///
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
715727doc ///
@@ -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 ///
943955TEST ///
944956X = toricProjectiveSpace 2 ;
945957S = ring X;
946- FS = frobeniusDirectImage_2 S^1;
958+ FS = frobeniusPushforward_2 S^1;
947959assert (degrees FS == {{0}, {1}, {1}, {1}})
948960///
949961
@@ -952,14 +964,14 @@ X = smoothFanoToricVariety(3,7);
952964d = dim X;
953965p = 4 ;
954966S = ring X;
955- FS = frobeniusDirectImage_p S^1
967+ FS = frobeniusPushforward_p S^1
956968assert (rank FS == p^d)
957969///
958970
959971TEST ///
960972X = hirzebruchSurface 3 ;
961973S = ring X;
962- M = frobeniusDirectImage_2 koszul_1 vars S;
974+ M = frobeniusPushforward_2 koszul_1 vars S;
963975M' = 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;
976988p = 2 ;
977989S = ring X;
978990C = complex koszul vars S;
979- FC = frobeniusDirectImage_p C;
991+ FC = frobeniusPushforward_p C;
980992assert (isWellDefined FC)
981993assert (length FC == length C)
982994assert (all (length C, i -> rank FC_i == (rank C_i) * p^d))
0 commit comments