prolog - 在哪里可以找到有关 Prolog 中的证明控制的资源/信息
问题描述
作为作业的一部分,我被要求使用 Prolog 检查自然演绎中的证明是正确还是不正确。包含证明的名为“valid.txt”的示例文本文件如下所示:
[imp(p, q), p].
q.
[
[1, imp(p,q), premise],
[2, p, premise],
[3, q, impel(2,1)]
].```
这将是我的程序的输入,它应该对正确的证明(如上)响应“是”或“真”,对不正确的证明响应“否”或“假”。
我不知道从哪里开始。所以我的问题是,是否有一些资源可以让我了解 prolog 中的验证/控制证明。我在 prolog 中有少量编程经验,但我觉得我需要一些关于如何构建可以验证证明的程序的具体说明。我一直在寻找教科书和网站,但找不到任何可以帮助我的东西。
最后,我的程序可能类似于这样:检查包含假设的逻辑序列是否有效
因为这是我第一次在这里提问,如果我错过了什么,我深表歉意。
解决方案
在某种程度上,我完全理解近距离投票、评论等,但另一方面,我完全可以理解你对故事的看法。
意识到我确实认为你的问题只是在此处允许的错误方面,但并没有太多,以至于其他新人不会做同样的事情。
此处不允许提出图书推荐问题。通常一本书推荐会被认为是主观的,但是当只有一两本书符合要求时,怎么可能是主观的。
John Harrison ( WorldCat ) ( Amazon ) ( Webpage )的“实用逻辑和自动推理手册”
注意:本书使用编程语言 OCaml,但实现了Prolog的一个子集。本书还使用了特定领域的语言并实现了解析器。
这本书显然超出了您的需要,因此您无需获取或阅读整本书。
您可能只需要在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)>>;;
推荐阅读
- sharepoint-online - 如何增加列表 WebPart 中 SharePoint Online 列表列的宽度
- java - 参数设置问题
- python - Anaconda Navigator 在启动 Jupyter 时显示错误
- sql - 将光标替换为while循环但不起作用
- ios - iOS 14 Google Cardboard 视图已损坏
- google-sheets - GS 根据下一条记录值查询记录
- linux - 如何将变量从一个 ksh 脚本传递到 Linux 中的另一个 ksh 脚本
- flutter - 有没有办法减少 Flutter 中 NavigationRail 中每个元素的高度?
- python - PuLP(线性规划)LpMaximize 如何选择最优解?
- microservices - 在 EventSourcing 中应用业务逻辑的位置