- Catala es un lenguaje específico de dominio para derivar algoritmos faithful-by-construction a partir de textos legislativos, y un lenguaje de programación orientado a la programación literaria de legislación social y fiscal
- La implementación se escribe reuniendo materiales sobre los mecanismos sociales y fiscales que se van a implementar, como leyes, decretos de aplicación y jurisprudencia, y luego anotando en código el significado de cada línea de cada artículo
- El compilador de Catala puede generar una versión PDF de la implementación, legible para abogados, a partir de código completado y probado; el lenguaje fue diseñado en colaboración con expertos legales para que estos puedan revisarlo y certificar su precisión
- Los conceptos clave son definition-under-conditions y la lógica por defecto, basados en A Logic for Statutes de la profesora Sarah Lawsky; la estructura lógica del lenguaje imita la estructura lógica del derecho
- Como herramientas de desarrollo, ofrece resaltado de sintaxis para varios editores de texto, una extensión de VSCode, un servidor LSP dedicado, navegación de código, autocompletado, UX para la suite de pruebas y el formateador
catala-format - Para aprendizaje y referencia, se puede acceder al Catala book, al Catala tutorial, a la cheat sheet de gramática en francés e inglés, y a la documentación del compilador de la versión más reciente de
master - El compilador y el código del repositorio se distribuyen bajo Apache license version 2, salvo que se indique una licencia distinta en subdirectorios específicos
- Catala es un proyecto de investigación de Inria, y el compilador aún es inestable y carece de algunas funciones
1 comentarios
Opiniones de Hacker News
Este proyecto parece asumir implícitamente que es bueno especificar formalmente los textos legales y contar con un sistema capaz de interpretar las leyes de manera mayormente mecánica.
Yendo más allá, implica ver el sistema actual de intérpretes humanos, con discrecionalidad y márgenes de error, como un problema que debe superarse. No me opongo por completo a esa suposición, pero tampoco está claro que sea correcta, y no parece que los autores hayan presentado argumentos que la respalden.
Desde la perspectiva de alguien que conoce el proceso de convertir legislación en código, puedo entender lo que intenta hacer este proyecto, incluso si su valor se limitara a dar mayor claridad a los desarrolladores de software.
Creo que esto también está estrechamente relacionado con el Estado de derecho. Según https://www.britannica.com/topic/rule-of-law, la ley debe ser pública y clara, tener forma general y aplicabilidad universal, contener requisitos definidos que las personas puedan consultar antes de actuar, y las obligaciones legales no deberían crearse retroactivamente. Me pregunto cuál sería la ventaja de una ley ambigua.
Cuando estudiaba Derecho, como programador me interesaba bastante este campo, y encontré una gran comunidad francófona dedicada a este tipo de trabajo legalista. El profesor de mi universidad que estaba interesado en esto también parecía inclinarse hacia esa esfera de influencia.
Durante años estuve tratando de convencer a un amigo abogado de que sería bueno tener exactamente algo así, y resulta que probablemente ya existía desde hace tiempo.
Me parece realmente genial. Todas las leyes deberían escribirse en un lenguaje como este y publicarse con resaltado de sintaxis y reglas de formato consistentes. Después, los planes de estudio escolares deberían incluir el aprendizaje de este lenguaje legal. Eso mejoraría mucho la capacidad de la gente para leer la ley y confiar en su propia comprensión, y sería un gran beneficio para la sociedad.
En la realidad, las leyes ya están escritas en un lenguaje relativamente común, y las palabras casi siempre significan lo mismo que en el inglés cotidiano. El problema es que los conceptos jurídicos que esas palabras describen son complejos, y a menudo se entrelazan referencias a otras leyes, reglamentos, jurisprudencia, etc.
Al mismo tiempo, también hay casos en los que la ley está codificada, como el Uniform Commercial Code. Es decir, casos en los que la jurisprudencia se reescribió de forma coherente y se consolidaron los parches.
Sería interesante también “entrelazar” casos de prueba. La superficie de trabajo donde se tocan las oraciones lógicas es precisamente donde entran los bugs.
Especialmente alrededor de eventos temporales, y eso lleva a modelos formales y también a más bugs. Normalmente, si hay una regla sobre una clave, se necesitan al menos tres pruebas¹: un caso mayor, un caso igual y un caso menor. Si no hay tipos, etc., también hacen falta entradas negativas, null y límites de máximos/mínimos.
Por ejemplo, se podrían tener pruebas basadas en líneas de tiempo como “cuando la regulación se aprueba tres meses después, y las partes ya no pudieron ejercer B, pero aun así se vertieron ‘17 toneladas’ de residuos…”. Si se integrara un verificador de modelos, ayudaría mucho. Legislación verificada formalmente o, al menos, un pipeline tipo DevOps para el proceso de codificar el lenguaje en código.
¹ https://en.m.wikipedia.org/wiki/Equivalence_partitioning
Muchas leyes contienen muchas expresiones ambiguas. Un buen ejemplo es la reciente normativa de la UE sobre si permitir o no vehículos rusos. Aun así, cuando se intenta “digitalizar” la ley como lenguaje de programación, podría ser una buena idea para encontrar todas las ambigüedades o definiciones vagas posibles.
Es parecido a intentar convencer a un revisor de que el código funciona, demostrándolo con pruebas unitarias, de integración y de extremo a extremo. Sería tener pruebas de extremo a extremo para el sistema legal.
Yendo un paso más allá, también se podría escribir un conjunto de pruebas y generar automáticamente el rango de leyes posibles que satisfagan esas pruebas.
Me gustaría ver más un formato estándar de conjunto de pruebas que especifique la intención de la ley
En el estado donde vivía antes, se propuso con buenas intenciones una ley muy simple contra la pornografía infantil, pero era demasiado simple. Era más o menos algo como: “quien envíe por celular una foto explícita de un menor comete el delito de distribución de pornografía infantil”; estaba escrito en términos legales, pero no con mucho más detalle que eso. Llamé al autor del proyecto de ley y le pregunté si, bajo la nueva ley, mi hija hipotética se convertiría en delincuente grave si le enviaba una foto desnuda de sí misma a su novio; su reacción fue “¡ay, no, eso no era lo que quería decir!”, y al final retiró el proyecto para reescribirlo
Uno podría imaginar tratar esto como código de programa y agregar pruebas como “esta ley no se aplica cuando un menor envía una foto de sí mismo”. Eso obligaría a los legisladores a aclarar su intención, y si dicen “no vamos a usar la ley de seguridad infantil en línea para prohibir contenido favorable a personas trans”, se podría responder “bien, pongámoslo como caso de prueba”. El obstáculo decisivo es que a los políticos no les gusta quedar atados de esa manera
También haría más fácil escribir leyes que reflejen la intención, y serviría para que los tribunales futuros evalúen la intención de la ley. Aunque la redacción literal aplicara a un adolescente de 15 años que envía una selfie, si la prueba deja claro que no era la intención, podría resultar absuelto. Será imposible por cientos de razones, pero se puede soñar
Es decir, no debería ser una forma de redactar leyes deliberadamente ambiguas para que tengan un alcance amplio y dejar que la gente las pelee en los tribunales
La ley no necesita poder ejecutarse en una computadora. Trata de la intención y su interpretación, así que el conjunto de pruebas en sí mismo sería, en la práctica, parte de la ley; basta con incluirlo dentro de la ley
Personalmente, me conformaría con que cualquier país adjuntara a cada ley su exposición de motivos. Si fuera posible, también estaría bien agregar indicadores clave de desempeño para ver si funciona. Más adelante se podría reevaluar si la ley realmente está funcionando, si tiene efectos contraproducentes o si sus principales casos de aplicación difieren de las razones por las que se introdujo originalmente
[1] https://www.aclu.org/news/juvenile-justice/minnesota-prosecu...
En el libro Moving Mars (1993), de Greg Bear, aparece brevemente algo parecido con el nombre Legal Logic. Los humanos marcianos lo usan con ayuda de una IA al crear las leyes de una sociedad recién independizada
Greg Bear fue un famoso autor de ciencia ficción que falleció hace menos de un año, y su obituario también se comentó aquí en aquel momento. Fue uno de los autores que más influyeron en mi adolescencia, así que recuerdo que, en particular, este elemento de Moving Mars estimuló mi imaginación, y me gustaría leer qué ofrece Catala
[1] https://en.wikipedia.org/wiki/Greg_Bear
[2] https://en.wikipedia.org/wiki/Moving_Mars
[3] https://news.ycombinator.com/item?id=33679668
[4] https://news.ycombinator.com/item?id=33675708
Hay un artículo que describe este lenguaje: https://hal.inria.fr/hal-03159939. También hay un resumen breve en video: https://youtu.be/OiaFTFSAa1I
A los programadores les gusta proponer que se use algo parecido a un “lenguaje de programación” para las leyes
Pero eso pasa por alto que la ambigüedad, en cierto sentido, es una parte fundamentalmente importante del derecho. Porque el mundo mismo, en cierto sentido, es fundamentalmente ambiguo, y en otros sentidos se divide con claridad. Por supuesto, no toda clase de ambigüedad es deseable
Sin embargo, creo que si “el código es la ley”, las formas de explotar vacíos legales empeorarían. Incluso muchas leyes deberían centrarse más en los valores que deben respetarse que en los detalles de implementación, y eso inevitablemente será menos claro y más ambiguo
No voy a debatir si esto es un problema de la ley o de su aplicación, pero en cualquier caso nuestra sociedad está construida sobre la ambigüedad y la aplicación desigual
value.fair_marketen la sección concepts [0]. Los abogados pueden discutir sobre su significado, pero las definiciones en competencia también pueden definirse como programasEstoy de acuerdo en que la atención sobre la ley debería centrarse en los resultados más que en los detalles de implementación. Para eso se necesitaría una forma de crear funciones de evaluación que midan los resultados de las nuevas leyes, y sistemas como Catala pueden ayudar a modelar los resultados esperados y a elegir entre proyectos de ley en competencia. Por ejemplo, si el resultado es “queremos reducir la contaminación”, la política podría ser “prohibir las industrias contaminantes” o “gravar las externalidades de la contaminación”; ambas producirían resultados complejos, así que sería mejor contar con análisis automatizado y mediciones empíricas
[0] https://github.com/CatalaLang/catala#concepts
No estoy seguro de que haya un gran problema por resolver para que las computadoras realmente razonen sobre el texto legal. La parte compleja es sopesar la equidad, y eso sigue requiriendo humanos y abogados.
Me pregunto si hay legisladores, abogados o jueces que estén esperando esto, o si solo lo esperan los programadores.
No confío mucho en nuestro sistema legal. No sé por qué preguntas.
Como hablante de catalán, el conflicto de nombres con el idioma del que habla el artículo me parece muy desafortunado.
La elección del nombre es realmente desafortunada. Es parecido a ponerle a un lenguaje de programación “français”, “Deutsch” o “English”.
Más abajo en el readme dice: “este lenguaje lleva el nombre de Pierre Catala”. Sugeriría cambiarlo mejor a PierreLang.
Como hablante nativo de catalán, el nombre me sorprendió bastante, pero si es un apellido común, tiene sentido.