Introduction
Introduction
The Jacobian conjecture, [MW1, Wk1], was (very) recently disproved by a counterexample found by Anthropic's Fable 5. [MS1]. This notebook demonstrates that counterexample using some of the built-in Wolfram Language (WL) functions and entries in Wolfram Function Repository (WFR). We show how to use WL’s FindInstance to find three different points which the counterexample polynomial 3-dimensional (3D) transformation maps into the same 3D point.
In the comments of this X-post (and New Scientist article, [MS1]) it is pointed out that the counterexample found using Anthropic's Fable 5 Large Language Model (LLM).
Theory
Theory
In this section we provide a theoretical formulation of the Jacobian conjecture. For more a mathematically elaborated formulation see the Wikipedia article "Jacobian conjecture", [Wk1].
Suppose and are polynomials of the variables and . Consider the 2-dimensional (2D) transformation (i.e., a vector valued function) . The Jacobian conjectures says that if the Jacobian determinant:
u
v
x
y
F(x,y):=(u[x,y],v[x,y])
J=(∂u/∂x)(∂v/∂y)−(∂u/∂y)(∂v/∂x)
is a non-zero constant, then there must exist another pair of polynomials that invert transformation with the polynomials in and .
u
v
Below we show that the conjecture is not true using the 3D transformation polynomials proclaimed in this X post, [MS1].
Demonstration
Demonstration
In this section the Anthropic’s Fable 5 found counterexample is exemplified using corresponding definitions and invocations.
Definition of the counterexample polynomial mapping:
In[]:=
Clear[polyMap];polyMap[x_,y_,z_]:={(1+xy)^3z+y^2(1+xy)(4+3xy),y+3x(1+xy)^2z+3xy^2(4+3xy),2x-3x^2y-x^3z};
Display the polynomial map in traditional form:
In[]:=
Column[TraditionalForm/@polyMap[x,y,z]]
Out[]=
2 y 3 (xy+1) |
3x 2 y 2 (xy+1) |
3 x 2 x |
In[]:=
mat=ResourceFunction["JacobianMatrix"][polyMap[x,y,z],{x,y,z}];mat//Simplify//MatrixForm
Out[]//MatrixForm=
y(6x 3 y 2 y 2 x | 12 2 x 3 y 2 y 2 x 2 x | 3 (1+xy) |
3(6x 3 y 2 y 2 x | 1+24xy+6 3 x 2 x 2 y | 3x 2 (1+xy) |
2-6xy-3 2 x | -3 2 x | - 3 x |
The determinant:
In[]:=
Det[mat]
Out[]=
-2
In[]:=
ResourceFunction["JacobianDeterminant"][polyMap[x,y,z],{x,y,z}]
Out[]=
-2
Using FindInstance to find triplets of triplets, i.e., :=(,,),i∈[1,2,3] ∧ !=∧i≠j, for which the polynomial map gives the same result. Searching all three points is too slow:
p
i
x
i
y
i
z
i
p
i
p
j
c=10;k=1;AbsoluteTiming[sol=FindInstance[Join[Thread[polyMap[x1,y1,z1]==polyMap[x2,y2,z2]],Thread[polyMap[x1,y1,z1]==polyMap[x3,y3,z3]],Thread[polyMap[x2,y2,z2]==polyMap[x3,y3,z3]],{x1!=x2||y1!=y2||z1!=z2,x1!=x3||y1!=y3||z1!=z3,x2!=x3||y2!=y3||z2!=z3,-c≤x1≤c,-c≤y1≤c,-c≤z1≤c,-c≤x2≤c,-c≤y2≤c,-c≤z2≤c,-c≤x3≤c,-c≤y3≤c,-c≤z3≤c}],{x1,y1,z1,x2,y2,z2,x3,y3,z3},Reals,k,RandomSeeding->123]]
Out[]=
$Aborted
So, let us use a two-stage computation: we find first a solution with two different points, then we find a third point that is different that previously found two. Here is the two-point finding spec:
In[]:=
c=20;k=1;AbsoluteTiming[sol1=FindInstance[Join[Thread[polyMap[x1,y1,z1]==polyMap[x2,y2,z2]],{x1!=x2&&y1!=y2&&z1!=z2,-c≤x1≤c,-c≤y1≤c,-c≤z1≤c,-c≤x2≤c,-c≤y2≤c,-c≤z2≤c}],{x1,y1,z1,x2,y2,z2},Reals,k,RandomSeeding->123]]
Out[]=
0.035135,x10,y1-1,z1-,x2-6,y20,z2
71
18
1
18
Remark: Heuristically, the stronger condition is used in order to have more options for finding the third point.
x1!=x2&&y1!=y2&&z1!=z2
Here we find a third point:
In[]:=
AbsoluteTimingsol2=FindInstanceJoinThreadpolyMap[x3,y3,z3]==,-1,0,Thread[{x3,y3,z3}!=({x1,y1,z1}/.sol1[[1]])],Thread[{x3,y3,z3}!=({x2,y2,z2}/.sol1[[1]])],{-c≤x3≤c,-c≤y3≤c,-c≤z3≤c},{x3,y3,z3},Reals,k,RandomSeeding->123
1
18
Out[]=
0.011571,x36,y3-,z3
1
2
11
36
Combine the solutions into one:
In[]:=
sol=Flatten@{sol1,sol2}
Out[]=
x10,y1-1,z1-,x2-6,y20,z2,x36,y3-,z3
71
18
1
18
1
2
11
36
Check:
In[]:=
polyMap[x,y,z]/.AssociationThread[{x,y,z},{x1,y1,z1}/.sol]
Out[]=
,-1,0
1
18
In[]:=
polyMap[x,y,z]/.AssociationThread[{x,y,z},{x2,y2,z2}/.sol]
Out[]=
,-1,0
1
18
In[]:=
polyMap[x,y,z]/.AssociationThread[{x,y,z},{x3,y3,z3}/.sol]
Out[]=
,-1,0
1
18
All points are different:
In[]:=
({x1,y1,z1}/.sol)!=({x2,y2,z2}/.sol)&&({x1,y1,z1}/.sol)!=({x3,y3,z3}/.sol)&&({x2,y2,z2}/.sol)!=({x3,y3,z3}/.sol)
Out[]=
True
Plot
Plot
In this section we give a visual representation of the counterexample using a 3D contour plot -- the found points are plotted in red. Here we derive a 3D contour plot of the polynomial transformation:
AbsoluteTiming[gr=ContourPlot3D[polyMap[x,y,z],{x,-c,c},{y,-c,c},{z,-c,c},Contours->9,ContourStyleDirective[Opacity[0.4]],MeshNone,PlotRange->All];]
Out[]=
{72.9755,Null}
Combine the 3D contour plot with the points found in the previous section (plotted in red):
References
References
[MS1] Matthew Sparkes, "AI's solution to 87-year-old riddle takes mathematicians by surprise", (2026), New Scientist.
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
Jacobian conjecture counterexample by LLM
by Anton Antonov
Wolfram Community, STAFF PICKS, July 22, 2026
https://community.wolfram.com/groups/-/m/t/3766129
by Anton Antonov
Wolfram Community, STAFF PICKS, July 22, 2026
https://community.wolfram.com/groups/-/m/t/3766129