Wolfram Language Paclet Repository
Community-contributed installable additions to the Wolfram Language
Automata theory package
Contributed by: sutner@cmu.edu
Automata supports computation with finite state machines, syntactic semigroups and one-dimensional cellular automata.
To install this paclet in your Wolfram Language environment,
evaluate this code:
PacletInstall["KlausSutner/Automata"]
To load the code after installation, evaluate this code:
Needs["KlausSutner`Automata`"]
Construct a finite state machine that accepts all words with an a in the third position from the end:
In[1]:= | ![]() |
In[2]:= | ![]() |
Out[2]= | ![]() |
Generate a few words in the language to verify correctness:
In[3]:= | ![]() |
Out[3]= | ![]() |
Plot the diagram of the machine, using edge labels or colors:
In[4]:= | ![]() |
Out[4]= | ![]() |
In[5]:= | ![]() |
Out[5]= | ![]() |
Determinize the machine to obtain a DFA. The machine exhibits exponential blowup during determinization:
In[6]:= | ![]() |
Out[6]= | ![]() |
We can check the growth function of the DFA as further evidence of correctness:
In[7]:= | ![]() |
Out[7]= | ![]() |
The DFA produced by determinization is already minimal:
In[8]:= | ![]() |
Out[8]= | ![]() |
We construct the syntactic semigroup of the language and test some of its properties:
In[9]:= | ![]() |
Out[9]= | ![]() |
In[10]:= | ![]() |
Out[10]= | ![]() |
A one-dimensional cellular automaton has surjective global map iff the associated semiautomaton is universal. We use this method to determine all surjective elementary cellular automata:
In[11]:= | ![]() |
Out[11]= | ![]() |
A better quadratic time algorithm classifies cellular automata into injective/open/surjective/none:
In[12]:= | ![]() |
Out[12]= | ![]() |
Thus there are 6 injective ECA, 8 open ones, and so on.
Wolfram Language Version 13.1
Creative Commons Attribution Non Commercial No Derivatives 4.0 International