Skip to main content

Section 4.1 Construction and Basic Properties

Similar to the graphs object, Sage has a pre-defined designs object that can be used as a catalog of constructors for designs. Type designs. followed by the TAB key to see a list of the possibilities. Then use a question mark after the name of a constructor to see an explanation of its arguments and some guaranteed-to-run examples.

As a general rule, this is a good way to teach yourself how to use Sage for some area of mathematics.

  • Use documentation, or a friend, to learn how to make some basic object in the relevant area using a constructor. For example, to explore linear algebra commands, learn how to build a matrix and a vector. (Not suprisingly, these are the matrix() and vector() constructors.)
  • Create a small example object and use its name, followed by a period, then use tab-completion (press the TAB key) to see all the possible methods that apply to that object. Select a method whose name you recognize, type that after the period, then a question-mark, and then press the TAB key. You will get an explanation of the various arguments (required and optional) for the method.
  • Within the documentation, you will find examples, with input lines marked by sage:. All of these examples get automatically tested regularly by many people on a variety of hardware with each new version of Sage. So they are very robust and have an extremely high probability of working correctly for you, right out of the box.
  • Copy and paste an example to your workspace and adjust it to suit, executing it regularly. When it behaves as expected, you will have learned how to do something new with Sage. When you break your new examples, you will learn something new that you should not do with Sage.
  • In the course of working with the examples you will see other constructors and methods in use, and slowly your repertoire of constructors, functions and methods will expand.

So here are a few designs you may be familiar with already. We will build them and the request their parameters, which are returned in the usual \(t\text{--}(v,k,\lambda)\) order. With these four values, we can compute the number of blocks, or we can just ask Sage.

The affine geometry \(AG(2,3)\) is a block design that is also an example of a finite geometry. As a design it is a \(2\text{--}(9,3,1)\) design. Constructed as a finite geometry it is the set of all ordered pairs with entries from the finite field of order \(3\text{,}\) \(F_3\text{.}\) Viewed as a vector space of dimension \(2\) over \(F_3\) the blocks are all of the subspaces of dimension \(1\) along with their translations. These can be viewed as lines, if we view pairs \((x,y)\) belonging to sets of solutions to equations of the form \(y=mx+b\) (along with vertical lines \(x=c\)), where arithmetic is done in \(F_3\text{.}\) The constructor in Sage is more general, but we supply, in order, the dimension of the subspace (\(2\)), the dimension of the subspaces (\(1\)), and the order of the field (\(3\)). (Note that the order of the field can be replaced by an actual finite field, so in the documentation you could see the the third argument provided as something like GF(3).)

We can list the elements and determine various parameters of the design. Notice that the vector space characteristics of the geometry are not preserved and the points of the design are just labeled with integer symbols.

A projective geometry is created from an affine geometry. We will not repeat the construction here, but do need to remark that the projective dimension is a parameter of the construction and the resulting blocks of the design contain vectors in a dimension one greater. So in our next example, the projective dimension is provided as \(2\text{,}\) and thus we will see sets of triples from a vector space of dimension \(3\text{.}\)

The parameters for constructing a design from a projective geometry are similar to those for an affine geometry. First, the projective dimension, then a projective dimension for the subspaces that become the blocks, and finally the base field for the vector space. Note that the field must be the actual field, and not just the order. Note too that the blocks are sets of vectors and have not been encoded into integer symbols.

Our example is the Fano Plane, a small yet interesting \(2\text{--}(7,3,1)\) design. This design is often depicted by a diagram where the blocks are the three sides of an equilateral triangle, the three medians of the triangle, and a final circular block containing the three midpoints of the sides of the triangle.

We can elect to endcode the points with integer symbols by supressing the use of the actual vectors in the blocks. We redefine (and subsequently work with) the design held in the variable fano.

Sage has constructors for a few large designs. Some of these come from the designs package within GAP, which is an optional component of GAP, so there is a small chance the following commands will not execute without some additional configuration. There is a remarkable \(5\text{--}(24,8,1)\) design, which is unique up to isomorphism. GAP categorizes it as one of the Witt designs. We will not list all \(759\) blocks, but you could.