/- Copyright 2025 The Formal Conjectures Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -/ import FormalConjecturesUtil

Jacobian conjecture

Reference: Wikipedia

namespace JacobianConjecturesection Conjectureopen MvPolynomial RegularFunctionvariable (k : Type*)name_poly_vars X, Y, Z over k

Alpöge/Fable's counterexample: a polynomial self-map of with Jacobian determinant -2 which is not injective.

noncomputable abbrev F [CommRing k] : RegularFunction k (Fin 3) (Fin 3) := ![(1 + X * Y)^3 * Z + Y ^ 2 * (1 + X * Y) * (4 + 3 * X * Y), Y + 3 * X * (1 + X * Y) ^ 2 * Z + 3 * X * Y ^ 2 * (4 + 3 * X * Y), 2 * X - 3 * X ^ 2 * Y - X ^ 3 * Z]

A variant of Alpöge/Fable's counterexample: a polynomial self-map of with Jacobian determinant 1 which is not injective.

noncomputable abbrev G [CommRing k] : RegularFunction k (Fin 3) (Fin 3) := ![(1 + 2 * X * Y) ^ 3 * Z + 4 * Y ^ 2 * (1 + 2 * X * Y) * (2 + 3 * (X * Y)), Y + 3 * X * (1 + 2 * X * Y) ^ 2 * Z + 12 * X * Y ^ 2 * (2 + 3 * (X * Y)), -X + 3 * X ^ 2 * Y + X ^ 3 * Z]@[category API, AMS 14] lemma det_jacobian_F [CommRing k] : (F k).Jacobian.det = -2 := k:Type u_1inst✝:CommRing k(F k).Jacobian.det = -2 k:Type u_1inst✝:CommRing k-((Z * (C 3 * ((1 + X * Y) ^ 2 * Y)) + (Y ^ 2 * (1 + X * Y) * (Y * C 3) + (C 4 + C 3 * X * Y) * (Y ^ 2 * Y))) * (1 + Z * (C 3 * X * (C 2 * ((1 + X * Y) * X))) + (C 3 * X * Y ^ 2 * (C 3 * X) + (C 4 + C 3 * X * Y) * (C 3 * X * (C 2 * Y)))) * X ^ 3) + (Z * (C 3 * ((1 + X * Y) ^ 2 * Y)) + (Y ^ 2 * (1 + X * Y) * (Y * C 3) + (C 4 + C 3 * X * Y) * (Y ^ 2 * Y))) * (C 3 * X ^ 2) * (C 3 * X * (1 + X * Y) ^ 2) + (Z * (C 3 * X * (C 2 * ((1 + X * Y) * Y)) + (1 + X * Y) ^ 2 * C 3) + (C 3 * X * Y ^ 2 * (Y * C 3) + (C 4 + C 3 * X * Y) * (Y ^ 2 * C 3))) * (Z * (C 3 * ((1 + X * Y) ^ 2 * X)) + (Y ^ 2 * (1 + X * Y) * (C 3 * X) + (C 4 + C 3 * X * Y) * (Y ^ 2 * X + (1 + X * Y) * (C 2 * Y)))) * X ^ 3 + -((Z * (C 3 * X * (C 2 * ((1 + X * Y) * Y)) + (1 + X * Y) ^ 2 * C 3) + (C 3 * X * Y ^ 2 * (Y * C 3) + (C 4 + C 3 * X * Y) * (Y ^ 2 * C 3))) * (C 3 * X ^ 2) * (1 + X * Y) ^ 3) + (C 2 - Y * (C 3 * (C 2 * X)) - Z * (C 3 * X ^ 2)) * (Z * (C 3 * ((1 + X * Y) ^ 2 * X)) + (Y ^ 2 * (1 + X * Y) * (C 3 * X) + (C 4 + C 3 * X * Y) * (Y ^ 2 * X + (1 + X * Y) * (C 2 * Y)))) * (C 3 * X * (1 + X * Y) ^ 2) - (C 2 - Y * (C 3 * (C 2 * X)) - Z * (C 3 * X ^ 2)) * (1 + Z * (C 3 * X * (C 2 * ((1 + X * Y) * X))) + (C 3 * X * Y ^ 2 * (C 3 * X) + (C 4 + C 3 * X * Y) * (C 3 * X * (C 2 * Y)))) * (1 + X * Y) ^ 3 = -C 2 k:Type u_1inst✝:CommRing k-((Z * (3 * ((1 + X * Y) ^ 2 * Y)) + (Y ^ 2 * (1 + X * Y) * (Y * 3) + (4 + 3 * X * Y) * (Y ^ 2 * Y))) * (1 + Z * (3 * X * (2 * ((1 + X * Y) * X))) + (3 * X * Y ^ 2 * (3 * X) + (4 + 3 * X * Y) * (3 * X * (2 * Y)))) * X ^ 3) + (Z * (3 * ((1 + X * Y) ^ 2 * Y)) + (Y ^ 2 * (1 + X * Y) * (Y * 3) + (4 + 3 * X * Y) * (Y ^ 2 * Y))) * (3 * X ^ 2) * (3 * X * (1 + X * Y) ^ 2) + (Z * (3 * X * (2 * ((1 + X * Y) * Y)) + (1 + X * Y) ^ 2 * 3) + (3 * X * Y ^ 2 * (Y * 3) + (4 + 3 * X * Y) * (Y ^ 2 * 3))) * (Z * (3 * ((1 + X * Y) ^ 2 * X)) + (Y ^ 2 * (1 + X * Y) * (3 * X) + (4 + 3 * X * Y) * (Y ^ 2 * X + (1 + X * Y) * (2 * Y)))) * X ^ 3 + -((Z * (3 * X * (2 * ((1 + X * Y) * Y)) + (1 + X * Y) ^ 2 * 3) + (3 * X * Y ^ 2 * (Y * 3) + (4 + 3 * X * Y) * (Y ^ 2 * 3))) * (3 * X ^ 2) * (1 + X * Y) ^ 3) + (2 - Y * (3 * (2 * X)) - Z * (3 * X ^ 2)) * (Z * (3 * ((1 + X * Y) ^ 2 * X)) + (Y ^ 2 * (1 + X * Y) * (3 * X) + (4 + 3 * X * Y) * (Y ^ 2 * X + (1 + X * Y) * (2 * Y)))) * (3 * X * (1 + X * Y) ^ 2) - (2 - Y * (3 * (2 * X)) - Z * (3 * X ^ 2)) * (1 + Z * (3 * X * (2 * ((1 + X * Y) * X))) + (3 * X * Y ^ 2 * (3 * X) + (4 + 3 * X * Y) * (3 * X * (2 * Y)))) * (1 + X * Y) ^ 3 = -2 All goals completed! 🐙@[category API, AMS 14] lemma det_jacobian_G [CommRing k] : (G k).Jacobian.det = 1 := k:Type u_1inst✝:CommRing k(G k).Jacobian.det = 1 k:Type u_1inst✝:CommRing k(3 * (1 + C 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + C 2 * 1) * Y + C 2 * X * 0)) * Z + (1 + C 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + C 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + C 2 * X * Y) + C 4 * Y ^ 2 * (0 + ((0 * X + C 2 * 1) * Y + C 2 * X * 0))) * (C 2 + C 3 * (X * Y)) + C 4 * Y ^ 2 * (1 + C 2 * X * Y) * (0 + (0 * (X * Y) + C 3 * (1 * Y + X * 0))))) * (1 + (((0 * X + C 3 * 0) * (1 + C 2 * X * Y) ^ 2 + C 3 * X * (2 * (1 + C 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 1)))) * Z + C 3 * X * (1 + C 2 * X * Y) ^ 2 * 0) + (((0 * X + C 12 * 0) * Y ^ 2 + C 12 * X * (2 * Y ^ (2 - 1) * 1)) * (C 2 + C 3 * (X * Y)) + C 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 1))))) * (-0 + ((0 * X ^ 2 + C 3 * (2 * X ^ (2 - 1) * 0)) * Y + C 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 1)) - (3 * (1 + C 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + C 2 * 1) * Y + C 2 * X * 0)) * Z + (1 + C 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + C 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + C 2 * X * Y) + C 4 * Y ^ 2 * (0 + ((0 * X + C 2 * 1) * Y + C 2 * X * 0))) * (C 2 + C 3 * (X * Y)) + C 4 * Y ^ 2 * (1 + C 2 * X * Y) * (0 + (0 * (X * Y) + C 3 * (1 * Y + X * 0))))) * (-0 + ((0 * X ^ 2 + C 3 * (2 * X ^ (2 - 1) * 0)) * Y + C 3 * X ^ 2 * 1) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 0)) * (0 + (((0 * X + C 3 * 0) * (1 + C 2 * X * Y) ^ 2 + C 3 * X * (2 * (1 + C 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 0)))) * Z + C 3 * X * (1 + C 2 * X * Y) ^ 2 * 1) + (((0 * X + C 12 * 0) * Y ^ 2 + C 12 * X * (2 * Y ^ (2 - 1) * 0)) * (C 2 + C 3 * (X * Y)) + C 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 0))))) - (0 + (((0 * X + C 3 * 1) * (1 + C 2 * X * Y) ^ 2 + C 3 * X * (2 * (1 + C 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + C 2 * 1) * Y + C 2 * X * 0)))) * Z + C 3 * X * (1 + C 2 * X * Y) ^ 2 * 0) + (((0 * X + C 12 * 1) * Y ^ 2 + C 12 * X * (2 * Y ^ (2 - 1) * 0)) * (C 2 + C 3 * (X * Y)) + C 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + C 3 * (1 * Y + X * 0))))) * (3 * (1 + C 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 1)) * Z + (1 + C 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + C 4 * (2 * Y ^ (2 - 1) * 1)) * (1 + C 2 * X * Y) + C 4 * Y ^ 2 * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 1))) * (C 2 + C 3 * (X * Y)) + C 4 * Y ^ 2 * (1 + C 2 * X * Y) * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 1))))) * (-0 + ((0 * X ^ 2 + C 3 * (2 * X ^ (2 - 1) * 0)) * Y + C 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 1)) + (0 + (((0 * X + C 3 * 1) * (1 + C 2 * X * Y) ^ 2 + C 3 * X * (2 * (1 + C 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + C 2 * 1) * Y + C 2 * X * 0)))) * Z + C 3 * X * (1 + C 2 * X * Y) ^ 2 * 0) + (((0 * X + C 12 * 1) * Y ^ 2 + C 12 * X * (2 * Y ^ (2 - 1) * 0)) * (C 2 + C 3 * (X * Y)) + C 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + C 3 * (1 * Y + X * 0))))) * (-0 + ((0 * X ^ 2 + C 3 * (2 * X ^ (2 - 1) * 0)) * Y + C 3 * X ^ 2 * 1) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 0)) * (3 * (1 + C 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 0)) * Z + (1 + C 2 * X * Y) ^ 3 * 1 + (((0 * Y ^ 2 + C 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + C 2 * X * Y) + C 4 * Y ^ 2 * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 0))) * (C 2 + C 3 * (X * Y)) + C 4 * Y ^ 2 * (1 + C 2 * X * Y) * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 0))))) + (-1 + ((0 * X ^ 2 + C 3 * (2 * X ^ (2 - 1) * 1)) * Y + C 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 1 * Z + X ^ 3 * 0)) * (3 * (1 + C 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 1)) * Z + (1 + C 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + C 4 * (2 * Y ^ (2 - 1) * 1)) * (1 + C 2 * X * Y) + C 4 * Y ^ 2 * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 1))) * (C 2 + C 3 * (X * Y)) + C 4 * Y ^ 2 * (1 + C 2 * X * Y) * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 1))))) * (0 + (((0 * X + C 3 * 0) * (1 + C 2 * X * Y) ^ 2 + C 3 * X * (2 * (1 + C 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 0)))) * Z + C 3 * X * (1 + C 2 * X * Y) ^ 2 * 1) + (((0 * X + C 12 * 0) * Y ^ 2 + C 12 * X * (2 * Y ^ (2 - 1) * 0)) * (C 2 + C 3 * (X * Y)) + C 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 0))))) - (-1 + ((0 * X ^ 2 + C 3 * (2 * X ^ (2 - 1) * 1)) * Y + C 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 1 * Z + X ^ 3 * 0)) * (1 + (((0 * X + C 3 * 0) * (1 + C 2 * X * Y) ^ 2 + C 3 * X * (2 * (1 + C 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 1)))) * Z + C 3 * X * (1 + C 2 * X * Y) ^ 2 * 0) + (((0 * X + C 12 * 0) * Y ^ 2 + C 12 * X * (2 * Y ^ (2 - 1) * 1)) * (C 2 + C 3 * (X * Y)) + C 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 1))))) * (3 * (1 + C 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 0)) * Z + (1 + C 2 * X * Y) ^ 3 * 1 + (((0 * Y ^ 2 + C 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + C 2 * X * Y) + C 4 * Y ^ 2 * (0 + ((0 * X + C 2 * 0) * Y + C 2 * X * 0))) * (C 2 + C 3 * (X * Y)) + C 4 * Y ^ 2 * (1 + C 2 * X * Y) * (0 + (0 * (X * Y) + C 3 * (0 * Y + X * 0))))) = 1 k:Type u_1inst✝:CommRing k(3 * (1 + 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + 2 * 1) * Y + 2 * X * 0)) * Z + (1 + 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + 2 * X * Y) + 4 * Y ^ 2 * (0 + ((0 * X + 2 * 1) * Y + 2 * X * 0))) * (2 + 3 * (X * Y)) + 4 * Y ^ 2 * (1 + 2 * X * Y) * (0 + (0 * (X * Y) + 3 * (1 * Y + X * 0))))) * (1 + (((0 * X + 3 * 0) * (1 + 2 * X * Y) ^ 2 + 3 * X * (2 * (1 + 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 1)))) * Z + 3 * X * (1 + 2 * X * Y) ^ 2 * 0) + (((0 * X + 12 * 0) * Y ^ 2 + 12 * X * (2 * Y ^ (2 - 1) * 1)) * (2 + 3 * (X * Y)) + 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 1))))) * (-0 + ((0 * X ^ 2 + 3 * (2 * X ^ (2 - 1) * 0)) * Y + 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 1)) - (3 * (1 + 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + 2 * 1) * Y + 2 * X * 0)) * Z + (1 + 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + 2 * X * Y) + 4 * Y ^ 2 * (0 + ((0 * X + 2 * 1) * Y + 2 * X * 0))) * (2 + 3 * (X * Y)) + 4 * Y ^ 2 * (1 + 2 * X * Y) * (0 + (0 * (X * Y) + 3 * (1 * Y + X * 0))))) * (-0 + ((0 * X ^ 2 + 3 * (2 * X ^ (2 - 1) * 0)) * Y + 3 * X ^ 2 * 1) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 0)) * (0 + (((0 * X + 3 * 0) * (1 + 2 * X * Y) ^ 2 + 3 * X * (2 * (1 + 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 0)))) * Z + 3 * X * (1 + 2 * X * Y) ^ 2 * 1) + (((0 * X + 12 * 0) * Y ^ 2 + 12 * X * (2 * Y ^ (2 - 1) * 0)) * (2 + 3 * (X * Y)) + 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 0))))) - (0 + (((0 * X + 3 * 1) * (1 + 2 * X * Y) ^ 2 + 3 * X * (2 * (1 + 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + 2 * 1) * Y + 2 * X * 0)))) * Z + 3 * X * (1 + 2 * X * Y) ^ 2 * 0) + (((0 * X + 12 * 1) * Y ^ 2 + 12 * X * (2 * Y ^ (2 - 1) * 0)) * (2 + 3 * (X * Y)) + 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + 3 * (1 * Y + X * 0))))) * (3 * (1 + 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 1)) * Z + (1 + 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + 4 * (2 * Y ^ (2 - 1) * 1)) * (1 + 2 * X * Y) + 4 * Y ^ 2 * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 1))) * (2 + 3 * (X * Y)) + 4 * Y ^ 2 * (1 + 2 * X * Y) * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 1))))) * (-0 + ((0 * X ^ 2 + 3 * (2 * X ^ (2 - 1) * 0)) * Y + 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 1)) + (0 + (((0 * X + 3 * 1) * (1 + 2 * X * Y) ^ 2 + 3 * X * (2 * (1 + 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + 2 * 1) * Y + 2 * X * 0)))) * Z + 3 * X * (1 + 2 * X * Y) ^ 2 * 0) + (((0 * X + 12 * 1) * Y ^ 2 + 12 * X * (2 * Y ^ (2 - 1) * 0)) * (2 + 3 * (X * Y)) + 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + 3 * (1 * Y + X * 0))))) * (-0 + ((0 * X ^ 2 + 3 * (2 * X ^ (2 - 1) * 0)) * Y + 3 * X ^ 2 * 1) + (3 * X ^ (3 - 1) * 0 * Z + X ^ 3 * 0)) * (3 * (1 + 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 0)) * Z + (1 + 2 * X * Y) ^ 3 * 1 + (((0 * Y ^ 2 + 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + 2 * X * Y) + 4 * Y ^ 2 * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 0))) * (2 + 3 * (X * Y)) + 4 * Y ^ 2 * (1 + 2 * X * Y) * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 0))))) + (-1 + ((0 * X ^ 2 + 3 * (2 * X ^ (2 - 1) * 1)) * Y + 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 1 * Z + X ^ 3 * 0)) * (3 * (1 + 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 1)) * Z + (1 + 2 * X * Y) ^ 3 * 0 + (((0 * Y ^ 2 + 4 * (2 * Y ^ (2 - 1) * 1)) * (1 + 2 * X * Y) + 4 * Y ^ 2 * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 1))) * (2 + 3 * (X * Y)) + 4 * Y ^ 2 * (1 + 2 * X * Y) * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 1))))) * (0 + (((0 * X + 3 * 0) * (1 + 2 * X * Y) ^ 2 + 3 * X * (2 * (1 + 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 0)))) * Z + 3 * X * (1 + 2 * X * Y) ^ 2 * 1) + (((0 * X + 12 * 0) * Y ^ 2 + 12 * X * (2 * Y ^ (2 - 1) * 0)) * (2 + 3 * (X * Y)) + 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 0))))) - (-1 + ((0 * X ^ 2 + 3 * (2 * X ^ (2 - 1) * 1)) * Y + 3 * X ^ 2 * 0) + (3 * X ^ (3 - 1) * 1 * Z + X ^ 3 * 0)) * (1 + (((0 * X + 3 * 0) * (1 + 2 * X * Y) ^ 2 + 3 * X * (2 * (1 + 2 * X * Y) ^ (2 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 1)))) * Z + 3 * X * (1 + 2 * X * Y) ^ 2 * 0) + (((0 * X + 12 * 0) * Y ^ 2 + 12 * X * (2 * Y ^ (2 - 1) * 1)) * (2 + 3 * (X * Y)) + 12 * X * Y ^ 2 * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 1))))) * (3 * (1 + 2 * X * Y) ^ (3 - 1) * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 0)) * Z + (1 + 2 * X * Y) ^ 3 * 1 + (((0 * Y ^ 2 + 4 * (2 * Y ^ (2 - 1) * 0)) * (1 + 2 * X * Y) + 4 * Y ^ 2 * (0 + ((0 * X + 2 * 0) * Y + 2 * X * 0))) * (2 + 3 * (X * Y)) + 4 * Y ^ 2 * (1 + 2 * X * Y) * (0 + (0 * (X * Y) + 3 * (0 * Y + X * 0))))) = 1 All goals completed! 🐙

F identifies the two distinct points (0, 0, -1/4) and (1, -3/2, 13/2).

@[category API, AMS 14] lemma aeval_F_eq [Field k] [CharZero k] : (F k).aeval ![(0 : k), 0, -1/4] = (F k).aeval ![(1 : k), -3/2, 13/2] := k:Type u_1inst✝¹:Field kinst✝:CharZero k(F k).aeval ![0, 0, -1 / 4] = (F k).aeval ![1, -3 / 2, 13 / 2] k:Type u_1inst✝¹:Field kinst✝:CharZero ki:Fin 3(F k).aeval ![0, 0, -1 / 4] i = (F k).aeval ![1, -3 / 2, 13 / 2] i k:Type u_1inst✝¹:Field kinst✝:CharZero k(F k).aeval ![0, 0, -1 / 4] ((fun i i) 0, ) = (F k).aeval ![1, -3 / 2, 13 / 2] ((fun i i) 0, )k:Type u_1inst✝¹:Field kinst✝:CharZero k(F k).aeval ![0, 0, -1 / 4] ((fun i i) 1, ) = (F k).aeval ![1, -3 / 2, 13 / 2] ((fun i i) 1, )k:Type u_1inst✝¹:Field kinst✝:CharZero k(F k).aeval ![0, 0, -1 / 4] ((fun i i) 2, ) = (F k).aeval ![1, -3 / 2, 13 / 2] ((fun i i) 2, ) k:Type u_1inst✝¹:Field kinst✝:CharZero k(F k).aeval ![0, 0, -1 / 4] ((fun i i) 0, ) = (F k).aeval ![1, -3 / 2, 13 / 2] ((fun i i) 0, )k:Type u_1inst✝¹:Field kinst✝:CharZero k(F k).aeval ![0, 0, -1 / 4] ((fun i i) 1, ) = (F k).aeval ![1, -3 / 2, 13 / 2] ((fun i i) 1, )k:Type u_1inst✝¹:Field kinst✝:CharZero k(F k).aeval ![0, 0, -1 / 4] ((fun i i) 2, ) = (F k).aeval ![1, -3 / 2, 13 / 2] ((fun i i) 2, ) k:Type u_1inst✝¹:Field kinst✝:CharZero k0 = 2 - 3 * (-3 / 2) - 13 / 2 k:Type u_1inst✝¹:Field kinst✝:CharZero k-1 / 4 = (1 + -3 / 2) ^ 3 * (13 / 2) + (-3 / 2) ^ 2 * (1 + -3 / 2) * (4 + 3 * (-3 / 2))k:Type u_1inst✝¹:Field kinst✝:CharZero k0 = -3 / 2 + 3 * (1 + -3 / 2) ^ 2 * (13 / 2) + 3 * (-3 / 2) ^ 2 * (4 + 3 * (-3 / 2))k:Type u_1inst✝¹:Field kinst✝:CharZero k0 = 2 - 3 * (-3 / 2) - 13 / 2 All goals completed! 🐙

G identifies the two distinct points (1, 0, 1) and (0, 3, -71).

@[category API, AMS 14] lemma aeval_G_eq [CommRing k] : (G k).aeval ![1, 0, (1 : k)] = (G k).aeval ![0, 3, -71] := k:Type u_1inst✝:CommRing k(G k).aeval ![1, 0, 1] = (G k).aeval ![0, 3, -71] k:Type u_1inst✝:CommRing ki:Fin 3(G k).aeval ![1, 0, 1] i = (G k).aeval ![0, 3, -71] i k:Type u_1inst✝:CommRing k(G k).aeval ![1, 0, 1] ((fun i i) 0, ) = (G k).aeval ![0, 3, -71] ((fun i i) 0, )k:Type u_1inst✝:CommRing k(G k).aeval ![1, 0, 1] ((fun i i) 1, ) = (G k).aeval ![0, 3, -71] ((fun i i) 1, )k:Type u_1inst✝:CommRing k(G k).aeval ![1, 0, 1] ((fun i i) 2, ) = (G k).aeval ![0, 3, -71] ((fun i i) 2, ) k:Type u_1inst✝:CommRing k(G k).aeval ![1, 0, 1] ((fun i i) 0, ) = (G k).aeval ![0, 3, -71] ((fun i i) 0, )k:Type u_1inst✝:CommRing k(G k).aeval ![1, 0, 1] ((fun i i) 1, ) = (G k).aeval ![0, 3, -71] ((fun i i) 1, )k:Type u_1inst✝:CommRing k(G k).aeval ![1, 0, 1] ((fun i i) 2, ) = (G k).aeval ![0, 3, -71] ((fun i i) 2, ) All goals completed! 🐙; All goals completed! 🐙

The predicate that the Jacobian conjecture holds for a given field and variable index type (i.e. number of variables).

def JacobianConjectureProp (k σ : Type*) [CommRing k] [Fintype σ] [DecidableEq σ] : Prop := (F : RegularFunction k σ σ), IsUnit F.Jacobian.det (G : RegularFunction k σ σ), G.comp F = id k σ F.comp G = id k σset_option linter.style.answer_attribute false in

The Jacobian Conjecture: any regular function (i.e. vector valued polynomial function from) kⁿ → kᵐ whose Jacobian is a non-zero constant has an inverse that is given by a regular function, where k is a field of characteristic 0.

This is false: F has Jacobian determinant 1 but identifies two distinct points, so it admits no inverse. This counterexample works in all characteristics.

k:Typeinst✝¹:CommRing kinst✝:Nontrivial kh: {σ : Type} [inst : Fintype σ] [inst_1 : DecidableEq σ], JacobianConjectureProp k σH:RegularFunction k (Fin 3) (Fin 3)hGH:(G k).comp H = RegularFunction.id k (Fin 3)hleft:Function.LeftInverse H.aeval (G k).aevalFalse k:Typeinst✝¹:CommRing kinst✝:Nontrivial kh: {σ : Type} [inst : Fintype σ] [inst_1 : DecidableEq σ], JacobianConjectureProp k σH:RegularFunction k (Fin 3) (Fin 3)hGH:(G k).comp H = RegularFunction.id k (Fin 3)hleft:Function.LeftInverse H.aeval (G k).aevalh1:1 = 0False All goals completed! 🐙

Does the Jacobian conjecture hold in the two variable case?

@[category research open, AMS 14] theorem jacobian_conjecture_two_variables : answer(sorry) {k : Type} [Field k] [CharZero k], JacobianConjectureProp k (Fin 2) := True {k : Type} [inst : Field k] [CharZero k], JacobianConjectureProp k (Fin 2) All goals completed! 🐙end Conjecturesection Testsopen MvPolynomial RegularFunctionvariable {k σ : Type} [Fintype σ] [DecidableEq σ] [Field k]-- Let's check that we've stated the "invertible Jacobian" condition correctly -- by proving an equivalence @[category API, AMS 14] lemma sanity_check_condition_1 (F : RegularFunction k σ σ) : IsUnit F.Jacobian.det ( (c : k), c 0 F.Jacobian.det = .C c) := k:Typeσ:Typeinst✝²:Fintype σinst✝¹:DecidableEq σinst✝:Field kF:RegularFunction k σ σIsUnit F.Jacobian.det c, c 0 F.Jacobian.det = C c All goals completed! 🐙k:Typeσ:Typeinst✝²:Fintype σinst✝¹:DecidableEq σinst✝:Field kH:JacobianConjectureProp k σ(RegularFunction.id k σ).Jacobian = 1 k:Typeσ:Typeinst✝²:Fintype σinst✝¹:DecidableEq σinst✝:Field kH:JacobianConjectureProp k σi:σj:σm✝:σ →₀ coeff m✝ ((RegularFunction.id k σ).Jacobian i j) = coeff m✝ (1 i j) All goals completed! 🐙end Testsend JacobianConjecture