我发现,如果我不了解CS /编程术语背后的词源,通常意味着我已经错过或误解了一些重要的基本概念。
我不明白为什么Kleene星也被称为Kleene闭合。它与编程中的闭包(具有绑定的非局部变量的函数)有关吗?
...经过反思,也许是因为它允许将开放式集以封闭表达式形式编写?
……以一种古老的橡皮鸭解释方式,现在我猜是这样,但是仍然欢迎权威人士回答。
我发现,如果我不了解CS /编程术语背后的词源,通常意味着我已经错过或误解了一些重要的基本概念。
我不明白为什么Kleene星也被称为Kleene闭合。它与编程中的闭包(具有绑定的非局部变量的函数)有关吗?
...经过反思,也许是因为它允许将开放式集以封闭表达式形式编写?
……以一种古老的橡皮鸭解释方式,现在我猜是这样,但是仍然欢迎权威人士回答。
Answers:
一组被封闭在一些运营商如果在一套适用的运营商事情的结果总是在集合。例如,自然数在加法之后是封闭的,因为每当和m为自然数时,n + m为自然数。在另一方面中,土黄没有下减法关闭,因为,例如,3 - 5是不自然数。
在某个算子下的集合S的闭包是在算子下被关闭的包含S的最小集合。例如,减法后自然数的闭包是整数;由于集合已经关闭,加法后自然数的闭合只是自然数。
因此,“ Kleene闭合”不是“ Kleene star”的替代名称。Kleene星是运算符;集合的Kleene闭包是运算符下该集合的闭包。
名称Kleene闭包显然旨在表示 在某些字符串操作下的闭包。
但是,仔细的分析(由于OP Mallardz的批评)显示,Kleene星不能在串联状态下被闭合,这与Kleene plus运算符相对应。
Kleene星算子实际上对应于从级联派生的幂运算下的闭包。
名称Kleene star来源于星型操作的句法表示*
,而闭包就是它的作用。
这将在下面进一步解释。
回想一下,一般而言,尤其是Kleene star的闭包是对集合的操作,这里是对字符串集合的操作,即对语言的操作。这将在解释中使用。
一组下一些关闭Ñ进制操作˚F当且仅当˚F为任何始终定义Ñ的参数元组Ç和 C ^ = { ˚F (ç 1,... ,c ^ Ñ)| ∀ c ^ 1,... ,Ç Ñ ∈ C }。
通过延伸以通常的方式对值的集合,即 ˚F (小号1,... ,小号Ñ)= { ˚F (小号1,... ,s ^ Ñ)| ∀ 小号我 ∈ 小号我。1 ≤ 我≤ Ñ } 我们可以重写条件为一组方程:Ç = ˚F (ç ,... ,C ^ )
对于域(或集)有操作˚F是始终上定义d,以及一组小号⊂ d,所述的封闭小号下˚F是最小集合小号˚F 含有小号,其满足以下关系式: 小号˚F = { ˚F (小号1,... ,s ^ ñ)| ∀ s ^ 1,... ,s ^ ñ ∈ 小号˚F }。
更简洁地说,对于一个设定方程式,f下的的闭合可以定义为:
这是最小定点定义的示例,通常在语义中使用,也用于形式语言。上下文无关的语法可以看作是语言方程式(即字符串集方程式)的系统,其中非终结符代表语言变量。最小定点解将语言与每个变量关联,因此与初始符号关联的语言是CF语法定义的语言。
如上文所定义的闭包仅旨在将子集扩展 为最小集合S f,从而始终定义操作f。
至于说由OP mallardz,这不是一个充分的解释,因为它不包括空字在小号˚F当它是不是已经在小号。实际上,这种闭合对应于Kleene plus的定义,而不是Kleene星的定义。+
*
实际上,闭包的想法可以扩展,也可以以不同的方式考虑。
扩展到其他代数性质
通过派生操作进行扩展
或设置方程式:
当参数不属于同一集合时,这也很有意义。这样一来,您可能会对一组中的某些参数具有闭包,同时考虑其他参数的所有可能值(可能有多种变体)。
当将构造应用于字符串的自由Monoid的串联操作时,这确实为我们提供了Kleene star操作。
老实说,我不确定我没有作弊。但是定义只是您的定义,这是我发现将Kleene星真正转变为闭合的唯一方法。我可能太努力了。
欢迎发表评论。
这与关闭的概念略有不同。这种观点并不能真正回答这个问题,但是牢记这一点似乎很好,以免造成一些混淆。
这就是从自然数构建整数的方式,考虑了用等价关系商定的自然数对对的集合(如果两个元素的顺序相同且具有相同的差异,则两对是等价的)。
这也是从整数构建有理数的方式。
这是可以从理性中构建古典实境的方式,尽管其构造更为复杂。