高阶语义在 λProlog 中给你什么?
What does higher-order semantics give you in λProlog?
λProlog is a higher-order dialect of Prolog. On the other hand, HiLog 据说使用具有一阶模型理论的高阶句法。换句话说,它们都具有高阶语法,但只有λProlog具有高阶语义。
高阶语义在 λProlog 中为您提供了什么(除了仅使用高阶语法已经获得的功能之外)?什么是 λProlog 中说明这些收益的简单示例?
这是一个难题。
HiLog 和 Lambda-Prolog 采取的让 Prolog “做更多”的两种想法非常不同,因此一个程序在另一个中不一定有意义。
也不是说 Lambda-Prolog 不是真正的“方言”,它是不同的“Prolog”,就像 ASP 是不同的“Prolog”一样。
现在,找到语义不同的程序意味着首先要找到可比较的程序,所以从程序员的角度来看“意图做同样的事情”(除了“不重要的语法细节”),所以必须限制自己到两种语言的共同子集。
另一方面,即使 Lamba Prolog 的证明过程不是(或者更好的是,不映射到)“解析反驳”,整个想法是捕捉逻辑推导的直觉。在HiLog中应该也是如此。
因此,“根本不同”意味着在一种或另一种情况下(可能在两种情况下)“从根本上打破了程序员直觉的期望”。
我想这是重读论文的好机会。
很有可能,λProlog 比 HiLog 实现了更多。在我看来,HiLog 似乎是我们现在或多或少在每个 Prolog 系统中看到的东西,一些 call/n 和一些库(lambda)。
call/n 和库 (lambda) 可以进行一种 beta 缩减。但是在 λProlog 中有一个规则 AUGMENT 和一个规则 GENERIC,没有被 beta-reduction 覆盖。这增强了底层逻辑:
G, A |- B
------------ (AUGMENT)
G |- A -: B
G |- B(c)
------------- (GENERIC) c ∉ G
G |- ∀xB(x)
AUGMENT 规则的一个典型例子是假设推理。这回答了“假设”问题。一些演绎数据库,甚至是在普通 Prolog 之上实现的,也可以做到这一点。这里有一个简单的例子:
grade(S) :-
take(S, german),
take(S, french).
grade(S) :-
take(S, german),
take(S, italian).
take(hans, french).
以上规则表示何时有人可以评分。我们也有一些关于“hans”的信息。我们现在可以直接在顶层提出假设性问题,而无需修改事实数据库。
?- take(hans, german) -: grade(hans).
Yes
?- take(hans, italian) -: grade(hans).
No
我想也可以为更高阶的统一提供理由。 λProlog 书包含一些高阶统一示例,这些示例可能在 HiLog 中也不起作用。
另请参阅:
λProlog 概述
米勒和纳达瑟 - 1988
https://www.researchgate.net/publication/220986335
假设推理的逻辑
邦纳 - 1988
http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.56.1451
λProlog is a higher-order dialect of Prolog. On the other hand, HiLog 据说使用具有一阶模型理论的高阶句法。换句话说,它们都具有高阶语法,但只有λProlog具有高阶语义。
高阶语义在 λProlog 中为您提供了什么(除了仅使用高阶语法已经获得的功能之外)?什么是 λProlog 中说明这些收益的简单示例?
这是一个难题。
HiLog 和 Lambda-Prolog 采取的让 Prolog “做更多”的两种想法非常不同,因此一个程序在另一个中不一定有意义。
也不是说 Lambda-Prolog 不是真正的“方言”,它是不同的“Prolog”,就像 ASP 是不同的“Prolog”一样。
现在,找到语义不同的程序意味着首先要找到可比较的程序,所以从程序员的角度来看“意图做同样的事情”(除了“不重要的语法细节”),所以必须限制自己到两种语言的共同子集。
另一方面,即使 Lamba Prolog 的证明过程不是(或者更好的是,不映射到)“解析反驳”,整个想法是捕捉逻辑推导的直觉。在HiLog中应该也是如此。
因此,“根本不同”意味着在一种或另一种情况下(可能在两种情况下)“从根本上打破了程序员直觉的期望”。
我想这是重读论文的好机会。
很有可能,λProlog 比 HiLog 实现了更多。在我看来,HiLog 似乎是我们现在或多或少在每个 Prolog 系统中看到的东西,一些 call/n 和一些库(lambda)。
call/n 和库 (lambda) 可以进行一种 beta 缩减。但是在 λProlog 中有一个规则 AUGMENT 和一个规则 GENERIC,没有被 beta-reduction 覆盖。这增强了底层逻辑:
G, A |- B
------------ (AUGMENT)
G |- A -: B
G |- B(c)
------------- (GENERIC) c ∉ G
G |- ∀xB(x)
AUGMENT 规则的一个典型例子是假设推理。这回答了“假设”问题。一些演绎数据库,甚至是在普通 Prolog 之上实现的,也可以做到这一点。这里有一个简单的例子:
grade(S) :-
take(S, german),
take(S, french).
grade(S) :-
take(S, german),
take(S, italian).
take(hans, french).
以上规则表示何时有人可以评分。我们也有一些关于“hans”的信息。我们现在可以直接在顶层提出假设性问题,而无需修改事实数据库。
?- take(hans, german) -: grade(hans).
Yes
?- take(hans, italian) -: grade(hans).
No
我想也可以为更高阶的统一提供理由。 λProlog 书包含一些高阶统一示例,这些示例可能在 HiLog 中也不起作用。
另请参阅:
λProlog 概述
米勒和纳达瑟 - 1988
https://www.researchgate.net/publication/220986335
假设推理的逻辑
邦纳 - 1988
http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.56.1451