设L = {a n | n> = 0},其中和表示所有n> = 1。
因此,L由所有长度的a序列组成,包括序列 长度为0.让L2为L的任何无限子集。我需要表明总是存在DFA来识别(L2)*。如果L2是有限子集,则非常明显,因为L2将是DFA,因此通过kleene闭包L2 *将被DFA识别。但我无法得到无限子集,因为L2可能不会表示为DFA,例如字符串的长度是素数。
答案 0 :(得分:1)
虽然存在DFA来描述所有字符串的集合L n ,n> = 0,但不能保证L的所有子集都存在DFA .L的子集正如你所提到的,它包含长度为素数的所有字符串,这是一个描述语言不存在的DFA的例子。
正确的方法是直接证明(L')*是任何子集L'的常规语言。 L。
让我们定义GCD(K)= GCD w∈K,| w | > 0 (| w |),其中K是L的任何非空子集。我们现在可以引用所有非空的所有长度的最大公约数语言K中的单词为GCD(K)。此定义适用于L的有限和无限子集。
类似地,我们可以定义LCM(K)= LCM w∈K,| w | > 0 (| w |),其中K是L的任何非空 和 有限子集。
我们将尝试证明当GCD(L')= 1,存在一个数M,使得所有串的名词中,n> = M属于语言(L& #39;)*。这导致(L')*成为常规语言,因为我们可以构造形式的正则表达式:
所有长度小于M的字符串属于(L')*
的字符串
OR
所有长度大于或等于M
上面的正则表达式具有相应的DFA,其具有M + 1个状态。
当GCD(L')> 1,我们可以通过"划分"将问题减少到GCD = 1的情况。子集L'中的所有单词通过GCD(L')。
如果GCD(L')= 1(逐项互质),则存在L'的有限子集S.其中S中所有字符串长度的GCD也是1。
我们可以通过施工来证明上述主张。
- 从L',| w 1 |中选择任何元素w 1 > 0并构造集合S 1 = {w 1 }
- 如果GCD(S n )= 1,则S n 是我们想要找到的集合。
- 如果GCD(S n )> 1,从L'中选择一个元素w n + 1 。并构造集合S n + 1 = {w n + 1 }∪S n ,以便
GCD(S n + 1 )&lt; GCD(S <子>名词子>)如果GCD(S n )> 1,总是存在来自集合L&#39;当我们将GCD添加到集合中时会减少GCD;否则,集合L&#39;因为第一个元素w 1 的长度具有有限数量的因子,所以最终集合S的大小是有限的。
回到问题,任何子集L&#39; L,我们可以找到L&#39;的有限子集S,它满足GCD(L&#39;)= GCD(S)。从集合S,我们可以用| S |构造一个广义线性丢番图方程未知a i :
一个<子> 1 子> | W <子> 1 子> | + a 2 | w 2 | + ... + a | S | | w | S | | = c其中c是非负整数
由于GCD(S)= 1,上面的等式是always solvable,通过递归地将解决方案应用于最简单形式的线性丢番图方程ax + by = c。
求解上面对于c = 0到(LCM(S)-1)的广义丢番图方程。解决方案( 1 , 2 ,..., | S | )可以包含负数。但是,我们可以继续在方程的两边添加多个LCM(S),直到所有解都只包含非负数。
令k为LCM(S)的最小倍数,以便当c = K * LCM(S)+ Q,Q = 0〜(LCM(S) - 1)所有不定方程具有非负溶液。然后我们可以将M定义为k * LCM(S),因为任何长度大于M的字符串都可以被分解为S中单词的连接(因此在L&#39;中)。
假设L&#39;是L中长度为素数的所有字符串的集合。
让我们构造集合S = {a 2 , 5 }。 S可以是{a 2 , 19 }或{a 5 , 23 },不是&#39真的很重要M的最终值可能不同,但它并不影响(L&#39;)*是常规语言的事实。
我们需要解决10个方程式(单独):
2a 1 + 5a 2 = 0 =&gt; (a 1 , 2 )=(0,0)
2a 1 + 5a 2 = 1 =&gt; (a 1 ,a 2 )=(3,-1)
2a 1 + 5a 2 = 2 =&gt; (a 1 ,a 2 )=(1,0)
2a 1 + 5a 2 = 3 =&gt; (a 1 , 2 )=(-1,1)
2a 1 + 5a 2 = 4 =&gt; (a 1 , 2 )=(2,0)
2a 1 + 5a 2 = 5 =&gt; (a 1 , 2 )=(0,1)
2a 1 + 5a 2 = 6 =&gt; (a 1 ,a 2 )=(3,0)
2a 1 + 5a 2 = 7 =&gt; (a 1 , 2 )=(1,1)
2a 1 + 5a 2 = 8 =&gt; (a 1 ,a 2 )=(4,0)
2a 1 + 5a 2 = 9 =&gt; (a 1 , 2 )=(2,1)
添加一个LCM(2,5)= 10.请注意,由于LCM的属性,我们可以直接修改解决方案而无需再次解决:
2a 1 +(5a 2 + 10)= 1 + 10 =&gt; (a 1 ,a 2 )=(3,1)
(2a 1 + 10)+ 5a 2 = 3 + 10 =&gt; (a 1 , 2 )=(4,1)
由于所有解决方案都是非负的,我们只添加一个LCM(2,5),M = 10.
可以构建(L&#39;)*的正则表达式:
一个 2 +一 4 +一 5 +一 6 +一 7 +一 8 +一 9 +一 10 的a *
正则表达式不是很紧凑,但这不是我们关注的问题。为了证明,我们只需要知道存在一个数M,所以对于所有n> = M, n 属于(L&#39;)*,这意味着有可以构造有限数量的状态和DFA。