Module

ValuationSubring_exists_ringHom_extend_of_isAlgClosed.lean

Nyll.AlgebraicCurves.Valuations.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
26 declarations indexed from sourceView source ↗

Valuation Subring exists ring Hom extend of is Alg Closed

Imports17
  • Mathlib.Algebra.Polynomial.AlgebraMap
  • Mathlib.Algebra.Polynomial.Eval.Defs
  • Mathlib.Algebra.Polynomial.Eval.SMul
  • Mathlib.Algebra.Polynomial.FieldDivision
  • Mathlib.Algebra.Ring.Subring.Basic
  • Mathlib.FieldTheory.IsAlgClosed.Basic
  • Mathlib.Order.Zorn
  • Mathlib.RingTheory.Ideal.Maps
  • Mathlib.RingTheory.Ideal.Quotient.Operations
  • Mathlib.RingTheory.LocalRing.Basic
  • Mathlib.RingTheory.LocalRing.MaximalIdeal.Basic
  • Mathlib.RingTheory.LocalRing.ResidueField.Basic
  • Mathlib.RingTheory.Polynomial.Basic
  • Mathlib.RingTheory.PrincipalIdealDomain
  • Mathlib.RingTheory.Valuation.LocalSubring
  • Mathlib.RingTheory.Valuation.ValuationSubring
  • Mathlib.Tactic.Ring.RingNF
Imported by3

Declarations

AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph

The condition that a subring of the product has a unique second coordinate over zero.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
def IsGraph (Γ : Subring (L × Ω)) : Prop
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.snd_eq
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
theorem snd_eq (hΓ : IsGraph Γ) {x : L} {a b : Ω} (ha : (x, a) ∈ Γ) (hb : (x, b) ∈ Γ) : a = b
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.fst_ne_zero
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
theorem fst_ne_zero (hΓ : IsGraph Γ) {x : L} {a : Ω} (h : (x, a) ∈ Γ) (ha : a ≠ 0) : x ≠ 0
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.dom

The domain of a relation, obtained by projecting its subring onto the first factor.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
def dom (Γ : Subring (L × Ω)) : Subring L
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.mem_dom
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
theorem mem_dom {x : L} : x ∈ dom Γ ↔ ∃ a, (x, a) ∈ Γ
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.fn

A selected second coordinate of the relation, with value zero outside its domain.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
def fn (Γ : Subring (L × Ω)) (x : L) : Ω
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.fn_spec
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
theorem fn_spec (hΓ : IsGraph Γ) {x : L} {a : Ω} (h : (x, a) ∈ Γ) : fn Γ x = a
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.mem_of_mem_dom
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
theorem mem_of_mem_dom {x : L} (hx : x ∈ dom Γ) : (x, fn Γ x) ∈ Γ
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.hom

The ring homomorphism determined by a subring satisfying the graph condition.

Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
def hom (hΓ : IsGraph Γ) : dom Γ →+* Ω where
  toFun x := fn Γ x
  map_one' := hΓ.fn_spec Γ.one_mem
  map_mul' x y := hΓ.fn_spec (by simpa using Γ.mul_mem (mem_of_mem_dom x.2) (mem_of_mem_dom y.2))
  map_zero' := hΓ.fn_spec Γ.zero_mem
  map_add' x y := hΓ.fn_spec (by simpa using Γ.add_mem (mem_of_mem_dom x.2) (mem_of_mem_dom y.2))
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.hom_apply
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
theorem hom_apply (hΓ : IsGraph Γ) (x : dom Γ) : hΓ.hom x = fn Γ x
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.IsGraph.hom_eq_of_mem
Source context 6 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
namespace IsGraph
variable {Γ : Subring (L × Ω)}
theorem hom_eq_of_mem (hΓ : IsGraph Γ) {x : L} {a : Ω} (h : (x, a) ∈ Γ) :
    hΓ.hom ⟨x, mem_dom.mpr ⟨a, h⟩⟩ = a
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.graph

The graph subring of a ring homomorphism defined on a subring of the source field.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
def graph (R : Subring L) (φ : R →+* Ω) : Subring (L × Ω)
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.mem_graph
Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
theorem mem_graph {R : Subring L} {φ : R →+* Ω} {p : L × Ω} :
    p ∈ graph R φ ↔ ∃ h : p.1 ∈ R, φ ⟨p.1, h⟩ = p.2
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.isGraph_graph
Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
theorem isGraph_graph (R : Subring L) (φ : R →+* Ω) : IsGraph (graph R φ)
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.Above

The graph subrings containing the initial relation.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
def Above (Γ₀ : Subring (L × Ω)) : Set (Subring (L × Ω))
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.exists_maximal
Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
theorem exists_maximal (Γ₀ : Subring (L × Ω)) (h₀ : IsGraph Γ₀) :
    ∃ Γ, Γ₀ ≤ Γ ∧ Maximal (· ∈ Above Γ₀) Γ
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.isGraph_of_maximal
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Maximal
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
theorem isGraph_of_maximal : IsGraph Γ
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.le_of_maximal
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Maximal
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
theorem le_of_maximal : Γ₀ ≤ Γ
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.eq_of_le
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Maximal
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
theorem eq_of_le (Γ' : Subring (L × Ω)) (hΓ' : IsGraph Γ') (hle : Γ ≤ Γ') : Γ' = Γ
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.inv_mem
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Maximal
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
theorem inv_mem {x : L} {a : Ω} (h : (x, a) ∈ Γ) (ha : a ≠ 0) : (x⁻¹, a⁻¹) ∈ Γ
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.isUnit_iff
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Maximal
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
theorem isUnit_iff {x : IsGraph.dom Γ} : IsUnit x ↔ (isGraph_of_maximal hmax).hom x ≠ 0
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.isLocalRing
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Maximal
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
theorem isLocalRing : IsLocalRing (IsGraph.dom Γ)
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.mem_maximalIdeal_iff
Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Maximal
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
theorem mem_maximalIdeal_iff (x : IsGraph.dom Γ) :
    haveI := isLocalRing hmax
    x ∈ IsLocalRing.maximalIdeal (IsGraph.dom Γ) ↔ (isGraph_of_maximal hmax).hom x = 0 := by
  have := isLocalRing hmax
  rw [IsLocalRing.mem_maximalIdeal, mem_nonunits_iff, isUnit_iff hmax, not_not]
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.mem_dom_of_hom
Source context 8 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
section Extend
variable {Γ₀ Γ : Subring (L × Ω)} (hmax : Maximal (· ∈ Above Γ₀) Γ)
include hmax
open IsGraph Polynomial in
theorem mem_dom_of_hom [IsAlgClosed Ω] (z : L) {F : Type*} [Field F]
    (θ : Polynomial (dom Γ) →+* F)
    (hθm : haveI := isLocalRing hmax; ∀ b ∈ IsLocalRing.maximalIdeal (dom Γ), θ (C b) = 0)
    (hθz : ∀ p : Polynomial (dom Γ), aeval z p = 0 → θ p = 0) :
    z ∈ dom Γ := by
  classical
  have := isLocalRing hmax
  have hΓ := isGraph_of_maximal hmax
  let B := dom Γ
  let m := IsLocalRing.maximalIdeal B
  let k := B ⧸ m
  let : Field k := Ideal.Quotient.field m
  let π : Polynomial B →+* Polynomial k := mapRingHom (Ideal.Quotient.mk m)
  have hπ : Function.Surjective π := map_surjective _ Ideal.Quotient.mk_surjective
  let ev : Polynomial B →+* L := (aeval z : Polynomial B →ₐ[B] L).toRingHom
  let K₀ : Ideal (Polynomial B) := RingHom.ker ev
  let Jk : Ideal (Polynomial k) := K₀.map π
  have hθker : ∀ q, π q = 0 → θ q = 0 := by
    intro q hq
    have hq' : q ∈ RingHom.ker π := hq
    rw [ker_mapRingHom, Ideal.mk_ker] at hq'
    have hle : Ideal.map (C : B →+* Polynomial B) m ≤ RingHom.ker θ :=
      Ideal.map_le_iff_le_comap.mpr fun b hb => Ideal.mem_comap.mpr (RingHom.mem_ker.mpr (hθm b hb))
    exact hle hq'
  have hJk : Jk ≠ ⊤ := by
    intro htop
    have h1 : (1 : Polynomial k) ∈ Jk := htop ▸ Submodule.mem_top
    obtain ⟨q, hq, hq1⟩ := (Ideal.mem_map_iff_of_surjective π hπ).mp h1
    have hq0 : θ q = 0 := hθz q hq
    have h1q : θ (1 - q) = 0 := hθker _ (by rw [map_sub, map_one, hq1, sub_self])
    rw [map_sub, map_one, hq0, sub_zero] at h1q
    exact one_ne_zero h1q
  obtain ⟨h, hh⟩ := (IsPrincipalIdealRing.principal Jk).principal
  have hhu : ¬ IsUnit h := fun hu => hJk (by
    rw [hh, Ideal.submodule_span_eq, Ideal.span_singleton_eq_top]
    exact hu)
  have hker : ∀ b ∈ m, hΓ.hom b = 0 := fun b hb => (mem_maximalIdeal_iff hmax b).mp hb
  let ι : k →+* Ω := Ideal.Quotient.lift m hΓ.hom hker
  obtain ⟨ω, hω⟩ : ∃ ω : Ω, (h.map ι).eval ω = 0 := by
    by_cases h0 : h = 0
    · exact ⟨0, by simp [h0]⟩
    · have hdeg : (h.map ι).degree ≠ 0 := by
        rw [degree_map]
        exact fun hd => hhu (isUnit_iff_degree_eq_zero.mpr hd)
      obtain ⟨ω, hω⟩ := IsAlgClosed.exists_root (h.map ι) hdeg
      exact ⟨ω, hω⟩
  let G : Polynomial B →+* Ω := eval₂RingHom (ι.comp (Ideal.Quotient.mk m)) ω
  have hG : ∀ q ∈ K₀, G q = 0 := by
    intro q hq
    have hπq : π q ∈ Jk := Ideal.mem_map_of_mem π hq
    rw [hh, Ideal.submodule_span_eq, Ideal.mem_span_singleton] at hπq
    obtain ⟨r, hr⟩ := hπq
    have : G q = (π q).eval₂ ι ω := by
      simp only [G, π, coe_eval₂RingHom, coe_mapRingHom, eval₂_map]
    rw [this, hr, eval₂_mul, ← eval_map, hω, zero_mul]
  let S : Subring L := ev.range
  let e := RingHom.quotientKerEquivRange ev
  let g' : S →+* Ω := (Ideal.Quotient.lift K₀ G hG).comp e.symm.toRingHom
  have hg' : ∀ q : Polynomial B, g' ⟨ev q, ⟨q, rfl⟩⟩ = G q := by
    intro q
    have he : e (Ideal.Quotient.mk K₀ q) = ⟨ev q, ⟨q, rfl⟩⟩ := rfl
    change (Ideal.Quotient.lift K₀ G hG) (e.symm ⟨ev q, ⟨q, rfl⟩⟩) = G q
    rw [← he, RingEquiv.symm_apply_apply, Ideal.Quotient.lift_mk]
  let Γ' : Subring (L × Ω) := (S.subtype.prod g').range
  have hΓ' : IsGraph Γ' := by
    rintro a ⟨s, hs⟩
    simp only [RingHom.prod_apply, Prod.mk.injEq, Subring.coe_subtype] at hs
    obtain ⟨hs1, hs2⟩ := hs
    have : s = 0 := Subtype.ext hs1
    rw [← hs2, this, map_zero]
  have evC : ∀ b : B, ev (C b) = (b : L) := fun b => by
    change aeval z (C b) = (b : L)
    rw [aeval_C]
    rfl
  have hle : Γ ≤ Γ' := by
    rintro ⟨x, a⟩ hxa
    have hx : x ∈ B := mem_dom.mpr ⟨a, hxa⟩
    have hmemS : x ∈ S := ⟨C ⟨x, hx⟩, evC ⟨x, hx⟩⟩
    refine ⟨⟨x, hmemS⟩, ?_⟩
    simp only [RingHom.prod_apply, Prod.mk.injEq, Subring.coe_subtype, true_and]
    have h1 : g' ⟨x, hmemS⟩ = G (C ⟨x, hx⟩) := by
      have h2 := hg' (C ⟨x, hx⟩)
      have h3 : (⟨ev (C ⟨x, hx⟩), ⟨C ⟨x, hx⟩, rfl⟩⟩ : S) = ⟨x, hmemS⟩ := Subtype.ext (evC ⟨x, hx⟩)
      rw [h3] at h2
      exact h2
    rw [h1]
    simp only [G, coe_eval₂RingHom, eval₂_C, RingHom.comp_apply]
    change ι (Ideal.Quotient.mk m ⟨x, hx⟩) = a
    rw [Ideal.Quotient.lift_mk]
    exact hΓ.hom_eq_of_mem hxa
  have heq := eq_of_le hmax Γ' hΓ' hle
  have evX : ev X = z := by change aeval z (X : Polynomial B) = z; exact aeval_X z
  have hz : ((z, g' ⟨z, ⟨X, evX⟩⟩) : L × Ω) ∈ Γ' := ⟨⟨z, ⟨X, evX⟩⟩, rfl⟩
  rw [heq] at hz
  exact mem_dom.mpr ⟨_, hz⟩
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed.ChevalleyHom.main
Source context 5 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
namespace ChevalleyHom
variable {L Ω : Type*} [Field L] [Field Ω]
open IsGraph Polynomial in
theorem main [IsAlgClosed Ω] (R : Subring L) (φ : R →+* Ω) :
    ∃ (O : ValuationSubring L) (h : R ≤ O.toSubring) (ψ : O →+* Ω),
      ψ.comp (Subring.inclusion h) = φ ∧ RingHom.ker ψ = IsLocalRing.maximalIdeal O
ValuationSubring.exists_ringHom_extend_of_isAlgClosed
Source context 2 commands

Surrounding namespaces, section variables, and local commands at this declaration.

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_ringHom_extend_of_isAlgClosed
theorem _root_.ValuationSubring.exists_ringHom_extend_of_isAlgClosed
    {L Ω : Type*} [Field L] [Field Ω] [IsAlgClosed Ω] (R : Subring L) (φ : R →+* Ω) :
    ∃ (O : ValuationSubring L) (h : R ≤ O.toSubring) (ψ : O →+* Ω),
      ψ.comp (Subring.inclusion h) = φ ∧ RingHom.ker ψ = IsLocalRing.maximalIdeal O