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
PHREEQC solved this for aqueous geochemistry thirty years ago, and its input files still read today.
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.
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 specification is published separately from the implementation. Writing a second engine requires no permission, and the conformance suite settles whether it conforms.
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 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.
A profile describes what an implementation claims, not a tier it passes. Core is always accepted, whatever else is declared.
The foundation: reservoirs, species, processes, fractionation, kinetics, model and outputs.
SAMPLE and IDENTIFY, to recover a transformation chain from two signatures.
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.
A specification with a single implementation is a specification nobody has tested.
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.
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.
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 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.
All Rights Reserved by IsoFind