A local unit Kummer equation on any normal integral scheme has an actual root coordinate on its normalization, with the root-lifting universal property.
Source context 6 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
universe u v
open AlgebraicGeometry CategoryTheory Opposite TopologicalSpace
namespace AlgebraicCurve.CurveModel
open AlgebraicCurves.Geometry.Schemes.Proofs
open exists_root_fromNormalization_kummer_existsUnique_lift.KummerLift intheorem exists_affine_root_coordinate
{R : Type u} [CommRing R] {X : Scheme.{u}} [IsIntegral X]
(c : X ⟶ Spec (.of R)) (hnorm : ∀ x : X, IsIntegrallyClosed (X.presheaf.stalk x))
(n : ℕ+) (hn : IsUnit ((n : ℕ) : R)) (g h : X.functionField) (hg : g ≠ 0) (hh : h ≠ 0)
(V : X.Opens) (hV : IsAffineOpen V) [Nonempty V]
(hdiv : ∀ x ∈ V, g / h ^ (n : ℕ) ∈
(algebraMap (X.presheaf.stalk x) X.functionField).range ∧
h ^ (n : ℕ) / g ∈ (algebraMap (X.presheaf.stalk x) X.functionField).range) :
let A := AdjoinRoot (Polynomial.X ^ (n : ℕ) - Polynomial.C g : Polynomial X.functionField)
let f := Spec.map (CommRingCat.ofHom (algebraMap X.functionField A)) ≫
X.fromSpecStalk (genericPoint X)
∃ (v : Γ(X, V)), IsUnit v ∧ ∃ T : Γ(f.normalization, f.fromNormalization ⁻¹ᵁ V),
T ^ (n : ℕ) = f.fromNormalization.app V v ∧
f.toNormalization.app (f.fromNormalization ⁻¹ᵁ V) T =
(Spec (.of A)).presheaf.map (homOfLE le_top).op
((Scheme.ΓSpecIso (.of A)).inv
(algebraMap X.functionField A h⁻¹ * AdjoinRoot.root _)) ∧
∀ (Z : Scheme.{u}) (z : Z ⟶ X), z ⁻¹ᵁ V = ⊤ →
∀ τ : Γ(Z, ⊤), Z.presheaf.map (homOfLE le_top).op τ ^ (n : ℕ) = z.app V v →
∃! s : Z ⟶ f.normalization, s ≫ f.fromNormalization = z ∧
s.app (f.fromNormalization ⁻¹ᵁ V) T = Z.presheaf.map (homOfLE le_top).op τ := by
intro A f
have hvex := exists_hasValue (X := X) V (g / h ^ (n : ℕ))
(fun x hx => (hdiv x hx).1)
let v : Γ(X, V) := Classical.choose hvex
have hv : HasValue V v (g / h ^ (n : ℕ)) := Classical.choose_spec hvex
have hvunit : IsUnit v := hv.isUnit (div_ne_zero hg (pow_ne_zero _ hh))
(fun x hx => by rw [inv_div]; exact (hdiv x hx).2)
have hTex := exists_hasYVal_root (X := X) (k := (n : ℕ)) (g := g)
n.ne_zero V h v hv
let T : Γ((fK (n : ℕ) g).normalization,
(fK (n : ℕ) g).fromNormalization ⁻¹ᵁ V) :=
Classical.choose hTex
have hTval : HasYVal (n : ℕ) g V T
(algebraMap X.functionField A h⁻¹ * AdjoinRoot.root _) := Classical.choose_spec hTex
have hTpow : T ^ (n : ℕ) = (fK (n : ℕ) g).fromNormalization.app V v := by
apply (hTval.pow (n : ℕ)).eq
rw [root_div_pow]
exact hasYVal_app hv
have hTself : yval (n : ℕ) g V hV T =
algebraMap X.functionField A h⁻¹ * AdjoinRoot.root _ := by
simpa only [homOfLE_refl, op_id, CategoryTheory.Functor.map_id,
CommRingCat.id_apply] using hTval V hV inferInstance le_rfl
have hT := toNormalization_app_eq (X := X) (n : ℕ) g V hV T _ hTself
have hnv : IsUnit ((n : ℕ) : Γ(X, V)) := by
have hmap := hn.map (((Scheme.ΓSpecIso (.of R)).inv ≫ c.appLE ⊤ V le_top).hom)
simpa only [map_natCast] using hmap
refine ⟨v, hvunit, T, hTpow, hT, ?_⟩
exact existsUnique_lift_fromNormalization_kummer_of_isAffineOpen (X := X) hnorm
(n : ℕ) g V hV inferInstance hnv v hvunit h hh hv T hT