关于两个计数器自动机的猜想


19

我想证明(或反对)以下猜想:

猜想两个计数器自动机(2CA)无法确定以下语言:

L={n的三元和二进制表示n具有偶数长度或奇数长度}

2CA可以轻松地检查二进制表示形式的长度是偶数还是奇数(只需将其除以2,并在每次除法后更新“偶数长度”标志)即可;以相同的方式,它可以检查三进制表示形式的长度是偶数还是奇数(只需保持三分并在每次除法后更新“偶数长度”标志)。

但是,为了计算其中一个,它必须销毁其输入,而不能恢复它来计算另一个。如此看来,有没有办法决定L

您知道一种可以用来证明猜想的技术吗?
还是可以反驳建立一个决定的2CA的猜想L

我尝试了同样的做法,然后伊瓦拉证明一个2CA不能决定{n2n1},但似乎不正确的做法。

注意:为简单起见,2CA等效于具有一个变量的程序,该程序c 最初包含输入和以下指令集:

  • INC:在变量中加一;
  • DEC:减量c(仅当它大于零时);
  • JZ lab:如果c为零,则跳到标签lab否则继续;
  • MUL K:将乘以主要c成本K
  • K[,lab0,lab1,...,labK1]cKcc=c/KcmodK
  • GOTOlab:无条件跳转;
  • 暂停接受|拒绝:停止并接受或停止并拒绝。

例如,检查的二进制表示形式是否具有偶数长度的程序是:n

   loop: JZ even   // test if n = 0
         DIV 2
         JZ odd    // test if n = 0
         DIV 2
         GOTO loop
   even: HALT Accept
    odd: HALT Reject

(我们可以构建等效的2CA)


2
我不知道是不可能的证明怎么走,但是{ |三元表示为奇数长度}情况下可以解决的,因为每当你输入只知道黄金的因素,你可以把你的指数(N这里)作为模拟自动机中的计数器,您可以根据需要设置任意数量的计数器(由多余的质数来模拟)。2 n2n2n
与Orjan约翰森

2
我通过电子邮件向您发送了一些“代码”,并且还将其放在我的网站上,以防其他人观看。
与Orjan约翰森

1
@joro我描述的方法有一个严格的限制:它只能处理输入的有限质数(除了测试余数是否全部为0之外)。问题是在一般问题中,所有质数的指数因素计数。实际上,你可以计算出任何你或你的了平价,但据我所知,目前还没有办法通用输入比较或没有在这个过程中摧毁它,这样就可以不考试之后的另一个。我现在的直觉是,使用2CA不能解决一般问题。m 2 k 3 mkm2k3m
与Orjan约翰森

1
@ØrjanJohansen:我同意vzn:如果您愿意,可以发布带有限制的较简单问题的解决方案的答案(值得悬赏:-),并且对于希望快速解决原始问题的人有帮助。您也可以非常简短地说明为什么Ibarra的方法不能解决一般问题,以及为什么简单版本的解决方案不能解决一般问题(将注释复制并粘贴到joro)。
Marzio De Biasi 2015年

1
谢谢!非常/罕见地看到这个问题的所有兴趣/活动。一些更多的意见/问题,在这个问题上
VZN

Answers:


11

因此,即使它只能解决问题的简化版本,人们也一直在劝我张贴此消息。好吧 :)

最后,我将介绍我从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。个别的JZDEC可以先更改为组合形式。 GOTO labelHALT 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

然后,他们分析该自动机,得出结论,他们可以构造某些行为相互关联的数字算术序列。准确地说(其中一些并没有作为定理来陈述,但在两个主要示例的证明中都是隐含的):

  1. 如果数字x被自动机接受,而在第阶段开始时非零计数器的大小从未达到,则存在整数,使得所有数字,接受。vixi sD>0x+nDn0
  2. 如果集合至少包含接受的数字,使得对于每个数字都有一个相使得,那么我们可以找到和整数这样Xs2+1xXivixsp,rXK1,K2

    • 对于每个整数,和都被自动机接受,或者都被拒绝。n0p+nK1r+nK2

(想法:

  • 对于它们需要,但是我认为这实际上是不必要的。实际上,它们也被接受了。x>sxX
  • 只要拒绝是通过显式停止而不是非终止来完成的,大多数情况下也应适用于被拒绝的数字。)

对于他们自己的示例,他们还经常使用没有素数的事实。为了证明不可能,然后他们通过证明这样的算术序列不存在来得出矛盾。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发送给我),我可以证明第二种情况是不可能的。因此,也许有人可以使用此信息进一步限制自动机的形式,并最终从中得出矛盾。K1K2


1
很好,明确的答案!
Marzio De Biasi 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.