Esta é uma questão muito interessante.
A lei está em algum lugar entre a linguagem cotidiana, com suas regras arbitrárias, em constante mudança e com frequência moderadas, e a linguagem de programação com suas regras definidas e muito específicas.
O legalês realmente define seus termos e, portanto, muitas palavras (mas não todas!) Usadas na lei realmente têm significados precisos.
No entanto, é na interpretação que sua abordagem de apresentar um caso a um sistema lógico e obter um resultado falhará. A lei é uma definição genérica que precisa ser adaptada ao caso específico em questão. Muitas vezes, esse é um processo simples e trivial, mas não há garantia de que seja e não existe uma maneira não trivial de definir o limite.
Um bom exemplo é a autodefesa. Na maioria dos sistemas jurídicos, você pode ferir legalmente outra pessoa, desde que esteja agindo em legítima defesa. No entanto, o texto é explicitamente sensível ao contexto. Por exemplo, a lei criminal britânica escreve:
Uma pessoa pode usar a força que for razoável nas circunstâncias na prevenção do crime [...]
A jurisprudência define o que é "razoável" em casos específicos , mas nenhuma definição geral está nos livros. Há também jurisprudência esclarecendo o que exatamente "prevenção do crime" significa. Como, por definição, um crime ainda não ocorreu, muito menos um tribunal que decidiu que a ação era, de fato, um crime, uma crença razoável é suficiente neste caso em particular, mas isso não está realmente escrito na lei!
Para criar um tomador de decisão digital sobre a lei, você teria que alimentá-la não apenas a lei em si, mas também toda a jurisprudência, muita compreensão da linguagem natural e muitas regras sobre como aplicar todo esse conhecimento, porque às vezes a jurisprudência é sólida, às vezes você pode entendê-la (especialmente se for antiga, pois as interpretações mudam com o tempo).
E, finalmente, a lei muda e se adapta, não apenas no livro, mas também em suas interpretações. Existem muitos exemplos famosos de tribunais superiores que anulam sua própria decisão de 20 anos. Muitas vezes, esses desafios à jurisprudência anterior acontecem exatamente porque um juiz decidiu contrariar essas leis estabelecidas e ele prefere correr o risco de ser anulado no tribunal superior do que proferir uma decisão que ele não defende. Gostaria de saber como você modelaria essa capacidade em um sistema NP-completo?
Para calcular a complexidade de um sistema, precisamos entender as entradas e saídas. A lei, no entanto, é um sistema aberto. Literalmente, qualquer coisa em seu ambiente pode influenciá-lo, especialmente mudanças na sociedade e na cultura. A maioria dos países possui leis que raramente são aplicadas porque a sociedade mudou, mas o processo legislativo fica para trás. Leis contra a homossexualidade são um exemplo atual. Ou a sentença de morte, que na maioria dos países não era aplicada há anos ou décadas antes de ser removida dos livros de direito. E não porque não houvesse casos em que pudesse ter sido aplicado, mas simplesmente porque os juízes não o aplicaram, apesar de ter a opção.
Esses fatores ambientais tornam quase impossível uma estimativa de complexidade, porque não podemos enumerá-los em uma lista finita, a menos que utilizemos todos os quantores (por exemplo, "todo tipo de ..." ou "todo o ...")