State graphs are nice in that they make game dynamics clear with a minimum of non-essential detail. The downside is that they can be extremely large; and, for this reason, they are not suited to communication of game rules as required in general game playing. Fortunately, there is an alternative approach to game description that allows us to encode game dynamics in a dramatically more compact form.

In the vast majority of games, states and actions are not monolithic - they can be defined in terms of more fundamental entities. In Chess, for example, states can be conceptualized in terms of the locations of individual pieces one the Chess board. In Risk, where many pieces are moved at once, overall actions can be defined in terms of the movements of individual pieces.

The state of Tic-Tac-Toe can be expressed in terms of 29 propositions.

The good news is that it is frequently possible to write short descriptions of large games by defining game dynamics in terms of these more fundamental entities rather than monolithic states and actions.

For example, in Tic-Tac-Toe, if the upper left cell of the game matrix is blank, then placing an X in that cell leads to a state in which the upper left cell contains an X. This transition takes place no matter what marks are in the other cells of the Tic-Tac-Toe matrix.

The propositional net fragment shown below captures these bits of dynamics in graphical form. While this graph is not small, it is much smaller than the exponentially larger state graph, where there would be a separate state for each combination of propositions.


Figure 2.2 - Propositional Net Fragment

The idea of decomposing monoliths into more fundamental entities can be taken even further. Propositions and actions can often be defined in terms of even more primitive objects, like pieces, squares, players, and so forth. Actions are formed from primitive operations applied to primitive objects. Propositions are formed from state relations applied to primitive objects.

cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o) cell(1,1,b) & mark(1,1,o) -> cell(1,1,o)

The advantage of doing things in this way is that we can achieve even further compaction through the use of variables to describe dynamic patterns. For example, we can replace all of the dynamics in the preceding propositional net with the single variablized propositional net shown below.

cell(1,1,b) & mark(1,1,W) -> cell(1,1,W)

These representational ideas (decomposition and variablization) are the basis for a language called Game Description Language (GDL). GDL is used in virtually all work on General Game Playing, and fluency with GDL is extremely helpful in talking about General Game Playing. We start this chapter with a brief definition of GDL. We then look at an example. We show how the resulting description can be used in simulating the game. We talk about additional requirements placed on games. Finally, we summarize the prefix syntax for GDL used in most GGP competitions.