下表显示了形式语言的闭包属性:
REG = 正则语言
DCFL = 确定性上下文无关语言,
CFL = 上下文无关语言,
CSL = 上下文相关语言,
RC = 递归。
RE = 递归可枚举
考虑 L 和 M 是常规语言:
- 克莱恩之星——
∑*, 是一组符号或字符串∑ 上的一元运算运算符,它给出了 ∑ 上所有可能长度的所有可能字符串的无限集合,包括 λ。 - 克莱恩加 –
集合 ∑+ 是 ∑ 上所有可能长度的所有可能字符串的无限集合,不包括 λ。 - 补充 –
语言 L 的补语(相对于字母 E,使得 E *包含 L)是 E*–L。因为 E* 肯定是正则的,所以正则语言的补集总是正则的。 - 反向运算符 –
给定语言 L,L R是在 L 中反转的字符串的集合。 - 补充 –
语言 L 的补语(相对于字母 E,使得 E *包含 L)是 E*–L。因为 E* 肯定是正则的,所以正则语言的补集总是正则的。 - 联盟——
令 L 和 M 分别为正则表达式 R 和 S 的语言。那么R+S就是一个语言为(LUM)的正则表达式。 - 交叉路口——
设L和M分别为正则表达式R和S的语言,则是语言为L交点M的正则表达式。 - 设置差分运算符–
如果 L 和 M 是常规语言,那么 L 也是 – M = L 中的字符串,但不是 M。 - 同态——
字母表上的同态是一个函数,它为该字母表中的每个符号提供一个字符串。 - 逆同态——
设 h 是一个同态,L 是一个语言,其字母表是 h 的输出语言。 h -1 (L) = {w | h(w) 在 L} 中。 - 代换 –
替换是字母到语言的映射,它同样扩展为字符串到语言的映射。通过为 tx 识别单例语言 {x},态射被视为替换的特殊情况。 - 左商 –左商 ,或语言 L 与单词 w 的商是语言 Lw = {x ∈ Σ* | wx∈L}
L1 与 L2 的右商是所有字符串x 的集合,您可以在其中从 L2 中选取一些 y 并将其附加到 x 以从 L1 中获取某些内容。也就是说,如果 L2 中有 y 而 xy 在 L1 中,则 x 在商中。)
Operations | REG | DCFL | CFL | CSL | RC | RE |
Union | Y | N | Y | Y | Y | Y |
Intersection | Y | N | N | Y | Y | Y |
Set Difference | Y | N | N | Y | Y | N |
Complement | Y | Y | N | Y | Y | N |
Intersection with a Regular Language | Y | Y | Y | Y | Y | Y |
Union with a Regular Language | Y | Y | Y | Y | Y | Y |
Concatenation | Y | N | Y | Y | Y | Y |
Kleene Star | Y | N | Y | Y | Y | Y |
Kleene Plus | Y | N | Y | Y | Y | Y |
Reversal | Y | Y | Y | Y | Y | Y |
Epsilon-free Homomorphism | Y | N | Y | Y | Y | Y |
Homomorphism | Y | N | Y | N | N | Y |
Inverse Homomorphism | Y | Y | Y | Y | Y | Y |
Epsilon-free Substitution | Y | N | Y | Y | Y | Y |
Substitution | Y | N | Y | N | N | Y |
Subset | N | N | N | N | N | N |
Left Difference with a Regular Language (L-Regular) | Y | Y | Y | Y | Y | Y |
Right Difference with a Regular Language (Regular-R) | Y | Y | N | Y | Y | N |
Left Quotient with a Regular Language | Y | Y | Y | N | Y | Y |
Right Quotient with a Regular Language | Y | Y | Y | N | Y | Y |
注意:如果我们将任何语言与常规语言进行并、交或集差,则语言不会改变。
例子
- CFL ∩ 常规是 CFL。
- CFL ∪ 常规是 CFL。
将次要操作转换为主要操作总是一个好主意。
令L 1和L 2是两种语言。
注意:对于⊆ , ⊇ ,无限并集,无限交集,无限集差,没有语言是封闭的。
在这些操作下,语言可能是也可能不是正规的。
让我们考虑一些连接操作的情况:
- 常规的。常规 ⇒ 常规
- 常规的。非常规 ⇒ 可能是也可能不是正规的
- 非常规。非常规 ⇒ 可能是也可能不是正规的
- 如果 L1 . L2 是规则的 ⇒ L1 可能是也可能不是规则的
- 如果 L1 . L2 是规则的 ⇒ L2 可能是也可能不是规则的
- 如果 L1 . L2 是非常规 ⇒ 其中至少一个应该是非常规的。