Tầm quan trọng của các ngôn ngữ nhạy cảm theo ngữ cảnh (Loại 1) là gì?


34

Thấy trong Chomsky Hierarchy Loại 3 ngôn ngữ có thể được công nhận bởi một máy nhà nước không có bộ nhớ bên ngoài (ví dụ, một automaton hữu hạn), Loại 2 bởi một máy nhà nước với một đơn stack (tức là một automaton đẩy xuống) và Gõ 0 bởi một máy trạng thái có hai ngăn xếp (hoặc, tương đương, một cuộn băng, như trường hợp của Turing Machines), làm thế nào để ngôn ngữ Loại 1 phù hợp với hình ảnh này? Và những lợi thế nào mang lại để xác định rằng một ngôn ngữ không chỉ là Loại 0 mà là Loại 1?


2
Vì bạn đang hỏi ở đây chứ không phải trong cstheory.SE (như được đề xuất bởi @Sunil), tôi khuyên bạn cũng nên thêm một mô tả / định nghĩa ngắn gọn về Loại 1, có thể không phải là một thuật ngữ quen thuộc với mọi người.
Janoma

5
@Sunil Không, nó sẽ không. Đây không phải là một câu hỏi ở cấp độ nghiên cứu (và ngay cả khi nó là, nó vẫn sẽ là chủ đề ở đây vì chúng tôi không loại trừ các câu hỏi ở cấp độ nghiên cứu - ít nhất đó là những gì tôi nhớ là kết quả của cuộc thảo luận về khu vực51).
sepp2k

3
@Janoma: Tại sao nên bao gồm thông tin có thể dễ dàng tra cứu (sẽ không được coi là tiếng ồn)?
bitmask

4
@Janoma Tôi nghĩ rằng hướng dẫn chung nên giải thích các khái niệm mà ai đó có thể trả lời câu hỏi có thể không biết (nếu hướng dẫn là giải thích mọi thứ mà một số người dùng của trang web có thể không biết, chúng tôi sẽ giải thích mọi thứ mọi lúc và đó chắc chắn không phải là tiêu chuẩn trên các trang SE khác). Và tôi không nghĩ rằng ai đó không biết thứ bậc Chomsky sẽ có thể trả lời câu hỏi. Tất nhiên, sẽ không hại khi giải thích càng nhiều càng tốt (miễn là nó không khiến câu hỏi trở nên dài dòng) - Tôi chỉ không nghĩ rằng nó cần thiết trong trường hợp này.
sepp2k

4
Mọi chuyên ngành khoa học máy tính đều biết (hoặc nên biết) hệ thống phân cấp Chomsky. Mọi người khác có thể tìm kiếm nó trong 20s. Một liên kết đến có lẽ Wikipedia nên đủ ở đây.
Raphael

Câu trả lời:


19

Các ngôn ngữ nhạy cảm ngữ cảnh chính xác là các ngôn ngữ có thể được máy Turing nhận ra bằng cách sử dụng không gian tuyến tính và tính không xác định. Bạn có thể mô phỏng một máy Turing như vậy bằng thời gian theo cấp số nhân, do đó bạn có thể nhận ra bất kỳ ngôn ngữ nào như vậy theo thời gian theo cấp số nhân. Xin lưu ý rằng vấn đề nhận biết một số ngôn ngữ nhạy cảm theo ngữ cảnh là -complete, điều đó có nghĩa là chúng tôi khá chắc chắn rằng bạn không thể làm tốt hơn thời gian theo cấp số nhân.PSPMộtCE

So sánh điều này với loại ngôn ngữ 0, điều này có nghĩa là ít nhất bạn có thể nói điều gì đó về việc mất bao lâu để nhận ra ngôn ngữ. Một ngôn ngữ loại 0 thậm chí có thể không thể quyết định được: ngôn ngữ của tất cả các máy Turing tạm dừng là ngôn ngữ loại 0, nhưng vì nhận ra ngôn ngữ này chính xác là vấn đề tạm dừng, nên nó không thể quyết định được.

Ngữ pháp nhạy cảm ngữ cảnh không hữu ích lắm trong thực tế. Ngữ pháp không ngữ cảnh là trực quan để làm việc với, nhưng như các ví dụ trên Wikipedia cho thấy , các ngữ pháp nhạy cảm theo ngữ cảnh rất nhanh trở nên khá lộn xộn. Các chương trình sử dụng không gian đa thức được thiết kế dễ dàng hơn nhiều (và -completiness đảm bảo sự tồn tại của một số CSG tương đương chỉ lớn hơn so với sử dụng không gian của thuật toán của bạn).PSPMộtCE

Lý do cho sự tồn tại của chúng là vì chúng tạo thành một phần mở rộng rất tự nhiên của các ngữ pháp không ngữ cảnh (bạn cho phép bối cảnh để xác định sản phẩm nào là hợp lệ). Điều này có lẽ sẽ truyền cảm hứng cho Chomsky để định nghĩa chúng và đặt tên cho chúng là ngôn ngữ loại 1. Hãy nhớ rằng định nghĩa này được đưa ra trước khi máy tính trở nên nhanh như ngày nay: nó được các nhà lý thuyết ngôn ngữ chính thức quan tâm nhiều hơn so với các lập trình viên.

Các ngữ pháp không bị giới hạn thậm chí còn kỳ lạ hơn: không còn khái niệm 'mở rộng' một tiếng ồn và thay thế nó bằng một sản phẩm, có thể tùy thuộc vào ngữ cảnh. Bạn cũng được phép tự do sửa đổi bối cảnh. Điều này làm cho các ngữ pháp không bị hạn chế thậm chí ít trực quan hơn để làm việc với: các chương trình tương đương và trực quan hơn rất nhiều.


Nhưng ngôn ngữ nhạy cảm ngữ cảnh hữu ích! Xem, ví dụ, cuộc thảo luận này .
Raphael

Độ nhạy ngữ cảnh là hữu ích, nhưng ngữ pháp nhạy cảm theo ngữ cảnh như một cách để mô tả ngôn ngữ không phải là IMO rất hữu ích. Bạn nên sử dụng một số phương tiện khác để mô tả các tính năng nhạy cảm theo ngữ cảnh.
Alex ten Brink

Nhưng bạn nói về ngôn ngữ trong hầu hết các phần của câu trả lời của bạn. Về ngữ pháp, ymmw. Có các mô hình ngữ pháp giữa CFG và CSG có các ứng dụng mô hình tự nhiên, ví dụ: ghép nối / / CFG.
Raphael

1
Bạn nói đúng, tôi đã rất cẩu thả với sự phân biệt giữa các ngôn ngữ và ngữ pháp mà tôi thấy. Tôi đã cập nhật câu trả lời của mình.
Alex ten Brink

10

Nói chung, bạn thường muốn biết lớp nhỏ hơn mà ngôn ngữ . Điều này là do các lớp nhỏ hơn có thể được nhận ra / chấp nhận / tạo bởi các cơ chế đơn giản hơn (automata, ngữ pháp, biểu thức chính quy, v.v.), điều này là mong muốn.L

Ví dụ: lớp ngôn ngữ thông thường có thuộc tính đóng tốt và được cấp DFA Một bạn có thể kiểm tra theo thời gian tuyến tính rằng một từ thuộc về . Ngược lại, với máy Turing, bạn cần thời gian tuyến tính chỉ để đọc đầu ra, điều này thường xảy ra trước khi nó thực sự bắt đầu xử lý.L(Một)

Nói tóm lại, đối với các lớp nhỏ hơn, bạn cần ít năng lực tính toán hơn để giải quyết vấn đề quyết định liệu một từ có thuộc về ngôn ngữ hay không.

Theo Wikipedia , Chomsky đã xác định ngữ pháp nhạy cảm ngữ cảnh (tức là Loại 1) để mô tả cú pháp của ngôn ngữ tự nhiên. Điều này khác một chút so với các lớp ngôn ngữ khác, được giới thiệu để mô tả các họ chuỗi được sử dụng trong toán học (ví dụ cú pháp của các công thức số học) thay vì ngôn ngữ tự nhiên (ví dụ cú pháp của một câu đúng ngữ pháp trong tiếng Anh) .


2
"Nói tóm lại, đối với các lớp nhỏ hơn, bạn cần ít năng lực tính toán hơn để giải quyết vấn đề quyết định liệu một từ có thuộc về ngôn ngữ hay không." chính xác, nhưng làm thế nào điều này áp dụng cho Loại 1 so với Loại 0? Đó chính xác là câu hỏi!
bitmask

ccn

8

Trong các ngôn ngữ không ngữ cảnh, tại bất kỳ điểm nào của phân tích cú pháp đầu vào, máy tự động ở trạng thái được xác định bởi ngăn xếp của nó. Mỗi sản xuất có cùng một hành vi trong việc tiêu thụ đầu vào bất kể nó được sử dụng ở đâu.

Điều này dẫn đến một đặc tính thú vị là mỗi sản phẩm tạo ra một ngôn ngữ phụ của ngôn ngữ được tạo bởi những ngôn ngữ sâu hơn trong ngăn xếp và do đó, đối với mỗi cặp A và B của sản phẩm được tạo và tiêu thụ trên bất kỳ đầu vào cụ thể nào, chúng tôi có ba trường hợp có thể xảy ra:

  • a: Đầu vào được tiêu thụ bởi A hoàn toàn được chứa trong đầu vào được tiêu thụ bởi B; hoặc là
  • b: Đầu vào được tiêu thụ bởi A hoàn toàn chứa đầu vào được tiêu thụ bởi B; hoặc là
  • c: Đầu vào được tiêu thụ bởi A hoàn toàn tách rời khỏi đầu vào được tiêu thụ bởi B.

Điều này ngụ ý rằng những điều sau đây không bao giờ xảy ra:

  • d: Đầu vào được tiêu thụ bởi A chồng lên một phần đầu vào được tiêu thụ bởi B.

Trái ngược với điều đó, trong các ngôn ngữ nhạy cảm theo ngữ cảnh, hành vi của từng sản phẩm phụ thuộc vào nơi nó được sử dụng, do đó, đầu vào được tiêu thụ trong sản xuất không phải là ngôn ngữ phụ của các ngôn ngữ sâu hơn trong ngăn xếp (thực tế, xử lý nó với một ngăn xếp sẽ không hoạt động). Và chúng ta có khả năng đó d có thể xảy ra.

Trong thế giới thực, trường hợp một ngôn ngữ nhạy cảm theo ngữ cảnh sẽ có ý nghĩa giống như biểu thị <b> văn bản in đậm </ b>, <i> văn bản in nghiêng </ i> và <u> văn bản được gạch chân </ u> với các thẻ html này và để chúng trùng nhau, như "Đây là văn bản <u> với <i> hỗn hợp </ u> thẻ chồng chéo </ i>." Quan sát điều đó để phân tích điều đó và tìm xem tất cả các thẻ bắt đầu có khớp với các thẻ kết thúc hay không, một chiếc PDA sẽ không làm vì nó không có ngữ cảnh, nhưng một LBA sẽ dễ dàng làm được.


7

Thuộc tính đóng cửa

Trong tất cả các lớp ngôn ngữ từ hệ thống phân cấp Chomsky, chỉ các ngôn ngữ thông thường và nhạy cảm theo ngữ cảnh được đóng lại dưới sự bổ sung . Do đó đây là một loại tính năng độc đáo của các ngôn ngữ nhạy cảm ngữ cảnh.

Trái ngược với các ngôn ngữ không ngữ cảnh, CS cũng bị đóng dưới sản phẩm giao nhau và xáo trộn .


6

Bất kỳ ngôn ngữ nào thuộc loại 1 đều có thể được nhận ra bởi máy Turing chỉ sử dụng không gian tuyến tính (còn gọi là automata giới hạn tuyến tính).


2
Vâng, đó là định nghĩa. Nhưng làm thế nào để hạn chế này giúp tôi?
bitmask

3
nó giúp tôi vì nó giới hạn sức mạnh của các thuật toán nhận dạng CSG thành E thay vì EXP. Tôi không biết nó giúp bạn như thế nào :)
Suresh

5

Các ngôn ngữ loại 1 có thể được quyết định bởi automata giới hạn tuyến tính , là các máy Turing không xác định chỉ có thể sử dụng một phần của băng có kích thước là tuyến tính với kích thước đầu vào.


4

Hệ thống phân cấp Chomsky phân loại ngữ pháp nhiều hơn ngôn ngữ. Tuy nhiên, nó không được thiết kế để liên quan đến số lượng băng mà một máy tự động phải nhận ra nó, như bạn đã đề xuất cho Loại 2 và 3, ngay cả khi có một loại máy Turing làm điều đó cho ngữ pháp Loại 1.

Bạn cũng cần lưu ý rằng các ngôn ngữ của ngữ pháp Loại 0 không phải tất cả đều được máy Turing nhận ra, nhưng chúng chỉ có thể được liệt kê bằng một máy như vậy: Loại 0 có nghĩa là liệt kê đệ quy và máy Turing chỉ nhận dạng ngôn ngữ đệ quy.


4

Ngôn ngữ lập trình hiện đại sử dụng các tính năng nhạy cảm theo ngữ cảnh mọi lúc; họ rơi vào một tập hợp con có thể được quyết định một cách hiệu quả.

Ví dụ là phân tích tên và loại và suy luận kiểu.


3

Nhiều người khác đã đề cập rằng các ngôn ngữ Loại 1 là những ngôn ngữ có thể được nhận dạng bởi automata giới hạn tuyến tính. Vấn đề tạm dừng là có thể quyết định đối với automata giới hạn tuyến tính, điều này có nghĩa là nhiều thuộc tính khác không thể tính toán được đối với các ngôn ngữ được công nhận bởi Máy quay có thể quyết định đối với ngôn ngữ Loại 1.

Phải thừa nhận bằng chứng rằng vấn đề tạm dừng là có thể quyết định đối với automata giới hạn tuyến tính dựa trên thực tế là với số lượng băng hữu hạn, họ chỉ có thể nhập một số trạng thái hữu hạn, vì vậy nếu họ không dừng lại trong nhiều bước bạn biết lặp và sẽ không bao giờ dừng lại. Bằng chứng này về mặt kỹ thuật áp dụng cho tất cả các máy tính thực tế (cũng có bộ nhớ hữu hạn), nhưng đó không phải là bất kỳ lợi ích thiết thực nào trong việc giải quyết vấn đề tạm dừng cho các chương trình chạy trên chúng.

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.