The motivation for a symbolic abstract machine, later called SAM, comes from the Turing machine and its theory. Another source of motivation is the theory of operational semantics that is intended here for simulation purposes.

We define the symbolic abstract machine, SAM, to be an automaton to execute symbolic code in order to generate a specified behavior model while assuming the necessary input and output responsibilities. In FIGURE the logic and the principle of this chapter are presented in a notation of a technology space (see Bézivin, 2005) in order to emphasize the different roles of the three main components: 1) Java execution model,  2) the new high level simulation environment, the symbolic abstract machine based on an atomistic model and the output model for the simulated information,  3) the Turing machine with its tape metaphors. The user has its role as a Decider (Hopcroft et al., 1979) in controlling such selections of the run methods that are ambiguous. Due to the user’s actions complete tapes can interactively (Definition 30) be built.

Because Java is the language to be simulated, the execution model of it, Java Virtual Machine (JVM), must be the reference to be used as input specification for the abstract machine (Hopcroft et al., 1979).  Bytecode is a low level instruction set to execute statements, one after the other. JVM includes a class loader and its initialization processes as well as a thread mechanism to implement concurrent and parallel functionalities.

In the middle of FIGURE the symbolic abstract machine is depicted. As argued above the challenging requirement for SAM is that all the simulation between atoms should be done by calling the equivalent run-method of each atom one after another. The atoms can refer to several other atoms either in a sequence or by using the input data from other atoms for selecting the next actual clauses or by continuing the call chain to the next deeper level (called evaluation). SAM should be able to keep lists of its calling history and the status of the atom within its run method.  However, it is not allowed for an atom to create intermediate results like vectors outside of atoms, because this new data would corrupt the model from its formalism point of view.