Open standard · Isotope Geochemistry Language

IGL, the language of isotopic models

An isotopic model fits in a text file, readable without the software that produced it, versionable like code, and meaning the same thing to every conforming engine. IGL is the specification of that file. It is natively integrated into IsoFind, which can emit its models and replay them, but IsoFind is a user of it and not its owner.

The language at a glance

VersionIGL 0.5
Blocks31 across three profiles
Diagnostics41 numbered codes
SpecificationCC BY 4.0
ImplementationMIT
Python packageigl-lang
In IsoFindnatively integrated
Why a language

A model should not live inside software

PHREEQC solved this for aqueous geochemistry thirty years ago, and its input files still read today.

The model outlives the tool

A project file locked in a proprietary format dies with the version that wrote it. An IGL file stays readable in a text editor, diffs line by line, and can be attached to a paper.

The method becomes citable

Publishing a result does not say how it was obtained. Publishing the model that produced it allows the result to be replayed, contested and reused on other data.

The language does not belong to its engine

The specification is published separately from the implementation. Writing a second engine requires no permission, and the conformance suite settles whether it conforms.

A complete model

Thirty lines, zero dependencies

A block header begins in column zero; its statements are indented. That single rule lets a block end implicitly at the next header, with no closing token and no nesting to track.

chromium-reduction.igl
# Chromium reduction in a closed system
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

The file above compiles, runs and returns an exact analytical value. It depends on no database, no network and no version of IsoFind.

Profiles

Sets of capabilities, not levels

A profile describes what an implementation claims, not a tier it passes. Core is always accepted, whatever else is declared.

core16

The foundation: reservoirs, species, processes, fractionation, kinetics, model and outputs.

identification2

SAMPLE and IDENTIFY, to recover a transformation chain from two signatures.

extended13

PHREEQC, adsorption, exchange, fitting, Monte-Carlo, sensitivity, plots and reports.

An implementation that meets a block belonging to a profile it does not claim refuses the model with diagnostic IG005. It does not skip it: silently ignoring a block produces a numerically plausible result from an incomplete model, which is worse than a refusal.

The proof

Two independent engines, one suite

A specification with a single implementation is a specification nobody has tested.

Conformance corpus

Models the language must accept and models it must reject, each carrying the diagnostic code it must produce. The corpus is generated from the specification's own examples: a specification edited without regenerating breaks the build rather than being noticed six months later.

Runtime corpus

Models whose expected value comes from a closed form, never from a recorded run. A test whose expectation came from the program it tests only measures that program's agreement with itself.

Two engines

A Rust engine and a Python engine pass the same checks, with no line copied from one to the other. That is the only proof that a specification can genuinely be reimplemented by a third party.

The standard lives on its own site

The specification, the block reference, the 41 diagnostics, the tools and the worked examples are published on igl-lang.org, independently of IsoFind. The source code is public.