Làm thế nào để cảm nhận một cách trực giác rằng một ngôn ngữ là thường xuyên


9

Cho một ngôn ngữ , làm thế nào tôi có thể nói trực tiếp, mà không cần nhìn vào quy tắc sản xuất, rằng ngôn ngữ này không thường xuyên?L={anbncn}

Tôi có thể sử dụng bơm bổ đề nhưng một số kẻ đang nói chỉ nhìn vào ngữ pháp rằng đây không phải là thông thường. Làm thế nào là nó có thể?


1
Bất cứ ai cũng có thể nhìn vào bất kỳ ngôn ngữ nào và chỉ nói rằng nó không thường xuyên. Tôi không chắc chắn về trực giác, mỗi lần chơi, ở đây cũng nhiều như trải nghiệm. Đây là một ngôn ngữ khá đơn giản (mặc dù không thường xuyên) và là ngôn ngữ chắc chắn gặp phải trong nghiên cứu ngôn ngữ chính thức. Một khi bạn được thông báo rằng nó không thường xuyên và đã chứng minh rằng nó không thường xuyên sử dụng bất kỳ kỹ thuật chứng minh hợp lệ nào, bạn thường không cần bằng chứng để thuyết phục người khác, bởi vì tất cả họ đã chứng minh điều đó khi họ được giới thiệu với môn học.
Patrick87

vâng, nhưng đôi khi trong các bài giảng họ chỉ tuân theo một số chứng minh toán học khô khan, nhưng họ thực sự thiếu những giải thích trực giác với các ví dụ đơn giản thực sự
doniyor

Quên . Bạn đã bao giờ cảm thấy rằng không thường xuyên? a n b nanbncnanbn
Uday Reddy

2
Nhìn vào một ngữ pháp và tuyên bố vì ngữ pháp không thường xuyên, ngôn ngữ không thường xuyên là một ngụy biện. Có rất nhiều ngữ pháp không thông thường cho các ngôn ngữ thông thường. Coi chừng! Điều đó nói rằng, quyết định một ngữ pháp là thường xuyên là dễ dàng; chỉ cần kiểm tra sản phẩm.
Raphael

Câu trả lời:


11

Thuộc tính chính của DFA's / NFA là thiếu bộ nhớ không giới hạn. Nếu bạn nhìn vào một ngôn ngữ và thuật toán duy nhất (sau này sẽ được dịch thành Finite Automaton), bạn có thể nghĩ rằng cần có thuộc tính này, nghĩa là, bạn cảm thấy rằng bất kỳ thuật toán nào nhận ra nó sẽ cần phải nhớ một số lượng lớn tùy ý (như trong ví dụ của bạn) thì ngôn ngữ đó có lẽ không thường xuyên.n

Tất nhiên, bạn nên luôn nhớ rằng trực giác toán học có thể sai, và cách duy nhất để chắc chắn về trực giác của bạn là chứng minh điều đó.

EDIT: Tôi sẽ trả lời câu hỏi cuối cùng trong các bình luận ở đây, vì thiếu không gian.

các bạn đang nói về bộ nhớ không giới hạn mà bạn muốn nói là lý do tại sao nó không thường xuyên. nhưng một ^ nb ^ m cũng có thể có bộ nhớ không giới hạn nếu tôi muốn, phải không? Điều này vẫn mang lại cho tôi không có hòa bình.

Vấn đề không phải là các từ có thể lớn đến mức nào (bạn thường sẽ gặp các ngôn ngữ thông thường vô hạn, bởi vì mọi ngôn ngữ hữu hạn đều đều và điều đó khá nhàm chán) mà là DFA cần nhớ bao nhiêu.
Trong ví dụ , không cần nhớ . Các algorihm chỉ cần đảm bảo rằng chúng là tích cực và từ đó được sắp xếp chính xác. Đây là một danh sách hữu hạn và mỗi mục trong danh sách yêu cầu một lượng bộ nhớ không đổi. So sánh điều này với , trong đó một thuật toán đơn giản được yêu cầu để nhớ rằng số lượng của 'bằng với số m , n a n b n a bambnm,n
anbnab'S. Điều này sẽ yêu cầu bộ nhớ không giới hạn. Khi tôi nhìn vào một ngôn ngữ và thấy rằng bất kỳ thuật toán nào tôi có thể nghĩ về nhu cầu bộ nhớ không bị ràng buộc, trực giác của tôi rằng ngôn ngữ không thường xuyên phát triển mạnh hơn. Nếu tôi không thể tìm thấy thuật toán "thông minh" (thuật toán yêu cầu bộ nhớ không đổi) trong một khoảng thời gian hợp lý (bạn cần bao nhiêu thời gian hợp lý), tôi sẽ thử chứng minh ngôn ngữ không thường xuyên.
Hy vọng điều này làm cho nó rõ ràng hơn một chút.


cảm ơn bạn, chứng minh toán học mang lại trực giác, nhưng hãy nhìn vào quy tắc sản xuất này: S -> ab | aSb. cái này là cho một ^ nb ^ n nói rằng nó cũng không thường xuyên. nhưng a ^ mb ^ n là thường xuyên với m, n> = 1. tại sao lại thế này Đây thực sự là cùng một hình thức, phải không? tôi không hiểu sự khác biệt giữa hai ngôn ngữ này
doniyor

1
Đối với một ^ nb ^ n bạn cần theo dõi 2 điều: thứ nhất, số a bằng với số b (đây là phần không thể đối với DFA) và thứ hai là không có 'b' nào được theo sau bởi 'a '. Đối với một ^ mb ^ n bạn không quan tâm đến giá trị của m, n. Bạn chỉ quan tâm rằng có ít nhất một 'a' và ít nhất một 'b' và không có 'b' nào được theo sau bởi 'a'. Nói một cách không chính thức, bạn chỉ cần nhớ 3 điều.
Boris Khayvas

oh được rồi, bây giờ tôi đã nhận nó
trợ

Vì vậy, thứ tự cũng là điều quan trọng, phải không? như aabbcc chấp nhận nhưng không phải aabcbc chỉ vì đơn hàng không ổn. đúng?
trợ

1
"Thuộc tính chính của các ngôn ngữ thông thường là thiếu bộ nhớ không giới hạn." - Tôi biết ý của bạn là gì, nhưng câu đó không có nghĩa gì cả. "Bạn cảm thấy rằng bất kỳ thuật toán nào nhận ra nó sẽ cần phải nhớ một số lượng lớn các thứ tùy ý" - Đây thực sự là trực giác duy nhất tôi biết, nhưng loại này rất, rất nguy hiểm; thấy ở đây .
Raphael

5

Tôi có thể sử dụng bơm bổ đề

Chính xác. Sau khi bạn đã sử dụng bổ đề Pumping hoặc bất kỳ kỹ thuật nào khác trong vài (vài chục) lần, bạn sẽ bắt đầu thấy các mẫu trong các ngôn ngữ cấm chúng không được sử dụng thường xuyên. là một thứ rất cơ bản mà bạn có thể đã thành thạo. Vì vậy, đây cũng là một vấn đề kinh nghiệm, không chỉ là trực giác.anbn

Một cách tốt để kiểm tra trực giác của bạn là xem xét các ngôn ngữ này:

  1. {xyyzx,y,z{a,b}+}
  2. {xyyzx,y,z{a,b}}
  3. {xyyzx,y,z{a,b,c}+}
  4. {xyyzx,y,z{a,b,c}}

Đó là bối cảnh miễn phí?


1
Nếu ai đó biết các ví dụ tương tự tốt đẹp cho biên giới của các ngôn ngữ thông thường, xin vui lòng nói như vậy. Xin đừng làm hỏng câu trả lời trong các ý kiến.
Raphael

Raphael - công việc tuyệt vời! cảm ơn bạn đã cho ví dụ và kiểm tra tôi rõ ràng.
doniyor


4

Bạn thực sự có thể quyết định nếu một ngôn ngữ là thường xuyên bằng cách sử dụng các tính toán khá đơn giản, thay vì làm một bằng chứng đầy đủ. Bạn chỉ cần áp dụng một tiêu chí rất mạnh mẽ: Một ngôn ngữ là thường xuyên khi và chỉ khi nó có nhiều chỉ tiêu.

LxxLwxwLL={anbn}aL={an1bn|n1}bL=akL={ankbn|nk}L

DDSaaLDS


b \ L có nghĩa là: nếu tôi chia L theo b, thì tôi sẽ nhận được tập rỗng?. Có phải bởi vì tôi thực sự phải bắt đầu đọc từ khi bắt đầu? và không phải từ phía sau?
doniyor

1
bL=L/b

1
Đây là một sàn trượt tốt giải thích các chỉ tiêu và cách xây dựng các DFA từ chúng: cs.cmu.edu/~cdm/pdf/Minimization.pdf
James Koppel

oh được rồi, cảm ơn rất nhiều bây giờ tôi nhận được một litle. Mmm ... hãy để tôi học lại điều này một lúc nữa ...
doniyor
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.