2 questions about pruning HyperplaneArrangement output
Posted: 24 Feb 2026, 03:36
I have 2 questions about symmetry (of different kinds) of rays computed via the HyperplaneArrangement objects. I may well be doing something wrong, I just started using application "fan".
I understand geometrically why each ray supporting line is reported as two rays, but in my application I only want one of these. I thought adding x_1 >= 0 to SUPPORT.INEQUALITIES would reduce duplicates, but in generalit introduces more new rays on the boundary of the support than it eliminates. In the following sample, you can try eliminating the last inequality. These rays are not on any of the input hyperplanes, so I'm not sure if reporting them is correct or not.I could imagine arguments for both conclusions. Is there a (simple) way to get what I want here, or should i just live with the 2x overhead?
My second question is whether there is some built-in support for computing rays up to symmetry. I can vaguely imagine manually building a zonotope and applying the existing machinery for polytopes, but before I work out those details I would like to know if it is needed.
I understand geometrically why each ray supporting line is reported as two rays, but in my application I only want one of these. I thought adding x_1 >= 0 to SUPPORT.INEQUALITIES would reduce duplicates, but in generalit introduces more new rays on the boundary of the support than it eliminates. In the following sample, you can try eliminating the last inequality. These rays are not on any of the input hyperplanes, so I'm not sure if reporting them is correct or not.I could imagine arguments for both conclusions. Is there a (simple) way to get what I want here, or should i just live with the 2x overhead?
Code: Select all
#!/usr/bin/polymake --script
# -*- perl -*-
use application "fan";
my $debug=1;
my $HA=new HyperplaneArrangement(HYPERPLANES=>
[[1, 0, 1, 1],
[0, 1, 1, 1]],
"SUPPORT.INEQUALITIES"=>
[[1, 1, -1, 0],
[0, 0, 1, -1],
[-1, -1, 1, 0],
[0, 0, -1, 1],
[1,0,0,0]]
);
print "rays:\n";
print rows_labeled($HA->CHAMBER_DECOMPOSITION->RAYS);
print "\nrays in hyperplanes\n";
print rows_labeled($HA->RAYS_IN_HYPERPLANES);