Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

A (one dimensional) cellular automaton is a function1 F : Σ → Σ with the property that there is a K > 0 such that F (x)i depends only on the 2K + 1 coordinates xi−K , xi−K+1, . . . , xi−1, xi, xi+1, . . . , xi+K . A periodic point of σ is any x such that σ^p (x) = x for some p ∈ N, and a periodic point of F is any x such that F^q (x) = x for some q ∈ N. Given a cellular automaton F, a point x ∈ Σ is jointly periodic if there are p, q ∈ N such that σ^p (x) = F^q (x) = x, that is, it is a periodic point under both functions.

This project aims to explore the nature of one-dimensional Cellular Automata, in the hope of finding the structure of cellular automata through its periodic points.

2034 views
License: MIT
ubuntu2004
1
% !TEX encoding = UTF-8 Unicode
2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
%%
4
%% This file is asmejour-template.tex, a template to format papers in the style of ASME journal papers.
5
%%
6
%% This file is version 1.18 dated 2022/01/10
7
%%
8
%% Author: John H. Lienhard V
9
%% Department of Mechanical Engineering
10
%% Massachusetts Institute of Technology
11
%% Cambridge, MA 02139-4307 USA
12
%%
13
%% Class options include:
14
%%
15
%% * Option to color the vertical bar in the title block [barcolor = colorname]
16
%% * where colorname is any name def'd by xcolor package; omit barcolor option to get black
17
%%
18
%% * Option to omit the list of figures and list of tables at the end [nolists]
19
%%
20
%% * Math options from M. Sharpe's newtxmath package: upright integrals [upint];
21
%% * [varvw] for a v and w that are better distinguished from Greek nu; [subscriptcorrection]
22
%% * to fine-tune the placement of math subscripts; and also additional options such as
23
%% * [smallerops, varg, slantedGreek, frenchmath, varbb, cmbraces]. Version 1.6 or higher
24
%% * is recommended.
25
%%
26
%% * Option to include line numbers [lineno]. The lineno package does not number tables,
27
%% * footnotes, captions, etc. You must run *twice* for proper placement of the numbers.
28
%% * This option will disable balancing of the column heights on final page.
29
%%
30
%% * Option to balance column heights on final page [balance]. This option sometimes
31
%% * misbehaves, so use it with an awareness that it can create unexpected problems.
32
%% * This option is not compatible with line numbering.
33
%%
34
%% * Options for copyright notices:
35
%% * Omit the ASME copyright from the footer [nocopyright]
36
%% * Copyright footnote if all authors are government employees [govt]
37
%% * Copyright footnote if some authors are government employees [govtsome]
38
%% * Copyright footnote for government contractors [contractor]
39
%%
40
%% * Option to omit all ASME text fields from the footer [nofoot].
41
%%
42
%% * Options for PDF/A compliance. [pdf-a] will produce PDF/A-3u compliance with sRGB OutputIntent.
43
%% * [pdfapart= 1 or 2 or 3] and [pdfaconformance= b or u] can enable levels 1b, 2b, 2u, and 3b.
44
%% *
45
%% * The most recent versions of LaTeX (2021 and later) are moving toward integrated support for pdf-a,
46
%% * through \DeclareDocumentMetadata{..}. The asmeconf class supports these new features, which can
47
%% * replace the aforementioned class options. (An up-to-date LaTeX installation is required.)
48
%%
49
%% * Many options for calligraphic, script, and fraktur fonts from the mathalfa package; the
50
%% * example value used is: mathalfa=cal=euler (use Euler font for \mathcal)
51
%% * some other options for cal are: dutchcal, zapfc, cm (default), boondox,...
52
%% * frak (fraktur), bb (blackboard bold), scr (script) may also be controlled.
53
%%
54
%% * An option to use newtxtext's superiors font for footnotes [nodefaultsups] and an option
55
%% * for slightly larger small capitals [largesc]
56
%%
57
%% * Options for typewriter font
58
%% * [hyphenate] allow hyphenation (normally suppressed because for typewriter font is often used for code)
59
%% * [var0] replace default slashed zero by unslashed zero
60
%% * [mono] force interword separation to monospacing
61
%%
62
%% * Options for the babel package to support passages in other languages (such as a translated
63
%% * abstract in an appendix), e.g. [french]. The main language will default to English
64
%% * unless a different main language is selected, e.g. [main=spanish]. See Appendix C for details.
65
%%
66
%% For details of the newtx and mathalfa packages, refer to their documentation (available at CTAN: http://ctan.org).
67
%%
68
%% The use of commands defined or modified by the asmejour class is illustrated below. In particular, some care
69
%% is needed when using complicated math and macros in section headings, to avoid problems with pdf bookmarks,
70
%% as facilitated by the optional argument of \section (also illustrated below).
71
%%
72
%=========================================================
73
%%
74
%% LICENSE:
75
%%
76
%% Copyright (c) 2022 John H. Lienhard
77
%%
78
%% Offered under the MIT license: https://ctan.org/license/mit
79
%%
80
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
81
82
%% Class options are described above.
83
\documentclass[subscriptcorrection,upint,varvw,barcolor=Black,mathalfa=cal=euler,balance,hyphenate,english,pdf-a,nofoot, nolists]{asmejour} %
84
85
86
%%%% pdf metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
87
88
\hypersetup{%
89
pdfauthor={Nate Schnitzer, Ethan Ewing, Hung Vu} % <=== change to YOUR name[s]!
90
pdftitle={LEMMAigma Ligma}, % <=== change to YOUR pdf file title
91
pdfkeywords={Cellular Automata, Surjectivity, Density, NFAs},% <=== change to YOUR pdf keywords
92
pdfsubject = {Surjective Span 6 CA}, % <=== change to YOUR subject
93
% pdfurl={https://ctan.org/pkg/asmejour},% may delete
94
}
95
96
%%%% Journal name and optional copyright year %%%%%%%%%%%%%%
97
98
%% Omit "Journal of". If Journal Name is quite long, use \\ to insert a line break
99
\JourName{Experimental Mathematics}%<=== change to the name of your journal
100
101
%% The default copyright year is the current year
102
%% \PaperYear{2022} sets 2022; and \PaperYear{} omits the year entirely.
103
104
%%%% end of preamble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
105
106
\usepackage{listings}
107
\usepackage{xcolor}
108
\usepackage{hyperref}
109
\usepackage{graphicx}
110
\usepackage{listings}
111
\usepackage[inkscapeformat=png]{svg}
112
\usepackage{svg}
113
\usepackage{array}
114
\usepackage{caption}
115
116
\definecolor{codegreen}{rgb}{0,0.6,0}
117
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
118
\definecolor{codepurple}{rgb}{0.58,0,0.82}
119
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
120
121
\lstdefinestyle{mystyle}{
122
backgroundcolor=\color{backcolour},
123
commentstyle=\color{codegreen},
124
keywordstyle=\color{magenta},
125
numberstyle=\tiny\color{codegray},
126
stringstyle=\color{codepurple},
127
basicstyle=\ttfamily\footnotesize,
128
breakatwhitespace=false,
129
breaklines=true,
130
captionpos=b,
131
keepspaces=true,
132
numbers=left,
133
numbersep=5pt,
134
showspaces=false,
135
showstringspaces=false,
136
showtabs=false,
137
tabsize=2
138
}
139
\lstset{style=mystyle}
140
141
\begin{document}
142
143
% Change to your author name[s] and addresses, in the desired order of authors.
144
% First name, middle initial, last name
145
% Use title case (upper and lower case letters)
146
% Note usage below for corresponding author.
147
148
\SetAuthorBlock{Nate Schnitzer}{ LEMMA,\\
149
University of Maryland,\\
150
College Park, Maryland,\\
151
nschnitz@terpmail.umd.edu}
152
153
% To label one or more corresponding authors put "Name\CorrespondingAuthor". No space after "Name".
154
% An optional argument can be added if email is not in address block as
155
% "Name\CorrespondingAuthor{[email protected]}"
156
% Can also include multiple emails and use the command more than once for multiple corresponding authors,
157
% "Name\CorrespondingAuthor{[email protected], [email protected]}"
158
159
\SetAuthorBlock{Ethan Ewing}{ LEMMA,\\
160
University of Maryland, \\
161
College Park, Maryland \\
162
eewing1@terpmail.umd.edu
163
}
164
165
\SetAuthorBlock{Hung Anh Vu}{ LEMMA,\\
166
University of Maryland,\\
167
College Park, Maryland,\\
168
hvu1@terpmail.umd.edu}
169
170
%%% Change to your paper title. Can insert line breaks if you wish (otherwise breaks are selected automatically).
171
\title{Surjective One Dimensional \\ Span 6 Cellular Automata}
172
173
174
%% Abstract should be no more than 250 words
175
\begin{abstract}
176
Using FSA and the construction algorithm, we generated a list of surjective span 6 cellular automata as a modest sample for our FDense program. We wanted to experimentally quantify Mike Boyle's conjecture which states that the jointly periodic points of a one dimensional cellular automata are dense. Furthermore, we wanted to know if the cardinality of a cellular automata on N symbols is $\ge \sqrt{N}$.
177
\end{abstract}
178
179
180
\date{Version \versionno, \today}%% You can modify this information as desired.
181
%% Putting \date{} will suppress any date.
182
%% If this command is omitted, date defaults to \today
183
%% This command must come somewhere before \maketitle
184
185
\maketitle %% This command creates the author/title/abstract block. Essential!
186
187
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
188
%%%%%%%%%%%%%%%%%%%%% End of fields to be completed. Now write! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
189
190
\section{Introduction}
191
In this paper we are exploring one dimensional cellular automaton (CA) through our own computer programs to try and get a better understanding of their periodic orbits. The main focus is on surjective one dimensional CA highlighted in [1]. Mike Boyle and Bryant Lee developed a computer program for studying one-dimensional cellular automata to gather experimental data to justify conjecture 1.1 [1]. Conjecture 1.1 is a very well-known open question because there seems to be a correlation between the behavior of cellular automata and dynamical systems.\\
192
193
\textbf{Conjecture 1.1} {For every surjective one-dimensional cellular automaton, the jointly periodic points are dense.}\\
194
195
Through our research, we wish to replicate the results from [1] and also provide more evidence for conjecture 1.1 by experimenting on span 6 surjective maps. Additionally, we wish to know if the fraction of surjective one-dimensional cellular automata given by range of n codes, which have dense jointly periodic points, goes to 1 as n goes to infinity.\\
196
\indent If we let $P$ represent the number of jointly periodic points in $Per(f) \cap P_k(SN)$ (i.e. $P = |Per(f|Pk(SN ))|$ ) and set $V_k(f, SN )$ = $P^{1/k}$, we can define
197
$$\mbox{\large V(f, $S_N$) = $lim_k$ sup $V_k$(f, $S_N$ ) } $$
198
This raise the question if every cellular automata ($f$) defined on N symbols V(f, $S_n$) $\ge \sqrt{N}$ or if V(f, $S_n$) $\ge 1$.
199
200
201
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
202
203
\section{Definitions}
204
Cellular automata (CA) are mathematical models that exhibit complex behavior through the interaction of simple units, known as cells, which are arranged in a regular grid. Cellular automata have several key properties that make them interesting and useful in various areas of science and engineering. Some of these properties are:\\
205
206
\begin{enumerate}
207
\item Locality: Each cell in a CA only depends on its local neighborhood of adjacent cells. This locality property makes CAs computationally efficient and easy to parallelize, as each cell can be updated independently based on its local state.
208
\item Homogeneity: The same local rule is applied to every cell in the CA. This property allows the CA to exhibit complex global behavior that arises from the repeated application of simple local rules.
209
\item Emergence: The global behavior of a CA emerges from the interaction of many simple local rules. This can lead to the emergence of complex patterns, structures, and behaviors that are not immediately obvious from the local rules.
210
\end{enumerate}\\
211
212
\textbf{Definition: }{Let $\Sigma_N$ denote the set of doubly infinite sequences $x = ...x_{-1}x_0x_1$... such that each $x_i$ lies in a finite alphabet $A$ of $N$ symbols. A one-dimensional cellular automata (CA) is a mapping $f:\Sigma_N \rightarrow \Sigma_N$ which is defined by a local rule $F:A^{2M + 1} \rightarrow A$ where $M > 0$, such that for all i $(f(x))_i = F(x_{i-M},..., x_{i+M} )$ [1]}\\
213
214
\textbf{Definition: }{Let $\sigma(x)_i$ denote the shift map on a sequence. $\sigma(x)_i$ = $x_{i + 1}$. Let $S_{N}$ denote the shift map on $\Sigma_N$ [1]}\\
215
216
One single application of the shift map shifts every cell of $x \in \Sigma_N$ to the right one index. The shift map moves the symbols of a sequence without changing the content of the sequence itself.\\
217
\indent We refer to the points of (not necessarily least) period k of a map S as $P_k(S)$, and the points fixed by $S^k$ as Per(S), where Per($S$) = $\cup\limits_{k}P_k(S)$. Thus, Per($S_N$) is the set of spatially periodic points for a one-dimensional cellular automaton on N symbols. The jointly periodic points of a cellular automaton map f on N symbols are the points in Per(S) that are also periodic under f, i.e., the points that are temporally periodic as well as spatially periodic.[1]\\
218
\indent In simpler terms, an $x \in \Sigma_N$ is spatially periodic if $x =
219
\sigma^n(x)$ i.e. the point is equal to the point shifted n times. An $x \in \Sigma_N$ is temporally periodic if $x = f^n(x)$. An $x \in \Sigma_N$ is jointly periodic if $\sigma^n(x) = x = f^m(x)$.
220
221
\subsection{Density}
222
One of our motivations is to quantify Mike Boyle's conjecture which states that the jointly periodic points of one-dimensional cellular automata are dense. In order to do this, we must have a firm grasp of what it means to be dense in $\Sigma_2$. Generally, when we talk about density of sets, a set $Y \subseteq X$ is dense in $X$ if every point in $X$ has a point in $Y$ that is arbitrarily close. For metric spaces, such as $\Sigma_2$, a distance function, $d(x, y)$ for $x, y$ in the metric space $(X, d)$, can be used to determine if points are arbitrarily close. If $d(x, y) < \epsilon$ for $\epsilon > 0$, then $x$ $y$ are arbitrarily close. For $\Sigma_2$,
223
224
\begin{center}
225
$d(x,y) = \sum_{i}^{\infty} 2^{-i} * |x_i - y_i|$
226
\end{center}
227
228
Since $\Sigma_2$ is the set of doubly infinite sequences, to apply $d(x, y)$, it is necessary to choose a starting index.
229
230
\textbf{Example: } Prove the set spatially periodic points are dense in $\Sigma_2$.
231
232
Proof: Let $x$ be an arbitrary point in $\Sigma_2$. $x = x_1, x_2, x_3,...$ Let $y = x_1, x_2, ..., x_{n-1}, x_1, x_2, ..., x_{n-1},x_1,...$. Clearly, y is spatially periodic. $d(x, y) = 2^{-n}$. Let $\epsilon = 2^{-n}$. Clearly $\epsilon > 0$ and approaches 0 as $n$ goes to infinity. Since, y is an arbitrary spatially periodic point and x is arbitrary in $\Sigma_2$, and $d(x, y) \le \epsilon$, the set of spatially periodic points are dense in $\Sigma_2$.
233
234
A subset E of $\Sigma _N$ is considered dense if for every point x in $\Sigma _N$ and every $k \in$ \mathbb{N} there exists y in E such that $x_i = y_i$ whenever |i| $\le$ k. We say E is m-dense if every word of length m on symbols from the alphabet occurs in a point of E. This definition of density is more closely linked to conjecture 1.1. This will be more clear and applicable when we discuss the FDense program.
235
\subsection{Surjectivity} Since we are concerned with surjective cellular automata, we should have a working definition of what it means for a cellular automata is surjective. For a map $F: A \rightarrow B$ to be surjective, all elements of set $B$ must be attained by applying $F$ to some $a \in A$.
236
237
\subsection{Span and Tabular Representation} We can define a cellular automata as a polynomial function such as $f = x_{-1} + x_0x_1 (mod 2)$. This means that the next generation of $f$ is defined as $(fx)_i = 2x_{i - 1} + x_i(x_{i+2}) (mod 2).$ The span of this CA is 1 plus the maximum difference of coordinates with nonzero coefficients [1]. For our example, it is 1+ 2(−1) = 4 so our CA is span 4. To make our implementation easier, we can represent the block code ($f$) in tabular form instead of polynomial form. The tabular form of our function defines a look up table which allows for us to "look up" the output of any input. Below is a description of converting polynomial into tabular [1].
238
239
\begin{lstlisting}[language=Python]
240
Suppose we want to specify the function f = x[0] + x[1]*x[2] as a table. First, note that the function is of span 3. Enumerate the values of the function for values of x[0], x[1], and x[2], going through them in lexicographic order as demonstrated below. Notice that incrementing starts at x[2] rather than x[0].
241
242
0 1 2 3 4 5 6 7
243
x[0] 0 0 0 0 1 1 1 1
244
x[1] 0 0 1 1 0 0 1 1
245
x[2] 0 1 0 1 0 1 0 1
246
f 0 0 0 1 1 1 1 0
247
248
Then the tabular rule is "0001 1110".
249
250
\end{lstlisting}
251
252
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
253
254
\section{Simple CA Examples}
255
256
\subsection{Elementary CA}
257
Elementary cellular automata exist in $\Sigma_{2}$, the set of doubly infinite sequences {x = ...$x_{-1}x_0x_1$...} where each {$x_n$} is a 0 or 1. For span 3, each window is 3 bits, thus there are {$2^3 = 8$} different possibilities for each window. Each window will produce a 0 or 1. We can classify the map {$f: \Sigma_{2} \rightarrow \Sigma_{2}$} with an 8-bit binary number.\\
258
259
\includesvg[width=3.2in]{ElementaryCA30Rules_750.svg}\\
260
261
262
This map would correspond to the 8-bit binary number 00 011 110. 00 011 110 is 30 in base 10, so the Wolfram Code[3] for this mapping is rule 30. The mapping that turns all windows into black would be 11 111 111, rule 255. Likewise, the mapping that turns all windows into white 00 000 000, rule 0. Since there are 8-bits and {$2^8 = 256$}, there are 256 different rules.\\
263
264
\subsection{Python Implementation}
265
One dimensional Cellular Automata are very simple structures to implement in code using a sliding window approach, where an iterator moves through an array, performing some action based on a subset of the array determined by the current position.\\
266
\indent Suppose you are given a CA Rule of width 3 and a 6 element long sequence, A, to apply the rule to. So, at a given index i, you would take the window/subset [A[i-1], A[i], A[i+1]] and apply the rule against that window. You would map this against the entire sequence, getting the newly evolved CA state.\\
267
\indent Using python, we can represent the local function using a dictionary, where k-length tuples can be mapped to some list. We can generate the dictionary representing a given rule using the \textit{get_rule_dict} function that we created:
268
\begin{lstlisting}[language=Python]
269
import itertools
270
271
def get_rule_dict(n: int, width: int):
272
# Get the list representing the rule num
273
# Converts n to binary string of length 2^3 and then pulls it back into
274
# int list
275
vals = [int(x) for x in '{0:0{k}b}'.format(n, k=2**width)]
276
277
# Create a dictionary mapping the possible length width binary sequences to the rule and returns it
278
return dict((zip(itertools.product([1,0], repeat=width), vals)))
279
\end{lstlisting}
280
281
Now that we have then dictionary containing the rule's mapping, we can create a function that applies this to some sequence. As said before, we want to use a sliding window technique to apply this mapping to the function on a window of width k.\\
282
\indent We created a function \textit{apply_function} which takes in a list of integers representing the sequence for the rule to be applied to, a dictionary containing the mapping of the binary sequences to the output in the form of tuples and ints, an int representing the width of the rule.
283
284
\begin{lstlisting}[language=Python]
285
def apply_mapping(line, rules, width):
286
new_line = []
287
for i in range(0, len(line) - (width - 1)):
288
window = tuple(line[i:i+width])
289
new_line.append(rules[window])
290
return tuple(new_line)
291
\end{lstlisting}\\
292
293
Additionally, we can create another function to generate a random binary sequence of length n:
294
\begin{lstlisting}[language=Python]
295
def get_random_seq(n):
296
seq = []
297
for _ in range(n):
298
seq.append(random.randint(0,1))
299
return seq
300
\end{lstlisting}
301
302
303
Using these three functions, it is trivial to create an interface that can be used to represent Cellular Automata in Python.\\
304
\indent For example, we can use this to run 10 Evolutions of Rule 30 on a random sequence of length 25:\\
305
\begin{lstlisting}[language=Python]
306
seq = get_random_seq(25)
307
rule_dict = get_rule_dict(30,3)
308
print("Initial Sequence: {}".format(seq))
309
for i in range(10):
310
seq = apply_mapping(seq, rule_dict, 3)
311
print("Evolution {}: {}".format(i+1, seq))
312
\end{lstlisting}
313
314
315
316
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
317
318
\section{Finite Automata Representation}
319
Typically, we think of Cellular Automata and the local rules in terms of a mathematical function or mapping. However, it is sometimes more useful to view Cellular Automata rules in a more abstract manner. We can think of the local transition rule of the cellular automata as a function that takes the current state of a cell and its neighboring cells and returns the next state of the central cell. Using this definition, it is easier view our local rules in terms of finite automata.\\\\
320
Finite Automata (FA) are a computational model which consists of a finite set of states, input states, final states, and a transition function which maps an input state to a new state. The computational model is typically represented as a directed graph. There are 2 classes of finite automata relevant to our work: Non-Deterministic Finite Automata (NFA) and Deterministic Finite Automata (DFA). DFAs are a subset of NFAs. DFAs have a special restriction where they can only have 1 transition per state and must end in a final state. Typically, FA are defined by a tuple $(\Sigma , Q , q_{0} , F , \delta )$:
321
\begin{itemize}
322
\item Alphabet, typically denoted by $\Sigma$
323
\begin{itemize}
324
\item For example, a binary alphabet is $\Sigma = \{0,1\}$
325
\end{itemize}
326
\item Set of states, typically denoted by $Q$
327
\item Starting state, typically denoted by $q_{0}$
328
\begin{itemize}
329
\item $q_{0} \in Q$
330
\end{itemize}
331
\item Final States, denoted by $F$
332
\begin{itemize}
333
\item $F \subset Q$
334
\end{itemize}
335
\item The transition function, denoted by $\delta$\
336
\begin{itemize}
337
\item $\delta : $ $Q$ x $\Sigma \rightarrow Q$
338
\end{itemize}
339
\end{itemize}
340
\\
341
342
In his paper "Computation Theory of Cellular Automata", Stephen Wolfram discusses how to go from local mappings for cellular automata to NFAs and DFAs. He begins by demonstrating for rule 76 which has the following mappings:\\
343
344
111$\rightarrow$0, 110$\rightarrow$1, 101$\rightarrow$0, 100$\rightarrow$0 011$\rightarrow$1, 010$\rightarrow$1, 001$\rightarrow$0, 000$\rightarrow$0.\\
345
346
The first NFA here is the most basic build of an NFA for rule 76. Each node is a pair of possible values. Each transition turns this pair of values into a 3-tuple of values which we can then use the local mapping to get to the next state and generate part of the output. For example, lets say we want to know what f(01011) is where f is the mapping for rule 76. Since the first two values are 01, we begin in node 01. Our next value of our input is 0, so we take the 010 transition from the 01 node, which outputs a 1 and takes us to the 10 node. The next value of our input is 1 so we will take the 101 transition from 10, which outputs 0 and takes us to the 10 node. Continuing, we will now take the 011 transition from 01, which outputs a 1 and brings us to the 11 node. We are now at the end of our input string. By tracing the NFA, we know f(01011) = 101.\\
347
348
\includegraphics[width = (\textwidth)/2, height = 3cm]{rule76.1.PNG}\\
349
350
One thing to notice about this NFA is that the 00 and 01 nodes only have paths that output a 0 pass through them. Because of this, we are able to reduce our NFA to have less nodes. Here is the NFA with the 00 and 01 nodes combined:\\
351
352
\includegraphics[width = (\textwidth)/2, height = 5cm]{rule76.2.PNG}\\
353
354
To get the DFA of rule 76, we begin from a start node {00, 01, 10, 11}. From this node, we can get to {00, 01, 11} by a 0-arc transition. A 0-arc transition, is a transition that outputs a 0. For example, 00 to 00. From {00, 01, 10, 11}, we can get to {10, 11} by a 1-arc transition. We repeat this process for all resulting sets until we get no new sets. ie. we will now do this for {00, 01, 11} and {10, 11}. Below is Wolframs full construction of states and transitions for the DFA for rule 76. He defines the 00 node as $u_0$, the 01 node as $u_1$, the 10 node as $u_2$, and the 11 node as $u_3$.\\
355
356
\includegraphics[width = (\textwidth)/2, height = 3cm]{76 dfa const.PNG}\\
357
358
Notice that {$u_2$}$\rightarrow$1$\emptyset$. This means from the {$u_2$} state there will be no 1 transition. Here is the DFA for rule 76.\\
359
360
\includegraphics[width = (\textwidth)/2, height = 5cm]{rule76.3.PNG}\\
361
362
\subsection{The Construction Algorithm}
363
One paper that we inspected was "Decision Procedures for Surjectivity and Injectivity of Parallel Maps for Tessellation Structures" by S. Amoroso and Y. N. Patt. In this paper the authors build a decision procedure to determine surjectivity for one-dimension cellular automata. They call this procedure the Construction Algorithm.\\
364
\indent For our purposes, we will begin by selecting an element b $\in$ $\Sigma_{2}$ and let the node at level 0 be the set of all 3-tuples $a_1 a_2 a_3$ such that the local rule $f(a_1 a_2 a_3)$ = b. For each node N at level i, i $\geq$ 0, construct for each a $\in$, a node $N_{a}$ at level i + 1 as follows. If $a_1 a_2 a_3$ is an element in the set corresponding to N, the set corresponding to $N_{a}$ will consist of exactly those 3-tuples $a_2 a_3 d$, d $\in$ $\Sigma_{2}$, for which $f(a_2 a_3 d)$ = a. A directed arc labeled a is then drawn from node N to node $N_{a}$. If for each $a_1 a_2 a_3$ in N there are no such elements d, then this node $N_{a}$ is not included in the graph and we say that node N is terminal in the graph. We will also say that symbol a made N terminal. If during the construction process a number of nodes appear at the same or different levels, all associated with the same subset of $\Sigma_{2}^3$, then each will be a distinct node in
365
the graph but only one, arbitrarily chosen, will be extended, i.e., only one will have directed arcs leaving it going to nodes at the next higher level. The equal set nodes not exended will be called frontier nodes. This construction process must eventually
366
terminate since there is a bound on the number of possible subsets of $\Sigma_{2}^3$.\\
367
\indent What this algorithm does is it traces through several iterations of the local rule being applied. Noting where there are terminal nodes is important because this is where we can't generate a specific output, thus the cellular automata is non-surjective. Noting where we have frontier nodes is also important because this identifies where the cellular automata is cyclic. If we can cycle back to every node without running into any terminal nodes, then we can generate all possible outputs, which would confirm surjectivity.\\
368
\indent When implementing this algorithm on rule 116 for example, we get a terminal node in level 2 of our graph, proving rule 116 is non-surjective. In the case of this terminal node, its significance is that it shows that rule 116 cannot generate the sequence 010, hence 116 is non-surjective. Here is a trace of the algorithm.\\
369
370
\includegraphics[width = (\textwidth)/2, height = 5cm]{rule116 contruction algo.png}\\
371
372
373
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
374
375
\section{Determining Surjectivity}
376
377
Although surjectivity can be determined through the Construction Algorithm, for our purposes we utilized an alternative solution implemented in Mathematica paclet, \textbf{KlausSutner/Automata}. The algorithm they implemented to determine surjectivity is more efficient and can also determine whether a CA is open and injective. The \textbf{Automata} paclet also provides many other useful functions and algorithms that were useful for our purposes.\\
378
379
\subsection{Getting Started with Automata}
380
Using \textbf{Automata}, it is extremely easy to represent Cellular Automata:
381
382
For Elementary Cellular Automata, you can simply give the rule number (base 10) to the ECA function:
383
\begin{lstlisting}[language=Mathematica]
384
c = ECA[90]
385
\end{lstlisting}
386
387
For general Cellular Automata, you can simply pass the span, size of the alphabet, and rule number (base 10) to the CA function. In fact, ECA is simply just a shortcut for span 3, alphabet $\Sigma_{2}$ CA.
388
\begin{lstlisting}[language=Mathematica]
389
c = CA[4, 2, 3612]
390
391
CA[3, 2, 30] == ECA [30]
392
\end{lstlisting}
393
394
\subsection{ClassifyCA}
395
396
\textbf{Automata} provides an extremely useful function called \textit{ClassifyCA} where if given a cellular automata, it will return an enum indicating the one of 3 possibilities:
397
\begin{center}
398
\begin{minipage}{.5\textwidth}
399
\begin{itemize}
400
\item 0 $\rightarrow$ No Special Properties
401
\item 1 $\rightarrow$ Surjective
402
\item 2 $\rightarrow$ Open
403
\item 3 $\rightarrow$ Injective
404
\end{itemize}
405
\end{minipage}
406
\end{center}
407
408
It should be noted that if a CA is injective, it is also open and surjective and if a CA is open, then it is also surjective.\\
409
410
Before we can analyze how ClassifyCA works, we must first introduce the concepts of Strongly Connected Graphs, Components, and Condensation Graphs [6].\\
411
412
\indent \textbf{Strongly Connected Graphs} are defined as graphs in which for all verticies, there exists a path which connects them to every other vertex. It can be determined if a graph is strongly connected in $O(V+E)$ (Linear) time.\\
413
414
\indent \textbf{Strongly Connected Components} are the partitions of a graph which are themselves strongly connected. \textbf{Trivial} Strongly Connected Components consist of a single vertex which is not connected to itself with an edge. Otherwise, the strongly connected component is \textbf{Non-trivial}.
415
416
\includegraphics[width = (\textwidth)/2, height = 5cm]{strongly connected components.png}\\
417
418
\indent The \textbf{Condensation Graph} or \textbf{Condensation} of a graph G is a directed, acyclic graph where each vertex represents a set of strongly connected components in G.
419
Note the condensation graph can only be acylic if it contains no strongly connected components with more than 1 vertex.\\
420
421
422
\textit{ClassifyCA} implements a similar algorithm to the Construction Algorithm in the sense that it turns the Cellular Automata into a Finite State Automata and performs some analysis on the new graph. However, instead of searching for frontier/terminal nodes, \textit{ClassifyCA} checks the properties of the condensation graph of the transition system graph of the Finite State Automata representaton of the Cellular Automata.\\
423
\indent Particularly, \textit{ClassifyCA} checks to see if the number of strongly connected components where the state is able to get back to itself is equal to the number of states. If it is, then the cellular automata is surjective.\\
424
Additionally, it should be noted that if the number of non-trivial strongly connected components is 1, then the cellular automata is injective. There are other criteria used to determine whether the Cellular Automata is open, but those are beyond the scope of this paper and should be abstracted.\\
425
426
Here is the source code for \textit{ClassifyCA}\\
427
\begin{lstlisting}[language=Mathematica]
428
ClassifyCA[ca_CA,opts:OptionsPattern[]]:=
429
Module[{n,T,G,scc,ntscc,sccind,ed,H,HH,diag,res},
430
If[ !BalancedQCA[ca], Return[0] ];
431
n = AlphabetCountCA[ca]^(WidthCA[ca]-1);
432
T = TransitionSystem@ToSemiautomatonCA[ca];
433
G = TransitionSystemGraph[ProductTransitionSystem[T,StateType->"Shallow"]];
434
{scc,ntscc,sccind} = StronglyConnectedComponents[G];
435
{H,scc,ntscc} = Most@CondensationGraph[G,Full->True,Type->"Shallow"];
436
diag = First@Select[scc,MemberQ[#,{1,1}]&];
437
HH = Subgraph[H,Intersection[
438
FlattenOne[VertexOutComponent[H,#]& /@ ntscc],
439
FlattenOne[VertexOutComponent[ReverseGraph@H,#]& /@ ntscc]
440
]];
441
442
res = Which[
443
Length[diag] != n, 0,
444
Length[ntscc]==1, 3,
445
VertexDegree[HH,diag]==0, 2,
446
True, 1 ];
447
If[ OptionValue[Full], Sow[{res,H,HH,scc,ntscc}] ];
448
res
449
];
450
\end{lstlisting}
451
452
453
\subsection{Application}
454
We can utilize the \textit{ClassifyCA} and the Table function to be able to apply and record which CA rules are surjective. For example, this code finds all of the surjective CA of width 4 between Rule 0 and Rule 10,000.\\
455
\begin{lstlisting}[language=Mathematica]
456
Cases[Table[{r, ClassifyCA[CA[4,2,r]]},{r, 0, 10000}],{x_,y_} /; $y>0$]
457
\end{lstlisting}
458
459
Another interesting application that we can use is given a local tabular rule in polynomial form, we can determine what CA is associated with this function and then determine if it is surjective. For example, this code snippet determines whether the CA associated with the function $f(x_{0},x_{1},x_{2},x_{3},x_{4},x_{5}) = (x_{0} + x_{3} + x_{2}*x_{5} (\mod 2)$ is surjective is:
460
\begin{lstlisting}[language=Mathematica]
461
c = ConvertToCA[{a_,b_,c_,d_,e_,f_}:->Mod[a+d+c*f,2],6,2,Type->Rule]
462
ClassifyCA[c]
463
\end{lstlisting}
464
465
466
467
468
469
470
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
471
472
\section{FDense}
473
Bryant Lee created three programs that were used to study one-dimensional CA. The first was FDense which is an algorithm used to determine (given a cellular automata $\emph{f}$, an integer N $\ge$ 2, a positive integer m, and a finite set $\emph{K}$ of positive integer) whether the set $Per(\emph{f}) \cap P_k(S_N)$ is m-dense. The limitations on his program, with N=2, was m = 13 and k = 27 since the algorithm demanded a lot of memory space. For this reason, their data set was restricted entirely to the case of N = 2 symbols. Bryant created his program in 2006 using c++ which can no longer be compiled using the current version of g++. Therefore, to recreate his program, we created a pseudo-code for FDense.\\
474
475
\begin{lstlisting}[language=Python]
476
pseudo-code:
477
Define a function FDense that takes as input a c.a. f,
478
an integer N, a positive integer m, and a set of
479
positive integers K.
480
For each value of k in K:
481
Compute the set Per(f) /\ Pk(SN) of jointly
482
periodic points of f with period k.
483
If this set is empty, f is not periodic with period k.
484
Otherwise, for each word w of length m on the
485
alphabet A:
486
Check whether there exists a point x in
487
$Per(f) /\ Pk(SN)$ such that w appears as a
488
substring of x.
489
If no such point x exists, f is not m-dense at k.
490
If all words of length m on the alphabet A appear as
491
substrings in some point of $Per(f) /\ Pk(SN)$, f is
492
m-dense at k.
493
\end{lstlisting}
494
495
496
To test our program, we are first going to create the program for span 4 cellular automata.
497
The way we are going to implement the code is to make it so that every word of length m is periodic under the shift k where k $\ge$ m. Then, using the tabular rules defined in Table 1 of [1], we are going to see if the words are also periodic under the c.a. If the words are periodic under c.a the, by defintion, they are jointly periodic points. If every word of length m exists in a sequence in the set $Per(f) \cap Pk(SN)$ is jointly periodic, then the c.a. map is m dense.
498
499
We first generates all words of length m which gives a total of $2^m$. In order to make the words periodic for k $\gt$ m, we generate all words of length (k-m) which gives a total of $2^{k-m}$. Then we concatenated all words of length (k-m) to every word of length m which gives us a total of $2^k$ words.
500
501
502
Similar to [1], we will also use the surjective c.a. of span 4 and span 5 from [13]. The first table is from [1, Table 1] which contains 32 span 4 surjective c.a. The second table from [1, Table 2] contains the 26 span 5 surjective maps. We will compare the results of our programs to the results of [1, Table 3]. Our source code below is implemented in C.
503
504
505
\begin{lstlisting}[language=Python]
506
#include <stdio.h>
507
#include <stdlib.h>
508
#include <math.h>
509
#include <string.h>
510
511
#define N 2
512
513
typedef struct Rule {
514
int key;
515
int value;
516
} Rule;
517
518
typedef struct StringArray {
519
char **strings;
520
int size;
521
} StringArray;
522
523
Rule rule[16];
524
525
void createHashMap(const char *tabularRule, int k) {
526
int n = (int) pow(2, k);
527
528
for (int i = 0; i < n; i++) {
529
rule[i].key = i;
530
rule[i].value = tabularRule[i] - '0';
531
}
532
}
533
534
void generateWordsHelper(const char *prefix, int length, StringArray *words) {
535
if (strlen(prefix) == length) {
536
words->strings[words->size] = strdup(prefix);
537
words->size++;
538
} else {
539
for (int i = 0; i < N; i++) {
540
char newPrefix[strlen(prefix) + 2];
541
strcpy(newPrefix, prefix);
542
newPrefix[strlen(prefix)] = '0' + i;
543
newPrefix[strlen(prefix) + 1] = '\0';
544
generateWordsHelper(newPrefix, length, words);
545
}
546
}
547
}
548
549
StringArray generateWords(int length) {
550
int max_size = (int) pow(N, length);
551
StringArray words;
552
words.strings = (char **) malloc(max_size * sizeof(char *));
553
words.size = 0;
554
generateWordsHelper("", length, &words);
555
return words;
556
}
557
558
char *applyRule(const char *word, int span) {
559
int key;
560
char *newWord = (char *) malloc((strlen(word) + 1) * sizeof(char));
561
newWord[strlen(word)] = '\0';
562
563
for (int i = 0; i < strlen(word); i++) {
564
char pattern[span + 1];
565
pattern[span] = '\0';
566
567
for (int j = 0; j < span; j++) {
568
pattern[j] = word[(i + j) % strlen(word)];
569
}
570
571
key = (int) strtol(pattern, NULL, 2);
572
573
for (int j = 0; j < 16; j++) {
574
if (rule[j].key == key) {
575
newWord[i] = '0' + rule[j].value;
576
break;
577
}
578
}
579
}
580
581
return newWord;
582
}
583
584
int main() {
585
int k = 20;
586
int m = 10;
587
int span = 4;
588
589
StringArray originalWords = generateWords(m);
590
StringArray wordsWithKperiod = generateWords(k - m);
591
StringArray allWords;
592
allWords.strings = (char **) malloc(originalWords.size * wordsWithKperiod.size * sizeof(char *));
593
allWords.size = 0;
594
595
for (int i = 0; i < originalWords.size; i++) {
596
for (int j = 0; j < wordsWithKperiod.size; j++) {
597
char *newWord = (char *) malloc((strlen(originalWords.strings[i]) + strlen(wordsWithKperiod.strings[j]) + 1) *sizeof(char));
598
strcpy(newWord, originalWords.strings[i]);
599
strcat(newWord, wordsWithKperiod.strings[j]);
600
allWords.strings[allWords.size] = newWord;
601
allWords.size++;
602
}
603
}
604
605
int true = 0;
606
for (int i = 0; i < allWords.size; i++){
607
char *word = allWords.strings[i];
608
char *newWord = applyRule(word, span);
609
610
while (strcmp(newWord, word) != 0) {
611
char *temp = newWord;
612
newWord = applyRule(newWord, span);
613
free(temp);
614
}
615
true += 1;
616
free(newWord);
617
}
618
619
for (int i = 0; i < originalWords.size; i++) {
620
free(originalWords.strings[i]);
621
}
622
for (int i = 0; i < wordsWithKperiod.size; i++) {
623
free(wordsWithKperiod.strings[i]);
624
}
625
for (int i = 0; i < allWords.size; i++) {
626
free(allWords.strings[i]);
627
}
628
629
free(originalWords.strings);
630
free(wordsWithKperiod.strings);
631
free(allWords.strings);
632
633
printf("\n");
634
return 0;
635
}
636
\end{lstlisting}
637
\subsection{Code analysis}
638
639
\\
640
To analyze the algorithmic complexity of the code, let's break it down into the major functions:\\
641
\textbf{generateWordsHelper:} This is a recursive function that generates all possible binary words of a given length. The complexity is $O(2^L)$, where L is the length of the words generated. This is because each position in the word has 2 possibilities (0 or 1), and there are L positions.\\
642
\textbf{generateWords:} This function is a wrapper for generateWordsHelper and has the same complexity, $O(2^L)$.\\
643
\textbf{applyRule:} This function iterates through each character in a word and applies a rule based on a span. The complexity is $O(S * W)$, where S is the size of the span and W is the length of the word.\\
644
\textbf{main:} Generating originalWords and wordsWithKperiod takes $O(2^m)$ and $O(2^{k-m})$ time complexity, respectively. Creating allWords by concatenating each pair of words from originalWords and wordsWithKperiod takes $O(2^k)$ time complexity, as there are $2^k$ combined words. Applying the rule and comparing words in a while loop takes $O(2^k * S * W)$ time complexity, where S is the span size and W is the length of the words in allWords.\\
645
\indent Overall, the time complexity of the code is $O(2^k * S * W)$. Note that $2^k$ grows exponentially with k, making the algorithm's performance degrade rapidly as k increases. The statement describes a limitation of the algorithm when dealing with large values of k, as it consumes a significant amount of memory. The main reason for this memory consumption is the generation and storage of all possible binary words for a given k. When we generate allWords in the main function, we are essentially creating $2^k$ binary strings. Each string is stored in memory, and as k increases, the number of strings grows exponentially. For instance:
646
k = 23: There are $2^23$ = 8,388,608 binary strings. k = 26: There are $2^26$ = 67,108,864 binary strings.
647
As you can see, the number of binary strings generated grows rapidly with k, leading to high memory consumption. For large values of k, storing all the binary strings in memory may not be possible as k $\rightarrow \infty$, as it can exhaust the available memory resources. Our algorithm seem to face the same limitation that Mike Boyle and Bryant Lee faced. However, we are able to run our program on CoCalc which provides us with memory exclusive to our local machine. Even then, the time that it takes to iterate through every word still takes a very long time when k is larger than 24. \\
648
649
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
650
651
\section{Results}
652
653
\begin{table}[!h]
654
\begin{center}
655
\begin{tabular}{|c | c | c || c | c| c |}
656
\hline
657
Map & 10-dense & 13-dense at & Map & 10-dense & 13-dense \\ [0.3ex]
658
\hline\hline
659
1 & 11,13,15,17 & 13,15,17 & 17 & [] & [] \\
660
\hline
661
2 & 10-20 & 13-21 & 18 & [] & [] \\
662
\hline
663
3 & 18 & 18 & 19 & [] & [] \\
664
\hline
665
4 & [] & [] & 20 & [] & [] \\
666
\hline
667
5 & [] & [] & 21 & [] & [] \\
668
\hline
669
6 & 10-21 & 13-19 & 22 & [] & [] \\
670
\hline
671
7 & 10-18 & 13-18 & 23 & [] & [] \\
672
\hline
673
8 & [] & [] & 24 & [] & [] \\
674
\hline
675
9 & 11,13,15,17,19 & 13,15,17,19 & 25 & [] & [] \\
676
\hline
677
10 & [] & [] & 26 & 11-20 & 13-18 \\
678
\hline
679
11 & [] & [] & 27 & [] & [] \\
680
\hline
681
12 & [] & [] & 28 & [] & [] \\
682
\hline
683
13 & 11,13,15,17 & 13,15 & 29 & [] & [] \\
684
\hline
685
14 & [] & [] & 30 & [] & [] \\
686
\hline
687
15 & [] & [] & 31 & [] & [] \\
688
\hline
689
16 & 10-18 & 13-18 & 32 & [] & [] \\
690
\hline
691
\end{tabular}
692
\caption{\label{demo-table} This are the results of our FDENSE program. Using the 32 span 4 onto maps of [1, Table 1], we used our program to see if the maps are 10-dense and 13-dense for values of 24 $\ge$ k $\ge$ m. [] means that we were not able to get any conclusive result for that map so far/not tested yet.}
693
\end{center}
694
\end{table}
695
696
\begin{table}[!h]
697
\begin{tabular}{|c|c|c|c|}
698
\hline
699
Map & Tabular Rule & Map & Tabular Rule \\ [0.4ex]
700
\hline\hline
701
1 & 0000 1111 0010 1101 & 17 & 0011 1001 1100 1100 \\
702
\hline
703
2 & 0011 1001 1100 1100 & 18 & 0011 1010 0011 1100 \\
704
\hline
705
3 & 0001 1100 0011 1110 & 19 & 0001 1100 0011 1110 \\
706
\hline
707
4 & 0001 1110 0101 1010 & 20 & 0011 1100 0101 0011 \\
708
\hline
709
5 & 0010 1001 0110 1101 & 21 & 0011 1100 0101 1100 \\
710
\hline
711
6 & 0010 1101 0000 1111 & 22 & 0011 1100 1010 0011 \\
712
\hline
713
7 & 0011 0011 0110 0011 & 23 & 0011 1100 1010 1100 \\
714
\hline
715
8 & 0011 0011 0110 1100 & 24 & 0011 1110 0001 1100\\
716
\hline
717
9 & 0011 0011 1001 0011 & 25 & 0100 1001 0110 1011 \\
718
\hline
719
10 & 0011 0011 1001 1100 & 26 & 0100 1011 0000 1111 \\
720
\hline
721
11 & 0011 0101 0011 1100 & 27 & 0101 1010 0001 1110 \\
722
\hline
723
12 & 0011 0101 1100 0011 & 28 & 0101 1010 0111 1000 \\
724
\hline
725
13 & 0011 0110 0011 0011 & 29 & 0110 1011 0100 1001 \\
726
\hline
727
14 & 0011 0110 1100 1100 & 30 & 0110 1101 0010 1001 \\
728
\hline
729
15 & 0011 1000 0111 1100 & 31 & 0111 1000 0101 1010\\
730
\hline
731
16 & 0011 1001 0011 0011 & 32 & 0111 1100 0011 1000 \\
732
\hline
733
\end{tabular}
734
\caption{\label{demo-table} This is a table of the list of span 4 surjective cellular automata that were used in [1]. We wanted to see if our program is correct so we used the same set of inputs and compared our output to [1, Table 3]. The maps described in this table is taken from [7, table I].}
735
\end{table}
736
737
\pagebreak
738
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
739
740
\section{Conclusion}
741
Mike Boyle proposed that every span 4 surjective cellular automata is at least 13 dense [1]. While we were replicating his experiment for the maps described in table 1, our results seem to match his proposal. We wanted to extend his proposition to span 6 surjective cellular automata. However, we were not able to quantify his proposal for majority of the surjective maps that we found because our FDense program took too long to run and it is inconclusive for big values of m and k. \\
742
\indent
743
744
\section{Acknowledgement}
745
We thank you Professor Rodrigo Trevino and the Lab of Experimental Mathematics for giving us the opportunity to work with graduate student, Chi-Hao. We were able to learn a lot about computational theory and also had the opportunity to present our work to our peers.
746
747
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
748
% Begin Appendix
749
\appendix
750
\section{List of Surjective Span 6 CA Rules}
751
\begin{lstlisting}[language=Python]
752
11913610175290432170,
753
12273810184465984170,
754
10778685752149174890,
755
9838244740979984520,
756
9833478358074685320,
757
9765923332887705720,
758
13527612318716019780,
759
15987178194065302050,
760
12297829015969158570,
761
6149008516228754090,
762
8608480568017455240,
763
9761684715563616120,
764
11067990149230388838,
765
12273810549538182570,
766
11936045731524794970,
767
6531808643310593370,
768
18446744069414584320,
769
18446462603027742720,
770
18374966859414961920,
771
17361641481138401520,
772
14757395258967641292,
773
12297829382473034410,
774
12297735558912453290,
775
12273904009452628650,
776
11913616039262988970,
777
10760694534656141994,
778
12273810549532633770,
779
12273810550964267690,
780
12297735922558610090,
781
12297735923984673450,
782
11937535914725255850,
783
11914929955658181290,
784
11053616526923573930,
785
11072831592130587306,
786
11915017572991019690,
787
12273903644380408490,
788
12297829381046949290,
789
11915017571643578970,
790
11053691000511161958,
791
11937535913383058090,
792
11072831590989719210,
793
10766582143467022954,
794
11936128518366866090,
795
11936045731440601770,
796
11915017571564934570,
797
12297829381125593690,
798
10851025924903036518,
799
11936045732872235690,
800
10851025926048361130,
801
12297741076598008490,
802
10850959696507349674,
803
12275311039396600490,
804
10834137168606815914,
805
11140386616255343210,
806
11068046444512062122,
807
11067990148944079530,
808
11053691000230401450,
809
10851025924700920410,
810
12297829381327709798,
811
11067990150375713450,
812
11053691001656486570,
813
11053634925137406634,
814
10850972941984377514,
815
12297754322479262378,
816
10837514919665621674,
817
12278688790858065578,
818
12008468690110147178,
819
6149102339789291520,
820
6196766168842283520,
821
6872316420712079520,
822
12297923204601937920,
823
12273717456122085120,
824
11935962946030203120,
825
11067933855094066380,
826
12249885541595589120,
827
12321755119128433920,
828
11893906626277563120,
829
11039335557662271180,
830
18398892593240473770,
831
18446556422293465770,
832
11574355905568809120,
833
11556131500342665120,
834
12659530245063331920,
835
10634005406540393580,
836
17723342341370677770,
837
18446593951717689480
838
839
\end{lstlisting}
840
841
%%%%%%%%%%%%% BIBLIOGRAPHY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
842
843
\begin{thebibliography}{9}
844
\bibitem{journal}
845
M. Boyle and B. Lee, Jointly periodic points in cellular automata: computer explorations and conjectures,
846
Experimental Mathematics 16 (2007), no. 3, 293–302
847
848
\bibitem{journal}
849
M. Boyle and B. Kitchens, Periodic points for onto cellular automata, Indagationes Mathematicae 10
850
(1999), no. 4, 483–493.
851
852
\bibitem{journal}
853
“Elementary Cellular Automaton. From Wolfram MathWorld, https://mathworld.wolfram.com/ElementaryCellularAutomaton.html.
854
855
\bibitem{journal}
856
"Computation Theory of Cellular Automata" by Stephen Wolfram,
857
https://content.wolfram.com/uploads/sites/34/2020/07/computation-theory-cellular-automata.pdf
858
859
\bibitem{journal}
860
"Decision Procedures for Surjectivity and Injectivity
861
of Parallel Mapsfor Tessellation Structures" by S. Amoroso, Y.N. Patt,https://www.sciencedirect.com/science/article/pii/S0022000072800138
862
863
\bibitem{journal}
864
J. Barnat, P. Bauch, L. Brim and M. Ceška, "Computing Strongly Connected Components in Parallel on CUDA," 2011 IEEE International Parallel & Distributed Processing Symposium, Anchorage, AK, USA, 2011, pp. 544-555, doi: 10.1109/IPDPS.2011.59
865
\bibitem{journal}
866
G. A. Hedlund, K. I. Appel and L. R. Welch, All onto functions of span less than
867
or equal to five, IDA-CRD Working Paper (July, 1963), 73 pages.
868
869
870
871
\end{thebibliography}
872
873
874
875
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
877
%% To omit final list of figures and tables, use the class option [nolists]
878
879
\end{document}
880
881