23、定位和解释非终止逻辑程序的原因

定位和解释非终止逻辑程序的原因

引言

理解逻辑程序的终止行为相当困难,这是因为其执行机制复杂。两种相互交织的控制流(AND 和 OR)会产生复杂的执行跟踪,难以据此理解程序终止或非终止的真正原因。常用的用于调试的过程盒模型会产生大量详细跟踪信息,但与实际终止行为并无关联。同样,证明树的概念也无法简洁地解释非终止现象。

当前逻辑程序终止分析的研究主要集中在构建终止证明上。要么验证给定查询类以保证终止,要么更普遍地推断此类查询。但在这两种情况下,该类查询只是充分终止条件,且通常小于实际终止查询的类别,并且这个类别是用与逻辑程序不同的形式化方法描述的,对于特定查询不终止的原因并不直观。

本文提出了一种互补的方法,利用基于失败切片(failure - slices)概念的新切片技术,能够定位和解释非终止的原因。失败切片能揭示程序中可能导致非终止的部分,在某些条件下,还能证明非终止性。

逻辑程序的终止概念

与大多数其他编程范式不同,逻辑程序有两种不同的终止概念:存在性终止和普遍终止。
- 存在性终止 :如果能找到一个(或没有)解决方案,则查询存在性终止。这种终止容易观察,但难以进行推理。
- 普遍终止 :要求完整的 SLD 树是有限的。虽然难以观察,但在形式上更容易处理,并且对程序开发过程中常见的程序更改更具鲁棒性。普遍终止仅对计算规则敏感,而对子句选择不敏感。大多数终止研究都集中在普遍终止上,本文也将考虑使用最左计算规则的普遍终止,就像 Prolog 程序那样。

示例说明

以下是一个包含错误数据库的示例,导

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值