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.
License: MIT
ubuntu2004
% !TEX encoding = UTF-8 Unicode1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2%%3%% This file is asmejour-template.tex, a template to format papers in the style of ASME journal papers.4%%5%% This file is version 1.18 dated 2022/01/106%%7%% Author: John H. Lienhard V8%% Department of Mechanical Engineering9%% Massachusetts Institute of Technology10%% Cambridge, MA 02139-4307 USA11%%12%% Class options include:13%%14%% * Option to color the vertical bar in the title block [barcolor = colorname]15%% * where colorname is any name def'd by xcolor package; omit barcolor option to get black16%%17%% * Option to omit the list of figures and list of tables at the end [nolists]18%%19%% * Math options from M. Sharpe's newtxmath package: upright integrals [upint];20%% * [varvw] for a v and w that are better distinguished from Greek nu; [subscriptcorrection]21%% * to fine-tune the placement of math subscripts; and also additional options such as22%% * [smallerops, varg, slantedGreek, frenchmath, varbb, cmbraces]. Version 1.6 or higher23%% * is recommended.24%%25%% * Option to include line numbers [lineno]. The lineno package does not number tables,26%% * footnotes, captions, etc. You must run *twice* for proper placement of the numbers.27%% * This option will disable balancing of the column heights on final page.28%%29%% * Option to balance column heights on final page [balance]. This option sometimes30%% * misbehaves, so use it with an awareness that it can create unexpected problems.31%% * This option is not compatible with line numbering.32%%33%% * Options for copyright notices:34%% * Omit the ASME copyright from the footer [nocopyright]35%% * Copyright footnote if all authors are government employees [govt]36%% * Copyright footnote if some authors are government employees [govtsome]37%% * Copyright footnote for government contractors [contractor]38%%39%% * Option to omit all ASME text fields from the footer [nofoot].40%%41%% * Options for PDF/A compliance. [pdf-a] will produce PDF/A-3u compliance with sRGB OutputIntent.42%% * [pdfapart= 1 or 2 or 3] and [pdfaconformance= b or u] can enable levels 1b, 2b, 2u, and 3b.43%% *44%% * The most recent versions of LaTeX (2021 and later) are moving toward integrated support for pdf-a,45%% * through \DeclareDocumentMetadata{..}. The asmeconf class supports these new features, which can46%% * replace the aforementioned class options. (An up-to-date LaTeX installation is required.)47%%48%% * Many options for calligraphic, script, and fraktur fonts from the mathalfa package; the49%% * example value used is: mathalfa=cal=euler (use Euler font for \mathcal)50%% * some other options for cal are: dutchcal, zapfc, cm (default), boondox,...51%% * frak (fraktur), bb (blackboard bold), scr (script) may also be controlled.52%%53%% * An option to use newtxtext's superiors font for footnotes [nodefaultsups] and an option54%% * for slightly larger small capitals [largesc]55%%56%% * Options for typewriter font57%% * [hyphenate] allow hyphenation (normally suppressed because for typewriter font is often used for code)58%% * [var0] replace default slashed zero by unslashed zero59%% * [mono] force interword separation to monospacing60%%61%% * Options for the babel package to support passages in other languages (such as a translated62%% * abstract in an appendix), e.g. [french]. The main language will default to English63%% * unless a different main language is selected, e.g. [main=spanish]. See Appendix C for details.64%%65%% For details of the newtx and mathalfa packages, refer to their documentation (available at CTAN: http://ctan.org).66%%67%% The use of commands defined or modified by the asmejour class is illustrated below. In particular, some care68%% is needed when using complicated math and macros in section headings, to avoid problems with pdf bookmarks,69%% as facilitated by the optional argument of \section (also illustrated below).70%%71%=========================================================72%%73%% LICENSE:74%%75%% Copyright (c) 2022 John H. Lienhard76%%77%% Offered under the MIT license: https://ctan.org/license/mit78%%79%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8081%% Class options are described above.82\documentclass[subscriptcorrection,upint,varvw,barcolor=Black,mathalfa=cal=euler,balance,hyphenate,english,pdf-a,nofoot, nolists]{asmejour} %838485%%%% pdf metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8687\hypersetup{%88pdfauthor={Nate Schnitzer, Ethan Ewing, Hung Vu} % <=== change to YOUR name[s]!89pdftitle={LEMMAigma Ligma}, % <=== change to YOUR pdf file title90pdfkeywords={Cellular Automata, Surjectivity, Density, NFAs},% <=== change to YOUR pdf keywords91pdfsubject = {Surjective Span 6 CA}, % <=== change to YOUR subject92% pdfurl={https://ctan.org/pkg/asmejour},% may delete93}9495%%%% Journal name and optional copyright year %%%%%%%%%%%%%%9697%% Omit "Journal of". If Journal Name is quite long, use \\ to insert a line break98\JourName{Experimental Mathematics}%<=== change to the name of your journal99100%% The default copyright year is the current year101%% \PaperYear{2022} sets 2022; and \PaperYear{} omits the year entirely.102103%%%% end of preamble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%104105\usepackage{listings}106\usepackage{xcolor}107\usepackage{hyperref}108\usepackage{graphicx}109\usepackage{listings}110\usepackage[inkscapeformat=png]{svg}111\usepackage{svg}112\usepackage{array}113\usepackage{caption}114115\definecolor{codegreen}{rgb}{0,0.6,0}116\definecolor{codegray}{rgb}{0.5,0.5,0.5}117\definecolor{codepurple}{rgb}{0.58,0,0.82}118\definecolor{backcolour}{rgb}{0.95,0.95,0.92}119120\lstdefinestyle{mystyle}{121backgroundcolor=\color{backcolour},122commentstyle=\color{codegreen},123keywordstyle=\color{magenta},124numberstyle=\tiny\color{codegray},125stringstyle=\color{codepurple},126basicstyle=\ttfamily\footnotesize,127breakatwhitespace=false,128breaklines=true,129captionpos=b,130keepspaces=true,131numbers=left,132numbersep=5pt,133showspaces=false,134showstringspaces=false,135showtabs=false,136tabsize=2137}138\lstset{style=mystyle}139140\begin{document}141142% Change to your author name[s] and addresses, in the desired order of authors.143% First name, middle initial, last name144% Use title case (upper and lower case letters)145% Note usage below for corresponding author.146147\SetAuthorBlock{Nate Schnitzer}{ LEMMA,\\148University of Maryland,\\149College Park, Maryland,\\150nschnitz@terpmail.umd.edu}151152% To label one or more corresponding authors put "Name\CorrespondingAuthor". No space after "Name".153% An optional argument can be added if email is not in address block as154% "Name\CorrespondingAuthor{[email protected]}"155% Can also include multiple emails and use the command more than once for multiple corresponding authors,156% "Name\CorrespondingAuthor{[email protected], [email protected]}"157158\SetAuthorBlock{Ethan Ewing}{ LEMMA,\\159University of Maryland, \\160College Park, Maryland \\161eewing1@terpmail.umd.edu162}163164\SetAuthorBlock{Hung Anh Vu}{ LEMMA,\\165University of Maryland,\\166College Park, Maryland,\\167hvu1@terpmail.umd.edu}168169%%% Change to your paper title. Can insert line breaks if you wish (otherwise breaks are selected automatically).170\title{Surjective One Dimensional \\ Span 6 Cellular Automata}171172173%% Abstract should be no more than 250 words174\begin{abstract}175Using 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}$.176\end{abstract}177178179\date{Version \versionno, \today}%% You can modify this information as desired.180%% Putting \date{} will suppress any date.181%% If this command is omitted, date defaults to \today182%% This command must come somewhere before \maketitle183184\maketitle %% This command creates the author/title/abstract block. Essential!185186%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%187%%%%%%%%%%%%%%%%%%%%% End of fields to be completed. Now write! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%188189\section{Introduction}190In 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.\\191192\textbf{Conjecture 1.1} {For every surjective one-dimensional cellular automaton, the jointly periodic points are dense.}\\193194Through 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.\\195\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 define196$$\mbox{\large V(f, $S_N$) = $lim_k$ sup $V_k$(f, $S_N$ ) } $$197This 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$.198199200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%201202\section{Definitions}203Cellular 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:\\204205\begin{enumerate}206\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.207\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.208\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.209\end{enumerate}\\210211\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]}\\212213\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]}\\214215One 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.\\216\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]\\217\indent In simpler terms, an $x \in \Sigma_N$ is spatially periodic if $x =218\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)$.219220\subsection{Density}221One 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$,222223\begin{center}224$d(x,y) = \sum_{i}^{\infty} 2^{-i} * |x_i - y_i|$225\end{center}226227Since $\Sigma_2$ is the set of doubly infinite sequences, to apply $d(x, y)$, it is necessary to choose a starting index.228229\textbf{Example: } Prove the set spatially periodic points are dense in $\Sigma_2$.230231Proof: 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$.232233A 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.234\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$.235236\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].237238\begin{lstlisting}[language=Python]239Suppose 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].2402410 1 2 3 4 5 6 7242x[0] 0 0 0 0 1 1 1 1243x[1] 0 0 1 1 0 0 1 1244x[2] 0 1 0 1 0 1 0 1245f 0 0 0 1 1 1 1 0246247Then the tabular rule is "0001 1110".248249\end{lstlisting}250251%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%252253\section{Simple CA Examples}254255\subsection{Elementary CA}256Elementary 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.\\257258\includesvg[width=3.2in]{ElementaryCA30Rules_750.svg}\\259260261This 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.\\262263\subsection{Python Implementation}264One 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.\\265\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.\\266\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:267\begin{lstlisting}[language=Python]268import itertools269270def get_rule_dict(n: int, width: int):271# Get the list representing the rule num272# Converts n to binary string of length 2^3 and then pulls it back into273# int list274vals = [int(x) for x in '{0:0{k}b}'.format(n, k=2**width)]275276# Create a dictionary mapping the possible length width binary sequences to the rule and returns it277return dict((zip(itertools.product([1,0], repeat=width), vals)))278\end{lstlisting}279280Now 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.\\281\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.282283\begin{lstlisting}[language=Python]284def apply_mapping(line, rules, width):285new_line = []286for i in range(0, len(line) - (width - 1)):287window = tuple(line[i:i+width])288new_line.append(rules[window])289return tuple(new_line)290\end{lstlisting}\\291292Additionally, we can create another function to generate a random binary sequence of length n:293\begin{lstlisting}[language=Python]294def get_random_seq(n):295seq = []296for _ in range(n):297seq.append(random.randint(0,1))298return seq299\end{lstlisting}300301302Using these three functions, it is trivial to create an interface that can be used to represent Cellular Automata in Python.\\303\indent For example, we can use this to run 10 Evolutions of Rule 30 on a random sequence of length 25:\\304\begin{lstlisting}[language=Python]305seq = get_random_seq(25)306rule_dict = get_rule_dict(30,3)307print("Initial Sequence: {}".format(seq))308for i in range(10):309seq = apply_mapping(seq, rule_dict, 3)310print("Evolution {}: {}".format(i+1, seq))311\end{lstlisting}312313314315%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%316317\section{Finite Automata Representation}318Typically, 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.\\\\319Finite 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 )$:320\begin{itemize}321\item Alphabet, typically denoted by $\Sigma$322\begin{itemize}323\item For example, a binary alphabet is $\Sigma = \{0,1\}$324\end{itemize}325\item Set of states, typically denoted by $Q$326\item Starting state, typically denoted by $q_{0}$327\begin{itemize}328\item $q_{0} \in Q$329\end{itemize}330\item Final States, denoted by $F$331\begin{itemize}332\item $F \subset Q$333\end{itemize}334\item The transition function, denoted by $\delta$\335\begin{itemize}336\item $\delta : $ $Q$ x $\Sigma \rightarrow Q$337\end{itemize}338\end{itemize}339\\340341In 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:\\342343111$\rightarrow$0, 110$\rightarrow$1, 101$\rightarrow$0, 100$\rightarrow$0 011$\rightarrow$1, 010$\rightarrow$1, 001$\rightarrow$0, 000$\rightarrow$0.\\344345The 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.\\346347\includegraphics[width = (\textwidth)/2, height = 3cm]{rule76.1.PNG}\\348349One 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:\\350351\includegraphics[width = (\textwidth)/2, height = 5cm]{rule76.2.PNG}\\352353To 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$.\\354355\includegraphics[width = (\textwidth)/2, height = 3cm]{76 dfa const.PNG}\\356357Notice 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.\\358359\includegraphics[width = (\textwidth)/2, height = 5cm]{rule76.3.PNG}\\360361\subsection{The Construction Algorithm}362One 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.\\363\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 in364the 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 eventually365terminate since there is a bound on the number of possible subsets of $\Sigma_{2}^3$.\\366\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.\\367\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.\\368369\includegraphics[width = (\textwidth)/2, height = 5cm]{rule116 contruction algo.png}\\370371372%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%373374\section{Determining Surjectivity}375376Although 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.\\377378\subsection{Getting Started with Automata}379Using \textbf{Automata}, it is extremely easy to represent Cellular Automata:380381For Elementary Cellular Automata, you can simply give the rule number (base 10) to the ECA function:382\begin{lstlisting}[language=Mathematica]383c = ECA[90]384\end{lstlisting}385386For 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.387\begin{lstlisting}[language=Mathematica]388c = CA[4, 2, 3612]389390CA[3, 2, 30] == ECA [30]391\end{lstlisting}392393\subsection{ClassifyCA}394395\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:396\begin{center}397\begin{minipage}{.5\textwidth}398\begin{itemize}399\item 0 $\rightarrow$ No Special Properties400\item 1 $\rightarrow$ Surjective401\item 2 $\rightarrow$ Open402\item 3 $\rightarrow$ Injective403\end{itemize}404\end{minipage}405\end{center}406407It 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.\\408409Before we can analyze how ClassifyCA works, we must first introduce the concepts of Strongly Connected Graphs, Components, and Condensation Graphs [6].\\410411\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.\\412413\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}.414415\includegraphics[width = (\textwidth)/2, height = 5cm]{strongly connected components.png}\\416417\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.418Note the condensation graph can only be acylic if it contains no strongly connected components with more than 1 vertex.\\419420421\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.\\422\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.\\423Additionally, 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.\\424425Here is the source code for \textit{ClassifyCA}\\426\begin{lstlisting}[language=Mathematica]427ClassifyCA[ca_CA,opts:OptionsPattern[]]:=428Module[{n,T,G,scc,ntscc,sccind,ed,H,HH,diag,res},429If[ !BalancedQCA[ca], Return[0] ];430n = AlphabetCountCA[ca]^(WidthCA[ca]-1);431T = TransitionSystem@ToSemiautomatonCA[ca];432G = TransitionSystemGraph[ProductTransitionSystem[T,StateType->"Shallow"]];433{scc,ntscc,sccind} = StronglyConnectedComponents[G];434{H,scc,ntscc} = Most@CondensationGraph[G,Full->True,Type->"Shallow"];435diag = First@Select[scc,MemberQ[#,{1,1}]&];436HH = Subgraph[H,Intersection[437FlattenOne[VertexOutComponent[H,#]& /@ ntscc],438FlattenOne[VertexOutComponent[ReverseGraph@H,#]& /@ ntscc]439]];440441res = Which[442Length[diag] != n, 0,443Length[ntscc]==1, 3,444VertexDegree[HH,diag]==0, 2,445True, 1 ];446If[ OptionValue[Full], Sow[{res,H,HH,scc,ntscc}] ];447res448];449\end{lstlisting}450451452\subsection{Application}453We 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.\\454\begin{lstlisting}[language=Mathematica]455Cases[Table[{r, ClassifyCA[CA[4,2,r]]},{r, 0, 10000}],{x_,y_} /; $y>0$]456\end{lstlisting}457458Another 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:459\begin{lstlisting}[language=Mathematica]460c = ConvertToCA[{a_,b_,c_,d_,e_,f_}:->Mod[a+d+c*f,2],6,2,Type->Rule]461ClassifyCA[c]462\end{lstlisting}463464465466467468469%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%470471\section{FDense}472Bryant 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.\\473474\begin{lstlisting}[language=Python]475pseudo-code:476Define a function FDense that takes as input a c.a. f,477an integer N, a positive integer m, and a set of478positive integers K.479For each value of k in K:480Compute the set Per(f) /\ Pk(SN) of jointly481periodic points of f with period k.482If this set is empty, f is not periodic with period k.483Otherwise, for each word w of length m on the484alphabet A:485Check whether there exists a point x in486$Per(f) /\ Pk(SN)$ such that w appears as a487substring of x.488If no such point x exists, f is not m-dense at k.489If all words of length m on the alphabet A appear as490substrings in some point of $Per(f) /\ Pk(SN)$, f is491m-dense at k.492\end{lstlisting}493494495To test our program, we are first going to create the program for span 4 cellular automata.496The 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.497498We 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.499500501Similar 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.502503504\begin{lstlisting}[language=Python]505#include <stdio.h>506#include <stdlib.h>507#include <math.h>508#include <string.h>509510#define N 2511512typedef struct Rule {513int key;514int value;515} Rule;516517typedef struct StringArray {518char **strings;519int size;520} StringArray;521522Rule rule[16];523524void createHashMap(const char *tabularRule, int k) {525int n = (int) pow(2, k);526527for (int i = 0; i < n; i++) {528rule[i].key = i;529rule[i].value = tabularRule[i] - '0';530}531}532533void generateWordsHelper(const char *prefix, int length, StringArray *words) {534if (strlen(prefix) == length) {535words->strings[words->size] = strdup(prefix);536words->size++;537} else {538for (int i = 0; i < N; i++) {539char newPrefix[strlen(prefix) + 2];540strcpy(newPrefix, prefix);541newPrefix[strlen(prefix)] = '0' + i;542newPrefix[strlen(prefix) + 1] = '\0';543generateWordsHelper(newPrefix, length, words);544}545}546}547548StringArray generateWords(int length) {549int max_size = (int) pow(N, length);550StringArray words;551words.strings = (char **) malloc(max_size * sizeof(char *));552words.size = 0;553generateWordsHelper("", length, &words);554return words;555}556557char *applyRule(const char *word, int span) {558int key;559char *newWord = (char *) malloc((strlen(word) + 1) * sizeof(char));560newWord[strlen(word)] = '\0';561562for (int i = 0; i < strlen(word); i++) {563char pattern[span + 1];564pattern[span] = '\0';565566for (int j = 0; j < span; j++) {567pattern[j] = word[(i + j) % strlen(word)];568}569570key = (int) strtol(pattern, NULL, 2);571572for (int j = 0; j < 16; j++) {573if (rule[j].key == key) {574newWord[i] = '0' + rule[j].value;575break;576}577}578}579580return newWord;581}582583int main() {584int k = 20;585int m = 10;586int span = 4;587588StringArray originalWords = generateWords(m);589StringArray wordsWithKperiod = generateWords(k - m);590StringArray allWords;591allWords.strings = (char **) malloc(originalWords.size * wordsWithKperiod.size * sizeof(char *));592allWords.size = 0;593594for (int i = 0; i < originalWords.size; i++) {595for (int j = 0; j < wordsWithKperiod.size; j++) {596char *newWord = (char *) malloc((strlen(originalWords.strings[i]) + strlen(wordsWithKperiod.strings[j]) + 1) *sizeof(char));597strcpy(newWord, originalWords.strings[i]);598strcat(newWord, wordsWithKperiod.strings[j]);599allWords.strings[allWords.size] = newWord;600allWords.size++;601}602}603604int true = 0;605for (int i = 0; i < allWords.size; i++){606char *word = allWords.strings[i];607char *newWord = applyRule(word, span);608609while (strcmp(newWord, word) != 0) {610char *temp = newWord;611newWord = applyRule(newWord, span);612free(temp);613}614true += 1;615free(newWord);616}617618for (int i = 0; i < originalWords.size; i++) {619free(originalWords.strings[i]);620}621for (int i = 0; i < wordsWithKperiod.size; i++) {622free(wordsWithKperiod.strings[i]);623}624for (int i = 0; i < allWords.size; i++) {625free(allWords.strings[i]);626}627628free(originalWords.strings);629free(wordsWithKperiod.strings);630free(allWords.strings);631632printf("\n");633return 0;634}635\end{lstlisting}636\subsection{Code analysis}637638\\639To analyze the algorithmic complexity of the code, let's break it down into the major functions:\\640\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.\\641\textbf{generateWords:} This function is a wrapper for generateWordsHelper and has the same complexity, $O(2^L)$.\\642\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.\\643\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.\\644\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:645k = 23: There are $2^23$ = 8,388,608 binary strings. k = 26: There are $2^26$ = 67,108,864 binary strings.646As 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. \\647648%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%649650\section{Results}651652\begin{table}[!h]653\begin{center}654\begin{tabular}{|c | c | c || c | c| c |}655\hline656Map & 10-dense & 13-dense at & Map & 10-dense & 13-dense \\ [0.3ex]657\hline\hline6581 & 11,13,15,17 & 13,15,17 & 17 & [] & [] \\659\hline6602 & 10-20 & 13-21 & 18 & [] & [] \\661\hline6623 & 18 & 18 & 19 & [] & [] \\663\hline6644 & [] & [] & 20 & [] & [] \\665\hline6665 & [] & [] & 21 & [] & [] \\667\hline6686 & 10-21 & 13-19 & 22 & [] & [] \\669\hline6707 & 10-18 & 13-18 & 23 & [] & [] \\671\hline6728 & [] & [] & 24 & [] & [] \\673\hline6749 & 11,13,15,17,19 & 13,15,17,19 & 25 & [] & [] \\675\hline67610 & [] & [] & 26 & 11-20 & 13-18 \\677\hline67811 & [] & [] & 27 & [] & [] \\679\hline68012 & [] & [] & 28 & [] & [] \\681\hline68213 & 11,13,15,17 & 13,15 & 29 & [] & [] \\683\hline68414 & [] & [] & 30 & [] & [] \\685\hline68615 & [] & [] & 31 & [] & [] \\687\hline68816 & 10-18 & 13-18 & 32 & [] & [] \\689\hline690\end{tabular}691\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.}692\end{center}693\end{table}694695\begin{table}[!h]696\begin{tabular}{|c|c|c|c|}697\hline698Map & Tabular Rule & Map & Tabular Rule \\ [0.4ex]699\hline\hline7001 & 0000 1111 0010 1101 & 17 & 0011 1001 1100 1100 \\701\hline7022 & 0011 1001 1100 1100 & 18 & 0011 1010 0011 1100 \\703\hline7043 & 0001 1100 0011 1110 & 19 & 0001 1100 0011 1110 \\705\hline7064 & 0001 1110 0101 1010 & 20 & 0011 1100 0101 0011 \\707\hline7085 & 0010 1001 0110 1101 & 21 & 0011 1100 0101 1100 \\709\hline7106 & 0010 1101 0000 1111 & 22 & 0011 1100 1010 0011 \\711\hline7127 & 0011 0011 0110 0011 & 23 & 0011 1100 1010 1100 \\713\hline7148 & 0011 0011 0110 1100 & 24 & 0011 1110 0001 1100\\715\hline7169 & 0011 0011 1001 0011 & 25 & 0100 1001 0110 1011 \\717\hline71810 & 0011 0011 1001 1100 & 26 & 0100 1011 0000 1111 \\719\hline72011 & 0011 0101 0011 1100 & 27 & 0101 1010 0001 1110 \\721\hline72212 & 0011 0101 1100 0011 & 28 & 0101 1010 0111 1000 \\723\hline72413 & 0011 0110 0011 0011 & 29 & 0110 1011 0100 1001 \\725\hline72614 & 0011 0110 1100 1100 & 30 & 0110 1101 0010 1001 \\727\hline72815 & 0011 1000 0111 1100 & 31 & 0111 1000 0101 1010\\729\hline73016 & 0011 1001 0011 0011 & 32 & 0111 1100 0011 1000 \\731\hline732\end{tabular}733\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].}734\end{table}735736\pagebreak737%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%738739\section{Conclusion}740Mike 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. \\741\indent742743\section{Acknowledgement}744We 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.745746%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%747% Begin Appendix748\appendix749\section{List of Surjective Span 6 CA Rules}750\begin{lstlisting}[language=Python]75111913610175290432170,75212273810184465984170,75310778685752149174890,7549838244740979984520,7559833478358074685320,7569765923332887705720,75713527612318716019780,75815987178194065302050,75912297829015969158570,7606149008516228754090,7618608480568017455240,7629761684715563616120,76311067990149230388838,76412273810549538182570,76511936045731524794970,7666531808643310593370,76718446744069414584320,76818446462603027742720,76918374966859414961920,77017361641481138401520,77114757395258967641292,77212297829382473034410,77312297735558912453290,77412273904009452628650,77511913616039262988970,77610760694534656141994,77712273810549532633770,77812273810550964267690,77912297735922558610090,78012297735923984673450,78111937535914725255850,78211914929955658181290,78311053616526923573930,78411072831592130587306,78511915017572991019690,78612273903644380408490,78712297829381046949290,78811915017571643578970,78911053691000511161958,79011937535913383058090,79111072831590989719210,79210766582143467022954,79311936128518366866090,79411936045731440601770,79511915017571564934570,79612297829381125593690,79710851025924903036518,79811936045732872235690,79910851025926048361130,80012297741076598008490,80110850959696507349674,80212275311039396600490,80310834137168606815914,80411140386616255343210,80511068046444512062122,80611067990148944079530,80711053691000230401450,80810851025924700920410,80912297829381327709798,81011067990150375713450,81111053691001656486570,81211053634925137406634,81310850972941984377514,81412297754322479262378,81510837514919665621674,81612278688790858065578,81712008468690110147178,8186149102339789291520,8196196766168842283520,8206872316420712079520,82112297923204601937920,82212273717456122085120,82311935962946030203120,82411067933855094066380,82512249885541595589120,82612321755119128433920,82711893906626277563120,82811039335557662271180,82918398892593240473770,83018446556422293465770,83111574355905568809120,83211556131500342665120,83312659530245063331920,83410634005406540393580,83517723342341370677770,83618446593951717689480837838\end{lstlisting}839840%%%%%%%%%%%%% BIBLIOGRAPHY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%841842\begin{thebibliography}{9}843\bibitem{journal}844M. Boyle and B. Lee, Jointly periodic points in cellular automata: computer explorations and conjectures,845Experimental Mathematics 16 (2007), no. 3, 293–302846847\bibitem{journal}848M. Boyle and B. Kitchens, Periodic points for onto cellular automata, Indagationes Mathematicae 10849(1999), no. 4, 483–493.850851\bibitem{journal}852“Elementary Cellular Automaton.” From Wolfram MathWorld, https://mathworld.wolfram.com/ElementaryCellularAutomaton.html.853854\bibitem{journal}855"Computation Theory of Cellular Automata" by Stephen Wolfram,856https://content.wolfram.com/uploads/sites/34/2020/07/computation-theory-cellular-automata.pdf857858\bibitem{journal}859"Decision Procedures for Surjectivity and Injectivity860of Parallel Mapsfor Tessellation Structures" by S. Amoroso, Y.N. Patt,https://www.sciencedirect.com/science/article/pii/S0022000072800138861862\bibitem{journal}863J. 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.59864\bibitem{journal}865G. A. Hedlund, K. I. Appel and L. R. Welch, All onto functions of span less than866or equal to five, IDA-CRD Working Paper (July, 1963), 73 pages.867868869870\end{thebibliography}871872873874%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%875876%% To omit final list of figures and tables, use the class option [nolists]877878\end{document}879880881