2

我正在尝试找到一种可以采用常规语言并将其与另一种语言“取消连接”的操作。例如:

a*L - a* = L | 其中 L 是常规语言

我知道差异(减法)不是我想要的操作。但我相信我的观点已经得到了理解。

另一种看待它的方式是,如果有一个逻辑上等于 (A ∪ B) 的集合 L,但我们无法访问 A。因此,如果我们只能使用 L、B 和此类的推导,我们可以以某种方式得出A。基本上:

L - B = A | L = (A ∪ B)

我已经对这个问题进行了很多思考,使用了正则语言的恭维、交集和其他闭包属性的许多变体,但我就是想不通。

我设法想出的最好的是:

A = ((L - B) ∪ (A ∩ B) | L = (A ∪ B)

但是,这需要右侧的 A。

4

1 回答 1

2

如果 L = AUB,定义一个运算符 - 使得 L - B = A。

这样做的问题是运算符 - 没有明确定义:给定 L 和 B,可能有几种语言满足 L = AU B。特别是,如果 A 是 L 的子集和任何(可能不正确的)超集L\B,则 A 为解;也就是说,如果 A = (L \ B) UC,其中 C 是 B 的(可能不正确的)子集,那么 L - B 也可能等于该集合。

现在,您可以定义 - 来表示所有此类 A 的集合,在这种情况下,您可以使用集合差异、联合和幂集运算符使其可行。然后,L - B = Q 其中 Q = {(L \ B) U {}, (L \ B) U {B[0]}, ..., (L \ B) UB = L}。

如果您指定,您可以明确定义 - 始终返回 Q 的“最小”元素(对于有限集,元素最少的元素;对于无限集,是所有其他集的子集)在这种情况下您只需恢复 L \ B。

如果 L = BA,定义一个运算符 - 使得 L - B = A。

这里存在类似的问题:可能有几种语言,当附加到 B 时,给出 L。例如,考虑 B = a*,A 有两个选择:a* 和 {e},语言只包含空集. 您可以毫不费力地证明 a* a* = a* e,因此无论哪种方式 L 都相同,B 相同,并且 L - B 现在必须产生两个不同的值:a* 或 {e}。

于 2017-03-20T20:58:39.420 回答