Module

ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.lean

Nyll.AlgebraicCurves.Valuations.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
37 declarations indexed from sourceView source ↗

Valuation Subring exists valuation mul eq one of finrank le card

Declarations

AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.mul_lt_one_aux
Source context 9 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
theorem mul_lt_one_aux {Γ₀ : Type*} [LinearOrderedCommGroupWithZero Γ₀] {a b : Γ₀}
    (ha : a ≤ 1) (hb : b < 1) : a * b < 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.mem_iff
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Over
variable {O : ValuationSubring F} {V : ValuationSubring F'}
  (hV : V.comap (algebraMap F F') = O)
include hV
theorem mem_iff (x : F) : algebraMap F F' x ∈ V ↔ x ∈ O
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.lt_one_iff
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Over
variable {O : ValuationSubring F} {V : ValuationSubring F'}
  (hV : V.comap (algebraMap F F') = O)
include hV
theorem lt_one_iff (x : F) : V.valuation (algebraMap F F' x) < 1 ↔ O.valuation x < 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.le_one
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Over
variable {O : ValuationSubring F} {V : ValuationSubring F'}
  (hV : V.comap (algebraMap F F') = O)
include hV
theorem le_one {x : F} (hx : x ∈ O) : V.valuation (algebraMap F F' x) ≤ 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.eq_one_iff
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Over
variable {O : ValuationSubring F} {V : ValuationSubring F'}
  (hV : V.comap (algebraMap F F') = O)
include hV
theorem eq_one_iff (x : F) : V.valuation (algebraMap F F' x) = 1 ↔ O.valuation x = 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.valuation_eq_one_of_le
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Incomparable
variable {O : ValuationSubring F} {V W : ValuationSubring F'}
theorem valuation_eq_one_of_le (hVW : V ≤ W) {u : F'} (hu : V.valuation u = 1) :
    W.valuation u = 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.sum_ne_zero
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Incomparable
variable {O : ValuationSubring F} {V W : ValuationSubring F'}
theorem sum_ne_zero (hV : V.comap (algebraMap F F') = O) (hW : W.comap (algebraMap F F') = O)
    (hVW : V ≤ W) {y : F'} (hyV : V.valuation y < 1) (hyW : W.valuation y = 1)
    (c : ℕ → F) (hc : ∀ k, c k ∈ O) {j N : ℕ} (hjN : j < N) (hj : O.valuation (c j) = 1)
    (hlow : ∀ k < j, O.valuation (c k) < 1) :
    ∑ k ∈ Finset.range N, algebraMap F F' (c k) * y ^ k ≠ 0
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.eq_of_le
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Incomparable
variable {O : ValuationSubring F} {V W : ValuationSubring F'}
theorem eq_of_le [Algebra.IsAlgebraic F F'] (hV : V.comap (algebraMap F F') = O)
    (hW : W.comap (algebraMap F F') = O) (hVW : V ≤ W) : V = W
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.locAt

The valuation overring defined by bounds on all powers against the selected test elements.

Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Loc
variable {K : Type*} [Field K]
def locAt (A : ValuationSubring K) (D : Set K) : ValuationSubring K where
  carrier := {x | ∀ d ∈ D, A.valuation d < 1 → ∀ n : ℕ, A.valuation (d * x ^ n) < 1}
  mul_mem' := by
    intro x y hx hy d hdD hd n
    have key : ∀ x y : K, A.valuation x ≤ A.valuation y →
        (∀ n : ℕ, A.valuation (d * y ^ n) < 1) → A.valuation (d * (x * y) ^ n) < 1 := by
      intro x y h hy'
      calc A.valuation (d * (x * y) ^ n)
          = A.valuation d * (A.valuation x ^ n * A.valuation y ^ n) := by
            rw [map_mul, mul_pow, map_mul, map_pow, map_pow]
        _ ≤ A.valuation d * (A.valuation y ^ n * A.valuation y ^ n) := by
            gcongr
        _ = A.valuation (d * y ^ (2 * n)) := by
            rw [map_mul, map_pow, two_mul, pow_add]
        _ < 1 := hy' (2 * n)
    rcases le_total (A.valuation x) (A.valuation y) with h | h
    · exact key x y h (hy d hdD hd)
    · rw [mul_comm x y]; exact key y x h (hx d hdD hd)
  one_mem' := by
    intro d _ hd n
    simpa using hd
  add_mem' := by
    intro x y hx hy d hdD hd n
    have key : ∀ x y : K, A.valuation x ≤ A.valuation y →
        (∀ n : ℕ, A.valuation (d * y ^ n) < 1) → A.valuation (d * (x + y) ^ n) < 1 := by
      intro x y h hy'
      have hxy : A.valuation (x + y) ≤ A.valuation y :=
        (Valuation.map_add _ _ _).trans (max_le h le_rfl)
      calc A.valuation (d * (x + y) ^ n)
          = A.valuation d * A.valuation (x + y) ^ n := by rw [map_mul, map_pow]
        _ ≤ A.valuation d * A.valuation y ^ n := by gcongr
        _ = A.valuation (d * y ^ n) := by rw [map_mul, map_pow]
        _ < 1 := hy' n
    rcases le_total (A.valuation x) (A.valuation y) with h | h
    · exact key x y h (hy d hdD hd)
    · rw [add_comm x y]; exact key y x h (hx d hdD hd)
  zero_mem' := by
    intro d _ hd n
    cases n with
    | zero => simpa using hd
    | succ n => simp
  neg_mem' := by
    intro x hx d hdD hd n
    have h := hx d hdD hd n
    have e : A.valuation (d * (-x) ^ n) = A.valuation (d * x ^ n) := by
      rw [map_mul, map_mul, map_pow, map_pow, Valuation.map_neg]
    rwa [e]
  mem_or_inv_mem' := by
    intro x
    by_contra h
    rw [not_or] at h
    obtain ⟨h1, h2⟩ := h
    simp only [Set.mem_ofPred_eq, not_forall, not_lt, exists_prop] at h1 h2
    obtain ⟨d, -, hd, n, hn⟩ := h1
    obtain ⟨d', -, hd', n', hn'⟩ := h2
    have one_lt : ∀ (d z : K) (n : ℕ), A.valuation d < 1 → 1 ≤ A.valuation (d * z ^ n) →
        1 < A.valuation z := by
      intro d z n hd hn
      by_contra hz
      rw [not_lt] at hz
      have : A.valuation (d * z ^ n) < 1 := by
        rw [map_mul, map_pow]
        calc A.valuation d * A.valuation z ^ n ≤ A.valuation d * 1 := by
              gcongr; exact pow_le_one₀ zero_le hz
          _ < 1 := by rw [mul_one]; exact hd
      exact (lt_irrefl _) (lt_of_le_of_lt hn this)
    have hx1 := one_lt d x n hd hn
    have hx2 := one_lt d' x⁻¹ n' hd' hn'
    have hx0 : x ≠ 0 := by
      rintro rfl
      rw [map_zero] at hx1
      exact not_lt_zero hx1
    rw [map_inv₀] at hx2
    have : A.valuation x < 1 := by
      have h := one_lt_inv₀ (zero_lt_iff.mpr ((Valuation.ne_zero_iff _).mpr hx0)) |>.mp hx2
      exact h
    exact lt_irrefl _ (hx1.trans this)
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.mem_locAt_iff
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Loc
variable {K : Type*} [Field K]
theorem mem_locAt_iff (A : ValuationSubring K) (D : Set K) (x : K) :
    x ∈ locAt A D ↔ ∀ d ∈ D, A.valuation d < 1 → ∀ n : ℕ, A.valuation (d * x ^ n) < 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.le_locAt
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Loc
variable {K : Type*} [Field K]
theorem le_locAt (A : ValuationSubring K) (D : Set K) : A ≤ locAt A D
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.valuation_sum_eq_one_of_sub
Source context 10 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Transfer
theorem valuation_sum_eq_one_of_sub {O : ValuationSubring F} {V : ValuationSubring F'}
    (hV : V.comap (algebraMap F F') = O) {σ : Type*} (s : Finset σ) (a : σ → F)
    (ha : ∀ i, a i ∈ O) (ω ω' : σ → F') (hωω' : ∀ i ∈ s, a i ≠ 0 → V.valuation (ω' i - ω i) < 1)
    (h : V.valuation (∑ i ∈ s, algebraMap F F' (a i) * ω i) = 1) :
    V.valuation (∑ i ∈ s, algebraMap F F' (a i) * ω' i) = 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.exists_normalized
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Normalize
variable [Algebra.IsAlgebraic F F']
theorem exists_normalized (Q : ValuationSubring F) (S : Finset (ValuationSubring F'))
    (hS : ∀ P ∈ S, P.comap (algebraMap F F') = Q)
    {σ : Type*} (cls : σ → ValuationSubring F') (hcls : ∀ s, cls s ∈ S)
    (ω : σ → F') (hω : ∀ s, ω s ∈ cls s) :
    ∃ ω' : σ → F', (∀ s, ∀ P ∈ S, ω' s ∈ P) ∧
      (∀ s, (cls s).valuation (ω' s - ω s) < 1) ∧
      (∀ s, ∀ P ∈ S, P ≠ cls s → P.valuation (ω' s) < 1)
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.hind_congr
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Normalize
variable [Algebra.IsAlgebraic F F']
omit [Algebra.IsAlgebraic F F'] in
theorem hind_congr (Q : ValuationSubring F) (S : Finset (ValuationSubring F'))
    (hS : ∀ P ∈ S, P.comap (algebraMap F F') = Q)
    {σ : Type*} [Fintype σ] (cls : σ → ValuationSubring F')
    (ω ω' : σ → F') (hωω' : ∀ s, (cls s).valuation (ω' s - ω s) < 1)
    (hind : ∀ P ∈ S, ∀ a : σ → F, (∀ s, a s ∈ Q) → (∀ s, cls s ≠ P → a s = 0) →
      (∃ s, Q.valuation (a s) = 1) → P.valuation (∑ s, algebraMap F F' (a s) * ω s) = 1) :
    ∀ P ∈ S, ∀ a : σ → F, (∀ s, a s ∈ Q) → (∀ s, cls s ≠ P → a s = 0) →
      (∃ s, Q.valuation (a s) = 1) → P.valuation (∑ s, algebraMap F F' (a s) * ω' s) = 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.coarsen

The coarsening determined by the images of nonunits of the base valuation ring.

Source context 10 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Coarsen
def coarsen (Q' : ValuationSubring F) (P : ValuationSubring F') : ValuationSubring F'
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.le_coarsen
Source context 10 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Coarsen
theorem le_coarsen (Q' : ValuationSubring F) (P : ValuationSubring F') : P ≤ coarsen Q' P
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.coarsen_comap
Source context 10 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Coarsen
theorem coarsen_comap {Q Q' : ValuationSubring F} (hQQ' : Q ≤ Q') {P : ValuationSubring F'}
    (hP : P.comap (algebraMap F F') = Q) : (coarsen Q' P).comap (algebraMap F F') = Q'
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.hind_coarsen
Source context 10 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Coarsen
theorem hind_coarsen [Algebra.IsAlgebraic F F'] {Q Q' : ValuationSubring F} (hQQ' : Q ≤ Q')
    (S : Finset (ValuationSubring F')) (hS : ∀ P ∈ S, P.comap (algebraMap F F') = Q)
    {σ : Type*} [Fintype σ] (cls : σ → ValuationSubring F') (hcls : ∀ s, cls s ∈ S)
    (ω : σ → F')
    (hωlt : ∀ s, ∀ P ∈ S, P ≠ cls s → P.valuation (ω s) < 1)
    (hind : ∀ P ∈ S, ∀ a : σ → F, (∀ s, a s ∈ Q) → (∀ s, cls s ≠ P → a s = 0) →
      (∃ s, Q.valuation (a s) = 1) → P.valuation (∑ s, algebraMap F F' (a s) * ω s) = 1)
    (P' : ValuationSubring F') (a : σ → F) (haQ' : ∀ s, a s ∈ Q')
    (hsupp : ∀ s, coarsen Q' (cls s) ≠ P' → a s = 0) (hunit : ∃ s, Q'.valuation (a s) = 1) :
    P'.valuation (∑ s, algebraMap F F' (a s) * ω s) = 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.valuation_eq_one_iff_mem_and_inv_mem
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
theorem valuation_eq_one_iff_mem_and_inv_mem (A : ValuationSubring K) {x : K} (hx : x ≠ 0) :
    A.valuation x = 1 ↔ x ∈ A ∧ x⁻¹ ∈ A
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.bar

The valuation ring on the residue field formed by residues of elements in the second valuation ring.

Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
def bar (R P : ValuationSubring K) : ValuationSubring (ResidueField R) where
  carrier := {y | ∃ x : R, (x : K) ∈ P ∧ residue R x = y}
  mul_mem' := by
    rintro _ _ ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩
    exact ⟨x * y, P.mul_mem _ _ hx hy, map_mul _ _ _⟩
  one_mem' := ⟨1, P.one_mem, map_one _⟩
  add_mem' := by
    rintro _ _ ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩
    exact ⟨x + y, P.add_mem _ _ hx hy, map_add _ _ _⟩
  zero_mem' := ⟨0, P.zero_mem, map_zero _⟩
  neg_mem' := by
    rintro _ ⟨x, hx, rfl⟩
    exact ⟨-x, P.neg_mem _ hx, map_neg _ _⟩
  mem_or_inv_mem' := by
    intro y
    obtain ⟨x, rfl⟩ := residue_surjective y
    by_cases hx0 : residue R x = 0
    · exact Or.inl ⟨0, P.zero_mem, by rw [map_zero, hx0]⟩
    rcases P.mem_or_inv_mem (x : K) with h | h
    · exact Or.inl ⟨x, h, rfl⟩
    · right
      obtain ⟨u, rfl⟩ := (residue_ne_zero_iff_isUnit x).mp hx0
      refine ⟨↑u⁻¹, ?_, ?_⟩
      · have hmul : (((u⁻¹ : Rˣ) : R) : K) * ((u : R) : K) = 1 := by
          rw [← R.coe_mul, Units.inv_mul]; rfl
        rw [eq_inv_of_mul_eq_one_left hmul]; exact h
      · rw [map_units_inv]
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.mem_bar
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
variable {R P : ValuationSubring K}
theorem mem_bar {y : ResidueField R} : y ∈ bar R P ↔ ∃ x : R, (x : K) ∈ P ∧ residue R x = y
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.mem_nonunits_of_mem_maximalIdeal
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
variable {R P : ValuationSubring K}
theorem mem_nonunits_of_mem_maximalIdeal (hPR : P ≤ R) {x : R} (hx : x ∈ maximalIdeal R) :
    (x : K) ∈ P.nonunits
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.mem_bar_iff
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
variable {R P : ValuationSubring K}
theorem mem_bar_iff (hPR : P ≤ R) (x : R) : residue R x ∈ bar R P ↔ (x : K) ∈ P
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.bar_valuation_eq_one_iff
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
variable {R P : ValuationSubring K}
theorem bar_valuation_eq_one_iff (hPR : P ≤ R) (x : R) :
    (bar R P).valuation (residue R x) = 1 ↔ P.valuation (x : K) = 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.eq_of_bar_eq
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
variable {R P : ValuationSubring K}
theorem eq_of_bar_eq {P' : ValuationSubring K} (hPR : P ≤ R) (hP'R : P' ≤ R)
    (h : bar R P = bar R P') : P = P'
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.bar_sup_bar_eq_top
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Bar
variable {K : Type*} [Field K]
variable {R P : ValuationSubring K}
theorem bar_sup_bar_eq_top {P₀ : ValuationSubring K} (hP₀R : P₀ ≤ R) (hPR : P ≤ R)
    (hsup : R ≤ P₀ ⊔ P) : bar R P₀ ⊔ bar R P = ⊤
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.resHom

The field inclusion restricted to the comap valuation ring.

Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
def resHom : ↥(R.comap (algebraMap F F')) →+* ↥R
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.coe_resHom_apply
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
theorem coe_resHom_apply (x : ↥(R.comap (algebraMap F F'))) :
    ((resHom R x : ↥R) : F') = algebraMap F F' x
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.isLocalHom_resHom
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
instance isLocalHom_resHom : IsLocalHom (resHom (F := F) R) where
  map_nonunit := by
    intro x hx
    rw [valuation_eq_one_iff] at hx ⊢
    exact (eq_one_iff (V := R) (O := R.comap (algebraMap F F')) rfl (x : F)).mp hx
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.residueAlgebra

The residue-field algebra structure induced by the inclusion of valuation rings.

Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
def residueAlgebra : Algebra (ResidueField ↥(R.comap (algebraMap F F')))
  (ResidueField ↥R)
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.algebraMap_residue
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
attribute [local instance] residueAlgebra
theorem algebraMap_residue (x : ↥(R.comap (algebraMap F F'))) :
    algebraMap (ResidueField ↥(R.comap (algebraMap F F'))) (ResidueField ↥R) (residue _ x) =
      residue _ (resHom R x)
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.le_comap_of_le
Source context 13 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
attribute [local instance] residueAlgebra
variable {R}
theorem le_comap_of_le {P : ValuationSubring F'} (hPR : P ≤ R) {Q : ValuationSubring F}
    (hP : P.comap (algebraMap F F') = Q) : Q ≤ R.comap (algebraMap F F')
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.bar_comap
Source context 13 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
attribute [local instance] residueAlgebra
variable {R}
theorem bar_comap {P : ValuationSubring F'} (hPR : P ≤ R) {Q : ValuationSubring F}
    (hP : P.comap (algebraMap F F') = Q) :
    (bar R P).comap (algebraMap (ResidueField ↥(R.comap (algebraMap F F'))) (ResidueField ↥R)) =
      bar (R.comap (algebraMap F F')) Q
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.card_add_card_le_finrank
Source context 13 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Residue
variable (R : ValuationSubring F')
attribute [local instance] residueAlgebra
variable {R}
theorem card_add_card_le_finrank [FiniteDimensional F F']
    (S' : Finset (ValuationSubring F'))
    (hS' : ∀ P ∈ S', P.comap (algebraMap F F') = R.comap (algebraMap F F')) (hRS' : R ∈ S')
    {τ : Type*} [Fintype τ] (clsR : τ → ValuationSubring F') (hclsR : ∀ t, clsR t ∈ S')
    (hne : ∀ t, clsR t ≠ R) (ω : τ → F')
    (hωlt : ∀ t, ∀ P ∈ S', P ≠ clsR t → P.valuation (ω t) < 1)
    (hind : ∀ P ∈ S', ∀ a : τ → F, (∀ t, a t ∈ R.comap (algebraMap F F')) →
      (∀ t, clsR t ≠ P → a t = 0) → (∃ t, (R.comap (algebraMap F F')).valuation (a t) = 1) →
      P.valuation (∑ t, algebraMap F F' (a t) * ω t) = 1)
    (s : Finset (ResidueField ↥R))
    (hs : LinearIndependent (ResidueField ↥(R.comap (algebraMap F F')))
      (fun i : ↥s => (i : ResidueField ↥R))) :
    s.card + Fintype.card τ ≤ Module.finrank F F' := by
  classical
  set QR := R.comap (algebraMap F F') with hQRdef
  have : Algebra.IsAlgebraic F F' := Algebra.IsAlgebraic.of_finite F F'
  choose lift hlift using fun i : ↥s => residue_surjective (R := ↥R) (i : ResidueField ↥R)
  obtain ⟨x', hx'mem, hx'sub, hx'lt⟩ := exists_normalized QR S' hS' (fun _ : ↥s => R)
    (fun _ => hRS') (fun i => (lift i : F')) (fun i => (lift i).2)
  have hx'R : ∀ i, x' i ∈ R := fun i => hx'mem i R hRS'
  have hres : ∀ i, residue (↥R) ⟨x' i, hx'R i⟩ = (i : ResidueField ↥R) := by
    intro i
    rw [← hlift i, ← sub_eq_zero, ← map_sub, residue_eq_zero_iff, ← coe_mem_nonunits_iff,
      ValuationSubring.mem_nonunits_iff]
    exact hx'sub i
  set vec : ↥s ⊕ τ → F' := fun o => Sum.elim x' ω o with hvecdef
  suffices hli : LinearIndependent F vec by
    have := hli.fintype_card_le_finrank
    rwa [Fintype.card_sum, Fintype.card_coe] at this
  by_contra hdep
  obtain ⟨g, hrel, i₁, hi₁⟩ := Fintype.not_linearIndependent_iff.mp hdep
  obtain ⟨iM, -, hiM⟩ := Finset.exists_max_image Finset.univ (fun o => QR.valuation (g o))
    ⟨i₁, Finset.mem_univ _⟩
  have hM0 : g iM ≠ 0 := by
    intro h
    have := hiM i₁ (Finset.mem_univ _)
    rw [h, map_zero, le_zero_iff, Valuation.zero_iff] at this
    exact hi₁ this
  set f : ↥s ⊕ τ → F := fun o => g o / g iM with hfdef
  have hfQ : ∀ o, f o ∈ QR := by
    intro o
    rw [← QR.valuation_le_one_iff, hfdef, map_div₀]
    exact div_le_one_of_le₀ (hiM o (Finset.mem_univ _)) zero_le
  have hfM : f iM = 1 := div_self hM0
  have hfrel : (∑ i, algebraMap F F' (f (Sum.inl i)) * x' i) +
      ∑ t, algebraMap F F' (f (Sum.inr t)) * ω t = 0 := by
    have : ∑ o, f o • vec o = 0 := by
      simp only [hfdef, div_eq_mul_inv, mul_comm _ (g iM)⁻¹, ← smul_smul, ← Finset.smul_sum, hrel,
        smul_zero]
    rw [Fintype.sum_sum_type] at this
    simpa only [hvecdef, Sum.elim_inl, Sum.elim_inr, Algebra.smul_def] using this
  have hle : ∀ P ∈ S', ∀ o, P.valuation (algebraMap F F' (f o)) ≤ 1 :=
    fun P hP o => le_one (hS' P hP) (hfQ o)
  rcases hiMcase : iM with i₀ | t₀
  · rw [hiMcase] at hfM
    have hB : R.valuation (∑ t, algebraMap F F' (f (Sum.inr t)) * ω t) < 1 := by
      apply Valuation.map_sum_lt _ one_ne_zero
      intro t _
      rw [map_mul]
      exact mul_lt_one_aux (hle R hRS' _) (hωlt t R hRS' (hne t).symm)
    have hA : R.valuation (∑ i, algebraMap F F' (f (Sum.inl i)) * x' i) < 1 := by
      rw [eq_neg_of_add_eq_zero_left hfrel, Valuation.map_neg]
      exact hB
    set fR : ↥s → ↥QR := fun i => ⟨f (Sum.inl i), hfQ _⟩ with hfRdef
    set AR : ↥R := ∑ i, resHom R (fR i) * ⟨x' i, hx'R i⟩ with hARdef
    have hAcoe : (AR : F') = ∑ i, algebraMap F F' (f (Sum.inl i)) * x' i := by
      rw [hARdef, ← R.coe_subtype, map_sum]
      rfl
    have hAres : residue (↥R) AR = 0 := by
      rw [residue_eq_zero_iff, ← coe_mem_nonunits_iff, ValuationSubring.mem_nonunits_iff, hAcoe]
      exact hA
    have hsum : ∑ i, (residue (↥QR) (fR i)) • (i : ResidueField ↥R) = 0 := by
      rw [← hAres, hARdef, map_sum]
      refine Finset.sum_congr rfl fun i _ => ?_
      rw [map_mul, hres, Algebra.smul_def, algebraMap_residue]
    have h1 : residue (↥QR) (fR i₀) = 1 := by
      have : fR i₀ = 1 := Subtype.ext hfM
      rw [this, map_one]
    have := Fintype.linearIndependent_iff.mp hs (fun i => residue (↥QR) (fR i)) hsum i₀
    rw [h1] at this
    exact one_ne_zero this
  · rw [hiMcase] at hfM
    set P' := clsR t₀ with hP'def
    have hP'S : P' ∈ S' := hclsR t₀
    have hA : P'.valuation (∑ i, algebraMap F F' (f (Sum.inl i)) * x' i) < 1 := by
      apply Valuation.map_sum_lt _ one_ne_zero
      intro i _
      rw [map_mul]
      exact mul_lt_one_aux (hle P' hP'S _) (hx'lt i P' hP'S (hne t₀))
    have hB₁ : P'.valuation
        (∑ t, algebraMap F F' (if clsR t = P' then f (Sum.inr t) else 0) * ω t) = 1 := by
      refine hind P' hP'S _ (fun t => ?_) (fun t ht => ite_eq_right ht) ⟨t₀, ?_⟩
      · split_ifs
        · exact hfQ _
        · exact ValuationSubring.zero_mem _
      · rw [ite_eq_left rfl, hfM, map_one]
    have hB₂ : P'.valuation
        (∑ t, algebraMap F F' (if clsR t = P' then 0 else f (Sum.inr t)) * ω t) < 1 := by
      apply Valuation.map_sum_lt _ one_ne_zero
      intro t _
      split_ifs with h
      · rw [map_zero, zero_mul, map_zero]; exact zero_lt_one
      · rw [map_mul]
        exact mul_lt_one_aux (hle P' hP'S _) (hωlt t P' hP'S (Ne.symm h))
    have hBsplit : ∑ t, algebraMap F F' (f (Sum.inr t)) * ω t =
        (∑ t, algebraMap F F' (if clsR t = P' then f (Sum.inr t) else 0) * ω t) +
          ∑ t, algebraMap F F' (if clsR t = P' then 0 else f (Sum.inr t)) * ω t := by
      rw [← Finset.sum_add_distrib]
      refine Finset.sum_congr rfl fun t _ => ?_
      split_ifs <;> simp
    have hB : P'.valuation (∑ t, algebraMap F F' (f (Sum.inr t)) * ω t) = 1 := by
      rw [hBsplit, Valuation.map_add_eq_of_lt_left]
      · exact hB₁
      · rw [hB₁]; exact hB₂
    have hAB : P'.valuation ((∑ i, algebraMap F F' (f (Sum.inl i)) * x' i) +
        ∑ t, algebraMap F F' (f (Sum.inr t)) * ω t) = 1 := by
      rw [Valuation.map_add_eq_of_lt_right]
      · exact hB
      · rw [hB]; exact hA
    rw [hfrel, map_zero] at hAB
    exact zero_ne_one hAB
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.main
Source context 12 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Main
variable [FiniteDimensional F F'] {σ : Type*} [Fintype σ]
attribute [local instance] residueAlgebra
theorem main (n : ℕ) : ∀ (Q : ValuationSubring F) (S : Finset (ValuationSubring F')),
    S.card = n → (∀ P ∈ S, P.comap (algebraMap F F') = Q) →
    ∀ (cls : σ → ValuationSubring F'), (∀ s, cls s ∈ S) →
    ∀ (ω : σ → F'), (∀ s, ω s ∈ cls s) →
    (∀ P ∈ S, ∀ a : σ → F, (∀ s, a s ∈ Q) → (∀ s, cls s ≠ P → a s = 0) →
      (∃ s, Q.valuation (a s) = 1) → P.valuation (∑ s, algebraMap F F' (a s) * ω s) = 1) →
    Module.finrank F F' ≤ Fintype.card σ →
    ∀ P₀ ∈ S, ∀ g : F', g ≠ 0 → ∃ h : F, P₀.valuation (algebraMap F F' h * g) = 1
AlgebraicCurves.Valuations.Proofs.ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card.ValuationSubring.CompleteSplittingE.exists_valuation_mul_eq_one_of_finrank_le_card
Source context 11 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
namespace ValuationSubring
open _root_.ValuationSubring
namespace CompleteSplittingE
open _root_.ValuationSubring
open IsLocalRing
variable {F F' : Type*} [Field F] [Field F'] [Algebra F F']
section Target
variable [FiniteDimensional F F']
theorem exists_valuation_mul_eq_one_of_finrank_le_card
    (O : ValuationSubring F) {ι : Type*} [Fintype ι] (O' : ι → ValuationSubring F')
    (hinj : Function.Injective O') (hO' : ∀ i, (O' i).comap (algebraMap F F') = O)
    (hcard : Module.finrank F F' ≤ Fintype.card ι) (i : ι) (g : F') (hg : g ≠ 0) :
    ∃ h : F, (O' i).valuation (algebraMap F F' h * g) = 1
ValuationSubring.exists_valuation_mul_eq_one_of_finrank_le_card
Source context 3 commands

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

section ProofImplementation
namespace AlgebraicCurves.Valuations.Proofs
namespace ValuationSubring_exists_valuation_mul_eq_one_of_finrank_le_card
theorem _root_.ValuationSubring.exists_valuation_mul_eq_one_of_finrank_le_card
    {F F' : Type*} [Field F] [Field F'] [Algebra F F'] [FiniteDimensional F F']
    (O : ValuationSubring F) {ι : Type*} [Fintype ι] (O' : ι → ValuationSubring F')
    (hinj : Function.Injective O') (hO' : ∀ i, (O' i).comap (algebraMap F F') = O)
    (hcard : Module.finrank F F' ≤ Fintype.card ι) (i : ι) (g : F') (hg : g ≠ 0) :
    ∃ h : F, (O' i).valuation (algebraMap F F' h * g) = 1