我需要帮助处理我的计算机模型课程中的几个硬件问题。我阅读了文中的相关章节(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 +其他一些东西......如果有人可以帮助我将其形式化为归纳形式,我会很感激。
由于
答案 0 :(得分:1)
(1)这是L*
的有用递归定义:
L*
x
位于L
,x
位于L*
x
和y
位于L*
,xy
L*
是满足1. - 3.给定L
根据这个定义,这是一个矛盾的证明:假设R* = a*b*
。然后ab
位于R*
。截至3.,abab
也必须位于R*
。但后来R* != a*b*
,一个矛盾。所以R* = a*b*
必须是假的;换句话说,对于没有语言R
是R* = a*b*
。
直觉非常简单:L*
是所有字符串的语言,可以通过连接来自L
的零个或多个(允许重复)字符串来形成。递归定义的工作原理是允许零字符串(在1.中),字符串从L
(在2.中)中取出一个字符串,以及通过从L
加入可能很多字符串形成的字符串(在3中)。 )。
(2)使用上面给出的定义,我们对A*
中的连接字符串的数量进行归纳处理。对于0个连接,空字符串同时位于A*
和B*
中,因此我们很好(参见规则1)。对于1次连接,由于A
是B
的子集,A
中的字符串将位于A*
中(请参阅规则2),而来自B
的字符串将在B*
(同一规则)中,因此在A*
中进行一次连接的所有字符串也在B*
中。现在,假设在k
中使用A*
个连接的所有字符串也在B*
中。在k+1
中使用A*
个连词的字符串呢?好吧,这些是使用规则3在x
上的y
和A*
中形成的,k+1
严格地小于k
个连接,即最多A*
个连接。换句话说,k+1
xy
个连结中的任何字符串都可以重写为x
,其中y
和A*
位于x
中, y
和k
最多需要A*
个联合。由于k
中最多B*
个连接的所有字符串也位于x
中(根据我们的假设),我们{B}居住y
和xy
。根据规则3,B*
也必须位于k+1
。因此,A*
中B*
个拼接的字符串也必须属于{{1}}。这样就完成了证明。
注意:这掩盖了一些细节,并不是非常正式,但你应该得到这个想法,并希望能够塑造它。如果您需要比这更精美的东西,请告诉我,我可以尝试与您合作。