Normativa algorítmica

Algoritmo de Euclides. Fuente: Wikipedia

En la conferencia VOTEID sobre voto electrónico que tuvo lugar en Suiza en 2015 a la que asistí como miembro de Agora Voting, un matemático contaba cómo el sistema de recuento de votos aplicado en las elecciones generales Australianas funciona con un sistema de Voto Único Transferible, pero que la ley estaba redactada de forma tan ambigua que al final dichas ambigüedades en el algoritmo de recuento eran resueltas por las empresas privadas encargadas del recuento, y que los criterios de resolución de las ambigüedades no eran públicos. Este matemático se había dedicado a formular matemáticamente el sistema de recuento según viene definido en la ley electoral Australiana, e incluso había propuesto una redacción de la ley más concreta atendiendo a estos problemas.

Según la Wikipedia un algoritmo es un “conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución.”

Como hemos visto en el ejemplo Australiano, en realidad esas propiedades que se presumen de un algoritmo también son deseables en una normativa de índole jurídica. ¿Y si las leyes se formulasen mediante algoritmos matemáticos?

Imagina un reglamento de circulación de tráfico rodado que dijese: “La velocidad máxima permitida de un vehículo en autovía será de 120km/h. En caso de que se supere más del 50% de la máxima velocidad permitida, la multa será de 600€, en otro caso la multa será de 300€.”.

El anterior podría ser un texto legal en vigor, formulado de forma tradicional en el idioma Español. El problema de los lenguajes naturales es que son ambiguos y no unívocamente interpretables; por ello hace falta en última instancia un juez; y a falta de ello, de un buen abogado. A veces los textos legales están mal redactados, con fallos de ortografía o de puntuación, con errores de lógica, casos no contemplados, etc. Por ejemplo en el texto de ejemplo no queda claro que sólo se multará al conductor, y que la multa de 300€ es sólo si se supera el límite máximo. Y créanme si les digo que este tipo de fallos es común en la legislación.

El mismo algoritmo podría formularse por ejemplo así:

def comprobar_velocidad_autovia(nombre_conductor_de_vehiculo, vehiculo_circula_por_autovia, vehiculo_velocidad):
    VelocidadMaximaEnAutovia = 120

    if not circula_por_autovia:
        return SinMulta()

    if vehiculo_velocidad >= VelocidadMaximaEnAutovia * 1.5:
        raise Multa(tipo=Monetaria, euros=500, sujeto=nombre_conductor_de_vehiculo)
    elif vehiculo_velocidad >= VelocidadMaximaEnAutovia:
        raise Multa(tipo=Monetaria, euros=300, sujeto=nombre_conductor_de_vehiculo)

La función anterior es una ley formulada mediante un código ejecutable por ordenador en el lenguaje de programación Python. Esto permite que cualquiera puede comprobar sin la necesidad de un abogado o un juez, tan sólo con un ordenador, qué multa obtendría simplemente ejecutando la función anterior con diferentes valores de entrada. Y sin lugar a dudas, para los mismos valores de entrada la función siempre devolverá el mismo resultado.

Si bien nuestro código legal de ejemplo es ejecutable, no está carente de ambigüedad. Cierto margen interpretativo es necesario en la legislación. Por ello le hemos dotado del nivel de ambigüedad estrictamente necesario, y hemos acotado y definido las tres variables interpretables que es necesario valorar para poder aplicar el algoritmo:

  1. el nombre del conductor del vehículo
  2. establecer si el vehículo circulaba por una autovía
  3. la velocidad a la que circulaba el vehículo

Este cambio es de gran trascendencia. De repente, las leyes dejarían de ser totalmente ambiguas. Sólo algunas variables correctamente acotadas y definidas lo serían.

Estas tres variables serían las que tendría que valorar la policía al establecer la multa. Lo podría hacer mediante información fiable como un radar de tráfico (velocidad del vehículo y tipo de vía por la que circulaba) e identificación visual del conductor a través de su documento de identidad si la policía hubiese parado al infractor. En caso de que se llegase a un juicio, serían de nuevo éstas las variables cuyo contenido debería establecer un juez; el resto de la ley está fuera de toda duda. Idealmente estas variables de entrada tenderían a valorarse de forma imparcial, veraz e independiente, por ejemplo la velocidad mediante un radar de carretera.

Por supuesto que realizar el esfuerzo de formular la ley en forma matemática sería más costoso y requeriría de un aumento sustancial de recursos en un órgano legislativo. Pero ¿Cuántos juicios y por tanto dinero, tiempo, y recursos nos ahorraríamos? ¿Cuántos errores y lagunas legales se corregirían? La formulación de la legislación mediante código ejecutable podría simplificar la labor de los jueces, y por tanto agilizar la justicia. Esto permitiría una justicia más rápida. También permitiría mayor transparencia y por tanto reducir la arbitrariedad en la aplicación de la ley, y en general un imperio de la ley más efectivo.

También podría ayudar a encontrar errores en el código legal antes de ser aprobado. De hecho, podrían aplicarse el mismo tipo de técnicas extensamente conocidas el mundo de la programación, entre otros:

  • Baterías de test unitarios, de forma que se compruebe que cada algoritmo resulta en el valor esperado al ser aplicado sobre valores de entrada de ejemplos de datos conocidos.
  • Baterías de test de integración, de forma que se compruebe que la nueva legislación no sea incompatible con otras normativas vigentes.
  • Pruebas con valores aleatorios para comprobar si el sistema es robusto a combinaciones extrañas.
  • Sistemas de integración continua, de forma que antes de que se proponga una nueva ley, se apliquen las baterías de pruebas se ejecuten automáticamente al escribir borradores de cambios legales.

A veces las leyes son ambiguas, y los políticos intentan convencer de que una nueva ley que se pretende promulgar en realidad dice una cosa cuando realmente dice otra. La normativa algorítmica eliminaría ese tipo debates debido a sus altos niveles de transparencia.

Desde el punto de vista de la legislación computacional:

  • El poder legislativo es el que redacta las leyes. Por tanto son los encargados de desarrollar/programar los algoritmos.
  • Tanto el poder ejecutivo como en general las personas físicas o jurídicas se mueven en un marco jurídico. Todos ellos son usuarios, que realizan acciones que pueden estar descritas en alguno de los algoritmos de la legislación vigente.
  • El poder judicial es quien interpreta las leyes y su correcta ejecución. El poder judicial es la autoridad que establece según la situación cuáles son los valores correctos de entrada en un algoritmo, qué algoritmo es aplicable, y cuál es el resultado de aplicar correctamente dicho algoritmo.
  • Los abogados son equivalentes a consultores que enseñan a utilizar un programa de ordenador.
  • Una de las labores a realizar por los abogados sería intentar “hackear la ley” buscando fallos que les permita ejecutar acciones con resultados no esperados por el legislador.

La legislación algorítmica puede que suene algo muy lejano, pero no lo es tanto. Muchas de las leyes relacionadas con la banca terminan siendo programadas en sistema informáticos. También existe una tendencia en el mundo de bitcoin en el uso de contratos privados llamados smartcontracts que está siendo aplicado por algunas empresas, y son un tipo de normativa algorítmica. Es natural que la normativa algorítmica se aplique primero en entidades pequeñas o privadas y luego vaya poco a poco aplicándose en ámbitos cada vez de mayor relevancia.

0 Responses to “Normativa algorítmica”



  1. Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s





A %d blogueros les gusta esto: