显示常规语言L的单词的反向也是常规的
我对如何处理这个问题很困惑,我已经被困了好几个小时:对于一个单词x,我们使用x ^ r来表示它的反向。对于语言L,我们使用L ^ r来表示{x ^ r,其中x在L的集合中}。证明如果L是规则的那么L ^ r
答案 0 :(得分:1)
如果L
是常规的,那么存在一些生成它的常规语法。它可以始终表示为左常规语法或右常规语法。让我们假设它是左常规语法G_l
(右边常规语法的证明是类似的)。
这种语法有两种类型的作品;终止类型:
A -> a, where A is non-terminal and a is either a terminal or empty string (epsilon)
或链接类型:
B -> Ca, where B, C are non-terminals and a is a terminal
当我们将反向应用于常规语言时,我们基本上也将它应用于制作的尾部(因为头部只是单个非终端)。它将在稍后证明。所以我们得到了一个新的语法G_r
,其中包括:
A -> a, where A is non-terminal and a is either a terminal or empty string (epsilon)
B -> aC, where B, C are non-terminals and a is a terminal
但是,嘿,这是一个正确的常规语法!所以它接受的语言也是常规的。
有一件事要做 - 表明倒车尾巴实际上做了它应该做的事情。我们将非常简单地证明:
如果L
包含\ epsilon,则有生产' S - > \小量'在G_l
。由于我们不接触这样的作品,因此它也出现在G_r
中。
如果L
包含a
,一个由单个终端组成的单词,那么它与上述类似
如果L
包含aZ
,则其中a是终端,而Z
是从{{1}中的单词中删除第一个终端构造的语言中的单词然后L
包含(因为链接产品的更改)L^r
。 Z也是一种常规语言,因为它可以通过删除第一个"级别来构建。来自(Z^r)a
的左制作,留给我们一个正常的语法。
我希望它有所帮助。通过扭转相关有限自动机的边缘并稍微改变接受和进入状态,这也可以说是一种更容易实现的方法。