常规语言和证明(计算模型)

时间:2012-06-25 22:53:58

标签: computation-theory

我需要帮助处理我的计算机模型课程中的几个硬件问题。我阅读了文中的相关章节(Michael Sipser的计算理论导论),但我觉得这些硬件问题需要本书没有给我的知识......第一个问题是:

(1)证明不存在语言L,使得L * = {a} * {b} * 提示是使用矛盾。

显然右侧是正则表达式;零个或多个a后跟零个或多个b。这也可以是空字符串epsilon。

我的麻烦来自于L *。我有绝对没有线索应用于某种语言的*,或者由于语言L上的*而如何处理这个等式。

对此问题的任何帮助或资源都表示赞赏。

=====

第二个问题更容易,我觉得我几乎可以做到。我可以为自己辩护,所以我猜问题是正式写它。第二个问题是:

(2) 证明如果A和V是相同字母(sigma)和A(是B的子集)的语言,那么A *(是B *的子集)。 提示是使用归纳法。

现在很明显(例如)sigma = {1,0}

和A = {00,01,10,11}

且B = {00,01,10,11,100,101,110,111}

然后A *中的任何东西都在B *下关闭,因为B = A +其他一些东西......如果有人可以帮助我将其形式化为归纳形式,我会很感激。

由于

1 个答案:

答案 0 :(得分:1)

(1)这是L*的有用递归定义:

  1. epsilon在L*
  2. 如果x位于Lx位于L*
  3. 如果xy位于L*xy
  4. L*是满足1. - 3.给定L
  5. 的最小语言

    根据这个定义,这是一个矛盾的证明:假设R* = a*b*。然后ab位于R*。截至3.,abab也必须位于R*。但后来R* != a*b*,一个矛盾。所以R* = a*b*必须是假的;换句话说,对于没有语言RR* = a*b*

    直觉非常简单:L*是所有字符串的语言,可以通过连接来自L的零个或多个(允许重复)字符串来形成。递归定义的工作原理是允许零字符串(在1.中),字符串从L(在2.中)中取出一个字符串,以及通过从L加入可能很多字符串形成的字符串(在3中)。 )。

    (2)使用上面给出的定义,我们对A*中的连接字符串的数量进行归纳处理。对于0个连接,空字符串同时位于A*B*中,因此我们很好(参见规则1)。对于1次连接,由于AB的子集,A中的字符串将位于A*中(请参阅规则2),而来自B的字符串将在B*(同一规则)中,因此在A*中进行一次连接的所有字符串也在B*中。现在,假设在k中使用A*个连接的所有字符串也在B*中。在k+1中使用A*个连词的字符串呢?好吧,这些是使用规则3在x上的yA*中形成的,k+1严格地小于k个连接,即最多A*个连接。换句话说,k+1 xy个连结中的任何字符串都可以重写为x,其中yA*位于x中, yk最多需要A*个联合。由于k中最多B*个连接的所有字符串也位于x中(根据我们的假设),我们{B}居住yxy 。根据规则3,B*也必须位于k+1。因此,A*B*个拼接的字符串也必须属于{{1}}。这样就完成了证明。

    注意:这掩盖了一些细节,并不是非常正式,但你应该得到这个想法,并希望能够塑造它。如果您需要比这更精美的东西,请告诉我,我可以尝试与您合作。

相关问题