在针对算法和法律关系的研究中,算法主要是作为问题而存在的。但是,算法之于法律未必只意味着问题,还可以提供工具。此处所谓工具,不是“法律代码化”意义上的技术工具,而是方法论意义上的思维工具。计算科学以制造智力替代物为己任,因此它不仅关心知识获取的结果,而且探索知识生产的过程。它有意识地整合了计算机科学、心理学、逻辑学、哲学等各领域的成果,总结出一系列知识生产的规律。法律同样是知识,在社会日趋复杂的背景下同样有必要对本领域的知识生产过程展开更深入的研究。既然如此,我们就有理由推测,计算科学领域关于知识生产的规律有可能被挪用到法律领域,解构法律知识的生产过程,提高法律知识的质量水平。
文章前两部分致力于回答基础问题:法律和算法具有可比性吗?算法研究体现了值得法学借鉴之处吗?在对这两个问题做出肯定回答之后,文章将尝试借用算法中一些浅显但重要的规律来观察法律。
算法(algorithm)一词源于9世纪波斯数学家花拉子模(al-Khwarizmi)的名字。他强调求解问题应当遵循有条理的步骤,这种条理性后来被视为算法的核心。在形式化的意义上,算法被定义为“一种有限、确定、有效的并适合用计算机程序来实现的解决问题的方法”。而在不那么形式化的意义上,“算法是为实现某个任务而构造的简单指令集。在日常用语中,算法有时称为过程或处方”。无论从哪种定义方式出发,算法与法律的共通之处都非常明显:算法形式化定义中的核心特征是“有限、确定和有效”,这与法律不谋而合。有限性(finiteness)指算法必须能在执行有限步骤后终止,这与司法程序不能不计代价地探索个案正义而只能追求案结事了异曲同工。确定性(definiteness)指算法的每个步骤都有确切定义,这与法律对概念清晰和体系一致的追求遥相呼应。有效性(effectiveness)指算法中执行的任何步骤都可以被分解为基本的、可执行的操作步骤,这与法律文本需要采用含义明确、可被理解的表达可谓殊途同归。而算法非形式化定义中涉及的“指令集、过程和配方”,更是形象地展现了法律调整社会关系的形式。算法不等于程序文本,正如法律不等于立法文本。算法和法律都是统辖具体文本的、为解决特定问题而创造出的行之有效的方案。
人们之所以需要借助算法来解决问题,是因为需要借助认知模型将认知负担控制在合目的的范围内。现实世界包含了太多变量,在全面把握这些变量的基础上进行决策是不可能的,因为这大大超出了人有限的认知资源和执行能力允许的范围。此时,算法起到了“现实转换器”的作用,通过将算法设计者掌握的宝贵经验反映在算法中,成功地将难以处理的真实世界转换为了可掌控的操作对象。作为“现实转换器”的算法,一头连接着真实世界,另一头连接着决策者的期待,其内部设计自然会根据决策者的期待变化而发生改变。例如,同样是求最佳抛物线的算法,当目标是提高洲际导弹射程时,合理的算法显然不可能和提高实心球投掷成绩的情况下一样简单,而是会建立复杂得多的指令集,把在实心球背景下被认为不合目的的变量统统纳入考虑范围。只要人们不满足于跟着感觉走,而想从混沌的现实世界中提炼出指导决策的方案,都需要构建认知模型,或者说都需要设计算法。社会之所以需要法律,很大程度上同样是因为真实世界包含的变量太多,需要过滤、整理,形成有效的认知模型。
法律具有算法属性并不令人惊讶,因为现代法律总体而言以理性主义为基础,而算法同样是理性主义的结晶。理性主义不满足于零散的经验,而要对其进行修剪与排列,制成结构化的知识,以便将混沌的现实分拣到整齐的认知框架里面。从计算的角度看待法律的态度其实一直存在。霍布斯早在17世纪就曾说:“政治学著作家把契约加起来以便找出人们的义务,法律学家则把法律和事实加起来以便找出私人行为中的是和非。……用得着加减的地方就用得着推理,用不着加减法的地方就与推论完全无缘。”到了18世纪的边沁笔下,法律的算法性质更加明显:“功利原理是指这样的原理:它按照看来势必增大或减小利益有关者之幸福的倾向,亦即促进或妨碍此种幸福的倾向,来赞成或非难任何一项行动。”在极端的功利化思路中,幸福可以通过快乐而增加或者因为痛苦而减少,变化的程度受快乐或痛苦的强度、持续性和必然性影响。在定下这些公理之后,法律的任务就是画好社会福利的坐标系,写好加减幸福的算法,导入参数、带入变量,得出最大幸福的结果。霍姆斯在19世纪断言道:“未来学习法律的人是掌握了统计学和经济学的人。”到了20世纪,数理逻辑更是堂而皇之地以“经济”之名在法学领域攻城略地。在法经济学的视野下,法学不仅必然包含计算,还需要借助边际、均衡和博弈的概念以及表格、公式和坐标系等符号被重新加以表述。法学研究在把法律当成计算指南方面早已走出很远,只是因为没有给法律冠以算法之名,所以不曾有意识地把两个学科勾连起来而已。
法律和狭义的算法在探索认知规律的自觉性方面有所差异。总体而言,狭义算法在发展过程中积累了更多的元认知经验,而法律算法的设计者却往往不那么关心元认知。
狭义算法的设计者在大部分发展阶段中都能依附在价值无涉的保护伞下,自由探索并运用认知规律。在追求“算得更好”的过程中,狭义算法的设计者通常不会受到来自价值观、公平感或其他顾虑的干扰。当研究机器翻译的科学家意识到与其让机器先理解自然语言再进行翻译(所谓基于规则的翻译),不如让机器直接寻求两种语料之间的数学关联(所谓基于统计的翻译)时,他们实际上把语言理解这个智能问题“降格”为了计算问题。不过在这种观念转变传导至大众关心的价值领域之前,科学家无需就他们对智能的态度接受大众的质询。直到算法的运用领域中出现了自动驾驶、算法杀熟、影响选举等越来越多牵扯强烈价值判断的问题,算法非技术性的一面才进入主流舆论的视野。
法律则从来没有享受过价值无涉的保护伞,而是必须持续回应公众的价值观期待,从而发展出一套貌似与计算无关的话语体系。法律对计算理念的排斥感,是法律难以像狭义算法那样始终保持对计算方法本身高度自觉的第一个原因。法律被视为关于正义与非正义的学问,千百年来处理的都是自由、尊严、公平、道德等带着浓厚价值意味的对象。对于每一代法律人而言,这些对象已经在很大程度上被给定,并不会因为法律人宣称自己在计算对象或者计算方法上产生了洞见就发生改变。加之社会也需要借助稳定的共同想象来维系基本秩序,因此包括法律在内的社会制度倾向于把这些对象视为神圣不可侵犯的。如果要把这些对象从目的降格为手段,难免与公众更容易接受的法律理念相抵触。
法律难以像狭义算法那样始终保持对计算方法论的高度自觉,第二个原因是二者在本质上的确存在重大差别。如果从数学的角度来理解狭义的计算,就会看到狭义的计算是在一套人为定义的自洽系统内部进行符号推演。至于该系统是否与外部世界匹配,这并非需要优先考虑的问题。数学强调的抽象性可以被理解为一种向内推演而不向外求证的态度。“公理系统的主要问题并不是公理的真实性,而是公理的自洽性和有用性。”这种自给自足型的思维方式不能满足法律的需求。虽然法律也是一套符号体系,但这套体系必须是开放的,根据时代发展不断调整符号及其相互关系的定义,不可能像数学一样以公理系统内部推演为终极追求。
法律难以像狭义算法那样始终保持对计算方法论的高度自觉,第三个原因是法律领域的计算效果并不总是那么值得信任。计算者固然可以宣称公平正义本属效率的一部分,从而将所有社会问题都转化为计算问题,但这难免使效率变成无所不包、难以证伪的概念,并不能使众多法益衡量问题在操作层面迎刃而解。因为计算以不同价值的通约为前提,而在利益衡量中真正困难的恰恰是通约本身而不是通约后的计算。例如,要回答个人的信息自决诉求与社会的信息产业发展如何协调的问题,难点在于个人安宁和产业发展分属不一样的心理账户,因此哪怕在个人层面也很难被完全理性地通约,更何况要通过立法在社会层面对二者进行通约,阻力自然更大。价值越难客观化的对象,在计算中越难处理。针对伦理、公平等道德意味浓烈的对象,计算者固然可以采取近似、估算等诸多手法,但难免给人回避道德难题的印象。计算能够告诉我们如何实现目标,却很难告诉我们目标是什么,更无法告诉我们目标应该是什么。所以法律与计算之间的隔膜不仅由来已久、根深蒂固,未来也无计彻底消除。这种状况使得法律尽管具有计算的属性,但专门针对这部分属性展开的研究并没有登上主流研究的大雅之堂。
法律其实与许多算法规律遥相呼应,但这种契合更多地是自发的,而非自觉的。下文将进行非常初步的尝试,透过算法设计中一些浅显但重要的规律来观察相应的法律问题。
在计算科学的视野中,信息成本从来都是问题不可分割的部分,脱离信息成本讨论方案的优劣是没有意义的。我们不愿意花十分钟去设计一个能节约五分钟的新方案,道理即在于此。
在相当多的法学问题上,信息成本在制度设计中的作用还远远没有被充分自觉地意识到。我们更习惯从本体论层面的“是什么”角度去观察规则,而很少从认识论角度的“如何做”角度去思考规则形成过程背后的动力。例如,法院在面对非典型信息客体和及其非典型利用方式时,均轻易地否定了具体知识产权部门法的适用可能性,转而用兜底条款追求所谓的实质正义。但实际上,专利法、著作权法和商标法等具体知识产权部门法提供了结构化的认知框架——图式——来分拣和处理信息。法院只需要逐一回答客体、主体、权能、限制和救济环节的子问题和子子问题即可得出答案。兜底条款则是非结构化的空洞指令,难以被拆分为“有限、确定、有效”的可执行步骤,因此也不能起到降低认知的作用。既然如此,当法院面对非典型创新成果和非传统利用方式提出的新型创新利益分配问题时,自然应当优先考虑拓展知识产权图式。只有当把新情况放在图式下处理会过度扭曲图式的含义、导致认知经济性收益大幅下降的时候,法院才需要考虑将新情况放在兜底规范下处理。
我们在推进类型化的过程中,有必要对类型化的最优程度保持警惕。道理正如同在算法领域,设计者不会一味提高认知模型的精度,而是仅仅在细化模型带来的边际收益大于其边际成本时,才致力于提高模型的精度。
我们在面对类型化程度的问题时,也有必要不仅关注类型化不足的问题,而且注意类型化过度的弊端。例如,《反不正当竞争法》于2017年修法时引入了网络不正当竞争条款。该条款固然提高了网络不正当竞争规则的类型化程度,但很可能因其过于细碎和技术化的用语而迅速失去作为行为规范和裁判规范的效果,徒增法院和公众在适用法律时的困扰。如果我们在修法过程中曾经考虑过类型化过度也可能造成问题,网络条款或许是个能够避免的错误。
法律是一种社会设计,而这种设计的根本难题在于问题的复杂度。如果我们承认复杂度是许多问题的根源所在,就更容易有针对性地寻求理论帮助。算法理论中有多种降低复杂度的方法,本文仅以三种为例说明算法与法律的关联:
第一种降低复杂度的方法可以被概括为“对症下药”,也就是“通过弄清问题困难的根源,我们可能会做某些改动,使问题变得容易解决”。这种方法看似简单,但如果立法者不曾有意识地加以运用,仍有可能在面对复杂问题时误症误判。我国在知识产权损害赔偿问题上,如果能够澄清困难的根源并不源于特定损害赔偿计算方式的缺陷,而是内生于知识产权损害赔偿制度本身的性质,就能在很大程度上避免法定赔偿的滥用。
第二种降低复杂度的方法是贪心算法,即在哪怕不能确保全局最优解的情况下,仍然将复杂问题拆分为多个不那么复杂的子问题,通过合并子问题的解来回答复杂问题。接受局部最优解意味着放弃对完美的追求,这实际上反映了法律一直遵循的模式。法律体系通常不会执迷不悟地求取最优解,而是满足于找到足以处理问题的近似解。由此可见,不同部门法的区隔只是降低问题复杂度的手段而已,不同法律部门的目标都是社会福利的最大化。这提示我们需要谨慎对待将部门法区隔强化为本质区别的观点,而是以更加富于弹性的态度,对待不同规则之间的界限。
第三种降低复杂度的方法可以称为“以简代繁”,即通过回答简单问题来为解答复杂问题提供帮助。为了回答一个部门法提出的复杂问题,立法者会提出一系列相对简单的问题,法官只需要依次回答这些简单问题就能接近复杂问题的答案。在新制度经济学和法经济学中,这种辅助我们回答困难问题的简单问题都可以被称为中介(proxy)。有意识地将充斥法律各个角落的概念视为帮助我们解决复杂问题的中介,有助于我们以更加功能化的态度分析法律问题。
框架问题的焦点是算法在解决具体任务时调用的背景知识。尽管这些背景知识貌似不会影响具体任务的解决,实际上却会对任务执行产生巨大影响。
因此,决策者在审视决策过程时,不能仅仅检验框架内的显性推理过程,还应重视框架本身暗示的隐性背景信息。虽然在大多数情况下,法律层层套嵌的结构已经为每个分支节点上的决策活动提供了明确的框架,但在部分情况下,法官仍有可能在不同的框架之间进行选择。例如,反不正当竞争法一般条款就提供了道德评价和经济分析两个框架。针对同样的案件事实,法官在道德框架和经济框架下分析时受到的指引有可能差别巨大。选择正确框架远不是一件无关紧要的事。这恰恰与人们在计算机科学领域认识到的框架问题重要性不谋而合。
与算法相关的研究有意识地积累了许多认知规律,或许能起到帮助法学更加科学地反省自身的作用。毕竟,尽管法学不像典型的科学那样通过标准化流程生产可证伪的知识,但这并不意味着法律没有科学性。法学和其他科学都以理解世界为目标,并且服从同样的认知规律。耶林尽管对“法学的概念天国”极尽嘲讽,但并不怀疑法学的科学性:“法学就是在法律事务中的科学意识。这种意识必须[……]探求现实世界法律之起源与效力所赖以成立之最终基础。”科学的发展允许我们沉降到认知活动底层去了解法学与科学的相通之处,更加科学地处理法学问题。