Post 1 set out seven steps. This is the seventh: taking whatever survives post 11's sparse regression and checking it — term by term — against GKA, Mott-Hubbard, and ZSA before it earns a place in anything I'd call a rule.
A discovered formula that passes post 11's cross-validation and sign-checking is still just a fitted equation. It earns the word “rule” only after it's checked against the three theoretical frameworks this entire series has been built around — GKA for the magnetic side, the Mott criterion for the metal–insulator boundary, and ZSA for which mechanism sets the gap at all. That checking, plus the resulting compiled set of conditional rules, is the rule bank, and it's the last step on post 1's original list.
What a rule bank actually is
Not one equation. A small set of conditional rules, each with its own formula, its own validity domain, and a record of which theoretical limit it was checked against. A single global formula across the whole MโCแตง dataset would almost certainly average over real mechanism changes — the whole point of the ZSA classification in post 4 is that Mott-Hubbard and charge-transfer compounds obey different physics, so a rule bank should contain at least one branch per regime, not one formula trying to cover both.
| Regime | Condition | Formula form | Checked against | Status |
|---|---|---|---|---|
| Charge-transfer, near-180° | ฮCT < −0.3 eV, angle > 150° | gap ≈ f(ฮCT, angle, …) | ZSA CT branch, GKA rule 1 | template — fill in once post 11's regression runs on real data |
| Mott-Hubbard | ฮCT > 0.3 eV | gap ≈ g(U/W, …) | Mott criterion (U/W ≈ 1) | template |
| Near-90° pathway | angle ≤ 100° | magnetization ≈ h(d-count, …) | GKA rule 3 | template |
| Mechanism boundary | |ฮCT| < 0.3 eV | — flagged, not fit | ZSA crossover | expected low-confidence zone |
That table is deliberately a template, not a result — the formula forms get filled in once post 11's regression actually runs against real compound data. What's fixed in advance is the structure: every row needs a condition, a form, and a named theoretical check before it's trusted.
Application: an automated theory-check harness
Eyeballing whether a coefficient's sign matches GKA rule 1 doesn't scale past a few terms, and it's exactly the step where it's easiest to talk yourself into a match that isn't really there. The code below turns each theoretical check from this series into a function that takes the fitted formula and returns pass/fail plus a reason — meant to run on whatever LassoLarsIC or gplearn model post 11 produced.
# run against the fitted formula from post 11, not hand-checked
import numpy as np
def check_gka_sign(coef_angle_term, expected_sign):
"""GKA: a near-180° / half-filled-like d-count term should push
toward AFM the way rule 1 predicts — sign has to match, not just
the magnitude or the R²."""
ok = np.sign(coef_angle_term) == expected_sign
return ok, ff"angle term sign {'matches' if ok else 'CONTRADICTS'} GKA rule 1"
def check_mott_criterion(formula_fn, u_over_w_grid):
"""Mott-Hubbard: predicted gap should collapse toward zero as
U/W drops below ≈1 — the textbook threshold, not some arbitrary
crossing the regression happened to land on."""
gaps = [formula_fn(u_over_w=x) for x in u_over_w_grid]
crossing = next((x for x, g in zip(u_over_w_grid, gaps) if g <= 0), None)
ok = crossing is not None and abs(crossing - 1.0) < 0.3
return ok, ff"gap→0 crossing at U/W={crossing}"
def check_zsa_branch(formula_fn):
"""ZSA: sensitivity to ฮ_CT should be the dominant term on the
charge-transfer side and weak relative to U on the Mott-Hubbard
side — not the same dependence on both sides of ฮ_CT=0."""
sens_neg = formula_fn(delta_ct=-0.5) - formula_fn(delta_ct=-0.4)
sens_pos = formula_fn(delta_ct=0.5) - formula_fn(delta_ct=0.4)
ok = abs(sens_neg) > abs(sens_pos)
return ok, ff"ฮ_CT sensitivity: {sens_neg:.4f} (CT side) vs {sens_pos:.4f} (MH side)"
Every row in the rule-bank table above only gets to flip from “template” to a real status once it has a function call like these attached to it, with a real pass/fail and a real number — not a description of what the check would show.
Where the rule bank breaks, and why that's the interesting part
Posts 5, 6, 9, and 10 each flagged specific places a clean theoretical picture was expected to fail — tellurides with extra covalency, distorted structures with multiple competing M–X–M angles, the ฮCT ≈ 0 boundary zone. A rule bank that passes every check everywhere, with no flagged exceptions, is more likely a sign the candidate library in post 11 wasn't expressive enough to capture a real failure mode than evidence the textbook physics holds exactly everywhere. The compounds where a check fails are exactly the ones worth a closer individual look — against DFT, against the original literature value, against whether the structure actually has the single dominant pathway the formula assumes.
Closing the loop
Post 1 listed building the dataset, engineering descriptors, testing structure against electronic properties, testing structure against magnetic properties, testing the coupling between the two, searching for an explicit formula, and validating it against theory. Eleven posts later, all seven steps have a post. That's a reasonable point to pause the conceptual arc and let the next direction be set by whatever the rule bank actually turns up once it's run on real data — new compounds to predict, exceptions worth chasing individually, or a expanded dataset built specifically to stress-test wherever the bank turned out weakest.
0 Comments