我不知道如何在 Prolog 中编写,但根据参数树,从没有受到攻击的参数开始计算接地语义。
(希望它能指导@gusbro找到该线程的正确答案。)
为了解释它是如何计算的,我将介绍以下函数F(x) = {x defends y},其中:


- 如果一个被辩护的论点被另一个被辩护的论点攻击,那么被攻击的论点将从集合中删除。
- 依此类推,直到函数无法使用更多参数进行更多扩展,它达到了F中的最小固定点。
(示例 1)给定以下论证图,接地扩展是Eg = {c, e, f, a}。

所以,第一个函数开始于:

现在让我们考虑用循环计算接地扩展。
(例2)在下面给定的论证图中,e为b和d辩护,但b被d攻击,则不能包含在扎根语义中。从这一点开始,我们有一个无冲突的集合{e, d}。从{e, d}我们可以再次应用函数F({e, d}) = {e, d, a},其中d保护a免受b攻击。再次应用函数F({e, d, a}) = {e, d, a},表明{e, d, a}是F中的最小不动点。因此,{e, d, a} 是接地扩展。

(示例 3)在下面的论证树中,接地扩展
,因为没有没有被攻击的论点。否则,如果参数 e 没有攻击自己,则接地扩展应该是
,情况并非如此。

在最后一个示例中,循环上升到不同的首选扩展,您可以在其中使用 Martin Caminada 在其他地方定义的参数标签的等效概念作为支持。