/////////////////////////////////////////////////////////////////////////
// points
// $Revision: 31078 $
// $Date: 2010-11-30 23:38:30 +1100 (Tue, 30 Nov 2010) $
// $LastChangedBy: kasprzyk $
/////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////
// Lattice Points and Convex Hull
/////////////////////////////////////////////////////////////////////////
"------\nLattice Points and Convex Hull\n";

W:=[5,7,8,9];
h:=&+W;
V:=[];
for i in [1..#W] do
    v:=[Rationals() | -1 : j in [1..#W]];
    v[i]:=(h - W[i]) / W[i];
    Append(~V,v);
end for;

P:=Polytope(V);
assert NumberOfVertices(P) eq 4;
assert EhrhartCoefficients(P,10) eq [1,5,25,69,146,268,442,680,990,1382,1866];
F:=DualFan(P);
C:=CoxRing(Rationals(),F);
assert NumberOfGradings(C) eq 1;
G:=Gradings(C)[1];
assert Seqset(G) eq {5,7,8,9};

K:=Polytope(Points(P)); 
assert Dimension(K) eq 3;
time Vertices(K);
assert NumberOfVertices(K) eq 5;
assert &and[H[1] * v ge H[2] : H in Inequalities(K), v in Vertices(K)];
assert EhrhartCoefficients(K,10) eq [1,5,14,30,55,91,140,204,285,385,506];

F:=FanOfWPS([1,3,4,5]);
P:=Polytope(Rays(F));
assert EhrhartDeltaVector(P) eq [1,1,10,1];
assert EhrhartCoefficient(P,10000) eq 2166766675001;
D:=Dual(P);
delta:=EhrhartDeltaVector(D);
vol:=&+delta / GorensteinIndex(P)^(Dimension(D) + 1);
assert Volume(D) eq vol;
assert &and[delta[i] eq delta[#delta - i + 1] : i in [1..#delta]];

/////////////////////////////////////////////////////////////////////////
// Finally, clear the caches
/////////////////////////////////////////////////////////////////////////
"------\nClearing caches\n";

CacheClearToricVariety();
CacheClearToricLattice();
