为什么Kleene星运算符也称为Kleene'closure'运算符?


14

我发现,如果我不了解CS /编程术语背后的词源,通常意味着我已经错过或误解了一些重要的基本概念。

我不明白为什么Kleene星也被称为Kleene闭合。它与编程中的闭包(具有绑定的非局部变量的函数)有关吗?

...经过反思,也许是因为它允许将开放式集以封闭表达式形式编写?

……以一种古老的橡皮鸭解释方式,现在我猜是这样,但是仍然欢迎权威人士回答。


3
您的用户名是否是您想要旧时的橡皮鸭解释时尚的原因
babou 2015年

@babou是的。但今天
却令

您的评论是,在我的答案(以及@David Richerby的答案,因为他从未明确提及任何字符串操作,除非在注释中)中定义的并置下的闭包将不包含空单词ϵ是非常准确的。谢谢。结果,Kleene star运算符不能表示串联下的闭合:Kleene +运算符可以表示闭合。但是,Kleene星算子可以表示从级联导出的幂运算下的闭合。我的回答涵盖了这方面。它比预期的要微妙。
2015年

答案是否足够可读,还是应该在较软的橡胶中添加一段?
2015年

Answers:


16

一组被封闭在一些运营商如果在一套适用的运营商事情的结果总是在集合。例如,自然数在加法之后是封闭的,因为每当m为自然数时,n + m为自然数。在另一方面中,土黄没有下减法关闭,因为,例如,3 - 5是不自然数。nmn+m35

在某个算子下的集合S闭包是在算子下被关闭的包含S的最小集合。例如,减法后自然数的闭包是整数;由于集合已经关闭,加法后自然数的闭合只是自然数。SS

因此,“ Kleene闭合”不是“ Kleene star”的替代名称。Kleene星是运算符;集合的Kleene闭包是运算符下该集合的闭包。


好的,谢谢,您对集合闭包的解释非常容易理解。但是,您是说Kleene star是一个运算符(例如plus是一个运算符),而Kleene闭包是一个运算符(例如加法)吗?另外,Babou的回答是,该名称实际上来自于操作在连接时表示集合的闭合的事实,这很有意义。虽然epsilon不会把那里的东西弄乱吗?!...
mallardz

1
@mallardz正确地讲,闭包就是集合;形成封闭物的操作通常称为“封闭”。
David Richerby

@DavidRicherby:您可以将减法运算后的自然数称为闭包吗?您是说要说,由于在运算符kleene *下 闭包的正则表达式集会生成一个正则表达式,因此我们将其称为闭包吗?
贾斯汀

@justin根据定义,任何集合在一个操作下的闭包本身必须在该操作下关闭。由于自然不会在减法下关闭,因此它们不能是在减法下关闭任何事物。正则表达式集已在Kleene star下关闭,根据定义,某些操作下正则表达式集的关闭是一组事物,而不是单个正则表达式。所以我不太了解您的问题。
David Richerby '16

@DavidRicherby:是的,没错,我错误地将自然数集减去了一个自然数后就得​​到了。
贾斯汀

7

简而言之

名称Kleene闭包显然旨在表示 在某些字符串操作下的闭包

但是,仔细的分析(由于OP Mallardz的批评)显示,Kleene星不能在串联状态下被闭合,这与Kleene plus运算符相对应。

Kleene星算子实际上对应于从级联派生的幂运算下的闭包。

名称Kleene star来源于星型操作的句法表示*,而闭包就是它的作用。

这将在下面进一步解释。
回想一下,一般而言,尤其是Kleene star的闭包是对集合的操作,这里是对字符串集合的操作,即对语言的操作。这将在解释中使用。

在始终定义的操作下关闭子集

一组下一些关闭Ñ进制操作˚F当且仅当˚F为任何始终定义Ñ的参数元组ÇC ^ = { ˚F ç 1... c ^ Ñ| ∀ c ^ 1... Ç ÑC }CnffnCC={f(c1,,cn)c1,,cnC}

通过延伸以通常的方式对值的集合,即 ˚F 小号1... 小号Ñ= { ˚F 小号1... s ^ Ñ| ∀ 小号小号1 Ñ } 我们可以重写条件为一组方程:Ç = ˚F ç ... C ^ f

f(S1,,Sn)={f(s1,,sn)siSi.1in}


C=f(C,,C)

对于域(或集)有操作˚F是始终上定义d,以及一组小号d,所述的封闭小号˚F最小集合小号˚F 含有小号,其满足以下关系式: 小号˚F = { ˚F 小号1... s ^ ñ| ∀ s ^ 1... s ^ ñ小号˚F }DfDSDSfSfSSf={f(s1,,sn)s1,,snSf}

更简洁地说,对于一个设定方程式,f下的的闭合可以定义为:Sf

Sf is the smallest set such that SSf and Sf=f(Sf,,Sf)

这是最小定点定义的示例,通常在语义中使用,也用于形式语言。上下文无关的语法可以看作是语言方程式(即字符串集方程式)的系统,其中非终结符代表语言变量。最小定点解将语言与每个变量关联,因此与初始符号关联的语言是CF语法定义的语言。

扩展概念

如上文所定义的闭包仅旨在将子集扩展 为最小集合S f,从而始终定义操作fSSff

至于说由OP mallardz,这不是一个充分的解释,因为它不包括空字小号˚F当它是不是已经在小号。实际上,这种闭合对应于Kleene plus的定义,而不是Kleene星的定义。ϵSfS+*

实际上,闭包的想法可以扩展,也可以以不同的方式考虑。

  1. 扩展到其他代数性质

    Sff

    SfSfϵ

  2. 通过派生操作进行扩展

    SDD

    fDSf,1S

    Sf,1={f(s1,s2)s1Sf,1s2D}

    或设置方程式:

    Sf,1 is the smallest set such that SSf,1 and Sf,1=f(Sf,1,D)

    当参数不属于同一集合时,这也很有意义。这样一来,您可能会对一组中的某些参数具有闭包,同时考虑其他参数的所有可能值(可能有多种变体)。

    (M,f,ϵ) fMϵuM

    uM.u0=ϵ and nNun=f(u,un1)

    unMN0

    MnUn={unuU}unf

    {U0={u0uU}={ϵ}nN,Un=f(U,Un1)
    fM

    U,1UM

    U,1 is the smallest set suchthat UU,1 and U,1=f(U,1,N0)

    当将构造应用于字符串的自由Monoid的串联操作时,这确实为我们提供了Kleene star操作。

    老实说,我不确定我没有作弊。但是定义只是您的定义,这是我发现将Kleene星真正转变为闭合的唯一方法。我可能太努力了。
    欢迎发表评论。

在并非总是定义的操作下关闭集合

这与关闭的概念略有不同。这种观点并不能真正回答这个问题,但是牢记这一点似乎很好,以免造成一些混淆。

fD

  • Df

  • DDf

  • DDff

DfDf

这就是从自然数构建整数的方式,考虑了用等价关系商定的自然数对对的集合(如果两个元素的顺序相同且具有相同的差异,则两对是等价的)。

这也是从整数构建有理数的方式。

这是可以从理性中构建古典实境的方式,尽管其构造更为复杂。


嘿,谢谢,串联说明下的闭包很有意义,但是串联下的闭包中是否存在epsilon?
mallardz 2015年

ϵ

@DavidRicherby实际上,我的意思是,如果您有一个集合S = {m},那么在S串联下的闭包是否包含epsilon?因为m *对吗?如果不是这样,我想Kleene闭包并不等同于串联下的闭包,尽管我仍然可以看到名字的起源。我似乎还记得在某处读过Kleene星最初是如何进行双星算子并避免产生ε的?
mallardz

@DavidRicherby我完成了我的回答,以期遇到@ Mallardz的反对。
babou 2015年

6

:XXX

  1. xx
  2. xyxy
  3. (x)=x

=(xy)=xy

X=2Σx,yΣxyxy

  1. LL
  2. L1L2L1L2
  3. (L)=L

Kleene plus运算符也满足这些公理,因此在此定义下闭包运算符也是如此。


这不是消除最低要求吗?我的意思是,如果删除此要求,David Richerby的答案和我的初始答案对于Kleene明星都是可以的。
2015年

回答我自己的评论。保留极小值,但相对于封闭集的集合进行定义。与字符串操作(例如串联)没有直接关系。然后,Kleene star和plus都是闭包操作,但是针对不同的闭集集使用极小值进行定义。这是一个抽象得多的视图。(至少我满意地看到,像我最终所做的那样,在设定的级别进行推理是正确的方法:)。有趣。谢谢。
babou 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.