# AlgebraicSplines -- a package for working with splines on simplicial complexes, polytopal complexes, and graphs

## Description

This package provides methods for computations with piecewise polynomial functions (splines) over polytopal complexes.

Let $\Delta$ be a partition (simplicial,polytopal,cellular,rectilinear, etc.) of a space $\RR^n$. The spline module $S^{r}(\Delta)$ is the module of all functions $f$ continuously differentiable to order $r$ such that $f$ is a polynomial when restricted to each facet $\sigma\in\Delta$. The vector space $S^r_d(\Delta)$ consists of splines whose polynomial restrictions have degree at most $d$. Its dimension is of particular interest in approximation theory (see ).

The foundations of the algebraic approach to splines (as it applies to numerical analysis) was developed by Billera and Rose in ,,. In particular, it is shown in  that dim$S^r_d(\Delta)=$dim$S^r(c\Delta)_d$, where $S^r(c\Delta)_d$ is the vector space of splines of degree exactly $d$ on the cone $c\Delta$ over $\Delta$. So the statistic dim$S^r_d(\Delta)$ is the Hilbert function of $S^r(c\Delta)$. The functions splineMatrix and splineModule construct the matrix from  whose kernel is $S^r(\Delta)$, and the module $S^r(\Delta)$, respectively. The functions splineDimensionTable and hilbertComparisonTable display the statistic dim$S^r_d(\Delta)$ and compare it to the long term dimension formula, respectively.

In , Billera uses a homological approach to solve a conjecture of Strang on the dimension of the space $S^1_d(\Delta)$. The chain complex which he defines in  was later modified by Schenck and Stillman in ; we will call this the Billera-Schenck-Stillman chain complex. It has appeared in many papers due to its use in finding dim$S^r_d(\Delta)$; perhaps most notable is . In  the chain complex is also used to compute dimension formulas in the polytopal setting. The Billera-Schenck-Stillman complex is implemented by the method splineComplex. The Billera-Schenck-Stillman chain complex is a quotient of the cellular chain complex of $\Delta$ (relative to the boundary of $\Delta$); the latter is computed by cellularComplex. The kernel of this surjection is given by idealsComplex.

The functions mentioned thus far are concerned only with the structure of $S^r(\Delta)$ as a module over the polynomial ring. The method ringStructure constructs $S^r(\Delta)$ as a quotient of a polynomial ring, thus recovering its ring structure. In , Billera shows that there is a natural isomorphism between the affine Stanley-Reisner ring $K_a[\Delta]$ (see explanation in documentation for ringStructure) of a simplicial complex and the ring $S^0(\Delta)$ of continuous piecewise polynomials on $\Delta$. The isomorphism identifies the variable corresponding to a vertex with the Courant function for that vertex. The method courantFunctions computes these functions, and the method stanleyReisner constructs the isomorphism identified in . Moreover, the rings $S^r(\Delta)$ live inside $S^0(\Delta)$ - this is of particular interest when $\Delta$ is simplicial due to Billera's result. The method stanleyReisnerPresentation constructs $S^r(\Delta)$ as a quotient of a ring map from a polynomial ring into $S^0(\Delta)$; in particular the generators of $S^r(\Delta)$ are presented in terms of generators of $S^0(\Delta)$. If $\Delta$ is simplicial these are selected to be the Courant functions.

In topology, splines arise as equivariant cohomology of spaces with a torus action via GKM theory - see  for a survey of how this relates to splines in numerical analysis; and  for the precise relationship between continuous splines and the equivariant Chow cohomology of toric varieties. From this perspective, the notion of generalized splines on graphs was introduced in . The method generalizedSplines computes splines in this more flexible setting. The relationship to splines in numerical analysis is via the dual graph described by Rose in ,.

Additionally, there are connections between splines and the module of multi-derivations of a hyperplane arrangement. A basic structural connection was noticed in . For the braid arrangement and its sub-arrangements, the module of derivations is isomorphic to a ring of splines in a natural way (see  and ).

Methods in this package borrow from code written by Hal Schenck.

References:\break  Louis J. Billera. Homology of smooth splines: generic triangulations and a conjecture of Strang. Trans. Amer. Math. Soc., 310(1):325–340, 1988.\break  Louis J. Billera, The Algebra of Continuous Piecewise Polynomials, Adv. in Math. 76, 170-183 (1989).\break  Louis J. Billera and Lauren L. Rose. A dimension series for multivariate splines. Discrete Comput. Geom., 6(2):107–128, 1991.\break  Michael DiPasquale. Generalized Splines and Graphic Arrangements. J. Algebraic Combin. 45 (2017), no. 1, 171-189.\break  Simcha Gilbert, Julianna Tymoczko, and Shira Viel. Generalized splines on arbitrary graphs. Pacific J. Math. 281 (2016), no. 2, 333-364.\break  Sam Payne, Equivariant Chow cohomology of toric varieties, Math. Res. Lett. 13 (2006), 29-41.\break  Lauren Rose, Combinatorial and topological invariants of modules of piecewise polynomials, Adv. Math. 116 (1995), 34-45.\break  Lauren Rose, Graphs, syzygies, and multivariate splines, Discrete Comput. Geom. 32 (2004), 623-637.\break  T. McDonald, H. Schenck, Piecewise polynomials on polyhedral complexes, Adv. in Appl. Math. 42 (2009), 82-93.\break  Hal Schenck and Mike Stillman. Local cohomology of bivariate splines. J. Pure Appl. Algebra,117/118:535–548, 1997. Algorithms for algebra (Eindhoven, 1996).\break  Hal Schenck, A Spectral Sequence for Splines, Adv. in Appl. Math. 19, 183-199 (1997).\break  Schenck, Hal . Splines on the Alfeld split of a simplex and type A root systems. J. Approx. Theory 182 (2014), 1-6.\break  Gilbert Strang, Piecewise Polynomials and the Finite Element Method, Bull. Amer. Math. Soc. 79 (1973) 1128-1137.\break  Julianna Tymoczko. Splines in geometry and topology. Comput. Aided Geom. Design 45 (2016), 32-47.

## Version

This documentation describes version 0.1.0 of AlgebraicSplines.

## Source code

The source code from which this documentation is derived is in the file AlgebraicSplines.m2.

## Exports

• Functions and commands
• cellularComplex -- create the cellular chain complex whose homologies are the singular homologies of the complex $\Delta$ relative to its boundary
• courantFunctions -- returns the Courant functions of a simplicial complex
• formsList -- list of powers of (affine) linear forms cutting out a specified list of codimension one faces.
• generalizedSplines -- the module of generalized splines associated to a simple graph with an edge labelling
• hilbertComparisonTable -- a table to compare the values of the hilbertFunction and hilbertPolynomial of a graded module
• idealsComplex -- creates the Billera-Schenck-Stillman chain complex of ideals
• postulationNumber -- computes the largest degree at which the hilbert function of the graded module M is not equal to the hilbertPolynomial
• ringStructure -- given a sub-module of a free module (viewed as a ring with direct sum structure) which is also a sub-ring, creates a ring map whose image is the module with its ring structure
• splineComplex -- creates the Billera-Schenck-Stillman chain complex
• splineDimensionTable -- a table with the dimensions of the graded pieces of a graded module
• splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• splineModule -- compute the module of all splines on partition of a space
• stanleyReisner -- Creates a ring map whose image is the ring of piecewise continuous polynomials on $\Delta$. If $\Delta$ is simplicial, the Stanley Reisner ring of $\Delta$ is returned.
• stanleyReisnerPresentation -- creates a ring map whose image is the sub-ring of $C^0(\Delta)$ generated by $C^r(\Delta)$. If $\Delta$ is simplicial, $C^0(\Delta)$ is the Stanley Reisner ring of $\Delta$.
• Methods
• "cellularComplex(List)" -- see cellularComplex -- create the cellular chain complex whose homologies are the singular homologies of the complex $\Delta$ relative to its boundary
• "cellularComplex(List,List)" -- see cellularComplex -- create the cellular chain complex whose homologies are the singular homologies of the complex $\Delta$ relative to its boundary
• "courantFunctions(List,List)" -- see courantFunctions -- returns the Courant functions of a simplicial complex
• "formsList(List,List,ZZ)" -- see formsList -- list of powers of (affine) linear forms cutting out a specified list of codimension one faces.
• "generalizedSplines(List,List)" -- see generalizedSplines -- the module of generalized splines associated to a simple graph with an edge labelling
• "hilbertComparisonTable(ZZ,ZZ,Module)" -- see hilbertComparisonTable -- a table to compare the values of the hilbertFunction and hilbertPolynomial of a graded module
• "idealsComplex(List,List,ZZ)" -- see idealsComplex -- creates the Billera-Schenck-Stillman chain complex of ideals
• "postulationNumber(Module)" -- see postulationNumber -- computes the largest degree at which the hilbert function of the graded module M is not equal to the hilbertPolynomial
• "ringStructure(Module)" -- see ringStructure -- given a sub-module of a free module (viewed as a ring with direct sum structure) which is also a sub-ring, creates a ring map whose image is the module with its ring structure
• "splineComplex(List,List,ZZ)" -- see splineComplex -- creates the Billera-Schenck-Stillman chain complex
• "splineDimensionTable(ZZ,ZZ,List,ZZ)" -- see splineDimensionTable -- a table with the dimensions of the graded pieces of a graded module
• "splineDimensionTable(ZZ,ZZ,Module)" -- see splineDimensionTable -- a table with the dimensions of the graded pieces of a graded module
• "splineMatrix(List,List,List,ZZ)" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "splineMatrix(List,List,ZZ)" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "splineMatrix(List,ZZ)" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "splineModule(List,List,List,ZZ)" -- see splineModule -- compute the module of all splines on partition of a space
• "splineModule(List,List,ZZ)" -- see splineModule -- compute the module of all splines on partition of a space
• "stanleyReisner(List,List)" -- see stanleyReisner -- Creates a ring map whose image is the ring of piecewise continuous polynomials on $\Delta$. If $\Delta$ is simplicial, the Stanley Reisner ring of $\Delta$ is returned.
• "stanleyReisnerPresentation(List,List,ZZ)" -- see stanleyReisnerPresentation -- creates a ring map whose image is the sub-ring of $C^0(\Delta)$ generated by $C^r(\Delta)$. If $\Delta$ is simplicial, $C^0(\Delta)$ is the Stanley Reisner ring of $\Delta$.
• Symbols
• "RingType" -- see generalizedSplines -- the module of generalized splines associated to a simple graph with an edge labelling
• "GenVar" -- see ringStructure -- given a sub-module of a free module (viewed as a ring with direct sum structure) which is also a sub-ring, creates a ring map whose image is the module with its ring structure
• "IdempotentVar" -- see ringStructure -- given a sub-module of a free module (viewed as a ring with direct sum structure) which is also a sub-ring, creates a ring map whose image is the module with its ring structure
• "Trim" -- see ringStructure -- given a sub-module of a free module (viewed as a ring with direct sum structure) which is also a sub-ring, creates a ring map whose image is the module with its ring structure
• "VariableGens" -- see ringStructure -- given a sub-module of a free module (viewed as a ring with direct sum structure) which is also a sub-ring, creates a ring map whose image is the module with its ring structure
• "BaseRing" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "ByFacets" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "ByLinearForms" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "Homogenize" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "InputType" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$
• "VariableName" -- see splineMatrix -- compute matrix whose kernel is the module of $C^r$ splines on $\Delta$

## For the programmer

The object AlgebraicSplines is .