Sự quyết định của ngôn ngữ


7

L1 là một ngôn ngữ có thể liệt kê đệ quy trên một số bảng chữ cái . Một thuật toán hiệu quả liệt kê những lời của nó như . là một ngôn ngữ khác trên là Hãy xem xét các xác nhận sau.Σw1,w2,...
L2Σ{#}{wi#wj:wi,wjL1,i<j}

  1. L1 là đệ quy ngụ ý là đệ quyL2
  2. L2 là đệ quy ngụ ý là đệ quyL1

Phát biểu nào là / đúng?

Tôi đã lý luận cả hai tuyên bố là đúng.

Tuyên bố 1 là đúng. là đệ quy có nghĩa là nó có thể liệt kê từ vựng theo chuỗi. Câu hỏi về tư cách thành viên cho có thể được giải quyết dễ dàng bằng cách sử dụng trình liệt kê và liệt kê từ điển của .L1L2L1

Tuyên bố 2 là đúng. Thuật toán quyết định có thể được sửa đổi để chấp nhận nếu chuỗi đầu vào khớp với hoặc . Điều này giải quyết câu hỏi thành viên cho .L2wiwjL1

Tuy nhiên, giải pháp đưa ra cho câu hỏi này nói rằng tuyên bố 2 là sai. Bạn có thể cho tôi biết nếu lý luận của tôi đã đi sai ở đâu đó?


1
"khớp với hoặc " - mà . ? wiwjij
Raphael

@Raphael, ý tôi là thuật toán quyết định có thể được sửa đổi để chấp nhận nếu chuỗi đầu vào khớp với hoặc của , dạng chuỗi của . L2wiwjwi#wjL2
Abhijith Madhav

Nhưng nơi nào nó có được các ? Bạn không thể chỉ tìm kiếm một thứ, điều đó sẽ chỉ cung cấp cho bạn vô số, không phải là quyết định. (Bạn phải thực sự chính xác ở đây!)wi#wj
Raphael

1
Bạn không được phép thay đổi phép liệt kê ở bước 1, vì vậy lý do của bạn cho bước 1 bị lỗi khi bạn chuyển từ phép liệt kê sang phép liệt kê từ điển. L1wi
Andrej Bauer

1
Bạn không được phép làm điều đó. Tuyên bố về vấn đề cung cấp cho bạn một thuật toán để liệt kê và bạn phải sử dụng thuật toán đó trong định nghĩa của . Bạn hiểu sai về tuyên bố vấn đề. L1L2
Andrej Bauer

Câu trả lời:


7

Bạn có vẻ đúng. Nhưng như Raphael nói, hãy cẩn thận.

Tuyên bố 1. Lưu ý rằng được xác định bằng thuật toán liệt kê cho , không phải bởi chính . Để quyết định xem , hãy quyết định xem cả trong và nếu được xác nhận hãy chạy liệt kê và xem liệu có xuất ra trước . Như chúng ta biết cả hai chuỗi trong điều này sẽ chấm dứt.L2EL1L1u#vL2u,vLEuvL1

Tuyên bố 2. Nếu là hữu hạn, nó là đệ quy, vì vậy chúng tôi giả sử là vô hạn. Chạy và đợi từ đầu tiên . Bây giờ, một người quyết định cho có thể được biến thành một cho như sau. Để kiểm tra trước tiên hãy kiểm tra xem , sau đó kiểm tra . Điều này sau đó tương đương với vì chúng tôi không phải lo lắng về yêu cầu , điều này hiện đang đúng khi xây dựng.L1L1Ew1L2L1uL1u=w1w1#uL2uL1i<j

Tôi thậm chí không chắc chắn chúng ta cần biết bằng cách chạy : chúng tôi chỉ muốn xác minh có tồn tại một người quyết định, chứ không phải liệu người ta có thể xây dựng hiệu quả hay không. Điều đó dường như là không thể.w1E

( chỉnh sửa ) Chỉ cần lưu ý rằng Raphael đã đăng một "triển khai" rõ ràng hơn về các đề xuất này, nhằm tránh sự mơ hồ có thể xảy ra.


Liên quan đến tuyên bố 2: có thể được mã hóa cứng, và sau đó chúng ta có thể loại bỏ giả định rằng được liệt kê đệ quy. w1L1
Yuval Filmus

1
Phụ thuộc; chúng tôi không biết rằng không lặp lại. Nếu có, sau tất cả. Chúng tôi không thể quyết định rằng không bao giờ lặp lại. Tất nhiên, có luôn luôn là một không lặp lại điều tra viên, nhưng kể từ khi đặc biệt phụ thuộc vào nó không phải là công bằng để giả sử chúng ta một có một. Ew1#w1L2w1L2E
Raphael

Ở đây chúng tôi không bao giờ kiểm tra để tránh sự cố. Đầu vào được chọn "thủ công" thành . Ngoài ra, công thức cho thấy sự liệt kê mà không lặp lại, chính xác là vì nhận xét của bạn. w1#w1uw1
Hendrik

@HendrikJan Tôi đã giải thích tại sao kiểm tra không đủ để từ chối nói chung. Việc xây dựng không đề xuất liệt kê mà không lặp lại; thực tế, OP nói rằng giải pháp đã cho mâu thuẫn với câu trả lời của bạn, vì vậy điều đó sẽ hướng đến một cách giải thích khác. u=w1u
Raphael

Tôi nghĩ rằng tôi có thể đã một phần nhầm lẫn bản thân mình. Tôi đã tự đăng một câu trả lời, mà bây giờ tôi nghĩ là tương đương với những gì bạn dự định. Trong quá trình này, tôi nghĩ rằng tôi đã tìm thấy một vấn đề với bằng chứng của chúng tôi cho tuyên bố đầu tiên.
Raphael

1

Quảng cáo 1: Tuyên bố là đúng, nhưng lý luận của bạn thì không: bạn không thể thay đổi bảng liệt kê; định nghĩa của gắn chặt với thứ tự các yếu tố. Đây là thuật toán đơn giản quyết định :L2L2

decide2(w) = {
  (u,v) = split (w,#) // w = u#v

  if ( decide1(u) && decide1(v) ) {
    i = 1
    while ( true ) {
      if ( enumerate1(i) == u ) {
        return true
      }
      else if ( enumerate1(i) == v ) {
        return false
      }
      i += 1
    }   
  }

  return  false
}

Ở đây, decide1là người quyết định cho và là điều tra viên cho , cả hai đều tồn tại theo giả định. Lưu ý rằng vòng lặp luôn kết thúc; tại thời điểm đó, chúng ta biết rằng nên vòng lặp sẽ tìm thấy chúng (trên thực tế, lần đầu tiên xảy ra).L1enumerate1L1whileu,vL1

Quảng cáo 2: Tuyên bố này thực sự đúng, nhưng một lần nữa vì những lý do khác với trạng thái của bạn.

Nếu là đệ quy, chương trình sau có thể tính toán được và quyết định :L2L1

decide1(w) = {
  w1 = enumerate1(1)
  if ( w == w1 ) }
    return true
  }
  else {
    return decider2(w1#w)
  }
}

Nếu , rõ ràng chúng tôi có và chương trình quyết định chính xác. Nếu , có một sao cho và do đó ; ngược lại, nếu , thì không có và do đó . Chương trình quyết định chính xác trong mọi trường hợp.w=w1wL1wL1{w1}i>1wi=ww1#wL2wL1iw1#wL2


Hãy nghĩ về nó, thuật toán đầu tiên là thiếu sót: nếu phép liệt kê có sự lặp lại, chúng ta không thể từ chối đầu vào chỉ vì các lần xuất hiện đầu tiên của sai thứ tự. u,v
Raphael

Không có hy vọng để vá tôi tink. Không có cách nào để quyết định liệu có bao giờ xuất hiện lần thứ hai của từ (để kiểm tra nó cũng xảy ra sau ). Tuy nhiên , câu hỏi cho biết có những khó khăn với Bài toán 2. Không phải Bài toán 1 :)uv
Hendrik

@Raphael, tôi không hiểu ý của bạn là gì, "bạn không thể thay đổi bảng liệt kê". Tôi đã thay đổi điều gì? Lý do của tôi cho tuyên bố 1 là đúng là chính xác những gì bạn đã viết trong câu trả lời của bạn ở trên. Sau khi sử dụng công cụ quyết định để quyết định và , bạn sử dụng trình liệt kê để kiểm tra xemL1uvu được liệt kê trước v. Đây không phải là vì bạn mong đợi điều tra viênL1 để liệt kê từ vựng, bây giờ giả thuyết của câu 1 nói rằng L1là đệ quy?
Abhijith Madhav

@Raphael, bình luận sau đây của bạn làm tôi bối rối hơn. Tại sao bây giờ bạn nghĩ rằng lần đầu tiên xuất hiện củau,vcó thể sai thứ tự nếu bảng liệt kê có sự lặp lại. NhưL1 là đệ quy, liệt kê không thể có u,vtheo thứ tự sai. Tôi chỉ tham khảo một cuốn sách văn bản (sipser) để đảm bảo rằng "đệ quy của tôi ngụ ý liệt kê từ vựng" là chính xác.
Abhijith Madhav

@ Abhijith Từ những gì bạn viết trong câu hỏi của bạn, không rõ chính xác cách bạn khai thác rằng có một bảng liệt kê từ vựng; bạn có thể không giả định việc liệt kêL2là từ điển, và có vẻ như bạn đã làm điều đó.
Raphael
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.