Questa è una domanda molto interessante
La legge è a metà strada tra il linguaggio quotidiano con le sue regole arbitrarie, in costante cambiamento e spesso morbide, e il linguaggio di programmazione con le sue regole molto specifiche e definite.
Il legalese in realtà definisce i suoi termini e quindi molte parole (ma non tutte!) Utilizzate nella legge hanno in realtà significati precisi.
Tuttavia, l' interpretazione è il punto in cui l'approccio di presentare un caso a un sistema logico e ottenere un risultato fallirà. La legge è una definizione generica che deve essere adattata al caso specifico in questione. Spesso si tratta di un processo banale e diretto, ma non esiste alcuna garanzia che lo sia e non esiste un modo non banale per definire il confine.
Un buon esempio è l'autodifesa. Nella maggior parte dei sistemi giuridici, è possibile ferire legalmente un'altra persona a condizione che si stia comportando per legittima difesa. Tuttavia, la formulazione è esplicitamente sensibile al contesto. Ad esempio, la legge penale britannica scrive:
Una persona può usare la forza che è ragionevole nelle circostanze nella prevenzione del crimine [...]
La giurisprudenza definisce ciò che è "ragionevole" in casi specifici , ma nessuna definizione generale è sui libri. C'è anche una giurisprudenza che chiarisce cosa significa esattamente "prevenzione del crimine". Dato che per definizione un crimine non è ancora avvenuto, tanto meno un tribunale che ha deciso che l'azione era, in realtà, un crimine, in questo caso particolare è sufficiente una ragionevole convinzione , ma che in realtà non è scritto nella legge!
Per creare un decisore digitale sulla legge, dovresti dargli da mangiare non solo la legge stessa, ma anche tutta la giurisprudenza, molta comprensione del linguaggio naturale e molte regole su come applicare tutta quella conoscenza, perché a volte la giurisprudenza è solida, a volte puoi piegarla (specialmente se è vecchia, poiché le interpretazioni cambiano nel tempo).
E infine, la legge cambia e si adatta, non solo nel libro, ma anche nelle sue interpretazioni. Ci sono molti esempi famosi di tribunali supremi che annullano la loro decisione di 20 anni. Molto spesso, tali sfide alla precedente giurisprudenza si verificano esattamente perché un giudice ha deciso di andare contro quelle leggi stabilite e preferirebbe correre il rischio di essere annullato presso il tribunale superiore piuttosto che emettere una decisione che non regge. Mi chiedo come vorresti modellare questa capacità in un sistema NP completo?
Per calcolare la complessità di un sistema è necessario comprendere gli input e gli output. La legge, tuttavia, è un sistema aperto. Letteralmente qualsiasi cosa nel suo ambiente può influenzarlo, in particolare i cambiamenti nella società e nella cultura. La maggior parte dei paesi ha leggi sui libri che raramente vengono più applicate perché la società è cambiata, ma il processo legislativo è in ritardo. Le leggi contro l'omosessualità sono un esempio attuale. O la condanna a morte, che nella maggior parte dei paesi non era stata effettivamente applicata per anni o decenni prima che fosse rimossa dai libri di legge. E non perché non ci fossero casi in cui avrebbe potuto essere applicato, ma semplicemente perché i giudici non lo applicavano nonostante avesse la scelta.
Questi fattori ambientali rendono quasi impossibile una stima della complessità, perché non possiamo elencarli in un elenco finito a meno che non utilizziamo tutti i quantici (ad esempio "ogni tipo di ..." o "tutto il ...")