Liệu một ngôn ngữ thông thường nhất định có chứa một tập hợp con không có tiền tố vô hạn?


11

Một tập hợp các từ trên một bảng chữ cái hữu hạn là không có tiền tố nếu không có hai từ riêng biệt trong đó một từ là tiền tố của từ kia.

Câu hỏi là:

Sự phức tạp của việc kiểm tra xem một ngôn ngữ thông thường được cung cấp dưới dạng NFA có chứa một tập hợp con không có tiền tố vô hạn không?

Trả lời (do Mikhail Rudoy, ​​ở đây bên dưới) : Nó có thể được thực hiện trong thời gian đa thức, và tôi nghĩ ngay cả trong NL.

Câu trả lời diễn giải Mikhail của, chúng ta hãy (Σ,q0,F,δ) là NFA đầu vào theo hình thức bình thường (không chuyển epsilon, cắt), và để cho L[p,r] (resp. L[p,R] ) được ngôn ngữ thu được bằng cách có trạng thái p là trạng thái ban đầu và {r} là trạng thái cuối cùng (trạng thái tương ứng p là inital và tập R là cuối cùng). Đối với một chữ u để uωlà từ vô hạn thu được bằng cách lặp u .

Sau đây là tương đương:

  1. Ngôn ngữ L[q0,F] chứa tập hợp con không có tiền tố vô hạn.
  2. qQ ,uL[q,q]{ε} vL[q,F] đểv không phải là một tiền tố củauω .
  3. qQ L[q,q]{ε} uL[q,q] vL[q,F] đểv không phải là một tiền tố củauω .

Bằng chứng:

3 2 tầm thường.

Đối với 2 1, nó cũng đủ để thấy rằng đối với bất kỳ wL[q0,q] chúng tôi có mà w(u|v|)v là một tập hợp con vô hạn tiền tố miễn L[q0,F] .

Cuối cùng, 1 3 là bằng chứng "chính xác" trong câu trả lời của Mikhail.

Câu trả lời:


7

Vấn đề của bạn có thể được giải quyết trong thời gian đa thức.

Để bắt đầu, chuyển đổi NFA đã cho thành NFA tương đương với các thuộc tính bổ sung sau:

  • Không có chuyển tiếp epsilon
  • Tất cả các trạng thái có thể truy cập từ trạng thái bắt đầu

Chương trình con hữu ích

Giả sử chúng ta có NFA N , trạng thái q và chuỗi không trống s . Chương trình con sau đây sẽ cho phép chúng ta đánh giá giá trị thật của câu lệnh sau: "mọi đường dẫn trong N từ trạng thái q đến trạng thái chấp nhận tương ứng với một chuỗi là tiền tố của chuỗi sn cho một số n ." Hơn nữa, chương trình con này sẽ chạy trong thời gian đa thức.

Đầu tiên, xây dựng NFA S với |s|+1 bang mà chấp nhận tất cả các chuỗi mà không phải là tiền tố của sn cho bất kỳ n ( |s| phi chấp nhận quốc gia trong vòng một để theo dõi các nơi trong "mô hình" của sssss chúng tôi cho đến nay, và một trạng thái chấp nhận nếu chúng ta đã đi chệch khỏi mô hình đó). Tiếp theo, xây dựng NFA N mà là chính xác như N nhưng có q là trạng thái bắt đầu của nó. Cuối cùng, xây dựng một thức NFA Ncó ngôn ngữ là bằng cách sử dụng cấu trúc giao cắt NFA tiêu chuẩn. Lưu ý rằng tất cả các cấu trúc này là đa thức về kích thước của đầu vào.L(N)L(S)L(N)

Sau đó, chỉ cần kiểm tra xem ngôn ngữ của có trống không (có thể được thực hiện trong thời gian đa thức với một tìm kiếm biểu đồ đơn giản). khi và chỉ khi , hay nói cách khác, mọi chuỗi trong không nằm trong . Nói cách khác, ngôn ngữ của trống khi và chỉ khi chỉ chấp nhận các chuỗi là tiền tố của đối với một số . Điều này có thể được chia sẻ lại chính xác như tuyên bố mà chúng tôi đang cố gắng đánh giá: "mọi đường dẫn trong từ trạng thái đến trạng thái chấp nhận tương ứng với một chuỗi là tiền tố của chuỗiNL(N)=L(S)L(N)=L(N)L(S)NNsnnNqsn n ncho một số . "n

Thuật toán chính

Hãy xem xét tập hợp các trạng thái trong NFA trong một số vòng lặp. Đối với mỗi trạng thái như vậy, , làm như sau:q

Đặt là bất kỳ vòng lặp đơn giản nào chứa . Gọi là chuỗi tương ứng với vòng lặp . Vì NFA không có chuyển tiếp epsilon, không trống. Sau đó áp dụng chương trình con cho NFA, trạng thái và chuỗi . Nếu chương trình con cho chúng ta biết rằng mọi đường dẫn bắt đầu từ trong NFA và kết thúc ở trạng thái chấp nhận tương ứng với tiền tố cho một số thì tiếp tục đến trạng thái tiếp theo . Mặt khác, đầu ra mà ngôn ngữ của NFA đã cho chứa một tập hợp con không có tiền tố vô hạn.P2qsP2sqsqsnnq

Nếu chúng ta thử mọi trạng thái trong một vòng lặp và thuật toán không bao giờ xuất ra, thì đầu ra rằng ngôn ngữ của NFA đã cho không chứa tập hợp con không có tiền tố vô hạn.q

Đúng (nửa đầu)

Đầu tiên, giả sử rằng thuật toán trên khẳng định rằng ngôn ngữ của NFA đã cho có chứa một tập hợp con không có tiền tố vô hạn. Giả sử rằng đầu ra này đã được chọn trong khi xem xét một số vòng lặp và một số trạng thái . Như trước, là chuỗi tương ứng với . Sau đó, chúng ta biết theo chương trình con rằng không phải mọi đường dẫn bắt đầu từ trong NFA và kết thúc ở trạng thái chấp nhận tương ứng với tiền tố của đối với một số (vì đây là đầu ra duy nhất của chương trình con sẽ dẫn đến chính thuật toán xuất ra tại đó ).P2qsP2qsnnq

Đặt là một đường dẫn mà sự tồn tại của nó được khẳng định bởi chương trình con: một đường dẫn từ đến trạng thái chấp nhận sao cho chuỗi tương ứng không phải là tiền tố của cho bất kỳ .P3qtsnn

Đặt bao gồm bản sao của trong đó đủ lớn mà. Vì là một vòng lặp qua , có thể được coi là một đường dẫn từ đến . Chuỗi tương ứng với làP2mP2mm|s|>|t|P2qP2qqP2sm

Đặt là một đường dẫn từ trạng thái bắt đầu đến (tồn tại vì mọi trạng thái đều có thể truy cập từ đầu) và gọi là chuỗi tương ứng với đường dẫn này.P1qr

Sau đó, đường dẫn bao gồm , bản sao của và là đường dẫn tính toán chấp nhận. Chuỗi tương ứng với đường dẫn này là . Do đó, NFA chấp nhận mọi chuỗi có dạng . Đây là một chuỗi vô hạn được NFA chấp nhận và tôi cho rằng bộ chuỗi này không có tiền tố. Cụ thể, giả sử là tiền tố của với . Nói cách khác, là tiền tố của . Vì có độ dài, điều này ngụ ý rằngP1xP2P3r(sm)xtr(sm)xtr(sm)xtr(sm)yty>xt(sm)yxt(sm)yxm(yx)|s|m|s|>|t|t là tiền tố của . Nhưng chúng ta biết bằng đầu ra của chương trình con rằng không phải là tiền tố của cho bất kỳ . Do đó, không thể là tiền tố của và như mong muốn, bộ chuỗi không có tiền tố.(sm)yx=sm(yx)tsnnr(sm)xtr(sm)yt

Do đó, tôi đã chỉ ra rằng nếu thuật toán chính xuất ra ngôn ngữ của NFA đã cho có chứa một tập hợp con không có tiền tố vô hạn thì thực tế đây là trường hợp.

Tính đúng đắn (nửa sau)

Tiếp theo, tôi sẽ chỉ cho nửa kia: nếu ngôn ngữ của NFA đã cho có một tập hợp con không có tiền tố vô hạn thì thuật toán chính sẽ đưa ra thực tế này.

Giả sử ngôn ngữ của NFA đã cho chứa tập hợp con không có tiền tố vô hạn. Đặt là tập hợp các đường dẫn tính toán (chấp nhận) tương ứng với các chuỗi này. Lưu ý rằng là một tập hợp vô hạn các đường dẫn tính toán có các chuỗi tương ứng không bao giờ là tiền tố của nhau.AA

Giả sử rằng một trạng thái đang "lặp" trong NFA nếu tồn tại một vòng lặp trong NFA thông qua trạng thái đó và "không lặp" theo cách khác. Xem xét tất cả các đường dẫn từ trạng thái bắt đầu đến bất kỳ trạng thái vòng lặp nào chỉ đi qua trạng thái không lặp (ngoại trừ trạng thái vòng lặp nơi chúng kết thúc). Đặt là tập hợp các đường dẫn này. Mỗi đường dẫn không thể có một vòng lặp vì khi đó các trạng thái trong vòng lặp đó sẽ là các trạng thái lặp và do đó sẽ chuyển qua trạng thái lặp. Do đó, độ dài của các đường dẫn trong được giới hạn ở trên bởi số lượng trạng thái trong NFA và do đó là hữu hạn (ví dụ: nếu trạng thái bắt đầu là trạng thái lặp thì chỉ có đường dẫn đó là đường dẫn trống).PpPpPP

Chúng ta có thể phân vùng thành các tập con dựa trên cách các đường dẫn tính toán trong bắt đầu. Đặc biệt, đối với , chúng ta hãy là tập hợp của tất cả các đường dẫn tính toán trong bắt đầu bằng con đường và để cho là tập hợp của tất cả các đường dẫn khác trong . Rõ ràng, tất cả s và là rời nhau và công đoàn của họ là toàn bộ tập . Hơn nữa, chỉ chứa các đường dẫn không bao giờ đi qua trạng thái lặp và do đó không bao giờ lặp; do đó là hữu hạn. Chúng ta có thể kết luận rằng một sốA|P|+1ApPApApBAApBABBApphải là vô hạn (nếu không sẽ là một tập hợp hữu hạn của nhiều tập hợp hữu hạn).A

Vì là vô hạn, có vô số đường dẫn tính toán, không có chuỗi nào là tiền tố của nhau, đó là các đường dẫn chấp nhận bắt đầu bằng . Đặt là trạng thái đạt được ở cuối đường dẫn . Chúng ta có thể kết luận rằng có vô số đường dẫn chấp nhận, gọi tập hợp này là , bắt đầu từ tất cả các đường dẫn tương ứng với các chuỗi không phải là tiền tố của nhau.AppqpAq

Trong thuật toán chính, chúng tôi chạy chương trình con ở trạng thái và một số chuỗi . Chương trình con này cho chúng ta biết mọi đường dẫn chấp nhận bắt đầu từ tương ứng với một chuỗi là tiền tố của đối với một số . Nếu đây là trường hợp, thì tất cả các đường dẫn chấp nhận vô hạn trong sẽ là tiền tố của cho nhiều khác nhau , điều này có nghĩa là tất cả chúng đều là tiền tố của nhau. Đây không phải là trường hợp, vì vậy chúng tôi kết luận rằng khi thuật toán chính chạy chương trình con ở trạng tháiqsqsnnAsnnq, kết quả là kết quả khác có thể. Tuy nhiên, điều này dẫn đến thuật toán chính đưa ra rằng ngôn ngữ của NFA chứa một tập hợp con không có tiền tố vô hạn.

Điều này kết luận bằng chứng về sự đúng đắn.


Tôi không hiểu cách xử lý vòng lặp hoạt động, vì một trạng thái nhất định có thể là một phần của (theo cấp số nhân) nhiều vòng lặp. Tất nhiên, nếu bất kỳ hai trong số các vòng lặp đó có thể được sử dụng để tạo ra một chuỗi không định kỳ, thì chúng ta đã hoàn thành. q
japh

Bạn có ý nghĩa gì khi xử lý vòng lặp? Trong thuật toán chính, với mỗi trạng thái bạn chỉ chọn một vòng lặp đi qua (bất kỳ vòng lặp nào ngoài số mũ có khả năng theo cấp số nhân) và gọi vòng lặp đó (lời bạt bạn chạy chương trình con trên trạng thái và chuỗi trong đó là chuỗi liên kết với ). Chương trình con về cơ bản xử lý việc kiểm tra xem có thể tạo ra một chuỗi không định kỳ bằng cách sử dụng vòng lặp đó hay không. Nếu có, thì chúng ta đã xong. Nếu không (và hơn nữa là không cho mọi ), thì toàn bộ ngôn ngữ của bạn là sự kết hợp của các chuỗi định kỳ nên chúng tôi cũng đã hoàn thành. q P 2 q s s P 2 qqqP2qssP2q
Mikhail Rudoy

Để làm cho câu hỏi của tôi rõ ràng hơn, đây là một NFA đơn giản với trạng thái ban đầu , trạng thái cuối cùng và ba lần chuyển đổi: , , . Vòng lặp cho sẽ không tạo ra các chuỗi không có tiền tố, nhưng vòng lặp cho sẽ. T q a q q b q q a T a bqTqaqqbqqaTab
japh

Trên thực tế, các vòng lặp cho không tạo ra một tiền tố bộ miễn phí: tập các chuỗi đều sử dụng các vòng lặp. Trong thuật toán của tôi, nếu vòng lặp mà bạn chọn cho là vòng lặp thì chương trình con sẽ xác định rằng không có, không phải mọi con đường chấp nhận bắt đầu từ q có một chuỗi có dạng một * , và do đó thuật toán chính sẽ nói rằng một tiền tố vô hạn tập hợp con miễn phí tồn tại. Nếu vòng lặp những ứng dụng thuật toán cho q thay vì là b loop thì chương trình con xác định rằng không phải mọi con đường chấp nhận bắt đầu từ q có một chuỗi có dạng b *a b a a q aaabaaqaqaqbqbvà trong trường hợp này cũng vậy, thuật toán có cùng một đầu ra.
Mikhail Rudoy

Cảm ơn bạn Mikhail! Tôi nghĩ rằng câu trả lời của bạn giải quyết câu hỏi.
Googlo

2

Các định nghĩa

Định nghĩa 1 : Đặt S là một tập hợp các từ. Chúng tôi nói rằng là không có tiền tố vô hạn (tên được đặt cho mục đích của câu trả lời này) nếu có các từ và sao cho:Su 0 , ... , u n , ... v 1 , ... , v n , ...u0,,un,v1,,vn,

  • Đối với mỗi , và không trống và bắt đầu bằng các chữ cái riêng biệt;n1unvn

  • S={u0v1,,u0unvn+1,} .

Trực giác là bạn có thể đặt tất cả các từ đó lên một cây gốc vô hạn ( là gốc, là lá và là các nút bên trong còn lại) của hình dạng sau sao cho các từ trong chính xác là nhãn của các đường dẫn từ gốc đến lá:S

   u₀    u₁    u₂
■-----•-----•-----•⋅⋅⋅
      |     |     |
      | v₁  | v₂  | v₃
      |     |     |
      ▲     ▲     ▲

Mệnh đề 1.1 : Một tập hợp không có tiền tố vô hạn độc đáo là không có tiền tố.

Bằng chứng về mệnh đề 1.1 : Giả sử là tiền tố nghiêm ngặt của . Có hai trường hợp:u0unvn+1u0umvm+1

  • Nếu thì là tiền tố của . Điều này là không thể vì và có các chữ cái đầu tiên riêng biệt.n<mvn+1un+1umvm+1un+1vn+1

  • Nếu thì là tiền tố của . Điều này là không thể vì và có các chữ cái đầu tiên riêng biệt.n>mum+1unvn+1vm+1um+1vm+1

Mệnh đề 1.2 : Một tập hợp không có tiền tố vô hạn độc đáo là vô hạn.

Bằng chứng về mệnh đề 1.2 : Trong chứng minh 1.1, chúng tôi đã chỉ ra rằng nếu thì và không thể so sánh được với thứ tự tiền tố. Do đó chúng không bằng nhau.nmu0unvn+1u0umvm+1


Bằng chứng chính

Mệnh đề 2 : Bất kỳ tập hợp không có tiền tố vô hạn nào cũng chứa một tập hợp không có tiền tố vô hạn đẹp.

Mệnh đề 3 : Một ngôn ngữ chứa một tập hợp không có tiền tố vô hạn khi và chỉ khi nó chứa một tập hợp không có tiền tố vô hạn độc đáo.

Bằng chứng dưới đây.

Bằng chứng về mệnh đề 3 : theo mệnh đề 2. bởi các mệnh đề 1.1 và 1.2.

Mệnh đề 4 : Tập hợp các tập hợp con không có tiền tố độc đáo của ngôn ngữ thông thường (được mã hóa thành một từ vô hạn ) là xuyên (và kích thước của Büchi automaton nhận ra nó là đa thức trong kích thước của NFA nhận ra ngôn ngữ thông thường).u0¯v1^u1¯v2^u2¯ω

Bằng chứng dưới đây.

Định lý 5 : Quyết định xem một ngôn ngữ thông thường được mô tả bởi NFA có chứa một tập hợp con không có tiền tố vô hạn có thể được thực hiện theo đa thức thời gian theo kích thước của NFA hay không.

Bằng chứng của định lý 5 : Theo mệnh đề 3, đủ để kiểm tra xem nó có chứa một tập hợp con không có tiền tố độc đáo vô hạn hay không, có thể được thực hiện trong thời gian đa thức bằng cách xây dựng máy tự động Büchi được đưa ra bởi mệnh đề 4 và kiểm tra độ không rỗng của nó ngôn ngữ (có thể được thực hiện theo thời gian tuyến tính theo kích thước của máy tự động Büchi).


Bằng chứng về mệnh đề 2

Bổ đề 2.1 : Nếu là tập không có tiền tố, thì (đối với bất kỳ từ ).Sw1Sw

Chứng minh 2.1 : Theo định nghĩa.

Bổ đề 2.2 : Đặt là một tập hợp các từ vô hạn. Hãy là tiền tố chung dài nhất để tất cả các từ trong . và có cùng một hồng y.Sw:=lcp(Sn)SSw1S

Chứng minh 2.2 : Xác định bởi . Nó được định nghĩa tốt bởi định nghĩa của , theo định nghĩa của và tính từ theo định nghĩa của .f:w1SSf(x)=wxw1Sfw

Bằng chứng về mệnh đề 2 : Chúng tôi xây dựng và bằng cảm ứng trên , với giả thuyết cảm ứng bao gồm các phần sau:unvnnHn

  • (P1) Với tất cả , ;k{1,,n}u0uk1vkS

  • (P2) Với tất cảk{1,,n}ukvk

  • (P3) Sn:=(u0un)1S

  • (P4)SnaSnaΣ

Hn(P4)un(P4)ununlcp(Sn)(P1)(P2)(P4)(P3) là do bổ đề 3.

n

  • H0u0:=lcp(S)u0:=ε

  • u1,,unv1,,vnHnnun+1vn+1Hn+1

SnεSn=aΣ(SnaΣ)SnaSnaΣ(P4)baSnbΣvn+1SnbΣun+1a(P1)(P2)(P3)(P4)un+1:=alcp(a1Sn)

(P1) u1unvn+1u1un(SnbΣ)S

(P2)un+1vn+1

(P3) a1SnaSn+1

(P4)un+1


Chứng minh mệnh đề 4

A=(Q,,Δ,q0,F)

u0v1u0u1vnun

Tôi đã được bảo rằng điều này có thể dễ dàng hơn với automata nhiều đầu nhưng tôi không thực sự quen thuộc với chủ nghĩa hình thức nên tôi sẽ chỉ mô tả nó bằng máy tự động Büchi (chỉ có một đầu).

Σ:=Σ¯Σ^ukvk

Q:=Q×({}(Q×Σ))

  • (q,)un

  • (q,(p,a))unpvn+1apun+1a

q0:=(q0,)u0

FF×Q×Σ

  • unqaq(q,)a¯(q,)

  • unvn+1qaq(q,)a^(q,(q,a))

  • vnqaq(q,(p,a))a^(q,(p,a))

  • vnunpappba(q,(p,b))a¯(p,)

u0¯v1^u1¯v2^un¯vn+1^An1unvnn0u0unvn+1L(A)

Bằng chứng bổ đề 4.1 : Còn lại cho người đọc.

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.