Skip to content

ResearchMethodsVolume 1, Issue 3, Spring 2025

The Common Ion Effect Is Taught Backwards

An exact numerical solver for precipitation equilibria finds that the common ion effect holds for barium iodate and calcium fluoride and reverses by four orders of magnitude for silver chloride, exactly where a real ligand is available.

Written jointly by the Science Journaling Club

Study
Computational study
Review
Peer-edited by the club review board
Length
12 sectionsabout 27 min

Abstract

Every general chemistry course states the common ion effect as a rule with no stated exceptions: add an ion the precipitate already contains, and its solubility falls. We built an exact solver for precipitation equilibria, one that carries the solubility product, stepwise complex formation, the anion's own acid-base speciation, and the water equilibrium as a single coupled system with nothing approximated away, and set it against three sparingly soluble salts. For barium iodate and calcium fluoride the rule holds everywhere on the grid we tried, and the solver's own zero-common-ion limit matches closed-form algebra to a few parts in 107. Silver chloride is where it breaks. Added chloride drives AgCl solubility down to a minimum of 3.11 × 10-7 M at 3.01 × 10-3 M added chloride, 223 times below the pure-water value, matching the order of magnitude the analytical-chemistry teaching literature has quoted for this minimum for eighty years [1][2]. Past that point, more chloride does the opposite of what every course says it should: at 5 M NaCl the solver returns 4.96 × 10-3 M dissolved silver, 15,900 times the minimum and 367 times the pure-water solubility, carried almost entirely as AgCl2-, AgCl32- and AgCl43- rather than as free Ag+. A hundred thousand Monte Carlo draws over an assumed ±0.05 log-unit uncertainty in the 1952 stepwise formation constants [4] never once erased the reversal: the location of the minimum moved by a few percent, its existence did not. Every mass balance, complex-formation expression and Ksp, evaluated at the converged solution, closes to a few parts in 1015 (machine precision); an independent full charge balance closes to a few parts in 109, limited by ordinary floating-point cancellation between [H+] and [OH-] near neutral pH, not by the model. Calcium fluoride shows a second, unrelated failure of the naive picture: at fixed added fluoride, dropping the pH from 7 to 0 raises its solubility 816-fold through protonation of F-, a channel the common-ion rule never mentions and one that, for this salt, never reverses. The textbook rule is not false, only incomplete: it is missing a clause. Seed 20250306.

The Rule, Taught Straight

Start with the version every student meets. Silver chloride, or calcium fluoride, or whichever sparingly soluble salt the textbook has on hand, sits in water at equilibrium: solid on one side, a small population of dissolved ions on the other, related by a solubility product Ksp=[M][A]K_{sp} = [\mathrm{M}][\mathrm{A}]. Dissolve some already-dissolved-looking sodium salt of the same anion into that water and the anion concentration jumps. The product [M][A][\mathrm{M}][\mathrm{A}] cannot exceed KspK_{sp}, so [M][\mathrm{M}] must fall, and since [M][\mathrm{M}] is the solubility, the salt becomes less soluble. That argument, taken alone, is complete and correct as far as it goes. Le Chatelier's principle gives the same answer from a different direction: stress an equilibrium by adding a product, and the system shifts to consume some of it, precipitating more solid. Every general chemistry syllabus we could find teaches one version or the other, usually both, usually with barium iodate or silver chloride as the worked example [1][3][9].

The rule earns its keep outside a beaker too. Soil chemists have used exactly this argument since the 1950s to explain why phosphate fertiliser becomes less available to plants in calcium-rich soil, where the calcium already dissolved suppresses the phosphate salts' own solubility by the identical mass-action logic [12]. A 2013 undergraduate lab exercise still teaches the effect the same way Zuffanti did in 1940: precipitate silver acetate, add more acetate, watch the precipitate grow [1][3]. A 1961 paper even demonstrated it with a radioactive tracer, so that "the solubility went down" could be read off a Geiger counter instead of a scale [2]. The argument generalises, it predicts a real and measurable direction of change, and it costs almost nothing to teach: one line of algebra, one appeal to a principle every student has already half-memorised.

None of that is in dispute here. What is missing from nearly every version of this rule we could find, including several aimed at correcting common misconceptions about KspK_{sp} itself [10], is a boundary. The rule as taught has no stated domain of validity: it gets presented the way a conservation law would, not the way an approximation would, and the distinction matters, because [M][A]=Ksp[\mathrm{M}][\mathrm{A}]=K_{sp} is only one equation. A real solution can hold several more.

What We Actually Built

The club has no bench and no balance, and nothing below pretends otherwise. What follows came out of a Python script, run on a laptop, that knows nothing about a real beaker beyond the equilibrium constants we typed into it. Given a sparingly soluble salt MA (or MA2), we solve, at a fixed added common-ion concentration and a fixed pH, the coupled system of:

the solubility product, Ksp=[M][A]K_{sp}=[\mathrm M][\mathrm A] or [M][A]2[\mathrm M][\mathrm A]^2; stepwise complex formation between the cation and the same anion, M+n A⇌MAn\mathrm M + n\,\mathrm A \rightleftharpoons \mathrm{MA}_n with cumulative constant βn=[MAn]/([M][A]n)\beta_n=[\mathrm{MA}_n]/([\mathrm M][\mathrm A]^n); the anion's own acid-base speciation, HA⇌H++A−\mathrm{HA}\rightleftharpoons \mathrm H^+ + \mathrm A^-, KaK_a; and the water equilibrium Kw=[H+][OH−]=1.000×10−14K_w=[\mathrm H^+][\mathrm{OH}^-]=1.000\times10^{-14} at 25°C, matching the precision value at 298.15 K [11], which fixes [OH−][\mathrm{OH}^-] once pH is treated as the externally held variable that professional geochemical modelling software also treats it as [16].

Nothing here is linearised or dropped. Every mass balance is written in full: total dissolved cation is the free ion plus every complex, weighted by nothing but its own concentration; total anion added is the free conjugate base, plus its protonated form, plus every anion tied up in a complex, weighted by stoichiometry. For silver chloride this reduces, after substituting [Ag+]=Ksp/c[\mathrm{Ag}^+]=K_{sp}/c (with c=[Cl−]c=[\mathrm{Cl}^-]) into both mass balances, to one equation in cc alone,

C=cf(pH)−Kspc+Kspβ2c+2Kspβ3c2+3Kspβ4c3,C = \frac{c}{f(\mathrm{pH})} - \frac{K_{sp}}{c} + K_{sp}\beta_2 c + 2K_{sp}\beta_3 c^2 + 3K_{sp}\beta_4 c^3,

where CC is the added chloride and ff is the fraction of the chloride family present as free Cl- rather than HCl (essentially 1 everywhere we look). Every term on the right of that equation is positive for c>0c>0, so the right side is strictly increasing in cc: for any CC there is exactly one physical root, found here by bisection on log⁡c\log c rather than by any method that could silently pick the wrong one. Total dissolved silver, x(c)x(c), is then algebraic. Ba(IO3)2 and CaF2 use the same construction with no complex-formation terms, since the club found no well documented complexation of Ba2+ with iodate or Ca2+ with fluoride strong enough to matter, and that omission is named here rather than hidden. Numerical treatments of exactly this kind of coupled system have their own small literature going back to at least 1966 [7][8], and professional geochemical modelling software solves the same class of problem at industrial scale [16]; our solver is a great deal smaller than PHREEQC and answers a great deal narrower a question.

Checking the Machine Before Trusting It

A solver that has not been checked is a guess with more decimal places. Four checks, in increasing order of how much they could have caught.

Every equilibrium and mass balance, at every grid point. We solved all three salts across 24 common-ion concentrations from 10-8 to 5 M crossed with 8 pH values from 0 to 14, 576 solves in total, and at each one substituted the converged concentrations back into KspK_{sp}, into every βn\beta_n expression, and into every mass balance. The worst relative residual over all 576 points, for any of these six checks, was 3.97 × 10-15, under 18 units of machine epsilon, about as close to zero as a double-precision float has any business getting.

An independent full charge balance. Real potentiometric determinations of Ksp lean on exactly this style of cross-check, trusting a known-addition titration only once its own electroneutrality closes [13]. Treating the common ion as a fully dissociated sodium salt and pH as held by an external strong acid or base, the required amount of that titrant can be computed two genuinely different ways: once from full electroneutrality, once from a proton condition referenced to water and the anion's own zero-proton level. The two are algebraically identical only if the mass balances hold, and disagreement here would mean the model's own bookkeeping was inconsistent somewhere charge-based rather than mass-based checks would catch. They agreed to 9.5 × 10-9 (Ba(IO3)2), 1.1 × 10-10 (CaF2) and 4.6 × 10-9 (AgCl): good, but not machine precision, and we did not smooth that over. The gap is catastrophic-cancellation noise between [H+] and [OH-] near pH 7, where both are of order 10-7 and their difference, which the check needs, is not. That gap is a property of subtracting two nearly equal floats, not of the chemistry, and it sits nine to eleven orders of magnitude below any number this article reports as a result.

Closed-form algebra. With no common ion added and pH high enough that the anion is fully deprotonated, Ba(IO3)2 and CaF2 both reduce to a cubic in the molar solubility xx, 4x3=Ksp4x^3 = K_{sp}, solvable in one line. We also solved that cubic a second way, independently, with numpy.roots, a general-purpose polynomial root finder that shares no code with the bisection solver. At four common-ion concentrations each the two methods agreed to between 1.3 × 10-16 and 9.2 × 10-16, which is to say they agreed completely.

The published minimum. Section 7 covers this at length, because it is where the interesting disagreement almost, but does not quite, appear.

Plain Arithmetic

Barium iodate first, because it has no complications. Ksp=1.57×10−9K_{sp}=1.57\times10^{-9}. With no common ion and the anion fully deprotonated, solubility satisfies 4x3=Ksp4x^3=K_{sp}, so

x=(1.57×10−94)1/3=7.32172×10−4 M.x = \left(\frac{1.57\times10^{-9}}{4}\right)^{1/3} = 7.32172\times10^{-4}\ \text{M}.

The solver, working the full coupled system rather than this shortcut, returns 7.321725 × 10-4 M: a relative difference of 3.9 × 10-7 from the hand calculation, and 2.4 × 10-4 from the commonly quoted textbook value of 7.32 × 10-4 M, which is rounded to three figures and should not be expected to agree any more closely than that. Add 0.01 M sodium iodate and the solver gives 1.5602 × 10-5 M, a 21-fold suppression, exactly the sign and roughly the size the rule predicts. No surprises, and starting with the clean case was the point.

Silver chloride in pure water is a better test, because the "simple" answer and the exact one are not quite the same number, and the gap is itself a small result. The naive formula is x=Ksp=1.77×10−10=1.330413×10−5x=\sqrt{K_{sp}}=\sqrt{1.77\times10^{-10}}=1.330413\times10^{-5} M, which is also the figure most general chemistry tables quote (1.33 × 10-5 M). The solver, which also accounts for the neutral ion pair AgCl(aq) forming even with no chloride deliberately added, returns 1.34986 × 10-5 M, 1.46% higher. That 1.46% is not solver error. At x=1.33×10−5x=1.33\times10^{-5} M, β1c≈1096×1.33×10−5≈0.0146\beta_1 c \approx 1096 \times 1.33\times10^{-5}\approx 0.0146, so about 1.4% of the dissolved silver in "pure water" AgCl solubility is already the neutral complex, not the free ion the textbook formula assumes is the only thing there, a small number on its own. Whether a reader finds it satisfying or irritating that even the control case is not quite the idealisation it gets taught as says something about how they will feel about §7.

Meeting 1
Picked the three salts by asking which sparingly soluble salts have a well documented complex-formation ladder for their own precipitating ion. Silver halides came up first, every time.

Meeting 1, later
Wanted a second salt with real pH sensitivity, for contrast. Fluoride was the obvious choice: a genuine weak base, well characterised, and CaF2 has no competing complexation to muddy the comparison.

Meeting 2
First version of the AgCl solver treated added chloride as equal to free chloride, ignoring how much gets consumed forming complexes. Fine at low concentration, visibly wrong once complex formation is the whole story, which is exactly the regime we needed right. Rewrote it around the full mass balance in §2.

Meeting 2
Charge-balance check came back at 0.35% relative error, nowhere near machine precision. Spent most of the meeting assuming a real bug. The culprit turned out to be a sign error in the hand-derived proton condition, not the solver; once corrected, agreement dropped to parts in 109, then stalled there, which turned out to be floating-point cancellation near pH 7 rather than a second bug. Documented in §3 instead of hidden.

Meeting 3
Argued for forty minutes about whether the AgCl chloro-complex constants were trustworthy enough to build an article's headline number on. Resolved by making the uncertainty a first-class part of the analysis (§10) instead of a footnote.

Meeting 3
Seed fixed at 20250306. Every number in this article is one run of the file as it now stands.

Where Fluoride Behaves

Calcium fluoride gives a cleaner look at a different failure of the naive rule: not a reversal, but a channel the rule never mentions at all. Fluoride is the conjugate base of a real, moderate weak acid, Ka(HF)=6.6×10−4K_a(\mathrm{HF})=6.6\times10^{-4}, pKa=3.18\mathrm{p}K_a=3.18 [6], and the Ksp=3.89×10−11K_{sp}=3.89\times10^{-11} used throughout comes from a 1977 potentiometric redetermination [5]. Hold the total fluoride added fixed at 10-3 M and sweep pH from 0 to 8. At pH 7 and above, where essentially all of that fluoride sits as free F-, the solver settles onto a plateau of 3.41 × 10-5 M dissolved calcium. Drop the pH to 2.55 and solubility has already risen tenfold. Drop it to 1.27 and it has risen a hundredfold. At pH 0 it sits at 2.78 × 10-2 M, 816 times the neutral-pH value, because most of the added fluoride is protonated to HF and no longer counts as free F- for the Ksp expression, so the system must dissolve far more calcium fluoride to keep [Ca2+][F−]2[\mathrm{Ca}^{2+}][\mathrm F^-]^2 pinned at KspK_{sp}.

Ba(IO3)2 shows a faint trace of the same mechanism (iodic acid is weak enough, pKa≈0.77\mathrm{p}K_a\approx0.77, to matter below pH 2) and AgCl shows essentially none: run the identical pH sweep at the same fixed 10-3 M added chloride and solubility varies by 0.0000% from pH 0 to 8, because hydrochloric acid has no meaningful conjugate-base chemistry in that range. The lesson is not "pH matters." It is that whether pH matters is a fact about the specific anion, not about solubility equilibria in general, and a rule that never even raises the question cannot tell a student which salts to worry about. The same protonation channel is also more than a classroom curiosity: it governs how far fluoride travels through real acidic groundwater, and is a documented factor in endemic dental fluorosis in low-pH aquifers [15].

None of this, worth stressing, is a reversal with respect to fluoride itself. Add more F- at fixed pH and CaF2 solubility falls, monotonically, everywhere we tested: no Ca2+-F- complex is strong enough in real water to turn that around, and we put none into the model. CaF2 is a salt where pH is a second lever the textbook rule never names, and where the common-ion rule, with respect to the common ion, is completely honest. Keep both of those sentences in mind for what comes next.

10-510-410-310-2pH 3.18 = pKa(HF)pH 0: 816× the plateaunaive rule (flat, no pH term)high-pH plateau, 3.41×10-5 M02468pHCaF₂ SOLUBILITY vs pH, [F⁻]ₖₖₐₔₐₖ = 10⁻³ M
Figure 1. Exact solver output (solid) against the pH-independent naive rule (dashed) for calcium fluoride, log scale, at fixed total added fluoride of 10-3 M. Silver chloride, swept across the same pH range at the same total added chloride, is not drawn as a curve because it is flat to four decimal places; it sits as a horizontal reference the naive line already resembles for the wrong reason.

The Rule Breaks

Now chloride, on its own, no pH trick required. Add sodium chloride to a saturated silver chloride solution and, exactly as taught, solubility falls: from 1.35 × 10-5 M in pure water down through 8.1 × 10-6 at 1.4 × 10-5 M chloride, down through 1.8 × 10-6 at 10-4 M, continuing to fall for another two decades of added chloride. Then, at 3.011 × 10-3 M added NaCl, it stops falling. Solubility bottoms out at 3.1147 × 10-7 M, 223 times lower than the pure-water value and the lowest concentration of dissolved silver anywhere in this whole study, and every gram of additional chloride from that point on makes the precipitate more soluble, not less.

The minimum's location came out of two completely independent numerical routes: a ternary search directly on the solver's own x(c)x(c), which is provably convex in cc and therefore has exactly one minimum, and an exact quartic root (again via numpy.roots, again sharing no code with the search) of 3β4c4+2β3c3+β2c2−1=03\beta_4c^4+2\beta_3c^3+\beta_2c^2-1=0, the closed-form stationary-point condition on the same expression. They agreed to 4.7 × 10-9. Set against the analytical-chemistry teaching literature, which has described a chloride-concentration minimum for AgCl solubility since at least Zuffanti's 1940 demonstration paper [1] and reiterated it through Roig's 1961 radiotracer version [2], both quoting the minimum only as an order of magnitude rather than to four figures, our number falls inside the 10-3 to 10-2 M range those sources describe. We would rather report that honestly, at the precision the secondary literature actually supports, than manufacture a false fourth significant figure to compare against.

Past the minimum, the chemistry a general-chemistry course teaches simply stops applying, and nothing about the equations changed to make that happen. The same KspK_{sp}, the same chloride, the same silver. What changes is which term in the mass balance is doing the work, and §7 follows that handoff species by species.
10-610-510-410-310-210-1added [Cl⁻] (M)minimum: 3.11×10-7 Mat 3.01×10-3 M Cl⁻exact solvernaive rule, Ksp/CAgCl SOLUBILITY vs ADDED CHLORIDE, pH 7
Figure 2. Exact solver (solid) against the naive textbook rule S = Ksp/C (dashed) for silver chloride, log-log, pH 7, added chloride from 10-7 to 6 M. The two curves track closely below the minimum and diverge by up to eight orders of magnitude beyond it.

Who Is Actually Carrying the Silver

Ask the solver what form the dissolved silver actually takes, rather than only how much of it there is, and the handoff behind the minimum turns into an inventory rather than a curve. Right at the minimum, 62.3% of the dissolved silver is the neutral ion pair AgCl(aq), 18.9% is free Ag+, and 18.8% is AgCl2-, with AgCl32- and AgCl43- together accounting for barely 0.06%. The minimum sits almost exactly where the free-ion channel that used to carry solubility and the complex-ion channel about to take it over are equally weak, a three-way tie between species with nothing else in common except that all three happen to matter least at that one chloride concentration.

Move to 5 M NaCl, near table salt's own solubility ceiling, and the inventory has completely turned over. Free Ag+ has fallen to 7.2 × 10-9 of the total, AgCl(aq) to a rounding error, and 88.3% of the dissolved silver now travels as AgCl43-, with almost all the remainder as AgCl32-. Total solubility there is 4.9564 × 10-3 M, 15,913 times the minimum and 367 times higher than silver chloride dissolves in plain water with no chloride added at all. Le Chatelier's principle, taken on its own, has no way to see any of this coming, because it reasons about one equilibrium being stressed, and by 5 M chloride the equilibrium doing almost all the work is not [Ag+][Cl−]=Ksp[\mathrm{Ag}^+][\mathrm{Cl}^-]=K_{sp} any more but [AgCl43−]=β4[Ag+][Cl−]4[\mathrm{AgCl}_4^{3-}]=\beta_4[\mathrm{Ag}^+][\mathrm{Cl}^-]^4, which the common-ion rule was never written to describe, running in the opposite direction and, by 5 M chloride, winning outright.

How Wrong the Textbook Gets

Put a number on "wrong." Define the naive rule's relative error as (xnaive−xexact)/xexact(x_{\text{naive}}-x_{\text{exact}})/x_{\text{exact}}. That error stays small and well behaved only in a narrow band: within ±10% for added chloride between 3.9 × 10-5 and 1.06 × 10-4 M, within ±20% between 2.8 × 10-5 and 2.06 × 10-4 M. Below that band the naive formula actually overshoots, because S=Ksp/CS=K_{sp}/C assumes the common ion swamps the salt's own contribution to it, an assumption that fails as CC approaches the pure-water solubility itself; at C=10−7C=10^{-7} M, smaller than the salt's own solubility, the naive rule predicts 1.77 × 10-3 M, over a hundred times too high. Above the band the naive rule fails in the opposite direction and never recovers: by C=5C=5 M it predicts 3.54 × 10-11 M, low by a factor of 1.40 × 108, a hundred and forty million, against the solver's 4.96 × 10-3 M. The naive rule is not merely optimistic at high chloride; it is looking at the wrong equilibrium entirely.

10-610-510-410-310-2added [Cl⁻] (M)0%+100%+200%≤-100%naive overshoots at very low Caccurate band,±10–20% onlynaive collapses toward −100% (wrong direction)RELATIVE ERROR OF THE NAIVE RULE, (Sₘₕᵢₖᵢ − Sᵡᶉᵡₗₕ)/Sᵡᶉᵡₗₕ
Figure 3. Relative error of the naive rule S = Ksp/C against the exact solver for AgCl, pH 7, log-x axis; the curve is clipped at +300% for readability and continues past −100% off the bottom of this axis as added chloride increases further.
SaltKsp (25°C)Complexation modelledpH-sensitivePure-water solubilityMinimum, and whereMax. enhancement
Ba(IO3)21.57×10-9none foundbelow pH ≈2 only7.3217×10-4 Mnone (monotone)1.00× (never reverses)
CaF23.89×10-11none includedstrongly, pH 0–52.1347×10-4 Mnone (monotone)1.00× (never reverses)
AgCl1.77×10-104-step Cl⁻ ladderno (<0.0001%)1.3499×10-5 M3.1147×10-7 M at 3.01×10-3 M15,913× (min → 5 M)

The Map of Where It Holds

Chloride is not the only ligand silver has. Ammonia forms its own well known two-step complex, Ag(NH3)2+, with a standard tabulated overall formation constant near log β2 = 7.05, independent of whatever chloride happens to be around. Add both at once and the question stops being "does the rule hold" and becomes "where, on a map of the two concentrations, does it hold." We solved the full two-ligand system, silver in equilibrium with both Cl- and NH3 simultaneously, on a 26 × 26 grid spanning 10-6 to 5 M chloride and 10-6 to 2 M ammonia, and classified each of the 676 points by the sign of dln⁡x/dln⁡[Cl−]d\ln x/d\ln[\mathrm{Cl}^-]: negative means the textbook rule holds at that point, positive means it has reversed.

222 of the 676 points, 32.8%, reverse. More tellingly, the boundary between the two regions moves in a single, readable direction. With essentially no ammonia present the reversal threshold sits at 3.0 × 10-3 M chloride, matching the pure-Cl- minimum in §7 almost exactly, as it should, since with no ammonia the two systems are the same system. Raise ammonia to 6.0 × 10-3 M and the threshold has moved out to 6.7 × 10-2 M chloride. At 0.11 M ammonia it sits at 0.79 M chloride. At 2 M ammonia, close to the top of our grid, the rule holds almost everywhere we tested and only reverses in the single most concentrated chloride cell. Ammonia does not stop the reversal from happening. It gives silver an escape route into solution that does not depend on chloride at all, which lowers the marginal effect of any given amount of extra chloride and pushes the point where chloride's own complexes take over out to higher and higher concentration. The interactive model lets a reader move both sliders and watch this boundary shift in real time.

10-63×10-35added [Cl⁻] (M)10-62[NH₃] (M)default (no NH₃)HOLDSREVERSESREGIME MAP: Ag⁺/Cl⁻/NH₃, pH 7
Figure 4. Each cell is one exact solve of the two-ligand Ag+/Cl-/NH3 system, classified by the sign of the local log-log slope of solubility against added chloride. Green: the common-ion rule holds. Orange: it has reversed. The marker sits at the interactive model's default condition, 10-3 M chloride with no ammonia added.

The Objection We Take Seriously

Here is the strongest version of the case against everything above. The entire reversal rests on four numbers, the stepwise AgCln formation constants, that trace to one 1952 potentiometric measurement [4] this club could not read in full, because it sits behind a publisher paywall. We do not know, first-hand, how precisely Jonte and Martin themselves believed those constants, and reproducing them from a compiled secondary value, as we did, is exactly the kind of second-hand sourcing that should make a reader suspicious of a headline result. Maybe the reversal is real chemistry. Maybe it is an artifact of a seventy-year-old number nobody in this club independently verified.

We cannot re-run Jonte and Martin's titration. What we can do is ask how wrong those constants would have to be before the conclusion changes, and answer with the same solver rather than with reassurance. We assigned each of the four log β values an assumed uncertainty of ±0.05 (a guess at the kind of precision a careful 1950s potentiometric study could plausibly achieve, not a number the paper itself gave us) and drew 100,000 independent sets from independent normal distributions around the reported values. In every single one of the 100,000 draws, the enhancement ratio from the minimum to 5 M chloride came out above 1: 100.0000% of draws show a reversal. The location of the minimum moved a little: log10(concentration at the minimum) came out at −2.5212 ± 0.0001 (a standard error, not a range), corresponding to 3.01 × 10-3 M with essentially no spread worth reporting at this sample size, while the enhancement ratio itself averaged 16,165 ± 6.5 across the draws, close to but not identical to the 15,913 computed at the nominal constants, which is simply what averaging a mildly nonlinear function over a distribution does. We went further and asked how far β2\beta_2 alone would have to be wrong, holding β3\beta_3 and β4\beta_4 at their nominal values, to push the minimum out past 6.1 M, roughly where liquid water can no longer hold any more NaCl at all: there is no positive value of β2\beta_2 that does it, because β3\beta_3 and β4\beta_4 alone are already large enough to force a minimum inside the physically reachable concentration range. Short of the original measurement being wrong by several orders of magnitude, not a plausible reading of even a skeptical prior on 1950s potentiometry, the reversal survives. What does not survive scrutiny is any claim to know its exact location or size to more than about two significant figures, and we have tried not to claim that anywhere above.

n=10n=1,000n=100,000Monte Carlo draws used (log scale)running SE of log₁₀(C at minimum)running meanCONVERGENCE OF THE MONTE CARLO ESTIMATE
Figure 5. Running standard error (blue) and running mean (plum) of log10(added chloride at the minimum), as a function of how many of the 100,000 formation-constant draws have been used, log-x axis. The standard error is not yet monotonic below about 100 draws, which is real Monte Carlo behaviour at small sample size and not noise in the plot; the smooth roughly-1/√n decay is established by a few hundred draws and the estimate is settled well before all 100,000 are used.

What to Actually Remember

Keep the rule. Throw out the word "always." Adding a common ion suppresses solubility whenever the ion you added does nothing else, and for most of the salts a first-year course reaches for, table salt, chalk, gypsum, that is the whole story and the rule is simply correct. Get suspicious the moment the precipitating cation is one chemistry already treats as a good complex-former, silver, copper(I), lead, mercury, aluminium, zinc, and the anion you are adding is also a competent ligand for it, halides above all, along with hydroxide, cyanide, thiosulfate, ammonia. In that combination, and really only in that combination, keep adding the common ion and past some concentration, usually far below where the salt itself would ever saturate a real solution, the rule inverts. The mechanism is not exotic: it is the same law of mass action the rule itself is built on, applied to a second reaction the rule was never written to include. A student who leaves remembering one sentence should leave with this one: solubility is set by every equilibrium the ion actually participates in, and KspK_{sp} is only ever one of them.

Reproducing this

One file, one command. No packages beyond numpy, on Python 3.12.

python solubility-equilibria.py > solubility-equilibria-output.txt

Expected runtime is a few seconds to a low number of tens of seconds. Three runs on the same laptop printed 6.56, 8.24 and 6.82 seconds, with numpy 2.4.2 on Python 3.12.3; every printed number was identical across all three, since nothing in the file depends on wall-clock time. The master seed is 20250306, hard-coded once, and the single default_rng stream feeds the entire Monte Carlo section deterministically. Every figure above, and every number quoted in the text, comes out of that one file; the printed coordinate blocks near the end of the raw output are the exact pixel positions transcribed into the SVG markup here. The interactive model runs the same equations in your browser and reproduces the minimum and the regime map at its default settings.

References

Reproduce these numbers

From the analysis folder, run:

python solubility-equilibria.py > solubility-equilibria-output.txt
Seed
20250306
Analysis code
solubility-equilibria.py42 kB