# Verification report — OWR-15993-009 (Rendall: more than three steady states in the model of Rendall and Sontag for the initiation of T cell activation)

Verification date: 2026-10-11.

**Verdict.** The note answers the question as posed in the source, **in the following reading and with the
following limits**; every statement it calls proved is proved.
- **Reading.** The agonist-only system (1)–(4) of Rendall and Sontag (kinetic proofreading chain C_0, …, C_N with
  the phosphatase SHP-1); the chain length N is treated as a free parameter, as in the Oberwolfach abstracts,
  which count N among the parameters; all rate constants and totals positive; steady states in the biologically
  feasible region, for fixed totals (one stoichiometric class).
- **Settled (computer-assisted, exact arithmetic).** For N = 1000 and explicit positive rational parameters there
  are exactly five positive steady states, all non-degenerate (Theorem 1.2). The same holds at fourteen further
  explicit parameter points, with N = 651, 652, 653, 655, 660, 680, 690, 700, 2000 and 4000 (Theorem 1.3).
- **Settled (proved without computation).** At most N positive steady states for odd N and at most N − 1 for even
  N; hence exactly one for N = 1, 2 and at most three for N = 3 and N = 4; three occur for N = 4 (Theorem 1.4).
  For N ≤ 3 this is Theorem 1 of Rendall and Sontag; for N = 4 the bound stated there is five.
- **Stability.** A steady state at which P′ > 0 has an odd number of positive real eigenvalues (Theorem 1.5(a),
  proved); so the second and fourth steady state of each of the fifteen points are unstable (exact signs of P′).
  For N = 1000 the first, third and fifth are hyperbolic sinks and the second and fourth are saddles with one
  unstable direction (Theorem 1.5(c); computer-assisted, interval arithmetic, three programs).
- **Not proved.** For 5 ≤ N ≤ 650 nothing is proved. Numerical searches of three kinds found no parameters with
  more than three positive steady states, and a numerical criterion changes sign between N = 650 and N = 651; on
  this evidence 651 is the smallest possible N. This is tested, not proved.
- **Not covered.** The values of N that the sources regard as biologically motivated (about 20 or less); the
  parameter values of the biological literature; the full model with antagonist. The parameter windows are
  extremely thin (relative width 7·10⁻⁷ in S_T for N = 1000, 10⁻¹³ for N = 651). No biological conclusion is
  drawn.

The note is unrefereed.

## Statement checked
- **Source of the question.** A. D. Rendall (joint work with E. D. Sontag), "Initiation of T cell signalling",
  in: The Mathematics of Mechanobiology and Cell Signaling, Oberwolfach Report 8/2018, Oberwolfach Reports 15
  (2018), pp. 487–489 of pp. 433–506, doi:10.4171/OWR/2018/8. Read in the publisher's open PDF (fetched
  2026-10-11, at the writing and again by the third verification run), the abstract and its references in full.
  - p. 488: after the result on up to three steady states, obtained from a quartic equation (the case N = 3), the
    abstract says that whether there are parameters for which "more than three steady states exist is an open
    question".
  - On the same page N is called a parameter, and all quantities of a displayed formula other than L and ν, a
    formula that contains N, are said to be positive parameters of the ODE system.
- **Second abstract.** A. D. Rendall, "Mathematical models for T-cell activation", Oberwolfach Report 28/2017,
  Oberwolfach Reports 14 (2017), pp. 1775–1776, doi:10.4171/OWR/2017/28 (read in full): N is introduced as a
  parameter of the system, a positive integer.
- **The model.** A. D. Rendall, E. D. Sontag, R. Soc. Open Sci. 4 (2017) 170821, doi:10.1098/rsos.170821,
  arXiv:1705.00149. The arXiv version (v1) was read completely in its TeX source; of the journal version
  (Europe PMC full text) Sections 1–3 and the passages on N, bounds and simulations.
  - Equations (1)–(4) of the note are (1)–(4) of the arXiv version and (2.1)–(2.4) of the journal version with
    L_2 = 0 and D_j = 0; they were compared symbol by symbol with both versions (run A, run B, at the writing,
    and by the third run).
  - Feasible region, positivity of the rate constants, conservation laws: Section 2 (the conservation laws are
    printed in the journal version). Lemma 1 (Lemma 2.1) states that steady states in the closure of the feasible
    region lie in the region; the existence of a steady state is shown in the text after that lemma.
  - Theorem 1 (Theorem 3.1 in the journal version): exactly one positive steady state for N = 1, 2; for N = 3
    three for suitable parameters and never more than three. For larger N: the bound N (N odd), N + 1 (N even);
    the journal version adds that simulations found three steady states for N = 5 and no parameters with more
    than three for any N.
  - The paper in which the model was introduced, P. François, G. Voisinne, E. D. Siggia, G. Altan-Bonnet,
    M. Vergassola, PNAS 110 (2013) E888–E897: the main text was read by the third run in the open copy at PubMed
    Central. It describes the model in words and in a figure, takes N = 5, and does not mention multiple steady
    states of the model. Its equations are in the supplement, which was not read; the equations of the note are
    those of Rendall and Sontag.
- **Corpus record.** ulamai/UnsolvedMath, OWR-15993-009 (dataset version 1.6.0; upstream status `open`). Its
  statement is a paraphrase of the source; read alone it may suggest that only the antigen amount and the
  unbinding rate are varied, whereas the source asks about parameters in general.

## Readings
| Reading | Answer | Where |
|---|---|---|
| Agonist-only system, N free (the reading of the source), all parameters positive, feasible region, fixed totals | yes: exactly five positive steady states for N = 1000 and for fourteen further points with 651 ≤ N ≤ 4000 | Theorems 1.2, 1.3 |
| The same with N ≤ 4 fixed | no: at most three (exactly one for N = 1, 2) | Theorem 1.4; for N ≤ 3 Rendall–Sontag |
| The same with a fixed N between 5 and 650, in particular the biologically motivated N | open; numerically no example | Section 8 (tested only) |
| Parameter values of the biological literature, only L and ν varied (possible if only the corpus sentence is read) | not treated | Section 1.3 |
| The full model with antagonist | not treated | Section 1.3 |
| More than five steady states | not treated | — |

## Results in the paper
- **Lemma 3.2 (reduction).** With x = (b + γS)/φ the positive steady states correspond bijectively to the roots in
  (x_0, X) of P(x) = c_1(x)(X − x) − ρ(x − x_0)t_0(x), where c_j, t_j are given by a two-term recursion with
  positive coefficients, x_0 = b/φ, X = (b + γS_T)/φ, ρ = β/(αΣ*); P(x_0) > 0 > P(X). Proof by net fluxes.
  Remark 3.3: agreement with the polynomials printed in the source for N = 1 and N = 2, and for N = 3 identically
  in the coefficients a_0, a_2, a_4 and for γ = φ = 1 in a_1, a_3; for general γ, φ three printed terms differ from
  the polynomial of the note by a factor γ or φ, which does not affect the example or the theorem of the source.
- **Lemma 3.4 (Jacobian).** J_CC has only negative real eigenvalues; det J = det J_CC · f′(S); the sign of det J
  is (−1)^{N+1} sign P′(x); −(ν_1 + κ′) is an eigenvalue of J.
- **Lemmas 4.1, 4.3, 4.4.** The two tools for exact root counts: enclosures of P and P′ from the monotonicity of
  c_1, t_0, c_1′, t_0′ (with directed rounding, Remark 4.2); Descartes' rule of signs (with a proof) and its
  form on an interval after a Möbius map.
- **Theorem 1.2.** N = 1000, α = γ = φ = L_1 = R = 1, b = 1/100, κ = 13/2000000, ν_1 = 13/4000000,
  β = 343447/(2·10¹¹), S_T = 9906777/10⁷: Σ* = 1/2; P has the signs + − + − + − at
  x = 1/100, 197/200, 1977/2000, 9913/10000, 9931/10000, 10006777/10⁷ (integers of 22,000 to 24,000 bits);
  exactly five roots, all simple, by Certificate I (Descartes on ten intervals) and by Certificate II (939
  intervals closed by the enclosure criteria).
- **Theorem 1.3 and Table 2.** Fourteen further points; five found by run B (N = 651, 652, 655, 660, 700), eight
  by run A (N = 652, 653, 655, 660, 680, 690, 700, 4000), one in the first results (N = 2000).
- **Theorem 1.4.** Descartes' rule for the polynomial in S: the last two coefficients have the same sign, which
  gives N − 1 instead of N + 1 for even N. Example with three steady states for N = 4, with two explicit rational
  values of P.
- **Theorem 1.5.** (a) parity of the number of positive real eigenvalues; (b) exact signs of P′; (c) the
  spectrum for N = 1000 by alternating signs of the characteristic polynomial at 1003 points.
- **Sections 8 and 9.** Numerical evidence for 5 ≤ N ≤ 650 with a statement of what the searches cover and do
  not cover; a heuristic remark on why N must be large. No claim is made there.

## Computations (programs and outputs in reproducibility/)
Exact means: Python integers and fractions, and fixed-point integers with directed rounding; no floating-point
number enters a decision.
- **The checker of the note** (`writing_stage/check_certificates.py`, standard library; data
  `certificates.json`). For each of the fifteen points and two controls: (A) the original equations (2)–(4) hold
  exactly at six values of S, all C_j > 0, Σ = Σ*, and the right-hand side of (1) has the signs + − + − + −;
  (B) the six signs of P; (C) exactly five roots, all simple, with P′ of signs − + − + −, by enclosures;
  (D) exactly five by Descartes' rule on stored cut points. Recorded output: ALL CHECKS PASSED
  (`check_certificates_output.txt`).
- **Rejection tests** (`writing_stage/rejection_tests.py`): 22 corrupted versions of the data, all rejected.
- **First results** (`original/`): the six signs for N = 1000 and N = 2000; symbolic check of the reduction for
  N ≤ 6; the example of the source for N = 3; exact Sturm counts for N ≤ 10; the first scans.
- **Verification run A** (`verification_run_A/`): symbolic linear solve for N ≤ 7 and comparison with the
  source's polynomials; the six signs and the original equations at six S, exactly; exact enclosure of P′ at the
  isolated roots; Certificate I for N = 1000 and N = 2000; Theorem 1.4 on 720 random rational parameter points
  with its own Sturm sequences; the eight further points; floating-point searches.
- **Verification run B** (`verification_run_B/`): the original equations as exact identities at six S of its own
  choice; Certificate II for seven points and a control; the five steady states with 100 digits by Newton's
  method in the full system (residuals below 10⁻¹⁰⁰); all 1002 eigenvalues with 60 digits; the interval
  certificate of Theorem 1.5(c); the five further points; the cusp level for every N from 5 to 660; grid scans
  and random searches.
- **Cross-checks at the writing** (`writing_stage/cross_checks/`): run B's programs applied to the eight points
  of run A: exactly five zeros, all simple, in every case.
- **Second program for Theorem 1.5(c)** (`writing_stage/check_spectrum.py`, standard library): interval
  arithmetic on integers and a different evaluation of the characteristic polynomial; all 1003 signs decided and
  alternating at each of the five steady states; rejection tests on corrupted point lists.
- **Third verification run** (`independent_run_2/`; programs written from the statements of the note, no code
  shared with the rest of the package):
  - `r2_check.py`: for all fifteen points, from the parameters and the six test points alone: Σ* computed; the
    states of Lemma 3.2 inserted into (2)–(4) as printed, exactly; the six signs; exactly five roots, all simple,
    with P′ of signs − + − + −, by Lemma 4.1 (320 fractional bits; bisection from the single interval [x_0, X];
    533 to 104,422 intervals); exactly five roots by Lemma 4.4 on subdivisions found by the program (12 to 18
    intervals), with two implementations (polynomial arithmetic of FLINT; plain integers); gcd(P, P′) = 1.
  - `r2_small.py`: the algebra of Lemma 3.2 for N ≤ 6; elimination of (1)–(4) by Gröbner bases for N ≤ 3, without
    the structure used in the proof of Lemma 3.2: the generator of the elimination ideal is the product of the
    polynomial of the lemma (in the variable S) and of its analogue for the second root of q, whose solutions are
    not feasible; Theorem 1.4 on 400 random rational parameter points; the numbers of Theorem 1.4(c),
    Remark 6.1(2) and Remark 3.3; Lemma 3.4 exactly on 18 random points; Lemmas 4.3, 4.4 on random polynomials.
  - `r2_tables.py`: Tables 1 and 2, Figure 1 and the numbers of Remark 5.1 recomputed (the dependence on the
    chain length with exact root counts); Table 3 compared with the recorded outputs; the two fold values for
    N = 650, 651 recomputed.
  - `r2_spectrum.py`: third program for Theorem 1.5(c) (ball arithmetic of Arb, exact bracketing of the roots, a
    rank-three determinant formula, test points of its own, control by a general determinant routine): all five
    steady states certified.
  - `r2_dynamics.py` (numerical, not a proof): the equations (1)–(4) for the point N = 1000, coded as printed, were
    integrated in time (implicit Euler method, up to t = 6·10⁹). Twelve trajectories — the second and the fourth
    steady state displaced along their unstable direction, and eight starts that do not use the reduction — stay
    in the feasible region and converge to the first, third or fifth steady state; the displaced saddles reach
    their two neighbours.
- **Re-runs.** On 2026-10-11 the certificate programs of the first results and of both runs were run again from
  copies; their outputs are identical to the recorded ones up to running times. The third run ran the quick part
  (`reproducibility/run_quick.sh`) and the complete `check_certificates.py` again from the archive, with the same
  result. The log of the quick part, run from the final archive, is `reproducibility/RERUN_LOG.txt`.

## Independent verification runs
The results were first obtained with "at least five" for N = 1000 and N = 2000, with the exact count and the
stability only numerical, and with the smallest N located between 640 and 680. Three independent verification
runs, all AI-assisted, followed (2026-10-11), each with its own programs. Runs A and B examined the first
results, and neither saw the other: run A examined the statement and every proof; run B made independent
computations, searched for smaller N and examined the literature. The third run examined the final text of the
note and the programs written with it.

| Item | Run A | Run B | Third run (final text) |
|---|---|---|---|
| Statement, reading, what is answered | CONFIRMED_WITH_FIXES (wording) | CONFIRMED | CONFIRMED; sources fetched and read again; corrections 1, 3 and 8 of the third run (below) |
| Equations (1)–(4), feasible region, conservation laws against both versions of the source | CONFIRMED | CONFIRMED | CONFIRMED |
| Lemma 3.2 (reduction) | CONFIRMED (re-derived; symbolic for N ≤ 7) | CONFIRMED (derived independently) | CONFIRMED (both directions line by line; Gröbner elimination for N ≤ 3) |
| Theorem 1.2, at least five (N = 1000, 2000) | CONFIRMED (two exact methods) | CONFIRMED (exact, on the original equations) | CONFIRMED |
| Theorems 1.2, 1.3, exactly five and non-degenerate | added: Certificate I and exact signs of P′ | added: Certificate II | CONFIRMED for all fifteen points, by both methods, with its own program |
| Theorem 1.4 and Theorem 1.5(a) | CONFIRMED (line by line) | not its part (bookkeeping and the determinant identity checked numerically) | CONFIRMED (line by line; exact checks on random parameters) |
| Theorem 1.5(c) | numerical only in this run | added: interval certificate | CONFIRMED with a third program; the two earlier programs read line by line |
| The programs | three of the first results re-run, identical | all of the first results re-run, identical; certificate not vacuous | checker of the note and both spectrum programs read line by line; package re-run from the archive, all recorded outputs reproduced |
| Smaller N | certified N = 652, …, 700, 4000; numerically the threshold is about 651 | certified N = 651, 652, 655, 660, 700; cusp level changes sign between 650 and 651 | scans not repeated; Table 3 compared with the recorded outputs; fold values for N = 650, 651 recomputed |
| Novelty | not its part | no prior answer found; literature description corrected | lists of citing works and queries repeated; no prior answer found |

No run found a wrong theorem, proposition or lemma, or a gap in a proof.

**Corrections required by runs A and B**, all applied in the note:
1. (Run A) The result is stated with its reading and with the size of N wherever it is summarised: title,
   abstract, Section 1.3, "Scope and priority", this report, deposit metadata.
2. (Run A) The source says that a polynomial equation of degree N + 1 can be derived (it does not derive it):
   Section 1.1.
3. (Run A) b = 0 in the example of the source is an inference from the preceding proof and a figure caption:
   Remark 3.3.
4. (Run A) The biological range of N is quoted separately from the arXiv version and from the journal version:
   Section 1.3.
5. (Run A) The corpus statement is called a paraphrase which can be misread: Section 1.1.
6. (Run B) The paper of Bali and Rendall (2025) is described accurately, with the remark that Theorem 1 of the
   2017 paper concerns N ≤ 3: "Scope and priority".
7. (Run B) The second Oberwolfach abstract (Report 28/2017) is cited.
8. (Run B) The threshold statements were replaced: certified points down to N = 651; numerically the threshold
   is 651; the dependence on N(1 − b/φ) alone is only approximate: Theorem 1.3, Sections 8 and 9.
9. (Run B) The coverage of the first scans is stated (x ≤ 5, three or four values of x_0): Section 8.2.
10. (Run B) The docstring of `original/scripts/independent_check.py` in the package was corrected (the script
    uses the conservation step; its code is unchanged).
11. (Both runs, recommended) The exact count, the simplicity of the roots, the instability of the second and
    fourth steady state and the spectrum for N = 1000 are stated as computer-assisted theorems, with the
    certificates of the runs.

**What was added when the note was written, after runs A and B** (and examined by the third run): the checker
`check_certificates.py` with the data file, and the rejection tests; the exact count "exactly five" for the eight
points of run A (run A had certified at least five positive steady states and five simple roots for them); the
second program for Theorem 1.5(c); the proof of Descartes' rule (Lemma 4.3), the explicit values in the proof of
Theorem 1.4(c), Lemma 3.4(c).

**Corrections required by the third run**, all applied; none changes the statement of a theorem:
1. Section 1.2: the sentence that states the answer now carries its scope (explicit points with N ≥ 651; open for
   5 ≤ N ≤ 650, in particular for the biologically motivated N).
2. Abstract: "At each of the fifteen points"; the sentence on priority reworded (a limited search found no
   earlier answer; no priority is claimed).
3. Section 2: the existence of a steady state is attributed to the argument that follows Lemma 1 of the source,
   not to the lemma.
4. Remark after Lemma 3.2: one hypothesis (b + γS ≥ 0) for both of its statements.
5. Remark 3.3: the difference in three printed terms of the source's quartic is described in one clause; an
   imprecise sentence on homogeneity was deleted.
6. Remark 6.1(1): the bound of the source "follows from" the opposite signs of a_0 and a_{N+1} (the source gives
   no derivation).
7. Section 8.1: the zeros of H″ are counted with multiplicity in the statement marked "Proved".
8. François et al. (2013): the main text was read by this run; the note no longer lists the paper as unread
   (the supplement, which contains the equations, was not read).
9. "Scope and priority": the number of web searches; the lists and queries were repeated.
10. The Verification paragraph was rewritten to the final state; Sections 5, 7.1 and 10 and Table 4 name the
    programs of the third run.
11. Package: two comments in program files were reworded (`writing_stage/build_certificates_json.py`;
    docstring of `verification_run_A/programs/a3_states_jacobian.py`); no code was changed.
12. Package: the folder `independent_run_2/` with the programs and outputs of this run was added; the README and
    this report were updated.
13. Package: the archive, the deposit copies and the deposit metadata were rebuilt; `RERUN_LOG.txt` is from a run
    in the final archive.
14. The notice for the data set states the scope in the sentence of the suggested status and lists the sources
    that were not read.

**After the third run (last review of the package, 11 October 2026).** In
`verification_run_A/programs/a1_lemmaR_symbolic.py` and in its recorded output the labels of two printed lines
were reworded (the lines which compare the coefficients a_1 and a_3 of the source's quartic with ours after three
printed terms are changed by a factor γ or φ). No computation was changed; the program was run again from a copy,
and its output is identical to the recorded file. The text of the note was not changed.

## Relation to the literature, novelty and scope
- **Credits.** The model is that of François, Voisinne, Siggia, Altan-Bonnet and Vergassola (PNAS 2013) in the
  form studied by Rendall and Sontag (2017); the question is Rendall's (Oberwolfach Report 8/2018, p. 488). The
  reduction to one polynomial is the one indicated by Rendall and Sontag; the method (exact evaluation of signs)
  is elementary.
- **Searches (10 and 11 October 2026).** Lists of works citing the 2017 paper in OpenAlex (12 works) and
  Semantic Scholar (16), examined by titles and available abstracts; queries to arXiv, zbMATH, Crossref and
  Europe PMC; seven web searches. The third run repeated the lists (also Europe PMC: 9 works) and the queries.
  No answer to the question was found, and no statement on the number of steady states of this model for N ≥ 4
  other than those below.
- **Later literature.** Bali and Rendall (Sci. Rep. 15 (2025) 44233, doi:10.1038/s41598-025-32255-9), in the
  section "Validation of previous findings", summarise the 2017 paper as showing three positive steady states
  for certain parameters and the impossibility of exceeding this number, and report exactly three for
  biologically motivated parameter values. Theorem 1 of the 2017 paper concerns N ≤ 3; no theorem is
  contradicted by the examples with large N. Which N is used there was not found in the main text.
  Brechmann's dissertation (Mainz 2024, doi:10.25358/openscience-10595) summarises the 2017 paper in its
  Section 2.3; a search of its text found nothing on N ≥ 4 for this model.
- **What was read.** The two Oberwolfach abstracts completely; the arXiv version of Rendall–Sontag completely and
  Sections 1–3 of the journal version; the main text of François et al. (2013); the named section of
  Bali–Rendall; Section 2.3 of Brechmann's dissertation.
- **Not read.** The supplement of François et al. (2013), which contains the equations of the model; the
  equations are taken from Rendall–Sontag. Also not read: the supplement of Bali–Rendall; Altan-Bonnet and
  Germain (2005); Lipniacki et al. (2008) and Zheng et al. (2005), which the source abstract cites for multiple
  steady states in simulations of related models.
- **Caveats.** A search that finds nothing is not a proof of novelty; no priority is claimed. The answer "yes"
  holds for the family with N free; it says nothing for the biologically motivated values of N, for which the
  question remains open as far as proofs go.

## Public release and license
This paper, its source files, and this verification report are licensed under the Creative Commons Attribution
4.0 International License (CC BY 4.0): https://creativecommons.org/licenses/by/4.0/
