A spherical or projective design is a finite subset of a sphere or projective space (see [DGS77] and [Hog82] for more details). Certain designs have special properties and interesting symmetries. The ALCO package allows users to study both spherical and projective designs by modelling both as finite sets of primitive idempotents of a simple Euclidean Jordan algebra.
Specifically, the primitive idempotents of simple Euclidean Jordan algebras of rank 2 have the geometry of a sphere. The correspondence involves converting Euclidean inner product \cos(\alpha) between two unit vectors on a sphere into the corresponding Jordan inner product \mathrm{Tr}(x\circ y) given by (1 + \cos(\alpha))/2 (described in [Nas23, p. 72]). Likewise, the primitive idempotents of a simple Euclidean Jordan algebras of degrees 1, 2, 4, or 8 have the geometry of a real, complex, quaternion, or octonion projective space.
The tools below allow one to construct a GAP object to represent a design and collect various computed attributes. Constructing a design and its parameters using these tools does not guarantee the existence of such a design, although known examples and possible instances may be studied using these tools.
One advantage of studying spherical and projective designs together as sets of Jordan primitive idempotents is both the spherical and projective cases can be studied together using Jacobi polynomials, with suitable parameters chosen for the appropriate simple Euclidean Jordan algebra.
‣ JacobiPolynomial ( k, a, b ) | ( function ) |
This function returns the Jacobi polynomial P_k^{(a,b)}(x) of degree k and type (a,b) as defined in [AS72, chap. 22]. The argument k must be a non-negative integer. The arguments a and b must be either rational numbers greater than -1 or must satisfy IsPolynomial
.
gap> a := Indeterminate(Rationals, "a");; gap> b := Indeterminate(Rationals, "b");; gap> x := Indeterminate(Rationals, "x");; gap> JacobiPolynomial(0,a,b); [ 1 ] gap> JacobiPolynomial(1,a,b); [ 1/2*a-1/2*b, 1/2*a+1/2*b+1 ] gap> ValuePol(last,x); 1/2*a*x+1/2*b*x+1/2*a-1/2*b+x
‣ Q_k_epsilon ( k, epsilon, rank, degree, x ) | ( function ) |
‣ R_k_epsilon ( k, epsilon, rank, degree, x ) | ( function ) |
These functions return polynomials of degree k in the indeterminate x corresponding the the renormalized Jacobi polynomials given in [Hog82]. The value of epsilon must be 0 or 1. The arguments rank and degree correspond to the rank and degree of the relevant simple Euclidean Jordan algebra.
The ALCO package defines new categories within IsObject
in order to construct and study Jordan designs.
‣ IsDesign | ( filter ) |
‣ IsSphericalDesign | ( filter ) |
‣ IsProjectiveDesign | ( filter ) |
These filters determine whether an object is a Jordan design and whether the design is constructed in a spherical or projective manifold of Jordan primitive idempotents.
‣ DesignByJordanParameters ( rank, degree ) | ( function ) |
This function constructs a Jordan design in the manifold of Jordan primitive idempotents of rank rank and degree degree.
gap> D := DesignByJordanParameters(3,8); <design with rank 3 and degree 8> gap> IsDesign(D); true gap> IsSphericalDesign(D); false gap> IsProjectiveDesign(D); true gap> DesignByJordanParameters(4,8); fail gap> DesignByJordanParameters(3,9); fail
‣ DesignJordanRank ( D ) | ( attribute ) |
‣ DesignJordanDegree ( D ) | ( attribute ) |
The rank and degree of an object satisfying filter IsDesign
are stored as attributes.
gap> D := DesignByJordanParameters(3,8); <design with rank 3 and degree 8> gap> [DesignJordanRank(D), DesignJordanDegree(D)]; [ 3, 8 ]
‣ DesignQPolynomials ( D ) | ( attribute ) |
Many properties of a Jordan design are computed using the family of renormalized Jacobi polynomials that correspond to the spherical or projective space in question. This attribute stores a function DesignQPolynomial(D)(k)
that returns the k-th polynomial in the family, as a list of coefficients, where k is a non-negative integer.
gap> D := DesignByJordanParameters(3,8); <design with rank 3 and degree 8> gap> r := DesignJordanRank(D);; d := DesignJordanDegree(D);; gap> x := Indeterminate(Rationals, "x");; gap> DesignQPolynomials(D); function( k ) ... end gap> DesignQPolynomials(D)(2); [ 90, -585, 819 ] gap> CoefficientsOfUnivariatePolynomial(Q_k_epsilon(2,0,r,d,x)); [ 90, -585, 819 ]
‣ DesignConnectionCoefficients ( D ) | ( attribute ) |
The connection coefficients of a design D determine which linear combinations of DesignQPolynomials(D)
yield each power of the indeterminate [Hog92, p. 261]. This attribute stores a function DesignConnectionCoefficients(D)(s)
that computes the connection coefficients of each power up to positive integer s.
gap> D := DesignByJordanParameters(3,8); <design with rank 3 and degree 8> gap> DesignConnectionCoefficients(D); function( s ) ... end gap> f := DesignConnectionCoefficients(D)(3);; Display(f); [ [ 1, 0, 0, 0 ], [ 1/3, 1/39, 0, 0 ], [ 5/39, 5/273, 1/819, 0 ], [ 5/91, 1/91, 1/728, 1/12376 ] ] gap> for j in [1..4] do Display(Sum(List([1..4], i -> > f[j][i]*DesignQPolynomials(D)(i-1)))); od; [ 1, 0, 0, 0 ] [ 0, 1, 0, 0 ] [ 0, 0, 1, 0 ] [ 0, 0, 0, 1 ]
The angle set of a design is the set of all inner products between distinct elements in the design. In the case of a Jordan design, each inner product is computed as \mathrm{Tr}(x\circ y) for x and y primitive idempotents. This means that the angle set of a design is a set of real numbers in the interval [0, 1). We can compute many additional properties of a design once the angle set is known.
‣ IsDesignWithAngleSet | ( filter ) |
This filter identifies whether an object that satisfies IsDesign
is equipped with an angle set.
‣ DesignAddAngleSet ( D, A ) | ( operation ) |
‣ DesignAngleSet ( D ) | ( attribute ) |
For a design D without an angle set, records the angle set A as an attribute DesignAngleSet
. The angle set A must be a list of real-valued elements in IsCyc
in the interval [0, 1). Note that when A contains irrational elements for which < does not provide an ordering, inclusion in the interval given above is not checked. Also note that the angle set cannot be modified once set as an attribute of the design.
gap> D := DesignByJordanParameters(4,4); <design with rank 4 and degree 4> gap> DesignAddAngleSet(D, [2]); fail gap> D; <design with rank 4 and degree 4> gap> DesignAddAngleSet(D, [1/3,1/9]); <design with rank 4, degree 4, and angle set [ 1/9, 1/3 ]> gap> DesignAngleSet(D); [ 1/9, 1/3 ]
‣ DesignByAngleSet ( rank, degree, A ) | ( function ) |
This function constructs a new design with Jordan rank and degree given by rank and degree, with angle set A. The same constrains on angle set A given in DesignAddAngleSet
(4.3-2) apply.
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]); <design with rank 4, degree 4, and angle set [ 1/9, 1/3 ]> gap> DesignAngleSet(D); [ 1/9, 1/3 ]
‣ DesignNormalizedAnnihilatorPolynomial ( D ) | ( attribute ) |
The normalized annihilator polynomial is defined for an angle set A as the polynomial p(x) of degree equal to the cardinality of A with the elements of A for roots and normalization such that p(1) = 1 [BBIT21, p. 185]. The coefficients of this polynomial are stored as an attribute of a design with an angle set.
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]); <design with rank 4, degree 4, and angle set [ 1/9, 1/3 ]> gap> p := DesignNormalizedAnnihilatorPolynomial(D); [ 1/16, -3/4, 27/16 ] gap> ValuePol(p, 1/9); 0 gap> ValuePol(p, 1/3); 0 gap> ValuePol(p, 1); 1
‣ DesignNormalizedIndicatorCoefficients ( D ) | ( attribute ) |
The normalized indicator coefficients are the DesignQPolynomials(D)
-expansion coefficients of DesignNormalizedAnnihilatorPolynomial(D)
, discussed for the spherical case in [BBIT21, p. 185]. These coefficients are stored as an attribute of a design with an angle set.
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]); <design with rank 4, degree 4, and angle set [ 1/9, 1/3 ]> gap> f := DesignNormalizedIndicatorCoefficients(D); [ 1/64, 7/960, 9/3520 ] gap> Sum(List([1..3], i -> f[i]*DesignQPolynomials(D)(i-1))); [ 1/16, -3/4, 27/16 ] gap> DesignNormalizedAnnihilatorPolynomial(D); [ 1/16, -3/4, 27/16 ]
‣ IsDesignWithPositiveIndicatorCoefficients | ( filter ) |
This filter determines whether the normalized indicator coefficients of a design are positive, which has significance for certain theorems about designs.
‣ DesignSpecialBound ( D ) | ( attribute ) |
The special bound of a design satisfying IsDesignWithPositiveIndicatorCoefficients
is the upper limit on the possible cardinality for the given angle set [Hog92, pp. 257-258]. This attribute stores the special bound when it exists for a design.
gap> D := DesignByAngleSet(4, 4, [1/3,1/9]); <design with rank 4, degree 4, and angle set [ 1/9, 1/3 ]> gap> IsDesignWithPositiveIndicatorCoefficients(D); true gap> DesignSpecialBound(D); 64
Many more properties of a design with an angle set can be computed once the cardinality of the design is also known. In what follows let v be the cardinality of a design and let s be the cardinality of the angle set A of that design.
‣ IsDesignWithCardinality | ( filter ) |
‣ DesignAddCardinality ( D, v ) | ( operation ) |
‣ DesignCardinality ( D ) | ( attribute ) |
As a finite set, each design has a cardinality. When this cardinality is known for an object D that satisfies IsDesign(D)
, the cardinality is stored as the attribute DesignCardinality(D)
. In order to set the cardinality of a design, we can use the operation DesignAddCardinality(D, v)
. When DesignAddCardinality
is called, the ALCO package immediately attempts to compute DesignStrength
(4.4-5).
gap> D := DesignByAngleSet(4,4, [1/3,1/9]); <design with rank 4, degree 4, and angle set [ 1/9, 1/3 ]> gap> HasDesignCardinality(D); false gap> DesignAddCardinality(D, 64); <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> DesignCardinality(D); 64
‣ IsSpecialBoundDesign | ( filter ) |
As described in DesignSpecialBound
(4.3-7), we can compute the special bound of a design using the angle set. Once the cardinality is also known we can assess whether the design reaches the special bound. This filter identifies when a design with an angle set and cardinality also meets the special bound.
‣ DesignAnnihilatorPolynomial ( D ) | ( attribute ) |
The annihilator polynomial for design D is defined by multiplying the DesignNormalizedAnnihilatorPolynomial(D)
by DesignCardinality(D)
.
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]);; gap> DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> DesignAnnihilatorPolynomial(D); [ 4, -48, 108 ] gap> ValuePol(last, 1); 64
‣ DesignIndicatorCoefficients ( D ) | ( attribute ) |
The indicator coefficients for design D are defined by multiplying DesignNormalizedIndicatorCoefficients(D)
by DesignCardinality(D)
. These indicator coefficients are often useful for directly determining the strength of a design at the special bound.
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> DesignIndicatorCoefficients(D); [ 1, 7/15, 9/55 ]
‣ IsDesignWithStrength | ( filter ) |
‣ DesignStrength ( D ) | ( attribute ) |
The t-design is a design with the following special property: the integral of any degree t polynomial over the sphere or projective space containing the design is equal to the average value of that polynomial evaluated at the points of the t-design (see [DGS77] and [Hog82] for detailed definitions). The parameter t is called the strength of the design.
For a design D that satisfies IsDesignWithPositiveIndicatorCoefficients
, IsDesignWithCardinality
, and IsSpecialBoundDesign
, we can compute the strength t of the design using a theorem given in [Hog92, p. 258] that examines the indicator coefficients. The filter IsDesignWithStrength
indicates when the attribute DesignStrength
has been successfully computed.
gap> D := DesignByAngleSet(4,4, [1/3,1/9]); <design with rank 4, degree 4, and angle set [ 1/9, 1/3 ]> gap> DesignAddCardinality(D, 64); <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> IsDesignWithStrength(D); true gap> DesignStrength(D); 2
‣ IsRegularSchemeDesign | ( filter ) |
‣ IsAssociationSchemeDesign | ( filter ) |
‣ IsTightDesign | ( filter ) |
These filters identify various special categories of designs that satisfy IsDesignWithStrength
(4.4-5). In what follows recall that t denotes the strength of the design and s denotes the cardinality of the angle set A. The definitions below are provided in [Hog92].
A design admits a regular scheme when t \ge s - 1 . The filter IsRegularSchemeDesign
returns true when both t and s are known and satisfy the regular scheme inequality given above.
A design admits an association scheme when t \ge 2s - 2 . The filter IsAssociationSchemeDesign
returns true when both t and s are known and satisfy the association scheme inequality given above.
Finally, a design is tight when it satisfies t = 2s - 1 for 0 in A or t = 2s otherwise. The filter IsTightDesign
returns true when the appropriate equality is satisfied for a design.
‣ DesignSubdegrees ( D ) | ( attribute ) |
For a design D with cardinality and angle set that satisfies IsRegularSchemeDesign
, namely t \ge s - 1, we can compute the regular subdegrees as described in [Hog92, Theorem 3.2]. The subdegrees count the number of elements forming each angle with some representative element in the design. So, in the example below, there are 27 elements forming an angle (inner product) of 1/9 with some representative design element.
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> DesignSubdegrees(D); [ 27, 36 ]
When a design satisfies t \ge 2s - 2 then it also admits an association scheme. We can use results given in [Hog92] to determine the parameters of the corresponding association scheme. For more details about association schemes see [CVL91] or [BBIT21].
‣ DesignBoseMesnerAlgebra ( D ) | ( attribute ) |
For a design that satisfies IsAssociationSchemeDesign
, we can define the corresponding Bose-Mesner algebra [BBIT21, pp. 53-57]. The canonical basis for this algebra corresponds to the adjacency matrices A_i, with the s+1
-th basis vector corresponding to A_0. The adjacenty matrices themselves are not provided and the algebra is constructed from the known structure constants so that elements of this algebra satisfy IsSCAlgebraObj
.
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> B := DesignBoseMesnerAlgebra(D); <algebra of dimension 3 over Rationals> gap> BasisVectors(CanonicalBasis(B)); [ A1, A2, A3 ] gap> One(B); IsSCAlgebraObj(last); A3 true
‣ DesignBoseMesnerIdempotentBasis ( D ) | ( attribute ) |
For a design that satisfies IsAssociationSchemeDesign
, we can also define the idempotent basis of the corresponding Bose-Mesner algebra [BBIT21, pp. 53-57].
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> for x in BasisVectors(DesignBoseMesnerIdempotentBasis(D)) do Display(x); > od; (-5/64)*A1+(3/64)*A2+(27/64)*A3 (1/16)*A1+(-1/16)*A2+(9/16)*A3 (1/64)*A1+(1/64)*A2+(1/64)*A3 gap> ForAll(DesignBoseMesnerIdempotentBasis(D), IsIdempotent); true
‣ DesignIntersectionNumbers ( D ) | ( attribute ) |
The intersection numbers p^k_{i,j} are given by DesignIntersectionNumbers(D)[k][i][j]
. These intersection numbers serve as the structure constants for the DesignBoseMesnerAlgebra(D)
. Namely, A_i A_j = \sum_{k = 1}^{s+1} p^{k}_{i,j} A_k (see [BBIT21, pp. 53-57]).
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> A := BasisVectors(Basis(DesignBoseMesnerAlgebra(D)));; gap> p := DesignIntersectionNumbers(D);; gap> A[1]*A[2] = Sum(List([1..3]), k -> p[k][1][2]*A[k]); true
‣ DesignKreinNumbers ( D ) | ( attribute ) |
The Krein numbers q^k_{i,j} are given by DesignKreinNumbers(D)[k][i][j]
. The Krein numbers serve as the structure constants for the DesignBoseMesnerAlgebra(D)
in the idempotent basis given by DesignBoseMesnerIdempotentBasis(D)
using the Hadamard matrix product \circ. Namely, for idempotent basis E_i and Hadamard product \circ, we have E_i \circ E_j = \sum_{k = 1}^{s+1} q^{k}_{i,j} E_k (see [BBIT21, pp. 53-57]).
gap> D := DesignByAngleSet(4, 4, [1/3, 1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> q := DesignKreinNumbers(D);; gap> Display(q); [ [ [ 10, 16, 1 ], [ 16, 20, 0 ], [ 1, 0, 0 ] ], [ [ 12, 15, 0 ], [ 15, 20, 1 ], [ 0, 1, 0 ] ], [ [ 27, 0, 0 ], [ 0, 36, 0 ], [ 0, 0, 1 ] ] ]
‣ DesignFirstEigenmatrix ( D ) | ( attribute ) |
As describe in [BBIT21, p. 58], the first eigenmatrix of a Bose-Mesner algebra P_i(j) defines the expansion of the adjacency matrix basis A_i in terms of the idempotent basis E_j as follows: A_i = \sum_{j = 1}^{s+1} P_i(j) E_j . This attribute returns the component P_i(j) as DesignFirstEigenmatrix(D)[i][j]
.
gap> D := DesignByAngleSet(4,4,[1/3,1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> a := Basis(DesignBoseMesnerAlgebra(D));; gap> e := DesignBoseMesnerIdempotentBasis(D);; gap> ForAll([1..3], i -> a[i] = Sum([1..3], j -> > DesignFirstEigenmatrix(D)[i][j]*e[j])); true
‣ DesignSecondEigenmatrix ( D ) | ( attribute ) |
As describe in [BBIT21, p. 58], the second eigenmatrix of a Bose-Mesner algebra Q_i(j) defines the expansion of the idempotent basis E_i in terms of the adjacency matrix basis A_j as follows: E_i = (1/v)\sum_{j = 1}^{s+1} Q_i(j) A_j . This attribute returns the component Q_i(j) as DesignSecondEigenmatrix(D)[i][j]
.
gap> D := DesignByAngleSet(4,4,[1/3,1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> a := Basis(DesignBoseMesnerAlgebra(D));; gap> e := DesignBoseMesnerIdempotentBasis(D);; gap> ForAll([1..3], i -> e[i]*DesignCardinality(D) = > Sum([1..3], j -> DesignSecondEigenmatrix(D)[i][j]*a[j])); true gap> DesignFirstEigenmatrix(D) = Inverse(DesignSecondEigenmatrix(D)) > *DesignCardinality(D); true
‣ DesignMultiplicities ( D ) | ( attribute ) |
As describe in [BBIT21, pp. 58-59], the design multiplicy m_i is defined as the dimension of the space that idempotent matrix E_i projects onto, or m_i = \mathrm{Tr}(E_i). We also have m_i = Q_i(s+1).
gap> D := DesignByAngleSet(4,4,[1/3,1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> DesignMultiplicities(D); [ 27, 36, 1 ]
‣ DesignValencies ( D ) | ( attribute ) |
As describe in [BBIT21, pp. 55, 59], the design valency k_i is defined as the fixed number of i-associates of any element in the association scheme (also known as the subdegree). We also have k_i = P_i(s+1).
gap> D := DesignByAngleSet(4,4,[1/3,1/9]);; DesignAddCardinality(D, 64);; D; <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> DesignValencies(D); [ 27, 36, 1 ]
‣ DesignReducedAdjacencyMatrices ( D ) | ( attribute ) |
As defined in [CVL91, p. 201], the reduced adjacency matrices multiply with the same structure constants as the adjacency matrices, which allows for a simpler construction of an algebra isomorphic to the Bose-Mesner algebra. The matrices DesignReducedAdjacencyMatrices(D)
are used to construct DesignBoseMesnerAlgebra(D)
.
This section provides a number of known examples that can be studied using the ALCO package. The following tight projective t-designs are identified in [Hog82, Examples 1-11].
gap> DesignByAngleSet(2, 1, [0,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 3-design with rank 2, degree 1, cardinality 4, and angle set [ 0, 1/2 ]> gap> DesignByAngleSet(2, 2, [0,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 3-design with rank 2, degree 2, cardinality 6, and angle set [ 0, 1/2 ]> gap> DesignByAngleSet(2, 4, [0,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 3-design with rank 2, degree 4, cardinality 10, and angle set [ 0, 1/2 ]> gap> DesignByAngleSet(2, 8, [0,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 3-design with rank 2, degree 8, cardinality 18, and angle set [ 0, 1/2 ]> gap> DesignByAngleSet(3, 2, [1/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 2-design with rank 3, degree 2, cardinality 9, and angle set [ 1/4 ]> gap> DesignByAngleSet(4, 2, [0,1/3]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 3-design with rank 4, degree 2, cardinality 40, and angle set [ 0, 1/3 ]> gap> DesignByAngleSet(6, 2, [0,1/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 3-design with rank 6, degree 2, cardinality 126, and angle set [ 0, 1/4 ]> gap> DesignByAngleSet(8, 2, [1/9]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 2-design with rank 8, degree 2, cardinality 64, and angle set [ 1/9 ]> gap> DesignByAngleSet(5, 4, [0,1/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 3-design with rank 5, degree 4, cardinality 165, and angle set [ 0, 1/4 ]> gap> DesignByAngleSet(3, 8, [0,1/4,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 5-design with rank 3, degree 8, cardinality 819, and angle set [ 0, 1/4, 1/2 ]> gap> DesignByAngleSet(24, 1, [0,1/16,1/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 5-design with rank 24, degree 1, cardinality 98280, and angle set [ 0, 1/16, 1/4 ]>
An additional icosahedron projective example is identified in [Lyu09].
gap> DesignByAngleSet(2, 2, [ 0, (5-Sqrt(5))/10, (5+Sqrt(5))/10 ]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 5-design with rank 2, degree 2, cardinality 12, and angle set [ 0, -3/5*E(5)-2/5*E(5)^2-2/5*E(5)^3-3/5*E(5)^4, -2/5*E(5)-3/5*E(5)^2-3/5*E(5)^3-2/5*E(5)^4 ]>
The Leech lattice short vector design and several other tight spherical designs are given below:
gap> DesignByAngleSet(2, 23, [ 0, 1/4, 3/8, 1/2, 5/8, 3/4 ]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 11-design with rank 2, degree 23, cardinality 196560, and angle set [ 0, 1/4, 3/8, 1/2, 5/8, 3/4 ]> gap> DesignByAngleSet(2, 5, [ 1/4, 5/8 ]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 4-design with rank 2, degree 5, cardinality 27, and angle set [ 1/4, 5/8 ]> gap> DesignByAngleSet(2, 6, [0,1/3,2/3]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 5-design with rank 2, degree 6, cardinality 56, and angle set [ 0, 1/3, 2/3 ]> gap> DesignByAngleSet(2, 21, [3/8, 7/12]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 4-design with rank 2, degree 21, cardinality 275, and angle set [ 3/8, 7/12 ]> gap> DesignByAngleSet(2, 22, [0,2/5,3/5]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 5-design with rank 2, degree 22, cardinality 552, and angle set [ 0, 2/5, 3/5 ]> gap> DesignByAngleSet(2, 7, [0,1/4,1/2,3/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 7-design with rank 2, degree 7, cardinality 240, and angle set [ 0, 1/4, 1/2, 3/4 ]> gap> DesignByAngleSet(2, 22, [0,1/3,1/2,2/3]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <Tight 7-design with rank 2, degree 22, cardinality 4600, and angle set [ 0, 1/3, 1/2, 2/3 ]>
Some projective designs meeting the special bound are given in [Hog82, Examples 1-11]:
gap> DesignByAngleSet(4, 4, [0,1/4,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <3-design with rank 4, degree 4, cardinality 180, and angle set [ 0, 1/4, 1/2 ]> gap> DesignByAngleSet(3, 2, [0,1/3]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <2-design with rank 3, degree 2, cardinality 12, and angle set [ 0, 1/3 ]> gap> DesignByAngleSet(5, 2, [0,1/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <2-design with rank 5, degree 2, cardinality 45, and angle set [ 0, 1/4 ]> gap> DesignByAngleSet(9, 2, [0,1/9]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <2-design with rank 9, degree 2, cardinality 90, and angle set [ 0, 1/9 ]> gap> DesignByAngleSet(28, 2, [0,1/16]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <2-design with rank 28, degree 2, cardinality 4060, and angle set [ 0, 1/16 ]> gap> DesignByAngleSet(4, 4, [0,1/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <2-design with rank 4, degree 4, cardinality 36, and angle set [ 0, 1/4 ]> gap> DesignByAngleSet(4, 4, [1/9,1/3]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <2-design with rank 4, degree 4, cardinality 64, and angle set [ 1/9, 1/3 ]> gap> DesignByAngleSet(16, 1, [0,1/9]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <2-design with rank 16, degree 1, cardinality 256, and angle set [ 0, 1/9 ]> gap> DesignByAngleSet(4, 2, [0,1/4,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <3-design with rank 4, degree 2, cardinality 60, and angle set [ 0, 1/4, 1/2 ]> gap> DesignByAngleSet(16, 1, [0,1/16,1/4]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <3-design with rank 16, degree 1, cardinality 2160, and angle set [ 0, 1/16, 1/4 ]> gap> DesignByAngleSet(3, 4, [0,1/4,1/2]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <3-design with rank 3, degree 4, cardinality 63, and angle set [ 0, 1/4, 1/2 ]> gap> DesignByAngleSet(3, 4, [0,1/4,1/2,(3+Sqrt(5))/8, (3-Sqrt(5))/8]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <5-design with rank 3, degree 4, cardinality 315, and angle set [ 0, 1/4, 1/2, -1/2*E(5)-1/4*E(5)^2-1/4*E(5)^3-1/2*E(5)^4, -1/4*E(5)-1/2*E(5)^2-1/2*E(5)^3-1/4*E(5)^4 ]> gap> DesignByAngleSet(12, 2, [0,1/3,1/4,1/12]);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <5-design with rank 12, degree 2, cardinality 32760, and angle set [ 0, 1/12, 1/4, 1/3 ]>
Two important designs related to the H_4 Weyl group are as follows:
gap> A := [ 0, 1/4, 1/2, 3/4, (5-Sqrt(5))/8, (5+Sqrt(5))/8, > (3-Sqrt(5))/8, (3+Sqrt(5))/8 ];; gap> D := DesignByAngleSet(2, 3, A);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <11-design with rank 2, degree 3, cardinality 120, and angle set [ 0, 1/4, 1/2, 3/4, -3/4*E(5)-1/2*E(5)^2-1/2*E(5)^3-3/4*E(5)^4, -1/2*E(5)-3/4*E(5)^2-3/4*E(5)^3-1/2*E(5)^4, -1/2*E(5)-1/4*E(5)^2-1/4*E(5)^3-1/2*E(5)^4, -1/4*E(5)-1/2*E(5)^2-1/2*E(5)^3-1/4*E(5)^4 ]> gap> A := [ 0, 1/4, (3-Sqrt(5))/8, (3+Sqrt(5))/8 ];; gap> D := DesignByAngleSet(4, 1, A);; gap> DesignAddCardinality(last, DesignSpecialBound(last)); <5-design with rank 4, degree 1, cardinality 60, and angle set [ 0, 1/4, -1/2*E(5)-1/4*E(5)^2-1/4*E(5)^3-1/2*E(5)^4, -1/4*E(5)-1/2*E(5)^2-1/2*E(5)^3-1/4*E(5)^4 ]>
generated by GAPDoc2HTML