Standard ouvert · Isotope Geochemistry Language

IGL, le langage des modèles isotopiques

Un modèle isotopique tient dans un fichier texte, lisible sans le logiciel qui l'a produit, versionnable comme du code, et qui signifie la même chose pour tout moteur conforme. IGL est la spécification de ce fichier. Il est intégré nativement à IsoFind, qui sait émettre ses modèles et les rejouer, mais IsoFind en est un utilisateur et non le propriétaire.

Le langage en bref

VersionIGL 0.5
Blocs31 sur trois profils
Diagnostics41 codes numérotés
SpécificationCC BY 4.0
ImplémentationMIT
Paquet Pythonigl-lang
Dans IsoFindintégré nativement
Pourquoi un langage

Un modèle ne devrait pas vivre dans un logiciel

PHREEQC a résolu ce problème pour la géochimie aqueuse il y a trente ans, et ses fichiers d'entrée se lisent encore.

Le modèle survit à l'outil

Un fichier de projet enfermé dans un format propriétaire meurt avec la version qui l'a écrit. Un fichier IGL reste lisible dans un éditeur de texte, se compare ligne à ligne, et se dépose en annexe d'article.

La méthode devient citable

Publier un résultat ne dit pas comment il a été obtenu. Publier le modèle qui l'a produit permet de le rejouer, de le contester et de le réutiliser sur d'autres données.

Le langage n'appartient pas à son moteur

La spécification est publiée séparément de l'implémentation. Écrire un second moteur ne demande aucune autorisation, et la suite de conformité tranche la question de savoir s'il est conforme.

Un modèle complet

Trente lignes, zéro dépendance

Un en-tête de bloc commence en colonne zéro, ses instructions sont indentées. Cette seule règle permet à un bloc de se terminer implicitement au suivant, sans accolade ni imbrication à suivre.

chromium-reduction.igl
# Réduction du chrome en système fermé
TITLE
    Chromium reduction in a closed system
META
    author "Colin Ferrari"
    language 0.5
STANDARD
    standard NIST-SRM-979 0.11339 ratio 53Cr/52Cr
ISOTOPES
    ratio 53Cr/52Cr standard NIST-SRM-979
SPECIES
    species Cr(VI)
    species Cr(III)
RESERVOIR Groundwater
    volume 1 L
    Cr(VI) 1 umol/kgw
    delta53Cr 0 permil
PROCESS Reduction
    type reduction
    reactant Cr(VI)
    product Cr(III)
    location Groundwater
    extent 0.6
FRACTIONATION Reduction
    isotope 53Cr/52Cr
    epsilon -3.5
MODEL Closed
    progress extent
    processes [ Reduction ]
OUTPUT
    variable Groundwater.delta53Cr

Le fichier ci-dessus se compile, s'exécute et rend une valeur analytique exacte. Il ne dépend d'aucune base, d'aucun réseau et d'aucune version d'IsoFind.

Les profils

Des jeux de capacités, pas des niveaux

Un profil décrit ce qu'une implémentation revendique, non un palier qu'elle franchit. Core est toujours accepté, quel que soit le reste.

core16

Le socle : réservoirs, espèces, processus, fractionnement, cinétique, modèle et sorties.

identification2

SAMPLE et IDENTIFY, pour retrouver une chaîne de transformation à partir de deux signatures.

extended13

PHREEQC, adsorption, échange, ajustement, Monte-Carlo, sensibilité, tracés et rapports.

Une implémentation qui rencontre un bloc d'un profil qu'elle ne revendique pas refuse le modèle avec le diagnostic IG005. Elle ne l'ignore pas : ignorer un bloc en silence produit un résultat numériquement plausible à partir d'un modèle amputé, ce qui est pire qu'un refus.

La preuve

Deux moteurs indépendants, une même suite

Une spécification à implémentation unique est une spécification que personne n'a testée.

Corpus de conformité

Des modèles que le langage doit accepter et des modèles qu'il doit refuser, chacun portant le code de diagnostic attendu. Le corpus est engendré depuis les exemples de la spécification elle-même : une spécification modifiée sans régénération casse la construction au lieu d'être remarquée six mois plus tard.

Corpus d'exécution

Des modèles dont la valeur attendue vient d'une forme close, jamais d'une exécution enregistrée. Un test dont l'attente provient du programme qu'il teste ne mesure que l'accord de ce programme avec lui-même.

Deux moteurs

Un moteur Rust et un moteur Python passent les mêmes vérifications, sans qu'une ligne ait été copiée de l'un à l'autre. C'est la seule preuve qu'une spécification est réellement réimplémentable par un tiers.

La norme vit sur son propre site

La spécification, la référence des blocs, les 41 diagnostics, les outils et les exemples travaillés sont publiés sur igl-lang.org, indépendamment d'IsoFind. Le code source est public.