About Array Theory

Array theory is a one-sorted theory of nested rectangular arrays that combines the Zermelo-Fraenkel concept of nested sets with the vectors, matrices, and multi-axis arrays of Iverson and Falkoff’s programming language APL. As every element of a set is again a set in set theory, every item of an array is again an array in array theory. The consequent unbounded depth of nesting ultimately terminates in arrays that have no axes and hold themselves as sole items. Such self-containing “atoms” include numbers, truth-values, characters, and indivisible strings of characters called phrases and faults. For example, the number 2 is a 0-axis array in which the sole item is the number 2.

The flat arrays of APL, a language implemented and extensively applied in the late 1960s, had many similarities to the flat, tensor representing, “n-way matrices” that Gabriel Kron introduced into electrical engineering in the 1930s and 1940s. On joining the APL Design Group at IBM’s Yorktown Research Center in 1968, Trenchard More originated array theory by combining multi-axis arrays with set-theoretic nesting and Quine’s controversial concept of self-containment. The search for a maximal number of universally valid equations while preserving consistency led More through successive versions of the theory. Later versions benefited from implementations first by Willard Bouricius at Yorktown, and then when More moved to the IBM Cambridge Scientific Center in 1974, by Anthony Hassitt, Leonard Lyon, and Robert Creasy at the IBM Palo Alto Scientific Center.

Mike Jenkins, an IBM Visiting Scientist who had been actively studying tree-like extensions to APL at Queen’s University, joined More at the Cambridge Center in 1979. Over the next 5 years they collaborated on the design of Nial and the refinement of array theory. The Q'Nial interpreter was developed at Queen's during this time and released in 1983 as Version 4 of Q'Nial. To avoid contradiction, the most controversial result was that there are as many different empty arrays of a given shape as there are arrays themselves. Arrays of the same shape differ according to their virtual items. A list of no 2s differs from a list of no 3s!

This initial version of Q'Nial reflected the desire to stay close to More’s theoretical ideas, while providing procedural control, flexible file handling and interactive input/output. The intent of the design was to follow More’s equations as well as those Jenkins developed to support the implementation functionality.

After ten years of feedback from programmers using Q’Nial, Jenkins undertook a major redesign of the language and its implementation. The resulting Version 6 of Q’Nial sacrificed some of the generality of the functional model and modified More’s theory by requiring that there be only one empty array of any given shape. One can now compare an abstract Version 4 of array theory with a more conventional, conformal Version 6.