BVBbc*BVBdd->C BVBda->D BVBc_->E
Evolving a Program
In the previous section we turned this AND program:
into these logical expressions:
\[ \begin{align} (\mathtt{b} \mathtt{d}) + (\mathtt{c}\mathtt{d}) &\Rightarrow \mathtt{C}\\ \mathtt{a} + \mathtt{d} &\Rightarrow \mathtt{D}\\ \mathtt{c} &\Rightarrow \mathtt{E} \end{align} \]
Given the equivalence of these expressions, we can use the more compact DNF form to represent the program: So why not just use compact DNF for the language? This becomes clearer when we consider the second goal of the language: to explore how the structure of the language can facilitate evolution.
Details
TODO: Move this to technical
There are two key constraints on the mutation operator. First, any mutation must result in a valid AND program. Second, the use of stimulus, response, and memory elements must be consistent.
A primary consideration is that the mutation operator should always produce a valid AND program. Additional constraints can further facilitate the evolutionary process. A valid program also requires a register architecture that defines the range and type of valid stimuli, memories, and responses.