FormalConjectures/Wikipedia/JacobianConjecture.lean

GitHub source file

Explanation legend Lean4 Domain Explanation Language (L4DEL)

L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.

L4DEL
Lean4 Domain Explanation Language

Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.

Project sources: Pinned project documentation, Formal Conjectures paper, arXiv v1

11 declarations, 1 contain sorry, 0 declared as axioms

Jacobian conjecture

Reference: Wikipedia

Imports (1)
Imported by 1 file
  1. abbrev JacobianConjecture.F Alpöge/Fable's counterexample: a polynomial self-map of k³ with Jacobian determinant -2 which is not injective line 41 source

    Source documentation

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

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: CommRing, MvPolynomial.RegularFunction, Fin, OfNat.ofNat, Nat

    Proof uses: Matrix.vecCons, MvPolynomial, HAdd.hAdd, Finsupp, HMul.hMul, HPow.hPow, MvPolynomial.X, HSub.hSub, Matrix.vecEmpty

    38 instances, coercions and auxiliary constants left out.

    noncomputable abbrev F [CommRing k] : RegularFunction k (Fin 3) (Fin 3) :=
    …
  2. abbrev JacobianConjecture.G A variant of Alpöge/Fable's counterexample: a polynomial self-map of k³ with Jacobian determinant 1 which is not injective line 48 source

    Source documentation

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

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: CommRing, MvPolynomial.RegularFunction, Fin, OfNat.ofNat, Nat

    Proof uses: Matrix.vecCons, MvPolynomial, HAdd.hAdd, Finsupp, HMul.hMul, HPow.hPow, MvPolynomial.X, Neg.neg, Matrix.vecEmpty

    41 instances, coercions and auxiliary constants left out.

    noncomputable abbrev G [CommRing k] : RegularFunction k (Fin 3) (Fin 3) :=
    …
  3. lemma JacobianConjecture.det_jacobian_F line 55 source

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: CommRing, Eq, MvPolynomial, Fin, OfNat.ofNat, Nat, Matrix.det, Finsupp, MvPolynomial.RegularFunction.Jacobian, JacobianConjecture.F, Neg.neg

    Proof uses: Eq.mpr, HSub.hSub, HAdd.hAdd, HMul.hMul, MvPolynomial.X, RingHom, MvPolynomial.C, HPow.hPow, id, congr, congrArg, Eq.trans, Equiv, Matrix, Matrix.of, Derivation, MvPolynomial.pderiv, Matrix.vecCons, Matrix.vecEmpty, Matrix.det.congr_simp and 104 more

    143 instances, coercions and auxiliary constants left out.

    Tactic trace: 3 steps

    Open to load the checked before-and-after goal states.

  4. lemma JacobianConjecture.det_jacobian_G line 68 source

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: CommRing, Eq, MvPolynomial, Fin, OfNat.ofNat, Nat, Matrix.det, Finsupp, MvPolynomial.RegularFunction.Jacobian, JacobianConjecture.G

    Proof uses: Eq.mpr, HSub.hSub, HAdd.hAdd, HMul.hMul, HPow.hPow, RingHom, MvPolynomial.C, MvPolynomial.X, Neg.neg, id, congrFun', congrArg, Eq.trans, Equiv, Matrix, Matrix.of, Derivation, MvPolynomial.pderiv, Matrix.vecCons, Matrix.vecEmpty and 94 more

    97 instances, coercions and auxiliary constants left out.

    Tactic trace: 3 steps

    Open to load the checked before-and-after goal states.

  5. lemma JacobianConjecture.aeval_F_eq F identifies the two distinct points (0, 0, -1/4) and (1, -3/2, 13/2) line 78 source

    Source documentation

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

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Field, CharZero, Eq, Fin, OfNat.ofNat, Nat, MvPolynomial.RegularFunction.aeval, JacobianConjecture.F, Matrix.vecCons, HDiv.hDiv, Neg.neg, Matrix.vecEmpty

    Proof uses: funext, List, List.Mem, List.finRange, HEq, Membership.mem, Finset, Fintype.elems, Fintype.complete, List.cons, List.Mem.head, Fin.mk, Nat.le_of_lt, Nat.le_refl, List.nil, Eq.mpr, HAdd.hAdd, HMul.hMul, HPow.hPow, id and 37 more

    133 instances, coercions and auxiliary constants left out.

    Tactic trace: 4 steps

    Open to load the checked before-and-after goal states.

    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]  := by
    …

    Mentions: JacobianConjecture.F

  6. lemma JacobianConjecture.aeval_G_eq G identifies the two distinct points (1, 0, 1) and (0, 3, -71) line 85 source

    Source documentation

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

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: CommRing, Eq, Fin, OfNat.ofNat, Nat, MvPolynomial.RegularFunction.aeval, JacobianConjecture.G, Matrix.vecCons, Matrix.vecEmpty, Neg.neg

    Proof uses: funext, List, List.Mem, List.finRange, HEq, Membership.mem, Finset, Fintype.elems, Fintype.complete, List.cons, List.Mem.head, Fin.mk, Nat.le_of_lt, Nat.le_refl, List.nil, Eq.mpr, HAdd.hAdd, HMul.hMul, HPow.hPow, id and 40 more

    123 instances, coercions and auxiliary constants left out.

    Tactic trace: 4 steps

    Open to load the checked before-and-after goal states.

    lemma aeval_G_eq [CommRing k] :
        (G k).aeval ![1, 0, (1 : k)] = (G k).aeval ![0, 3, -71] := by
    …

    Mentions: JacobianConjecture.G

  7. def JacobianConjecture.JacobianConjectureProp The predicate that the Jacobian conjecture holds for a given field and variable index type (i.e. number of variables) line 92 source

    Source documentation

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

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: CommRing, Fintype, DecidableEq

    Proof uses: MvPolynomial.RegularFunction, IsUnit, MvPolynomial, Finsupp, Nat, Matrix.det, MvPolynomial.RegularFunction.Jacobian, Exists, And, Eq, MvPolynomial.RegularFunction.comp, MvPolynomial.RegularFunction.id

    11 instances, coercions and auxiliary constants left out.

    def JacobianConjectureProp (k σ : Type*) [CommRing k] [Fintype σ] [DecidableEq σ] : Prop :=
    …
  8. theorem JacobianConjecture.jacobian_conjecture Documented declaration: jacobian_conjecture line 106 source

    Source documentation

    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.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: CommRing, Nontrivial, Iff, False, Fintype, DecidableEq, JacobianConjecture.JacobianConjectureProp

    Proof uses: Eq.mpr, Not, id, Eq, congrArg, false_iff, MvPolynomial.RegularFunction, Fin, OfNat.ofNat, Nat, And, MvPolynomial.RegularFunction.comp, JacobianConjecture.G, MvPolynomial.RegularFunction.id, Exists, Eq.rec, MvPolynomial, Finsupp, IsUnit, isUnit_one and 24 more

    40 instances, coercions and auxiliary constants left out.

    Tactic trace: 9 steps

    Open to load the checked before-and-after goal states.

    theorem jacobian_conjecture {k : Type} [CommRing k] [Nontrivial k] :
        answer(False) ↔ ∀ {σ : Type} [Fintype σ] [DecidableEq σ], JacobianConjectureProp k σ := by
    …

    Mentions: JacobianConjecture.JacobianConjectureProp

  9. theorem JacobianConjecture.jacobian_conjecture_two_variables Does the Jacobian conjecture hold in the two variable case? sorry line 120 source

    Source documentation

    Does the Jacobian conjecture hold in the two variable case?

    depends on sorry what this means

    Statement uses: Iff, True, Field, CharZero, JacobianConjecture.JacobianConjectureProp, Fin, OfNat.ofNat, Nat

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    16 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    theorem jacobian_conjecture_two_variables :
        answer(sorry) ↔ ∀ {k : Type} [Field k] [CharZero k], JacobianConjectureProp k (Fin 2) := by
    …

    Mentions: JacobianConjecture.JacobianConjectureProp

  10. lemma JacobianConjecture.sanity_check_condition_1 Let's check that we've stated the "invertible Jacobian" condition correctly by proving an equivalence line 135 source

    Source comment

    Let's check that we've stated the "invertible Jacobian" condition correctly by proving an equivalence

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Fintype, DecidableEq, Field, MvPolynomial.RegularFunction, Iff, IsUnit, MvPolynomial, Finsupp, Nat, Matrix.det, MvPolynomial.RegularFunction.Jacobian, Exists, And, Ne, OfNat.ofNat, Eq, RingHom, MvPolynomial.C

    Proof uses: of_eq_true, Not, Eq.trans, True, congrFun', congrArg, funext, iff_self

    58 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    lemma sanity_check_condition_1 (F : RegularFunction k σ σ) :
        IsUnit F.Jacobian.det ↔ (∃ (c : k), c ≠ 0 ∧ F.Jacobian.det = .C c) := by
    …

    Mentions: JacobianConjecture.F, c

  11. theorem JacobianConjecture.jacobian_conjecture_identity Let's apply the conjecture to a trivial case to make sure things are working as expected line 142 source

    Source comment

    Let's apply the conjecture to a trivial case to make sure things are working as expected.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Fintype, DecidableEq, Field, JacobianConjecture.JacobianConjectureProp, Exists, MvPolynomial.RegularFunction, And, Eq, MvPolynomial.RegularFunction.comp, MvPolynomial.RegularFunction.id

    Proof uses: Matrix, MvPolynomial, MvPolynomial.RegularFunction.Jacobian, OfNat.ofNat, Finsupp, Nat, Matrix.ext, MvPolynomial.ext, of_eq_true, MvPolynomial.coeff, Eq.trans, Pi.single, True, congr, congrArg, congrFun', Equiv, Matrix.of, Derivation, MvPolynomial.pderiv and 9 more

    34 instances, coercions and auxiliary constants left out.

    Tactic trace: 5 steps

    Open to load the checked before-and-after goal states.

    theorem jacobian_conjecture_identity (H : JacobianConjectureProp k σ) :
        ∃ (G : RegularFunction k σ σ), G.comp (id k σ) = id k σ ∧
        (id k σ).comp G = id k σ := by
    …

    Mentions: JacobianConjecture.JacobianConjectureProp, JacobianConjecture.G