BSV 上的图灵机

Posted freedomhero

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 步的图灵机:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oj8CR4DR-1634546788844)(./1__YgTJBZ-3YtWG92I8XAPfA.png)]

同样,这是第 3 步:

它的编码如下:

图灵完备证明

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

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

致谢

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

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

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

以上是关于BSV 上的图灵机的主要内容,如果未能解决你的问题,请参考以下文章

BSV 上的图灵完备的“规则110”

BSV上的委托合约

BSV资讯感应合约大幅推进BSV区块链上的NFT和智能合约方案

BSV 上的 Taproot

BSV 上的 Schnorr 签名

BSV 上的 Graftroot