如果我的语言{0,1}由以下无上下文语法定义并带有起始变量S,那么它是常规语言吗? S→TS,S→1T,S→1S T→TT,T→0T1,T→1T0 T→ε
这种语言有规律吗?
在我看来,这种语言不能定期,因为它基本上是终端和变量的任意组合。而常规语言需要是正确的或线性的。我是对的,还是我的想法不正确?是否存在任何人建议用于确定无上下文语法是否规则的特定过程?
答案 0 :(得分:2)
与语法相关的语言不规律。该帖的其余部分涉及该声明的证明。
首先,请注意L(T) = {w over {0,1} | w contains equal number of 0s and 1s}
。
你可以很容易地证明这一点。
证明自己的想法。 (==>)
假设w
中有L(T)
。那么显然有相同数量的0和1。
(<==)
假设w
包含相同数量的0和1。我们通过归纳表明w
可以从T
推导出来。如果|w|<=2
,则显然可以从T
推导出来。假设对于归纳假设,具有相等数量的0和1的所有长度为k
(偶数长度)的字符串可以从T
导出。设w
的长度为k+2
。如果w
的第一个和最后一个字符匹配(均为0或均为1),则应用生产T -> TT
;第一部分和最后部分都可以通过归纳假设从T
推导出来;在这里,我们使用明显的属性,如果w[0]=w[|w|-1]
,则存在索引i
,w[0..i]
和w[i+1..|w|-1]
都在L(T)
,并且都可以通过归纳假设从T
推导出来。否则,如果w
的第一个和最后一个字符不匹配,请使用T -> 0T1
或T -> 1T0
;结果字符串的长度为k
,并且可以通过归纳假设从T
导出。的 QED。强>
现在,语法的语言是S
可以生成的字符串集。请注意S
生成(T+1)*1T
形式的字符串(终端和变量)。换句话说,对于语法可导出的任何终端字符串w
,必须是S =>* α =>* w
,α
位于(T+1)*1T
的情况。
现在显而易见的是,S
可以生成的所有可能终端的集合由正则表达式(L(T)* + 1)*1L(T)*
表征。 (您可以通过检查可以从(T+1)*1T
生成的终端字符串集来达到此目的。)
您可以简化L(S)
:(L(T)+1)*1L(T)=(L(T)+1)*
的表达式,因为1L(T)
的语言是(L(T)+1)^2
语言的子集。因此L(S) = (L(T)+1)*
,该语言由二进制字符串组成,其中包含至少与0一样多的1。
此语言不是常规。您可以使用pumping lemma来证明这一点。
证明。假设为了矛盾,L(S)
是正常的。然后,通过抽取引理,n>0
使w
长度至少为L(S)
n
的{{1}}分为w=xyz
个|xy| <= n
的是:
y
,k >= 0
非空,xy^ky
中的所有L(S)
,w=0^n1^n
。让m=2n
为来自L(S)
的长度为L(S)
的字符串。 (该引理讨论了来自w=xyz
的所有足够长的字符串,因此我们可以选择我们喜欢的任何字符串并且仍具有属性。)让m=2n
成为存在的分区引理。显然,由于|xy|<=n
和y
,0
仅由0
组成(至少有一个y
,因为xy^2z
不为空)
显然,L(S)
的零比一些零更多,因此不在L(S)
。这与泵浦引理相矛盾。因此,array:4 [
"_token" => "SQjQpOxCec5lal5tzFgW1FMtrcOaaIqjoii2fuCb"
"_previous" => array:1 [
"url" => "http://my-url"
]
"_flash" => array:2 [
"old" => []
"new" => []
]
"lang" => "en"
]
不常规。的 QED。强>