Some progress on the Hilbert series of CY orbifolds.
(1) The general formula is
PI + sum_{B in BB} Porb(B,0) + sum_{C in CC} PC(C)
here (1) the **initial term** is
PI = (1 + at + bt^2 + at^3 + t^4)/(1-t)^4
in the point sum, each B = 1/r(a1,a2,a3), and the term is
Porb(B,0) = Num/(1-t)^3/(1-t^r)
where, in the isolated case, Num is the unique polynomial with support in
[3,r] which is the inverse of prod ((1-t^ai)/(1-t)); in general you also
have to take out /(1-t^b) for common factors, etc., and the function is
given by Magma function Qorb below.
in the curve sum, each C = 1/r(a,r-a) (+ data), and the term is
PC = Num/(1-t)^2(1-t^r)^2
where Num is a symmetric polynomial of degree 2r+2 supported in [3,2r-1].
Num has r-1 arbitrary coefficients, and my current working assumption is
that all values in an open range will occur.
(2) I have a routine to reverse engineer this formula for each Y in the
list of 7555 qsmooth hypersurface. Here P(A) and PI(A) are obvious things.
Bask(A) is selfcontained; it just calculates the list [ai mod r, d mod r]
for A = [a1,..a5,d], and puts the singular points and curves it finds
into baskets B and C. PointTerms is the sum over point terms, using the
preprogrammed function Qorb. X(A) is the sum of the curve terms, treated
here as an unknown to be taken apart. X(A) is supposed to be a sum of
terms Num_r/Denom([1,1,r,r]) over the baskets. The function PC determines
the different numerators Num_r using PartialFractionDecomposition plus
a couple of little twists -- this is recent and only tested in a few
hundred cases. It may go wrong, for example if Y has curves of
singularities with index having a common factor.
See below for examples of its use.
// Given a qsmooth CY hypersurface Y(d) in PP(a1,.. a5)
// in the form A := [a1,..a5,d], parse it into the form
// PI (initial term)
// plus sum Porb(1/r(a,b,c)) with 1/r(a,b,c) in PointBasket
// plus sum Ar/[1,1,r,r] where Ar is a symmetric polynomial
// of symmetric degree 2r+2 with support in [3..2r-1].
function P(A)
return (1-t^A[6])/Denom(A[1..5]);
end function;
function PI(A) // Initial term P_I, only for CY 3folds
n1 := #[i : i in A | i eq 1];
n2 := #[i : i in A | i eq 2];
return (1 + (n1-4)*t + (n2+Binomial(n1-3,2))*t^2 + (n1-4)*t^3 + t^4)/(1-t)^4;
end function;
function Bask(A);
B := []; C := [];
Relevant := [r : r in [2..A[5]] | r eq GCD([Integers()
| A[i] : i in [1..5] | A[i] mod r eq 0])];
for r in Relevant do
Amod := [a mod r : a in A ];
case [#[a : a in Amod[1..5] | a eq 0],#[a : a in Amod[6..6] | a eq 0]]:
// when 0:; // no sing, do nothing when 4:; //error when 5:; //error
when [1,0]:
Append(~B, Insert(Exclude(Exclude(Amod[1..5],Amod[6]),0),1,r));
// end this case: If ai divides d then Pi not on X
when [2,1]:
// calculate the number S^0(d) in PP(ai,aj)
Num := Floor(A[6]/LCM([a : a in A[1..5] | a mod r eq 0]));
for i in [1..Num] do
Append(~B, Insert(Exclude(Exclude(Amod[1..5],0),0),1,r));
end for;
// end if; If r does not divides d then Lij is line of 1/r
when [2,0]:
Append(~C, Insert(Exclude(Exclude(Exclude(Amod[1..5],0),0),Amod[6]),1,r));
when [3,1]:; // necessarily r divides d and curve of 1/r
Append(~C, Insert(Exclude(Exclude(Exclude(Amod[1..5],0),0),0),1,r));
end case;
end for;
return B, C;
end function;
function PointTerms(B)
return &+[K | Qorb(b[1],b[2..4],0) : b in B];
end function;
function X(A)
return P(A)-PI(A)-PointTerms(Bask(A));
end function;
function PC(A) // The curve terms P_C
B,C := Bask(A);
YY := PartialFractionDecomposition(X(A)/t^3*(1-t)^4);
return [t^3/(1-t)^4*&+[K|y[3]/y[1]^y[2] : y in YY
| IsDivisibleBy(1-t^r,y[1])] where r is c[1] : c in C];
end function;
===================
for example, a little segment from the famous 7555:
AA:=[[1,12,27,32,36,108],[1,12,27,40,40,120],[1,12,27,68,96,204],[1,12,27,68,108,216],[1,12,32,39,45,129],[1,12,33,40,46,132],[1,12,33,92,138,276],[1,12,39,52,52,156],[1,12,39,52,65,169],[1,12,39,52,92,196],[1,12,39,52,103,207],[1,12,39,104,156,312],[1,12,40,93,134,280],[1,12,41,96,138,288],[1,12,42,98,141,294],[1,12,51,64,127,255],[1,12,51,64,128,256],[1,12,53,120,186,372],[1,12,54,68,81,216],[1,12,54,122,189,378],[1,12,64,153,230,460],[1,12,66,92,105,276],[1,12,66,158,237,474],[1,12,76,177,266,532],[1,12,77,180,270,540],[1,12,78,104,117,312],[1,13,15,30,46,105],[1,13,21,28,62,125],[1,13,21,35,35,105],[1,13,21,35,69,139],[1,13,22,29,52,117],[1,13,23,28,32,97],[1,13,28,56,98,196],[1,13,28,70,111,223],[1,13,29,43,73,159],[1,13,29,44,74,161],[1,13,30,75,106,225],[1,13,34,41,88,177],[1,13,34,61,108,217],[1,13,34,95,142,285],[1,13,41,96,150,301],[1,13,41,109,163,327]];
> AA[34];
[ 1, 13, 28, 70, 111, 223 ]
> Bask(AA[34]);
[
[ 13, 1, 5, 7 ],
[ 28, 1, 13, 14 ],
[ 70, 1, 28, 41 ],
[ 111, 13, 28, 70 ]
]
[
[ 14, 1, 13 ]
]
> X(AA[34]);
(-t^22 - t^20 - t^18 - t^17 - t^16 - t^15 - t^14 - t^13 - t^12 - t^10 -
t^8)/(t^30 - 2*t^29 + t^28 - 2*t^16 + 4*t^15 - 2*t^14 + t^2 - 2*t + 1)
> PartialFractionDecomposition(X(AA[34])/t^3*(1-t)^4);
[
,
,
,
,
]
> [X(A) eq &+[K| x : x in PC(A)] : A in AA];
// gives "true" 42 times, and checks that the routines work without crashing.
===================
(III) The above analyses existing examples, and can be quickly programmed
to put the 7555 hypersurfaces into a database. I want to use these ideas
to predict new example. We expect the nicely generated CYs to be sparse
in the set of all possible Hilbert series, so that if I modify P(Y) by a
clumsy amount, it is unlikely that the new P(Y) will correspond to a Y
that we can work with. However, I can modify the above Num_r to make more
delicate variations, e.g.,
> A := [1,4,5,5,5,20];
is a hypersurface with a curve Ga of 1/5(1,4), and Ga contributes
(2*t^9 + 4*t^8 + 6*t^7 + 2*t^6 + 6*t^5 + 4*t^4 + 2*t^3)/[1,1,5,5]
I modify it by changing the 6,2,6 in the middle to 5,4,5 (which should
remove a generator in deg 5, leave the point singularities and the
degree of the curve unchanged).
> P1 := (1-t^20)/Denom([1,4,5,5,5]);
// the Hilbert series of Y(20) in PP(1,4,5,5,5)
> P2 := P1 + (-t^7+2*t^6-t^5)/Denom([1,1,5,5]);
> P2*Denom([1,4,5,5,6,9]);
t^30 - t^18 - t^12 + 1
That is, the modification gives Y(12,18) in PP(1,4,5,5,6,9)
Or change the 4,6,2,6,4 in the middle to 3,6,4,6,3
(which should remove a generator in deg 4 and add one in deg 6).
> P3 := P1 + (-t^8+2*t^6-t^4)/Denom([1,1,5,5]);
gives a plausible codim 4 guy with 9 x 16 resolution
Or change the Numerator of the Ga term to
(2*t^9 + 3*t^8 + 7*t^7 + 2*t^6 + 7*t^5 + 3*t^4 + 2*t^3)
> P4 := P1 - (t^8+-t^7-t^5+t^4)/Denom([1,1,5,5]);
> P4*Denom([1,5,5,5,7,8,9]);
-t^40 + t^26 + t^25 + t^24 + t^23 + t^22 - t^18 - t^17 - t^16 - t^15\
- t^14 + 1
gives candidate codim 3 Y in PP(1,5,5,5,7,8,9) with 5x5 Pfaffian matrix of
degrees
5,6,7,8
7,8,9
9,10
11
We can play this game about a million times with the existing list.
===================
> load "CY/AAKS2";
// Loading "CY/AAKS2"
> #AAKS2;
// 14817
function BB(AA,r,a) // find transverse 1/r(a,r-a) curves in list AA of CYs
BB0 := [A : A in AA | (([r,a,r-a] in C) or ([r,r-a,a] in C)) where B,C is Bask(A)];
BB1 := [BB0[i] : i in [1..#BB0] | &and[GCD(b[1],r) eq 1 : b in Bask(BB0[i])]];
return [BB1[i] : i in [1..#BB1] | (BB1[i][6] mod r) in [0,a,r-a]];
end function;
> AA := BB(AAKS2,5,2);
> #AA;
// 19
[ 4, 5, 6, 65, 66, 67, 69 ]