Prolog 逻辑编程-只有一个函数符号的子集是图灵-完全的吗?

Prolog 逻辑编程-只有一个函数符号的子集是图灵-完全的吗?,prolog,subset,logic-programming,turing-complete,Prolog,Subset,Logic Programming,Turing Complete,如果我有一个只包含一个函数符号的逻辑编程子集,我能做所有的事情吗 我想我不能,但我一点也不确定。 如果一种编程语言是图灵完全语言,它可以做用户想要做的任何事情。我被教导,这意味着它必须能够执行if..then..else命令,递归和自然数应该被定义 任何帮助和意见将不胜感激 在经典谓词逻辑中,公式级和术语级是有区别的。由于n元函数可以表示为(n+1)元谓词,因此仅限制函数符号的数量不会降低表达能力 在prolog中,公式和术语级别之间没有区别。您可以选择一个n元符号p,并尝试通过p的嵌套对图灵机

如果我有一个只包含一个函数符号的逻辑编程子集,我能做所有的事情吗

我想我不能,但我一点也不确定。 如果一种编程语言是图灵完全语言,它可以做用户想要做的任何事情。我被教导,这意味着它必须能够执行if..then..else命令,递归和自然数应该被定义


任何帮助和意见将不胜感激

在经典谓词逻辑中,公式级和术语级是有区别的。由于n元函数可以表示为(n+1)元谓词,因此仅限制函数符号的数量不会降低表达能力

在prolog中,公式和术语级别之间没有区别。您可以选择一个n元符号p,并尝试通过p的嵌套对图灵机或等效概念(例如递归函数)进行编码

根据我的直觉,我认为这是不可能的:你基本上可以用树叶来描述n元树,但你可以统一这些树。这意味着每个规则头都将在递归派生期间匹配,因此您无法表示任何大小写区别。不过,这只是一个非正式的论点,不是证据


另外,您可能还对一元逻辑感兴趣,因为它只允许一元谓词。一阶逻辑的这个片段是可判定的。

:如果你把nand或nor作为一个二进制函数,你应该能够计算任何图灵可计算函数。所以在你看来,如果这个函数符号是关于nand或nor的,我的子集是图灵完备语言?@user1666959:从能够表达任何布尔函数到图灵完备,这是一个很大的延伸。你链接的文章没有提到nand(或nor)的图灵完整性。@Nancy:逻辑编程是关于谓词的,至少在“纯”Prolog中是这样。目前还不清楚函数符号是如何进入语言的,除了作为扩展。例如,算术运算符要求
is/2
强制求值;否则它们只是函子。@南希:我也有一个类似于hardmath所表达的担忧-IIRC一阶谓词逻辑将“函数”从N个参数引入真值-我们在Prolog中称这些“函子”,我们不能只有一个,因为它们带有标识。谢谢你的回答。我没有考虑过树,我认为你有一个观点。作为补充:这是关于赫伯兰宇宙的某种隐式推理——在一个符号的情况下,术语树中每个节点的标签都是一样的。