Herbrand宇宙,Herbrand Base和Herbrand二叉树模型(序言)

Ali*_*lov 4 prolog

什么是Herbrand宇宙,Herbrand Base和Herbrand二叉树模型:

binary_tree(empty). 
binary_tree(tree(Left,Element,Right)) :- 
     binary_tree(Left), 
     binary_tree(Right). 
Run Code Online (Sandbox Code Playgroud)

Tra*_*ers 6

Herbrand宇宙是给定签名的基础术语.许多Prolog系统都有一个谓词地/ 1,你可以用它来检查一个术语是否真正被研磨.ground/1的定义是它不包含变量:

?- ground(empty).
Yes
?- ground(tree(X,Y,Z)).
No
Run Code Online (Sandbox Code Playgroud)

Herbrand基础是给定签名的基本公式.主要公式是谓词或平等.您还可以使用ground/1来检查主要公式是否为地面:

?- ground(a = X).
No
?- ground(a = b).
Yes
?- ground(binary_tree(X)).
No
?- ground(binary_tree(tree(empty,n,empty))).
Yes
Run Code Online (Sandbox Code Playgroud)

Herbrand模型是宇宙是Herbrand宇宙的模型.作为图表,Herbrand模型是Herbrand基础的子集.一个理论可能没有,一个或多个Herbrand模型.

Horn Clauses总是有一个Herbrand模型,特别是Herbrand基础本身的Herbrand模型,它总是一个模型.Horn Clauses与Clark Equational Theory一起拥有独特的Herbrand模型.这是Herbrand程序运营商的固定点.程序操作员的某些属性允许声明可以在阶段omega达到固定点.

但是使用Herbrand模型很笨拙,因为它们没有排序.许多排序的签名和相应的地面模型更方便.为了简单起见并避免在本例中有许多排序逻辑,我们可以假设你的程序读取,即树元素是peano数:

binary_tree(empty). 
binary_tree(tree(Left,Element,Right)) :- 
    binary_tree(Left),
    tree_element(Element), 
    binary_tree(Right).
tree_element(n).
tree_element(s(X)) :-
    tree_element(X).
Run Code Online (Sandbox Code Playgroud)

然后您的二叉树定义将导致以下重现关系:

T_0 = {}
T_n+1 = {binary_tree(empty)} u {binary_tree(tree(s,e,t)) | 
       binary_tree(s) in T_n, 
       tree_element(e) in T_n, 
       binary_tree(t) in T_n } u 
        {tree_element(n)} u {tree_element(s(e)) |
       tree_element(e) in T_n} u T_n
Run Code Online (Sandbox Code Playgroud)

然后,唯一的最小Herbrand模型将是T = union_n T_n,其是上述递归关系的最小固定点.看起来什么也没说.

再见