prolog – 如何理解ASP中的否定失败?
假设我们有以下程序:
human(socrates). day(tomorrow). die(X) :- human(X). may_go_to_school(Y) :- day(Y),not holiday(Y). 如果我们运行clingo来获取程序的答案集,我们就会得到 Answer: 1 human(socrates) day(tomorrow) die(socrates) may_go_to_school(tomorrow) 我们知道地滚球将首先将所有变量实例化为常数,因此接地后的程序将是: human(socrates). day(tomorrow). die(socrates) :- human(socrates). may_go_to_school(tomorrow) :- day(tomorrow),not holiday(tomorrow). 我在book from Gelfond读到它给出了3条规则来获取答案集:
在规则中: may_go_to_school(tomorrow) :- day(tomorrow),not holiday(tomorrow). 我们得到了一个否定,因为失败不是假期(明天) 如本书所示:
然后根据规则1,如果你相信它的身体,相信一个规则的头,我是否应该相信身体不是假期(明天).既然我不相信任何假期(明天).也不是明天(明天). 根据答案,我应该相信?holiday(明天). >那么为什么我们需要这种否定作为失败? 解决方法
好吧,我们似乎不能.问题是我们无法实现逻辑否定.主要思想是Prolog为您的程序理论生成一个模型(Herbrand模型).当我们添加否定时,程序的语义会发生变化,因此Prolog可能无法使用sld分辨率找到模型.因此,作为失败的否定具有以下优点:我们可以得到否定(不完全是逻辑否定),并且仍然没有像经典否定那样存在程序语义问题. 你可以看看我的相关问题:Logical Negation in Prolog.这个问题与这个问题并没有完全相同,但@ j4n bur53在他的回答中描述了为什么我们不能有逻辑否定. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 使用.NET FormsAuthentication和持久性Cookie修
- asp.net – 定期向用户发送电子邮件以进行密码更新
- asp.net – 如何修复“System.Security.Permissions.Securi
- asp.net-mvc – 在ASP.NET MVC中以HTML格式呈现RDLC报告
- ASP.Net会话状态SQL Server用户权限
- asp.net-mvc – 如何在ASP.NET MVC 2 RC中编写自定义客户端
- asp.net – Response.Flush()仅适用于Firefox
- asp.net – HttpContext.Current如何工作?
- asp.net – 如何获取Page.ClientScript.RegisterClientScri
- 在ASP.Net MVC中将JSON转换为C#类
- asp.net-mvc – ASP.NET MVC中的本地化
- asp.net-mvc – 尝试使用Moq模拟HtmlHelper时抛出
- asp.net-core – ASP.NET Core忽略ASPNET_ENV和H
- asp.net-mvc – ASP.NET MVC – 用于ICollection
- 使用ASP.NET共享托管的十大陷阱
- 动手造轮子:实现简单的 EventQueue
- asp.net – 谁在生产应用程序中实际使用DataGrid
- asp.net-mvc – 使用401发送消息:Asp.net Web-a
- 如何在非ASP.NET应用程序中使用ASP.NET Cache对象
- 是否可以实现自我更新的ASP.NET Web应用程序?