Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
Prolog编程语言与证明树_Prolog_Prolog Metainterpreter - Fatal编程技术网

Prolog编程语言与证明树

Prolog编程语言与证明树,prolog,prolog-metainterpreter,Prolog,Prolog Metainterpreter,回想一下这个证明 solve(true, true). solve([], []). solve([A|B],[ProofA|ProofB]) :- solve(A,ProofA), solve(B, ProofB). solve(A, node(A,Proof)) :- rule(A,B), solve(B,Proof). 假设解释器的第三条规则已更改,而解释器的其他规则不变,如下所示: % Signature: solve(Exp, Proof)/2 solve(

回想一下这个证明

solve(true, true).
solve([], []). 
solve([A|B],[ProofA|ProofB]) :-
   solve(A,ProofA),
   solve(B, ProofB).
solve(A, node(A,Proof)) :-
   rule(A,B),
   solve(B,Proof).
假设解释器的第三条规则已更改,而解释器的其他规则不变,如下所示:

% Signature: solve(Exp, Proof)/2 solve(true, true). 
solve([], []).                                      
solve([A|B], [ProofA|ProofB]) :-
   solve(B, ProofB),   %3
   solve(A, ProofA). 
solve(A, node(A, Proof)) :-
   rule(A, B),
   solve(B, Proof). 
考虑将在两个版本中为某些查询创建的证明树。任何变量替换只能在一个版本中实现吗?解释一下。真叶能移到最左边的无限分支的另一边吗?解释一下。在这两个问题中,如果答案是肯定的,请举例说明。这将如何影响证据

请帮帮我!tx

(我对你的元译员有很多保留意见。但首先我会回答你的问题)

在这个元解释器中,您正在具体化(~实现)连接。您可以使用Prolog的连接来实现它。现在你有两个不同的版本来解释连词。一旦你说先证明A,然后证明B,然后你说相反的话

想到

p :- p, false.

第二个版本将产生有限失效分支,而第一个版本将产生无限失效分支。这就是使用一个或另一个元解释器的效果。请注意,通过解释元解释器本身,这个“错误”可能会再次得到缓解

另请参阅,这可能会澄清一些概念

还有其他实现连接的方法(通过二值化);这样,下一级的元解释器将无法再进行补偿



最后是对你的元解释器风格的评论:你在混合列表和其他术语。事实上,
[true | true]
将是真的。尽量避免这样的陈述。要么坚持传统的“香草”表示法,它在Prolog规则的语法树上运行。也就是说,连词表示为
(',')/2
。或者坚持列表。但不要混合使用列表和其他表示形式

问题不是问具体的编程问题。整个过程听起来像是家庭作业。
p :- false, p.