Quyết định xem một ngôn ngữ nhạy cảm ngữ cảnh đơn nhất có thường xuyên không


18

Đó là một kết quả nổi tiếng mà câu hỏi

Một ngữ pháp không ngữ cảnh tạo ra một ngôn ngữ thông thường?

là không thể giải quyết được Tuy nhiên, nó trở nên có thể quyết định trên một bảng chữ cái đơn nhất, đơn giản vì trong trường hợp này, các lớp ngôn ngữ thông thường và không có ngữ cảnh trùng khớp.

Câu hỏi của tôi là để biết những gì xảy ra cho các ngôn ngữ nhạy cảm ngữ cảnh đơn nhất .

Có phải là quyết định để biết liệu một ngữ pháp nhạy cảm ngữ cảnh nhất định trên một bảng chữ cái đơn nhất có tạo ra một ngôn ngữ thông thường hay không.

Nếu câu trả lời là tích cực, một ước tính về độ phức tạp sẽ được hoan nghênh.

Câu trả lời:


9

Than ôi, vấn đề của bạn là không thể giải quyết được. Cách tiếp cận mà tôi vấp phải (có thể là quá căng thẳng, vì vậy bất kỳ ai có cách tiếp cận nhanh hơn nên bước lên!) Trước tiên hãy sử dụng một đối số đường chéo để chứng minh rằng có một CSL đơn phương không thường xuyên (trái ngược với kết quả tích cực đối với CFL đơn phương), và sau đó giảm từ sự cố tạm dừng cho các máy Turing bằng cách đưa ra TM , xây dựng CSG mô phỏng trên một đoạn băng ngắn hơn chuỗi phân tích , nhận ra nếu dừng lại mà không vượt quá giới hạn của nó và không phân tích cú pháp khác, để phân tích thành công tất cảM G M w X M G w X M L ( G ) X GXMGMwXMGwXđủ dài iff dừng lại (do đó khác với chỉ có nhiều chuỗi và do đó không thể đều đặn), nếu không, nhận ra ngôn ngữ trống (rõ ràng là thông thường).ML(G)XG

Điểm mấu chốt của cách tiếp cận này là quan sát rằng các CSG không chỉ liên quan đến các vấn đề ngữ pháp như cấu trúc cụm từ - thực sự, các chuỗi dẫn xuất CSG có thể thực hiện tính toán giới hạn không gian tùy ý (thực sự cóPSPACE-Hoàn thành các CSL) trước khi bắt đầu kinh doanh việc căn chỉnh với chuỗi phân tích cú pháp. Điều này được quan sát dễ dàng nhất thông qua các chuyển đổi tiêu chuẩn giữa các CSG và ngữ pháp đơn điệu (vẫn tiếp tục hoạt động khi bị giới hạn trong bảng chữ cái đơn nhất) và sử dụng các sản phẩm đơn điệu đơn giản để mô phỏng các chuyển đổi của máy Turing trên các chuỗi đạo hàm đại diện cho các giai đoạn trong lịch sử tính toán. Trong suốt câu trả lời này, tôi sẽ cho rằng người đọc có thể hiểu được hầu hết các chi tiết khi cần có CSG để mô phỏng một tính toán nhất định. (Tôi cho rằng người hỏi thoải mái với tất cả những điều này, nhưng tôi sẽ giải quyết vấn đề này một cách trọn vẹn. Tuy nhiên, hãy thoải mái yêu cầu làm rõ trong các bình luận.)


Đầu tiên, chúng tôi cần CSG đơn phương không thường xuyên của chúng tôi. ( EDIT: vì vậy, điều này là quá mức cần thiết - các CSL đơn phương không thường xuyên có thể dễ dàng được trình bày, ví dụ như thông qua bổ đề bơm trên bất kỳ ngôn ngữ nào thể hiện cơ bản nhất về tính không đều đặn. Xem các nhận xét để biết ví dụ. giống như mang đầu đạn hạt nhân vào một cuộc đấu dao. Hãy xem qua công trình này nếu bạn tò mò, nếu không thì bỏ qua việc giảm bớt.)

Đặt là một phép liệt kê các DFA trên bảng chữ cái , sao cho số lượng trạng thái trong tăng lên trong . Chúng tôi mô tả CSG về hành vi của nó trong khi phân tích chuỗi :{ 1 } D i i G X 1 n{ 1 } *D1,D2,...{1}DiiGX1n{1}

  1. Không đặc biệt tạo ra một chuỗi "trống" không phải thiết bị đầu cuối, mà chúng tôi nghĩ là "băng". Một trong những thiết bị đầu cuối trống phải là một thiết bị đầu cuối "trống + đầu đọc ghi + trạng thái bắt đầu" riêng biệt. Nếu chuỗi phân tích không phải là thì việc tạo đạo hàm này sẽ thất bại. Chúng tôi mô tả phần còn lại của quá trình theo tính toán xác định được mô phỏng bởi đạo hàm duy nhất có thể.1 nn1n
  2. In trên băng một mã hóa theo sau là số ở dạng nhị phân, trong đó và c được chọn để chúng ta luôn có đủ không gian trên băng để làm những gì chúng ta cần. (Điều này là có thể vì không gian cần thiết để mã hóa cả D ii phát triển logarit trong i .) i i = n - cDiii=nccDiii
  3. Đánh giá trên đầu vào 1 i . Điều này không yêu cầu băng đại diện của D i - bạn chỉ có thể lưu trữ một trạng thái duy nhất mà bạn thay đổi theo sự chuyển đổi của D i khi bạn giảm i .Di1iDiDii
  4. Nếu từ chối 1 i , ghi đè lên toàn bộ băng bằng các đầu cuối không tạo ra 1 . Nếu không thì thất bại.Di 1i1

Ta lấy . Rõ ràng X L ( D i ) đối với bất kỳ i , vì 1 i + cX 1 i + cL ( D i ) .X=L(GX)XL(Di)i1i+cX1i+cL(Di)


Bước tiếp theo là thiết kế giảm từ vấn đề tạm dừng sang vấn đề của người hỏi. (Nếu bạn bỏ qua phần trên, hãy để là một CSL đơn phương không thường xuyên tùy ý được tạo bởi CSG G X. )XGX

Đặt là một TM tùy ý. Chúng tôi chuyển đổi M thành CSG G hoạt động như sau trên chuỗi phân tích 1 n :MMG1n

  1. Tạo không đầu cuối trống, đầu cuối bên trái là đầu cuối trống + đầu đọc ghi riêng biệt và cũng tạo ra một đầu cuối "không biên" ở mỗi bên. Một lần nữa, nếu chúng ta tạo sai số lượng thiết bị đầu cuối thì chúng ta thất bại.n2
  2. Mô phỏng trong không gian giữa các ranh giới không đầu cuối. Nếu M chuyển sang một trong các trạng thái biên, chúng ta chấm dứt mô phỏng và cho rằng M không bao giờ dừng lại.MMM
  3. Nếu tạm dừng, cư xử như G X . Nếu chúng tôi phải chấm dứt mô phỏng, thì thất bại.MGX

Lưu ý rằng nếu quản lý để chạy mãi trong phạm vi ranh giới thì G không bao giờ có thể tạo chuỗi phân tích cú pháp và do đó sẽ thất bại. Nếu M dừng lại, thì có một lượng không gian n đủ để chứa toàn bộ tính toán của M , do đó G phân tích 1 m bất cứ khi nào m n + 21 mX , và do đó X là liên kết của L ( G ) và một ngôn ngữ hữu hạn, từ đó L ( G )MGMnMG1mmn+21mXXL(G)L(G)không thường xuyên Mặt khác, nếu không bao giờ tạm dừng, sau đó L ( G ) = rõ ràng là thường xuyên.ML(G)=

Một thuật toán để quyết định liệu có thường xuyên hay không sẽ xác định liệu M có dừng lại trên một băng trống hay không , điều này là không thể giải quyết được. Theo sau đó là vấn đề của người hỏi là không thể giải quyết được.L(G)M


2
Đối với phần đầu của câu trả lời của bạn, { một p | p  là số nguyên tố } là ví dụ về ngôn ngữ không thường xuyên context-sensitive unary. {an2n0}{app is prime}
J.-E.

Heh, thực sự quá căng thẳng, có lẽ tôi đã xảy ra với tôi rằng một cuộc tranh cãi chéo sẽ là quá mức cần thiết. Tôi đoán tôi sẽ chỉnh sửa một ghi chú vào câu trả lời. Hy vọng phần thứ hai vẫn hữu ích.
gdmclellan

@ J.-E.Pin: Tôi đã không nghĩ về nó quá nhiều, có dễ dàng để xây dựng một ngữ pháp nhạy cảm ngữ cảnh đơn nhất cho không? {app is prime}
Marzio De Biasi

@ marzio-de-biasi Tôi phải thú nhận rằng tôi đã không tự kiểm tra mà chỉ dựa vào câu trả lời
J.-E.

@MarzioDeBiasi Rất dễ dàng. Khi xác định liệu một ngôn ngữ có nhạy cảm với ngữ cảnh hay không, quy trình thông thường sẽ giống như 1. không đoán được chuỗi phân tích cú pháp; 2. thực hiện một số tính toán giới hạn không gian để xác định xem chuỗi phân tích có thỏa mãn một số vị ngữ hay không; và 3. tạo chuỗi iff nói vị ngữ được tìm thấy thỏa mãn. Không gian có thể là một chút vấn đề (giới hạn không gian được cho bởi độ dài của chuỗi phân tích cú pháp, bởi vì bạn không thể hợp đồng chuỗi có nguồn gốc bằng cách sử dụng các sản phẩm nhạy cảm theo ngữ cảnh), nhưng trong trường hợp đơn nhất bạn có không gian theo cấp số nhân để làm việc với .
gdmclellan

6

Đây thực chất là cùng một câu trả lời như trên, nhưng vì câu trả lời "phù hợp hơn" được tìm kiếm, tôi đang đề cập đến điều này: (Ngoài ra, đây là bài viết đầu tiên của tôi ở đây, vì vậy hãy tha thứ cho tôi nếu tôi đăng một điều tầm thường!)

Quan sát rằng sự trống rỗng là không thể giải quyết được đối với các ngôn ngữ nhạy cảm ngữ cảnh đơn nhất. Fix một bối cảnh nhạy cảm, nhưng không thường xuyên ngôn ngữ . Với một LBA cho L một * , người ta có thể dễ dàng xây dựng một LBA cho L ' = { một n | một nN  và  m n : một mL } . Sau đó, rõ ràng L ' là bình thường nếu và chỉ nếu L là trống rỗng.NaLaL={ananN and mn:amL}LL

Cập nhật: Tất nhiên, cùng một lập luận cho thấy rằng tính không ổn định đã giữ cho không gian logarit xác định.


"Sự trống rỗng là không thể giải quyết được đối với các ngôn ngữ nhạy cảm ngữ cảnh đơn nhất": đó có phải là một thực tế nổi tiếng? Bạn có thể tham khảo?
J.-E.

1
LΣh:Σ{a}ah(L)LTa2nTn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.