The Jacobian criterion for a centered étale projection
ProvedAffineJacobian.isEtaleAt_centered_projectionLet be an arbitrary field, let be a finite set, and let . Put
where vanish at . Let be a matrix and assume that
is a linear isomorphism. Define and the -algebra map
Let be the prime of corresponding to the rational point ; equivalently, its inverse image under is . Then this map is étale at .
The assertion is local at the chosen point: it does not require to be prime or radical, or the projection to be étale everywhere. There is no assumption of characteristic zero, perfection, or algebraic closure. The cases of empty coordinate sets, , and are included.
Formalization Note. Mathlib's Algebra.IsEtaleAt B q asserts formal étaleness of the localized algebra at the prime. The complete proof constructs the graph presentation over , proves its relation ideal equals the kernel, identifies its Jacobian with the augmented derivative matrix, and localizes at its nonvanishing determinant. The resulting presentation is standard smooth of relative dimension zero, hence étale. The standalone Lean implementation imports only Mathlib; all original hypotheses and the formal statement are unchanged, including the arbitrary-field and empty-coordinate cases.
import Mathlib set_option autoImplicit false open scoped BigOperators
namespace AffineJacobian
theorem isEtaleAt_centered_projection
(K σ : Type*) [Field K] [Fintype σ]
(r d : ℕ) (F : Fin r → MvPolynomial σ K) (a : σ → K)
(hF : ∀ i, MvPolynomial.eval a (F i) = 0)
(c : Fin d → σ → K)
(L : (σ → K) ≃ₗ[K] ((Fin r → K) × (Fin d → K)))
(hL : ∀ v, L v =
((fun i => ∑ j, MvPolynomial.eval a (MvPolynomial.pderiv j (F i)) * v j),
(fun i => ∑ j, c i j * v j)))
(q : Ideal ((MvPolynomial σ K) ⧸ Ideal.span (Set.range F))) [q.IsPrime]
(hq : q.comap (Ideal.Quotient.mk (Ideal.span (Set.range F))) =
RingHom.ker (MvPolynomial.eval a)) :
letI : Algebra (MvPolynomial (Fin d) K)
((MvPolynomial σ K) ⧸ Ideal.span (Set.range F)) :=
((Ideal.Quotient.mk (Ideal.span (Set.range F))).comp
(MvPolynomial.aeval (fun i => ∑ j,
MvPolynomial.C (c i j) * (MvPolynomial.X j - MvPolynomial.C (a j)))).toRingHom).toAlgebra
Algebra.IsEtaleAt (MvPolynomial (Fin d) K) q := by sorry
end AffineJacobian