Một biểu thức chính quy có thể là vô hạn?


10

Tôi biết rằng các ngôn ngữ có thể được xác định bằng cách sử dụng các biểu thức chính quy và các ngôn ngữ có thể nhận ra bởi DFA / NFA (automata hữu hạn) là tương đương. Ngoài ra, không có DFA tồn tại cho ngôn ngữ . Nhưng nó vẫn có thể được viết bằng biểu thức thông thường (cho rằng vấn đề bất kỳ ngôn ngữ phi thường có thể được) như { ε } { 01 } { 0011 } . . . . . .{0n1n|n0}{ϵ}{01}{0011}....... Nhưng chúng tôi biết rằng mọi ngôn ngữ có biểu thức chính quy đều có DFA nhận ra nó (mâu thuẫn với tuyên bố trước đây của tôi). Tôi biết đây là một điều tầm thường, nhưng định nghĩa của biểu thức chính quy có bao gồm điều kiện là nó phải hữu hạn không?


3

1
Chỉ cần một lưu ý phụ: nếu chúng tôi bỏ yêu cầu DFA / NFA là hữu hạn, chúng tôi có thể xây dựng một máy tự động để chấp nhận . {0n1nn0}

3
Theo quan điểm của thuật ngữ, từ 'automata' là số nhiều của 'automaton'. Không có từ 'automatas' - bạn không thể biến nó thành số nhiều hơn so với hiện tại. (automata là chính xác như một sở hữu nhưng không phải là số nhiều)
chasly từ UK

Câu trả lời:


23

Nếu các biểu thức chính quy được phép là vô hạn, thì bất kỳ ngôn ngữ nào cũng sẽ là chính quy.

Với ngôn ngữ , chúng ta có thể luôn luôn xác định biểu thức chính quy , mà chính xác định nghĩa . (Ví dụ: biểu thức chính quy định nghĩa .)L={w1,w2,}R=w1+w2+L
R1=ϵ+0+1+00+01+10+11+L1={0,1}

Chúng tôi biết rằng một số ngôn ngữ không thường xuyên, vì vậy điều này cho thấy các biểu thức chính quy vô hạn mô tả một lớp ngôn ngữ lớn hơn các biểu thức chính quy hữu hạn.


5
Tôi thích câu trả lời này, bởi vì nó không chỉ nói rằng các biểu thức chính quy vô hạn là khác nhau, mà khái niệm về tổng thể không có ý nghĩa.
jmite

Một tuyên bố ngắn gọn hơn về điểm tôi đã chôn trong đoạn thứ hai của mình, và do đó rõ ràng hơn.
Davislor

Nhưng nó kết thúc với một tautology thuần túy. Tại sao chúng ta không xem xét tất cả các ngôn ngữ thường xuyên, sau đó, nếu chúng có dạng này? Những điều chúng ta làm với regexes không còn hoạt động. Chúng ta không thể xây dựng một máy trạng thái bằng thuật toán quy nạp bởi vì nó không bao giờ kết thúc và có trạng thái vô hạn. Chúng tôi không thể so sánh với mọi thứ trong danh sách và từ chối nếu không có gì phù hợp. Và dù sao chúng ta cũng không thể đại diện cho danh sách. (Danh sách chúng tôi có thể tạo bằng máy tính là ngôn ngữ có thể quyết định.) Chúng tôi có thể chứng minh nội dung bằng cách sử dụng thực tế là mọi ngôn ngữ đều có dạng này, nhưng không phải là thứ chúng tôi biết về biểu thức chính quy.
Davislor

@jmite "không có ý nghĩa" hay trường hợp đặc biệt?
BAR

@Ebar Không có ý nghĩa, vì trong lớp ngôn ngữ trên được mô tả bởi các biểu thức chính quy vô hạn chỉ là tức là tập hợp tất cả các ngôn ngữ. Chúng tôi không có được một lớp ngôn ngữ như cách bạn làm với REs hữu hạn, CFG hoặc thậm chí Turing Machines. Σ2Σ
jmite

5

Vâng, nó phải là hữu hạn. Hãy tưởng tượng bạn có tập hợp vô hạn các kết quả khớp có thể và đầu vào của bạn là 011. Bạn có bao giờ có thể từ chối nó? Bạn có bao giờ hết trận đấu để kiểm tra?

Có ngôn ngữ nào, theo định nghĩa đó, sẽ không thường xuyên không? Thế còn tập hợp tất cả các cặp chương trình và đầu vào sao cho chương trình đã cho dừng trên đầu vào đã cho thì sao?

Bây giờ, nếu bạn có một chương trình liệt kê các chuỗi trong một ngôn ngữ theo thứ tự từ điển học

Cập nhật

Để làm rõ một chút dựa trên phản hồi trong các bình luận, lý do không phải mọi ngôn ngữ của hình thức này là thường xuyên là theo định nghĩa. Ví dụ, nếu bạn tra cứu bằng chứng của định lý Kleene, điều đó phụ thuộc vào thực tế là một biểu thức chính quy phải hữu hạn để chứng minh rằng nó tạo ra một máy trạng thái hữu hạn.

Tại sao chúng ta định nghĩa ngôn ngữ tiếng Nhật thông thường theo cách đó? Bởi vì mọi ngôn ngữ chính thức là một tập hợp con của các chuỗi trên bảng chữ cái và mọi tập hợp chuỗi có thể được biểu thị dưới dạng một tập hợp các singletons, vì vậy nếu chúng ta gọi bất kỳ tập hợp chuỗi nào là ngôn ngữ thông thường , thì ngôn ngữ thông thường sẽ chỉ là một từ đồng nghĩa với ngôn ngữ . Đó không phải là một định nghĩa rất hữu ích, đặc biệt là vì chúng ta thực sự không thể thực hiện nó trong phần cứng hoặc phần mềm. Chúng ta không thể lưu trữ một danh sách vô hạn tùy ý ở bất cứ đâu hoặc xây dựng một máy trạng thái vô hạn.

Tuy nhiên, như tôi đã gợi ý, nếu bạn có cách liệt kê tất cả các chuỗi trong một ngôn ngữ theo thứ tự, bạn có thể xây dựng một công cụ quyết định từ đó (chấp nhận khi bạn thấy chuỗi chính xác đó, từ chối khi bạn gặp một chuỗi đi sau chuỗi đó đang tìm kiếm) và ngược lại (đối với từng chuỗi theo thứ tự, hãy chạy nó qua bộ quyết định và xuất nó khi và chỉ khi nó được chấp nhận). Vì vậy, nếu chúng ta coi mọi ngôn ngữ có thể đếm được đều đặn , mọi ngôn ngữ có thể quyết định sẽ là ngôn ngữ thường xuyên và chúng ta sẽ cần một thuật ngữ mới cho các ngôn ngữ được công nhận bởi các máy trạng thái hữu hạn và mã hóa tương đương của chúng là các biểu thức hữu hạn.


1
Câu trả lời này là sai. Thực tế là một số đại diện của một ngôn ngữ không cho vay để xây dựng một người quyết định thuật toán theo cách ngây thơ không ngụ ý rằng đại diện này là sai; có thể có những cách tiếp cận khác Trong thực tế, mọi ngôn ngữ có thể quyết định có một đại diện của hình thức sasha đề xuất! Nói tóm lại, bạn đang cam kết sai lầm "Tôi không thể nhìn thấy như thế nào, vì vậy nó phải là không thể".
Raphael

@Raphael: Vui lòng xem xét ý nghĩa của tuyên bố của bạn, mỗi ngôn ngữ có thể quyết định đều có đại diện cho hình thức mà Sasha đề xuất! Trên thực tế, đó là điểm mà tôi đã đưa ra trong câu trả lời của mình. Câu hỏi là, tất cả các ngôn ngữ của hình thức này được định nghĩa là thường xuyên? Vâng, có phải mọi ngôn ngữ có thể quyết định thường xuyên? (Và, như tôi đã chỉ ra, một số điều không thể giải quyết được nữa?) Đó có phải là một định nghĩa hữu ích của Thường xuyên không?
Davislor

Hơn nữa, khác xa với việc không thể thực hiện được một người quyết định cho một danh sách vô hạn các chuỗi, câu cuối cùng của tôi là một gợi ý về cách nó có thể được thực hiện: nếu danh sách các chuỗi được sắp xếp tốt, bạn có thể từ chối ngay khi bạn gặp một chuỗi qua nó theo thứ tự. Tuy nhiên, một máy trạng thái hữu hạn không thể thực hiện điều này bởi vì nó không thể biểu thị tất cả các trạng thái có so với từng chuỗi trong danh sách vô hạn và cũng không thể biểu thức chính quy. Nếu họ có thể, họ sẽ đủ mạnh để nhận ra tất cả các ngôn ngữ có thể quyết định.
Davislor

0

Giả sử các biểu thức chính quy được phép là vô hạn.

Do đó, ngôn ngữ được xác định bởi {ϵ} {01} {0011} ... sẽ là thường xuyên. Đối với mỗi ngôn ngữ thông thường tồn tại một NFA. Một cách để có được NFA này là có các NFA riêng cho từng {ϵ}, {01}, {0011} ... và kết hợp chúng bằng cách sử dụng các hiệu ứng chuyển tiếp. Vì có các biểu thức chính quy khác nhau vô hạn, chúng ta sẽ cần các NFA phụ vô hạn được kết hợp. Tuy nhiên, NFA chỉ có thể có số lượng trạng thái hữu hạn (định nghĩa về NFA).

Do đó, không tồn tại NFA có thể định nghĩa ngôn ngữ được xác định bởi sự kết hợp của các biểu thức chính quy vô hạn, hàm ý ngôn ngữ này không thường xuyên.

Do đó, không có biểu thức chính quy có thể định nghĩa cùng ngôn ngữ với ngôn ngữ được xác định bởi sự kết hợp của các biểu thức chính quy vô hạn.

Do đó biểu thức chính quy có thể chỉ có biểu thức hữu hạn.


"Biểu thức chính quy vô hạn" của bạn sau đó xác định một lớp ngôn ngữ khác, không phải là ngôn ngữ thông thường. Trên thực tế, họ có thể định nghĩa bất kỳ ngôn ngữ nào, và điều đó hoàn toàn không thú vị (chúng không hữu hạn, do đó khó làm việc; và họ có thể làm bất cứ điều gì, do đó không có gì để nghiên cứu về các giới hạn).
vonbrand
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.