作为作业的一部分,我被要求使用Prolog检查自然推论的证明是正确还是不正确。包含证明的示例文本文件“ valid.txt”如下所示:
[imp(p, q), p].
q.
[
[1, imp(p,q), premise],
[2, p, premise],
[3, q, impel(2,1)]
].```
这将是我程序中的输入,对正确的证明(上面是)应为“是”或“ true”,对不正确的证明应为“ no”或“ false”。
我不知道从哪里开始。因此,我的问题是,是否有一些资源可以使我了解有关在序言中验证/控制证明的信息。我在序言中有少量编程经验,但是我觉得我需要一些有关如何构建可以验证证明的程序的特定说明。我一直在寻找教科书和网站,但找不到任何可以帮助我的东西。
最后,我的程序可能类似于以下内容:Checking whether or not a logical sequence that has assumptions in it is valid
因为这是我第一次在这里提问,如果我错过了什么,我深表歉意。
答案 0 :(得分:0)
在某种程度上,我完全理解亲密的投票,评论等,但另一方面,我可以完全理解您的故事。
认识到我确实只是在允许的内容的错误方面看待您的问题,但并没有那么多,以至于其他新来者也不会因为做同样的事情而逃脱。
此处不允许推荐书。通常,一本书的推荐被认为是主观的,但是当只有一两本书满足要求时,它怎么会是主观的。
John Harrison(WorldCat)(Amazon)(Webpage)的“《实用逻辑和自动推理手册》
注意:本书使用OCaml编程语言,但实现了Prolog的子集。本书还使用特定领域的语言并实现了parser。
这本书显然超出了您的需要,因此您无需阅读或阅读整本书。
您可能只需要prop.ml
中的此内容let rec eval fm v =
match fm with
False -> false
| True -> true
| Atom(x) -> v(x)
| Not(p) -> not(eval p v)
| And(p,q) -> (eval p v) & (eval q v)
| Or(p,q) -> (eval p v) or (eval q v)
| Imp(p,q) -> not(eval p v) or (eval q v)
| Iff(p,q) -> (eval p v) = (eval q v);;
查询示例
tautology <<p \/ q ==> q \/ (p <=> q)>>;;
本书更详细地介绍了功能更丰富的版本HOL-Light的源代码,该版本是HOL的简单版本。
这些链接应该使您处于工作应用的平衡中,所有这些都属于automated theorem proves的更广泛主题,与proof assistants不同。