2017-03-16 57 views
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)

然而这需要在右侧

回答

2

如果L = AUB,定义一个操作员 - 使得L - B = A.

问题在于运算符 - 没有明确定义:给定L和B,可能有几种满足L = AU B的语言。特别是,如果A是L和任何(可能不适当的)超集的子集的L \ B,那么A是一个解决方案;也就是说,如果A =(L \ B)U C,其中C是B的一个(可能不合适的)子集,那么L - B也可能等于那个集合。

现在,您可以定义 - 表示所有这样的A的集合,并且在这种情况下,您可以使用集合差异,联合和幂集操作符使其可行。然后,L-B = Q其中Q = {(L \ B)U {},(L \ B)U {B [0]},...,(L \ B)U B = 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}。