Source: https://guthlabs.ai/docs/instruments/general-equilibrium-ice-table-solver/

instrument / verified-with-binding-errata

# General Equilibrium ICE-Table Solver

The current ledger marks this instrument verified with errata that must be applied at binding time.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **verified-with-binding-errata**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/general-equilibrium-ice-table-solver/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/general-equilibrium-ice-table-solver/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/general-equilibrium-ice-table-solver/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/general-equilibrium-ice-table-solver/qualification/>)

## Ledger state

The current ledger marks this instrument verified with errata that must be applied at binding time.

**Area**: Chemistry & Materials

**Tranche**: tranche-8

**Evidence ID**: t8-009

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The core ICE-table and mass-action approach is standard, but the specification is not complete enough for an unqualified PASS. The exact unresolved ambiguity is the meaning and units of K: Kc, Kp, or activity-based K. The solver also needs explicit balancing validation, phase handling, admissible-extent constraints, residual verification, and safeguarded root-finding. It should honestly label results as ideal dilute-solution concentration calculations unless activities are supported.

### Formula and scope findings

- ICE-table setup plus numerical solution of the mass-action K expression is the standard method only after the reaction is balanced and stoichiometric coefficients are applied correctly to every species.

- The specification does not define whether K means Kc, Kp, or an activity-based thermodynamic equilibrium constant. Because the inputs are concentrations, the default must be explicitly Kc or activities approximated by concentrations.

- Newton-Raphson alone is not a sufficiently safe general solver: each iteration must enforce the physically admissible extent interval so that every equilibrium amount remains nonnegative and every denominator remains nonzero.

- The implementation must support negative extents when products are present initially or reactants are absent initially.

- The implementation must reject or separately handle pure solids and liquids, which do not belong in the equilibrium-constant expression, and must distinguish them from aqueous or gaseous concentration terms.

- The implementation must validate that the supplied equation is balanced and that all initial concentrations are nonnegative.

### Unit assumptions

- All listed concentrations are assumed to be in mol/L (M).

- K is assumed to be dimensionless thermodynamic Kc based on activities, or numerically treated as concentration-based Kc under the ideal dilute-solution approximation; the UI must state which convention is used.

- For a concentration expression, each species concentration is raised to its stoichiometric coefficient and pure solids or liquids are omitted.

- The extent x has units of mol/L when the ICE table is expressed in concentrations.

- If Kp is accepted, gas partial pressures and temperature are required; a pressure K cannot be used with concentration inputs without the appropriate conversion.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

A naive Newton-Raphson implementation initialized at x=0 encounters K=[B]/[A]^2=1/0 for the 2A ⇌ B trap, producing an undefined function value before it can iterate. The solver also must explicitly reject algebraic roots that produce negative concentrations and must expose the extent-direction convention.

## Errata and corrections

### Tranche errata

**extent_x / equilibrium_concentrations** · vector 4

x=-0.8, [A]=0.8, [B]=0.2

x=-0.2, [A]=0.2, [B]=0.8

own working solves 1=-5x => x=-0.2 and states '[A]eq=0-(-0.2)=0.2' and '[B]eq=1-0.2=0.8' explicitly, then the field ships x=-0.8 with concentrations swapped

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "balanced_equation": "A ⇌ B",
    "initial_concentrations": {
      "A": "1.0000000 M",
      "B": "0.0000000 M"
    },
    "Kc": 4
  },
  "expected_outputs": {
    "K_expression": "Kc = [B]/[A] = x/(1-x)",
    "extent_x": "0.80000000 M",
    "equilibrium_concentrations": {
      "A": "0.20000000 M",
      "B": "0.80000000 M"
    },
    "ice_table": {
      "A": {
        "initial": "1.00000000 M",
        "change": "-0.80000000 M",
        "equilibrium": "0.20000000 M"
      },
      "B": {
        "initial": "0.00000000 M",
        "change": "+0.80000000 M",
        "equilibrium": "0.80000000 M"
      }
    },
    "mass_action_check": "0.80000000/0.20000000 = 4.0000000"
  },
  "reference_data": {
    "method": "Solve x/(1-x)=4 within 0 <= x <= 1."
  },
  "working": "Initial: A=1, B=0. Change for A ⇌ B: A decreases by x and B increases by x. Therefore [A]eq=1-x and [B]eq=x. Set Kc=4: x/(1-x)=4. Multiply through: x=4-4x. Add 4x: 5x=4. Divide by 5: x=0.80000000 M. Then [A]eq=1-0.8=0.20000000 M and [B]eq=0+0.8=0.80000000 M. Check: 0.80000000/0.20000000=4.0000000."
}
````

## Related workflows

No source-defined multi-instrument workflow membership is recorded.

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json · VERIFIED_WITH_ERRATA`

- `evidence-tranche8/tranche8-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
