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ừ 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ừ tất định, với điều kiệ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 , một máy Turing tất định cần bao nhiêu bộ nhớ bổ sung để nhận biết ?"
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 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 tất định, với điều kiệ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 , trong đó 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ớ . 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ớ . 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ớ, , thì với mọi hàm bộ nhớ , bất kỳ máy Turing bị giới hạn băng 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 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 . Băng đầu vào sẽ luôn chứa một chuỗi hữu hạn gồm các ký hiệu từ bảng chữ cái đầu vào hữu hạn . Chuỗi được phân cách bởi hai ký hiệu không thuộc đượ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 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 chấp nhận chuỗi đầu vào trên nếu đ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, 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 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à một hàm trên các số tự nhiên, là một máy Turing (tất định hoặc không tất định), và là một tập các chuỗi trên bảng chữ cái đầu vào của . được nói là chấp nhận tập trong bộ nhớ nếu
(i) với mỗi chuỗi trong , có ít nhất một tính toán khả dĩ của chấp nhận và trong đó mỗi đầu đọc băng lưu trữ quét nhiều nhất ô, và
(ii) không chấp nhận chuỗi nào không thuộc . là độ dài của chuỗi, .
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ớ và là giống nhau, với mọi hằng số . 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ớ đều có thể được sửa đổi để hoạt động với bộ nhớ 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 đượ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 , 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 ô.
Có vẻ như tất cả các hàm lưu trữ thông dụng đều đo được. Cụ thể, mọi đa thức theo và đề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, , được chấp nhận bởi một máy Turing không xác định, , trong phạm vi lưu trữ , thì được chấp nhận bởi một máy Turing xác định nào đó, , trong phạm vi lưu trữ .
Chứng minh. Định lý được chứng minh bằng cách đưa ra một thuật toán theo đó có thể mô phỏng các phép tính của . 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ữ .
Giả sử máy Turing có băng lưu trữ, bảng chữ cái của băng lưu trữ , và tập trạng thái bên trong . Gọi , trong đó và là hai ký hiệu mới. Một mô tả tức thời (ID) của là một chuỗi trên 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 , 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 đang ở trạng thái q, và là các phần tử của , . được hiểu là là nội dung của băng lưu trữ thứ i của và đầu đọc trên băng này đang quét ký hiệu đầu tiên của chuỗi . Vì vậy, ngoại trừ nội dung của băng đầu vào, một ID của là một mô tả hoàn chỉnh về một cấu hình của .
Vì chấp nhận tập trong phạm vi lưu trữ , nên suy ra rằng với mỗi chuỗi w có độ dài n được chấp nhận, tồn tại một phép tính của chấp nhận w trong đó mỗi ID có độ dài không vượt quá . Hơn nữa, vì mỗi ID có độ dài nhiều nhất là , phép tính cần không quá bước. c và là các hằng số chỉ phụ thuộc vào 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à đo được.
Với một đầu vào có độ dài n, 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 khối (được gọi là các thanh ghi), mỗi khối có độ dài , tiếp theo là 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à đ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 trong đó phần không trắng của mỗi băng lưu trữ nhiều nhất là . 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. có chuỗi w làm đầu vào. Trong quá trình của thuật toán, sẽ xem xét hai ID 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, có thể trong bước thay đổi cấu hình của nó từ I sang hay không. Hơn nữa, sẽ phải thực hiện nhiệm vụ này chỉ sử dụng m thanh ghi. 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 của và với mỗi , kiểm tra xem có một tính toán gồm không quá bước từ I đến , và một tính toán gồm không quá bước từ đến hay không. cần một thanh ghi để theo dõi , khiến nó còn lại thanh ghi. Vì vậy đã giảm nhiệm vụ mô phỏng chuyển động của sử dụng m thanh ghi thành mô phỏng chuyển động của sử dụng thanh ghi. Sau đó giảm mỗi tính toán gồm bước thành hai tính toán gồm bước. 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 và , liệu với đầu vào w, có thể trong một bước đi từ đến 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 , thì có một tính toán chấp nhận trong bước. Vì vậy có thể mô phỏng tính toán này bằng cách sử dụng thanh ghi hoặc khoảng ô 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, , 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 . Cụ thể hơn, nếu thì chuỗi sẽ biểu diễn số . 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 trên bảng chữ cái {1, 2} là biểu diễn dyadic của số .
ĐỊNH NGHĨA. Nếu và là các ID của và nếu có thể trong một bước, với đầu vào , chuyển từ cấu hình sang cấu hình , hoặc nếu , thì ta sẽ viết . Trong thuật toán, ta sẽ kiểm tra xem có đúng với các chuỗi tùy ý trên hay không. Nếu hoặc không phải là một ID của , thì phép kiểm tra thất bại.
Trong thuật toán sau, biểu thị nội dung của thanh ghi thứ và biểu thị nội dung của thẻ thứ . có một chuỗi làm đầu vào và mọi tham chiếu đến các tính toán của đều có nghĩa là các tính toán của dưới đầu vào 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á ô. Tại bất kỳ thời điểm nào trong tính toán của , nếu , thì tồn tại một tính toán của từ ID bắt đầu đến .
THUẬT TOÁN CHO MÁY
Tóm tắt ký hiệu
là chuỗi đầu vào. là độ dài của . là số nguyên nhỏ nhất sao cho . là số sao cho, với làm đầu vào, nếu chấp nhận tại bất kỳ thời điểm nào, thì chấp nhận trong bước. là ID ban đầu của . là số nguyên lớn nhất có biểu diễn -adic có thể được lưu trong một thanh ghi. là nội dung của thanh ghi thứ . là nội dung của thẻ thứ .
D0 (Khởi tạo). Tính và thiết lập thanh ghi và thẻ. Với , đặt và . Đặt (ID ban đầu) và .
D1 (Kiểm tra). Nếu mỗi , chuyển đến D3. Ngược lại, đặt là chỉ số nhỏ nhất sao cho . Kiểm tra: Với một chỉ số nào đó, và . Có: Chuyển đến D2. Không: Chuyển đến D3.
D2 (Xóa bộ nhớ) ( như trong D1). Nếu là một ID chấp nhận, ACCEPT. Ngược lại, đặt và với đặt và . Chuyển đến D1.
D3 (Quay lui). Nếu với mỗi , REJECT. Ngược lại, đặt là chỉ số nhỏ nhất sao cho . Đặt , , và với đặt , . Chuyển đến D1.
Rõ ràng thuật toán hoạt động với bộ nhớ , trong đó là một hằng số chỉ phụ thuộc vào . 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 chấp nhận một đầu vào , thì máy không tất định cũng chấp nhận. Vì vậy, chỉ cần chỉ ra rằng chấp nhận mọi chuỗi mà 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 is an accepting ID, ACCEPT"). Ta sẽ nói rằng đang ở cấu hình
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à và .
Bổ đề 1. (Đối với D2 đã sửa đổi). Với mỗi chỉ số và mỗi số nguyên (), nếu tại một thời điểm nào đó trong một phép tính của cấu hình của là
với một số và một số , thì tại một thời điểm sau đó cấu hình sẽ là
hoặc
trong đó là chỉ số nhỏ nhất trong (1) sao cho và . (Nếu không tồn tại 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 từ ID ban đầu đến . 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 . Vì vậy, bổ đề nói rằng 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 và . 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ì là một chuỗi mà tất cả các chữ số của nó đều giống nhau, không phải là một ID và do đó, không đúng với bất kỳ số nguyên nào. Giả sử được khởi động trong cấu hình (1) và tại không thời điểm nào sau đó nhận các cấu hình (3). Khi đó sẽ nhận các cấu hình sau:
trong đó hoặc 1.
Cuối cùng, thông qua D3, 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 là
với và các giá trị bất kỳ cho các và các còn lại. Nếu với một chỉ số nào đó và có một tính toán của gồm không quá bước từ đến , thì tại một thời điểm sau đó cấu hình của sẽ là (4) với .
Bổ đề phát biểu rằng thanh ghi là đủ để kiểm tra một tính toán gồm bước của .
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 là
với các giá trị bất kỳ của các và . Nếu với một chỉ số nào đó và có một tính toán của gồm không quá bước từ đến , thì tại một thời điểm sau đó cấu hình của sẽ là
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 . Trường hợp cơ sở, , là rõ ràng. Giả sử cả hai bổ đề đúng khi được thay bằng . Chúng tôi sẽ chứng minh rằng Bổ đề 2 đúng với .
Giả sử đang ở cấu hình (4) với và với một chỉ số nào đó, , có một tính toán của từ đến gồm nhiều nhất bước. Phân rã tính toán này từ đến , ta thu được rằng tồn tại một sao cho có các tính toán gồm nhiều nhất bước từ đến và từ đến . Theo Bổ đề 1, suy ra rằng, tại một thời điểm sau đó, hoặc cấu hình của là
với hoặc cấu hình là (4) với . Cấu hình (4) với là kết quả mong muốn. Vì vậy, giả sử đã nhận cấu hình (7) với . 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 sẽ là (7) với . 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 sẽ là (4) với . Vì vậy Bổ đề 2 đúng với . Bổ đề 3 với đượ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 chấp nhận . Ta phải chỉ ra rằng chấp nhận . Vì chấp nhận , tồn tại một ID chấp nhận, , của sao cho có một tính toán, với là đầu vào, gồm nhiều nhất bước từ (ID ban đầu của ) đến . Theo Bổ đề 1, suy ra rằng cuối cùng sẽ nhận cấu hình
với . Theo Bổ đề 2, suy ra rằng tại một thời điểm sau đó sẽ nhận cấu hình (8) với . 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 thay vì đặt . Điều này hoàn thành chứng minh Định lý 1 trong trường hợp: đo được.
Nếu không đo được, thì thuật toán trên phải được thay đổi, vì không nhất thiết có thể đánh dấu các khối có độ dài trong phạm vi bộ nhớ tỷ lệ với . Tuy nhiên, nếu bằng cách nào đó được cung cấp giá trị của , thì theo thủ tục trên, có thể xác định liệu có chấp nhận đầu vào trong phạm vi bộ nhớ hay không. Vì vậy hoạt động như sau. Đầu tiên giả sử . Nếu chấp nhận trong phạm vi bộ nhớ , thì sẽ chấp nhận. Nếu không chấp nhận trong phạm vi bộ nhớ 1, thì tiếp theo giả sử . Nếu chấp nhận trong phạm vi bộ nhớ 2, thì chấp nhận. Nếu không, thì tiếp theo giả sử . 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 . Nếu chấp nhận đầu vào , thì cuối cùng sẽ tìm được giá trị đúng của và chấp nhận trong phạm vi bộ nhớ tỷ lệ với . Nếu không chấp nhận , thì tính toán vô hạn trên đầu vào . Đ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ớ (xem, ví dụ, [3]). Vì vậy, đặt 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ớ .
Định lý 1 có thể được tổng quát hóa như sau.
Định lý 2. Nếu một tập, , được chấp nhận bởi một máy Turing không tất định trong phạm vi bộ nhớ và thời gian , thì được chấp nhận bởi một máy Turing tất định nào đó trong phạm vi bộ nhớ .
Định nghĩa. Một máy Turing, , được nói là chấp nhận một tập, , trong phạm vi bộ nhớ và thời gian với điều kiện rằng
(i) với mỗi trong , có ít nhất một phép tính của chấp nhận , thực hiện không quá bước, và trong đó mỗi đầu băng làm việc quét không quá ô, trong đó là độ dài của , và với điều kiện rằng
(ii) chấp nhận không có chuỗi nào không thuộc .
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 khối bộ nhớ, trong đó 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ớ .
Định lý sau đây nói rằng đối với mọi hàm bộ nhớ "có tính chất tốt" , nếu mọi máy Turing bị giới hạn băng 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 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 và là đo được, rằng là đơn điệu tăng và không bị chặn, và rằng , với mọi . Gọi hàm được định nghĩa như sau. Với mỗi số tự nhiên , là số tự nhiên nhỏ nhất sao cho .
Giả sử thêm rằng đối với bất kỳ tập hợp nào, , nếu được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ , thì được chấp nhận bởi một máy Turing xác định trong phạm vi bộ nhớ . Khi đó suy ra rằng đối với bất kỳ tập hợp nào, , nếu được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ , thì được chấp nhận bởi một máy Turing xác định trong phạm vi bộ nhớ .
Đị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, , tồn tại một hằng số sao cho , với mọi và . 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 có thể được chấp nhận trong phạm vi bộ nhớ xác định . Cụ thể,
HỆ QUẢ 3. Giả sử là một đa thức theo và , với một hằng số nào đó. Giả sử thêm rằng đối với bất kỳ tập hợp nào, , nếu được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ , thì được chấp nhận bởi một máy Turing xác định nào đó trong phạm vi bộ nhớ .
Khi đó suy ra rằng đối với bất kỳ hàm đo được nào và bất kỳ tập hợp nào, , nếu được chấp nhận bởi một máy Turing không xác định trong phạm vi bộ nhớ , thì được chấp nhận bởi một máy Turing xác định nào đó trong phạm vi bộ nhớ .
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ớ ), 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 .
Chứng minh Hệ quả 3. Có thể dễ dàng kiểm tra rằng với mọi đa thức như vậy, tồn tại một hằng số sao cho với mọi . Do đó . là hàm được định nghĩa trong phát biểu của định lý. Theo định nghĩa của , . Do đó .
Giả sử giả thuyết của hệ quả đúng và giả sử được chấp nhận bởi một máy Turing không tất định trong phạm vi bộ nhớ . Theo Định lý 3, được chấp nhận bởi một máy Turing tất định trong phạm vi bộ nhớ . 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 được chấp nhận bởi một máy Turing tất định trong phạm vi bộ nhớ . Cuối cùng, vì , điều này có nghĩa là được chấp nhận bởi một máy Turing tất định trong phạm vi bộ nhớ .
Chứng minh Định lý 3. Giả sử giả thuyết của Định lý 3 đúng và giả sử là một tập được chấp nhận bởi một máy Turing không tất định, , trong phạm vi bộ nhớ .
Chúng tôi sẽ xây dựng một máy tất định, , chấp nhận trong phạm vi bộ nhớ .
Cho là một ký hiệu mới. Cho . Một máy Turing không tất định, , chấp nhận trong phạm vi bộ nhớ có thể được xây dựng như sau. Với đầu vào , trước hết đánh dấu ô của bộ nhớ, trong đó . Sau đó nó kiểm tra xem hay không. Nếu điều này không đúng, thì và tính toán dừng lại. Nếu , thì mô phỏng để xem có thuộc hay không. Nếu chấp nhận, thì nó cũng chấp nhận. Vì , máy này sẽ chấp nhận trong phạm vi bộ nhớ . Vì vậy, theo giả thuyết, tồn tại một máy tất định, , chấp nhận trong phạm vi bộ nhớ . Hơn nữa, vì là đo được, chúng ta có thể giả sử rằng với mọi đầu vào có độ dài , dừng sau một tính toán trong đó nhiều nhất ô 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, , chấp nhận trong phạm vi bộ nhớ hoạt động như sau. Với một đầu vào , mô phỏng hoạt động trên với các giá trị khác nhau của . Trước tiên nó thử . Nếu chấp nhận , thì cũng chấp nhận. Nếu không, nó thử . Nếu chấp nhận , thì cũng chấp nhận. Nếu không, nó thử . Nếu chấp nhận , thì cũng chấp nhận. Nếu không, nó thử , và cứ tiếp tục như vậy. Nếu thuộc , thì cuối cùng sẽ tìm thấy giá trị nhỏ nhất sao cho và sẽ chấp nhận trong phạm vi bộ nhớ . Đ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 tùy ý sao cho một tập hợp được chấp nhận trong bộ nhớ tất định khi và chỉ khi nó được chấp nhận trong bộ nhớ không tất định . Tuy nhiên, các hàm 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 , 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 đến phòng nếu, với đầu vào , máy có thể trong một bước thay đổi cấu hình của nó từ sang . 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 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ớ . 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ớ khi và chỉ khi các máy Turing bị chặn bởi băng tất định có thể mô phỏng các máy Turing bị chặn bởi băng không tất định, với mọi .
Định nghĩa. Một mê cung trên (một bảng chữ cái hữu hạn) là một bộ bốn, , trong đó là một tập hữu hạn các chuỗi trên ( là tập các phòng), là một quan hệ nhị phân trên (cho các hành lang), là một phần tử của ( là phòng bắt đầu), và là một tập con của ( là tập các phòng đích).
Định nghĩa. Mê cung là có thể luồn được nếu có một chuỗi các phòng sao cho (phòng bắt đầu), là một phần tử của (các phòng đích), và đúng với .
Định nghĩa. Gọi ], [,* là ba ký hiệu mới. Một mã hóa của mê cung là một chuỗi có dạng
trong đó là phòng bắt đầu của ; là một phép liệt kê không lặp lại các phòng trong ; với , là một phép liệt kê không lặp lại của tất cả các trong sao cho đúng; và là một phép liệt kê không lặp lại các phòng trong .
Ký hiệu. 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 .
Định lý 4. Với mọi bảng chữ cái hữu hạn , tồn tại một máy Turing không tất định chấp nhận trong giới hạn bộ nhớ .
Chứng minh. Nếu mê cung có độ dài , thì nó có nhiều nhất 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 ô băng. Cụ thể hơn, nếu mê cung được cho bởi (1), thì phòng được mã hóa bởi số 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 , với một hằng số 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 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 thu được
Hệ quả 4. Với mọi bảng chữ cái hữu hạn , tồn tại một máy Turing tất định chấp nhận trong giới hạn bộ nhớ .
Bổ đề 4. Với mọi bảng chữ cái hữu hạn và có ít nhất hai phần tử, được chấp nhận bởi một máy Turing tất định nào đó trong giới hạn bộ nhớ khi và chỉ khi được như vậy.
Chứng minh. Với mọi mã hóa, , của một mê cung trên , tồn tại một mã hóa, , của một mê cung trên đẳng cấu với . Vì vậy thuộc khi và chỉ khi thuộc . Cụ thể hơn, nếu là
thì có thể được lấy là
trong đó nếu là số ký hiệu trong , thì là biểu diễn -phân của số và do đó là một phần tử của . Vì các và và đều bằng một số nào đó, điều này cũng xác định trên chúng.
Cho một máy tất định, , chấp nhận trong phạm vi bộ nhớ , ta xây dựng một máy tất định, , chấp nhận trong phạm vi bộ nhớ , như sau. Với một đầu vào , hoạt động bằng cách mô phỏng hoạt động trên . Cụ thể hơn, giả sử có đầu vào như trong (1). Khi đang mô phỏng với đầu đọc đầu vào của đang ở một vị trí nào đó trong , trong đó là một trong hoặc nào đó trong (1), thì sẽ có đầu đọc đầu vào của nó đọc ký hiệu đầu tiên của và sẽ có được ghi trên một băng lưu trữ phụ. sử dụng băng lưu trữ phụ này chứa để mô phỏng băng đầu vào của . Khi, trong quá trình mô phỏng, đầu đọc đầu vào của sẽ rời khỏi đầu bên trái (tương ứng, bên phải) của , thì di chuyển đầu đọc đầu vào của nó tới hoặc ở bên trái (tương ứng, bên phải) của , tính của hoặc này và thay thế bằng của hoặc này. của hoặc này trở thành mới và quá trình mô phỏng tiếp tục. Để tính mới, chỉ cần so sánh mới với từng cho đến khi tìm thấy bằng với . 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 , với một hằng số nào đó.
Vì và 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, , có ít nhất hai phần tử, các phát biểu sau là tương đương:
(1) được chấp nhận bởi một máy Turing tất định nào đó trong phạm vi bộ nhớ .
(2) Với mọi bảng chữ cái hữu hạn , mọi tập, , các chuỗi trên và mọi hàm , nếu được chấp nhận bởi một máy Turing không tất định trong bộ nhớ , thì được chấp nhận bởi một máy Turing tất định nào đó trong bộ nhớ .
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à là một tập được chấp nhận bởi một máy Turing không tất định nào đó, , trong bộ nhớ . Chúng tôi sẽ xây dựng một máy tất định, , chấp nhận với cùng cận bộ nhớ . Giả sử đ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 trên bảng chữ cái đầu vào của , gắn với mê cung , trong đó là tập tất cả các ID's của 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à ID khởi đầu của , là tập các ID's trong có chứa một trạng thái chấp nhận, và được định nghĩa bởi: đúng khi và chỉ khi . Rõ ràng, chấp nhận khi và chỉ khi có thể xâu luồn. Gọi là một mã hóa của mê cung . Máy tất định chấp nhận hoạt động như sau. Với một đầu vào , xây dựng 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 có thuộc hay không. Nếu có, thì chấp nhận . Theo Bổ đề 4, ta có thể giả sử đủ lớn để tất cả ID's của đều là các chuỗi trên . Vì vậy thuộc khi và chỉ khi chấp nhận . Do đó, chấp nhận chính xác tập . có độ dài nhiều nhất là , trong đó và là một hằng số chỉ phụ thuộc vào . Ngoại trừ băng được dùng để lưu trữ , hoạt động với bộ nhớ tỉ lệ với .
Máy không thể viết ra toàn bộ chuỗi, , 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à có thể tính toán từng ký hiệu một của chuỗi và theo dõi vị trí của các ký hiệu trong . Nó có thể làm được điều này nếu, trong phạm vi bộ nhớ , nó có thể sinh ra , 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 nào của mê cung . Bây giờ chúng tôi cố định là mã hóa sau đây của mê cung
trong đó với mỗi , và là thứ tự "nhỏ hơn" thông thường trên các số tự nhiên. Các 's, 's, và '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 -adic, với một nào đó. Theo định nghĩa của , các 's, 's, 's, và là các ID của có độ dài nhỏ hơn , trong đó là một hằng số chỉ phụ thuộc vào . có thể tạo ra ký hiệu từng ký hiệu một, trong bộ nhớ được cấp phát, như sau. có thể dễ dàng tính , ID ban đầu của . Sau khi tạo ra , tiếp theo duyệt theo thứ tự số tất cả các chuỗi có độ dài nhỏ hơn cho đến khi tìm thấy một chuỗi là một ID của . Đây sẽ là . Như vậy đã tạo ra . Tiếp theo nó tạo ra tất cả các sao cho . Theo cách này, nó tạo ra các . Tiếp theo nó duyệt theo thứ tự số tất cả các chuỗi có độ dài nhỏ hơn cho đến khi tìm thấy chuỗi đầu tiên như vậy là một ID của và lớn hơn . Đây là . Bây giờ nó có thể xóa . Điều duy nhất nó cần giữ trong bộ nhớ tại thời điểm này là . sau đó tiếp tục tạo ra các . Nó tạo ra từ theo cùng cách mà nó đã tính từ . Nó tiếp tục theo cách này cho đến khi tìm thấy lớn nhất. Sau khi đã tạo ra lớn nhất và các tương ứng của nó, nó tiếp tục tạo ra các như sau. Nó duyệt qua tất cả các chuỗi có độ dài nhiều nhất là 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 . Điều này hoàn tất quá trình tạo và chứng minh cho trường hợp: là đo được.
Nếu không đo được, thì không nhất thiết có thể sinh chính xác các chuỗi có độ dài nhỏ hơn trong phạm vi bộ nhớ tỷ lệ với và do đó thủ tục trên sẽ không hoạt động. Tuy nhiên, nếu bằng cách nào đó được cung cấp giá trị của , thì theo thủ tục trên nó có thể xác định liệu có được chấp nhận hay không trong phạm vi bộ nhớ . 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ử . Nếu chấp nhận đầu vào trong phạm vi bộ nhớ , thì chấp nhận . Nếu không, tiếp theo thử . Nếu chấp nhận trong phạm vi bộ nhớ , thì cũng làm như vậy. Nếu không, tiếp theo thử , và cứ tiếp tục như vậy. Nếu chấp nhận đầu vào , thì cuối cùng sẽ tìm được giá trị đúng của và chấp nhận trong phạm vi bộ nhớ tỷ lệ với .
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 gồm các chuỗi và một hàm nào đó sao cho được một máy Turing không tất định chấp nhận trong phạm vi bộ nhớ 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ớ hay không. Định lý 5 chỉ ra rằng nếu tồn tại bất kỳ và như vậy, thì và 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.