Esta es una pregunta muy interesante.
La ley se encuentra en algún lugar entre el lenguaje cotidiano con sus reglas arbitrarias, en constante cambio y a menudo suaves, y el lenguaje de programación con sus reglas definidas y muy específicas.
Legalés en realidad define sus términos y, por lo tanto, muchas palabras (¡pero no todas!) Utilizadas en la ley realmente tienen significados precisos.
Sin embargo, la interpretación es donde su enfoque de presentar un caso a un sistema lógico y obtener un resultado fallará. La ley es una definición genérica que debe adaptarse al caso específico en cuestión. A menudo, este es un proceso trivial y directo, pero no hay garantía de que lo sea y no hay una forma no trivial de definir el límite.
Un buen ejemplo es la defensa propia. En la mayoría de los sistemas legales, puede lastimar legalmente a otra persona siempre que actúe en defensa propia. Sin embargo, la redacción es explícitamente sensible al contexto. Por ejemplo, el derecho penal británico escribe:
Una persona puede usar la fuerza que sea razonable en las circunstancias en la prevención del delito [...]
La jurisprudencia define lo que es "razonable" en casos específicos , pero no hay una definición general en los libros. También hay jurisprudencia que aclara qué significa exactamente "prevención del delito". Dado que, por definición, aún no se ha producido un delito, mucho menos que un tribunal haya decidido que la acción fue, de hecho, un delito, una creencia razonable es suficiente en este caso particular, ¡pero eso no está escrito en la ley!
Para crear un tomador de decisiones digital sobre la ley, tendría que alimentarlo no solo la ley en sí, sino también toda la jurisprudencia, mucha comprensión del lenguaje natural y muchas reglas sobre cómo aplicar todo ese conocimiento, porque a veces la jurisprudencia es sólida, a veces se puede doblar (especialmente si es antigua, ya que las interpretaciones cambian con el tiempo).
Y finalmente, la ley cambia y se adapta, no solo en el libro, sino también en sus interpretaciones. Hay muchos ejemplos famosos de tribunales superiores que anulan su propia decisión de 20 años. Muy a menudo, tales desafíos a la jurisprudencia anterior suceden exactamente porque un juez decidió ir en contra de esas leyes establecidas y preferiría correr el riesgo de ser anulado en el tribunal superior que pasar una decisión que no respalda. Me pregunto cómo modelarías esta habilidad en un sistema NP-complete.
Calcular la complejidad de un sistema requiere que comprendamos las entradas y salidas. La ley, sin embargo, es un sistema abierto. Literalmente, cualquier cosa en su entorno puede influir en él, especialmente los cambios en la sociedad y la cultura. La mayoría de los países tienen leyes en los libros que rara vez se aplican porque la sociedad ha cambiado, pero el proceso de elaboración de leyes va a la zaga. Las leyes contra la homosexualidad son un ejemplo actual. O la sentencia de muerte, que en la mayoría de los países no se había aplicado durante años o décadas antes de que fuera eliminada de los libros de leyes. Y no porque no haya casos en los que podría haberse aplicado, sino simplemente porque los jueces no lo aplicaron a pesar de tener la opción.
Estos factores ambientales hacen que una estimación de complejidad sea casi imposible, porque no podemos enumerarlos en una lista finita a menos que usemos todos los cuantificadores (por ejemplo, "todo tipo de ..." o "todo el ...")