我正试图解决这个问题。希望有人可以提供帮助。
想象一下,我们有一个名为Confusion
;
Program confusion
if(Virus-Finder(Confusion) = false) then
infect-executable
else
halt
End program confusion
显然这是伪代码,因此不会运行。
对于任何计划P
,我们都可以Virus-Finder(P)
运行,如果是病毒,结果将为True
,如果不是,则为False
。
infect-executable
是一个模块,它扫描内存中的可执行程序并复制那些可执行文件中的程序Confusion
。
我们没有关于Virus-Finder
实际做什么的指示,只是如果输入是病毒则返回True
,如果不是,则返回False
。
是否可以确定Virus-Finder
是否可以正确判断Confusion
是否是病毒?我最初的想法是不,它不能。但我无法理解这一逻辑。
答案 0 :(得分:0)
你所说的内容并不明确,但假设如下:
如果Virus-finder(p)
执行true
p
会返回infect-executable
在这种情况下,很容易证明Virus-finder(p)
不可判定,并且您的伪代码完全符合:
假设Virus-finder(p)
是可判定的,因此如果执行true
(resp。不执行)false
,它总是返回p
(resp。infect-executable
)。然后,您的伪代码显示Virus-finder
无法确定它是否是病毒。
正如Barmar所提到的,这种推理通常是一种证明某些问题不可判定性的方法,特别是停止问题(另一个众所周知的方法是减少其他不可判定的问题)。