因此,即使它只能解决问题的简化版本,人们也一直在劝我张贴此消息。好吧 :)
最后,我将介绍我从Ibarra和Trân的论文中学到的一些知识,以及为什么该方法不能解决我们的一般问题,但也许仍能提供一些有用的信息。
但首先,我们将探讨尝试确定集合的简单问题
2 n }L={2n∣三元和的二进制表示具有偶数长度或奇数长度2n}
请注意,它如何具有而不是原始问题中的。特别是如果输入数字不是 2的幂,我们要拒绝它,而不是尝试以任何底数计算其长度。 n2nn
这大大简化了事情:如果原始数字写为质数分解为,那么对于除以外的所有我们只需要检查他们都是。v 我v 2 02v23v35v57v7...viv20
这样一来,我们就可以通过在环绕乘法/除法自动机的单个变量的素数分解的指数的计数器自动机状态的旧方法(由Minsky假设)周围使用包装器来解决此简化的问题,正如上面的操作说明中所述,它几乎等同于2计数器自动机。k
首先,我们需要一个计数器自动机进行包装。我们将使用3个计数器,分别名为,和。v 2 v 3 v 5kv2v3v5
自动机将接受当且仅当对于初始计数器值,三元和的二进制表示具有偶数长度或奇数长度,以及两者和为零。接受后,它将首先将其所有计数器清零。 v 3 v 52v2v3v5
这是一些代码,类似于OP的汇编格式(我刚刚在指令中添加了变量)。我没有实际测试过它,因为我没有什么可以运行的,但是我认为这是一种形式:众所周知,三计数器自动机是图灵完备的,并且能够构造其中之一的任何可计算函数。初始值。
// Check that v3 and v5 are both zero.
JZ v3, check5
GOTO reject
check5: JZ v5, init3
GOTO reject
// Decrement v2 until it is zero, constructing 2^n in the process. If 2^n
// was even, we will then pass to even2 with 2^n in v3; If 2^n was odd, we
// will pass to odd2 with 2^n in v5.
init3: INC v3 // Set v3 to 1 = 2^0 to start with.
even1: // We have decremented v2 an even number of times so far.
// 2^decremented amount is in v3.
JZ v2, odd2
DEC v2
dup3to5: JZ v3, odd1
DEC v3
INC v5
INC v5
GOTO dup3to5
odd1: // We have decremented v2 an odd number of times so far.
// 2^decremented amount is in v5.
JZ v2, even2
DEC v2
dup5to3: JZ v5, even1
DEC v5
INC v3
INC v3
GOTO dup5to3
// The second part checks the ternary length of 2^n, which starts out in v3
// or v5 according to whether the *binary* length of 2^n (i.e. n+1) was odd
// or even.
odd2: // v3 needs to have odd ternary length to accept.
// It is simplest to consider 0 to have even length in both
// binary and ternary. This works out as long as we're
// consistent.
JZ v3, reject
trisect3to5: DEC v3
DEC v3
JZ v3, even2
DEC v3
INC v5
GOTO trisect3to5
even2: // v5 needs to have even ternary length to accept
JZ v5, accept
trisect5to3: DEC v5
DEC v5
JZ v5, odd2
DEC v5
INC v3
GOTO trisect5to3
accept: HALT Accept
reject: HALT Reject
然后,下一步是将上述内容重新编码为单个变量自动机的指数。结果很长,我只介绍一般的方法,但是我的网站上有完整的版本(有些地方“略有优化”)。
JZ vp, label
DEC vp
next: ...
变为(基本上除以p,然后如果除数不均,则进行清理以撤消):
DIV p, next, ..., newlabel.fp-1
newlabel.f1: MUL p
GOTO newlabel.i1
...
newlabel.fp-1: MUL p
INC
newlabel.ip-2: INC
...
newlabel.i1: INC
GOTO label
next: ...
INC vp
成为MUL p
。个别的JZ
,DEC
可以先更改为组合形式。 GOTO label
并HALT Reject
保持不变。
HALT Accept
将保持不变,但在我们的情况下,我们仍然有一个最后的检查做:我们需要确保有在数没有素因子等比2,3和5。由于我们特殊的3-计数器自动零计数器它在接受时使用,这很简单:只需测试最终变量为1,可以通过跳转到代码来完成
DEC // BTW it cannot be zero before this.
JZ accept
HALT Reject
accept: HALT Accept
我网站上的代码还对数字是否为零进行了初步检查,我刚刚意识到对于v3,v5零检查是多余的,哦。
正如我提到的,上述方法适用于简化的问题,但实际上没有机会适用于一般问题,因为:在一般问题中,每个素数指数的精确值都取决于决定其一般大小以及长度的长短有各种基础。这意味着:
- 我们没有用于柜台的“免费”素数。
- 即使我们确实有免费的计数器素数,我们实际上也没有从指数值很重要的无限多个素数中提取所有必要信息的方法。
因此,让我们结束与一般方法的要点的解释上面链接通过伊瓦拉和反式纸(可免费下载的版本)如何证明某些问题没有解决的一个2CA,以及它如何烦人打破了我们案件。
首先,他们将每个2CA修改为“正常形式”,其中两个计数器在一个阶段之间切换,一个阶段仅递增,而另一个仅递减直至达到零。状态的数量这个归一化的自动播放的估计了重要的作用。s
然后,他们分析该自动机,得出结论,他们可以构造某些行为相互关联的数字算术序列。准确地说(其中一些并没有作为定理来陈述,但在两个主要示例的证明中都是隐含的):
- 如果数字x被自动机接受,而在第阶段开始时非零计数器的大小从未达到,则存在整数,使得所有数字,接受。vxii ≤sD>0x+nDn≥0
如果集合至少包含接受的数字,使得对于每个数字都有一个相使得,那么我们可以找到和整数这样Xs2+1x∈Xivxi≤sp,r∈XK1,K2
- 对于每个整数,和都被自动机接受,或者都被拒绝。n≥0p+nK1r+nK2
(想法:
- 对于它们需要,但是我认为这实际上是不必要的。实际上,它们也被接受了。x>sx∈X
- 只要拒绝是通过显式停止而不是非终止来完成的,大多数情况下也应适用于被拒绝的数字。)
对于他们自己的示例,他们还经常使用没有素数的事实。为了证明不可能,然后他们通过证明这样的算术序列不存在来得出矛盾。D,K1,K2>s
在我们的问题中,由此产生的矛盾在第二种情况下得以解决。如果我们有,其中是足够大,使得无之间数和是由任一整除或,那么也将会之间没有2的幂或3和,所以它们要么被接受,要么被拒绝。 k p r 2 k 3 k p + 6 k n q + 6 k nK1=K2=6kkpr2k3kp+6knq+6kn
点1仍然可以证明是不可能的,因为2和3的幂在很大程度上分开得越来越远。我相信,如果(我已通过电子邮件将@MarzioDeBiasi发送给我),我可以证明第二种情况是不可能的。因此,也许有人可以使用此信息进一步限制自动机的形式,并最终从中得出矛盾。K1≠K2