Chứng minh REGULAR_TM là không thể giải quyết được


7

Tôi đang nghiên cứu bằng chứng của định lý sau:

Đưa ra ngôn ngữ

REGULARTM={M|M là một máy turing và là thường xuyênAccept(M)}

REGULARTM là không thể giải quyết được.


Bằng chứng được đưa ra trong Sipser cho thấy rằng nếu chúng ta đã có máy quyết định thì chúng ta có thể tạo một máy quyết định vấn đề tạm dừng:RREGULARTMS

AcceptTM={M,w|M is a turing machine and wAccept(M)}

Tôi đang gặp khó khăn để hiểu bằng chứng. Đây là cách tôi hiểu nó:

Khi (bất kỳ máy turing nào) và (bất kỳ chuỗi nào) được đưa vào máy , chúng tôi sẽ tạo một máy lấy chuỗi làm đầu vào, nhưng trước tiên chạy máy trên . Trường hợp đầu tiên, nếu , thì chỉ cần chấp nhận x. Đó là trong trường hợp này - tức là một ngôn ngữ thông thường. khác, trường hợp thứ hai, từ chối , sau đó kiểm tra xem đầu vào có dạng hay không và chấp nhận nếu nó là như vậy - tức làMwSM2xMww Accept(M)M2Accept(M2)=MwM2x0n1nAccept(M2) không phải là ngôn ngữ thông thường. Bên trong , cho cả hai trường hợp này nếu chúng tôi chạy trên sẽ trả về kết quả phù hợp mà có thể trực tiếp trả về.SRM2S

Trường hợp tôi bối rối, trường hợp thứ ba, là khi không dừng lại trên . Sau đó , là ngôn ngữ thông thường và do đó sẽ trả về ACCEPT , không thể trả lại trực tiếp dưới dạng . Nhưng mô tả của giải pháp nghe có vẻ như trả về ACCEPT ngay cả trong trường hợp này (mã giả bên dưới). Vậy tôi đang làm gì sai? Có lẽ có một ý tưởng rất cơ bản mà tôi đang thiếu. Đây là mã giả cho máy và bên trong , như bạn có thể thấy, có máy đóMwAccept(M2)={}RSwAccept(M)SSSM2S tạo ra.

machine S(M, w):
    // Construct an instance of machine M2 which uses M and w
    machine M2(x):
        r := M(w)  // Might hang here
        if r == ACCEPT:
            return ACCEPT
        else:
            if x is of form 0^n.1^n:
                return ACCEPT
            else:
                return REJECT

    // Run R on M2 (always returns, never hangs)
    r1 = R(M2)
    if r1 == ACCEPT:
        return ACCEPT
    else:
        return REJECT

2
Có lẽ cách tiếp cận tốt hơn là tìm kiếm và hiểu Định lý Rice , cho biết lý do tại sao bất kỳ tài sản không tầm thường nào trong ngôn ngữ của Turing Machine là không thể giải quyết được.
jmite

OK, jmite, sẽ làm.
slnsoumik

1
@jmite, bằng chứng về định lý của Rice về cơ bản giống như bạn đưa ra cho điều này. Chắc chắn, một khi bạn có điều đó, điều này (và một loạt các câu hỏi tương tự) trở nên tầm thường.
vonbrand

Tôi đã tìm thấy những điều hữu ích sau đây : Vì Sigma * (Sigma = bộ chữ cái) là ngôn ngữ thông thường, để R quyết định liệu M2 có chấp nhận ngôn ngữ thông thường hay không, nó phải xem xét tất cả các đầu vào có thể (Sigma ), bao gồm 0 ^ n1 ^ n và ngôn ngữ không thường xuyên khác. Vì vậy, nếu M chấp nhận w, M2 không chỉ chấp nhận 0 ^ n1 ^ n loại đầu vào mà cả Sigma . Nhưng nếu M không chấp nhận w, M2 sẽ chỉ chấp nhận chuỗi 0 ^ n1 ^ n. Hy vọng nó giúp.
Ali Shakiba

Câu trả lời:


4

Nhìn lên thiên thạch của Rice. Bằng chứng của nó là khá ngắn và ngọt ngào. Nó nói rằng bất kỳ thuộc tính không tầm thường nào của ngôn ngữ TM (nghĩa là không phải tất cả các ngôn ngữ TM chia sẻ) là không thể quyết định, theo nghĩa là không thể quyết định bằng cách xem TM nếu ngôn ngữ mà nó chấp nhận có thuộc tính.

Thuộc tính thông thường (hoặc ngôn ngữ không ngữ cảnh hoặc ngôn ngữ trống hoặc ngôn ngữ của tất cả các chuỗi hoặc ...) là không tầm thường, do đó, nếu một TM cụ thể chấp nhận một ngôn ngữ với thuộc tính là không thể xác định được, bởi Rice định lý.


0

Mã giả của bạn sai, sau đây là mã chính xác:

machine S(M, w):
    // Construct an instance of machine M2 which uses M and w
    machine M2(x):
        if x is of form 0^n.1^n:
            return ACCEPT
        else:
            r := M(w) // If LOOP, M2 accept 0^n.1^n
            if r == ACCEPT: 
                return ACCEPT // M2 accept Sigma* (Only this case make M2 accept regular language if only if M(w) accept)
            else if r == REJECT: 
                return REJECT // M2 accept 0^n.1^n

    // Run R on M2 (always returns, never hangs)
    r1 = R(M2)
    if r1 == ACCEPT:
        return ACCEPT
    else:
        return REJECT

@David Richerby Đây là lời giải thích thêm:

  1. vonbrand đúng
    Ông đã sử dụng thiên thạch của Rice, nó nói rằng bất kỳ tài sản không tầm thường nào của ngôn ngữ TM là không thể giải quyết được. Điều đó ổn, nhưng ... trong cuốn sách của Sipser, ví dụ này là để chứng minh khả năng lập bản đồ.
    Vì vậy, chúng ta nên sử dụng giảm để khắc phục vấn đề này thay vì thiên thạch của Rice.

  2. Điều gì là sai với câu trả lời đề xuất?
    Sai là:
    Khi M (w) LOOP ở M2, R (M2) sẽ trả lại ACCEPT. Tại sao? Bởi vì trong trường hợp này L (M2) là {}, là ngôn ngữ thông thường. Nhưng khi M (w) LOOP, R (M2) không được trả lại ACCEPT.
    Hãy tưởng tượng:
    Nếu R (M2) trả lại ACCEPT, điều gì sẽ xảy ra?
    Sẽ có hai khả năng để M2 chấp nhận R (M2).
    (1) M (w) trả lại CHẤP NHẬN.
    (2) M (w) LOOP.
    Rõ ràng, "hai khả năng" không đáp ứng định nghĩa về Giảm.
    Định nghĩa của Giảm là gì?

    nhập mô tả hình ảnh ở đây Xin lưu ý <=>, đó là "nếu chỉ nếu".

  3. Câu trả lời của tôi làm gì để sửa nó?
    Điều quan trọng là: Chỉ có một khả năng để M2 khiến R (M2) chấp nhận, đó là M (w) trả lại ACCEPT! Điều đó đáp ứng định nghĩa của Giảm.

  4. Một giải pháp khác cho vấn đề này:

    machine S(M, w):
        // Construct an instance of machine M2 which uses M and w
        machine M2(x):
            r := M(w)
            if r == ACCEPT:
                if x is of form 0^n.1^n:
                    return ACCEPT
                else:
                    return REJECT
            else if r == REJECT:
                return REJECT
    
        // Run R on M2 (always returns, never hangs)
        r1 = ComplementOfR(M2) // use Complement Of R
        if r1 == ACCEPT:
            return REJECT
        else:
            return ACCEPT
    

    Trong giải pháp này, tôi sử dụng CompuityOfR thay vì R.
    Lợi ích của việc này là:
    Bây giờ, trong M2 chúng ta có thể chạy M trên w trước.
    Tại sao chúng ta có thể sử dụng CompuityOfR?
    Nếu R là quyết định, thì CompuityOfR cũng có thể quyết định. Vì vậy, chúng ta có thể sử dụng CompuityOfR.

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.