2013-02-19 35 views
0
B = {1^k y | k >= 1, y in {0, 1}* and y contains at least k 1's } 

這種語言是否經常?如果是這樣,你如何證明它,以及如何用Python中的正則表達式來表示它?這是常用語言嗎?如果是這樣,那麼正則表達式是什麼?

這是爲班級工作,所以如果你可以解釋你的答案背後的原因和過程,它將不勝感激。

+0

我們還沒有研究過上下文無關的語言 - 你怎麼知道? – camdroid 2013-02-19 05:45:44

+2

這是不規則的,因爲你不能在有限數量的狀態下存儲任意大小'k'。對於形式證明使用抽象引理。 – starblue 2013-02-19 05:47:57

+0

@starblue - 是不是必要的抽水引理,但不夠? – camdroid 2013-02-19 05:56:53

回答

6

你的語言是等同於這種語言:

B' = {1 y | y in {0, 1}* and y contains at least one 1} 

可以證明,B「是B的子集,因爲在B中的條件」是與B相同,但其中k爲1

證明B是B'的子集涉及證明B中的所有單詞,其中k> = 1也屬於B',這很容易,因爲我們可以拿走B中所有單詞中的前1,並設置y成爲字符串的其餘部分,那麼y將總是包含至少一個1.

因此,我們可以得出結論B = B'


因此,我們的工作簡化爲確保第一個字符是1,至少有1 1在字符串的其餘部分。

正則表達式(CS表示法)將是:

10*1(0 + 1)* 

在以共同正則表達式引擎中使用的符號:

10*1[01]* 

的DFA:

DFA

這裏q2是最終狀態。

「至少」是解決這個問題的關鍵。如果這個詞變得「平等」,那麼故事會有所不同。

+0

@GrijeshChauhan:你的反例是什麼? – ibid 2013-02-19 08:27:33

+0

@nhahtdh更新您的答案,以便我可以投票。你是正確的一個[相關的問題在這裏](http://stackoverflow.com/questions/14521300/why-l-wxwr-wx-belongs-to-ab-is-a-regular-language) – 2013-02-19 09:41:21

+0

@GrijeshChauhan :更新**什麼**? – nhahtdh 2013-02-19 11:26:17