In the package Schubert2, We could work on eliminating the unneeded variables
in the intersection ring of a projective bundle.  But then the explicit
abstract maps that are constructed there by methods of "map" don't work
any more, because the generators of the ring change to something unexpected.


Index: Schubert2/doc.m2
===================================================================
--- Schubert2/doc.m2	(revision 14806)
+++ Schubert2/doc.m2	(working copy)
@@ -172,7 +172,7 @@
      rank 1 {\em quotients} of the sheaf provided.  The $\PP^5$-bundle of conics is given by sublinebundles of $B$, or
      equivalently, by rank 1 quotients of the dual, $B^*$, as in the following code:
    Example  
-     X = projectiveBundle'(dual B, VariableNames => {,{z}})
+     X = projectiveBundle'(dual B, VariableNames => {{z}})
    Text
      The equation of the general quintic is a section of the fifth symmetric
      power of the space of linear forms on $\PP^4$.  The induced equation on any given
@@ -1539,7 +1539,7 @@
       B = S[h, Join => false]/h^3 -- A^*(P2), but using 2 times a line as the generating class:
       integral B := (b) -> (4 * coefficient((B_0)^2, b))
       c = 1 + (9/2)*h + (15/2)*h^2 -- normal class
-      f = map(B,A,{-h, h, h^2, h^3, h^4, h^5})
+      f = map(B,A,{h})
       i = inclusion(f,
           NormalClass => c,
           Codimension => 3,
@@ -1548,7 +1548,9 @@
       X = source i
       Xstruct = X / point
       rank Xstruct_* tangentBundle X
+      assert( oo == 8 )
       integral chern tangentBundle Z
+      assert( oo == 6 )
 --------
 Node
   Key
@@ -2891,7 +2893,7 @@
   Pre
    > Proj(X,dual(B),z):    # X is the projective bundle of all conics. 
   Example
-   X = projectiveBundle'(dual B, VariableNames => {,{z}})
+   X = projectiveBundle'(dual B, VariableNames => {{z}})
   Pre
    > A:=Symm(5,Qc)-Symm(3,Qc)&*o(-z):  # The rank 11 bundle of quintics 
    >                                   # restricted to the universal conic. 
@@ -2985,7 +2987,7 @@
   Pre
    > Proj(X,dual(B),z):
   Example
-   X = projectiveBundle'(dual B, VariableNames => {,{z}})
+   X = projectiveBundle'(dual B, VariableNames => {{z}})
   Pre
    > A:=Symm(6,Qc)-Symm(3,Qc)&@o(-z):
   Example
Index: Schubert2.m2
===================================================================
--- Schubert2.m2	(revision 14841)
+++ Schubert2.m2	(working copy)
@@ -727,8 +727,12 @@
 	  if not opts.Isotropic 
 	  then t
 	  else t^2 * product gens C);
-     pushforward C := r -> coefficient(sectionClass,r);
-     pushforward ZZ := pushforward QQ := r -> coefficient(sectionClass,promote(r,C));
+     -- now that we may be eliminating the chern classes of the last tautological bundle, we may have to prune the section class
+     sectionClass = leadTerm sectionClass;
+     sectionClassMonomial := leadMonomial sectionClass;
+     sectionClassCoefficientReciprocal := 1 / lift(leadCoefficient sectionClass,QQ);
+     pushforward C := r -> sectionClassCoefficientReciprocal * coefficient(sectionClassMonomial,r);
+     pushforward ZZ := pushforward QQ := r -> sectionClassCoefficientReciprocal * coefficient(sectionClassMonomial,promote(r,C));
      pTangentBundle := (
 	  if opts.Isotropic then (
 	       null					    -- not implemented
@@ -753,22 +757,22 @@
 installMethod(symbol SPACE, OO, RingElement, AbstractSheaf => (OO,h) -> OO_(variety ring h) (h))
 
 projectiveBundle' = method(Options => { VariableNames => null }, TypicalValue => FlagBundle)
-projectiveBundle' ZZ := opts -> n -> flagBundle({n,1},opts)
-projectiveBundle'(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({n,1},X,opts)
-projectiveBundle' AbstractSheaf := opts -> E -> flagBundle({rank E - 1, 1},E,opts)
+projectiveBundle' ZZ := opts -> n -> flagBundle({1},n+1,opts)
+projectiveBundle'(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({1},OO_X^(n+1),opts)
+projectiveBundle' AbstractSheaf := opts -> E -> flagBundle({1},E,opts)
 
 projectiveBundle = method(Options => { VariableNames => null }, TypicalValue => FlagBundle)
-projectiveBundle ZZ := opts -> n -> flagBundle({1,n},opts)
-projectiveBundle(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({1,n},X,opts)
-projectiveBundle AbstractSheaf := opts -> E -> flagBundle({1, rank E - 1},E,opts)
+projectiveBundle ZZ := opts -> n -> flagBundle({1},n+1,opts,QuotientBundles=>false)
+projectiveBundle(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({1},OO_X^(n+1),opts,QuotientBundles=>false)
+projectiveBundle AbstractSheaf := opts -> E -> flagBundle({1},E,opts,QuotientBundles=>false)
 
 projectiveSpace' = method(Options => { VariableName => "h" }, TypicalValue => FlagBundle)
-projectiveSpace' ZZ := opts -> n -> flagBundle({n,1},VariableNames => {,{fixvar opts.VariableName}})
-projectiveSpace'(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({n,1},X,VariableNames => {,{fixvar opts.VariableName}})
+projectiveSpace' ZZ := opts -> n -> flagBundle({1},n+1, VariableNames => {{fixvar opts.VariableName}})
+projectiveSpace'(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({1},OO_X^(n+1), VariableNames => {{fixvar opts.VariableName}})
 
 projectiveSpace = method(Options => { VariableName => "h" }, TypicalValue => FlagBundle)
-projectiveSpace ZZ := opts -> n -> flagBundle({1,n},VariableNames => {{fixvar opts.VariableName},})
-projectiveSpace(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({1,n},X,VariableNames => {{fixvar opts.VariableName},})
+projectiveSpace ZZ := opts -> n -> flagBundle({1}, n+1, VariableNames => {{fixvar opts.VariableName}}, QuotientBundles=>false)
+projectiveSpace(ZZ,AbstractVariety) := opts -> (n,X) -> flagBundle({1},OO_X^(n+1),VariableNames => {{fixvar opts.VariableName}}, QuotientBundles=>false)
 
 PP'  = new ScriptedFunctor from { superscript => i -> projectiveSpace' i }
 PP = new ScriptedFunctor from { superscript => i -> projectiveSpace i }
@@ -1088,7 +1092,7 @@
      -- cannot check that incl is an inclusion, but we check that it is finite
      if not (d == dim Y - dim X) then error "Expected a finite morphism";
      Ndual := dual N;
-     PN := projectiveBundle'(Ndual, VariableNames => {,{x}}); -- x = chern(1,OO_PN(1))
+     PN := projectiveBundle'(Ndual, VariableNames => {{x}}); -- x = chern(1,OO_PN(1))
      C := intersectionRing PN;
      (BasAModule, bas, iLowerMod) := pushFwd iupper;     
      -- iLowerMod(element b of B) = one column matrix over A whose product with bas is b
