In the first instance, I'm trying to create a regular subdivision where the weights are very close to being non-generic. I found this example by taking a non-generic regular subdivision and then perturbing the weights in order to triangulate the subdivision.
My understanding from reading the regular subdivision tutorial is that I can create this regular subdivision as either a GeometricSimplicialComplex or a SubdivisionOfPoints. I am sometimes getting different results (different numbers of facets). The strangest thing is that when I compute the subdivision as a simplicial complex, and then as SubdivisionOfPoints, I get different results, but when I compute the subdivision first as a SubdivisionOfPoints and then as a GeometricSimplicialComplex I get the same number of facets.
The second issue occurs when I have non-generic weights, and the lift of one point is in the interior of a facet of the convex hull of the lifts. For example, when I lift the points [1, 0, 0],[0, 1, 0],[0, 0, 1],[1/3, 1/3, 1/3] all to the same height, then I expect that the vertex [1/3, 1/3, 1/3] will not affect the subdivision (i.e. the resulting subdivision will be a simplex). It does seem to affect the subdivision, whether subdividing as either a SubdivisionOfPoints or a GeometricSimplicialComplex. The result here also depends on whether I compute the simplicial complex first or the SubdivisionOfPoints first.
I have copied two scripts that show the problem (when run on my machine) and their output (on my machine) below. I am running them using polymake 3.2, and I apologize if this behavior doesn't occur in later versions of polymake.
Code: Select all
#!/usr/bin/perl
use strict;
use warnings;
use application "polytope";
#issue 1
my $weighvec = [1119616434621928737146487283/1119767540418050273071595520, 630303703963049448425029177/630454814929029114609270784, 903520937582759424843689743/903672050161935308092866560, 11750759022478040901936349103/11751967892473810207318736896, 1974175881439027203046390165/1974780326340496756882538496, 15716035675241572674003927/16924961474604808445886464, 604462917250477430589221/1208925819614629174706176, 4835703284983331132448781/9671406556917033397649408, 302231460430745248372667/604462909807314587353088, 4835703285237592410830129/9671406556917033397649408, 4835703316833388544560899/6044629098073145873530880];
my $coords = [[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1/7, 5/7, 1/7],[1/2, 0, 0, 1/2, 0],[0, 1/2, 0, 1/2, 0],[0, 1/2, 0, 0, 1/2],[1/2, 0, 0, 0, 1/2],[0, 0, 2/5, 0, 3/5]];
my $weightsRef = new Vector<Rational>($weighvec);
my $baryMat=new Matrix<Rational>($coords);
my $simp = new topaz::GeometricSimplicialComplex(COORDINATES=>$baryMat, INPUT_FACES=>regular_subdivision($baryMat, $weightsRef));
print "Results when triangulating as simplex";
print "\n";
print $simp->FACETS;
print "Number of facets is ";
print $simp->N_FACETS;
print "\n \n";
my $fan = new fan::SubdivisionOfPoints(POINTS=>$baryMat, WEIGHTS=>$weightsRef);
my $complex = $fan->POLYHEDRAL_COMPLEX;
print "Results when triangulating as polytope";
print "\n";
print $complex->MAXIMAL_POLYTOPES;
print "Number of facets is ";
print $complex->N_MAXIMAL_POLYTOPES;
print "\n \n";
#issue 2
my $weighvec2 = [2/3, 2/3, 2/3, 2/3];
my $coords2 = [[1, 0, 0],[0, 1, 0],[0, 0, 1],[1/3, 1/3, 1/3]];
my $weightsRef2 = new Vector<Rational>($weighvec2);
my $baryMat2=new Matrix<Rational>($coords2);
my $simp2 = new topaz::GeometricSimplicialComplex(COORDINATES=>$baryMat2, INPUT_FACES=>regular_subdivision($baryMat2, $weightsRef2));
print "Results when triangulating as simplex";
print "\n";
print $simp2->FACETS;
print "\n \n";
my $fan2 = new fan::SubdivisionOfPoints(POINTS=>$baryMat2, WEIGHTS=>$weightsRef2);
my $complex2 = $fan2->POLYHEDRAL_COMPLEX;
print "Results when triangulating as polytope";
print "\n";
print $complex2->MAXIMAL_POLYTOPES;
print "\n \n";
Code: Select all
Results when triangulating as simplex
{2 7 8 9 10}
{1 2 7 8 9}
{4 7 8 9 10}
{3 4 6 7 10}
{2 3 5 6 7}
{3 5 6 7 10}
{2 5 6 7 10}
{2 6 7 9 10}
{4 6 7 9 10}
{1 2 6 7 9}
{0 1 2 6 9}
Number of facets is 11
Results when triangulating as polytope
{2 7 8 9 10}
{5 7 8 9 10}
{1 2 7 8 9}
{4 5 7 8 9}
{4 5 8 9 10}
{2 3 5 6 7}
{3 4 5 6 7}
{2 5 6 7 10}
{5 6 7 9 10}
{2 6 7 9 10}
{4 5 6 7 9}
{1 2 6 7 9}
{0 1 2 6 9}
Number of facets is 13
Results when triangulating as simplex
{0 1 2 3}
Results when triangulating as polytope
{1 2 3}
{0 2 3}
{0 1 3}
Code: Select all
#!/usr/bin/perl
use strict;
use warnings;
use application "polytope";
#issue 1
#my $weighvec = [17913862824323702710646821813/17916280646688804369145528320, 1260607402770731175116102887/1260909629858058229218541568, 903520941296282237617641323/903672050161935308092866560, 1468844882210793638674158479/1468995986559226275914842112, 246771983594603745607701539/246847540792562094610317312, 7858017872235379045634225/8462480737302404222943232, 37778931944231733404985/75557863725914323419136, 151115729793524004060907/302231454903657293676544, 75557865028205484082603/151115727451828646838272, 302231458464929106984613/604462909807314587353088, 302231458012893609143409/377789318629571617095680];
my $weighvec = [1119616434621928737146487283/1119767540418050273071595520, 630303703963049448425029177/630454814929029114609270784, 903520937582759424843689743/903672050161935308092866560, 11750759022478040901936349103/11751967892473810207318736896, 1974175881439027203046390165/1974780326340496756882538496, 15716035675241572674003927/16924961474604808445886464, 604462917250477430589221/1208925819614629174706176, 4835703284983331132448781/9671406556917033397649408, 302231460430745248372667/604462909807314587353088, 4835703285237592410830129/9671406556917033397649408, 4835703316833388544560899/6044629098073145873530880];
my $coords = [[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1/7, 5/7, 1/7],[1/2, 0, 0, 1/2, 0],[0, 1/2, 0, 1/2, 0],[0, 1/2, 0, 0, 1/2],[1/2, 0, 0, 0, 1/2],[0, 0, 2/5, 0, 3/5]];
my $weightsRef = new Vector<Rational>($weighvec);
my $baryMat=new Matrix<Rational>($coords);
my $fan = new fan::SubdivisionOfPoints(POINTS=>$baryMat, WEIGHTS=>$weightsRef);
my $complex = $fan->POLYHEDRAL_COMPLEX;
print "Results when triangulating as polytope";
print "\n";
print $complex->MAXIMAL_POLYTOPES;
print $complex->N_MAXIMAL_POLYTOPES;
print "\n \n";
my $simp = new topaz::GeometricSimplicialComplex(COORDINATES=>$baryMat, INPUT_FACES=>regular_subdivision($baryMat, $weightsRef));
print "Results when triangulating as simplex";
print "\n";
print $simp->FACETS;
print $simp->N_FACETS;
print "\n \n";
#issue 2
my $weighvec2 = [2/3, 2/3, 2/3, 2/3];
my $coords2 = [[1, 0, 0],[0, 1, 0],[0, 0, 1],[1/3, 1/3, 1/3]];
my $weightsRef2 = new Vector<Rational>($weighvec2);
my $baryMat2=new Matrix<Rational>($coords2);
my $fan2 = new fan::SubdivisionOfPoints(POINTS=>$baryMat2, WEIGHTS=>$weightsRef2);
my $complex2 = $fan2->POLYHEDRAL_COMPLEX;
print "Results when triangulating as polytope";
print "\n";
print $complex2->MAXIMAL_POLYTOPES;
print "\n \n";
my $simp2 = new topaz::GeometricSimplicialComplex(COORDINATES=>$baryMat2, INPUT_FACES=>regular_subdivision($baryMat2, $weightsRef2));
print "Results when triangulating as simplex";
print "\n";
print $simp2->FACETS;
print "\n \n";
Code: Select all
Results when triangulating as polytope
{2 7 8 9 10}
{5 7 8 9 10}
{1 2 7 8 9}
{4 5 7 8 9}
{4 5 8 9 10}
{2 3 5 6 7}
{3 4 5 6 7}
{2 5 6 7 10}
{5 6 7 9 10}
{2 6 7 9 10}
{4 5 6 7 9}
{1 2 6 7 9}
{0 1 2 6 9}
13
Results when triangulating as simplex
{2 7 8 9 10}
{5 7 8 9 10}
{1 2 7 8 9}
{4 5 7 8 9}
{4 5 8 9 10}
{2 3 5 6 7}
{3 4 5 6 7}
{2 5 6 7 10}
{5 6 7 9 10}
{2 6 7 9 10}
{4 5 6 7 9}
{1 2 6 7 9}
{0 1 2 6 9}
13
Results when triangulating as polytope
{1 2 3}
{0 2 3}
{0 1 3}
Results when triangulating as simplex
{1 2 3}
{0 2 3}
{0 1 3}
Matt