法律是否可能被写成代码?
文/章彦博
这是一篇「抛砖」与「摆立场」的文章,欢迎有理有据的批判与讨论。
首先摆出个人的立场:「代码司法」,在一定程度上,是可以的,至少交互式断案是可行的。至于其「必要性」,则在于进一步去除司法过程中的「不公正」,并且赋予司法过程以「可重复性」。
1
首先举一个实际的例子,下图是1998 年袭击东非大使馆的人员网络:
1998 年袭击东非大使馆的人员网络
我们要找到他们的合作关系,也就是找出他们中有几个团体,这是可以通过代码做到的:
clique = FindClique[g, {5}, All] {{"Fahad", "Fadhil", "Khalfan", "Awad", "Ghailani"}, {"Odeh", "Owhali", "Fazul", "Azzam", "Atwah"}, {"Abdullah", "Odeh", "Owhali", "Fazul", "Atwah"}}
实际上,通过上面的代码就足以做到了。画出来就是这样:
合作关系
这样他们就能分成三个团伙,这也可以通过计算机解决:
三个团伙
我们甚至能直接找到这次活动的外部联系人:
With[{dar = First[clique]}, Complement[Flatten[AdjacencyList[g, #] & /@ dar], dar]] {"Abdullah", "Atwah", "Hage", "Odeh"}
这四个人:Abdullah, Atwah, Hage, Odeh,就是「外部联系人」。
我个人的观点是:凡可写成「流程图」的法律条款,皆可写成一个(至少是交互式的)判决程序。
2
知乎上的@KE meng 举出这个例子,认为计算机无法处理这样的问题:
小孩A把小孩B给打了,小孩B带着小孩B的爷爷去学校把小孩A给打成重伤,可是小孩B的爷爷是精神病患者,但是小孩A去打小孩B的行为是小孩A的家长指使的,为了让小孩A顺利地打小孩B,小孩A的父亲谎称有人做工,把小孩B的父亲(监护人)骗出了村子。
这个事件看起来的确很复杂,但从图论的角度看,是可以准确用计算机的语言描述的。
我大致考虑一下,一个事件,其有几个基本的组成部分:
- 人;
- 团体;
- 时间轴;
- 事件;
- 物质;
- 金钱;
- ……
这些是常见的基本组成。
他们之间的常见关系是:
- 人->事件:主动做……;
- 人->人:唆使、被唆使,欺骗、殴打、……(事件);
- 人->物质:使用;
- 物质->事件:产生;
- ……
这样的关系可以通过多个图来表示。凡有力,则有施力者,有受力这,此处亦然,「行为」可以储存在节点的每一条边之上。
好,再来看刚刚的例子:
小孩A把小孩B给打了,小孩B带着小孩B的爷爷去学校把小孩A给打成重伤,可是小孩B的爷爷是精神病患者,但是小孩A去打小孩B的行为是小孩A的家长指使的,为了让小孩A顺利地打小孩B,小孩A的父亲谎称有人做工,把小孩B的父亲(监护人)骗出了村子。
可以画出这样的图:
GraphPlot[{{"A" -> "B", "打"}, {"B" -> "B爷爷(精神病)", "指使打人"}, {"B家长" -> "B", "指使打人"}, {"B爷爷(精神病)" -> "A", "打"}, {"B家长" -> "A父亲", "骗出村子"}, {"A父亲" -> "A", "无法保护"}}, VertexLabeling -> True, DirectedEdges -> True]
出来的图就是这样的:
事件图
那么可以这样描述这件事发生的过程:
- B爷爷成功打A = B爷爷打A && A父亲不在家
- B爷爷打A = B指使B爷爷 && B爷爷同意
- B爷爷同意 = Random[]
- B指使B爷爷 = B家长指使B && A打了B && B认同要打A
- B家长指使B打人 = A打了B && B家长认为需要打A
- A父亲不在家 = B骗A父亲出村 A父亲恰好不在家
好,上边的逻辑关系确立之后,通过布尔代数(这是可行的),可以计算出每个行为与「B爷爷成功打A」这件事之间的关联,从而可以分担责任,作出判决。
以上是一些大致的想法,希望和大家讨论讨论这个问题。
刚刚发布几分钟,@LostAbaddon 就来了,还带来了一个很让人纠结的问题:
小明和小红在小王家的楼顶玩耍,小红开玩笑轻轻推了小明一把,小明撞到小王家屋顶的栏杆,但是这根栏杆正好松动,小明措手不及掉了下去,结果被小王 楼下小李家的游泳池接住了没事,但小李邻居小强出去旅游的时候把家里的宠物鳄鱼寄养在了小李家的游泳池了,结果小明被鳄鱼咬死了。
请问:这起事件里哪些人有哪些责任应该分别获什么刑?
好的,我个人的观点是,这些问题都可以写成布尔表达式,具体到这个问题上是这样的:
布尔表达式
解出来:
(((((年久失修 && 小王没有维修) 栏杆是假冒产品) && 小红推了小明一下 && 小明被推到栏杆上 && 小明没抓稳栏杆) (小明自己跳下去的 && 小红没有阻止)) && 小李接受了鳄鱼 && 小强寄养鳄鱼 && 鳄鱼愿意咬小明) (((((年久失修 && 小王没有维修) 栏杆是假冒产品) && 小红推了小明一下 && 小明被推到栏杆上 && 小明没抓稳栏杆) (小明自己跳下去的 && 小红没有阻止)) && 小明不会游泳 && 小明没有得到救治)
化简一下,得到:
小明死了=(小明不会游泳 && 小红没有阻止 && 小明没有得到救治 && 小明自己跳下去的) (小强寄养鳄鱼 && 小红没有阻止 && 小李接受了鳄鱼 && 鳄鱼愿意咬小明 && 小明自己跳下去的) (小明不会游泳 && 小明没抓稳栏杆 && 栏杆是假冒产品 && 小明没有得到救治 && 小明被推到栏杆上 && 小红推了小明一下) (年久失修 && 小明不会游泳 && 小王没有维修 && 小明没抓稳栏杆 && 小明没有得到救治 && 小明被推到栏杆上 && 小红推了小明一下) (小强寄养鳄鱼 && 小明没抓稳栏杆 && 小李接受了鳄鱼 && 栏杆是假冒产品 && 鳄鱼愿意咬小明 && 小明被推到栏杆上 && 小红推了小明一下) (年久失修 && 小强寄养鳄鱼 && 小王没有维修 && 小明没抓稳栏杆 && 小李接受了鳄鱼 && 鳄鱼愿意咬小明 && 小明被推到栏杆上 && 小红推了小明一下)
分出来六种情况:
- 小明不会游泳 && 小红没有阻止 && 小明没有得到救治 && 小明自己跳下去的
- 小强寄养鳄鱼 && 小红没有阻止 && 小李接受了鳄鱼 && 鳄鱼愿意咬小明 && 小明自己跳下去的
- 小明不会游泳 && 小明没抓稳栏杆 && 栏杆是假冒产品 && 小明没有得到救治 && 小明被推到栏杆上 && 小红推了小明一下
- 年久失修 && 小明不会游泳 && 小王没有维修 && 小明没抓稳栏杆 && 小明没有得到救治 && 小明被推到栏杆上 && 小红推了小明一下
- 小强寄养鳄鱼 && 小明没抓稳栏杆 && 小李接受了鳄鱼 && 栏杆是假冒产品 && 鳄鱼愿意咬小明 && 小明被推到栏杆上 && 小红推了小明一下
- 年久失修 && 小强寄养鳄鱼 && 小王没有维修 && 小明没抓稳栏杆 && 小李接受了鳄鱼 && 鳄鱼愿意咬小明 && 小明被推到栏杆上 && 小红推了小明一下