BSV 上的图灵机

我们通过实践证明任何图灵机都可以在 Bitcoin 上进行模拟,从而证明它是图灵完备的¹。我们已经实现了一个识别平衡括号的图灵机,并将其部署在 BSV 区块链上。任何其他的图灵机都可以用同样的方式模拟。

图灵机简介

图灵机由以下组件(简化)组成:

  1. 当前状态,在一组有限的状态中(一个状态标记为初始状态,一些状态标记为结束状态)

  2. 带有存储单元和可以在磁带上移动的读/写头的磁带

  3. 一个所谓的转换函数,它告诉机器该做什么和什么时候做。

在下面的示例中,我们展示了用于检查平衡括号的图灵机。它的初始状态是 A 并且它包含一个接受状态。转换函数表示,例如,如果图灵机处于状态 A 并且其头部读取符号“(”,则它应该在该单元格中写入“X”并向左移动,转换到状态 B。

在这里插入图片描述

一个用于检查平衡括号的图灵机

邱奇-图灵论题

邱奇-图灵 论题指出,图灵机可以计算任何可以计算的东西。它是计算的定义,也是计算机理论的基本工具。

在 BSV 上模拟图灵机

我们将展示一种在 BSV 上模拟图灵机的通用方法。我们获取正在运行的图灵机的快照:磁头位置、当前状态和磁带。快照存储在有状态的 BSV 智能合约中。更具体地说,它们是 BSV 交易的输出。运行图灵机的每一步都由 BSV 交易触发。图灵机可以继续运行,除非它进入可接受的状态。

在这里插入图片描述

模拟图灵机 (TM)

实现

为了证明在 BSV 上模拟图灵机的可行性,我们已经实现了前面提到的图灵机来检查平衡括号,如下所示。


contract TuringMachine {
    // states
    static const State STATE_A = b'00';     // initial state
    static const State STATE_B = b'01';
    static const State STATE_C = b'02';
    static const State STATE_ACCEPT = b'03';
    
    // symbols
    static const Symbol BLANK = b'00';
    static const Symbol OPEN  = b'01';
    static const Symbol CLOSE = b'02';
    static const Symbol X     = b'03';

    static const bool LEFT = true;
    static const bool RIGHT = false;
    // number of rules in the transition function
    static const int N = 8;
    // transition function table
    static const TransitionFuncEntry[N] transitionFuncTable = [
        {{STATE_A, OPEN},   {STATE_A, OPEN, RIGHT}},
        {{STATE_A, X},      {STATE_A, X, RIGHT}},
        {{STATE_A, CLOSE},  {STATE_B, X, LEFT}},
        {{STATE_A, BLANK},  {STATE_C, BLANK, LEFT}},
        
        {{STATE_B, OPEN},   {STATE_A, X, RIGHT}},
        {{STATE_B, X},      {STATE_B, X, LEFT}},

        {{STATE_C, X},      {STATE_C, X, LEFT}},
        {{STATE_C, BLANK},  {STATE_ACCEPT, BLANK, RIGHT}}
    ];

    public function transit(SigHashPreimage txPreimage, int amount) {
        // read/deserialize contract state
        // ...
        
        // transition
        Symbol head = Util.getElemAt(s.tape, s.headPos);
        // look up in transition table
        bool found = false;
        loop (N) : i {
            if (!found) {
                auto entry = transitionFuncTable[i];
                if (entry.input == {s.curState, head}) {
                    auto output = entry.output;
                    // update state
                    s.curState = output.newState;
                    // write tape head
                    s.tape = Util.setElemAt(s.tape, s.headPos, output.write);
                    // move head
                    s.headPos += output.moveLeft ? -1 : 1;
                    // extend tape if out of bound
                    if (s.headPos < 0) {
                        // add 1 blank cell to the left
                        s.tape = BLANK + s.tape;
                        s.headPos = 0;
                    } else if (s.headPos >= len(s.tape))  {
                        // add 1 blank cell to the right
                        s.tape = s.tape + BLANK;
                    }

                    if (s.curState == STATE_ACCEPT) {
                        // accept
                        exit(true);
                    }

                    found = true;
                }
            }
        }
        // reject if no transition rule found
        require(found);

        // otherwise machine goes to the next step

        // write/serialize contract state
        // ...
    }
}
 
图灵机合约检查平衡括号

每次在Tx中调用公共函数transit() 时,机器前进一步。

  • Line3-6:定义状态,包括初始状态和接受状态
  • Line9-12:定义所有符号
  • Line19-30:将转换函数定义为表格
  • Line37:从头部读取符号
  • Line40-43:使用当前状态和磁头符号,我们在转移函数表中查找新状态(L46),写入磁带(L48),移动磁头(L50)。
  • Line51-59:最初磁带只包含输入字符串,例如“(())()()”。如果任何时候磁带用完,无论是在左侧 (L52) 还是右侧 (L56),都会添加一个空白单元格。这确保磁带可以任意长并且是无界的(但不是无限²)。

部署

我们已经将上面的图灵机部署到 BSV ,并在输入字符串“(())()()”上运行它。完整的执行如下所示。

在这里插入图片描述

接受 (())()() 的图灵机

这是第 0 步的图灵机:

在这里插入图片描述

你可以看到图灵机的快照被编码在这个交易中。

在这里插入图片描述

同样,这是第 3 步:

在这里插入图片描述

它的编码如下:

在这里插入图片描述

图灵完备证明

通过简单地更改状态、符号和转换函数,可以很简单地将上述图灵机合约改编为实现任何其他图灵机。因此,任何图灵机都可以在 BSV 上进行模拟,最终证明 BSV 根据定义是图灵完备的。 QED。

在可计算性理论中,如果一个数据操作规则系统可用于模拟任何图灵机,则称其为图灵完备的

致谢

感谢 Pasquale Valentin 帮助在 BSV 上部署合约。

[1] 我们通过在 BSV 上实施图灵竞争系统(例如康威的生命游戏规则 110),展示了 BSV 是图灵完备的。

[2] 无限与无界 作者:Craig Wright | 2021 年 9 月 14 日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sCrypt Web3应用开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值