查看原文
其他

【英】罗伯特·A.科瓦尔斯基 著 杨安卓等 译:作为逻辑程序的立法 ||《地方立法研究》

地方立法研究 地方立法研究编辑部
2024-09-04

作为逻辑程序的立法


 作  者 [英]罗伯特·A.科瓦尔斯基(英国帝国理工学院计算机系教授)

 译  者 :杨安卓(华中科技大学法学院讲师),赵舒婷(华中科技大学法学院研究生)

 来  源 《地方立法研究》2019年第4期,因篇幅较长,已略去原文注释。


立法通常采用的语言风格与逻辑编程语言有许多相似之处。然而,1981年《英国国籍法》《密歇根大学租赁终止条款》和《伦敦地铁紧急情况告示》中的法律语言示例表明,逻辑编程的基本模型可以通过几种方式得到有效的扩展。这些扩展包括类型的引入、相关条款、普通否定和击败否定、完整性约束、元推理和程序符号。除立法和编程之间的相似处之外,法律与算法还有其他重要的相似之处。例如,它需要根据社会和政治规范来验证立法,并且需要组织、开发、维护和重复使用大量复杂的法律规范和程序。算法和法律之间的相似性表明,这些不同领域之间有可能实现有效结论与技术手段之间的双向转换。本文探讨的一种可能性是,适当扩展的逻辑程序设计语言的语言结构,是使立法语言本身变得更简单、清晰的可能方式。


 关键词 立法   法律   逻辑编程   程序

 一、引言

 二、1981年《英国国籍法》

 三、《密歇根大学租赁终止条款》

 四、《伦敦地铁紧急情况告示》

 五、其他算法范例

◆ 六、计算与法律的其他关系

◆ 七、结论




 引言


立法语言的特点是运用自然语言表达一般规则,以规范人类活动。为有效达到这一目的,它需要比普通语言更精确,并且需要尽可能地让不同人以同样的方式理解它。在这方面,立法可被视为用人类语言表达的程序,由人类而不是由计算机执行。因此,立法语言也可以作为计算的模型,提出使编程语言更像人类语言的同时仍然保持机器的可执行性的方法。在本文中,我将着重比较立法语言和逻辑编程语言。我认为,虽然逻辑编程在这种比较中有着较佳的表现,但它需要通过将类型扩展、相关条款、普通否定和击败否定、完整性约束、元推理和程序符号等扩展结合起来进行改进。我还将指出,在某些情况下,立法本身可以通过以一种更类似于这种扩展逻辑编程形式的方式重新表达而得到改进。


我将研究三个例子:第一个是1981年《英国国籍法》的若干章节,第二个是《密歇根大学租赁终止条款》,第三个是《伦敦地铁紧急情况告示》。笔者和他的同事早前研究了第一个例子,作为使用逻辑程序设计代表立法的例证。第二个案例是由艾伦(Allen)和撒克逊(Saxon)研究的,作为使用逻辑来消除法律合同制定中的歧义的一个例子。第三个被笔者确定作为公告的一个例子,不仅意味着要精确,而且要尽可能使公众清楚。在先前对1981年《英国国籍法》的调查研究中,我们既强调了使用逻辑编程来构建法律应用的前景,也强调了试图使用逻辑编程来表达知识。在本文中,我只关注第二个问题,更具体地说,是研究逻辑编程和法律语言之间相似性和差异性,以及更广泛地研究算法和法律之间的其他相似之处。


 1981年《英国国籍法》


下面四个来自《英国国籍法》的例子阐明了法律语言的复杂性和精确性,并说明了对时间的处理、默认推理、否定结论和对信念的推理。

(一)因出生而取得

《英国国籍法》的第一小节涉及的是在其生效后因出生在英国而获得公民身份的案件(该法自1983年1月1日起生效)。

1.—(1)法案生效后,在英国出生的人可以成为英国公民,如果在出生时他的父亲或母亲符合:
①是英国公民;或者
②在英国定居。

该条款的英语表达已经接近于逻辑程序设计的形式,甚至达到了在(大多数)条件之前表达结论的程度。使用中缀表示法作为变量的谓词和大写字母,1.1可以通过以下方式在逻辑编程形式中进行解释:
X根据第1.1条获得英国国籍
如果X出生在英国的T地
并且是在法案生效之后
如果Y是X的父/母
Y是T地的英国公民或
Y定居于英国的T地

这个命题形式是
A if [B and C and D and [E or F]]
这相当于一般逻辑编程形式中的两条规则。
A if B and C and D and E
A if B and C and D and F

在本文中,我将使用“逻辑程序”这个术语来指代任何一组语句,它们等价于一组常规逻辑编程形式中的普遍量化含义。

A if B1 and ... and Bn
其中A是原子公式,0≤i≤n的B i是原子公式或原子公式的否定,所有变量,例如:假定在假设中出现的X 1,...,X m是普遍量化的,即:
对于所有X 1,... X m [A if B 1 and...and Bn]

通过引入类型和各种形式的语法糖,1.1的逻辑编程表示可以更像英语,同时保持正式。例如:
一个在法案生效之后的某个时间出生在英国的人
根据第1.1节的规定获得英国公民身份
如果该人的父/母当时是英国公民
或该人的父/母当时定居在英国

这里“人”和“时间”是类型标识符,“一个人”是第一次出现“人”类型的变量,“时间”是第一次出现“时间”类型的变量,“人”和“时间”代表以后出现的相同变量。关系代词“谁”和“哪一个”也代表他们遵循的变量的额外出现。“谁”代表“人”类型的出现,而“哪一个”代表任何类型变量的出现。相关条款形式的表达:
…V which P ***
例如,是…V *** if V P的语法
其中“V”是一个变量,“P”是一个适用于“V”的谓词。
类似的表达形式:
…a R of T P***
是…V P***if V R of T的语法糖,
其中“R of”是二元谓词,“T”是一个术语,“V”是句子中其他地方没有出现的任何变量。请注意,上述两种转换需要与形式公式的简化相结合
将(A if B) if C
转换为
A if B and C

这种类型的输入和语法糖可以更精确地定义,并可以扩展到处理多个相同类型的变量、代词和更灵活的相关子句中。通过这种方式,英语可以作为一种模型,来提高逻辑编程的自然性同时又不牺牲其精确性。

此外,我将在本文的其他地方讨论,使用结论性条件形式(它描述了逻辑编程的语法)有时可以提高自然语言(如英语)的清晰度。

(二)时间表示法

时间由“时间”类型的显式参数表示。表达方式:
…after ***
被解释为简写:
…在***之后的时间
即:
…如果T在***之后,则在T处

这种时间的明确表示与模态表示形成了对比,其中时间关系由模态运算符表示,而时间本身是隐式的而不是显式的。正如前文曾经提到的,为了对时间进行推理,可以制定一个明确的持久性公理来表达一个属性在另一个时间之后的时间。

如果事件发生在另一个时间
并且事件启动了该属性
事实并非如此
另一个事件发生在另一个时间
这是在时间和其他时间之间
而另一个事件终止了该属性
“一个人依据1.1条的规定获得英国公民身份”即
“此人是英国公民”

也许这是一个例子,其中带有变量显式表示的符号表示法可能更容易让一些人遵循。这里“一个时间”“另一个时间”和“又一个时间”引入相同类型“时间”的不同变量。请注意,英语表明变量是指不同的个体,而通常的逻辑约定是相同类型的不同变量可以指同一个体。这是在对逻辑与精确英语风格之间的对应关系作更系统的研究中需要注意的几个差异之一。还要注意,在上面的两个公理中,事件和属性如何作为句子的名称在元逻辑上进行处理。

(三)弃儿与默认推理

《英国国籍法》的第二小节在概念上是该法案中最复杂的句子之一。

1.-(2)在其生效后新生婴儿被发现被遗弃在英国的,除非有相反的情况,被认为是为了第(1)款的目的:
①在该法生效后出生于英国,以及
②在其出生时其父/母是英国公民或定居于英国

在逻辑程序的程序解释下,句子的结论被解释为目标,条件作为子目标。根据这种解释,句子的结论确定了其目的。因此,我们可以将“第(1)款的目的”这一短语解释为对1.1的逻辑结论的元级参考,即获得英国公民身份。此外,对象级别短语1.2.a和1.2.b恰好是1.1的逻辑条件。因此,我们可以将整个句子1.2视为混合对象级别和表达该级别的元级别句子:
1.1的条件应假定为一个人
如果发现这个人是在英国被遗弃的新生儿
时间是在该法案生效之后
并且没有与1.1的条件相反的情况出现

这可以通过用对象级对应物替换元级描述,以实现在对象级的重新构造:
一个人在某个时间被发现是被遗弃在英国的新生儿
此事是发生在法案生效之后
依据1.2节的规定获得英国国籍
如果没有表明情况并非如此:
其人在当时出生于英国
并且是在法案生效以后
并且也没有相反的情况显示并非如此:
这个人的父/母在其出生时是英国公民
或者没有相反的情况表明并非如此:
这个人的父/母在其出生时定居在英国

在这种情况下,混合对象级的矩形级表达式可能比纯对象级表示更容易理解。形式条件:
没有表明不是P的情况

在上面的对象级句子中,可以解释为将否定组合为失败“非”和普通的否定“¬”,即:
非¬P
因此,举另一个例子:
如果不能证明鸟不会飞,则鸟会。
鸵鸟是不会飞的
可以形式化为:
鸟会飞如果非¬鸟会飞
¬一只鸵鸟会飞

盖尔芳德(Gelfond)和里夫希茨(Lifschitz)已经研究过逻辑编程的这种扩展,包括击败否定和普通否定。击败否定是一种默认推理的形式,并且是非单调的。因此,根据1.2获得公民身份的人可能会根据新信息非单调地撤销公民身份。

但是,英国议会不太可能以这种方式撤回公民身份。这样的意图和相反的意图都可以通过引入一个额外的时间层来满足,这个时间层除了对象属性在世界上成立的历史时间之外,还与信念时间有关。斯里巴达(Sripada)已经开发出一种逻辑规划方法来对信念时间和历史时间进行联合表示。

重要的是要强调,当将立法正式化为(扩展的)逻辑程序时,我们并不试图定义那些发生在立法条件下但在立法本身中没有定义的概念。因此,例如,我们不尝试定义1.2条件下出现的“新生婴儿”的概念。因此,这意味着《英国国籍法》的正式化本身的适用性有限。要在特定情况下使用这一概念,即使没有对这些模糊的术语做出一套定义,至少也需要有一系列事实或假设来补充,以表示对这些术语是否适用于手头案件的判断。

(四)剥夺公民身份和否定结论

除了发生在形式的条件下
非¬P

普通否定“¬”似乎只在规则的结论中才需要。在这种情况下,否定结论通常表示一般规则的例外,如示例中所示:
鸵鸟是不会飞的
这是“所有鸟类都会飞”这个一般规则的例外。

由具有否定结论的句子表达的例外情况在立法中很常见。剥夺英国公民的公民身份的规定体现了这种否定的使用:
40.-(1)在符合本条规定的情况下,国务大臣可以通过命令剥夺任何英国公民依据本节规定申请到的公民身份,如国务大臣确信他是通过欺诈、虚假陈述或隐瞒任何重要事实而取得入籍登记或证明书。
40.-(5)国务大臣-
(1)不得根据本条剥夺任何人的英国公民身份除非他确信如果该人继续成为英国公民不利于公共利益;……

40.1具有以下逻辑形式:
P if Q
而40.5具有以下形式:
¬P if not R

如果条件“Q”和“非R”两个都成立,那么根据普通逻辑,就有可能推出一个矛盾:
P and ¬P

但这并不是立法的意图,而是例外情况,应该凌驾于规则之上,或者等同于规则应该被理解为具有额外的隐含条件:
P if Q and not ¬P

事实上,40.1开头的元级短语“受本节规定的约束”可以被看作一种警告,即不能将40.1的含义与本节其余部分分开来理解。

科瓦尔斯基和萨德里研究了逻辑编程的扩展,允许以表示异常为目的的否定结论。它们还表明,这样的扩展逻辑程序可以转换成正常的逻辑程序。特别是有一个例外的规则:
P if Q
¬P if not R
可以转化成更简单的规则:
P if Q and R

这两种表示都可以用于不同的目的。规则和例外方面的表示通常更容易开发和维护。然而,作为普通逻辑程序的更简单表示通常更清晰、更容易理解。因此,第一个代表可能是编纂法律的起草者所首选的,后者可能是法律执行者的首选。

在对剥夺公民身份条款的讨论中,我们只考虑了英语句子的命题结构。我们没有考虑到诸如:“他认为那个人继续成为英国公民不利于公共利益”等条件的含义。

部分原因是这样做非常困难,但也因为我们把注意力限制在形式上只代表立法本身明确规定的内容。然而,关于推理的推理,至少在某种程度上可以通过元逻辑或知识与信仰的逻辑来形式化。

(五)归化与信仰的表现

与剥夺公民身份的规定一样,入籍规定包含有关国务大臣信仰的条件。此外,它们还包含管理这些信念主题的规则。这导致我们考虑是否可以在两者之间建立逻辑连接。第6.1节载有入籍的主要规定:
6.-(1)如果在完全民事行为能力人做出的英国公民入籍申请中,国务大臣认为申请人符合附表1的要求,根据本款规定应归属于该公民,他可以在认为合适的情况下向其授予入籍证明。

在命题层面,这相当于结论-条件形式的句子:
国务大臣可以授予证明
如果该人根据6.1的规定申请入籍
并且该人具有完全民事行为能力
且国务大臣认为该人符合附表1的要求
且统计局局长认为适合给予该人入籍证明。

最后两个条件赋予国务大臣相当大的自由裁量权。最后一个条件是完全不可思议的,只能作为给定案例的输入的一部分。但倒数第二个条件的含义至少应该受到附表1含义的限制。这个时间表很长,但可以很方便地总结它的内容:
一个人符合附表1中6.1的入籍要求
如果该人满足第1.1.2段中规定的居住要求
或该人满足第1.1.3段中规定的官方服务要求
且该人品行良好
并且该人对英语、威尔士语或苏格兰盖尔语有足够的了解
并且该人在被授予入籍时打算在英国居住
或在被授予入籍证明时打算进入或继续为英国官方服务。

要理解6.1与附表1之间的联系,有必要了解满足附表1中规定的入籍要求与满足国务大臣满意这些要求之间的联系。幸运的是,至少在某种程度上,这可以通过将“满足”视为一种“信念”来实现。适当的信念规则可以在模态逻辑和元逻辑中形式化。元逻辑中的以下形式化具有元解释程序的形式。
如果一个人满足P←Q,并且该人满足Q,则该人满足P
如果一个人满足P,并且该人满足Q,则该人满足P^Q
如果一个人满足p,或者该人满足Q,则该人满足PvQ。
这里“←”,“^”和“v”是中缀函数符号,分别命名为蕴含、连接和析取。

我们可以有把握地假设,如果P表示的是1981年《英国国籍法》某一条款的含义,那么国务大臣对P表示满意。

因此,国务大臣尤其满意的是附表1的含义,这个假设和上面的元解释程序是我们在6.1和附表1之间建立逻辑连接所需的全部内容。但是,如果我们使用部分求值的方法对元解释程序进行转换,则可以更明确地建立连接:
国务大臣认为一个人满足6.1中规定的入籍要求
如果这个人满足第1.1.2段规定的居住要求
或满足第1.1.3段中规定的官方服务要求
且国务大臣认为该人具有良好品格
并且认为该人对英语、威尔士语或苏格兰盖尔语有足够的了解
并且如果被授予入籍资格后,该人打算定居在英国,或者有意进入或继续为官方服务。

其结果明确但有些单调地说明了满足国务大臣关于入籍的要求意味着什么。显然,如果我们用代词“他”或“她”来表示在第一次之后对国务大臣的所有提及,那么这个声明就不会那么单调了。

1981年《英国国籍法》的语言在很大程度上非常精确,也非常复杂。这其中的大部分复杂性是法案含义所固有的。然而,通过明确使用结论-条件形式和使用后两个例子中所描述的保留意义的转换,可以降低一些复杂性。

与普通语言相比,甚至与一般法律语言相比,该法案也异常明晰。然而,正如我们已经看到的,它确实包含模糊的术语和未定义的概念,这种模糊性(vagueness)常常与含混性(ambiguity)混淆在一起。虽然,像真正的歧义一样,模糊性导致了解释问题,但它也很有用,因为它允许法律发展和适应不断变化的环境。

另外,真正的模棱两可(ambiguous)通常没有任何用处。此外,虽然逻辑可以很容易地适应模糊性,但它不能容忍含混性。

下一节将介绍《密歇根大学租赁终止条款》,该条款最初是由艾伦和撒克逊开始研究的,目的是说明如何使用命题逻辑来对模糊的法律文本进行精确解释。我认为使用逻辑编程结论-条件形式具有更多的优点,使得许多可能的解释在逻辑上难以置信。


《密歇根大学租赁终止条款》


该条款由一个单一的从句组成,它具有潜在的、逻辑上模棱两可的形式:
A if A1 and A2 or A3 or A4 or A5 or A6 or A7
unless B1 or B2 or B3 or B4 or B5 in which cases B

引入括号的不同方式产生不同的解释。由于例如“或”的相关性,其中一些在逻辑上是等价的。在考虑了这些等价性之后,艾伦和撒克逊确定了可能需要提出的大约80个问题,以便区分不同的括号。通过这种分析,他们确定了一种具有这种形式的预期解释:
((A if (A1 and(A2 or A3)) or A4 or A5 or A6 or A7)
if not (B1 or B2 or B3 or B4 or BS)) and
(if (B1 or B2 or B3 or B4 or BS) then B)

其中“除非”被翻译为“如果不是”。有趣的是,这种解释符合逻辑程序的形式。如果像艾伦和撒克逊所坚持的那样,条件B1-B5是结论B所依据的唯一条件,那么逻辑编程表示就可以简化。在这种情况下,条件not(B1 or B2 or B3 or B4 or B5)可以被not B替换。因此,预期的解释可以用简化的正常逻辑程序表示:
A if A1 and A2 and not B
A if A1 and A3 and not B
A if A4 and not B
A if A5 and not B
A if A6 and not B
A if A7 and not B
B if B1
B if B2
B if B3
B if B4
B if B5

这种对句子命题结构的逻辑分析应该与句子的英文文本进行比较:

如果承租人在入学前提出申请并执行了租约,在本租约到期前的任何时间没有资格注册或未能注册或离开学校,或违反本租约的任何规定,或违反任何有关宿舍管理的大学规定,或出于健康原因,学校可以在有效时间终止前30天向学生发出书面终止通知;除非生命、肢体或财产受到威胁,承租人违反联邦、州或地方法律从事受管制物质的销售或购买行为,或者承租人不再注册为学生,或者承租人在建筑物内使用或持有枪支、爆炸物、易燃液体、烟花爆竹或其他危险武器,或者谎报警,这种情况下,最多于24小时内通知即可。

注意如何通过插入条件A1-A7将句子前半部分的结论A分成两部分。还要注意,这个句子的语言是如此的复杂和混乱,以至于起草者误把“最少24小时”写成了“最多24小时”。

事实上,我略微歪曲了艾伦和撒克逊对这句话的分析。除了确定括号的预期位置外,他们还分析了句子表面含义中出现的三个“if”中的每一个,不管“if”和“only if”是否真的是有意的。他们得出的结论是,在前两种情况下(“何时”和“除非”)并不是有意的,而在第三种情况下(在“在哪种情况下”)则是。因此,他们对预期解释的真实分析具有以下形式:
((A if (A1 and (A2 or A3)) or A4 or A5 or A6 or A7)
if not (B1 or B2 or B3 or B4 or B5)) and
(if (B1 or B2 or B3 or B4 or BS) then B) and
(if not (B1 or B2 or B3 or B4 or BS) then not B)

与此相反,与使用普通逻辑表示的这种更改相比,逻辑编程表示不受这种解释更改的影响。在逻辑程序中,“if”的表示与“if”和“only if”的表示没有区别。这两种解释的区别取决于是否应用了“封闭世界假设”。谓词P的封闭世界假设是所有含义的假设:
P if Q1
P if Q2
:
P if Qn

用程序中的结论P表示结论P所包含的所有条件。正是这个假设证明了否定是一种失败规则:
如果P未能保持,则P不成立,即
如果尝试显示P的所有方式都导致失败,则P不成立。

因此,在租赁终止条款的例子中,对于“何时”一词,“当且仅当”的解释不是有意的,因为在租赁合同的其他地方提到了其他情况,根据这些情况,大学可以在提前30天书面通知的情况下终止租赁。但就“在何种情况下”一词而言,“当且仅当”的解释是有意的,因为在没有其他情况下,大学可以在提前24小时通知的情况下终止租约。在“除非”一词的情况下,这个问题无关紧要,因为在其发生的背景下,封闭世界假设是不适用的。

艾伦和撒克逊认为,租赁终止条款的逻辑表述并不能表达起草人的实际意图。在所有含糊不清的问题得到解决之后,英文文本表示,对于大学能够以30天的书面通知终止租约,不仅必须具备以下条件之一:
(A1 and (A2 or A3)) or A4 or A5 or A6 or A7
但没有条件
B1 or B2 or B3 or B4 or B5

在此情况下,可提前24小时通知终止租约。但是,这些额外的负面条件并没有起到任何作用。它们仅用于做出结论所适用的条件,不包括结论B所具有的条件。

更简单更灵活的规则:
A if ((A1 and (A2 or A3) or A4 or A5 or A6 or A7)
B if (B1 or B2 or B3 or B4 or B5)

与原来的规定相比,他们给了大学额外的选择,除了那些不得不提前24小时通知学生的情况外,还有提前30天通知学生的选项。

使用缩进和表达式“两者……还有”“要么……或者”代替括号,这种新的解释可以用一种形式来写,这种形式既具有逻辑编程的精确性和简单性,又具有英语的自然性:
学校可在终止生效日前30天向承租人发出书面终止通知,终止本租约。
如承租人已同时申请并执行
此租约是在注册前签订的
并且要么承租人没有资格注册
或者承租人注册失败
或承租人在租期届满前的任何时候离开学校
或承租人违反本租约的任何条款
或承租人违反学校关于宿舍管理的规定
或者是出于健康原因终止租约。
大学可在终止租约生效前至少24小时通知承租人终止租约。
如果继续租用会危及生命、肢体或财产安全
或承租人从事销售或购买受管制物品的行为而违反联邦、州或地方法律
或承租人不再具有学生身份
或承租人在建筑物内使用或持有枪支、爆炸物、易燃液体、烟花或其他危险武器
或承租人谎报火警。

密歇根大学的租赁终止条款并不能很好地说明我们的论点,即法律语言可以成为改进计算机语言的良好指南。恰恰相反的是,它似乎表明了这样的观点:一些计算机语言可能是改进法律语言的有用指南。

事实上,很少有法律文件是按照议会法案所规定的精确标准编纂的;几乎没有一部法律文件的表达与措辞既以精确为目标,亦以清晰易懂为目标。然而,一般人都能理解的公告在很大程度上是这条规则的一个重要例外。《伦敦地铁紧急情况告示》就是一个很好的例子。


《伦敦地铁紧急情况告示》


《伦敦地铁紧急情况告示》具有很多逻辑程序的特征,但也与之有一些显著的差异:


紧急告示

按下报警信号按钮提醒司机

如果列车的任何部分在车站

司机会马上停车

如果没有,列车将继续开往下一站,那里更容易得到帮助

不当适用将罚款50英镑。


从知识表示的角度来看,第一句话可能是最有趣的。它以程序形式表达,表明程序形式的表达有时比声明性风格中的“等效”语句更合适:

你是在提醒司机

如果你按下报警信号按钮。


但是,请注意,程序形式可视为声明形式的程序解释的汇编版本。与大多数已编译的知识表示一样,接收方将知识付诸实施所需的工作较少。


这个例子和其他类似的例子表明,如果同时允许声明性和过程性语法,逻辑编程就可以变得更像自然语言。在逻辑程序设计的程序解释下,声明性语法:

A if B and C

以及程序语法

to do A do B and do C

会是等同的。事实上,两种表达方式都具有相同的声明性意义:

A if B and C

和同样的程序意义:

to do A do B and do C.


然而,逻辑程序的过程语法不包括任意的命令式编程语言结构。例如,如果没有进一步的扩展,它将不会包括如下纯粹的命令语句:

按下报警信号按钮。


逻辑编程语言中的所有命令性语句都必须嵌入一个过程中,该过程包含其目的的表达。我将在第5.1节和第5.2节中讨论逻辑程序的可能扩展,包括被视为完整性约束的无目的程序。为了简化对紧急告示的讨论,我忽略了,并且在很大程度上,将继续忽略告示中提到的不同行为和情况之间的时间关系。但是,我们应该注意到,为准确起见,告示的标题应并入这句话的结论中:

按下警报信号按钮,

警告司机紧急情况。


告示的第二句以逻辑编程形式明确表达。然而,即使考虑到这个短语:

司机将立即停车是司机会马上停下列车的缩写


这句话没有表达其意图,因为它缺少了一个完整的条件。通过补充上一句结论中缺失的条件,可以使句子的意思更加明确:

司机将立即停车

如果你提醒司机有紧急情况

并且列车的任何部分都在一个车站里。


当然,这个句子意思的精确表达比英语要烦琐得多。然而,很难看出如何简化逻辑编程表示,使其更接近英语,又不会失去其精度。


第三句开头是对前一句明确陈述的条件的暗示。暂时忽略最后的评论,句子的所有条件都充分明确,其逻辑形式为:

列车将继续开往下一站

如果你提醒司机有紧急情况

并且列车的任何部分都不在车站内。


但这一逻辑并不涵盖其在英语中的全部意图,因为无论司机是否接到紧急情况警报,列车通常都会继续行驶到下一个车站。当然,这意味着列车将在下一站停下来,并在那里提供帮助。这是该短语含义的一部分:

在这里可以更容易地提供帮助。


此外,无论是否是下一站,大概都会在车站提供帮助。因此,我们可以用这两句话来更好地接近第三句的预期含义:

列车将在下一站停靠

如果你提醒司机有紧急情况

并且列车的任何部分都不在车站内。

紧急情况下会提供帮助

如果你提醒司机紧急情况

并且列车停在一个车站。


修订后的句子的第二句抓住了句子末尾评论的部分含义。据推测,其余的含义可以用元声明来表达,即获得帮助的程序比不在车站时停止列车的替代程序更好。


告示的最后一句在结论-条件形式中有一个简单的表述:

罚款50英镑

如果您不正确地使用警报信号按钮。


这与纯粹的命令性声明形成对比,该声明表达的是一项禁令,但没有表达目的:

请勿不当使用报警信号按钮。


与纯粹命令式的禁止声明相反,英语句子的程序解释载有明确的目的表达:

如果你想要50英镑的罚款,

可以不恰当地按下警报信号按钮!


顺便提一下,请注意句子的程序语法与声明性含义的不同之处。英语程序句:

如果你想要A,那就做B

实际上具有潜在的声明意义

A if B


虽然伦敦地铁告示的英文可以改进,但它无疑是清晰易懂的。我相信它的清晰度是由于至少有三个特点:

•明确使用结论-条件形式

•适当使用程序形式,以及

•使用省略号来避免不必要的陈述


前两个特性可以有效地应用于当今计算机语言的设计和改进。第三个特征目前很难实现,尽管未来可能会在这些方面取得一些进展。


 其他算法范例


前面的例子说明了法律语言的一些典型特征及其与逻辑程序形式的关系。然而,也可以找到其他算法范例的指示。


(一)条件-行为产生规则

条件-行为产生规则是由纽厄尔(Newell)和司马贺(Simon)开发的人类心理学模型,并被用来实现专家系统。它们也可以在公告语言中找到。例如,在伦敦地铁的车厢中显示有以下告示:

请让出这个座位

如果老人或残疾人需要它


这是对早期含糊不清且可能令人不安的告示的明显改进

请放弃这个座位

给老人或残障人士


但即使明确使用“if”这个词,句子也不符合逻辑编程形式,因为明显的结论:

请放弃这个座位

是命令式的,而不是声明式的。此外,这句话没有表达一个目的。表达规则的条件-行为形式可以转换为逻辑编程形式,具体方法是:

做一件好事


显性而非隐性。由此产生的陈述可以在程序上表达:

做一件好事

放弃这个座位

如果老人或残疾人需要它


或以声明的方式:

你做得很好

如果你放弃你的座位给一个人

这个人需要你的座位并且

这个人是老人或残障人士


每一条命令都有明确或隐含的目的,这是法律哲学中的一个重要理论。使用逻辑编程形式,迫使目的明确,是这个理论的精神。将显式目的与命令关联起来,可以解释冲突命令的相对优点,甚至可以解释命令在给定上下文中是否合适。


尽管如此,自然语言确实允许不带目的地表达命令,甚至似乎存在完整性约束形式的逻辑编程模拟。


(二)完整性约束

多年来,伦敦地铁在车厢自动门上方一直张贴着这样的告示:

堵塞车门会导致延误并且是危险的


换句话说

如果你堵塞车门会导致延误

如果你堵塞车门会有危险


只要延误和危险被认为是不可取的,一个有思想的人就会得出这样的结论:堵塞车门也是不可取的。


但是,伦敦地铁管理局最近改变了一些列车的通告措辞。新牌子上写着:

不要挡住车门


这是我们时代变迁的悲哀反映。要么延迟和危险不再被认为是不受欢迎的,要么不能指望公众来推断其行为的后果。


但是对于一个逻辑程序员来说,这个新告示是令人担忧的,不仅因为它表明了英国底层社会可能正在恶化的状况,而且还因为它代表着从一种逻辑编程风格向一种更迫切的风格的转变。但是仔细考虑一下,措辞的变化让人想起最近通过包含完整性约束来扩展逻辑编程的努力。


这种扩展是由逻辑编程的数据库应用程序驱动的。许多研究已经研究了逻辑编程中完整性约束的性质和开发有效的完整性检查方法。在所有这些方法中,完整性约束被视为数据库或程序随着时间的推移而必须满足的属性如果数据库的内容描述了世界上的事务状态,则对世界各国施加义务或禁止的命令可以解释为对数据库状态的完整性约束。


完整性约束可以用包括否认在内的任何一阶逻辑语句的形式表示。因此,命令:

不要堵门


可以用否定来表示

¬你堵门


它表达了对发生在世界上的事件的描述的完整性约束。


类似地,条件-动作规则:

请让出这个座位

如果老人或残疾人需要它


可以解释为具有隐含形式的完整性约束

你给一个人让座

如果你坐在座位上

而那个人需要你的座位

并且这个人是老人或残疾人


因此,如果数据库记录了一个人坐在老人或残疾人需要的座位上,并且数据库中没有记录该人将座位让给老人或残疾人的情况,那么数据库的完整性将受到侵犯。如果违反了完整性,则决定如何恢复完整性是另一个问题。也许这就是“目的”或“制裁”可能发挥作用的地方。


因此,没有目的的命令似乎与通过包含完整性约束而扩展的逻辑程序兼容。此外,在完整性约束和逻辑程序规则之间甚至存在转换,这类似于无目的命令和有目的程序之间的转换,给定表示为一阶句子的完整性约束:

C

引入新的谓词S并将约束转换为规则:

S if not C

加上新的约束:

¬S.


新的谓词S可以被解释为一个“约束”,如果违反了原始约束,它就会被应用。这种转换已被用于关于演绎数据库中完整性约束的文献中,以将任意一阶完整性约束转换为拒绝形式。


这一转变与制裁的法律原则之间的类比表明,有可能采用法律技术来处理违反命令的行为,以解决在演绎数据库中恢复完整性的问题。这是一个值得进一步调查的有趣的可能性。


(三)面向对象编程


近年来,面向对象编程的范式在计算中变得越来越重要。因此,研究它在何种程度上与自然语言,尤其是立法语言有相似之处是很有趣的。


当我们看到常用名词如“人”“时间”和“承租人”作为一种面向对象的变量类型时,我们已经看到了英语中面向对象的一些特点。面向对象的其他表现似乎更难以在立法的实际语言中找到,但在个别案件的描述和整个法律的组织中更容易找到。


在自然语言描述中,通常是围绕每个句子开头的一个主题将句子组合在一起。这些主题有助于组织交流,类似于使用对象组织计算知识的方式。


例如,比较这一对句子:

首相走出机舱

记者们立即包围了她

首相走出机舱

她就立即被记者包围


心理语言学家发现第二对句子比第一对句子更容易理解,尽管第二对句子使用的是被动语态而不是主动语态。比较容易理解的两句话有相同的主题,而另外两句话有不同的主题。这些例子表明,围绕对象组织知识可以使知识更加连贯,更容易让人理解。


在法律领域,通常将不同的法律领域组织成与对象层次结构类似的层次结构。因此,一个国家可能有一个关于一般刑法的法规,另一个涉及公共场所行为的法规,以及一个涉及公共建筑行为的法规。例如,无论是否在公共场所,任何地方都可能禁止攻击和殴打。然而,光着身子走路可能只在公共场所被禁止,但在自己家里是允许的。另一方面,吸烟可能只在公共场合中被禁止,但在其他地方是允许的。


因此,自然语言似乎支持对象的两个概念:小对象(用于组织对个体的描述,类似于类型和主题)和大对象(用于组织整个知识领域的层次结构)。从这个角度来看,逻辑编程和面向对象对应于自然语言的不同方面并且是互补的。


然而,计算中的对象概念具有其他特征,如状态的变化,而这些特征在自然语言中没有明显的对应关系。这些特征似乎与模拟世界上物体的行为联系更紧密,而不是描述它们的行为。


有几种尝试将面向对象应用于法律推理。其中一些,如戈登(Gordon)的Oblog,基于对象作为类型和主题的视图,这与逻辑编程和自然语言含义的表示完全兼容。其他的,像尼塔(Nitta)等人对专利法的处理是基于使用对象来模拟行为。


在专利法示例中使用对象进行仿真是特别有意义的,因为专利程序,义务和禁止是用于生成和过滤专利申请模拟的变化状态的方式。似乎有可能的是,如果模拟的变化状态被视为数据库状态,那么专利法中表达的义务和禁令可能被视为完整性约束。这种可能性将在面向对象编程中的命令式语句与演绎数据库和逻辑编程中的完整性约束之间建立有趣的联系。


无论对这些可能性进行更详细调查的结果如何,毫无疑问,立法在计算科学本身之外提供了一个丰富的领域,在这个领域内可以研究不同计算范式之间的关系。这些研究不必仅限于编程语言,而是可以有效地扩展到计算的许多其他方面。


 计算与法律的其他关系


在某种程度上,我们可以真正将立法视为由人们执行的程序,我们也可以期望在程序规范和软件管理等其他算法问题中找到其与法律的类似之处。


(一)规范和政策的类比


正如程序的编写要满足一定的规则一样,法律的起草是为了实现政策,即社会或政治目标。例如,一方面,1981年《英国国籍法》的目的是“制定关于公民身份和国籍的新规定,并修订1971年《英国居留权移民法》,特别是限制前英国殖民地居民向联合王国移民”。《密歇根大学租赁终止条款》可能包括以下目标:禁止在宿舍内的不合群行为,限制合法学生的居住权,以及不给被迫终止居留的个人造成不必要的困难。另一方面,伦敦地铁紧急情况的规则旨在在真正的紧急情况下尽可能有效和迅速地提供帮助,避免在出现错误警报时带来不便和不必要的麻烦。


程序规范与法律文件的政策有许多共同的特点。例如,一个程序的主要义务可能是满足它的规范,同样,法律文件的主要义务应该是实现它的社会和政治目标。此外,在这两种情况下。规范和策略常常定义不清、不一致,或者是相互冲突的需求之间妥协的结果。


在计算中开发的验证程序是否符合其规范的正式方法比为法律开发的任何相应方法都要先进得多。凯彭(Bench Capon)对将基于逻辑的软件验证的形式化方法应用于社会保障法规验证问题的可行性进行了初步研究。


因此,程序验证技术的转让是法律领域可能从其与计算的相似性中获益的一个领域。在软件管理等其他领域,这两个领域的好处可能会更为平等。


(二)软件维护与法律维护的类比


正如程序需要修改以适应不断变化的规则一样,立法也需要修改以适应不断变化的社会和政治需要。但是,程序既难以构建也难以更改。事实上,程序的使用时间往往比规范的使用时间长得多。


法律方面的情况也好不到哪里去,立法往往远远落后于社会和政治变革。过时和错误的立法仅仅是为了“法律和秩序”而执行。但是,法律的起草者们已经开发出了一些巧妙的手段来适应、修改和修订旧的法律。灵活使用模糊和未定义的术语,如“良好品格”“生命,肢体或财产将受到损害”和“不当使用”极大地提高了立法的灵活性及其适应变化的能力。这种模糊术语的使用让人想起在计算机编程中使用数据抽象和封装,这允许程序的较低级别发生更改,同时保持较高级别不变。


许多立法明确涉及废除或修改以前的立法。例如,1981年的《英国国籍法》废除了1948年至1965年的《英国国籍法》,并修正了1971年的《移民法》。特别是修订通常用元级语句表示,该语句描述了如何编辑旧文本以创建新文本。元级语句还用于从同一法案中的类似条款创建新条款。


例如,1981年《英国国籍法》第6.2条对与英国公民结婚的人的入籍做出了特别规定。这些要求与第6.1节中适用的要求类似,但包括较短的居住要求,省略了对英语、威尔士语或苏格兰盖尔语有足够知识的要求,并包括:

“第1(1)(b)段规定的要求”

这个对1(1)(b)的元级引用实际上是对要求的引用

“他具有良好的品格”


元语言的这种特殊用法是相当不寻常的,因为元语言形式的英语表达式实际上比等效的对象级表达式长。通常,元语言公式比对象级公式更简洁。


因此,立法的源代码常常将关于话语领域的对象级语句与关于其他立法文本或同一立法中其他条款的元逻辑语句混合在一起。使用这种元级别语句而不是等同的对象级语句的主要目的是明确不同但相似的文本之间的关系。


立法语言还使用了出色的技术来重用以前的立法。例如,在1981年的《英国国籍法》中,它规定,根据1981年的《英国国籍法》,成为英国公民的条件之一是:

根据1948年至1965年《英国国籍法》的任何规定,

就1948年法案第5(1)条的但书而言,被视为仅通过血统成为联合王国和殖民地公民,或如果是男性则被视为如此。


最后一个短语是反事实条件的一个例子。凯彭提出了这种反事实的元逻辑解释。由此我们可以设想元编程如何在逻辑编程环境中实现这种反事实的软件重用。


(三)基于案例和基于规则的推理之间的关系


在人工智能中,有时会将基于案例的推理与基于规则的推理进行对比,通常认为这两种推理之间存在冲突。有人认为,人们推理是通过不同案例之间的类比,而不是通过演绎的规则应用来推理。


这两种推理的区别也存在于法律的核心问题。在某种程度上,它甚至反映在西方两大主要法律传统的显著特征之中。英美等国的普通法体系更注重通过案例进行推理。大陆法系,例如欧洲大陆法系,更强调通过编纂规则进行推理。事实上,在这两种法律体系中,这两种推理相互作用、相互补充。


例如,在基于规则的立法中,基于案例的推理在确定模糊概念的含义方面发挥着基础性作用。概念的先前案例可作为新案例的先例。


另外,在以案件为基础的法律论证中,在设立先例的案件中,为做出一项决定所提出的理由往往是一般性的,并诉诸一般性原则。此外,判例法的授权重述有效地将个别案件的判例重新表述为一般的、基于规则的形式,尽管这种基于案例的规则并不具有与立法规则相同的约束力。事实上,我们可以认为,法律从案例推理到规则推理是一个自然的发展过程。


 结论


算法和法律之间的相似性似乎涵盖了计算软件的所有领域。此外,立法起草的语言风格结合了计算机语言在编程、程序规范、数据库描述和查询、完整性约束和人工智能知识表示等不同领域的表达能力。因此,这种语言风格可以很好地指导将来如何统一这些不同的计算领域。


计算和法律之间的相似性超越了语言风格。它们还扩展到了两个领域在开发、维护和重用大型和复杂的语言文本体方面所共有的问题。在这里,在两个领域之间转移有用的技术也是可能的。


在本文中,我主要关注逻辑程序设计和立法之间的相似之处。我已经指出了立法语言表明逻辑程序设计的基本模型可以有用地扩展的几种方式,包括类型的引入,相对条款,普通否定和击败否定,完整性约束,元推理和程序符号。我相信,在这种扩展的帮助下,逻辑编程可以为未来提供基础,单一计算机语言将适用于所有计算领域,就像自然语言适用于所有法律领域一样。



(责任编辑:陈 颀

(公众号学生编辑:蔡梓园



★ 人工智能与算法——“网络法的理论与视野”工作坊专题五 ||《地方立法研究》

★ 数据与治理——“网络法的理论与视野”工作坊专题四 ||《地方立法研究》

★ 隐私与被遗忘权——“网络法的理论与视野”工作坊专题三 ||《地方立法研究》

★ 版权与平台——“网络法的理论与视野”工作坊专题二 ||《地方立法研究》

★ 网络法研究方法论——“网络法的理论与视野”工作坊专题一||《地方立法研究》

★ 戴 昕:超越“马法”?——网络法研究的理论推进 ||《地方立法研究》

★ 《地方立法研究》2019年第4期目录与摘要

继续滑动看下一个
地方立法研究编辑部
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存