【发布时间】:2015-04-17 18:59:27
【问题描述】:
我正在自学 CS 理论,我一直在努力解决一个棘手的问题。
这里正式定义的原始问题:
基本上,我必须证明以下几点:给定一种语言的一些正则表达式,对于该语言的反向,你是否总是有一个等长的正则表达式。
我没有问题证明常规语言在反转下是封闭的,但是长度限制使它变得更加困难。如果可以的话请帮帮我,谢谢!
【问题讨论】:
标签: regex reverse theory regular-language finite-automata
我正在自学 CS 理论,我一直在努力解决一个棘手的问题。
这里正式定义的原始问题:
基本上,我必须证明以下几点:给定一种语言的一些正则表达式,对于该语言的反向,你是否总是有一个等长的正则表达式。
我没有问题证明常规语言在反转下是封闭的,但是长度限制使它变得更加困难。如果可以的话请帮帮我,谢谢!
【问题讨论】:
标签: regex reverse theory regular-language finite-automata
您只需要在给定原始正则表达式的情况下为反向语言构造一个正则表达式。因为正则表达式是递归定义的,所以您只需要反转子正则表达式的串联,其他的不受影响。长度显然是相等的。
示例:ab(c|d*e) -> (ed*|c)ba
【讨论】:
我们需要对正则表达式的结构进行归纳。大纲如下,需要详细填写:
对于终端 w,w^R = w,因此显然 |w| = |w^R|。
对于正则表达式 (w_1|w_2),使用 |w_1^R| = |w_1|和 |w_2^R| = |w_2|,我们有 (w_1|w_2)^R = (w_1^R|w_2^R),因此 |(w_1|w_2)| = |(w_1|w_2)^R|
对于带有 |w| 的正则表达式 w* = |w^R|,我们有 w*^R = w^R*,因此 |w*| = |w*^R|
对于带有 |w_1| 的正则表达式 w_1w_2 = |w_1^R|和 |w_2| = |w_2^R|,我们有 (w_1w_2)^R = w_2^Rw_1^R,因此 |w_1w_2| = |w_1| + |w_2| = |w_1^R| + |w_2^R| = |w_2^Rw_1^R|
这里需要证明的还是L(w*^R) = L(w^R*)和L^R(w_1w_2) = L(w_2^Rw_1^R)。
【讨论】: