6

在 Brzozowski 的“正则表达式的导数”和其他地方,函数 δ(R) 如果 R 可以为空,则返回 λ,否则返回 ∅,包括如下子句:

δ(R1 + R2) = δ(R1) + δ(R2)
δ(R1 · R2) = δ(R1) ∧ δ(R2)

显然,如果R1R2都可以为空,则 ( R1 · R2 ) 可以为空,如果R1R2都可以为空,则 ( R1 + R2 ) 可以为空。但是,我不清楚上述条款应该是什么意思。我的第一个想法是,将 (+)、(·) 或布尔运算映射到常规集合是没有意义的,因为在基本情况下,

δ(a) = ∅ (for all a ∈ Σ)
δ(λ) = λ
δ(∅) = ∅

并且 λ 不是一个集合(集合也不是 δ 的返回类型,它是一个正则表达式)。此外,此映射未指明,并且有一个单独的符号。我理解可空性,但我对 δ 的定义中的和、乘积和布尔运算的定义迷失了:例如,在定义中,λ 或 ∅ 如何从 δ( R1 ) ∧ δ( R2 )返回关闭 δ( R1 · R2 )?

4

3 回答 3

3

我认为您分别映射+^布尔值是正确orand。看起来您引用的两行处理交替(总和)和连接(产品):

δ(R1 + R2) = δ(R1) + δ(R2)

如果可以为空、可以为空或两者兼有且可以为空,则和的交替是可以为空的。R1R2R1R2R1R2

δ(R1 · R2) = δ(R1) ∧ δ(R2)

仅当and都可以为空时,and的连接才可以为空。R1R2R1R2

有关这些规则的 Haskell 实现,请参见此处

于 2011-01-02T08:32:42.147 回答
2

(我无法查看 Brzozowski 的文章以更好地理解其中的含义),但我可以提出 2 种解释此符号的方法(除了与符号相处之外,我明白,毫无疑问:预期这个定义的含义很好理解):

1) 在定义的左侧,我们只有正则表达式的“句法”模式。在右边,我们生产套装;请记住,正则表达式是表示一种语言(一组)​​的一种方式,因此写下定义的这种方式变得可以理解:在右边,我们只是使用一些(简单的)正则表达式作为引用的一种简短方式套。即,∅ 表示空语言(空集),λ(如果解释为正则表达式)表示仅包含空词的语言(具有此元素的集合)。

这些操作只是对集合的操作:可能是并集和交集。

如果以这种方式解释表示法,则与使用的表示法不冲突基本情况:再次,“a”是一个正则表达式,它在那里表示带有单词“a”的语言。

2)我们首先在右边构建正则表达式,但是作者用楔形扩展了构建正则表达式的操作,它具有语言交集的语义。

于 2011-01-10T02:33:36.017 回答
2

我认为您被作者所采取的符号自由所吸引。δ(R) 的返回类型肯定是一个集合,或者更确切地说是一种语言。如果你看一下定义:

替代文字

可以看到返回类型有不一致的地方,形式上λ是一个元素,但是∅是空语言……应该说的是:

替代文字

作者对空字符串和只包含空字符串的语言都使用 λ 的事实通过他对 Kleene 星号运算符的定义得到进一步证明:

替代文字

替代文字显然,如果我们想学究气,最后一部分应该是。

鉴于 δ(R) 的返回类型是一个集合,或者更确切地说是一种语言,您给出的方程非常有意义并且准确地表达了您所描述的内容。

于 2011-01-11T14:17:05.477 回答