Worked Example · D1

Stress-Test a Hull Against a Missing Competitor

Withhold one stable LiP database entry and measure how the same OQMD Li–P snapshot changes hull membership, decomposition geometry, and the resulting claim.

Remove a phase only after inspecting what it represents

Open the withheld entry and its neighbouring hull phases in the database interface, inspect their compositions, structures, identities, and source metadata, then compare the complete and reduced phase diagrams side by side. Follow how the tie line and decomposition products change rather than reading only a changed scalar distance. Use structure and data sources, electronic-property tools, and literature sources to ask whether the phase set is physically and historically complete.

Challenge the attributed result: the companion script performs a controlled omission on the same frozen OQMD snapshot. It demonstrates phase-set sensitivity; it does not show that LiP should be excluded or establish a new Li-P hull.

Use this example after rebuilding the full frozen Li-P hull. It removes one represented competitor without changing any energy, then shows which hull membership and decomposition claims change.

From the repository root, print the baseline and controlled-omission records:

python3 examples/practical-guides/li_p_convex_hull.py

Inspect hull_vertices and phase_set_sensitivity first. The latter keeps the exclusion ID, the affected entry, and the before/after distances together; do not copy the reduced vertex list without that context.

Follow the changed facet

With all 46 rows, OQMD entry 2053607, Li4P3, is 0.00452626 eV/atom0.00452626\ \mathrm{eV/atom} above the LiP-Li3P7 tie line. Withholding OQMD entry 17007, the lowest LiP row, makes the same Li4P3 row a vertex of the reduced-set hull. Its composition and energy did not change; only the feasible competitor set changed.

Confirm that the complete and reduced reports use the same input energies, normalization, tolerance, and algorithm. Then identify every vertex, facet, decomposition product, and membership label that changes.

Record absence rather than editing data

A phase can be excluded for a wrong component set, charge, thermodynamic state, method, correction scheme, or failed calculation status. A bounded database query or structure search can also leave a phase absent. Record the exact entry and reason, and write a new derived result. Do not delete the source row or silently substitute the reduced hull for the baseline.

Repeat this type of test by withholding each vertex in turn, adding plausible candidates, perturbing near-hull values within a documented uncertainty model, or changing a correction scheme coherently. These are claim-sensitivity tests, not permission to omit an inconvenient competitor.

Claim boundary

The reduced result is not arithmetically wrong; it solves a different optimization problem. It cannot support an unqualified statement that Li4P3 is stable. The conclusion must identify the phase set and why entry 17007 is absent.

This fixture executes no DFT and supplies no uncertainty model for the stored energies. It does not show that LiP should be excluded, that Li4P3 is a physical ground state, or that the full frozen OQMD phase set is exhaustive.

Official sources

Visual reference

Side-by-side Li-P convex hulls showing Li4P3 above the complete-set hull and on the reduced-set hull after one LiP competitor is withheld.
With the LiP competitor present, Li₄P₃ lies above the LiP–Li₃P₇ tie line; withholding that one entry promotes the unchanged Li₄P₃ point onto the reduced-set hull. Open the full-size figure.

Ways to work: Python

Companion checked with: Python 3.12.

Reproducibility note

The companion material was checked with Python 3.12. It tests only the bounded software or analysis behaviour described here; it does not establish numerical convergence, model validity, or a material property.