*(Originally published in Winter 1999 issue of JOAC.)*

A Q-Ching hexagram is dynamic and alive, rarely standing still. Motion underlies the oracle readings, most obviously through moving lines, but these do not adequately capture the inner dynamism of the QC. Capturing a reading as six 4-valued emblematic lines (or as a pair of "before and after" static hexagrams) is like collapsing a wave to something observable (to borrow a quantum physics metaphor). This subject has been explored previously by McFnordland, DeGuy, and others.

An approach to exposing hidden QC mechanics is to view any hexagram as a cellular automaton traveling through a 64-node phase space. Each node in the network is a hex state, and edges correspond to potential state transitions. In the QCCA model we propose here, a hex always has 6 possible transitions of which one is "active" at a given moment ... excluding the reflexive transition in which a hex does not change, although this is clearly implied.

In QCCA, each line of the hex is associated with a rule. Rules deterministically generate change. When a line changes, the overall hex changes. This can be viewed as a "hop" to a new node in phase space.

Simple rules can generate complex behavior, of which "standard" QC oracle readings are but a subset. Derivation of movement from repetitive application of simple state based rules is what makes QCCA analogous to a classic cellular automaton. (Technically QCCA is a Meta CA since it describes a whole family of rules which can be applied to the QC in various ways to generate specific automata.)

What does a QCCA rule look like? It can be expressed in pseudo Boolean logic as:

where line# is the number of the line this rule applies to, and each {yin} is a set of yin line counts to match. SELF refers to the line the rule is applied to (line#), NEIGHBORS to its adjacent lines, and ALL to all 6 lines of the hex. The == operator denotes set membership ("is a member of") rather than actual equality. For example:IF (line# == {yin1}) AND (NEIGHBORS == {yin2}) AND (ALL == {yin3}) THEN MOVE

means line 5 will move if it's currently yang, its neighbors are anything at all, and there are 3 or 4 total yin lines.IF (5 == {0}) AND (NEIGHBORS == {0,1,2}) AND (ALL == {3,4}) THEN MOVE

This simple rule template permits instantiation of many actual rules, of sufficiently rich variety to produce a broad range of QC cellular automata, each of which represents an imaginary oracular system.

The actual rule set in traditional QC for a moving line in the 3rd position could be written as:

This illustrates the unconditional nature of a traditional QC moving line, and its lack of context (surrounding lines don't affect it). But with QCCA much more subtle and context sensitive "hyper moving lines" can be described. For example, if a "reading" produced the following rule:IF (3 == {0,1}) AND (NEIGHBORS == {0,1,2}) AND (ALL == {0,1,2,3,4,5,6}) THEN MOVE

that would mean the top line is moving from yang to yin only if the neighboring 5th line is also yang, but all the other four lines below are yin.IF (6 == {0}) AND (NEIGHBORS == {0}) AND (ALL == {4}) THEN MOVE

It is easy to see that a more compact notation would capture the essential rule variables as a line # (1 to 6), {yin1} (a non-empty subset of {0,1}), {yin2} (a non-empty subset of {0,1,2}), and {yin3} (a non-empty subset of {0,1,2,3,4,5,6}). Therefore any rule can be assigned a pseudo Godel number (PGN) defined as function of the these four variables. Many PGN() functions are possible; they need only be well defined and map one-to-one to the set of all possible rules. We arbitrarily choose the following PGN() function:

as we believe this particular function meets the criteria for well foundedness and bi-directional uniqueness.Let line# be an element of {1,2,3,4,5,6}.

Let yin1 = 2^e(0) * 3^e(1), where e(x) is 1 if x is an element of {yin1} else zero.

Let yin2 = 2^e(0) * 3^e(1) * 5^e(2), where e(x) is as above for {yin2}.

Let yin3 = 2^e(0) * 3^e(1) * 5^e(2) * 7^e(3) * 11^e(4) * 13^e(5) + 17^e(6).

Then define PGN(line#, yin1, yin2, yin3) = 2^line * 3^yin1 * 5^yin2 * 7^yin3.

How large is the QCCA rule space? Line# has 6 values, yin1 has 3, yin2 has 7, and yin3 has 127. (Computation of these numbers is left as an exercise to the reader. Hint: use combinatorics.) Therefore there are 6*3*7*127 = 16,002 possible rules.

There are 16,002 corresponding pseudo Godel numbers, ranging from 2(3^2)(5^2)(7^2) = 22050 -- the minimum PGN corresponding to rule "IF (1 == {0}) AND (NEIGHBORS == {0}) AND (ALL == {0}) THEN MOVE" -- up though (2^6)(3^5)(5^30)(7^510510) -- the very large maximum PGN corresponding to the rule "IF (6 == {0,1}) AND (NEIGHBORS == {0,1,2)) AND (ALL == {0,1,2,3,4,5,6}) THEN MOVE" ... which happens to be isomorphic to a Top Changing Line in traditional QC.

The exercise of launching specific cellular automata in 64-state phase space based on such rules is left to future programmers. At the time Lao Tse Kaud developed the Q-Ching he may well have been aware of QCCA too (or something like it). But in the archeo-computing era he would have lacked the necessary meta engine to simulate specific automata and observe their behavior. Now at last it can theoretically be done.

Finally, one can imagine a sort of "hyper oracle" whose purpose is to generate a set of six QCCA rules in addition to six simple lines. Each such hyper-hexagram would undergo a series of movements based on the firing of its rules. The traditional QC oracle can be instantiated from this hyper oracle, but so can literally thousands of others. This area also appears ripe for future exploration.