4

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

binary_tree(empty). 
binary_tree(tree(Left,Element,Right)) :- 
     binary_tree(Left), 
     binary_tree(Right). 
4

1 回答 1

7

Herbrand 宇宙是给定签名的基本术语。许多 Prolog 系统都有一个谓词 ground/1,您可以使用它来检查一个术语是否实际上是 ground。ground/1 的定义是它不包含变量:

?- ground(empty).
Yes
?- ground(tree(X,Y,Z)).
No

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

?- ground(a = X).
No
?- ground(a = b).
Yes
?- ground(binary_tree(X)).
No
?- ground(binary_tree(tree(empty,n,empty))).
Yes

Herbrand 模型是宇宙是 Herbrand 宇宙的模型。Herbrand 模型从图表的角度来看是 Herbrand 基础的子集。一个理论可能没有、一个或多个 Herbrand 模型。

喇叭子句总是有一个 Herbrand 模型,特别是作为 Herbrand 基础的完整 Herbrand 模型,始终是一个模型。喇叭子句和克拉克方程理论也有一个独特的最小 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).

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

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

唯一的最小 Herbrand 模型将是 T = union_n T_n,这是上述递归关系的最小固定点。好像什么都没说。

于 2012-07-16T19:12:59.457 回答