什么是Herbrand宇宙,Herbrand Base和Herbrand二叉树模型:
binary_tree(empty).
binary_tree(tree(Left,Element,Right)) :-
binary_tree(Left),
binary_tree(Right).
答案 0 :(得分:6)
Herbrand宇宙是给定签名的基础术语。很多Prolog 系统有一个谓词地/ 1,您可以用它来检查一个术语是否存在 实际上是地面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模型。
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).
然后您的二叉树定义将导致以下重复 关系:
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,即 上述递归关系的最小固定点。好像 没有说什么。
再见