ModuleGeneratorReduction.lean
Nyll.SchemeTheory.NoetherNormalization.GeneratorReduction
7 declarations indexed from sourceView source ↗ Module documentation
Generator-sensitive linear normalization
This file packages the first induction step in the infinite-field form of Fried--Jarden, Proposition 6.2.1. Starting from a nonzero relation among n + 1 generators, the triangular change from LinearNormalization produces n new tail coordinates. The old generated algebra is integral over the algebra generated by those tail coordinates, while the discarded coordinate is retained explicitly in the generating equality.
Declarations
FieldArithmetic.Chapter06.adjoin_linearTailCoordinatesFirst_le
DocumentationEvery transformed tail coordinate belongs to the algebra generated by the original tuple.
Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace FieldArithmetic
namespace Chapter06
open MvPolynomial
variable {K : Type*} [Field K]
FieldArithmetic.Chapter06.adjoin_range_eq_adjoin_linearTailCoordinatesFirst_union
DocumentationThe triangular tail coordinates together with the unchanged first coordinate generate exactly the same algebra as the original tuple.
Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace FieldArithmetic
namespace Chapter06
open MvPolynomial
variable {K : Type*} [Field K]
FieldArithmetic.Chapter06.isIntegral_of_mem_adjoin_range_of_first
DocumentationIf the unchanged first coordinate is integral over the transformed tail algebra, then every element of the algebra generated by the original tuple is integral over that tail algebra.
Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace FieldArithmetic
namespace Chapter06
open MvPolynomial
variable {K : Type*} [Field K]
FieldArithmetic.Chapter06.isIntegral_of_mem_adjoin_range_self
DocumentationAn element of an algebra generated by a family is integral over that same generated algebra.
This elementary fact is the terminal, algebraically-independent branch of the normalization induction.
Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace FieldArithmetic
namespace Chapter06
open MvPolynomial
variable {K : Type*} [Field K]
FieldArithmetic.Chapter06.exists_generatorReducing_linearTail
DocumentationOne generator-reducing induction step.
The output is an explicit family of n triangular tail coordinates. Their generated algebra lies in the old generated algebra; the old algebra is integral over it; and adjoining the retained original coordinate recovers the old algebra exactly.
Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace FieldArithmetic
namespace Chapter06
open MvPolynomial
variable {K : Type*} [Field K]
FieldArithmetic.Chapter06.exists_linearTail_isIntegral_of_adjoin_eq_top
DocumentationIf the given tuple generates the whole algebra, one triangular step replaces n + 1 generators by n elements over which the whole algebra is integral.
Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace FieldArithmetic
namespace Chapter06
open MvPolynomial
variable {K : Type*} [Field K]
FieldArithmetic.Chapter06.exists_linearNormalization_span_integral
DocumentationLinear Noether normalization relative to a prescribed finite generating family.
The normalizing family is algebraically independent, every one of its members lies in the K-linear span of the original family, and the whole algebra generated by the original family is integral over the algebra generated by the normalizing family. The proof is by induction on the number of generators. In the dependent branch, exists_generatorReducing_linearTail replaces n + 1 generators by n triangular linear combinations.
Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace FieldArithmetic
namespace Chapter06
open MvPolynomial
variable {K : Type*} [Field K]
Lean source · full declarationtheorem exists_linearNormalization_span_integral
[Infinite K] {A : Type*} [CommRing A] [Nontrivial A] [Algebra K A] :
∀ {n : ℕ} (x : Fin n → A),
∃ r : ℕ, r ≤ n ∧
∃ t : Fin r → A,
(∀ i, t i ∈ Submodule.span K (Set.range x)) ∧
AlgebraicIndependent K t ∧
∀ y ∈ Algebra.adjoin K (Set.range x),
IsIntegral (Algebra.adjoin K (Set.range t)) y
| 0, x => by
refine ⟨0, le_rfl, x, ?_, algebraicIndependent_empty_type, ?_⟩
· exact fun i => Fin.elim0 i
· exact isIntegral_of_mem_adjoin_range_self x
| n + 1, x => by
by_cases hx : AlgebraicIndependent K x
· refine ⟨n + 1, le_rfl, x, ?_, hx, ?_⟩
· intro i
exact Submodule.subset_span ⟨i, rfl⟩
· exact isIntegral_of_mem_adjoin_range_self x
· have hnotinj :
¬ Function.Injective
(aeval x : MvPolynomial (Fin (n + 1)) K →ₐ[K] A) := by
intro hinj
exact hx (algebraicIndependent_iff_injective_aeval.mpr hinj)
obtain ⟨P, Q, hPQ, hne⟩ := Function.not_injective_iff.mp hnotinj
let F : MvPolynomial (Fin (n + 1)) K := P - Q
have hF : F ≠ 0 := sub_ne_zero.mpr hne
have hrel : aeval x F = 0 := by
dsimp only [F]
rw [map_sub, hPQ, sub_self]
obtain ⟨c, htail_le, -, hstep⟩ :=
exists_generatorReducing_linearTail x hF hrel
let tail : Fin n → A := linearTailCoordinatesFirst c x
obtain ⟨r, hr, t, htspan, htind, htail_integral⟩ :=
exists_linearNormalization_span_integral tail
refine ⟨r, hr.trans (Nat.le_succ n), t, ?_, htind, ?_⟩
· have htail_span :
∀ i, tail i ∈ Submodule.span K (Set.range x) := by
intro i
have hxi :
x i.succ ∈ Submodule.span K (Set.range x) :=
Submodule.subset_span ⟨i.succ, rfl⟩
have hx₀ :
x 0 ∈ Submodule.span K (Set.range x) :=
Submodule.subset_span ⟨0, rfl⟩
simpa only [tail, linearTailCoordinatesFirst, Algebra.smul_def] using
Submodule.sub_mem (Submodule.span K (Set.range x)) hxi
(Submodule.smul_mem (Submodule.span K (Set.range x)) (c i) hx₀)
have hspan_le :
Submodule.span K (Set.range tail) ≤
Submodule.span K (Set.range x) := by
rw [Submodule.span_le]
rintro y ⟨i, rfl⟩
exact htail_span i
exact fun i => hspan_le (htspan i)
· let B : Subalgebra K A := Algebra.adjoin K (Set.range t)
let S : Subalgebra K A := Algebra.adjoin K (Set.range tail)
have ht_mem_S : ∀ i, t i ∈ S := by
intro i
change t i ∈ S.toSubmodule
exact
(Submodule.span_le.mpr
(fun y hy => Algebra.subset_adjoin hy) :
Submodule.span K (Set.range tail) ≤ S.toSubmodule) (htspan i)
have hBS : B ≤ S := by
rw [Algebra.adjoin_le_iff]
rintro y ⟨i, rfl⟩
exact ht_mem_S i
let : Algebra B S := (Subalgebra.inclusion hBS).toAlgebra
have : IsScalarTower B S A :=
IsScalarTower.of_algebraMap_eq fun _ => rfl
let : Algebra.IsIntegral B S :=
⟨fun z =>
(isIntegral_algebraMap_iff (R := B) (A := S) (B := A)).mp
(htail_integral z z.property)⟩
intro y hy
exact isIntegral_trans y (hstep y hy)