在数学集中,我们有
A = {1,2,3}B = {4,5,6}
A U B = B U A = {1,2,3,4,5,6} = {6,5,2,3,4,1} //顺序无关紧要
但是从计算理论上我们得到
a u b是a或b,但不是两个
同样在a * u b *中,我们得到aaa或bbb,但没有aaabbb或bbbaaa,因为顺序在联合中无关紧要。
为什么?
谢谢拉曼
为什么?
没有在形式语言理论中,正则表达式和正则集之间在字母Σ
之间存在对应关系。函数L
将正则表达式u
映射到相应的正则集L(u)
;相反,每个A
正则集都对应L-1(A)
中的正则表达式:
L(∅) = ∅
L(λ) = {λ}
L(a) = {a} (for all a ∈ Σ)
L(uv) = L(u)L(v) = {xy ∈ Σ* : x ∈ L(u) ∧ x ∈ L(v)}
L(u|v) = L(u) ∪ L(v) = {x ∈ Σ* : x ∈ L(u) ∨ x ∈ L(v)}
L(u*) = ∪[i ∈ ℕ] L(u)i = ∪[i ∈ ℕ] {xi ∈ Σ* : x ∈ L(u)}
正则表达式的并集对应于正则集的并集,这是集合理论中熟悉的并集操作。如果u
是相应集合x
的成员,则正则表达式x
与字符串L(u)
匹配。因此,如果u|v
是x
的成员,则x
与L(u) ∪ L(v)
匹配。
这可能仍然属于数学溢出,并且您实际上没有提供足够的上下文来确定答案,所以我将做一些假设。
在大多数语言中,[Union Types
可能会给您这样的表达式:
type C = B union A
因此类型C是类型B或C中可能存在的所有值的类型/集合。因此类型B的值x也是类型C的值。
而且对于许多语言来说确实如此。但是,堆栈溢出的目标是更具体的编程领域。数学溢出将有更多的理论家来更好地回答您的问题。