在数学中,有许多非构造性的存在证明,因此我们知道某个对象存在,尽管我们不知道如何找到它。
我正在计算机科学领域寻找类似的结果。特别是:是否存在一个问题,我们可以证明它是可判定的而无需显示算法?也就是说,我们知道可以通过算法解决,但是我们不知道算法是什么样的?
在数学中,有许多非构造性的存在证明,因此我们知道某个对象存在,尽管我们不知道如何找到它。
我正在计算机科学领域寻找类似的结果。特别是:是否存在一个问题,我们可以证明它是可判定的而无需显示算法?也就是说,我们知道可以通过算法解决,但是我们不知道算法是什么样的?
Answers:
我知道存在一个算法的最简单情况,尽管不知道哪种算法涉及有限状态自动机。
商语言的大号1由一个语言大号2被定义为大号1 / 大号2 = { X | ∃ ý ∈ 大号2 ,使得 X ý ∈ 大号1 }。
容易证明,正规集在商下由任意集封闭。换句话说,如果是规则的并且L 2是任意的(不一定是规则的),那么L 1 / L 2也是规则的。
证明很简单。令是接受规则集R的FSA ,其中Q和F分别是状态集和接受状态集,而L是任意语言。让˚F ' = { q ∈ Q | ∃ ÿ ∈ 大号是集合状态从该最终状态可以通过接受从字符串到达大号。
该自动机,它从不同中号 只在其集˚F '最终状态的识别精确- [R /大号。(有关这一事实的证明,请参见Hopcroft-Ullman 1979,第62页。)
但是,当集合不可确定时,可能没有算法来确定哪些状态具有定义F '的属性。因此,尽管我们知道集合F '是Q的子集,但我们没有确定哪个子集的算法。因此,尽管我们知道R被2 |之一接受。问| 可能的FSA,我们不知道是哪个。尽管我必须承认,我们在很大程度上知道它的外观。
这是有时被称为近乎建设性的 证明的一个例子,即证明有限数量的答案之一就是正确的证明。
我想对此进行扩展可以证明一组答案之一就是正确的答案。但是我什么都不知道。我也不知道一个纯粹的非建设性证据,证明某些问题是可以判定的,例如仅使用矛盾。