stack - 基于堆栈的语言的图灵完备性证明

标签 stack programming-languages turing-complete

我正在编写一种基于堆栈操作的笑话语言。我试图找到使其图灵完备所需的最少指令量,但不知道基于一个堆栈的语言是否可以图灵完备。这些说明足够吗?

IF (top of stack is non-zero)
WHILE (top of stack is non-zero)
PUSH [n-bit integer (where n is a natural number)]
POP
SWAP (top two values)
DUPLICATE (top value)
PLUS (adds top two values, pops them, and pushes result)

我已经查看了几个问题和答案(例如 this onethis one ),并相信上述说明已经足够了。我对么?或者我是否需要其他东西,例如函数调用、变量或另一个堆栈?

如果这些说明足够了,其中有哪些是多余的吗?

<小时/> 编辑:通过添加ROTATE命令(将堆栈的前三个值从A B C更改为B C A)并消除了DUPLICATEPLUSSWAP命令,可以实现Rule 110 cellular automaton的3个字符版本。 。这足以证明图灵完备性吗?

如果有一个没有变量或函数的图灵完整单栈语言的示例,那就太好了。

最佳答案

如果您想证明您的语言是图灵完备的,那么您应该查看 Math StackExchange 网站上的此问答。

一种方法是看看您是否可以使用您的语言编写一个可以模拟任意图灵机的程序。如果可以,那就证明了图灵完备性。

<小时/>

如果您想知道这些指令中的任何一个是否是多余的,请查看是否可以简化您的 TM 模拟器以不使用其中一个指令。

但是如果您想知道是否可以使用更小的图灵完整语言,请查看 SKI Combinator Calculus 。可以说,存在三个指令:SKI 组合器。而且 I 显然是多余的。

关于stack - 基于堆栈的语言的图灵完备性证明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44866577/

相关文章:

programming-languages - 有人能用最简单的方式解释规则 110 吗?

casting - 将堆栈对象编号转换为 int 时遇到问题 (Java)

java - 使用链表代码实现Queue返回空指针异常

compiler-construction - 编译器可以编译没有扩展名的代码吗?

c++ - 如何使用指针在 C 中重用数组变量

regex - Perl 正则表达式图灵完备吗?

java - 访问堆栈中的元素的时间复杂度是多少?或者甚至有可能做到吗?

python - 为什么 "stack smashing detected"一旦 ZeroMQ C++ 客户端针对 python 服务器运行?

language-agnostic - 证明类型声明语法的语法歧义

sql - 图灵完备的图查询语言