Canonical Forms

One of the subtleties in writing about mathematics is that there are various forms of mathematical structure where it is convenient to have a standard example (or family of them) of the structure for the sake of definiteness and to help represent other things of the same form by relating them to their standard equivalents. Those standard forms get described as canonical and there is a mixture of art and science to chosing which forms to use for them. Those choices may be to varying degrees subjective and context-dependent, so different writers may chose different canonical forms for particlar types of mantematical structure – and, indeed, which forms a writer choses can make a big difference to how well the rest of the exposition flows. So the choice of which entities of some given type to take as canonical involves balancing pedagogic, æsthetic and various other factors – including simple convenience in the ease with which other instances can be expressed in terms of the canonical ones.

So here I'll try to illustrate that design choice by going over some of the examples of canonical forms that arise in my writing, explaining why I chose each. This may exhibit some shades of Apologia, but that is not my priority. More important is that, I hope, the reader may gain some insights into how to make corresponding decisions for yourself, possibly better than my choices, at least for your own purposes.

I'll start by enumerating some examples of canonical things, to illustrate what canonical forms are, then devote separate sections to some of them, to go into the details of why I chose the canonicalf orms I do.

natural numbers
Peano's axioms just specify that there must be a first and an injective successor mapping 1 +n ←n; there are several well-established realisations of this. The finite Church Ordinals are what I have the function repeat map the naturals to; but they could just as well be, as Church did, used as the canonical form of the naturals. I could equally have used the finite cardinals – the equivalence classes of finite collections under set-isomorphism (or the pigeonhole principle). Instead I've followed many other writers in taking the finite von Neumann ordinals, 0 = {} is first and 1 +n = n∪{n}, resulting in 1 = {0}, 2 = {0, 1}, 3 = {0, 1, 2}, which leads to (as a trivial but useful restatement of its ordering, once it's defined) n = {naturals i: i < n}.
rational numbers
These represent the result of dividing one whole number by another (that isn't zero), with p/q = n/m precisely if p.m = n.q; as such, one very common representation of them as as an equivalence among pairs of naturals, subject to an equivalence that encodes that equality. I have (perhaps perversely) chosen to take, as canonical representation, certain composites of a reverse of an output of repeat (see above) with an output of repeat – the ones that, when they agree with another such any mapping of form ({naturals}: n +k ←n :{naturals}) with k non-zero and natural, agree with that other such on all inputs.
finite-dimensional vector spaces over a field F
Entirely orthodoxly, for these I use the collection of lists, with entries in F, of length equal to the dimension of the space. Orthodoxy spells that as Fn for dimension n, which I write as {lists (F: |n)}, but it's the same either way.
These are the generalization to all dimensions of: the one-dimensional line segment between two points; the two-dimensional triangle; the tetrahedron (or triangular-based pyramid) in three dimensions. For the simplex of dimension n I use {lists {{positives}: f :1 +n): sum(f) = 1}.


There are, of course, various ways we could define these; an n-dimensional simplex or simply n-simplex has 1 +n corners, in a vector space. The simplex then comprises all points that can be expressed as weighted averages of the corners, with non-negative weights. The simplex is degenerate unless the space's real dimension is at least n, and within it no lower-dimensional subspace contains vectors parallel to every displacement between pairs of those 1 +n corners; and we won't want our canonical n-simplex to be degenerate, so we'll need to impose that much on it, at least. From any non-generate n-simplex there is a linear map (unique up to permutation of the corners) from it to any n-simplex, so once we have a non-degenerate canonical n-simplex we can express all others in terms of it. Furthermore, each (1+n)-simplex has 2+n faces, each of which is an n-simplex opposite the one of its vertices that isn't a vertex of that face.

Now one obvious way to proceed is to start with the line segment from 0 to 1 in {reals} as the 1-simplex, embed it in each {lists ({reals}: |n)} n times as (: ({t}| |{i})&unite;({0}: |{j in n: j≠i} ←t; 0≤t≤1 :{reals}) for each i in n and use the co-ordinate planes and the plane that spans the images of t = 1 in those as faces of the simplex. This gives us the quite respectable {lists ({real r: r ≥ 0}: f |n): sum(f) ≤ 1} as the simplex and it's a half-way decent candidate for canonical n-simplex.

However it has certain asymmetries: the zero corner is special, both in being at the origin and in that all edges into it meet at right angles to one another, which won't be true for any of the other vertices. Those edges meeting at it all have unit length, unlike the edges of the face opposite it. Likewise the faces that meet at it all lie in co-ordinate planes and have equal measure (area, generalised), in contrast to the one opposite it which is {lists ({real r: r ≥ 0}: f |n): sum(f) = 1} and has larger measure. This face, on the other hand, is a nicely symmetric (n−1)-simplex, the symmetries being permutation of the co-ordinates of our vectors; those are necessarily isometries in the usual metric on {lists ({real r: r ≥ 0}: |n)}, so preserve angles and lengths. As a result (for n > 1), each (n−2)-simplex face of this face has all those same symmetries, aside from leaving the co-ordinate that's zero on the whole face out of the permutations.

So the n-simplex I actually do use as canonical is {({positives}: f :1+n): sum(f) = 1}. One face of this then actually is {({positives}: f :n): sum(f) = 1}, the canonical (n−1)-simplex, while each of the others is just the image of that under (: f&on;e ←f :) for some monic (1+n: e |n), embedding n in 1+n but omitting a different one of its members than n itself. The whole has symmetry under permutation of co-ordinates, so every edge has the same length, every 2-face has the same area, every 3-face has the same volume and so on. Best of all, if we have some list (V: p |1+n) of points in some vector space V, the simplex with these as vertices can be obtained by mapping each f in our canonical simplex to p.f, the pointwise product of p and f, directly expressing each point of the simplex as a weighted average of its vertices.

At first sight the step down from {real r: r ≥ 0} to {positives} might look like we're omitting the boundary, on which some components are zero, but switching from lists (: |1+n), which have to have an entry for each index from 0 through n, to (: f :1+n), which can omit the indices at which the list had a zero entry, gives us the same effect as if we had a zero at each index we omitted. (Point-wise addition of functions allows for the sum of two functions to map an input that only one of the functions accepts to that one's output. For contrast, point-wise product ignores each input that any of the factors ignores.)

This choice of canonical form also allows us something a little weird that might not be obviously relevant: it allows the (−1)-simplex to be well-defined. For n = −1, {({positives}: f :1+n): sum(f) = 1} = {({positives}: f :0): sum(f) = 1} is empty, since {({positives}: f :0)} = {[]} and the empty list [] has sum 0, not 1. This allows the point, or 0-simplex {({positives}: f :1): sum(f) = 1} = {[1]}, to have a boundary consisting of a single (−1)-simplex, matching the 1+n faces, each an (n−1)-simplex, that the n-simplex generally has, one opposite each vertex. Note that the (−1)-simplex, by the same pattern, has a boundary consisting of 0 … things that we thankfully don't need to decide what they are because there are none of them; and it makes sense that the empty set has no boundary, as it has no members for that boundary to be adjscent to. That the boundary of {[1]} is one empty set may still look a bit weird, but the general pattern has each face of the boundary opposite a vertex that isn't in the face and there's nothing in {[1]} other than its single vertex, [1], so the face opposite that must be empty.

One objection one might raise to this form of the simplices is that the use of naturals does break the symmetry in one way: the ordering of the naturals implies an ordering of the co-ordinates and hence of the vertices, or of the edges, or of the faces of each higher dimension, within the simplex. This is rendered harmless by the manifest symmetry under perturbations that ignore the order and, in any case, falls under the discussion of why we use the naturals as the canonical sets of each finite cardinality, where there is no need of an ordering within a set for it to have a given cardinality.

Valid CSSValid HTML 5 Written by Eddy.