【发布时间】:2015-09-15 22:42:00
【问题描述】:
表示正则语言 L 的单词的反义词也是正则
我对如何处理这个问题感到困惑,我已经被困了好几个小时:对于单词 x,我们使用 x^r 来表示它的反面。对于语言 L,我们使用 L^r 来表示 {x^r 其中 x 在 L 的集合中}。证明如果 L 是正则的,那么 L^r 也是正则的
【问题讨论】:
表示正则语言 L 的单词的反义词也是正则
我对如何处理这个问题感到困惑,我已经被困了好几个小时:对于单词 x,我们使用 x^r 来表示它的反面。对于语言 L,我们使用 L^r 来表示 {x^r 其中 x 在 L 的集合中}。证明如果 L 是正则的,那么 L^r 也是正则的
【问题讨论】:
如果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,则G_l 中存在产生式'S -> \epsilon'。因为我们不接触这样的作品,所以它也出现在G_r。
如果L包含a,一个由单个终端组成的词,那么和上面的类似
如果L 包含aZ,其中a 是一个终端,Z 是从L 中的单词中去掉第一个终端而构造的语言中的一个单词,那么L^r 包含(由于链接制作的更改)(Z^r)a。 Z 也是一种常规语言,因为它可以通过从 G_l 中删除左产生式的第一个“级别”来构建,这给我们留下了常规语法。
我希望它有所帮助。通过反转相关有限自动机的边缘并稍微改变接受和进入状态,还有一种可以说更简单的方法。
【讨论】: