有没有人看过SATCHMO定理证明器的一个很好的开源Prolog实现?

时间:2012-02-08 05:15:31

标签: prolog theorem-proving

我已经看过很多关于SATCHMO定理证明的论文,谈论Prolog的实现。但到目前为止,我发现的唯一源代码实现是在一本书中,它实际上是有限的,仅仅是为了举例说明如何评估和解雇规则。有没有人在Prolog中看到过SATCHMO的开源实现?

注意,我不是指Django的Python语言工具Satchmo,这就是为什么我没有在标签中包含Satchmo的原因,因为Stack Overflow显示为该标签的主要定义。

2 个答案:

答案 0 :(得分:5)

关于Satchmo的第一篇论文(也在上面提到的“主题变奏曲”中列出)是

  

Rainer Manthey和FrançoisBry。 SATCHMO:在Prolog中实现了一个定理证明。在第9届国际自动演绎会议论文集,第415-434页。 Springer-Verlag,1988。

本文介绍了Satchmo的几个Prolog实现,并讨论了它们的优点。还给出了一些例子。这是一个Satchmo版本,我用作Attempto Controlled English的推理者RACE的起点:

:- op(1200, xfx, '--->').
:- unknown(_, fail).

satisfiable :-
  setof(Clause, violated_instance(Clause), Clauses),
  !,
  satisfy_all(Clauses),
  satisfiable.
satisfiable.

violated_instance((B ---> H)) :-
  (B ---> H),
  B,
  \+ H.

satisfy_all([]).

satisfy_all([(_B ---> H) | RestClauses]) :-
  H,
  !,
  satisfy_all(RestClauses).
satisfy_all([(_B ---> H) | RestClauses]) :-
  satisfy(H),
  satisfy_all(RestClauses).

/*
satisfy((A,B)) :-
  !,
  satisfy(A),
  satisfy(B).  
*/

satisfy((A;B)) :-
  !,
  (satisfy(A) ; satisfy(B)).  

satisfy(Atom) :-
  \+ Atom = untrue,
  (
    predicate_property(Atom, built_in)
    ->
    call(Atom)
  ;
    assume(Atom)
  ).

assume(Atom) :-
%  nl, write(['Asserting  ': Atom]),
  asserta(Atom).

assume(Atom) :-
%  nl, write(['Retracting ': Atom]),
  retract(Atom),
  !,
  fail.         

答案 1 :(得分:4)

我不知何故知道,有一天,当我把我为硕士论文收集的所有论文放到一个月前的垃圾箱里时,我会后悔的。由于我的论文是关于用限制来扩展SATCHMO,因此有一些关于SATCHMO的论文显示了不同的实现......

无论如何,一个好的开始点就在这里:Software Collection of the Lehr- und Forschungseinheit für Programmier- und Modellierungssprachen, LMU Munich。其中一位教授Francois Bry是SATCHMO的开发人员之一,他的部门在向不同方向扩展它方面做了大量工作。看看编译SATCHMO。 PMS研究所的人员应该能够澄清您是否可以将代码用于非学术性工作。对于学术工作,应该没问题。

有关SATCHMO所有事物的概述(虽然已经有几年了),您可以使用此参考书目:Variations on a Theme