The first row of the output table contains the degrees, the second row contains the values of the hilbertFunction, the third row contains the values of the hilbertPolynomial. In the following example, the hilbertFunction and polynomial always agree.
i1 : V = {{0,0},{1,0},{1,1},{0,1}} o1 = {{0, 0}, {1, 0}, {1, 1}, {0, 1}} o1 : List |
i2 : F = {{0,1,2},{0,2,3}} o2 = {{0, 1, 2}, {0, 2, 3}} o2 : List |
i3 : E = {{0,1},{0,2},{0,3},{1,2},{2,3}} o3 = {{0, 1}, {0, 2}, {0, 3}, {1, 2}, {2, 3}} o3 : List |
i4 : hilbertComparisonTable(0,8,splineModule(V,F,E,1)) +-----------+-+-+-+--+--+--+--+--+--+ o4 = |Degree |0|1|2|3 |4 |5 |6 |7 |8 | +-----------+-+-+-+--+--+--+--+--+--+ |Dimension |1|3|7|13|21|31|43|57|73| +-----------+-+-+-+--+--+--+--+--+--+ |HilbertPoly|1|3|7|13|21|31|43|57|73| +-----------+-+-+-+--+--+--+--+--+--+ |
The dimension of splines of degree at most d on a complex $\Delta$ is eventually given by a polynomial in d, which is the Hilbert polynomial of the spline module. Below we illustrate with the Morgan-Scot partition. Notice that the Hilbert polynomial for the symmetric Morgan-Scot partition and the asymmetric Morgan-Scot partition are the same, however the Hilbert functions disagree in degree 2.
i5 : V = {{-1,-1},{1,-1},{0,1},{10,10},{-10,10},{0,-10}}; |
i6 : V'= {{-1,-1},{1,-1},{0,1},{10,10},{-10,10},{1,-10}}; |
i7 : F = {{0,1,2},{2,3,4},{0,4,5},{1,3,5},{1,2,3},{0,2,4},{0,1,5}}; |
i8 : M = splineModule(V,F,1); |
i9 : hilbertPolynomial(M,Projective=>false) 7 2 15 o9 = -i - --i + 7 2 2 o9 : QQ[i] |
i10 : M' = splineModule(V',F,1); |
i11 : hilbertPolynomial(M',Projective=>false) 7 2 15 o11 = -i - --i + 7 2 2 o11 : QQ[i] |
i12 : hilbertComparisonTable(0,4,M) +-----------+-+-+-+--+--+ o12 = |Degree |0|1|2|3 |4 | +-----------+-+-+-+--+--+ |Dimension |1|3|7|16|33| +-----------+-+-+-+--+--+ |HilbertPoly|7|3|6|16|33| +-----------+-+-+-+--+--+ |
i13 : postulationNumber(M) --final integer for which hilbert function and polynomial disagree o13 = 2 |
i14 : hilbertComparisonTable(0,4,M') +-----------+-+-+-+--+--+ o14 = |Degree |0|1|2|3 |4 | +-----------+-+-+-+--+--+ |Dimension |1|3|6|16|33| +-----------+-+-+-+--+--+ |HilbertPoly|7|3|6|16|33| +-----------+-+-+-+--+--+ |
i15 : postulationNumber(M') o15 = 0 |
In the following example, we compare the hilbert polynomial and hilbert function of splines over a centrally triangulated octahedron; the behavior is very similar to the Morgan-Scot partition, except there is an extra degree of symmetry available which alters the Hilbert polynomials. Notice the use of the option Homogenize=>false to consider splines of degree precisely d instead of splines of degree at most d.
i16 : V={{0,0,0},{1,0,0},{0,1,0},{0,0,1},{-1,0,0},{0,-1,0},{0,0,-1}}; --most symmetric variant |
i17 : V'={{0,0,0},{0,2,-1},{-1,-1,-1},{1,-1,-1},{0,-2,2},{1,1,2},{-1,1,2}}; --somewhat symmetric variant |
i18 : V''={{0,0,0},{10,1,1},{-1,10,1},{-1,1,10},{-10,1,-1},{1,-10,1},{-1,-1,-10}}; --asymmetric variant |
i19 : F={{0,1,2,3},{0,1,2,6},{0,1,3,5},{0,1,5,6},{0,2,3,4},{0,2,4,6},{0,3,4,5},{0,4,5,6}}; |
i20 : M=splineModule(V,F,1,Homogenize=>false); |
i21 : hilbertPolynomial(M,Projective=>false) 2 o21 = 4i - 12i + 20 o21 : QQ[i] |
i22 : M'=splineModule(V',F,1,Homogenize=>false); |
i23 : hilbertPolynomial(M',Projective=>false) 2 o23 = 4i - 12i + 14 o23 : QQ[i] |
i24 : M''=splineModule(V'',F,1,Homogenize=>false); |
i25 : hilbertPolynomial(M'',Projective=>false) 2 o25 = 4i - 12i + 14 o25 : QQ[i] |
i26 : hilbertComparisonTable(0,6,M) +-----------+--+--+--+--+--+--+--+ o26 = |Degree |0 |1 |2 |3 |4 |5 |6 | +-----------+--+--+--+--+--+--+--+ |Dimension |1 |3 |9 |19|36|60|92| +-----------+--+--+--+--+--+--+--+ |HilbertPoly|20|12|12|20|36|60|92| +-----------+--+--+--+--+--+--+--+ |
i27 : postulationNumber(M) --largest integer for which hilbert function and polynomial disagree o27 = 3 |
i28 : hilbertComparisonTable(0,6,M') +-----------+--+-+-+--+--+--+--+ o28 = |Degree |0 |1|2|3 |4 |5 |6 | +-----------+--+-+-+--+--+--+--+ |Dimension |1 |3|7|14|30|54|86| +-----------+--+-+-+--+--+--+--+ |HilbertPoly|14|6|6|14|30|54|86| +-----------+--+-+-+--+--+--+--+ |
i29 : postulationNumber(M') o29 = 2 |
i30 : hilbertComparisonTable(0,6,M'') +-----------+--+-+-+--+--+--+--+ o30 = |Degree |0 |1|2|3 |4 |5 |6 | +-----------+--+-+-+--+--+--+--+ |Dimension |1 |3|6|14|30|54|86| +-----------+--+-+-+--+--+--+--+ |HilbertPoly|14|6|6|14|30|54|86| +-----------+--+-+-+--+--+--+--+ |
i31 : postulationNumber(M'') o31 = 1 |
The object hilbertComparisonTable is a method function.