We prove that the occur-check is not needed for a certain definite clause logic program, independently from the selection rule. First we prove that the program is occur-check free. Then we consider a more general class of queries, under which the program is not occur-check free; however we show that it will be correctly executed under Prolog without occur-check. The main result of this report states that the occur-check may be skipped for the cases in which a single run of a standard nondeterministic unification algorithm does not fail due to the occur-check. The usual approaches are based on the notion of NSTO (not subject to occur-check), which considers all the runs. To formulate the result, it was necessary to introduce an abstraction of a "unification" algorithm without the occur-check.
翻译:我们证明,与选择规则无关的某个明确的条款逻辑程序不需要进行一次检查。 首先,我们证明,这个程序是免费的。 然后,我们考虑更一般性的询问类别,在这个类别下,这个程序不是免费的; 但是,我们表明,它将在Prolog下正确执行而无需进行检查。 这份报告的主要结果指出,如果标准非确定性统一算法的单一运行不会因一次检查而失败, 一次检查可能会被跳过。 通常的做法是基于NSTO的概念( 不可进行检查), 后者考虑所有运行。 要制定结果, 有必要引入“ 统一” 算法的抽象化, 而无需进行检查 。