Magma
Families of Calabi-Yau hypersurfaces in Q-Fano toric varieties
The following functions check some basic properties of the anticanonical polytope P of a toric variety and of the span Q of its lattice points.
antpol:=function(X)
F:=Fan(X);
n:=#Rays(F);
P:=HalfspaceToPolyhedron(Rays(F)[1],-1);
for i in [2..n]
do P:=P meet HalfspaceToPolyhedron(Rays(F)[i],-1);
end for;
return P;
end function;
An example.
w:=[1,2,3,4,5];
X:=WeightedProjectiveSpace(Rationals(),w);
F:=Fan(X);
P:=antpol(X);
Q:=Polytope(Points(P));
IsReflexive(P);
IsReflexive(Q);
InteriorPoints(Q);
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Given a toric variety X and a polynomial f in R(X), we check whether the associated anticanonical hypersurface is well-formed or quasismooth.
wf:=function(X,f)
R<[x]>:=CoordinateRing(X);
A,B:=SingularCones(Fan(X));
S:=[Scheme(X,[x[a],x[b]]):a,b in [1..#Rays(Fan(X))]|{a,b} in B and a gt b];
r:=[S[i] subset Scheme(X,f): i in [1..#S]];
if r eq [false: i in [1..#S]]
then print "wellformed";
else print "not wellformed";
end if;
return r;
end function;
qs:=function(X,f)
R<[x]>:=CoordinateRing(X);
J:=IrrelevantIdeal(X);
der:=[Derivative(f,i): i in [1..Rank(R)]];
I:=Ideal(der);
if J subset Radical(I) then print "quasismooth";
else print "not quasismooth";
end if;
return MinimalBasis(Radical(I));
end function;
An example.
X<[x]>:=WeightedProjectiveSpace(Rationals(),[1,1,2,3,3,3]);
R<[x]>:=CoordinateRing(X);
Q:=RiemannRochPolytope(-CanonicalDivisor(X));
monv:=[LatticeElementToMonomial(-CanonicalDivisor(X),p): p in Vertices(Q)];
f:=&+[monv[i]: i in [16,15,14,13,12,4]];
f:=R!f;
wf(X,f);
qs(X,f);
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The following function computes the Berglund-Hübsch-Krawitz dual of a triple (X,W,G), where X is a weighted projective space and G is a subgroup of SL(n,C) which leaves W invariant.
The input is given by a polynomial W of Delsarte type in n variables and of a sequence g of sequences with n rational entries representing the generators of the group G.
For example:
R<[x]>:=PolynomialRing(Rationals(),4);
W:=x[1]^2+x[2]^3+x[3]^12+x[4]^12;
g:=[[0/1,0/1,0/1,0/1]];
or
R<[x]>:=PolynomialRing(Rationals(),4);
W:=x[1]^2+x[2]^3+x[3]^12+x[4]^12;
g:=[[0,0,1/6,5/6]];
The following function computes the minimal weights making W homogeneous.
weights:=function(W)
A:=Matrix(Rationals(),[Exponents(m): m in Monomials(W)]);
n:=NumberOfRows(A);
e:=Matrix(Rationals(),n,1,[1: i in [1..n]]);
q:=A^-1*e;
deg:=Lcm([Denominator(q[i]): i in [1..n]]);
w:=Vector(Integers(), Transpose(deg*q));
w:=[w[i]: i in [1..n]];
return w;
end function;
The following function computes the Berglund-Hübsch-Krawitz dual (X*,W*,G*) of the triple (X,W,G).
BHK:=function(W,g)
X:=FakeProjectiveSpace(Rationals(),weights(W),g);
n:=#weights(W);
P2:=antpol(X);
exps:=[Exponents(m): m in Monomials(W)];
one:=Vector([1: i in [1..n]]);
U:=Matrix([Solution(Transpose(Matrix(Rays(Fan(X)))), Vector(i)-one): i in exps]);
P1b:=Polytope(RowSequence(U));
S:=[];
for i in [1..#Points(P2)] do if SetToSequence(Points(P2))[i] in Points(P1b) then Append(~S, SetToSequence(Points(P2))[i]);
end if;
end for;
P1:=Polytope(S);
Y:=ToricVariety(Rationals(),NormalFan(Polar(P1)));
Wt:=&+[LatticeElementToMonomial(-CanonicalDivisor(Y), p): p in Vertices(Polar(P2))];
return Y, Wt;
end function;