簡體   English   中英

如何確定語言是遞歸還是遞歸可枚舉?

[英]How to determine if a language is recursive or recursively enumerable?

我必須確定一種語言(例如L = {a ^ nb ^ mc ^ s | 0 <= n <= m <= s})是否是常規的,無上下文的,遞歸的,遞歸可枚舉的或者都不是。

我知道如何確定一種語言是否規則(找到有效的DFA或正則表達式)或無上下文(找到一個有效的PDA或無上下文語法); 我知道遞歸語言有一個總是停止的圖靈機,並且一個遞歸可枚舉的語言有一個可能不會停止的圖靈機。

所以問題是:是否有一個快速的標准來確定語言是遞歸還是遞歸可枚舉或兩者都沒有? 例如,我不需要構建一個PDA來理解語言是無上下文的,我不能通過它需要一個堆棧來看待它; 有沒有類似的快速解決問題的方法(希望能省去構建圖靈機的麻煩)?

沒有結構方法來檢查語言是遞歸還是遞歸可枚舉。 實際上有一個非常酷的證據表明,對於任何能夠識別遞歸語言的自動機,至少有一種RE語言不在R中,自動機也接受; 它是用於表示存在不可判定問題的對角化參數的變體。

你證明一種語言的主要方式是RE而不是R是證明語言在RE中(可能是通過為它定義TM),然后減少RE中的已知問題而不是R來解決該問題。 例如,如果您可以通過將其轉換為問題實例來證明停止問題的任何實例都可以解決,那么您知道它不能具有遞歸解決方案,並且如果您使用TM進行后續操作您知道語言在RE中的語言。 你在RE中有一種語言但不是R.

對於無上下文語言,一種快速方法就是查看比較次數。
在示例中,請參見n<=mm<=s 所以涉及兩個比較。 所以你可以把它簡單地告訴它不是沒有上下文的。 如果涉及單個比較,則將其稱為無上下文語言。

常規語言也是如此 這兩個變量之間應該沒有關系,我的意思是說不能有任何比較。 例如,考慮語言0^m+n 1^n 0^m 仔細看看只有一個比較,即m+n = n+m (按下並彈出符號)所以它是無上下文的。
現在看0^n+m 1^n+m 0^m清楚地看到前兩個和下兩個之間的比較。

我花了一些時間來搞清楚。 但是需要一些人做出決定。 相信我它確實有效。 這是常規語言的最后一個例子。 a^nb^2m是規則的(參見n和m之間沒有比較) {a^nb^m |n=2m}是無上下文的,因為它只有一個比較(不常規)

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM