Relationships Between Nondeterministic and Deterministic Tape Complexities

About this paperTiếng Việt中文日本語beside Tiếng Việtbeside 中文beside 日本語

This paper is under a licence that does not allow it to be reproduced, so what is here is its front matter and a short abstract. Read it at the publisher's page.

Department of Applied Physics and Information Science, University of California, San Diego, La Jolla, California 92037

Received August 29, 1969

The amount of storage needed to simulate a nondeterministic tape bounded Turing machine on a deterministic Turing machine is investigated. Results include the following: Theorem. A nondeterministic L(n)L(n)-tape bounded Turing machine can be simulated by a deterministic [L(n)]2[L(n)]^2-tape bounded Turing machine, provided L(n)≥log⁡2nL(n) \geq \log_2 n. Computations of nondeterministic machines are shown to correspond to threadings of certain mazes. This correspondence is used to produce a specific set, namely the set of all codings of threadable mazes, such that, if there is any set which distinguishes nondeterministic tape complexity classes from deterministic tape complexity classes, then this is one such set.

Introduction

A well-known open problem in the theory of formal languages and computational complexity is to decide whether or not there exists a nondeterministic context-sensitive language, that is, to decide whether or not there is a set which is accepted by a nondeterministic linear bounded automaton, but is accepted by no such deterministic machine. In this paper, we give some partial answers to a natural generalization of this problem. We attempt to answer the following question: "Given a nondeterministic tape bounded Turing machine which accepts a set AA, how much addition storage does a deterministic Turing machine require to recognize AA?"

More specifically, we show that any nondeterministic L(n)L(n)-tape bounded Turing machine can be simulated by a deterministic [L(n)]2[L(n)]^2-tape bounded Turing machine, provided L(n)≥log⁡2nL(n) \geq \log_2 n. Thus, in particular, every context-sensitive language can be recognized within deterministic storage n2n^2, where nn is the length of the input. As a corollary of the proof of this theorem, we get that if a context-sensitive language is

  • This work is based on a portion of the author's doctoral dissertation in the Department of Mathematics of the University of California, Berkeley. Most of the results were announced in [9]. Part of this research was done while the author was a National Science Foundation Graduate Fellow.

accepted by a nondeterministic linear bounded automaton within polynomial time, then the language is accepted by a deterministic Turing machine within storage nlog⁡2nn \log_2 n. It is also shown that if nondeterministic and deterministic tape complexity classes are equal for "small" functions, then they are equal for "large" functions.

The notion of a maze is formalized and computations of nondeterministic machines are related to threadings of certain mazes. This relation is used to obtain a specific set, namely the set of codings of threadable mazes, such that, if there is any set which distinguishes nondeterministic tape complexity classes from deterministic tape complexity classes, then this is one such set. That is, there is a nondeterministic Turing machine which accepts the codings of threadable mazes within storage log⁡2n\log_2 n. Also, if there is a deterministic Turing machine which accepts them within the same storage, log⁡2n\log_2 n, then, for every storage function L(n)≥log⁡2nL(n) \geq \log_2 n, any nondeterministic L(n)L(n)-tape bounded Turing machine can be stimulated by a deterministic L(n)L(n)-tape bounded Turing machine.

Machine Model

The device studied in this paper is the multitape Turing Machine. In the terminology of [3], it is a Turing machine with finitely many two-way infinite storage tapes and a read only input tape provided with end markers. We shall give only an informal definition of the device. A multitape Turing machine (hereafter called simply Turing machine) is a finite state control attached to a read only input tape and finitely many read/write storage tapes. The tapes are divided into squares. Each square of a storage tape is capable of holding one symbol from the finite storage tape alphabet Γ\Gamma. The input tape will always contain a finite string ww of symbols from the finite input alphabet Σ\Sigma. The string ww is separated by two symbols not in Σ\Sigma called left and right end markers. Each tape has one head communicating with the finite control.

At any point in time, each head will scan one square on its tape and the control will be in one state. Depending on this state and the symbols scanned by the heads, the machine will, in one step, assume another state, overwrite a symbol on the scanned square of each of its storage tapes, and then shift some of its heads (including possibly the input head) either left or right one square. The finite control is designed so that the input head will never leave the segment of tape containing ww and the end markers. The machine is said to be deterministic if there is only one possible action at each step. It is said to be nondeterministic if there are finitely many possible actions at each step.

Some states are distinguished and called accepting states and one state is distinguished and called the initial state. We say the deterministic machine ZZ accepts the input string ww over Σ\Sigma if ZZ enters an accepting state after finitely many steps, when started in the initial state, with all storage tapes blank, ww on its input tape and its input head scanning the left end marker. The definition is the same in the case ZZ is nondeterministic except that we merely require that there be a possible finite sequence of steps leading to an accepting state, starting from the initial configuration described above.

Definition. Suppose L(n)L(n) is a function on the natural numbers, ZZ is a Turing machine (deterministic or nondeterministic), and AA is a set of strings over the input alphabet of ZZ. ZZ is said to accept the set AA within storage L(n)L(n) provided that

(i) for each string ww in AA, there is at least one possible computation of ZZ which accepts ww and in which each storage tape head scans at most L(∣w∣)L(|w|) squares, and

(ii) ZZ accepts no string not in AA. ∣w∣|w| is the length of the string, ww.

In this paper we are considering only the growth rates of storage functions. That is, for our purposes, the storage functions L(n)L(n) and ϵL(n)\epsilon L(n) are the same, for any constant ϵ>0\epsilon > 0. This identification of functions follows from the fact that our Turing machines are allowed arbitrary finite storage tape alphabets. Thus, any Turing machine which operates in storage L(n)L(n) can be modified to operate in storage ϵL(n)\epsilon L(n) and still accept the same set of tapes. (See, for example, [3].) We assume the reader is familiar with such tape reduction techniques.

In what follows, it will sometimes be convenient to assume that the storage functions are "nice". The niceness condition we want is that the functions be measurable [4].

Definition. A function L(n)L(n) is said to be measurable if there is some Turing machine with just one storage tape such that, given any input of length nn, the machine will halt after a computation in which the storage tape head scans exactly L(n)L(n) squares.

Apparently, all common storage functions L(n)≥log⁡2nL(n) \geq \log_2 n are measurable. In particular, any polynomial in nn and log⁡2n\log_2 n is measurable.

Deterministic Simulation of Nondeterministic Turing Machines

Theorem 1. If a set, AA, is accepted by a nondeterministic Turing machine, ZNZ_N, within storage L(n)≥log⁡2nL(n) \geq \log_2 n, then AA is accepted by some deterministic Turing machine, ZDZ_D, within storage [L(n)]2[L(n)]^2.

Proof. The theorem is proved by exhibiting an algorithm whereby ZDZ_D can simulate the computations of ZNZ_N. The algorithm is similar to that used by Lewis, Stearns, and Hartmanis [7] to show that every context-free language is accepted by a deterministic Turing machine within storage (log⁡2n)2(\log_2 n)^2.

Suppose the Turing machine ZNZ_N has kk storage tapes, storage tape alphabet Γ\Gamma, and internal state set QQ. Let Δ=Q∪Γ∪{1,2,∗,↓}\Delta = Q \cup \Gamma \cup \{1, 2, *, \downarrow\}, where ↓\downarrow and ∗* are two new symbols. An instantaneous description (ID) of ZNZ_N is a string over Δ\Delta of the form pq u₁ ↓ v₁ u₂ ↓ v₂ ... uₖ ↓ vₖ, where p is a number in dyadic notation¹ indicating the position of the input head of ZNZ_N, q is an element of Q indicating that the finite control of ZNZ_N is in state q, and ui,viu_i, v_i are elements of Γ∗\Gamma^*, i=1,2,...,ki = 1, 2, ..., k. ui↓viu_i ↓ v_i is interpreted to mean that uiviu_i v_i is the contents of the ith storage tape of ZNZ_N and the head on this tape is scanning the first symbol of string viv_i. Thus, except for the contents of the input tape, an ID of ZNZ_N is a complete description of a configuration of ZNZ_N.

Since ZNZ_N accepts the set AA within storage L(n)≥log⁡2nL(n) \geq \log_2 n, it follows that for each string w of length n accepted by ZNZ_N, there is a computation of ZNZ_N accepting w in which every ID has length not exceeding cL(n)cL(n). Furthermore, since each ID is of length at most cL(n)cL(n), the computation need take no more than 2c′L(n)2^{c'L(n)} steps. c and c′c' are constants depending only on ZNZ_N and not on the input w.

We first give the algorithm for the case: L(n)L(n) is measurable.

Given an input of length n, ZDZ_D initializes its computation by dividing one of its storage tapes into [c′L(n)]+1[c'L(n)] + 1 blocks (called registers), each of length [cL(n)][cL(n)], followed by [c′L(n)]+1[c'L(n)] + 1 blocks (called tags), each capable of storing either 0 or 1. This it can easily do if L(n)L(n) is measurable. [y] is the largest integer not exceeding y. Note that each register is capable of holding any ID of ZNZ_N in which the nonblank portion of every storage tape is at most L(n)L(n). ZDZ_D has a second storage tape for scratch work.

The idea of the algorithm is as follows. ZDZ_D has the string w as input. In the course of the algorithm, ZDZ_D will consider two ID's I, I′′I'' stored in particular registers. For a prechosen m, it will need to check if, with input w, ZNZ_N can in 2m2^m steps change its configuration from I to I′′I''. Furthermore, ZDZ_D will have to perform this task using only m registers. ZDZ_D proceeds as follows. It runs through (in a systematic way) all ID's I′I' of ZNZ_N and for each I′I', checks to see if there is a computation of at most 2m−12^{m-1} steps from I to I′I', and a computation of at most 2m−12^{m-1} steps from I′I' to I′′I''. ZDZ_D needs one register to keep track of the I′I', leaving it with m−1m - 1 registers. So ZDZ_D has reduced the task of simulating 2m2^m moves of ZNZ_N using m registers to simulating 2m−12^{m-1} moves of ZNZ_N using m−1m - 1 registers. ZDZ_D then reduces each computation of 2m−12^{m-1} steps to two computations of 2m−22^{m-2} steps. ZDZ_D continues to reduce the length of the computations it need check until it need only check, for appropriate ID's I1I_1 and I2I_2, whether, with input w, ZNZ_N can in one step go from I1I_1 to I2I_2. This it can easily do using zero storage. Now if there is any accepting computation of ZNZ_N, then there is one which accepts in 2c′L(n)2^{c'L(n)} steps. So ZDZ_D can simulate this computation using c′L(n)c'L(n) registers or about [L(n)]2[L(n)]^2 squares of storage tape.

We now define some notation for a formal statement of the algorithm. Since ID's are strings over a finite alphabet, Δ\Delta, they may be considered to be integers in m-adic notation, where m is the number of symbols in Δ\Delta. More precisely, if Δ={a1,a2,...,am}\Delta = \{a_1, a_2, ..., a_m\} then the string aikaik−1⋯ai0a_{i_k} a_{i_{k-1}} \cdots a_{i_0} will represent the number ∑j=0kijmj\sum_{j=0}^k i_j m^j. We will not distinguish between a string and the number it represents.

¹ The string dldl−1⋯d0d_l d_{l-1} \cdots d_0 over the alphabet {1, 2} is the dyadic representation of the number ∑i=0ldi2i\sum_{i=0}^l d_i 2^i.

DEFINITION. If II and I′I' are ID's of ZNZ_N and if ZNZ_N can in one step, with input ww, pass from configuration II to configuration I′I', or if I=I′I = I', then we will write I→wI′I \xrightarrow{w} I'. In the algorithm we will test if I→wI′I \xrightarrow{w} I' is true for arbitrary strings I,I′I, I' over Δ\Delta. If either II or I′I' is not an ID of ZNZ_N, then the test fails.

In the following algorithm, xix_i denotes the contents of the ii-th register and TiT_i denotes the contents of the ii-th tag [1≤i≤c′L(n)+1][1 \leq i \leq c'L(n) + 1]. ZDZ_D has a string ww as input and all references to computations of ZNZ_N mean computations of ZNZ_N under the input ww and in which the nonblank portion of each work tape remains at most L(∣w∣)L(|w|) squares long. At any point in the computation of ZDZ_D, if Ti=1T_i = 1, then there is a computation of ZNZ_N from the start ID to xix_i.

ALGORITHM FOR MACHINE ZDZ_D

Summary of Notation

ww is the input string. nn is the length of ww. rr is the least integer such that r≥c′L(n)r \geq c'L(n). c′c' is such that, with ww as input, if ZNZ_N accepts ww at all, then ZNZ_N accepts ww in 2c′L(n)2^{c'L(n)} steps. I0I_0 is the initial ID of ZNZ_N. NN is the largest integer whose mm-adic representation can be stored in a register. xix_i is the contents of the ii-th register. TiT_i is the contents of the ii-th tag.

D0 (Initialize). Compute rr and set up the r+1r + 1 registers and tags. For i=1,2,...,ri = 1, 2, ..., r set xi←1x_i \leftarrow 1 and Ti←0T_i \leftarrow 0. Set xr+1←I0x_{r+1} \leftarrow I_0 (the initial ID) and Tr+1←1T_{r+1} \leftarrow 1.

D1 (Test). If each Ti=1T_i = 1, go to D3. Otherwise, let jj be the smallest index such that Tj=0T_j = 0. Test: For some index hh, Th=1T_h = 1 and xh→wxjx_h \xrightarrow{w} x_j. Yes: Go to D2. No: Go to D3.

D2 (Clear Storage) (jj as in D1). If xjx_j is an accepting ID, ACCEPT. Otherwise, set Tj←1T_j \leftarrow 1 and for i=1,2,...,j−1i = 1, 2, ..., j - 1 set xi←1x_i \leftarrow 1 and Ti←0T_i \leftarrow 0. Go to D1.

D3 (Back Track). If xi=Nx_i = N for each i≤ri \leq r, REJECT. Otherwise, let kk be the smallest index such that xk≠Nx_k \neq N. Set xk←xk+1x_k \leftarrow x_k + 1, Tk←0T_k \leftarrow 0, and for i=1,2,...,k−1i = 1, 2, ..., k - 1 set xi←1x_i \leftarrow 1, Ti←0T_i \leftarrow 0. Go to D1.

Clearly the algorithm works within storage c′′[L(n)]2c''[L(n)]^2, where c′′c'' is a constant depending only on ZNZ_N. By standard techniques [3] the constant can be reduced to one. A simple induction on the number of steps completed shows that if ZDZ_D accepts an input ww, then the nondeterministic machine ZNZ_N does. Thus, it will suffice to show that ZDZ_D accepts all strings that ZNZ_N accepts. To show this, we need some preliminary lemmas. The lemmas are easier to state in case the machine does not stop when it accepts. So assume D2 (Clear Storage) has been modified to omit the first line ("If xjx_j is an accepting ID, ACCEPT"). We shall say ZDZ_D is in configuration

⟨x1,x2,...,xr+1⟩,⟨T1,T2,...,Tr+1⟩\langle x_1, x_2, ..., x_{r+1} \rangle,\quad \langle T_1, T_2, ..., T_{r+1} \rangle

if it is about to execute D1, and the contents of the registers and tags are, respectively, x1,x2,...,xr+1x_1, x_2, ..., x_{r+1} and T1,T2,...,Tr+1T_1, T_2, ..., T_{r+1}.

Lemma 1. (For modified D2). For each index i(i=1,2,...,r)i (i = 1, 2, ..., r) and each integer xx (x=1,2,...,Nx = 1, 2, ..., N) if at some time in a computation of ZDZ_D the configuration of ZDZ_D is

⟨1,1,...,1⏟i,xi+1,xi+2,...,xr,I0⟩,⟨0,0,...,0⏟i,Ti+1,Ti+2,...,Tr,1⟩(1)\langle \underbrace{1, 1, ..., 1}_{i}, x_{i+1}, x_{i+2}, ..., x_r, I_0 \rangle,\quad \langle \underbrace{0, 0, ..., 0}_{i}, T_{i+1}, T_{i+2}, ..., T_r, 1 \rangle \tag{1}
(1)

for some xi+1,xi+2,...,xrx_{i+1}, x_{i+2}, ..., x_r and some Ti+1,Ti+2,...,TrT_{i+1}, T_{i+2}, ..., T_r, then at some later time the configuration will be

⟨1,1,...,1⏟i−1,x,xi+1,xi+2,...,xr,I0⟩,⟨0,0,...,0⏟i,Ti+1,Ti+2,...,Tr,1⟩(2)\langle \underbrace{1, 1, ..., 1}_{i-1}, x, x_{i+1}, x_{i+2}, ..., x_r, I_0 \rangle,\quad \langle \underbrace{0, 0, ..., 0}_{i}, T_{i+1}, T_{i+2}, ..., T_r, 1 \rangle \tag{2}
(2)

or

⟨1,1,...,1⏟j−1,xj,xj+1,...,xr,I0⟩,⟨0,0,...,0⏟j−1,1,Tj+1,...,Tr,1⟩,(3)\langle \underbrace{1, 1, ..., 1}_{j-1}, x_j, x_{j+1}, ..., x_r, I_0 \rangle,\quad \langle \underbrace{0, 0, ..., 0}_{j-1}, 1, T_{j+1}, ..., T_r, 1 \rangle, \tag{3}
(3)

where jj is the least index in (1) such that j>ij > i and Tj=0T_j = 0. (If no such jj exists, then (2) happens.)

The algorithm is trying to establish that there is a computation of ZNZ_N from the start ID to xjx_j. It is trying to do this using only registers to the left of xjx_j. So the lemma says that ZDZ_D can get any ID into any register, if it needs to.

Proof. A formal proof would use induction on ii and xx. We list some representative configurations in a computation. This should make the lemma clear. Note that since NN is a string all of whose digits are the same, NN is not an ID and, hence, x↑wNx \uparrow_w N is not true for any integer xx. Suppose ZDZ_D is started in configuration (1) and that at no later time does ZDZ_D assume configurations (3). ZDZ_D will then assume the following configurations:

⟨1,1,...,1,x−1;xi+1,xi+2,...,xr,I0⟩,\langle 1, 1, ..., 1, x - 1; x_{i+1}, x_{i+2}, ..., x_r, I_0 \rangle,
⟨0,0,...,0,Ti+1,Ti+2,...,Tr,1⟩\langle 0, 0, ..., 0, T_{i+1}, T_{i+2}, ..., T_r, 1 \rangle
⟨1,1,...,1,N,x−1,xi+1,xi+2,...,xr,I0⟩,\langle 1, 1, ..., 1, N, x - 1, x_{i+1}, x_{i+2}, ..., x_r, I_0 \rangle,
⟨0,0,...,0,Ti,Ti+1,Ti+2,...,Tr,1⟩\langle 0, 0, ..., 0, T_i, T_{i+1}, T_{i+2}, ..., T_r, 1 \rangle

where Ti=0T_i = 0 or 1.

⟨N,N,...,N,x−1,xi+1,xi+2,...,xr,I0⟩,\langle N, N, ..., N, x - 1, x_{i+1}, x_{i+2}, ..., x_r, I_0 \rangle,
⟨0,0,...,0,Ti,Ti+1,Ti+2,...,Tr,1⟩\langle 0, 0, ..., 0, T_i, T_{i+1}, T_{i+2}, ..., T_r, 1 \rangle

Finally, via D3, ZDZ_D assumes (2) as desired.

Lemma 2. (For modified D2). Suppose that at some time in a computation the configuration of ZDZ_D is

⟨1,1,...,1,x,xj+1,xj+2,...,xr,I0⟩,\langle 1, 1, ..., 1, x, x_{j+1}, x_{j+2}, ..., x_r, I_0 \rangle,
⟨0,0,...,0,Tj,Tj+1,Tj+2,...,Tr,1⟩(4)\langle 0, 0, ..., 0, T_j, T_{j+1}, T_{j+2}, ..., T_r, 1 \rangle \tag{4}
(4)

with Tj=0T_j = 0 and any values for the xx's and remaining TT's. If for some index q,Tq=1q, T_q = 1 and there is a computation of ZNZ_N of at most 2j2^j steps from xqx_q to xx, then at some later time the configuration of ZDZ_D will be (4) with Tj=1T_j = 1.

The lemma says that jj registers are sufficient for ZDZ_D to check a computation of 2j2^j steps of ZNZ_N.

Lemma 3. (For modified D2). Suppose that at some time in a computation the configuration of ZDZ_D is

⟨1,1,...,1,xj,xj+1,...,xj+p,x,xj+p+2,...,xr,I0⟩,\langle 1, 1, ..., 1, x_j, x_{j+1}, ..., x_{j+p}, x, x_{j+p+2}, ..., x_r, I_0 \rangle,
⟨0,0,...,0,1,1,...,1,0,Tj+p+2,Tj+p+3,...,Tr,1⟩(5)\langle 0, 0, ..., 0, 1, 1, ..., 1, 0, T_{j+p+2}, T_{j+p+3}, ..., T_r, 1 \rangle \tag{5}
(5)

for any values of the xx's and TT's. If for some index q,Tq=1q, T_q = 1 and there is a computation of ZNZ_N of at most 2j2^j steps from xqx_q to xx, then at some later time the configuration of ZDZ_D will be

⟨1,1,...,1,x,xj+p+2,xj+p+3,...,xr,I0⟩,\langle 1, 1, ..., 1, x, x_{j+p+2}, x_{j+p+3}, ..., x_r, I_0 \rangle,
⟨0,0,...,0,1,Tj+p+2,Tj+p+3,...,Tr,1⟩.(6)\langle 0, 0, ..., 0, 1, T_{j+p+2}, T_{j+p+3}, ..., T_r, 1 \rangle. \tag{6}
(6)

Proof of Both Lemmas. Lemmas 2 and 3 are basically a single lemma and are proven simultaneously by induction on jj. The base case, j=1j = 1, is clear. Assume both lemmas hold with jj replaced by j−1j - 1. We will show that Lemma 2 holds for jj.

Suppose ZDZ_D is in configuration (4) with Tj=0T_j = 0 and that for some index, qq, there is a computation of ZNZ_N from xqx_q to xx of at most 2j2^j steps. Decomposing this computation from xqx_q to xx, we get that there is a yy such that there are computations of at most 2j−12^{j-1} steps from xqx_q to yy and from yy to xx. By Lemma 1, it follows that, at some later time, either the configuration of ZDZ_D is

⟨1,1,...,1,y,x,xj+1,xj+2,...,xr,I0⟩,\langle 1, 1, ..., 1, y, x, x_{j+1}, x_{j+2}, ..., x_r, I_0 \rangle,
⟨0,0,...,0,Tj−1,0,Tj+1,Tj+2,...,Tr,1⟩\langle 0, 0, ..., 0, T_{j-1}, 0, T_{j+1}, T_{j+2}, ..., T_r, 1 \rangle

with Tj−1=0T_{j-1} = 0 or the configuration is (4) with Tj=1T_j = 1. Configuration (4) with Tj=1T_j = 1 is the desired outcome. So assume ZDZ_D assumed configuration (7) with Tj−1=0T_{j-1} = 0. By induction hypothesis on Lemma 2, it follows that at some still later time the configuration of ZDZ_D will be (7) with Tj−1=1T_{j-1} = 1. If we then apply the induction hypothesis on Lemma 3, we get that at a still later time the configuration of ZDZ_D will be (4) with Tj=1T_j = 1. So Lemma 2 holds for jj. Lemma 3 for jj is established in a similar fashion. Thus, the induction hypothesis is established and the proof of both lemmas is completed.

Using Lemmas 1 and 2 it is easy to complete the proof of the theorem. Suppose the nondeterministic machine ZNZ_N accepts ww. We must show that ZDZ_D accepts ww. Since ZNZ_N accepts ww, there is an accepting ID, xx, of ZNZ_N such that there is a computation, with ww as input, of at most 2r2^r steps from I0I_0 (the initial ID of ZNZ_N) to xx. By Lemma 1, it follows that ZDZ_D eventually assumes configuration

⟨1,1,...,1,x,I0⟩,⟨0,0,...,0,Tr,1⟩\langle 1, 1, ..., 1, x, I_0 \rangle, \quad \langle 0, 0, ..., 0, T_r, 1 \rangle

with Tr=0T_r = 0. By Lemma 2, it follows that at some later time ZDZ_D will assume configuration (8) with Tr=1T_r = 1. All this was for the modified D2. The unmodified D2 will accept ww rather than set Tr←1T_r \leftarrow 1. This completes the proof of Theorem 1 in the case: L(n)L(n) is measurable.

If L(n)L(n) is not measurable, then the above algorithm must be altered, since ZDZ_D cannot necessarily mark off blocks of length cL(n)cL(n) within storage proportionate to [L(n)]2[L(n)]^2. However, if ZDZ_D were somehow given the value of L(n)L(n), then by the above procedure, ZDZ_D could determine whether or not ZNZ_N accepts the input ww within storage L(n)L(n). So ZDZ_D operates as follows. ZDZ_D first assumes L(n)=1L(n) = 1. If ZNZ_N accepts within storage L(n)=1L(n) = 1, then ZDZ_D will accept. If ZNZ_N does not accept within storage 1, then ZDZ_D next assumes L(n)=2L(n) = 2. If ZNZ_N accepts within storage 2, then ZDZ_D accepts. If not, then ZDZ_D next assumes L(n)=3L(n) = 3. ZDZ_D proceeds in this manner trying larger and larger values for L(n)L(n). If ZNZ_N accepts the input ww, then ZDZ_D will eventually find the correct value for L(n)L(n) and accept ww within storage proportionate to [L(n)]2[L(n)]^2. If ZNZ_N does not accept ww, then ZDZ_D computes forever on input ww. This completes the proof of Theorem 1.

The context-sensitive languages are precisely those sets accepted by nondeterministic Turing machines within storage L(n)=nL(n) = n (see, for example, [3]). So, setting L(n)=nL(n) = n in Theorem 1, we get,

Corollary 1. Every context-sensitive language is accepted by some deterministic Turing machine within storage n2n^2.

Theorem 1 can be generalized as follows.

Theorem 2. If a set, AA, is accepted by a nondeterministic Turing machine within storage L(n)L(n) and time T(n)T(n), then AA is accepted by some deterministic Turing machine within storage L(n)log⁡2T(n)L(n) \log_2 T(n).

Definition. A Turing machine, ZZ, is said to accept a set, AA, within storage L(n)L(n) and time T(n)T(n) provided that

(i) for each ww in AA, there is at least one computation of ZZ which accepts ww, takes at most T(n)T(n) steps, and in which each work tape head scans at most L(n)L(n) squares, where nn is the length of ww, and provided that

(ii) ZZ accepts no string not in AA.

Proof of Theorem 2. An analysis of the proof of Theorem 1 shows that the algorithm uses a bound on the storage of the nondeterministic machine to obtain a bound, namely exponential in the storage, on the time of the nondeterministic machine. It then marks off [log⁡2T(n)][\log_2 T(n)] blocks of storage, where T(n)T(n) is a bound on the time. Clearly, if the time bound were easy to compute, the algorithm could be modified to use it as the bound on the time. We would then get Theorem 2. If the time function is not easy to compute, then we use the same sort of trick as that used for nonmeasurable functions in the proof of Theorem 1.

Corollary 2. If a context-sensitive language is accepted by a nondeterministic Turing machine within linear storage and polynomial time, then it is accepted by some deterministic Turing machine within storage nlog⁡2nn \log_2 n.

The following theorem says that for any "well behaved" storage function L(n)L(n), if every nondeterministic L(n)L(n)-tape bounded Turing machine can be simulated by a deterministic L(n)L(n)-tape bounded Turing machine, then for all larger storage functions nondeterministic and deterministic tape complexities are the same.

THEOREM 3. Suppose that L(n)L(n) and H(n)H(n) are measurable, that L(n)L(n) is monotone increasing and unbounded and that log⁡2n≤L(n)≤H(n)\log_2 n \leq L(n) \leq H(n), for all nn. Let the function k(n)k(n) be defined as follows. For each natural number nn, k(n)k(n) is the least natural number such that H(n)≤L[k(n)]H(n) \leq L[k(n)].

Suppose further that for any set, AA, if AA is accepted by a nondeterministic Turing machine within storage L(n)L(n), then AA is accepted by a deterministic Turing machine within storage L(n)L(n). It then follows that for any set, BB, if BB is accepted by a nondeterministic Turing machine within storage H(n)H(n), then BB is accepted by a deterministic Turing machine within storage L[k(n)]L[k(n)].

The theorem is a bit stronger than it seems. For most common storage functions, LL, there is a constant cc such that cL[k(n)]≤H(n)≤L[k(n)]cL[k(n)] \leq H(n) \leq L[k(n)], for all HH and nn. Thus, in these cases, the conclusion can be strengthened to say that any set accepted within nondeterministic storage H(n)H(n) can be accepted within deterministic storage H(n)H(n). In particular,

COROLLARY 3. Suppose L(n)L(n) is a polynomial in log⁡2n,n\log_2 n, n and cnc^n, for some constant cc. Suppose further that for any set, AA, if AA is accepted by a nondeterministic Turing machine within storage L(n)L(n), then AA is accepted by some deterministic Turing machine within storage L(n)L(n).

It then follows that for any measurable function H(n)≥L(n)H(n) \geq L(n) and any set, BB, if BB is accepted by a nondeterministic Turing machine within storage H(n)H(n), then BB is accepted by some deterministic Turing machine within storage H(n)H(n).

Among other things, the corollary says that if every context-sensitive language is accepted by a deterministic linear bounded automaton (i.e., deterministic Turing machine with storage bound nn), then nondeterministic and deterministic tape complexities are the same for all measurable tape bounds H(n)≥nH(n) \geq n.

Proof of Corollary 3. It is easy to check that for any such polynomial L(n)L(n), there is a constant cc such that L(n)/L(n+1)≥cL(n)/L(n+1) \geq c for all nn. So cL[k(n)]≤L[k(n)−1]cL[k(n)] \leq L[k(n)-1]. k(n)k(n) is the function defined in the statement of the theorem. By definition of k(n)k(n), L[k(n)−1]≤H(n)L[k(n)-1] \leq H(n). So cL[k(n)]≤H(n)cL[k(n)] \leq H(n).

Assume the hypothesis of the corollary and suppose BB is accepted by a nondeterministic Turing machine within storage H(n)H(n). By the Theorem 3, BB is accepted by a deterministic Turing machine within storage L[k(n)]L[k(n)]. So, by standard tape reduction techniques [3], it follows that BB is accepted by a deterministic Turing machine within storage cL[k(n)]cL[k(n)]. Finally, since cL[k(n)]≤H(n)cL[k(n)] \leq H(n), this means that BB is accepted by a deterministic Turing machine within storage H(n)H(n).

Proof of Theorem 3. Assume the hypothesis of the Theorem 3 and suppose BB is a set accepted by a nondeterministic Turing machine, ZNHZ_N^H, within storage H(n)H(n).

We will construct a deterministic machine, ZDHZ_D^H, which accepts BB within storage L[k(n)]L[k(n)].

Let β\beta be a new symbol. Let A={wβh∣w in B and ∣w∣+h≥k(∣w∣)}A = \{ w\beta^h \mid w \text{ in } B \text{ and } |w| + h \geq k(|w|) \}. A nondeterministic Turing machine, ZNLZ_N^L, which accepts AA within storage L(n)L(n) can be constructed as follows. Given input wβhw\beta^h, ZNLZ_N^L first marks off L(n)L(n) squares of storage, where n=∣wβh∣n = |w\beta^h|. It then checks to see if L(n)≥H(∣w∣)L(n) \geq H(|w|). If this is not the case, then n=∣w∣+h<k(∣w∣)n = |w| + h < k(|w|) and the computation halts. If L(n)≥H(∣w∣)L(n) \geq H(|w|), then ZNLZ_N^L mimics ZNHZ_N^H to see if ww is in BB. If ZNHZ_N^H accepts, then it does. Since L(n)≥H(∣w∣)L(n) \geq H(|w|), this machine will accept AA within storage L(n)L(n). So, by hypothesis, there is a deterministic machine, ZDLZ_D^L, which accepts AA within storage L(n)L(n). Furthermore, since LL is measurable, we may assume that on every input of length nn, ZDLZ_D^L halts after a computation in which at most L(n)L(n) squares of storage tape are scanned. (Our definitions merely require this when the machine accepts the input.)

The deterministic machine, ZDHZ_D^H, which accepts BB within storage L[k(n)]L[k(n)] operates as follows. Given an input ww, ZDHZ_D^H mimics ZDLZ_D^L operating on wβhw\beta^h for various values of hh. It first tries h=0h = 0. If ZDLZ_D^L accepts ww, then ZDHZ_D^H does. If not, it then tries h=1h = 1. If ZDLZ_D^L accepts wβw\beta, then ZDHZ_D^H does. If not, it then tries h=2h = 2. If ZDLZ_D^L accepts wβ2w\beta^2, the ZDHZ_D^H does. If not, it then tries h=3h = 3, and so forth. If ww is in BB, then ZDHZ_D^H will eventually find the least hh such that ∣w∣+h≥k(∣w∣)|w| + h \geq k(|w|) and will accept ww within storage L(∣wβh∣)=L[k(∣w∣)]L(|w\beta^h|) = L[k(|w|)]. This completes the proof of Theorem 3.

It is natural to ask if there is any storage function whose deterministic and nondeterministic complexity classes are equal. The answer was given by Manuel Blum and is "yes". Blum showed that there are arbitrarily large storage functions L(n)L(n) such that a set is accepted within deterministic storage L(n)L(n) if, and only if, it is accepted within nondeterministic storage L(n)L(n). These functions L(n)L(n) are not, however, "well-behaved" and Theorem 3 does not apply to them. They are not measurable. A sketch of the proof of Blum's result appears in [8].

One may also ask if there is a storage function (large enough to be interesting) whose deterministic and nondeterministic complexity classes are different. The next section is devoted to this question. Only an incomplete answer is given, however, and the question is open.

Mazes and Turing Machines

Informally, a maze is a set of rooms connected by one-way corridors. Certain rooms are designated goal rooms and one room is designated the start room. Thus, a maze is a directed graph with certain nodes or rooms distinguished. The maze is threadable if there is a path from the start room to some goal room.

A nondeterministic Turing machine, with input ww, gives rise in a natural way to a maze. The rooms of the maze are the instantaneous descriptions of the machine and the corridors are given by the transition function of the machine. That is there is a corridor from room I1I_1 to room I2I_2 if, with input ww, the machine can in one step change its configuration from I1I_1 to I2I_2. The initial instantaneous description of the machine is designated the start room. Those instantaneous descriptions which include an accepting state are designated goal rooms. The machine will accept the input ww if, and only if, the corresponding maze is threadable.

The algorithm for simulating a nondeterministic Turing machine, given in the last section, is really an efficient method for determining whether the corresponding maze is threadable. In this section we show that if an efficient enough method for "threading" mazes could be found, then deterministic machines could simulate nondeterministic machines in the same storage. More precisely, the set of threadable mazes, suitably coded, can be recognized by a nondeterministic Turing machine within storage log⁡2n\log_2 n. This set can be recognized by some deterministic Turing machine within storage log⁡2n\log_2 n if, and only if, deterministic L(n)L(n)-tape bounded Turing machines can simulate nondeterministic L(n)L(n)-tape bounded Turing machines, for all L(n)≥log⁡2nL(n) \geq \log_2 n.

Definition. A maze over Σ\Sigma (a finite alphabet) is a quadruple, M=(X,R,s,G)\mathcal{M} = (X, R, s, G), where XX is a finite set of strings over Σ\Sigma (XX is the set of rooms), RR is a binary relation on XX (giving the corridors), ss is an element of XX (ss is the start room), and GG is a subset of XX (GG is the set of goal rooms).

Definition. The maze M=(X,R,s,G)\mathcal{M} = (X, R, s, G) is threadable if there is a sequence r1,r2,...,rer_1, r_2, ..., r_e of rooms such that r1=sr_1 = s (the start room), rer_e is an element of GG (the goal rooms), and R(ri,ri+1)R(r_i, r_{i+1}) holds for i=1,2,...,e−1i = 1, 2, ..., e - 1.

Definition. Let ], [,* be three new symbols. A coding of the maze M=(X,R,s,G)\mathcal{M} = (X, R, s, G) is a string of the form

s[x1∗y11∗y21∗⋯yn(1)1][x2∗y12∗y22∗⋯∗yn(2)2]s[x_1 * y_1^1 * y_2^1 * \cdots y_{n(1)}^1][x_2 * y_1^2 * y_2^2 * \cdots * y_{n(2)}^2]
⋯[xl∗y1l∗⋯yn(l)l]u1∗u2∗⋯ug\cdots [x_l * y_1^l * \cdots y_{n(l)}^l] u_1 * u_2 * \cdots u_g

where ss is the start room of M\mathcal{M}; x1,x2,...,xlx_1, x_2, ..., x_l is an enumeration without repetitions of the rooms in XX; for 1≤i≤l1 \leq i \leq l, y1i,y2i,...,yn(i)iy_1^i, y_2^i, ..., y_{n(i)}^i is an enumeration without repetitions of all yy in XX such that R(xi,y)R(x_i, y) holds; and u1,u2,...,ugu_1, u_2, ..., u_g is an enumeration without repetitions of the rooms in GG.

Notation. MΣM_\Sigma denotes the set of all codings of threadable mazes over Σ\Sigma.

Theorem 4. For any finite alphabet Σ\Sigma, there is a nondeterministic Turing machine which accepts MΣM_\Sigma within storage log⁡2n\log_2 n.

Proof. If the maze has length nn, then it has at most nn rooms. So each room can be coded by a number which can be stored in log⁡2n\log_2 n squares of tape. More specifically, if the maze is given by (1), then the room xix_i is coded by the number ii in dyadic notation. The algorithm is very simple. The machine writes down the code number of the initial room on its work tape, finds the possible next rooms, guesses at one of them, erases its work tape, and writes down a coding of its guess. It then finds the possible next rooms, guesses at one of them and so forth. After each guess it checks to see if it has reached a goal room. If it has, it accepts. Clearly the work tape will be bounded by clog⁡2nc \log_2 n, for some constant cc.

A straight forward crossing sequence argument, like that of Cobham [2] shows that the bound, log⁡2n\log_2 n in Theorem 4, is the best possible, up to a constant factor.

Applying Theorems 1 and 4 to MΣM_\Sigma yields

Corollary 4. For any finite alphabet Σ\Sigma, there is a deterministic Turing machine which accepts MΣM_\Sigma within storage (log⁡2n)2(\log_2 n)^2.

Lemma 4. For any finite alphabets Σ\Sigma and Δ\Delta with at least two elements, MΣM_\Sigma is accepted by some deterministic Turing machine within storage log⁡2n\log_2 n if, and only if, MΔM_\Delta is.

Proof. For every coding, ww, of a maze over Σ\Sigma, there is a coding, δ(w)\delta(w), of a maze over Δ\Delta which is isomorphic to ww. So ww is in MΣM_\Sigma if, and only if, δ(w)\delta(w) is in MΔM_\Delta. More specifically, if ww is

s[x1∗y11∗y21∗⋯yn(1)1][x2∗y12∗y22∗⋯∗yn(2)2]s[x_1 * y_1^1 * y_2^1 * \cdots y_{n(1)}^1][x_2 * y_1^2 * y_2^2 * \cdots * y_{n(2)}^2]
⋯[xl∗y1l∗⋯yn(l)l]u1∗u2∗⋯ug\cdots [x_l * y_1^l * \cdots y_{n(l)}^l] u_1 * u_2 * \cdots u_g

then δ(w)\delta(w) may be taken to be

δ(s)[δ(x1)∗δ(y11)∗δ(y21)∗⋯δ(yn(1)1)][δ(x2)∗δ(y12)∗δ(y22)∗⋯∗δ(yn(2)2)]\delta(s)[\delta(x_1) * \delta(y_1^1) * \delta(y_2^1) * \cdots \delta(y_{n(1)}^1)][\delta(x_2) * \delta(y_1^2) * \delta(y_2^2) * \cdots * \delta(y_{n(2)}^2)]
⋯[δ(xl)∗δ(y1l)∗⋯δ(yn(l)l)]δ(u1)∗δ(u2)∗⋯δ(ug)\cdots [\delta(x_l) * \delta(y_1^l) * \cdots \delta(y_{n(l)}^l)] \delta(u_1) * \delta(u_2) * \cdots \delta(u_g)

where if kk is the number of symbols in Δ\Delta, then δ(xi)\delta(x_i) is the kk-adic representation of the number ii and so is an element of Δ∗\Delta^*. Since the uu's and yy's and ss are each equal to some xix_i, this defines δ\delta on them as well.

Given a deterministic machine, ZΔZ_\Delta, which accepts MΔM_\Delta within storage log⁡2n\log_2 n, we construct a deterministic machine, ZΣZ_\Sigma, which accepts MΣM_\Sigma within storage log⁡2n\log_2 n, as follows. Given an input ww, ZΣZ_\Sigma operates by mimicking ZΔZ_\Delta operating in δ(w)\delta(w). More specifically, suppose ZΣZ_\Sigma has input ww as in (1). When ZΣZ_\Sigma is simulating ZΔZ_\Delta with the input head of ZΔZ_\Delta someplace in δ(z)\delta(z), where zz is some s,x,y,s, x, y, or uu in (1), then ZΣZ_\Sigma will have its input head reading the first symbol of zz and will have δ(z)\delta(z) written on an auxiliary storage tape. ZΣZ_{\Sigma} uses this auxiliary storage tape containing δ(z)\delta(z) to mimic the input tape of ZΔZ_{\Delta}. When, in the mimicking process, the input head of ZΔZ_{\Delta} would leave the left (respectively, right) end of δ(z)\delta(z), then ZΣZ_{\Sigma} moves its input head to the s,x,y,s, x, y, or uu to the left (respectively, right) of zz, calculates δ\delta of this s,x,y,s, x, y, or uu and replaces δ(z)\delta(z) by δ\delta of this s,x,y,s, x, y, or uu. δ\delta of this s,x,y,s, x, y, or uu becomes the new δ(z)\delta(z) and the simulation continues. To calculate the new δ(z)\delta(z), ZΣZ_{\Sigma} need only compare the new zz to each xix_i until it finds the xix_i which equals zz. This it can do symbol by symbol and, thus, keep the amount of storage tape used less than clog⁡2nc \log_2 n, for some constant cc.

Since Σ\Sigma and Δ\Delta are symmetric in the statement of the lemma, this is sufficient to prove the lemma.

Theorem 5. For any finite alphabet, Σ\Sigma, with at least two elements, the following statements are equivalent:

(1) MΣM_{\Sigma} is accepted by some deterministic Turing machine within storage log⁡2n\log_2 n.

(2) For any finite alphabet Γ\Gamma, any set, AA, of strings over Γ\Gamma and any function L(n)≥log⁡2nL(n) \geq \log_2 n, if AA is accepted by a nondeterministic Turing machine within storage L(n)L(n), then AA is accepted by some deterministic Turing machine within storage L(n)L(n).

Proof. Statement (1) follows from statement (2) by Theorem 4.

Assume (1) holds and that AA is a set accepted by some nondeterministic Turing machine, ZNZ_N, within storage L(n)≥log⁡2nL(n) \geq \log_2 n. We will construct a deterministic machine, ZDZ_D, which accepts AA within the same storage bound L(n)L(n). Assume L(n)L(n) is measurable. We will later indicate how this restriction may be eliminated. With each string ww over the input alphabet of ZNZ_N associate the maze M(w)=(X,R,s,G)\mathcal{M}(w) = (X, R, s, G), where XX is the set of all ID's of ZNZ_N in which the nonblank portion of each work tape has length at most L(∣w∣)L(|w|), ss is the start ID of ZNZ_N, GG is the set of ID's in XX which include an accepting state, and RR is defined by: R(x,y)R(x, y) holds if, and only if, x→wyx \xrightarrow{w} y. Clearly, ZNZ_N accepts ww if, and only if, M(w)\mathcal{M}(w) is threadable. Let m(w)m(w) denote a coding of the maze M(w)\mathcal{M}(w). The deterministic machine ZDZ_D which accepts AA operates as follows. Given an input ww, ZDZ_D constructs m(w)m(w) on one of its storage tapes, and then simulates the machine of statement (1) to determine whether m(w)m(w) is in MΣM_{\Sigma}. If it is, then ZDZ_D accepts ww. By Lemma 4, we may assume Σ\Sigma is large enough so that all ID's of ZNZ_N are strings over Σ\Sigma. So m(w)m(w) is in MΣM_{\Sigma} if, and only if, ZNZ_N accepts ww. Thus, ZDZ_D accepts precisely the set AA. m(w)m(w) is of the length at most hL(n)h^{L(n)}, where n=∣w∣n = |w| and hh is a constant depending only on ZNZ_N. Except for the tape used to store m(w)m(w), ZDZ_D operates in storage log⁡2hL(n)\log_2 h^{L(n)} which is proportionate to L(n)L(n).

The machine ZDZ_D cannot write down the entire string, m(w)m(w), at once and still work within the allotted storage. However, all that is necessary in order to simulate the machine of statement (1) is that ZDZ_D be able to compute one symbol at a time of the string m(w)m(w) and keep track of the symbols position in m(w)m(w). This it could do provided it could, within storage L(n)L(n), generate m(w)m(w), from right to left, one symbol at a time.

Our remarks so far applied to any coding m(w)m(w) of the maze M(w)\mathcal{M}(w). We now fix m(w)m(w) to be the following coding of the maze M(w)\mathcal{M}(w)

s[x1∗y11∗y21∗⋯yn(1)1][x2∗y12∗y22∗⋯∗yn(2)2]s[x_1 * y_1^1 * y_2^1 * \cdots y_{n(1)}^1][x_2 * y_1^2 * y_2^2 * \cdots * y_{n(2)}^2]
⋯[xl∗y1l∗⋯yn(l)l]u1∗u2∗⋯ug\cdots [x_l * y_1^l * \cdots y_{n(l)}^l] u_1 * u_2 * \cdots u_g

where x1<x2<x3<⋯<xlx_1 < x_2 < x_3 < \cdots < x_l for each i=1,2,…,li = 1, 2, \ldots, l, y1i<y2i<y3i<⋯<yn(i)iy_1^i < y_2^i < y_3^i < \cdots < y_{n(i)}^i and u1<u2<⋯<ug.<u_1 < u_2 < \cdots < u_g . < is the usual "less than" ordering on the natural numbers. Recall that the xx's, yy's, and uu's are strings over a finite alphabet and, thus, may be regarded as numbers in kk-adic notation, for some kk. By definition of M(w)\mathcal{M}(w), the xx's, yy's, uu's, and ss are ID's of ZNZ_N of length less than cL(n)cL(n), where cc is a constant depending only on ZNZ_N. ZDZ_D can generate m(w)m(w) symbol by symbol, in the allotted storage, as follows. ZDZ_D can easily calculate ss, the initial ID of ZNZ_N. Having generated ss, ZDZ_D next runs through in numerical order, all strings of length less than cL(n)cL(n) until if finds one which is an ID of ZNZ_N. This will be x1x_1. So ZDZ_D has generated x1x_1. Next it produces all yy such that x1→wyx_1 \xrightarrow{w} y. In this way, it generates the yj1y_j^1. Next it runs through, in numerical order, all strings of length less than cL(n)cL(n) until it finds the first such string which is an ID of ZNZ_N and is greater than x1x_1. This is x2x_2. It now may erase x1x_1. The only thing it need keep in storage at this point is x2x_2. ZDZ_D then proceeds to generate the yj2y_j^2. It generates x3x_3 from x2x_2 in the same way it computed x2x_2 from x1x_1. It proceeds in this way until it finds the largest xix_i. Having generated the largest xix_i and its associated yy's, it then generates the uiu_i's as follows. It runs through all strings of length at most cL(n)cL(n) and checks to see which are ID's which include an accepting state. Those that do are the uiu_i. This completes the generating process and the proof for the case: L(n)L(n) is measurable.

If L(n)L(n) is not measurable, then ZDZ_D cannot necessarily generate precisely the strings of length less than cL(n)cL(n) within storage proportionate to L(n)L(n) and so the above procedure will not work. However, if ZDZ_D were somehow given the value of L(n)L(n), then by the above procedure it could determine whether or not ww is accepted by ZNZ_N within storage L(n)L(n). ZDZ_D uses the same sort of trick as was used for nonmeasurable functions in the proof of Theorem 1. That is, first it assumes L(n)=1L(n) = 1. If ZNZ_N accepts the input ww within storage L(n)=1L(n) = 1, then ZDZ_D accepts ww. If not, ZDZ_D next tries L(n)=2L(n) = 2. If ZNZ_N accepts within storage L(n)=2L(n) = 2, then ZDZ_D does. If not, ZDZ_D tries L(n)=3L(n) = 3 next, and so forth. If ZNZ_N accepts the input ww, then ZDZ_D will eventually find the correct value for L(n)L(n) and accept ww within storage proportionate to L(n)L(n).

An unsolved problem in the theory of tape complexity is whether there is some set AA of strings and some function L(n)≥log⁡2nL(n) \geq \log_2 n such that AA is accepted by some nondeterministic Turing machine within storage L(n)L(n) but accepted by no deterministic Turing machine within storage L(n)L(n). Theorem 5 shows that if any such AA and L(n)L(n) exist, then A=MΣA = M_\Sigma and L(n)=log⁡2nL(n) = \log_2 n will do.

SAVITCH

Acknowledgments

The author thanks Stephen A. Cook for his help and encouragement in this work.

References

  1. M. Blum, A machine-independent theory of the complexity of recursive functions, J. Assoc. Comput. Mach. 14 (1967), 322–336.
  2. A. Cobham, “The Recognition Problem for the Set of Perfect Squares.” IEEE Conference Record of the Seventh Annual Symposium on Switching and Automata Theory, Berkeley, Calif., 1966, pp. 78–87.
  3. J. E. Hopcroft and J. D. Ullman, “Formal Languages and Their Relation to Automata.” Addison-Wesley, Reading, Mass., 1969.
  4. J. E. Hopcroft and J. D. Ullman, Relations between time and tape complexities. J. Assoc. Comput. Mach. 15 (1968), 414–427.
  5. S. Y. Kuroda, Classes of languages and linear-bound automata. Information and Control 7 (1964), 207–223. (The relevant material also appears in [3], pp. 115–119.)
  6. P. S. Landweber, Three theorems on phrase structure grammars of type 1. Information and Control 6 (1963), 131–136. (The relevant material also appears in [3], pp. 115–119.)
  7. P. M. Lewis II, R. E. Stearns, and J. Hartmanis, “Memory Bounds for the Recognition of Context-Free and Context-Sensitive Languages.” IEEE Conference Record on Switching Circuit Theory and Logical Design, Ann Arbor, Mich., 1965, pp. 191–202. (The relevant material also appears in [3], pp. 162–164.)
  8. E. M. McCreight and A. R. Meyer, “Classes of Computable Functions Defined by Bounds on Computation: Preliminary Report.” Conference Record of ACM Symposium on Theory of Computing, Marina del Rey, Calif., May 1969, pp. 79–88.
  9. W. J. Savitch, “Deterministic Simulation of Non-deterministic Turing Machines (Detailed Abstract). Conference Record of ACM Symposium on Theory of Computing, Marina del Rey, Calif., May 1969, pp. 247–248.

Read off the page by a vision model reading the page images using olmOCR-2-7B-1025-FP8.