Relationships Between Nondeterministic and Deterministic Tape Complexities

About this paperEnglish中文日本語beside Englishbeside 中文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.

Mối quan hệ giữa độ phức tạp băng từ không tất định và tất định*

Walter J. Savitch

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

Nhận ngày 29 tháng 8, 1969

Lượng bộ nhớ cần thiết để mô phỏng một máy Turing bị giới hạn băng từ không tất định trên một máy Turing tất định được nghiên cứu. Các kết quả bao gồm những điều sau: Định lý. Một máy Turing bị giới hạn băng từ L(n)L(n) không tất định có thể được mô phỏng bởi một máy Turing bị giới hạn băng từ [L(n)]2[L(n)]^2 tất định, với điều kiện L(n)≥log⁡2nL(n) \geq \log_2 n. Các tính toán của các máy không tất định được chỉ ra là tương ứng với các phép luồn qua của một số mê cung nhất định. Sự tương ứng này được sử dụng để tạo ra một tập cụ thể, cụ thể là tập tất cả các mã hóa của các mê cung có thể luồn qua, sao cho, nếu có bất kỳ tập nào phân biệt các lớp độ phức tạp băng từ không tất định với các lớp độ phức tạp băng từ tất định, thì đây là một tập như vậy.

Giới thiệu

Một bài toán mở nổi tiếng trong lý thuyết ngôn ngữ hình thức và độ phức tạp tính toán là quyết định liệu có tồn tại hay không một ngôn ngữ phi ngữ cảnh nhạy cảm không tất định, tức là quyết định liệu có hay không một tập được chấp nhận bởi một ôtômát bị giới hạn tuyến tính không tất định, nhưng không được chấp nhận bởi bất kỳ máy tất định tương tự nào. Trong bài báo này, chúng tôi đưa ra một số câu trả lời từng phần cho một khái quát hóa tự nhiên của bài toán này. Chúng tôi cố gắng trả lời câu hỏi sau: "Cho một máy Turing bị giới hạn băng không tất định chấp nhận một tập AA, một máy Turing tất định cần bao nhiêu bộ nhớ bổ sung để nhận biết AA?"

Cụ thể hơn, chúng tôi chỉ ra rằng bất kỳ máy Turing bị giới hạn băng L(n)L(n) không tất định nào cũng có thể được mô phỏng bởi một máy Turing bị giới hạn băng [L(n)]2[L(n)]^2 tất định, với điều kiện L(n)≥log⁡2nL(n) \geq \log_2 n. Do đó, đặc biệt, mọi ngôn ngữ nhạy cảm ngữ cảnh đều có thể được nhận biết trong bộ nhớ tất định n2n^2, trong đó nn là độ dài của đầu vào. Như một hệ quả của chứng minh định lý này, chúng tôi thu được rằng nếu một ngôn ngữ nhạy cảm ngữ cảnh được

  • Công trình này dựa trên một phần luận án tiến sĩ của tác giả tại Khoa Toán học của University of California, Berkeley. Phần lớn các kết quả đã được công bố trong [9]. Một phần của nghiên cứu này được thực hiện khi tác giả là National Science Foundation Graduate Fellow.

chấp nhận bởi một ôtômát bị giới hạn tuyến tính không tất định trong thời gian đa thức, thì ngôn ngữ đó được chấp nhận bởi một máy Turing tất định trong bộ nhớ nlog⁡2nn \log_2 n. Cũng chỉ ra rằng nếu các lớp độ phức tạp băng không tất định và tất định bằng nhau đối với các hàm "nhỏ", thì chúng cũng bằng nhau đối với các hàm "lớn".

Khái niệm mê cung được hình thức hóa và các tính toán của các máy không tất định được liên hệ với các cách đi xuyên qua của một số mê cung nhất định. Mối liên hệ này được sử dụng để thu được một tập cụ thể, cụ thể là tập các mã hóa của các mê cung có thể đi xuyên qua, sao cho, nếu có bất kỳ tập nào phân biệt các lớp độ phức tạp băng không tất định với các lớp độ phức tạp băng tất định, thì đây là một tập như vậy. Nghĩa là, có một máy Turing không tất định chấp nhận các mã hóa của các mê cung có thể đi xuyên qua trong bộ nhớ log⁡2n\log_2 n. Ngoài ra, nếu có một máy Turing tất định chấp nhận chúng trong cùng bộ nhớ, log⁡2n\log_2 n, thì với mọi hàm bộ nhớ L(n)≥log⁡2nL(n) \geq \log_2 n, bất kỳ máy Turing bị giới hạn băng L(n)L(n) không tất định nào cũng có thể được kích thích bởi một máy Turing bị giới hạn băng L(n)L(n) tất định.

Mô hình máy

Thiết bị được nghiên cứu trong bài báo này là Máy Turing nhiều băng. Theo thuật ngữ của [3], đây là một máy Turing với hữu hạn băng lưu trữ vô hạn hai chiều và một băng đầu vào chỉ đọc được cung cấp các dấu kết thúc. Chúng tôi chỉ đưa ra một định nghĩa không chính thức về thiết bị này. Một máy Turing nhiều băng (sau đây gọi đơn giản là máy Turing) là một bộ điều khiển trạng thái hữu hạn được gắn với một băng đầu vào chỉ đọc và hữu hạn các băng lưu trữ đọc/ghi. Các băng được chia thành các ô. Mỗi ô của một băng lưu trữ có khả năng chứa một ký hiệu từ bảng chữ cái băng lưu trữ hữu hạn Γ\Gamma. Băng đầu vào sẽ luôn chứa một chuỗi hữu hạn ww gồm các ký hiệu từ bảng chữ cái đầu vào hữu hạn Σ\Sigma. Chuỗi ww được phân cách bởi hai ký hiệu không thuộc Σ\Sigma được gọi là dấu kết thúc bên trái và dấu kết thúc bên phải. Mỗi băng có một đầu đọc giao tiếp với bộ điều khiển hữu hạn.

Tại bất kỳ thời điểm nào, mỗi đầu đọc sẽ quét một ô trên băng của nó và bộ điều khiển sẽ ở một trạng thái. Phụ thuộc vào trạng thái này và các ký hiệu được các đầu đọc quét, máy sẽ, trong một bước, chuyển sang một trạng thái khác, ghi đè một ký hiệu trên ô đang được quét của mỗi băng lưu trữ của nó, rồi dịch chuyển một số đầu đọc của nó (có thể bao gồm cả đầu đọc đầu vào) sang trái hoặc phải một ô. Bộ điều khiển hữu hạn được thiết kế sao cho đầu đọc đầu vào sẽ không bao giờ rời khỏi đoạn băng chứa ww và các dấu kết thúc. Máy được gọi là tất định nếu chỉ có một hành động khả dĩ tại mỗi bước. Máy được gọi là không tất định nếu có hữu hạn hành động khả dĩ tại mỗi bước.

Một số trạng thái được phân biệt và gọi là các trạng thái chấp nhận và một trạng thái được phân biệt và gọi là trạng thái ban đầu. Chúng tôi nói máy tất định ZZ chấp nhận chuỗi đầu vào ww trên Σ\Sigma nếu ZZ đi vào một trạng thái chấp nhận sau hữu hạn bước, khi bắt đầu ở trạng thái ban đầu, với tất cả các băng lưu trữ trống, ww trên băng đầu vào và đầu đọc đầu vào đang quét dấu kết thúc bên trái. Định nghĩa này cũng giống trong trường hợp ZZ là không tất định ngoại trừ việc chúng ta chỉ yêu cầu rằng có một chuỗi hữu hạn các bước khả dĩ dẫn đến một trạng thái chấp nhận, bắt đầu từ cấu hình ban đầu được mô tả ở trên.

Định nghĩa. Giả sử L(n)L(n) là một hàm trên các số tự nhiên, ZZ là một máy Turing (tất định hoặc không tất định), và AA là một tập các chuỗi trên bảng chữ cái đầu vào của ZZ. ZZ được nói là chấp nhận tập AA trong bộ nhớ L(n)L(n) nếu

(i) với mỗi chuỗi ww trong AA, có ít nhất một tính toán khả dĩ của ZZ chấp nhận ww và trong đó mỗi đầu đọc băng lưu trữ quét nhiều nhất L(∣w∣)L(|w|) ô, và

(ii) ZZ không chấp nhận chuỗi nào không thuộc AA. ∣w∣|w| là độ dài của chuỗi, ww.

Trong bài báo này chúng tôi chỉ xem xét tốc độ tăng trưởng của các hàm bộ nhớ. Nghĩa là, đối với mục đích của chúng tôi, các hàm bộ nhớ L(n)L(n) và ϵL(n)\epsilon L(n) là giống nhau, với mọi hằng số ϵ>0\epsilon > 0. Sự đồng nhất này của các hàm xuất phát từ thực tế rằng các máy Turing của chúng tôi được phép có các bảng chữ cái băng lưu trữ hữu hạn tùy ý. Vì vậy, bất kỳ máy Turing nào hoạt động với bộ nhớ L(n)L(n) đều có thể được sửa đổi để hoạt động với bộ nhớ ϵL(n)\epsilon L(n) và vẫn chấp nhận cùng một tập băng. (Xem, ví dụ, [3].) Chúng tôi giả sử người đọc quen thuộc với các kỹ thuật giảm băng như vậy.

Trong phần tiếp theo, đôi khi sẽ thuận tiện khi giả sử rằng các hàm lưu trữ là "tốt". Điều kiện về tính tốt mà chúng ta muốn là các hàm phải đo được [4].

Định nghĩa. Một hàm L(n)L(n) được gọi là đo được nếu tồn tại một máy Turing chỉ với một băng lưu trữ sao cho, với bất kỳ đầu vào nào có độ dài nn, máy sẽ dừng sau một quá trình tính toán trong đó đầu đọc của băng lưu trữ quét chính xác L(n)L(n) ô.

Có vẻ như tất cả các hàm lưu trữ thông dụng L(n)≥log⁡2nL(n) \geq \log_2 n đều đo được. Cụ thể, mọi đa thức theo nn và log⁡2n\log_2 n đều đo được.

Mô phỏng xác định của các máy Turing không xác định

Định lý 1. Nếu một tập, AA, được chấp nhận bởi một máy Turing không xác định, ZNZ_N, trong phạm vi lưu trữ L(n)≥log⁡2nL(n) \geq \log_2 n, thì AA được chấp nhận bởi một máy Turing xác định nào đó, ZDZ_D, trong phạm vi lưu trữ [L(n)]2[L(n)]^2.

Chứng minh. Định lý được chứng minh bằng cách đưa ra một thuật toán theo đó ZDZ_D có thể mô phỏng các phép tính của ZNZ_N. Thuật toán này tương tự như thuật toán được Lewis, Stearns, và Hartmanis [7] sử dụng để chỉ ra rằng mọi ngôn ngữ phi ngữ cảnh đều được chấp nhận bởi một máy Turing xác định trong phạm vi lưu trữ (log⁡2n)2(\log_2 n)^2.

Giả sử máy Turing ZNZ_N có kk băng lưu trữ, bảng chữ cái của băng lưu trữ Γ\Gamma, và tập trạng thái bên trong QQ. Gọi Δ=Q∪Γ∪{1,2,∗,↓}\Delta = Q \cup \Gamma \cup \{1, 2, *, \downarrow\}, trong đó ↓\downarrow và ∗* là hai ký hiệu mới. Một mô tả tức thời (ID) của ZNZ_N là một chuỗi trên Δ\Delta có dạng pq u₁ ↓ v₁ u₂ ↓ v₂ ... uₖ ↓ vₖ, trong đó p là một số ở dạng ký hiệu dyadic¹ chỉ vị trí của đầu đọc đầu vào của ZNZ_N, q là một phần tử của Q chỉ ra rằng bộ điều khiển hữu hạn của ZNZ_N đang ở trạng thái q, và ui,viu_i, v_i là các phần tử của Γ∗\Gamma^*, i=1,2,...,ki = 1, 2, ..., k. ui↓viu_i ↓ v_i được hiểu là uiviu_i v_i là nội dung của băng lưu trữ thứ i của ZNZ_N và đầu đọc trên băng này đang quét ký hiệu đầu tiên của chuỗi viv_i. Vì vậy, ngoại trừ nội dung của băng đầu vào, một ID của ZNZ_N là một mô tả hoàn chỉnh về một cấu hình của ZNZ_N.

Vì ZNZ_N chấp nhận tập AA trong phạm vi lưu trữ L(n)≥log⁡2nL(n) \geq \log_2 n, nên suy ra rằng với mỗi chuỗi w có độ dài n được ZNZ_N chấp nhận, tồn tại một phép tính của ZNZ_N chấp nhận w trong đó mỗi ID có độ dài không vượt quá cL(n)cL(n). Hơn nữa, vì mỗi ID có độ dài nhiều nhất là cL(n)cL(n), phép tính cần không quá 2c′L(n)2^{c'L(n)} bước. c và c′c' là các hằng số chỉ phụ thuộc vào ZNZ_N chứ không phụ thuộc vào đầu vào w.

Trước hết chúng ta đưa ra thuật toán cho trường hợp: L(n)L(n) là đo được.

Với một đầu vào có độ dài n, ZDZ_D khởi tạo phép tính của nó bằng cách chia một trong các băng lưu trữ của nó thành [c′L(n)]+1[c'L(n)] + 1 khối (được gọi là các thanh ghi), mỗi khối có độ dài [cL(n)][cL(n)], tiếp theo là [c′L(n)]+1[c'L(n)] + 1 khối (được gọi là các thẻ), mỗi khối có khả năng lưu trữ hoặc 0 hoặc 1. Nó có thể dễ dàng thực hiện việc này nếu L(n)L(n) là đo được. [y] là số nguyên lớn nhất không vượt quá y. Lưu ý rằng mỗi thanh ghi có khả năng chứa bất kỳ ID nào của ZNZ_N trong đó phần không trắng của mỗi băng lưu trữ nhiều nhất là L(n)L(n). ZDZ_D có một băng lưu trữ thứ hai cho công việc tạm thời.

Ý tưởng của thuật toán như sau. ZDZ_D có chuỗi w làm đầu vào. Trong quá trình của thuật toán, ZDZ_D sẽ xem xét hai ID I, I′′I'' được lưu trong các thanh ghi cụ thể. Với một m được chọn trước, nó sẽ cần kiểm tra xem, với đầu vào w, ZNZ_N có thể trong 2m2^m bước thay đổi cấu hình của nó từ I sang I′′I'' hay không. Hơn nữa, ZDZ_D sẽ phải thực hiện nhiệm vụ này chỉ sử dụng m thanh ghi. ZDZ_D tiến hành như sau. Nó duyệt qua (theo một cách có hệ thống) tất cả các ID I′I' của ZNZ_N và với mỗi I′I', kiểm tra xem có một tính toán gồm không quá 2m−12^{m-1} bước từ I đến I′I', và một tính toán gồm không quá 2m−12^{m-1} bước từ I′I' đến I′′I'' hay không. ZDZ_D cần một thanh ghi để theo dõi I′I', khiến nó còn lại m−1m - 1 thanh ghi. Vì vậy ZDZ_D đã giảm nhiệm vụ mô phỏng 2m2^m chuyển động của ZNZ_N sử dụng m thanh ghi thành mô phỏng 2m−12^{m-1} chuyển động của ZNZ_N sử dụng m−1m - 1 thanh ghi. Sau đó ZDZ_D giảm mỗi tính toán gồm 2m−12^{m-1} bước thành hai tính toán gồm 2m−22^{m-2} bước. ZDZ_D tiếp tục giảm độ dài của các tính toán mà nó cần kiểm tra cho đến khi nó chỉ cần kiểm tra, với các ID thích hợp I1I_1 và I2I_2, liệu với đầu vào w, ZNZ_N có thể trong một bước đi từ I1I_1 đến I2I_2 hay không. Điều này nó có thể dễ dàng thực hiện bằng cách sử dụng không gian lưu trữ bằng không. Bây giờ nếu có bất kỳ tính toán chấp nhận nào của ZNZ_N, thì có một tính toán chấp nhận trong 2c′L(n)2^{c'L(n)} bước. Vì vậy ZDZ_D có thể mô phỏng tính toán này bằng cách sử dụng c′L(n)c'L(n) thanh ghi hoặc khoảng [L(n)]2[L(n)]^2 ô của băng lưu trữ.

Bây giờ chúng ta định nghĩa một số ký hiệu cho phát biểu hình thức của thuật toán. Vì các ID là các chuỗi trên một bảng chữ cái hữu hạn, Δ\Delta, chúng có thể được xem như các số nguyên trong ký hiệu m-adic, trong đó m là số ký hiệu trong Δ\Delta. Cụ thể hơn, nếu Δ={a1,a2,...,am}\Delta = \{a_1, a_2, ..., a_m\} thì chuỗi aikaik−1⋯ai0a_{i_k} a_{i_{k-1}} \cdots a_{i_0} sẽ biểu diễn số ∑j=0kijmj\sum_{j=0}^k i_j m^j. Chúng ta sẽ không phân biệt giữa một chuỗi và số mà nó biểu diễn.

¹ Chuỗi dldl−1⋯d0d_l d_{l-1} \cdots d_0 trên bảng chữ cái {1, 2} là biểu diễn dyadic của số ∑i=0ldi2i\sum_{i=0}^l d_i 2^i.

ĐỊNH NGHĨA. Nếu II và I′I' là các ID của ZNZ_N và nếu ZNZ_N có thể trong một bước, với đầu vào ww, chuyển từ cấu hình II sang cấu hình I′I', hoặc nếu I=I′I = I', thì ta sẽ viết I→wI′I \xrightarrow{w} I'. Trong thuật toán, ta sẽ kiểm tra xem I→wI′I \xrightarrow{w} I' có đúng với các chuỗi tùy ý I,I′I, I' trên Δ\Delta hay không. Nếu II hoặc I′I' không phải là một ID của ZNZ_N, thì phép kiểm tra thất bại.

Trong thuật toán sau, xix_i biểu thị nội dung của thanh ghi thứ ii và TiT_i biểu thị nội dung của thẻ thứ ii [1≤i≤c′L(n)+1][1 \leq i \leq c'L(n) + 1]. ZDZ_D có một chuỗi ww làm đầu vào và mọi tham chiếu đến các tính toán của ZNZ_N đều có nghĩa là các tính toán của ZNZ_N dưới đầu vào ww và trong đó phần không trắng của mỗi băng công việc luôn dài không quá L(∣w∣)L(|w|) ô. Tại bất kỳ thời điểm nào trong tính toán của ZDZ_D, nếu Ti=1T_i = 1, thì tồn tại một tính toán của ZNZ_N từ ID bắt đầu đến xix_i.

THUẬT TOÁN CHO MÁY ZDZ_D

Tóm tắt ký hiệu

ww là chuỗi đầu vào. nn là độ dài của ww. rr là số nguyên nhỏ nhất sao cho r≥c′L(n)r \geq c'L(n). c′c' là số sao cho, với ww làm đầu vào, nếu ZNZ_N chấp nhận ww tại bất kỳ thời điểm nào, thì ZNZ_N chấp nhận ww trong 2c′L(n)2^{c'L(n)} bước. I0I_0 là ID ban đầu của ZNZ_N. NN là số nguyên lớn nhất có biểu diễn mm-adic có thể được lưu trong một thanh ghi. xix_i là nội dung của thanh ghi thứ ii. TiT_i là nội dung của thẻ thứ ii.

D0 (Khởi tạo). Tính rr và thiết lập r+1r + 1 thanh ghi và thẻ. Với i=1,2,...,ri = 1, 2, ..., r, đặt xi←1x_i \leftarrow 1 và Ti←0T_i \leftarrow 0. Đặt xr+1←I0x_{r+1} \leftarrow I_0 (ID ban đầu) và Tr+1←1T_{r+1} \leftarrow 1.

D1 (Kiểm tra). Nếu mỗi Ti=1T_i = 1, chuyển đến D3. Ngược lại, đặt jj là chỉ số nhỏ nhất sao cho Tj=0T_j = 0. Kiểm tra: Với một chỉ số hh nào đó, Th=1T_h = 1 và xh→wxjx_h \xrightarrow{w} x_j. Có: Chuyển đến D2. Không: Chuyển đến D3.

D2 (Xóa bộ nhớ) (jj như trong D1). Nếu xjx_j là một ID chấp nhận, ACCEPT. Ngược lại, đặt Tj←1T_j \leftarrow 1 và với i=1,2,...,j−1i = 1, 2, ..., j - 1 đặt xi←1x_i \leftarrow 1 và Ti←0T_i \leftarrow 0. Chuyển đến D1.

D3 (Quay lui). Nếu xi=Nx_i = N với mỗi i≤ri \leq r, REJECT. Ngược lại, đặt kk là chỉ số nhỏ nhất sao cho xk≠Nx_k \neq N. Đặt xk←xk+1x_k \leftarrow x_k + 1, Tk←0T_k \leftarrow 0, và với i=1,2,...,k−1i = 1, 2, ..., k - 1 đặt xi←1x_i \leftarrow 1, Ti←0T_i \leftarrow 0. Chuyển đến D1.

Rõ ràng thuật toán hoạt động với bộ nhớ c′′[L(n)]2c''[L(n)]^2, trong đó c′′c'' là một hằng số chỉ phụ thuộc vào ZNZ_N. Bằng các kỹ thuật chuẩn [3], hằng số này có thể được giảm xuống còn một. Một phép quy nạp đơn giản theo số bước đã hoàn thành cho thấy rằng nếu ZDZ_D chấp nhận một đầu vào ww, thì máy không tất định ZNZ_N cũng chấp nhận. Vì vậy, chỉ cần chỉ ra rằng ZDZ_D chấp nhận mọi chuỗi mà ZNZ_N chấp nhận. Để chỉ ra điều này, chúng ta cần một số bổ đề sơ bộ. Các bổ đề dễ phát biểu hơn trong trường hợp máy không dừng khi nó chấp nhận. Vì vậy, giả sử D2 (Xóa bộ nhớ) đã được sửa đổi để bỏ dòng đầu tiên ("If xjx_j is an accepting ID, ACCEPT"). Ta sẽ nói rằng ZDZ_D đang ở cấu hình

⟨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

nếu nó sắp thực thi D1, và nội dung của các thanh ghi và các thẻ lần lượt là x1,x2,...,xr+1x_1, x_2, ..., x_{r+1} và T1,T2,...,Tr+1T_1, T_2, ..., T_{r+1}.

Bổ đề 1. (Đối với D2 đã sửa đổi). Với mỗi chỉ số i(i=1,2,...,r)i (i = 1, 2, ..., r) và mỗi số nguyên xx (x=1,2,...,Nx = 1, 2, ..., N), nếu tại một thời điểm nào đó trong một phép tính của ZDZ_D cấu hình của ZDZ_D là

⟨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)

với một số xi+1,xi+2,...,xrx_{i+1}, x_{i+2}, ..., x_r và một số Ti+1,Ti+2,...,TrT_{i+1}, T_{i+2}, ..., T_r, thì tại một thời điểm sau đó cấu hình sẽ là

⟨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)

hoặc

⟨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)

trong đó jj là chỉ số nhỏ nhất trong (1) sao cho j>ij > i và Tj=0T_j = 0. (Nếu không tồn tại jj như vậy, thì (2) xảy ra.)

Thuật toán đang cố gắng thiết lập rằng tồn tại một phép tính của ZNZ_N từ ID ban đầu đến xjx_j. Nó cố gắng thực hiện điều này bằng cách chỉ sử dụng các thanh ghi ở bên trái của xjx_j. Vì vậy, bổ đề nói rằng ZDZ_D có thể đưa bất kỳ ID nào vào bất kỳ thanh ghi nào, nếu cần.

Chứng minh. Một chứng minh hình thức sẽ sử dụng quy nạp trên ii và xx. Chúng tôi liệt kê một số cấu hình tiêu biểu trong một tính toán. Điều này sẽ làm rõ bổ đề. Lưu ý rằng vì NN là một chuỗi mà tất cả các chữ số của nó đều giống nhau, NN không phải là một ID và do đó, x↑wNx \uparrow_w N không đúng với bất kỳ số nguyên xx nào. Giả sử ZDZ_D được khởi động trong cấu hình (1) và tại không thời điểm nào sau đó ZDZ_D nhận các cấu hình (3). Khi đó ZDZ_D sẽ nhận các cấu hình sau:

⟨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

trong đó Ti=0T_i = 0 hoặc 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

Cuối cùng, thông qua D3, ZDZ_D nhận (2) như mong muốn.

Bổ đề 2. (Đối với D2 đã sửa đổi). Giả sử tại một thời điểm nào đó trong một tính toán, cấu hình của ZDZ_D là

⟨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)

với Tj=0T_j = 0 và các giá trị bất kỳ cho các xx và các TT còn lại. Nếu với một chỉ số nào đó q,Tq=1q, T_q = 1 và có một tính toán của ZNZ_N gồm không quá 2j2^j bước từ xqx_q đến xx, thì tại một thời điểm sau đó cấu hình của ZDZ_D sẽ là (4) với Tj=1T_j = 1.

Bổ đề phát biểu rằng jj thanh ghi là đủ để ZDZ_D kiểm tra một tính toán gồm 2j2^j bước của ZNZ_N.

Bổ đề 3. (Đối với D2 đã sửa đổi). Giả sử tại một thời điểm nào đó trong một tính toán, cấu hình của ZDZ_D là

⟨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)

với các giá trị bất kỳ của các xx và TT. Nếu với một chỉ số nào đó q,Tq=1q, T_q = 1 và có một tính toán của ZNZ_N gồm không quá 2j2^j bước từ xqx_q đến xx, thì tại một thời điểm sau đó cấu hình của ZDZ_D sẽ là

⟨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)

Chứng minh của Cả Hai Bổ đề. Bổ đề 2 và 3 về cơ bản là một bổ đề duy nhất và được chứng minh đồng thời bằng quy nạp trên jj. Trường hợp cơ sở, j=1j = 1, là rõ ràng. Giả sử cả hai bổ đề đúng khi jj được thay bằng j−1j - 1. Chúng tôi sẽ chứng minh rằng Bổ đề 2 đúng với jj.

Giả sử ZDZ_D đang ở cấu hình (4) với Tj=0T_j = 0 và với một chỉ số nào đó, qq, có một tính toán của ZNZ_N từ xqx_q đến xx gồm nhiều nhất 2j2^j bước. Phân rã tính toán này từ xqx_q đến xx, ta thu được rằng tồn tại một yy sao cho có các tính toán gồm nhiều nhất 2j−12^{j-1} bước từ xqx_q đến yy và từ yy đến xx. Theo Bổ đề 1, suy ra rằng, tại một thời điểm sau đó, hoặc cấu hình của ZDZ_D là

⟨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

với Tj−1=0T_{j-1} = 0 hoặc cấu hình là (4) với Tj=1T_j = 1. Cấu hình (4) với Tj=1T_j = 1 là kết quả mong muốn. Vì vậy, giả sử ZDZ_D đã nhận cấu hình (7) với Tj−1=0T_{j-1} = 0. Theo giả thiết quy nạp trên Bổ đề 2, suy ra rằng tại một thời điểm vẫn sau đó nữa, cấu hình của ZDZ_D sẽ là (7) với Tj−1=1T_{j-1} = 1. Nếu sau đó áp dụng giả thiết quy nạp trên Bổ đề 3, ta thu được rằng tại một thời điểm sau đó nữa, cấu hình của ZDZ_D sẽ là (4) với Tj=1T_j = 1. Vì vậy Bổ đề 2 đúng với jj. Bổ đề 3 với jj được thiết lập theo cách tương tự. Do đó, giả thiết quy nạp được thiết lập và chứng minh của cả hai bổ đề được hoàn thành.

Sử dụng các Bổ đề 1 và 2, ta dễ dàng hoàn thành chứng minh của định lý. Giả sử máy không tất định ZNZ_N chấp nhận ww. Ta phải chỉ ra rằng ZDZ_D chấp nhận ww. Vì ZNZ_N chấp nhận ww, tồn tại một ID chấp nhận, xx, của ZNZ_N sao cho có một tính toán, với ww là đầu vào, gồm nhiều nhất 2r2^r bước từ I0I_0 (ID ban đầu của ZNZ_N) đến xx. Theo Bổ đề 1, suy ra rằng ZDZ_D cuối cùng sẽ nhận cấu hình

⟨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

với Tr=0T_r = 0. Theo Bổ đề 2, suy ra rằng tại một thời điểm sau đó ZDZ_D sẽ nhận cấu hình (8) với Tr=1T_r = 1. Tất cả điều này là đối với D2 đã sửa đổi. D2 chưa sửa đổi sẽ chấp nhận ww thay vì đặt Tr←1T_r \leftarrow 1. Điều này hoàn thành chứng minh Định lý 1 trong trường hợp: L(n)L(n) đo được.

Nếu L(n)L(n) không đo được, thì thuật toán trên phải được thay đổi, vì ZDZ_D không nhất thiết có thể đánh dấu các khối có độ dài cL(n)cL(n) trong phạm vi bộ nhớ tỷ lệ với [L(n)]2[L(n)]^2. Tuy nhiên, nếu bằng cách nào đó ZDZ_D được cung cấp giá trị của L(n)L(n), thì theo thủ tục trên, ZDZ_D có thể xác định liệu ZNZ_N có chấp nhận đầu vào ww trong phạm vi bộ nhớ L(n)L(n) hay không. Vì vậy ZDZ_D hoạt động như sau. Đầu tiên ZDZ_D giả sử L(n)=1L(n) = 1. Nếu ZNZ_N chấp nhận trong phạm vi bộ nhớ L(n)=1L(n) = 1, thì ZDZ_D sẽ chấp nhận. Nếu ZNZ_N không chấp nhận trong phạm vi bộ nhớ 1, thì tiếp theo ZDZ_D giả sử L(n)=2L(n) = 2. Nếu ZNZ_N chấp nhận trong phạm vi bộ nhớ 2, thì ZDZ_D chấp nhận. Nếu không, thì tiếp theo ZDZ_D giả sử L(n)=3L(n) = 3. ZDZ_D tiếp tục theo cách này bằng cách thử các giá trị ngày càng lớn hơn của L(n)L(n). Nếu ZNZ_N chấp nhận đầu vào ww, thì cuối cùng ZDZ_D sẽ tìm được giá trị đúng của L(n)L(n) và chấp nhận ww trong phạm vi bộ nhớ tỷ lệ với [L(n)]2[L(n)]^2. Nếu ZNZ_N không chấp nhận ww, thì ZDZ_D tính toán vô hạn trên đầu vào ww. Điều này hoàn thành chứng minh của Định lý 1.

Các ngôn ngữ phụ thuộc ngữ cảnh chính xác là những tập được chấp nhận bởi các máy Turing không tất định trong phạm vi bộ nhớ L(n)=nL(n) = n (xem, ví dụ, [3]). Vì vậy, đặt L(n)=nL(n) = n trong Định lý 1, ta thu được,

Hệ quả 1. Mọi ngôn ngữ phụ thuộc ngữ cảnh đều được chấp nhận bởi một máy Turing tất định nào đó trong phạm vi bộ nhớ n2n^2.

Định lý 1 có thể được tổng quát hóa như sau.

Định lý 2. Nếu một tập, AA, được chấp nhận bởi một máy Turing không tất định trong phạm vi bộ nhớ L(n)L(n) và thời gian T(n)T(n), thì AA được chấp nhận bởi một máy Turing tất định nào đó trong phạm vi bộ nhớ L(n)log⁡2T(n)L(n) \log_2 T(n).

Định nghĩa. Một máy Turing, ZZ, được nói là chấp nhận một tập, AA, trong phạm vi bộ nhớ L(n)L(n) và thời gian T(n)T(n) với điều kiện rằng

(i) với mỗi ww trong AA, có ít nhất một phép tính của ZZ chấp nhận ww, thực hiện không quá T(n)T(n) bước, và trong đó mỗi đầu băng làm việc quét không quá L(n)L(n) ô, trong đó nn là độ dài của ww, và với điều kiện rằng

(ii) ZZ chấp nhận không có chuỗi nào không thuộc AA.

Chứng minh Định lý 2. Phân tích chứng minh của Định lý 1 cho thấy rằng thuật toán sử dụng một cận về bộ nhớ của máy không xác định để thu được một cận, cụ thể là hàm mũ theo bộ nhớ, về thời gian của máy không xác định. Sau đó nó đánh dấu [log⁡2T(n)][\log_2 T(n)] khối bộ nhớ, trong đó T(n)T(n) là một cận về thời gian. Rõ ràng, nếu cận thời gian dễ tính toán, thuật toán có thể được sửa đổi để sử dụng nó làm cận về thời gian. Khi đó ta sẽ thu được Định lý 2. Nếu hàm thời gian không dễ tính toán, thì ta sử dụng cùng một loại thủ thuật như thủ thuật được dùng cho các hàm không đo được trong chứng minh của Định lý 1.

Hệ quả 2. Nếu một ngôn ngữ phụ thuộc ngữ cảnh được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ tuyến tính và thời gian đa thức, thì nó được chấp nhận bởi một máy Turing xác định nào đó trong phạm vi bộ nhớ nlog⁡2nn \log_2 n.

Định lý sau đây nói rằng đối với mọi hàm bộ nhớ "có tính chất tốt" L(n)L(n), nếu mọi máy Turing bị giới hạn băng L(n)L(n) không xác định có thể được mô phỏng bởi một máy Turing bị giới hạn băng L(n)L(n) xác định, thì đối với mọi hàm bộ nhớ lớn hơn, độ phức tạp băng không xác định và xác định là như nhau.

ĐỊNH LÝ 3. Giả sử rằng L(n)L(n) và H(n)H(n) là đo được, rằng L(n)L(n) là đơn điệu tăng và không bị chặn, và rằng log⁡2n≤L(n)≤H(n)\log_2 n \leq L(n) \leq H(n), với mọi nn. Gọi hàm k(n)k(n) được định nghĩa như sau. Với mỗi số tự nhiên nn, k(n)k(n) là số tự nhiên nhỏ nhất sao cho H(n)≤L[k(n)]H(n) \leq L[k(n)].

Giả sử thêm rằng đối với bất kỳ tập hợp nào, AA, nếu AA được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ L(n)L(n), thì AA được chấp nhận bởi một máy Turing xác định trong phạm vi bộ nhớ L(n)L(n). Khi đó suy ra rằng đối với bất kỳ tập hợp nào, BB, nếu BB được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ H(n)H(n), thì BB được chấp nhận bởi một máy Turing xác định trong phạm vi bộ nhớ L[k(n)]L[k(n)].

Định lý này mạnh hơn một chút so với vẻ ngoài của nó. Đối với hầu hết các hàm bộ nhớ thông dụng, LL, tồn tại một hằng số cc sao cho cL[k(n)]≤H(n)≤L[k(n)]cL[k(n)] \leq H(n) \leq L[k(n)], với mọi HH và nn. Vì vậy, trong các trường hợp này, kết luận có thể được củng cố để nói rằng bất kỳ tập hợp nào được chấp nhận trong phạm vi bộ nhớ không xác định H(n)H(n) có thể được chấp nhận trong phạm vi bộ nhớ xác định H(n)H(n). Cụ thể,

HỆ QUẢ 3. Giả sử L(n)L(n) là một đa thức theo log⁡2n,n\log_2 n, n và cnc^n, với một hằng số cc nào đó. Giả sử thêm rằng đối với bất kỳ tập hợp nào, AA, nếu AA được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ L(n)L(n), thì AA được chấp nhận bởi một máy Turing xác định nào đó trong phạm vi bộ nhớ L(n)L(n).

Khi đó suy ra rằng đối với bất kỳ hàm đo được nào H(n)≥L(n)H(n) \geq L(n) và bất kỳ tập hợp nào, BB, nếu BB được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ H(n)H(n), thì BB được chấp nhận bởi một máy Turing xác định nào đó trong phạm vi bộ nhớ H(n)H(n).

Trong số các điều khác, hệ quả nói rằng nếu mọi ngôn ngữ phụ thuộc ngữ cảnh đều được chấp nhận bởi một ôtômát giới hạn tuyến tính xác định (tức là máy Turing xác định với cận bộ nhớ nn), thì độ phức tạp băng không xác định và xác định là như nhau đối với mọi cận băng đo được H(n)≥nH(n) \geq n.

Chứng minh Hệ quả 3. Có thể dễ dàng kiểm tra rằng với mọi đa thức L(n)L(n) như vậy, tồn tại một hằng số cc sao cho L(n)/L(n+1)≥cL(n)/L(n+1) \geq c với mọi nn. Do đó cL[k(n)]≤L[k(n)−1]cL[k(n)] \leq L[k(n)-1]. k(n)k(n) là hàm được định nghĩa trong phát biểu của định lý. Theo định nghĩa của k(n)k(n), L[k(n)−1]≤H(n)L[k(n)-1] \leq H(n). Do đó cL[k(n)]≤H(n)cL[k(n)] \leq H(n).

Giả sử giả thuyết của hệ quả đúng và giả sử BB được chấp nhận bởi một máy Turing không tất định trong phạm vi bộ nhớ H(n)H(n). Theo Định lý 3, BB được chấp nhận bởi một máy Turing tất định trong phạm vi bộ nhớ L[k(n)]L[k(n)]. Vì vậy, bằng các kỹ thuật rút gọn băng tiêu chuẩn [3], suy ra rằng BB được chấp nhận bởi một máy Turing tất định trong phạm vi bộ nhớ cL[k(n)]cL[k(n)]. Cuối cùng, vì cL[k(n)]≤H(n)cL[k(n)] \leq H(n), điều này có nghĩa là BB được chấp nhận bởi một máy Turing tất định trong phạm vi bộ nhớ H(n)H(n).

Chứng minh Định lý 3. Giả sử giả thuyết của Định lý 3 đúng và giả sử BB là một tập được chấp nhận bởi một máy Turing không tất định, ZNHZ_N^H, trong phạm vi bộ nhớ H(n)H(n).

Chúng tôi sẽ xây dựng một máy tất định, ZDHZ_D^H, chấp nhận BB trong phạm vi bộ nhớ L[k(n)]L[k(n)].

Cho β\beta là một ký hiệu mới. Cho A={wβh∣w trong B vaˋ ∣w∣+h≥k(∣w∣)}A = \{ w\beta^h \mid w \text{ trong } B \text{ và } |w| + h \geq k(|w|) \}. Một máy Turing không tất định, ZNLZ_N^L, chấp nhận AA trong phạm vi bộ nhớ L(n)L(n) có thể được xây dựng như sau. Với đầu vào wβhw\beta^h, ZNLZ_N^L trước hết đánh dấu L(n)L(n) ô của bộ nhớ, trong đó n=∣wβh∣n = |w\beta^h|. Sau đó nó kiểm tra xem L(n)≥H(∣w∣)L(n) \geq H(|w|) hay không. Nếu điều này không đúng, thì n=∣w∣+h<k(∣w∣)n = |w| + h < k(|w|) và tính toán dừng lại. Nếu L(n)≥H(∣w∣)L(n) \geq H(|w|), thì ZNLZ_N^L mô phỏng ZNHZ_N^H để xem ww có thuộc BB hay không. Nếu ZNHZ_N^H chấp nhận, thì nó cũng chấp nhận. Vì L(n)≥H(∣w∣)L(n) \geq H(|w|), máy này sẽ chấp nhận AA trong phạm vi bộ nhớ L(n)L(n). Vì vậy, theo giả thuyết, tồn tại một máy tất định, ZDLZ_D^L, chấp nhận AA trong phạm vi bộ nhớ L(n)L(n). Hơn nữa, vì LL là đo được, chúng ta có thể giả sử rằng với mọi đầu vào có độ dài nn, ZDLZ_D^L dừng sau một tính toán trong đó nhiều nhất L(n)L(n) ô của băng bộ nhớ được quét. (Các định nghĩa của chúng tôi chỉ yêu cầu điều này khi máy chấp nhận đầu vào.)

Máy tất định, ZDHZ_D^H, chấp nhận BB trong phạm vi bộ nhớ L[k(n)]L[k(n)] hoạt động như sau. Với một đầu vào ww, ZDHZ_D^H mô phỏng ZDLZ_D^L hoạt động trên wβhw\beta^h với các giá trị khác nhau của hh. Trước tiên nó thử h=0h = 0. Nếu ZDLZ_D^L chấp nhận ww, thì ZDHZ_D^H cũng chấp nhận. Nếu không, nó thử h=1h = 1. Nếu ZDLZ_D^L chấp nhận wβw\beta, thì ZDHZ_D^H cũng chấp nhận. Nếu không, nó thử h=2h = 2. Nếu ZDLZ_D^L chấp nhận wβ2w\beta^2, thì ZDHZ_D^H cũng chấp nhận. Nếu không, nó thử h=3h = 3, và cứ tiếp tục như vậy. Nếu ww thuộc BB, thì cuối cùng ZDHZ_D^H sẽ tìm thấy giá trị hh nhỏ nhất sao cho ∣w∣+h≥k(∣w∣)|w| + h \geq k(|w|) và sẽ chấp nhận ww trong phạm vi bộ nhớ L(∣wβh∣)=L[k(∣w∣)]L(|w\beta^h|) = L[k(|w|)]. Điều này hoàn thành chứng minh của Định lý 3.

Một cách tự nhiên, người ta đặt câu hỏi liệu có hàm bộ nhớ nào mà các lớp độ phức tạp tất định và không tất định của nó bằng nhau hay không. Câu trả lời được đưa ra bởi Manuel Blum và là "có". Blum đã chỉ ra rằng có các hàm bộ nhớ L(n)L(n) lớn tùy ý sao cho một tập hợp được chấp nhận trong bộ nhớ tất định L(n)L(n) khi và chỉ khi nó được chấp nhận trong bộ nhớ không tất định L(n)L(n). Tuy nhiên, các hàm L(n)L(n) này không "có tính chất tốt" và Định lý 3 không áp dụng cho chúng. Chúng không đo được. Một phác thảo của chứng minh cho kết quả của Blum xuất hiện trong [8].

Người ta cũng có thể hỏi liệu có một hàm bộ nhớ (đủ lớn để có ý nghĩa) mà các lớp độ phức tạp tất định và không tất định của nó khác nhau hay không. Phần tiếp theo dành cho câu hỏi này. Tuy nhiên, chỉ có một câu trả lời chưa hoàn chỉnh được đưa ra, và câu hỏi vẫn còn bỏ ngỏ.

Mê cung và Máy Turing

Một cách không chính thức, một mê cung là một tập hợp các phòng được nối với nhau bởi các hành lang một chiều. Một số phòng được chỉ định là phòng đích và một phòng được chỉ định là phòng bắt đầu. Do đó, một mê cung là một đồ thị có hướng với một số nút hoặc phòng được phân biệt. Mê cung có thể luồn qua được nếu có một đường đi từ phòng bắt đầu đến một phòng đích nào đó.

Một máy Turing không tất định, với đầu vào ww, tạo ra một mê cung theo một cách tự nhiên. Các phòng của mê cung là các mô tả tức thời của máy và các hành lang được cho bởi hàm chuyển của máy. Nghĩa là có một hành lang từ phòng I1I_1 đến phòng I2I_2 nếu, với đầu vào ww, máy có thể trong một bước thay đổi cấu hình của nó từ I1I_1 sang I2I_2. Mô tả tức thời ban đầu của máy được chỉ định là phòng bắt đầu. Những mô tả tức thời bao gồm một trạng thái chấp nhận được chỉ định là các phòng đích. Máy sẽ chấp nhận đầu vào ww khi và chỉ khi mê cung tương ứng có thể luồn qua được.

Thuật toán mô phỏng một máy Turing không tất định, được đưa ra trong phần trước, thực sự là một phương pháp hiệu quả để xác định liệu mê cung tương ứng có thể luồn qua được hay không. Trong phần này, chúng tôi chỉ ra rằng nếu có thể tìm được một phương pháp đủ hiệu quả để "luồn qua" các mê cung, thì các máy tất định có thể mô phỏng các máy không tất định với cùng một bộ nhớ. Chính xác hơn, tập hợp các mê cung có thể luồn qua được, được mã hóa thích hợp, có thể được nhận biết bởi một máy Turing không tất định trong phạm vi bộ nhớ log⁡2n\log_2 n. Tập hợp này có thể được nhận biết bởi một máy Turing tất định nào đó trong phạm vi bộ nhớ log⁡2n\log_2 n khi và chỉ khi các máy Turing bị chặn bởi băng L(n)L(n) tất định có thể mô phỏng các máy Turing bị chặn bởi băng L(n)L(n) không tất định, với mọi L(n)≥log⁡2nL(n) \geq \log_2 n.

Định nghĩa. Một mê cung trên Σ\Sigma (một bảng chữ cái hữu hạn) là một bộ bốn, M=(X,R,s,G)\mathcal{M} = (X, R, s, G), trong đó XX là một tập hữu hạn các chuỗi trên Σ\Sigma (XX là tập các phòng), RR là một quan hệ nhị phân trên XX (cho các hành lang), ss là một phần tử của XX (ss là phòng bắt đầu), và GG là một tập con của XX (GG là tập các phòng đích).

Định nghĩa. Mê cung M=(X,R,s,G)\mathcal{M} = (X, R, s, G) là có thể luồn được nếu có một chuỗi r1,r2,...,rer_1, r_2, ..., r_e các phòng sao cho r1=sr_1 = s (phòng bắt đầu), rer_e là một phần tử của GG (các phòng đích), và R(ri,ri+1)R(r_i, r_{i+1}) đúng với i=1,2,...,e−1i = 1, 2, ..., e - 1.

Định nghĩa. Gọi ], [,* là ba ký hiệu mới. Một mã hóa của mê cung M=(X,R,s,G)\mathcal{M} = (X, R, s, G) là một chuỗi có dạng

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

trong đó ss là phòng bắt đầu của M\mathcal{M}; x1,x2,...,xlx_1, x_2, ..., x_l là một phép liệt kê không lặp lại các phòng trong XX; với 1≤i≤l1 \leq i \leq l, y1i,y2i,...,yn(i)iy_1^i, y_2^i, ..., y_{n(i)}^i là một phép liệt kê không lặp lại của tất cả các yy trong XX sao cho R(xi,y)R(x_i, y) đúng; và u1,u2,...,ugu_1, u_2, ..., u_g là một phép liệt kê không lặp lại các phòng trong GG.

Ký hiệu. MΣM_\Sigma biểu diễn tập hợp tất cả các mã hóa của các mê cung có thể luồn được trên Σ\Sigma.

Định lý 4. Với mọi bảng chữ cái hữu hạn Σ\Sigma, tồn tại một máy Turing không tất định chấp nhận MΣM_\Sigma trong giới hạn bộ nhớ log⁡2n\log_2 n.

Chứng minh. Nếu mê cung có độ dài nn, thì nó có nhiều nhất nn phòng. Vì vậy mỗi phòng có thể được mã hóa bởi một số có thể được lưu trữ trong log⁡2n\log_2 n ô băng. Cụ thể hơn, nếu mê cung được cho bởi (1), thì phòng xix_i được mã hóa bởi số ii trong ký pháp nhị phân. Thuật toán rất đơn giản. Máy ghi số mã của phòng ban đầu lên băng làm việc, tìm các phòng kế tiếp có thể có, đoán một trong số chúng, xóa băng làm việc, và ghi một mã hóa của phỏng đoán của nó. Sau đó nó tìm các phòng kế tiếp có thể có, đoán một trong số chúng, và cứ tiếp tục như vậy. Sau mỗi lần đoán nó kiểm tra xem đã đến một phòng đích hay chưa. Nếu đã đến, nó chấp nhận. Rõ ràng băng làm việc sẽ bị giới hạn bởi clog⁡2nc \log_2 n, với một hằng số cc nào đó.

Một lập luận dãy giao cắt trực tiếp, giống như lập luận của Cobham [2], cho thấy rằng cận log⁡2n\log_2 n trong Định lý 4 là tốt nhất có thể, sai khác không quá một hệ số hằng số.

Áp dụng các Định lý 1 và 4 cho MΣM_\Sigma thu được

Hệ quả 4. Với mọi bảng chữ cái hữu hạn Σ\Sigma, tồn tại một máy Turing tất định chấp nhận MΣM_\Sigma trong giới hạn bộ nhớ (log⁡2n)2(\log_2 n)^2.

Bổ đề 4. Với mọi bảng chữ cái hữu hạn Σ\Sigma và Δ\Delta có ít nhất hai phần tử, MΣM_\Sigma được chấp nhận bởi một máy Turing tất định nào đó trong giới hạn bộ nhớ log⁡2n\log_2 n khi và chỉ khi MΔM_\Delta được như vậy.

Chứng minh. Với mọi mã hóa, ww, của một mê cung trên Σ\Sigma, tồn tại một mã hóa, δ(w)\delta(w), của một mê cung trên Δ\Delta đẳng cấu với ww. Vì vậy ww thuộc MΣM_\Sigma khi và chỉ khi δ(w)\delta(w) thuộc MΔM_\Delta. Cụ thể hơn, nếu ww là

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

thì δ(w)\delta(w) có thể được lấy là

δ(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)

trong đó nếu kk là số ký hiệu trong Δ\Delta, thì δ(xi)\delta(x_i) là biểu diễn kk-phân của số ii và do đó là một phần tử của Δ∗\Delta^*. Vì các uu và yy và ss đều bằng một số xix_i nào đó, điều này cũng xác định δ\delta trên chúng.

Cho một máy tất định, ZΔZ_\Delta, chấp nhận MΔM_\Delta trong phạm vi bộ nhớ log⁡2n\log_2 n, ta xây dựng một máy tất định, ZΣZ_\Sigma, chấp nhận MΣM_\Sigma trong phạm vi bộ nhớ log⁡2n\log_2 n, như sau. Với một đầu vào ww, ZΣZ_\Sigma hoạt động bằng cách mô phỏng ZΔZ_\Delta hoạt động trên δ(w)\delta(w). Cụ thể hơn, giả sử ZΣZ_\Sigma có đầu vào ww như trong (1). Khi ZΣZ_\Sigma đang mô phỏng ZΔZ_\Delta với đầu đọc đầu vào của ZΔZ_\Delta đang ở một vị trí nào đó trong δ(z)\delta(z), trong đó zz là một trong s,x,y,s, x, y, hoặc uu nào đó trong (1), thì ZΣZ_\Sigma sẽ có đầu đọc đầu vào của nó đọc ký hiệu đầu tiên của zz và sẽ có δ(z)\delta(z) được ghi trên một băng lưu trữ phụ. ZΣZ_{\Sigma} sử dụng băng lưu trữ phụ này chứa δ(z)\delta(z) để mô phỏng băng đầu vào của ZΔZ_{\Delta}. Khi, trong quá trình mô phỏng, đầu đọc đầu vào của ZΔZ_{\Delta} sẽ rời khỏi đầu bên trái (tương ứng, bên phải) của δ(z)\delta(z), thì ZΣZ_{\Sigma} di chuyển đầu đọc đầu vào của nó tới s,x,y,s, x, y, hoặc uu ở bên trái (tương ứng, bên phải) của zz, tính δ\delta của s,x,y,s, x, y, hoặc uu này và thay thế δ(z)\delta(z) bằng δ\delta của s,x,y,s, x, y, hoặc uu này. δ\delta của s,x,y,s, x, y, hoặc uu này trở thành δ(z)\delta(z) mới và quá trình mô phỏng tiếp tục. Để tính δ(z)\delta(z) mới, ZΣZ_{\Sigma} chỉ cần so sánh zz mới với từng xix_i cho đến khi tìm thấy xix_i bằng với zz. Nó có thể thực hiện điều này từng ký hiệu một và do đó giữ lượng băng lưu trữ được sử dụng nhỏ hơn clog⁡2nc \log_2 n, với một hằng số cc nào đó.

Vì Σ\Sigma và Δ\Delta là đối xứng trong phát biểu của bổ đề, điều này đủ để chứng minh bổ đề.

Định lý 5. Với mọi bảng chữ cái hữu hạn, Σ\Sigma, có ít nhất hai phần tử, các phát biểu sau là tương đương:

(1) MΣM_{\Sigma} được chấp nhận bởi một máy Turing tất định nào đó trong phạm vi bộ nhớ log⁡2n\log_2 n.

(2) Với mọi bảng chữ cái hữu hạn Γ\Gamma, mọi tập, AA, các chuỗi trên Γ\Gamma và mọi hàm L(n)≥log⁡2nL(n) \geq \log_2 n, nếu AA được chấp nhận bởi một máy Turing không tất định trong bộ nhớ L(n)L(n), thì AA được chấp nhận bởi một máy Turing tất định nào đó trong bộ nhớ L(n)L(n).

Chứng minh. Phát biểu (1) suy ra từ phát biểu (2) theo Định lý 4.

Giả sử (1) đúng và AA là một tập được chấp nhận bởi một máy Turing không tất định nào đó, ZNZ_N, trong bộ nhớ L(n)≥log⁡2nL(n) \geq \log_2 n. Chúng tôi sẽ xây dựng một máy tất định, ZDZ_D, chấp nhận AA với cùng cận bộ nhớ L(n)L(n). Giả sử L(n)L(n) đo được. Sau này chúng tôi sẽ chỉ ra cách loại bỏ hạn chế này. Với mỗi chuỗi ww trên bảng chữ cái đầu vào của ZNZ_N, gắn với mê cung M(w)=(X,R,s,G)\mathcal{M}(w) = (X, R, s, G), trong đó XX là tập tất cả các ID's của ZNZ_N mà phần không trắng của mỗi băng công tác có độ dài nhiều nhất là L(∣w∣)L(|w|), ss là ID khởi đầu của ZNZ_N, GG là tập các ID's trong XX có chứa một trạng thái chấp nhận, và RR được định nghĩa bởi: R(x,y)R(x, y) đúng khi và chỉ khi x→wyx \xrightarrow{w} y. Rõ ràng, ZNZ_N chấp nhận ww khi và chỉ khi M(w)\mathcal{M}(w) có thể xâu luồn. Gọi m(w)m(w) là một mã hóa của mê cung M(w)\mathcal{M}(w). Máy tất định ZDZ_D chấp nhận AA hoạt động như sau. Với một đầu vào ww, ZDZ_D xây dựng m(w)m(w) trên một trong các băng lưu trữ của nó, rồi mô phỏng máy trong phát biểu (1) để xác định liệu m(w)m(w) có thuộc MΣM_{\Sigma} hay không. Nếu có, thì ZDZ_D chấp nhận ww. Theo Bổ đề 4, ta có thể giả sử Σ\Sigma đủ lớn để tất cả ID's của ZNZ_N đều là các chuỗi trên Σ\Sigma. Vì vậy m(w)m(w) thuộc MΣM_{\Sigma} khi và chỉ khi ZNZ_N chấp nhận ww. Do đó, ZDZ_D chấp nhận chính xác tập AA. m(w)m(w) có độ dài nhiều nhất là hL(n)h^{L(n)}, trong đó n=∣w∣n = |w| và hh là một hằng số chỉ phụ thuộc vào ZNZ_N. Ngoại trừ băng được dùng để lưu trữ m(w)m(w), ZDZ_D hoạt động với bộ nhớ log⁡2hL(n)\log_2 h^{L(n)} tỉ lệ với L(n)L(n).

Máy ZDZ_D không thể viết ra toàn bộ chuỗi, m(w)m(w), cùng một lúc mà vẫn hoạt động trong phạm vi bộ nhớ được cấp phát. Tuy nhiên, tất cả những gì cần thiết để mô phỏng máy trong phát biểu (1) là ZDZ_D có thể tính toán từng ký hiệu một của chuỗi m(w)m(w) và theo dõi vị trí của các ký hiệu trong m(w)m(w). Nó có thể làm được điều này nếu, trong phạm vi bộ nhớ L(n)L(n), nó có thể sinh ra m(w)m(w), từ phải sang trái, từng ký hiệu một.

Các nhận xét của chúng tôi cho đến nay áp dụng cho bất kỳ mã hóa m(w)m(w) nào của mê cung M(w)\mathcal{M}(w). Bây giờ chúng tôi cố định m(w)m(w) là mã hóa sau đây của mê cung 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

trong đó x1<x2<x3<⋯<xlx_1 < x_2 < x_3 < \cdots < x_l với mỗi 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 và u1<u2<⋯<ug.<u_1 < u_2 < \cdots < u_g . < là thứ tự "nhỏ hơn" thông thường trên các số tự nhiên. Các xx's, yy's, và uu's là các chuỗi trên một bảng chữ cái hữu hạn và do đó có thể được xem như các số trong ký hiệu kk-adic, với một kk nào đó. Theo định nghĩa của M(w)\mathcal{M}(w), các xx's, yy's, uu's, và ss là các ID của ZNZ_N có độ dài nhỏ hơn cL(n)cL(n), trong đó cc là một hằng số chỉ phụ thuộc vào ZNZ_N. ZDZ_D có thể tạo ra m(w)m(w) ký hiệu từng ký hiệu một, trong bộ nhớ được cấp phát, như sau. ZDZ_D có thể dễ dàng tính ss, ID ban đầu của ZNZ_N. Sau khi tạo ra ss, ZDZ_D tiếp theo duyệt theo thứ tự số tất cả các chuỗi có độ dài nhỏ hơn cL(n)cL(n) cho đến khi tìm thấy một chuỗi là một ID của ZNZ_N. Đây sẽ là x1x_1. Như vậy ZDZ_D đã tạo ra x1x_1. Tiếp theo nó tạo ra tất cả các yy sao cho x1→wyx_1 \xrightarrow{w} y. Theo cách này, nó tạo ra các yj1y_j^1. Tiếp theo nó duyệt theo thứ tự số tất cả các chuỗi có độ dài nhỏ hơn cL(n)cL(n) cho đến khi tìm thấy chuỗi đầu tiên như vậy là một ID của ZNZ_N và lớn hơn x1x_1. Đây là x2x_2. Bây giờ nó có thể xóa x1x_1. Điều duy nhất nó cần giữ trong bộ nhớ tại thời điểm này là x2x_2. ZDZ_D sau đó tiếp tục tạo ra các yj2y_j^2. Nó tạo ra x3x_3 từ x2x_2 theo cùng cách mà nó đã tính x2x_2 từ x1x_1. Nó tiếp tục theo cách này cho đến khi tìm thấy xix_i lớn nhất. Sau khi đã tạo ra xix_i lớn nhất và các yy tương ứng của nó, nó tiếp tục tạo ra các uiu_i như sau. Nó duyệt qua tất cả các chuỗi có độ dài nhiều nhất là cL(n)cL(n) và kiểm tra xem những chuỗi nào là các ID có chứa một trạng thái chấp nhận. Những chuỗi đó là các uiu_i. Điều này hoàn tất quá trình tạo và chứng minh cho trường hợp: L(n)L(n) là đo được.

Nếu L(n)L(n) không đo được, thì ZDZ_D không nhất thiết có thể sinh chính xác các chuỗi có độ dài nhỏ hơn cL(n)cL(n) trong phạm vi bộ nhớ tỷ lệ với L(n)L(n) và do đó thủ tục trên sẽ không hoạt động. Tuy nhiên, nếu bằng cách nào đó ZDZ_D được cung cấp giá trị của L(n)L(n), thì theo thủ tục trên nó có thể xác định liệu ww có được ZNZ_N chấp nhận hay không trong phạm vi bộ nhớ L(n)L(n). ZDZ_D sử dụng cùng loại thủ thuật đã được sử dụng cho các hàm không đo được trong chứng minh của Định lý 1. Nghĩa là, trước tiên nó giả sử L(n)=1L(n) = 1. Nếu ZNZ_N chấp nhận đầu vào ww trong phạm vi bộ nhớ L(n)=1L(n) = 1, thì ZDZ_D chấp nhận ww. Nếu không, ZDZ_D tiếp theo thử L(n)=2L(n) = 2. Nếu ZNZ_N chấp nhận trong phạm vi bộ nhớ L(n)=2L(n) = 2, thì ZDZ_D cũng làm như vậy. Nếu không, ZDZ_D tiếp theo thử L(n)=3L(n) = 3, và cứ tiếp tục như vậy. Nếu ZNZ_N chấp nhận đầu vào ww, thì cuối cùng ZDZ_D sẽ tìm được giá trị đúng của L(n)L(n) và chấp nhận ww trong phạm vi bộ nhớ tỷ lệ với L(n)L(n).

Một vấn đề chưa được giải quyết trong lý thuyết độ phức tạp băng là liệu có tồn tại một tập AA gồm các chuỗi và một hàm L(n)≥log⁡2nL(n) \geq \log_2 n nào đó sao cho AA được một máy Turing không tất định chấp nhận trong phạm vi bộ nhớ L(n)L(n) nhưng không được bất kỳ máy Turing tất định nào chấp nhận trong phạm vi bộ nhớ L(n)L(n) hay không. Định lý 5 chỉ ra rằng nếu tồn tại bất kỳ AA và L(n)L(n) như vậy, thì A=MΣA = M_\Sigma và L(n)=log⁡2nL(n) = \log_2 n sẽ thỏa mãn.

SAVITCH

Lời cảm ơn

Tác giả cảm ơn Stephen A. Cook vì sự giúp đỡ và khích lệ của ông trong công trình này.

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. Translated into Tiếng Việt by gpt-5, against glossary version 7. Translated from the English.