5 pontos por GN⁺ 2023-09-18 | 1 comentários | Compartilhar no WhatsApp
  • Catala é uma linguagem específica de domínio para derivar algoritmos faithful-by-construction a partir de textos legislativos, e uma linguagem de programação voltada à programação literária de legislação social e fiscal
  • A implementação é escrita reunindo materiais sobre os mecanismos sociais e fiscais a serem implementados, como leis, decretos de execução e jurisprudência, e então anotando em código, artigo por artigo, o significado de cada linha
  • O compilador Catala consegue gerar, a partir do código concluído e testado, uma versão em PDF da implementação legível por advogados; a linguagem foi projetada em colaboração com especialistas jurídicos para que eles possam revisar e certificar sua precisão
  • Os conceitos centrais são definition-under-conditions e lógica default, baseados em A Logic for Statutes, da professora Sarah Lawsky; a estrutura lógica da linguagem imita a estrutura lógica da lei
  • Como ferramentas de desenvolvimento, oferece realce de sintaxe para vários editores de texto, uma extensão para VSCode, um servidor LSP dedicado, navegação de código, autocompletar, UX para suítes de testes e o formatador catala-format
  • Para aprendizado e referência, há o Catala book, o Catala tutorial, uma cheat sheet de sintaxe em francês e inglês, e a documentação do compilador da versão mais recente em master
  • O compilador e o código no repositório são distribuídos sob a Apache license version 2, salvo quando uma licença separada estiver indicada em subdiretórios
  • Catala é um projeto de pesquisa do Inria, e o compilador ainda é instável e carece de alguns recursos

1 comentários

 
GN⁺ 2023-09-18
Comentários no Hacker News
  • Este projeto parece assumir implicitamente que especificar formalmente dispositivos legais e ter um sistema capaz de interpretar leis de forma em grande parte mecânica é algo bom.
    Indo além, isso equivale a ver o sistema atual de intérpretes humanos, com discricionariedade e margem de erro, como um problema a ser superado; não discordo totalmente dessa premissa, mas também não está claro que ela seja correta, e não parece que os autores tenham apresentado argumentos que a sustentem.

    • A motivação deste projeto provavelmente é muito mais prática do que filosófica, e você parece subestimar com que frequência a lei vira código executado em sistemas de TI de governos estaduais.
      Do ponto de vista de quem conhece o processo de transformar legislação em código, dá para entender o que este projeto quer fazer, mesmo que o valor se limite a dar mais clareza a desenvolvedores de software.
    • Isso parece bastante óbvio, e vejo como algo a que o direito já aspira. De qualquer forma, chegamos a leis muito precisas por meio da jurisprudência, mas chegar lá envolve custos jurídicos elevados. Pelo menos não me parece algo que precise ser defendido na página inicial do Catala.
      Acho que isso também está intimamente ligado ao Estado de Direito. Segundo https://www.britannica.com/topic/rule-of-law, a lei deve ser pública e clara, ter forma geral e aplicabilidade universal, conter requisitos definidos aos quais as pessoas possam recorrer antes de agir, e obrigações legais não devem ser criadas retroativamente. Fico curioso sobre quais seriam os benefícios de leis ambíguas.
    • Algumas leis, como cálculos de faixas de alíquotas, podem ser adequadas, mas acho que a maioria das leis não deveria ser codificada desse jeito.
    • Isso combina bastante com a tradição jurídica francesa. Basta lembrar Montesquieu dizendo que “o juiz é apenas a boca da lei”.
      Quando eu estudava direito, como programador, tinha bastante interesse nessa área e encontrei uma grande comunidade francófona fazendo esse tipo de trabalho legalista. Um professor da minha universidade que se interessava por isso também parecia tender para essa esfera de influência.
  • Passei anos tentando convencer um amigo advogado de que seria ótimo se existisse exatamente algo assim, e ao que parece provavelmente já existia o tempo todo.
    Acho realmente fantástico. Todas as leis deveriam ser escritas nessa linguagem e publicadas com realce de sintaxe e regras consistentes de formatação. Depois, o currículo escolar deveria incluir o aprendizado dessa linguagem jurídica. Isso melhoraria muito a capacidade das pessoas de lerem a lei e terem confiança no próprio entendimento, e seria um grande ganho para a sociedade.

    • Isso parece um grande mal-entendido sobre como a lei funciona de fato, provavelmente reforçado por dramas jurídicos que enfatizam jogos de palavras obscuros.
      Na realidade, as leis já são escritas em linguagem relativamente comum, e as palavras quase sempre têm o mesmo significado que no inglês comum. O problema é que os próprios conceitos jurídicos descritos por essas palavras são complexos, e muitas vezes se entrelaçam com referências a outras leis, regulamentos, precedentes etc.
    • Em princípio concordo, mas a lei em geral depende tanto de interpretação e jurisprudência que é difícil expressá-la e entendê-la do jeito esperado.
    • Os links podem ser a parte essencial. Se fosse possível rastrear precedentes, justificativas e citações até a fala primordial de Hamurabi, seria bastante educativo.
    • O grande problema é que se perderia toda a jurisprudência que veio interpretando a lei. É parecido com jogar fora dois séculos de relatórios de bugs e patches.
      Ao mesmo tempo, há casos em que a lei foi codificada, como o Uniform Commercial Code. Ou seja, um exemplo de reescrever a jurisprudência de forma consistente e consolidar os patches.
  • Seria interessante também “entrelaçar” casos de teste. A superfície de contato entre enunciados lógicos é justamente onde entram os bugs.
    Isso acontece especialmente em torno de eventos temporais, o que leva a modelos formais e a ainda mais bugs. Normalmente, se há uma regra sobre uma chave, você precisa de pelo menos três testes¹: maior que, igual a e menor que. Se não houver tipos etc., também são necessárias entradas negativas, null e valores de fronteira máximos/mínimos.
    Por exemplo, poderiam existir testes baseados em linha do tempo como: “quando a norma é aprovada três meses depois, e as partes ficaram impedidas de exercer B, mas ainda assim foram despejadas ‘17 toneladas’ de resíduos…”. A integração de um model checker ajudaria muito. Poderíamos ter legislação formalmente verificada, ou pelo menos um pipeline tipo DevOps para o processo de codificar a linguagem em código.
    ¹ https://en.m.wikipedia.org/wiki/Equivalence_partitioning

    • Não vai compilar — brincadeira, claro.
      Muitas leis contêm muitas expressões ambíguas. Um bom exemplo é a recente regulamentação da UE sobre permitir ou não veículos russos. Ainda assim, ao tentar “digitalizar” leis em uma linguagem de programação, pode ser uma boa ideia para descobrir todas as ambiguidades possíveis ou definições vagas.
    • Muito bom. Eu frequentemente consulto testes unitários para entender como devo usar código legado. Se as leis viessem acompanhadas de exemplos concretos como parte do documento jurídico, poderíamos testar tanto se as regras são logicamente consistentes quanto se nosso entendimento está correto.
      É parecido com tentar convencer um revisor de que o código funciona demonstrando isso com testes unitários/de integração/de ponta a ponta. Seria como ter testes de ponta a ponta no sistema jurídico.
    • Imaginando isso, seria aplicar desenvolvimento orientado a testes ao direito.
      Dando um passo além, também seria possível escrever um conjunto de testes e gerar automaticamente o escopo possível de leis que satisfaçam esses testes.
    • Seria bom ter testes unitários.
  • Gostaria de ver mais um formato padrão de conjunto de testes que explicite a intenção da lei
    Em um estado onde morei antes, propuseram, com boas intenções, uma lei muito simples de proibição de pornografia infantil, mas ela era simples demais. Era algo como “quem enviar pelo celular uma foto explícita de um menor comete o crime de transmissão de pornografia infantil”; estava escrito em linguagem jurídica, mas não era muito mais detalhado do que isso. Liguei para o autor do projeto e perguntei se, caso minha filha hipotética enviasse uma foto nua de si mesma ao namorado, ela viraria criminosa condenada por crime grave pela nova lei. A reação foi: “Ah, nossa, não era isso que eu queria dizer!”, e no fim ele retirou o projeto para reescrevê-lo
    Dá para imaginar tratar isso como código de programa e anexar testes do tipo “esta lei não se aplica quando um menor envia uma foto de si mesmo”. Isso obrigaria o legislador a deixar clara a intenção e, se ele dissesse “não vamos usar a lei de segurança infantil online para proibir conteúdo pró-trans”, você poderia responder: “ótimo, então vamos colocar isso como caso de teste”. O obstáculo decisivo é que políticos não gostam de ficar amarrados desse jeito
    Também ficaria mais fácil escrever leis que reflitam a intenção, e tribunais futuros poderiam usar isso para avaliar a intenção da lei. Mesmo que, pelo texto literal, ela se aplicasse a um jovem de 15 anos enviando uma selfie, se o teste deixar explícito que isso não era a intenção, poderia resultar em absolvição. Seria impossível por centenas de razões, mas dá para sonhar

    • Para que esse método seja eficaz, a intenção legislativa real teria de ser codificada corretamente; então talvez esse exemplo não fosse resolvido, e os legisladores precisariam agir de boa-fé
      Ou seja, não poderia ser uma forma de escrever leis deliberadamente ambíguas para abranger o máximo possível e deixar as pessoas brigarem nos tribunais
    • 99% do trabalho está em encontrar os casos limítrofes, e no direito o mais comum é explicitar esses casos limítrofes. Imagino que aquele legislador tenha voltado e acrescentado algo como “o envio, por um menor, de uma foto de si mesmo não será considerado violação deste dispositivo”
      A lei não precisa ser executável em um computador. Como se trata de intenção e de sua interpretação, o próprio conjunto de testes é, na prática, parte da lei; basta incluí-lo na lei
    • Em teoria, gosto disso até certo ponto, mas acho literalmente 100% impossível criar um “conjunto de testes” melhor do que o sistema judicial real
    • Testes para leis seriam bons, mas provavelmente teriam de ser “avaliados” pelo mesmo mecanismo que as aplica. Ou seja, pelos tribunais
      Pessoalmente, eu ficaria satisfeito se qualquer país anexasse à própria lei uma exposição de motivos. Se possível, seria bom anexar também indicadores-chave de desempenho para ver se ela funciona. Assim, mais tarde seria possível reavaliar se a lei de fato funciona, se produz efeitos contrários ou se seus principais casos de aplicação diferem do motivo pelo qual ela foi criada
    • É ótimo que o parlamentar tenha tido lucidez suficiente para retirar o projeto. Alguns estados, como Minnesota, parecem realmente processar ativamente casos de sexting entre menores
      [1] https://www.aclu.org/news/juvenile-justice/minnesota-prosecu...
  • Algo parecido aparece brevemente, com o nome Legal Logic, no livro Moving Mars (1993), de Greg Bear. Humanos marcianos a usam, com ajuda de IA, ao elaborar as leis de uma sociedade recém-independente
    Greg Bear foi um famoso autor de ficção científica que faleceu há menos de um ano, e seu obituário também foi discutido aqui na época. Ele foi um dos autores que mais me influenciaram na adolescência; lembro que esse elemento de Moving Mars, em particular, mexeu com a minha imaginação, e quero ler sobre o que o Catala oferece
    [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

  • Há um artigo que descreve essa linguagem: https://hal.inria.fr/hal-03159939. Também há um breve resumo em vídeo: https://youtu.be/OiaFTFSAa1I

  • Programadores gostam de propor que se use algo como uma “linguagem de programação” para leis
    Mas isso deixa passar que a ambiguidade, em certo sentido, é uma parte fundamentalmente importante do direito. O próprio mundo, em alguns aspectos, é fundamentalmente ambíguo e, em outros, se divide de forma clara. Claro que nem todo tipo de ambiguidade é desejável
    Porém, se “código é lei” virar realidade, acho que a exploração de brechas ficará pior. Além disso, muitas leis deveriam se concentrar mais nos valores a serem preservados do que nos detalhes de implementação, e isso é necessariamente menos claro e mais ambíguo

    • Concordo. Não acho que seja uma ideia ruim, mas a noção de leis perfeitamente definidas e perfeitamente aplicáveis me parece assustadora. Se todas as leis existentes hoje pudessem ser perfeitamente aplicadas e perfeitamente monitoradas, nossas vidas seriam completamente miseráveis
      Não vou discutir se isso é um problema da lei ou da execução, mas, de todo modo, nossa sociedade é construída sobre ambiguidade e aplicação desigual
    • Não vejo por que esse tipo de projeto e a ambiguidade precisariam entrar em conflito. Basta olhar value.fair_market na seção concepts [0]. Advogados podem discutir o que isso significa, mas definições concorrentes também podem ser definidas como programas
      Concordo que o interesse em leis deveria estar voltado para os resultados, não para detalhes de implementação. Para isso, precisamos de uma forma de criar funções de avaliação que meçam os resultados de novas leis, e sistemas como o Catala podem ajudar a modelar resultados esperados e escolher entre propostas concorrentes. Por exemplo, se o resultado for “quero reduzir a poluição”, a política pode ser tanto “proibir indústrias poluentes” quanto “taxar externalidades da poluição”; ambas geram consequências complexas, então análise automática e medição empírica seriam melhores
      [0] https://github.com/CatalaLang/catala#concepts
  • Não sei bem se há algum problema grande a ser resolvido para que computadores realmente façam inferências sobre o texto da lei. A parte complicada é a ponderação da equidade, e isso ainda exige humanos e advogados

    • Sim. Mas, se você criar um algoritmo a partir de uma tabela de alíquotas, a clareza pode ajudar, e às vezes a redação também parece ambígua. Provavelmente também serão necessários muitos exemplos. Ou seja, seriam necessários testes unitários
    • Vejo uma vantagem nessa linguagem. Ela pode tornar muito mais fácil escrever programas que calculam impostos e salários. Não sei o que mais ela poderia oferecer
      Fico curioso se há legisladores, advogados ou juízes esperando por isso, ou se só os programadores estão esperando
    • Acho que você quis dizer “humanos, advogados e subornos”
      Não tenho muita confiança no nosso sistema jurídico. Não sei por que pergunta
  • Como falante de catalão, a colisão de nome com a língua mencionada no texto me parece muito infeliz

    • Fico curioso para saber por que é infeliz. E gostei do seu nome de usuário. Imagino que muita gente tenha presumido que você falaria catalão só de ver esse nome
  • A escolha do nome é realmente infeliz. É parecido com dar a uma linguagem de programação o nome de “français”, “Deutsch” ou “English”
    Mais abaixo no readme está escrito: “esta linguagem recebeu o nome de Pierre Catala”. Eu sugeriria mudar para PierreLang

    • Está escrito: “esta linguagem recebeu o nome do professor de direito Pierre Catala, que foi pioneiro da legaltech francesa ao criar o banco de dados computadorizado de casos jurídicos Juris-Data”
      Como falante nativo de catalão, fiquei bastante surpreso ao ver o nome, mas, se for um sobrenome comum, faz sentido