A lightly edited transcript of the conversation that built the Jacobian counterexample explorer, a companion to the blog post "A digestion of the Jacobian conjecture counterexample". The app was built in a single session. (The mathematics behind the construction was itself worked out earlier in an extended conversation with an AI chatbot, linked from the post; this page is the separate session that turned that understanding into the app.)
How to read this. Terence Tao's messages appear verbatim in the blockquotes; the assistant's replies are summarised in italics between them. Routine "looks good, continue" replies are folded into the narration.
1. Reading the mathematics first
I'd like to create an app to visualize the Jacobian conjecture example discussed in [the blog post], in particular displaying the
(a,y,z)and(a,b,c)coordinates for the same space X, and also displaying the data(a,b,c,d,e), L, Q, F(L,Q) = L·Q, Res(L,Q) (though this is always 1), and the roots of L and Q (the latter being complex). I'd like the viewer to be able to modifya,y,zora,b,cand have all the other data update automatically [...] modifyingawhile keepingy,zfixed is different from modifyingawhile keepingb,cfixed. One issue is that thea,b,ccoordinates are slightly singular; sendingato zero in particular forcesb,cto equal 1, so we need to think about the GUI to handle that. But the first step is for you to read the blog post and see if you understand the mathematics behind the construction.
The assistant read the post and the underlying announcement, then reconstructed the algebra to check its understanding rather than paraphrasing it. It confirmed the shape of the construction — the space X = {Res(L,Q)=1, ad+bc=1}, a copy of ℝ³ carrying two coordinate charts — derived the change-of-variables and the d,e formulas from scratch, and verified numerically that the three known collision points lie on X. Three points were flagged for confirmation: that F should display the product L·Q, that the real slice was intended, and how far the singular chart should be handled.
2. Scope, and the singular fibre
1: yes I meant L * Q. 2: I'd like to illustrate the L, Q interpretation of the counterexample rather than the original map (1) [...]. 3: for simplicity I'd like to keep
a,y,z(and hencea,b,c,d,e,L,Q) all real. The one thing that can be complex is the roots of Q, but this would be a non-text-editable field and so should not cause GUI issues.To deal with the
(a,b,c)coordinate singularity ata=0one could make the rule that if one setsato equal zero in the(a,b,c)coordinates thenb, care automatically set to 1 whiled, eremain where they were, which should uniquely fixa,y,zwhich I agree should be the master coordinates.
The assistant checked that this rule closes up: holding d,e and snapping b=c=1 at a=0 gives master coordinates (0, 2d, 8d² − e/2), which feed back through the chart to return the same d,e. It then built the pure logic as a DOM-free module — the two charts, the six field edits each holding the right pair fixed, the snap rule, and the roots — with a set of node tests covering the defining identities and the round-trips.
3. Stage 1, and a plan for stage 2
Stage 1 sounds good. For stage 2 one simple interface to skip to is to be able to click on either of the two roots of Q (when they are real and distinct) to swap that into a root of L and adjust everything else accordingly to preserve L·Q. It can go in a new algebraic geometry section.
Stage 1 — the two live coordinate panels, the derived data (d, e, L, Q, the cubic L·Q with its pinned s²t coefficient, Res, and the roots) — went in, with the singular-chart handling wired through. The click-to-swap idea was recorded for stage 2 and a new "Algebraic geometry" category noted for the catalogue.
4. Arrows, and a plot
This looks good. I'd like some arrows to be able to increment
a,b,cora,y,z. Also if we can have a plot of L, Q, and LQ as part of the GUI that would be great.
The assistant added +/− arrows to every field, routed through the same edit logic so the two-chart distinction and the singularity rule were preserved, and stepping on a clean grid so a could land exactly on zero. It added a canvas plot of L, Q and L·Q as functions of x = s/t, with the real roots drawn as marks on the axis: L·Q's crossings are exactly L's together with Q's, which is the factorization picture the app is about.
5. The complex plane, and decluttering
Looks great. One suggestion: when the roots of Q become complex, we can still display them in the same graph by having the plane double as the complex plane, so one has two roots (maybe in some faded color) displayed above and below the real axis. One could have checkmark options to suppress complex zeroes (or to suppress L, Q, or LQ) to declutter the display as needed.
Complex roots of Q are now drawn as a faded conjugate pair at (Re, ±Im), using the horizontal scale for the imaginary part so the plane reads as the s/t-plane. Four checkboxes toggle L, Q, L·Q and the complex layer; hiding a curve also rescales the vertical window to fit what remains.
6. Audits, and a review
Looks good. Can you run the standard audits and also review it if there are any useful additions to the GUI that might be appropriate?
The assistant ran the routine checks (no network, storage, or page-state side effects; a complete document). It fixed three items: the canvas colours now follow a theme toggle rather than the OS setting alone; a stale error flag is cleared on the next valid edit; and a rejected input now shows a message instead of only a red border. It added axis labels, and proposed a set of additions.
All the cheap options sound good. An export feature and the hover readout also sound good. Implementing these and Stage 2 sounds good to me.
7. Stage 2, export, and hover
The last batch went in together. Stage 2: clicking a real root of Q promotes it into L, re-factoring the same cubic L·Q — the multiplication map's non-injectivity, made a click, with the Res=1 normalisation fixing the scaling uniquely. A status line reports how many real factorizations the current cubic has, and points at the click when there are three. Also added: the ad+bc = 1 row, hold-to-repeat on the arrows, a hover readout of L, Q, L·Q under the cursor, a "copy data as text" button, and a shareable deep-link that the app restores on load.
8. Publishing
Looks good. I think it is good to go. Update the applet page to describe the current app accurately, make a making of page, and update the main applet page with an algebraic geometry section.
The description was brought up to date, this page written, and the app catalogued under a new Algebraic geometry section.
9. The original map, after publication
In the Jacobian app I wonder if one can optionally also display the original map at the beginning of the blog post [...] so in addition to demonstrating all the primary data [...] it also shows
z_1, z_2, z_3andF(z_1,z_2,z_3)(in the notation of (1)), using the transformation in the final display of the blog post. Can you first confirm that the math checks out and then decide on a way to display it?
Verifying the correspondence against the verbatim equation (1) turned up a correction. The right change of variables is (z1,z2,z3) = (a, y, -2z), at which F(z1,z2,z3) = (be, 2(ae+bd), 2ac) — a linear reindexing of the cubic's coefficients (identity to 1e-12 over twenty thousand random points; determinant -2). So the original map is the multiplication map in disguise, not a separate one: the app's earlier collision presets had used a naïve (a,y,z) = (z1,z2,z3) identification, and the true collision triple (0,0,1/8), (1,-3/2,-13/4), (-1,3/2,-13/4) share one cubic and are its three factorizations. The presets were corrected, an optional "Original map — equation (1)" panel added showing (z1,z2,z3) and F, and the earlier claim that the two maps differ was retracted.
The construction is a small, self-contained slice of algebra: a cubic form factors into a linear and a quadratic factor in more than one way, and normalising that ambiguity produces a polynomial map that is locally injective but not globally so. The app keeps every derived quantity in view at once and lets both coordinate systems be edited, so the singular chart and the factorization ambiguity — the two features that carry the mathematics — can be handled directly rather than described.