With my apologies for any confusion between [ meta-denotation …] and [ literal … ] square brackets and ellipsis. (Note that the latter leaves a space between … and ], while the former does not – albeit uses of the denotations defined using the latter need not include such space.) The difference does matter – see meta-denotations and templates. Note that the presence of commas in these denotations distinguishes them from further uses of square brackets which may arise in the tensor notation and elsewhere.
in which each item must denote a value; the whole denotes a mapping (:h|N), for which N is either {naturals} or a natural, and the items are h's outputs. When N is 1+n for some natural n, (:h|1+n) is synonymous with [h(0), …, h(n)], just as 1+n is synonymous with {0,…,n} and, indeed, with [0,…,n].
A text matching either template is a sequence of sub-texts, separated by
commas and enclosed in [ square brackets ], in which each sub-text either is
an ellipsis, as … is known, or is
intelligible to context as a denotation for a value; if none of the sub-texts
is … the denotation is of the first form,
otherwise the second. Where a sequence of value-denotations,
i.e. of items, uninterrupted
by … appears in a denotation of either
form, describe it for the present as a chunk
; the first form, when it
contains any items at all, has a single chunk;
the second form may contain arbitrarily many chunks. Taking any chunk and
enclosing it in [ square brackets ] yields a text matching the first template;
so, first, I'll give the meanings for these, then I'll use these to express
what the second form means.
Each chunk has a definite number of items in it, and no ellipsis; a list in the first form, having N items in its text, is that mapping (:h|N) for which the value of each item in the text is h's output when given, as input, the number of items to the left of the given one. Thus [a,b,c] is the mapping (:|3) which maps 0 to a, 1 to b and 2 to c; and [] is the mapping (:|0), there being only one such since 0 is empty = {} and a mapping (:|{}) has no right values, hence is empty, so indeed [] = {}.
Given this reading of the first form, any chunk is best described by the list one obtains by enclosing it in [ square brackets ]. In a use of the second template, denoting (:h|N), the presence of a chunk described by a list (:g|n) asserts that
Note that, aside from chunks which abut a [ square bracket ], nothing is asserted about the relative order of chunks – the lists [0, 1, 2, 3, 4, 5] and [1, 2, 3, 4] are both valid values for the denotation […, 2, 3, 4, … 1, 2, 3, …], for instance; as, indeed, is {naturals}.
A denotation of the second form may end in ellipsis, in which case the value it denotes may be an infinite sequence, (:h|{naturals}). One could probably do quite well extending the given notation to describing ordinal sequences; then n would be an integer while m might not (though it'll still be an ordinal); ending in ellipsis would then allow (but not constrain) N to be a limit ordinal.
Borrowing an idiom from ECMAScript, I could allow list-like denotations in which two commas appear with no value between them; this would naturally denote a mapping (:h:N) as above, but allowing some members of N to not be right values of h. However, for now (up to 2014/Autumn), I haven't felt a strong need to do this.
Written by Eddy.