Như đã đề xuất trong các nhận xét cho câu hỏi, tôi sẽ cố gắng đưa ra câu trả lời (không may một phần) cho câu hỏi, ít nhất là đến mức tôi đã tự hiểu vấn đề (điều này ngụ ý rằng bạn cũng có thể tìm thấy lỗi và nếu bạn tìm thấy một cách để giải thích ngắn gọn hơn hoặc rõ ràng hơn một trong những điểm dưới đây, vui lòng chỉnh sửa câu trả lời cho phù hợp):
Đầu tiên, người ta cần lưu ý rằng chúng ta không thực sự phải tính toán tự động phổ quát của ngôn ngữ nếu chúng ta muốn tính toán các yếu tố của ngôn ngữ.
Từ bài báo được đề cập trong nhận xét của tôi , có sự tương ứng 1-1 giữa các yếu tố bên trái và bên phải của ngôn ngữ thông thường, nghĩa là, với một yếu tố bên trái của ngôn ngữ, yếu tố bên phải tương ứng được xác định duy nhất và ngược lại. Chính xác hơn, chúng ta có những điều sau đây:
Hãy là một thừa số của . Sau đó,
nghĩa là, bất kỳ yếu tố bên trái nào cũng là giao điểm của các chỉ tiêu bên phải và bất kỳ yếu tố bên phải là một giao điểm của chỉ tiêu bên trái. Ngược lại, bất kỳ giao điểm của thương số bên trái của là một yếu tố phải của , và bất kỳ giao điểm của thương số bên phải của là một yếu tố bên trái của .L Y = ⋂ x ∈ X x - 1 L , X = ⋂ y ∈ Y L y - 1 , L(X,Y)L
Y=⋂x∈Xx−1L,X=⋂y∈YLy−1,
LL LLLL
Lưu ý rằng đối với một ngôn ngữ thông thường, chỉ có một tập hợp hữu hạn các chỉ tiêu trái và phải, và do đó, vấn đề sẽ giảm khi tính toán các chỉ tiêu trái và phải của một ngôn ngữ, sau đó để tính toán đóng ổn định của chúng, nghĩa là superset tối thiểu của các chỉ tiêu được đóng dưới giao lộ. Đây là sau đó một cách chính xác các yếu tố đúng và các yếu tố còn lại, và sau đó nó thường là dễ dàng để xem những cặp là tập con của .∩L
Thí dụ
Để minh họa các điểm trên, hãy xem xét ví dụ đầu tiên trong câu hỏi (trong đó tôi cũng nghĩ rằng nó không đúng trong bài viết):
Đặt . Bây giờ, các thương số bên trái của là bộ cho , có nghĩa là, những lời trong có thể được bắt đầu bằng , tức là . Khi nào cho khác biệt ? Đây là trường hợp nếu và chỉ khi và có thể được tăng lên thành từ trong L x - 1 L x ∈ Σ * u Σ * x x u ∈ L y - 1L = Σ*một b Σ*Lx- 1Lx ∈ Σ*bạnΣ*xx u ∈ Lx , y x y Ly- 1L = x- 1Lx,yxyLvới chính xác các hậu tố. Điều này có nghĩa, để đặt nó thành các thuật ngữ quen thuộc hơn, chúng tương đương với Nerode và các hậu tố cần thiết để nối các từ trong lớp Nerode chính xác là các chỉ tiêu bên trái tương ứng.
Đối với , chúng ta thấy rằng các lớp tương đương Nerode của chúng ta làL
- a b aN1 , tập hợp các từ không chứa làm yếu tố và kết thúc bằng , aba
- b a bN2 , tập hợp các từ kết thúc bằng và không chứa là một yếu tố và bmột b
- a b N 3 = LN3 , tập hợp các từ có chứa là một yếu tố, nghĩa là,một bN3= L
Chúng có thể được tăng thêm với các tập hợp sau (nghĩa là đây là các danh từ trái của các từ trong các lớp tương ứng):
- x N 1 L a bS1= =x-1L cho trong bao gồm tất cả các từ trong (bất kỳ từ nào cũng có thể được thêm vào bằng một từ có chứa là một yếu tố và do đó trở thành một từ trong ) và , rằng làxN1Lmột bb Σ * S 1LbΣ*S1= L ∪ bΣ*
- x N 2S2= x- 1L với trong là ngôn ngữ, nghĩa là, vàxN2S2= L
- x N 3 Σ * L S 2 ⊂ S 1 ⊂ S 3 ∩ S 1 , S 2 , S 3S3= x- 1L cho trong rõ ràng là . Nghĩa là, chúng tôi đã tìm thấy ba yếu tố bên phải của . Vì , bao đóng ổn định của họ là tầm thường và đó là những yếu tố chính xác.xN3Σ*LS2⊂ S1⊂ S3∩S1, S2, S3
Do đó, bộ nhân tố của chúng tôi có dạng . ( P 1 , S 1 ),( P 2 , S 2 ),( P 3 , S 3 )FL( P1, S1) , ( P2, S2) , ( P3, S3)
Bây giờ, đối với các yếu tố bên trái , chúng tôi sử dụng các phương trình của phần đầu của câu trả lời này:PTôi
PTôi= ⋂x ∈ STôiL x- 1
.
Đối với , đây sản lượng , cho chúng tôi nhận và cho , chúng tôi có được . Bạn có thể thấy điều này bằng cách kiểm tra (lý do phổ biến nhất cho việc quá lười biếng để đưa ra một bằng chứng chính thức) hoặc bằng cách tính toán rõ ràng các chỉ tiêu bên phải (tương đối giống nhau, mặc dù không hoàn toàn, để tính toán các chỉ tiêu bên trái). Do đó, các yếu tố của chúng tôi được đưa ra bởi trong đó L ∪ Σ * một P 2 Σ * PP1L ∪ Σ*mộtP2Σ* L F L = u , v , wP3LFL= u , v , w
- u = ( P1, S1) = ( Σ*một b Σ*∪ Σ*một , Σ*một b Σ*∪ b Σ*)
- v=(P2,S2)=(Σ∗,Σ∗abΣ∗) và
- w=(P3,S3)=(Σ∗abΣ∗,Σ∗)
Tóm lược
Để tóm tắt (như bạn đã yêu cầu một thủ tục đơn giản):
- Để tính factorizations của một ngôn ngữ , trước hết tính thương số bên trái của .LLL
- Bạn có thể làm như vậy, bằng ngôn ngữ của bài báo, bằng cách xây dựng một DFA tối thiểu cho và sau đó cho mỗi trạng thái trong (tương ứng, như một lớp tương đương Nerode, với một thương số bên trái) tính tương lai của trong , do đó có được một thương số trái của ngôn ngữ cho mỗi trạng thái.L q A q AALqAqA
- Tập hợp các chỉ số bên trái thu được theo cách này mang lại, nói chung, một tập hợp con của các yếu tố bên phải.SR
- Tính toán sau đó đóng ổn định của , có thể được thực hiện trong thực tế bằng cách tạo giao điểm của bất kỳ tập hợp con nào của và thêm bất kỳ tập hợp con nào thu được theo cách này vào .S R S R S R∩SRSRSR
- Tập cùng với tất cả các nút giao thông từ bước trước là sau đó thiết lập các yếu tố bên phải của . LSRL
- Để có được những yếu tố bên trái, chúng ta có thể tính toán thương số bên phải của .L
- Đây là các bộ có dạng , cho . Bây giờ, những điều này một lần nữa chỉ là rất nhiều và đối với , chúng ta có khi và chỉ khi cho tất cả , , nghĩa là chúng có thể được thêm tiền tố vào các từ trong ngôn ngữ với cùng một chuỗi các chuỗi. y ∈ Σ * x ≠ y L y - 1 = L x - 1 u ∈ Σ * u x ∈ L ⇔ uLy−1y∈Σ∗x≠yLy−1=Lx−1u∈Σ∗ux∈L⇔uy∈L
- Để tính , hãy xem xét các trạng thái trong sao cho được chứa trong tương lai của . Sự kết hợp của quá khứ của các quốc gia tạo thành một thương số đúng. Tìm tất cả các chỉ tiêu. q A xLx−1qAxq
- Bạn biết bạn đã hoàn thành khi bạn đã tìm thấy nhiều yếu tố bên trái như bạn có các yếu tố bên phải.
- Tìm những cặp còn lại và các yếu tố đúng như rằng . Đây là .X,YF LX⋅Y⊆LFL
- Universal Automaton của Lombardy và Sakarovitch (trong văn bản về logic và trò chơi, Tập 2: Logic và tự động: Lịch sử và quan điểm , 2007)