代理、行动与道义规范的函数式程序
1 引言
本文将介绍一个用 Haskell 实现的抽象合约计算器(Abstract Contract Calculator,ACC)。Haskell 是一种函数式编程语言,ACC 主要用于处理应用于复杂抽象行动的道义概念,如禁止、许可和义务。
例如,如果规定比尔有义务离开房间,当他没有这么做时,就违反了这一义务,可能会产生相应的后果。再如,比尔有义务先离开房间,然后下楼,若他只完成了前一个动作而未完成后一个,同样违反了义务。该实现的目标就是对这类推理模式进行抽象建模。
不过,本文的讨论范围存在一定限制。一方面,行动和道义概念在相关逻辑文献中已有广泛讨论,但因篇幅所限,仅介绍对本文有用的内容。另一方面,虽然使用直观概念来指导实现,但实现主要针对抽象行动。因为抽象行动能被完全定义,便于明确函数和道义概念的应用方式,而直观行动难以做到这一点,且会分散对核心问题的关注。
下面将先介绍驱动实现的关键问题,再概述实现的概念及相关 Haskell 代码片段。
2 驱动问题
实现主要受四个相互关联的问题驱动:
2.1 可违反性
可违反性是道义规范的核心概念。以比尔有义务离开房间为例,若他未履行该义务,就需要表示他违反了义务,如“比尔违反了离开房间的义务”这一命题。违反义务可能会引发相应后果,这样就能对不良行为进行标记和推理,而非直接排除。
在标准道义逻辑或动态道义逻辑中,通常用一个特定命题标记道义规范的违反,但这意味着所有违反情况都相同,显然单一的违反标记是不够的。不同人的不同义务违反可能导致不同后果,因此违反标记应从主体、道义规范、输