Làm thế nào để cho thấy rằng một ngôn ngữ thông thường đảo ngược của người Viking là thường xuyên


19

Tôi bị mắc kẹt trong câu hỏi sau đây:

"Các ngôn ngữ thông thường chính xác là những ngôn ngữ được chấp nhận bởi automata hữu hạn. Với thực tế này, cho thấy rằng nếu ngôn ngữ được chấp nhận bởi một số máy tự động hữu hạn, thì L R cũng được chấp nhận bởi một số hữu hạn; L R bao gồm tất cả các từ của L bị đảo ngược."LLRLRL


1
Chà, bạn đã thử xây dựng một máy tự động chấp nhận chưa? Nó có thể giúp rút ra một ví dụ. LR
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn bạn đã trả lời của bạn. Tôi không chắc làm thế nào để làm điều này. Tôi chắc chắn rằng bất kỳ L ^ R nào cũng sẽ được một số ngôn ngữ chấp nhận vì nó được xây dựng từ cùng một "bảng chữ cái" và do đó cũng sẽ là một ngôn ngữ thông thường. Tôi không chắc chắn làm thế nào để chứng minh điều đó, hoặc làm thế nào để đưa ra một ví dụ.
Mèo

2
Chào mừng bạn Đối với những câu hỏi cơ bản như vậy mà không có bài tập về nhà, chúng tôi thích nếu câu hỏi có chứa (đáng kể) công việc trước đó của người hỏi. Bạn chắc chắn đã thử một cái gì đó bạn có thể chia sẻ (sau đó chúng tôi có thể sử dụng để hướng dẫn bạn đi đúng hướng). Nếu không, tôi khuyên bạn nên kiểm tra lại định nghĩa của mình và chú ý lời khuyên của Gilles.
Raphael

3
@Victoria "nó được xây dựng từ cùng một" bảng chữ cái "và do đó cũng sẽ là một ngôn ngữ thông thường" - oh, nonono. , { a n b m a nn , m N }{ a n b n a nn N } đều được định nghĩa giống nhau bảng chữ cái nhưng rơi vào các lớp ngôn ngữ rất khác nhau.{anbmaon,m,oN}{anbmann,mN}{anbnannN}
Raphael

1
Một câu hỏi khác ở cuối chương yêu cầu tôi chứng minh rằng không có máy tự động hữu hạn nào có thể chấp nhận tất cả các palindromes trên một bảng chữ cái nhất định. Tôi nghĩ rằng bằng chứng cho bản lề này trên thực tế là có vô số trạng thái nếu chúng ta đang xem xét tất cả các palindrome có thể (không giới hạn chiều dài), trong khi máy là một máy trạng thái hữu hạn.
Mèo

Câu trả lời:


26

Vì vậy, với ngôn ngữ thông thường , chúng ta biết (về cơ bản theo định nghĩa) rằng nó được chấp nhận bởi một số automata hữu hạn, do đó, có một tập hợp các trạng thái hữu hạn với các chuyển đổi phù hợp đưa chúng ta từ trạng thái bắt đầu sang trạng thái chấp nhận khi và chỉ khi đầu vào là một chuỗi trong L . Chúng tôi thậm chí có thể nhấn mạnh rằng chỉ có một trạng thái chấp nhận, để đơn giản hóa mọi thứ. Việc chấp nhận ngôn ngữ đảo ngược tất cả những gì chúng ta cần làm là đảo ngược hướng chuyển đổi, thay đổi trạng thái bắt đầu sang trạng thái chấp nhận và trạng thái chấp nhận sang trạng thái bắt đầu. Sau đó, chúng tôi có một máy tính mà là "ngược" so với bản gốc, và chấp nhận ngôn ngữ L R .LLLR


Cảm ơn Luke rất nhiều - Tôi nghĩ tôi hiểu những gì bạn đã nói. Bạn đang ở trên - Tôi hoàn toàn không có kinh nghiệm thực tế với automata hữu hạn! Tôi sẽ 'bỏ phiếu' cho bạn nhưng rõ ràng tôi không có đủ điểm. Xin lỗi vì điều đó!
Mèo

Điều đó tốt, bạn sẽ có thể "chấp nhận" câu trả lời mình thích (cần có dấu tích bên dưới các nút bình chọn). Ngoài ra câu trả lời chính thức hơn của Saadtaame là một bước tiếp theo tuyệt vời sau tôi.
Luke Mathieson

5
Giả định chỉ có một chấp nhận nhà nước chúng tôi, hoặc phải cho phép -transitions, hoặc có ε L . Cả hai đều không phải là hạn chế thực sự, tôi biết, vì vậy câu trả lời là OK. ϵϵL
Hendrik ngày 1 tháng

1
Vâng, ý tưởng có vẻ rõ ràng với tôi. Phần khó khăn là xác minh rằng nó là đúng.
Không ai

24

Bạn phải chứng minh rằng bạn luôn có thể xây dựng một automaton hữu hạn chấp nhận chuỗi trong LR cho một automaton hữu hạn chấp nhận chuỗi trong L . Đây là một thủ tục để làm điều đó.

  1. Đảo ngược tất cả các liên kết trong máy tự động
  2. Thêm một trạng thái mới (gọi nó là qs )
  3. Vẽ một liên kết tên với ϵ từ trạng thái qs cho mỗi trạng thái cuối cùng
  4. Biến tất cả các trạng thái cuối cùng thành trạng thái bình thường
  5. Biến trạng thái ban đầu thành trạng thái cuối cùng
  6. Biến qs thành trạng thái ban đầu

Hãy chính thức hóa tất cả những điều này; chúng ta bắt đầu bằng cách nêu định lý.

Định lý. Nếu L là một ngôn ngữ thông thường, sau đó như vậy là LR .

Hãy A=(QA,ΣA,δA,qA,FA) là một NFA và để cho L=L(A) . Các ϵ -NFA AR định nghĩa dưới đây chấp nhận ngôn ngữ LR .

  1. AR=(QA{qs},ΣA,δAR,qs,{qA})qsQA
  2. pδA(q,a)qδAR(p,a) , nơiaΣAq,pQA
  3. ϵclosure(qs)=FA

Bằng chứng. Đầu tiên, chúng tôi chứng minh tuyên bố sau: một đường đi từ q tới p trong A nhãn với w khi và chỉ khi một đường đi từ p đến q trong AR dán nhãn với wR (ngược lại của w ) cho q,pQA . Bằng chứng là do cảm ứng trên chiều dài của w .

  1. Trường hợp cơ sở: |w|=1
    Giữ theo định nghĩa của δAR
  2. Cảm ứng: giả sử câu lệnh giữ các từ có độ dài <n và let |w|=nw=xa
    Lết pδA(q,w)=δA(q,xa)
    Chúng ta biết rằng δA(q,xa)=pδA(p,a) pδA(q,x)
    xa là những lời ít hơnn các biểu tượng. Bằng cách giả thuyết cảm ứng,pδAR(p,a)qδAR(p,xR) . Điều này ngụ ý rằngqδAR(p,axR)pδA(q,xa) .

Cho q=qAp=s đối với một số sFA và thay wR cho axR đảm bảo rằng qδAR(s,wR) sFA . Vì có một đường dẫn được gắn nhãn ϵ từ qs đến mọi trạng thái trong FA (3. theo định nghĩa của AR) Và một đường đi từ mọi tiểu bang trong FA trạng thái qA nhãn với wR , sau đó có một con đường dán nhãn với ϵwR=wR từ qs để qA . Điều này chứng minh định lý.

Lưu ý rằng điều này chứng tỏ rằng (LR)R=L là tốt.

Vui lòng chỉnh sửa nếu có bất kỳ lỗi định dạng hoặc bất kỳ sai sót nào trong bằng chứng của tôi ....


1
Ý của bạn là gì bởi ? ϵclosure(qs)=FA
dùng124384

Nhưng bạn không thể có ϵ sự chuyển đổi trong các ngôn ngữ thông thường xác định được không!?
yukashima huksay

@yukashimahuksay Đúng, nhưng bạn cũng luôn có thể sử dụng máy tự động hữu hạn không xác định và biến nó thành máy tự động hữu hạn xác định. Chúng tương đương nhau.
Pro Q

12

Để thêm vào các biến đổi automata dựa trên mô tả ở trên, bạn cũng có thể chứng minh rằng ngôn ngữ thường được đóng dưới sự đảo ngược bằng cách hiển thị như thế nào để chuyển đổi một biểu thức chính quy cho vào một biểu thức chính quy cho L R . Để làm như vậy, chúng tôi sẽ xác định một hàm R E V trên biểu thức thông thường mà chấp nhận như là đầu vào một biểu thức chính quy R đối với một số ngôn ngữ L , sau đó tạo ra một biểu thức chính quy R ' cho ngôn ngữ L R . Điều này được định nghĩa theo quy nạp trên cấu trúc của các biểu thức chính quy:LLRREVRLRLR

  1. REV(ϵ)=ϵ
  2. REV()=
  3. cho bất kỳ một ΣREV(a)=aaΣ
  4. REV(R1R2)=REV(R2)REV(R1)
  5. REV(R1|R2)=REV(R1)|REV(R2)
  6. REV(R)=REV(R)
  7. REV((R))=(REV(R))

Bạn có thể chính thức chứng minh công trình này đúng như một bài tập.

Hi vọng điêu nay co ich!


Chào! Tôi đáp xuống đây vì tôi đang nghĩ về ý tưởng đảo ngược các biểu thức chính quy, như một cách tối ưu hóa một trận đấu neo đúng với một chuỗi: đưa các ký tự vào máy tự động ngược, theo thứ tự ngược lại. Một đường chuyền. Tôi đã viết ra các thuộc tính đại số của đảo ngược regex và nó khớp với bảng của bạn gần như chính xác, thậm chí sử dụng rev()ký hiệu. :) Tôi cũng đặt xuống REV(R1&R2) = REV(R1)&REV(R2); Tôi có một triển khai regex có giao lộ. Đúng; Tôi đang nghĩ đến việc thêm một toán tử để đảo ngược có lẽ R\r(yếu tố regex trước đó).
Kaz

Đây là một mẹo khó: quy tắc đại số cho REV (~ R): phủ định regex là gì? REV(~R)là đảo ngược của tập hợp tất cả các chuỗi bên ngoài R. Có giống như ~REV(R): tập hợp tất cả các chuỗi bên ngoài đảo ngược của tập hợp được ký hiệu bởi R không? Điều này là không rõ ràng bởi vì bất kỳ palindromes trong Rcũng được trong REV(R).
Kaz

1

LLLR={wR:wL}LLR

Labab(aba)b(aba)b, nhưng bạn không thể phá vỡ trật tự liên kết giữa các cách hiểu khác nhau của khóa học.

R

s=ϵ

ssΣs

s=σσR

s=(σ0σ1...σk1σk)(σ0σ1...σk1σk)(σkRσk1R...σ1Rσ0R)

s=(σ0σ1...σk/2...σk1σk)(σ0σ1...σk1σk)(σkRσk1R...σk/2R...σ1Rσ0R)

s1,s2s1s2s1Rs2R

s((sR))

(((ab)(a))((ab)(b)))R((ab)(a))(((ab)(a))R)((ab)(a))R((a)R(ab)R)(a)R(a). Quá trình này được nêu ở trên mô tả một mô tả quy nạp của sự thay đổi này.

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.