Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 你如何证明一个简单无意义的代码是否是可计算的?_C_Computation Theory_Formal Verification_Formal Methods_Computability - Fatal编程技术网

C 你如何证明一个简单无意义的代码是否是可计算的?

C 你如何证明一个简单无意义的代码是否是可计算的?,c,computation-theory,formal-verification,formal-methods,computability,C,Computation Theory,Formal Verification,Formal Methods,Computability,可计算问题的特征是: 完整意味着它涵盖了所有情况 机械的意味着它是精确的 确定性意味着如果输入相同的输入,将提供相同的输出 如果我错了,请纠正我,我通过研究发现,除了确定性之外,我并不完全知道它的实际含义 因此,我试图证明一个简单的代码,例如: inti=0; 做{ int j=0; 做{ printf(“Hello\n”); j++; }而(j

可计算问题的特征是:

  • 完整意味着它涵盖了所有情况
  • 机械的意味着它是精确的
  • 确定性意味着如果输入相同的输入,将提供相同的输出
如果我错了,请纠正我,我通过研究发现,除了确定性之外,我并不完全知道它的实际含义

因此,我试图证明一个简单的代码,例如:

inti=0;
做{
int j=0;
做{
printf(“Hello\n”);
j++;
}而(j
是可计算的

我知道如何表现它是确定性的,因为它相当明显,但我不确定如何表现它是机械的或完全的

Complete特性,据我所知,更多的是“代码是否有任何方式无法执行或作为错误返回?”例如打开文本文件,文件可能不存在,因为输入了错误的文件名或输入了错误的位置,等等

但是对于上面的代码片段,我应该如何证明它是完整的

至于机械的
“1+1是否等于2而不是3?”


同样,对于上面的代码片段,我如何证明它是精确的,因为代码本身没有解决任何问题,它只是根据n值打印“hello”?在这个例子中,n^2+n个“你好”的数字。你把一些事情搞混了

首先,您提供了一段代码,并询问如何证明它是可计算的。但是这没有任何意义——一段代码不能是可计算的或不可计算的

(数学)集合可以是可计算的,也可以是不可计算的。基于这一点,其他一切也是一个集合:例如语言(一组字符串)、决策问题(一组可接受的输入)或函数(一组键值对)

其次,你提到的“特征”并没有定义可计算的问题。我不知道你从哪里得到它们,但它们充其量只是对解决可计算问题的算法某些方面的非正式描述。所以我认为你们谈论的不是可计算的问题,而是算法。但是考虑到你的特点是非正式的,你无法证明它们

因此,这里有一些稍微更精确(但仍然不是正式)的陈述可能会有所帮助:

  • 一个问题是可计算的,如果存在一个算法来解决它
  • 一个算法解决了一个问题
    • 它可以在标准计算模型(例如图灵机器或标准编程语言)内表示
    • 就问题而言,这是合理的:算法产生的任何答案都属于问题的答案集
    • 关于问题,它是完整的:问题答案集的任何元素都是由算法产生的
    • 算法在所有输入上停止

现在,这些特征足够精确,你可以用它们来证明一个问题是可计算的,或者一个算法解决了一个特定的问题。

你混淆了一些东西

首先,您提供了一段代码,并询问如何证明它是可计算的。但是这没有任何意义——一段代码不能是可计算的或不可计算的

(数学)集合可以是可计算的,也可以是不可计算的。基于这一点,其他一切也是一个集合:例如语言(一组字符串)、决策问题(一组可接受的输入)或函数(一组键值对)

其次,你提到的“特征”并没有定义可计算的问题。我不知道你从哪里得到它们,但它们充其量只是对解决可计算问题的算法某些方面的非正式描述。所以我认为你们谈论的不是可计算的问题,而是算法。但是考虑到你的特点是非正式的,你无法证明它们

因此,这里有一些稍微更精确(但仍然不是正式)的陈述可能会有所帮助:

  • 一个问题是可计算的,如果存在一个算法来解决它
  • 一个算法解决了一个问题
    • 它可以在标准计算模型(例如图灵机器或标准编程语言)内表示
    • 就问题而言,这是合理的:算法产生的任何答案都属于问题的答案集
    • 关于问题,它是完整的:问题答案集的任何元素都是由算法产生的
    • 算法在所有输入上停止

现在,这些特征足够精确,您可以实际使用它们来证明问题是可计算的,或者算法解决了特定的问题。

这在外部似乎是毫无意义的实践,这可能就是您实际寻找的。您执行了大约n^2个printf调用。如果n很大,这很可能会给您带来问题。如果n是马铃薯,代码将无法编译,如果n是浮点,有时很难提前知道实际会发生多少次迭代。如果n是无符号或long(long),则代码有可能无限循环。那么它实际上是正确的吗?此外,“这是相当明显的”并不是一种被广泛接受的证明格式。搜索您使用的术语并不会带来任何太有用的东西,您可能需要按照定义(和/或解释)进行操作我不明白标题中的问题:为什么有些代码在没有意义的同时又是可计算的