Этот пост в блоге является частью продолжающейся серии, в которой я буду анализировать, как государственная политика может быть использована для построения более справедливого общества.

Я собираюсь стать действительно нетрадиционным здесь. Без какого-либо объяснения большинство людей, вероятно, сразу отбросят эту идею , так что давайте просто начнем с описания проблемы.

То, как мы пишем и интерпретируем законы, беспорядочно и лишено разумной объективности.

И если вы на секунду задумаетесь об этом процессе, легко понять, почему это так. У вас есть люди, пытающиеся записать тысячи законов, каждый из которых охватывает разные слои населения, города, округа, штаты, страны, на английском языке, который не стандартизирован и не ограничителен в своем декларативном формате. Что еще хуже, не существует точной методики сопоставления новых законов с существующими законами для обеспечения последовательности или необходимости. Даже простой акт определения правомерности какого-либо действия нетривиален даже для тех, кто близко знаком с правом.

Как только вы добавляете в смесь прецедент судебного дела, который помогает нам поддерживать единообразие в отношении толкования законов, комбинаторика и перестановки поражают воображение. Размышляя о масштабах проблемы, я подумал про себя: «похоже, что эту проблему лучше всего решить с помощью программного обеспечения».

Действительно, языки логического программирования кажутся идеальным инструментом для выражения правил такого рода.

Краткое руководство по Прологу

Пролог — это язык логического программирования с очень простым синтаксисом. Я собираюсь рассмотреть несколько примеров того, как работает Пролог. Если вам интересно немного поиграть с ними, откройте онлайн-компилятор/исполнитель, и вы сможете поработать с некоторыми из этих примеров.

Можно сказать, что в Прологе есть два «режима». Один декларирует отношения, а другой их оценивает. Давайте начнем очень просто. Я хочу заявить, что «человек» — это человек.

person(human).

Хорошо, это было легко. Теперь давайте спросим Пролог, является ли человек человеком.

?- person(human).
true.

Здорово! — Хотя мне кое-что интересно…

?- person(corporation).
false.

Да, это было бы полезно несколько лет назад.

Как видите, отношения должны быть явно определены. Если бы я хотел, я мог бы определить корпорацию как человека, как я сделал для «человека» выше. В этом случае этот запрос вернул бы true.

Более того, если вы не уверены в отношениях, вы можете просто спросить у Пролога. Например, что, если я хочу просто перечислить то, что является личностью?

?- forall(person(X), (write(X), nl)).
human.

Синтаксис для этого немного сложнее. Поскольку этот курс не предназначен для изучения Пролога, я не буду вдаваться в мельчайшие подробности того, как это работает. Достаточно сказать, что отношения можно определять и запрашивать.

Теперь кое-что более интересное, определяющее косвенные отношения.

sibling(X, Y)      :- parent_child(Z, X), parent_child(Z, Y).
 
parent_child(X, Y) :- father_child(X, Y).
parent_child(X, Y) :- mother_child(X, Y).

Итак, теперь мы становимся более абстрактными. Здесь мы определяем братьев и сестер таким образом, что у них есть общий родитель (Z). Затем мы определяем родителя как отца или мать. Чтобы выяснить, являются ли два человека братьями и сестрами, вы должны сначала ввести некоторые данные. Мы создадим двоих детей, Барта и Лизу, от одной матери Мардж. Затем мы создадим Гомера, отцом которого будет Эйб.

mother_child(marge, bart).
mother_child(marge, lisa).
father_child(abe, homer).

Теперь у нас достаточно данных для выполнения некоторых одноуровневых запросов. Поскольку у Барта и Лизы общая мать, их следует считать братьями и сестрами. Гомер, с другой стороны, не имеет общего родителя ни с кем другим, поэтому, например, его не следует считать братом и сестрой Барта.

?- sibling(bart, lisa).
true.
?- sibling(homer, bart).
false.

Используя то, что мы знаем о Прологе, давайте вернемся к нашей первоначальной цели — написанию законов.

Законы Пролога

Что, если бы я захотел написать закон, в котором говорилось бы, что «братья и сестры не могут вступать в брак»? Итак, определение sibling становится важным. Мы говорим о братьях и сестрах с одними и теми же матерью и отцом? Братья и сестры только с одним общим родителем, как мы определили выше? Братья и сестры, которые имеют общих родителей, но не имеют кровного родства (например, один брат или сестра усыновлены)?

Сам акт написания законов в виде кодекса требует от автора ясности. Кроме того, запрос терминов, используемых при определении закона, или чтение кодекса сразу прояснит область применения. Это также позволяет нам более точно определять стандарты в отношении того, как мы объявляем законы (например, стандарты кодирования), которые можно легко проверять и применять (например, проверки кода и модульные тесты).

Ниже я дам определение более явной формы «родного брата». «Биологический брат» будет означать, что у двух людей должны быть одни и те же мать и отец, и ни один из них не может быть усыновлен. Затем я определю закон о браке таким образом, что только два человека, которые не являются биологическими братьями и сестрами, могут состоять в браке.

biological_sibling(X, Y) :- \+ adopted(X), \+ adopted(Y),
                            father_child(F, X), father_child(F, Y),
                            mother_child(M, X), mother_child(M, Y).
marriage_law(X, Y) :- person(X), person(Y),
                      \+ biological_sibling(X, Y).

До брачного равноправия этот закон выглядел бы еще сложнее. Если добавить гендерное ограничение, позволяющее заключать браки только между мужчинами и женщинами, закон может выглядеть примерно так:

marriage_law(X, Y) :- person(X), person(Y), male(X), female(Y),
                      \+ biological_sibling(X, Y).
marriage_law(X, Y) :- person(X), person(Y), female(X), male(Y),
                      \+ biological_sibling(X, Y).

Вы можете начать видеть, насколько выразительным и явным может быть написание законов таким образом.

Теперь я хочу сделать шаг назад и посмотреть, как такая парадигма влияет на нашу существующую правовую систему. Как нынешняя система смягчает некоторые из наших предполагаемых проблем и как таким образом справляться с некоторыми сложностями фактического применения законов.

Смягчающие факторы

Хотя наша нынешняя система законов может быть запутанной, в ней действительно заложены некоторые интересные философии дизайна.

Во-первых, как было сказано выше, законы принимаются без перепроверки действующих законов. Это артефакт практичности, но также и эффективности. Это означает, что законодательный процесс уже спроектирован таким образом, чтобы его не обременяли вопросы бухгалтерского учета, которые могли бы улучшить программируемые законы.

Это связано с тем, что большинство законов применяются только в суде, а не регулируются упреждающе — своего рода ленивая модель оценки для тех, кто знаком с функциональным программированием. Это снижает накладные расходы на большинство законов, поскольку некоторые из них могут не соблюдаться и, таким образом, никогда не фигурировать в судебных делах и не подвергаться тщательному анализу со стороны юристов, судей или генеральных прокуроров.

Еще одна вещь, которую некоторые города и штаты начинают делать, — это размещать свои законы в Интернете и делать их текст доступным для поиска. Это значительно упрощает процесс нахождения законов и значительно сокращает время, необходимое для определения законности некоторых действий, как мы отмечали ранее.

Наконец, точно так же, как Пролог может использоваться как формальный, более объективный язык для выражения закона, наша текущая правовая система действительно имеет что-то, называемое «Юридический язык или Юридический английский. Хотя этот тип языка действительно предоставляет конструкции и шаблоны, которые помогают людям лучше понимать друг друга, его наследие английского языка вносит много текучести и субъективности. Руководство по четырем критериям (четкий, лаконичный, правильный и полный) используется для оценки качества юридической коммуникации, но не применяется. Это может привести к использованию преднамеренно широких терминов или неразборчивых формулировок, уничижительно придуманных юридический язык.

Одним из основных преимуществ программируемых законов является отказ от юридического языка. Код-ревью и код-линтеры — очень распространенные методы обеспечения соблюдения стандартов при написании программного обеспечения. Глядя на четыре C юридического английского языка, сам процесс написания кода требует, чтобы всегда выполнялись вторые две C (правильный и полный). Если это не так, код не будет компилироваться или проходить модульные тесты. В качестве побочного эффекта того, что Пролог является функциональным языком программирования, чей синтаксис краток и декларативен, мы также в конечном итоге получаем первые два C более или менее бесплатно (ясный и лаконичный).

Развивая эту идею, сделав наши программируемые законы открытым исходным кодом, мы значительно облегчили бы доступ общественности для понимания и оспаривания существующих законов. Разработка тестовых случаев может выявить лазейки в законах. Законодатели могли бы даже публиковать законы, которые находятся в процессе разработки, в общедоступном репо, позволяя участникам/наблюдателям голосовать за принятие запросов на включение от общественности.

Такой сдвиг парадигмы в конечном итоге будет способствовать более широкому участию в разработке законодательства, что, возможно, полностью снизит важность наличия специальных представителей для разработки законодательства. Природа системы с открытым исходным кодом может привести к чему-то более похожему на прямую демократию.

Поскольку многие неанглоязычные страны пытаются внедрить юридический английский, чтобы помочь преодолеть разрыв в общении между нашей правовой системой и их собственной, акт перехода нашего общения к чему-то более формальному, такому как Пролог, поможет уравнять правила игры. Хотя некоторые из этих методов, используемых для смягчения беспорядка и путаницы в нашей правовой системе (текст с возможностью поиска и законы с ленивой оценкой), являются новыми, я считаю, что переход к программируемым законам все же был бы идеальным. Один из самых важных вопросов, оставшихся без ответа при реализации этого: «как мы поступаем с вводом данных»?

Большие данные

Правительства уже собирают всевозможные данные о своих гражданах, которые были бы полезны, если бы они были предоставлены нашей среде выполнения Prolog.

  • Семья (дети, родители, братья и сестры и т. д.)
  • Пол
  • Трудовая книжка
  • Раса, этническая принадлежность
  • История жилища
  • Налоговая история
  • История зарегистрированного автомобиля
  • Медицинские записи (Возможно, потребуется вытащить по требованию)

Представьте, если бы вместо того, чтобы человек заполнял документы при обращении в DMV, он обновлял свой профиль гражданства, который вводился в эту систему.

Это, конечно, открывает перед нами совершенно другую дискуссию об использовании больших данных в государственном секторе для политических экспериментов и исследований. Кое-где она уже началась, и ее преимущества становятся очевидными — но это уже более широкий разговор. Перевода бухгалтерского учета нашего правительства на электронные записи было бы более чем достаточно, чтобы помочь кодифицировать основную информацию о гражданах, чтобы уменьшить ввод данных, необходимых для оценки программируемых законов в отношении поведения и личности.

Конечно, ввод некоторых данных всегда будет требоваться на основании конкретного судебного дела; Большие данные просто снизят стоимость такого процесса. И, безусловно, есть еще много вещей, которые следует учитывать при таком резком изменении парадигмы.

Какую роль в этом процессе будут играть судьи? Какой процесс развертывания может потребоваться для законов об открытом исходном коде? Насколько мы можем свести к минимуму различные толкования законов? И если мы их слишком уменьшим, как это может изменить структуру нашего правительства?

В конечном счете, учитывая то, чего пытается достичь наша правовая система, я думаю, что использование языка программирования, такого как Пролог, для кодификации законов с использованием уроков, извлеченных из программного обеспечения с открытым исходным кодом, является правильным инструментом для правильной работы.

Что вы думаете?