Chameleon bigravity and spin-2 dark matter
Final project, AI-assisted research (Claude Code + Codex) · Guadalupe Ahumada Acuña, DF–FCEN–UBA · September 2026
Can the massless gravitons of the metric \(g\) mix with those of a second dynamical metric \(f\) and produce massive spin-2 particles that behave as dark matter? I took my own bigravity calculation and used two agents to extend it to the chameleon case, \(\beta_n\to\beta_n(\phi)\), with a general relative lapse \(c(t)\) and background ratio \(\xi(t)\). For every result I recorded where it comes from and checked it along a path that shares no code with the one that produced it.
The model
The backgrounds are \(ds_g^2=-dt^2+a^2d\vec x^2\) and \(ds_f^2=\xi^2(t)\,[-c^2(t)dt^2+a^2d\vec x^2]\). My starting notes cover standard bigravity with \(c=1\) and constant \(\xi\). The goal is the stress-energy tensor at second order in perturbations.
How the work was done
codigo/Perturbaciones_Chameleon.nbverificaciones/run_all.sh
Results, and how much I trust each one
Notation: \(J=\beta_1+2\beta_2\xi+\beta_3\xi^2\), \(Z=\beta_1+(1+c)\beta_2\xi+c\beta_3\xi^2\), \(\kappa=M_f^2/M_g^2\), \(\Delta=H-\xi H_f\).
| Result | Who produced it | Independent check | Status |
|---|---|---|---|
| Backgrounds of \(g\) and \(f\), Klein–Gordon, conservation | me (xPand), with the \(f\) geometry designed with the agents | re-derived from the action in components; with the old sign of \(\dot\rho\) the constraint fails (negative control) | verified |
| Generalised Bianchi constraint | me · Claude's notes · 1702.04490 | the three forms are identical (sympy, 7/7 PASS) | verified |
| \(c(t)\) | me · Claude's notes | from the action (Mathematica, no xAct) and inside my notebook (residual 0) | verified |
| Linear tensor sector with \(c\neq1\), \(\xi(t)\), and \(m_{\rm M}^2\) | me (EqTg) + component block in my notebook | derivacion_TT_general.m: 10 PASS; matches EqTg and the notes' mass | verified |
| Vectors, scalar no-ghost | Claude's notes; Codex re-derived 1711.04655 | 171 checks by Codex; Claude copied \(\kappa_1,\Sigma\) from the paper | partial |
| Dark matter from \(\mathcal G\to\mathcal M\) conversion | only Claude's notes | 4 audits, 7 issues still open | not verified |
Constraint. With \(\beta_n(\phi)\), the branch dichotomy \(J(H-\xi H_f)=0\) of standard bigravity is replaced by an inhomogeneous constraint. The Hubble-rate mismatch is driven by the rolling chameleon, not by matter:
Tensor sector for general \(c(t)\), \(\xi(t)\). The \(f\)-graviton propagates on the light cone of \(f\), and the mass terms close on \(h-\gamma\):
For \(c\neq1\) the gradient matrix \(\mathrm{diag}(1,c^2)\) does not commute with the mass matrix. So no constant basis decouples \(\mathcal G\) and \(\mathcal M\): there is a mixing channel \(\propto k^2(c^2-1)\) on top of the one driven by \(\dot\theta\). This is the starting point of the second-order calculation.
What I learned about the agents
- Cross-auditing helps but does not converge by itself. Every fix brings new claims.
- Copying instead of deriving: one of Claude's notebooks loads formulas from the paper and then "checks" against them.
- Numerics where they do not belong: checks on a single numerical curve; a plot of two trivial straight lines.
- Invented references in the derivation guide.
- Silent failures: a patch by Codex failed its own checks and still wrote the file.
- What worked: giving the agents my own code as the model; A/B with the same prompt; exact zeros from a clean kernel plus negative controls; re-deriving the key results along a path that shares no code; running the whole notebook from scratch, which exposed three latent bugs.
Reproduce
git clone <this repo> && cd <repo>/verificaciones bash run_all.sh # ~3 min: 7/7 + 6/6 + 21/21 + 34/34 + 17/17 PASS, and the c=1 tensor sector closes
Environment: Python 3.12 (sympy 1.12, numpy, scipy, mpmath); Mathematica 12.1.1 for the two component derivations, with no xAct needed. The notebooks use xAct (xTensor 1.2.0, xPert 1.0.6, xPand 0.4.3).
Next steps
- Vector and scalar sectors in my notebook, with the exact \(\delta\sqrt{g^{-1}f}\) (Sylvester equation).
- \(T_{\mu\nu}\) at second order on top of the verified tensor equations.
- Only then, conversion and relic abundance for a concrete \(\beta_n(\phi)=\bar\beta_n e^{-\lambda\phi}\).