Module

AbsoluteValues.lean

Nyll.ValuedFieldTheory.Valuation.AbsoluteValue.Theory.AbsoluteValues
44 declarations indexed from sourceView source ↗

Absolute values and exponential valuations

This module collects the valuation-theory material used by local class field theory. General results on equivalence of absolute values, Ostrowski theory, approximation, and rational-function examples are imported from Mathlib where needed.

Declarations

LubinTate.Valuations.absoluteValueDist

The distance attached by the absolute-value construction to an absolute value.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
def absoluteValueDist {K : Type*} [Field K] (v : AbsoluteValue K ℝ) (x y : K) : ℝ
LubinTate.Valuations.absoluteValueDist_nonneg

The absolute-value distance is nonnegative.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueDist_nonneg
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) (x y : K) :
    0 ≤ absoluteValueDist v x y
LubinTate.Valuations.absoluteValueDist_eq_zero_iff

The absolute-value distance separates points.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueDist_eq_zero_iff
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) (x y : K) :
    absoluteValueDist v x y = 0 ↔ x = y
LubinTate.Valuations.absoluteValueDist_self

The absolute-value distance from a point to itself is zero.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueDist_self
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) (x : K) :
    absoluteValueDist v x x = 0
LubinTate.Valuations.absoluteValueDist_comm

The absolute-value distance is symmetric.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueDist_comm
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) (x y : K) :
    absoluteValueDist v x y = absoluteValueDist v y x
LubinTate.Valuations.absoluteValueDist_triangle

The absolute-value distance satisfies the triangle inequality.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueDist_triangle
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) (x y z : K) :
    absoluteValueDist v x z ≤
      absoluteValueDist v x y + absoluteValueDist v y z
LubinTate.Valuations.absoluteValueUniformity_basis

The uniformity induced by the absolute-value construction distance is mathlib's uniformity attached to the same absolute value.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueUniformity_basis
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    (@uniformity K v.uniformSpace).HasBasis ((0 : ℝ) < ·)
      (fun ε => {p : K × K | absoluteValueDist v p.2 p.1 < ε}) := by
  simpa [absoluteValueDist] using
    (AbsoluteValue.hasBasis_uniformity (abv := v))
LubinTate.Valuations.TrivialAbsoluteValue

The excluded trivial absolute value: all nonzero elements have value 1.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
def TrivialAbsoluteValue {K : Type*} [Field K] (v : AbsoluteValue K ℝ) : Prop
LubinTate.Valuations.not_trivialAbsoluteValue_iff_exists_ne_one

Being nontrivial is exactly having some nonzero element whose value is not 1.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem not_trivialAbsoluteValue_iff_exists_ne_one
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    ¬ TrivialAbsoluteValue v ↔ ∃ x : K, x ≠ 0 ∧ v x ≠ 1
LubinTate.Valuations.not_trivialAbsoluteValue_iff_isNontrivial

excluding the trivial absolute value is mathlib's nontriviality condition for absolute values.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem not_trivialAbsoluteValue_iff_isNontrivial
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    ¬ TrivialAbsoluteValue v ↔ v.IsNontrivial
LubinTate.Valuations.absoluteValue_axioms

Definition of valuation, unpacked from mathlib's bundled AbsoluteValue.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValue_axioms
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    (∀ x : K, 0 ≤ v x ∧ (v x = 0 ↔ x = 0)) ∧
      (∀ x y : K, v (x * y) = v x * v y) ∧
        ∀ x y : K, v (x + y) ≤ v x + v y
LubinTate.Valuations.absoluteValue_finset_sum_le

Finite triangle inequality for a absolute values.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValue_finset_sum_le
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ)
    {ι : Type*} (s : Finset ι) (f : ι → K) :
    v (s.sum f) ≤ s.sum (fun i => v (f i)) := by
  classical
  refine Finset.induction_on s ?empty ?insert
  · simp
  · intro i s his ih
    rw [Finset.sum_insert his, Finset.sum_insert his]
    exact (v.add_le (f i) (s.sum f)).trans
      (by
        simpa [add_comm, add_left_comm, add_assoc] using
          add_le_add_left ih (v (f i)))
LubinTate.Valuations.EquivalentAbsoluteValues

The equivalence relation on absolute values: two absolute values are equivalent if they induce the same topology.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
def EquivalentAbsoluteValues {K : Type*} [Field K]
    (v w : AbsoluteValue K ℝ) : Prop
LubinTate.Valuations.equivalentAbsoluteValues_iff_isEquiv

absolute-value equivalence is the same as mathlib's equivalence relation on real absolute values.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem equivalentAbsoluteValues_iff_isEquiv
    {K : Type*} [Field K] (v w : AbsoluteValue K ℝ) :
    EquivalentAbsoluteValues v w ↔ v.IsEquiv w
LubinTate.Valuations.equivalentAbsoluteValues_of_isEquiv

Mathlib-equivalent absolute values are equivalent under the defining equivalence relation.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem equivalentAbsoluteValues_of_isEquiv
    {K : Type*} [Field K] {v w : AbsoluteValue K ℝ}
    (h : v.IsEquiv w) :
    EquivalentAbsoluteValues v w
LubinTate.Valuations.isEquiv_of_equivalentAbsoluteValues

equivalent absolute values are mathlib-equivalent.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem isEquiv_of_equivalentAbsoluteValues
    {K : Type*} [Field K] {v w : AbsoluteValue K ℝ}
    (h : EquivalentAbsoluteValues v w) :
    v.IsEquiv w
LubinTate.Valuations.equivalentAbsoluteValues_refl

absolute-value equivalence is reflexive.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem equivalentAbsoluteValues_refl
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    EquivalentAbsoluteValues v v
LubinTate.Valuations.equivalentAbsoluteValues_symm

absolute-value equivalence is symmetric.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem equivalentAbsoluteValues_symm
    {K : Type*} [Field K] {v w : AbsoluteValue K ℝ}
    (h : EquivalentAbsoluteValues v w) :
    EquivalentAbsoluteValues w v
LubinTate.Valuations.equivalentAbsoluteValues_trans

absolute-value equivalence is transitive.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem equivalentAbsoluteValues_trans
    {K : Type*} [Field K] {v₁ v₂ v₃ : AbsoluteValue K ℝ}
    (h₁₂ : EquivalentAbsoluteValues v₁ v₂)
    (h₂₃ : EquivalentAbsoluteValues v₂ v₃) :
    EquivalentAbsoluteValues v₁ v₃
LubinTate.Valuations.equivalentAbsoluteValues_iff_exists_rpow_eq

The power characterization of equivalent absolute values: two real absolute values are equivalent exactly when one is a positive real power of the other.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem equivalentAbsoluteValues_iff_exists_rpow_eq
    {K : Type*} [Field K] (v w : AbsoluteValue K ℝ) :
    EquivalentAbsoluteValues v w ↔ ∃ s : ℝ, 0 < s ∧ (v · ^ s) = w
LubinTate.Valuations.equivalentAbsoluteValues_iff_lt_one

The criterion used in the proof of the power characterization of equivalent absolute values: equivalence is the same as preserving the strict unit ball.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem equivalentAbsoluteValues_iff_lt_one
    {K : Type*} [Field K] (v w : AbsoluteValue K ℝ) :
    EquivalentAbsoluteValues v w ↔ ∀ x : K, v x < 1 ↔ w x < 1
LubinTate.Valuations.absoluteValueApproximation_exists_separating_element

The first construction in the proof of the weak approximation theorem: for any one valuation in a finite pairwise-inequivalent family, there is an element large for it and small for all the others.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueApproximation_exists_separating_element
    {K : Type*} [Field K] {ι : Type*} [Finite ι]
    (v : ι → AbsoluteValue K ℝ)
    (hnontrivial : ∀ i, ¬ TrivialAbsoluteValue (v i))
    (hinequiv : Pairwise fun i j => ¬ EquivalentAbsoluteValues (v i) (v j)) :
    ∀ i, ∃ z : K, 1 < v i z ∧ ∀ j, j ≠ i → v j z < 1 := by
  apply AbsoluteValue.exists_one_lt_lt_one_pi_of_not_isEquiv
  · intro i
    exact (not_trivialAbsoluteValue_iff_isNontrivial (v i)).mp (hnontrivial i)
  · intro i j hij hIsEquiv
    exact
      (hinequiv hij)
        ((equivalentAbsoluteValues_iff_isEquiv (v i) (v j)).mpr hIsEquiv)
LubinTate.Valuations.absoluteValueApproximation_exists_bump_element

The bump-function construction in the proof of the weak approximation theorem: from an element large at i and small at the other valuations, produce an element close to 1 at i and close to 0 at the others.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueApproximation_exists_bump_element
    {K : Type*} [Field K] {ι : Type*} [Finite ι]
    (v : ι → AbsoluteValue K ℝ) {i : ι} {z : K}
    (hlarge : 1 < v i z)
    (hsmall : ∀ j, j ≠ i → v j z < 1)
    {ε : ℝ} (hε : 0 < ε) :
    ∃ e : K, v i (e - 1) < ε ∧ ∀ j, j ≠ i → v j e < ε
LubinTate.Valuations.absoluteValueApproximation_exists_bump_family

Finite bump family used in the proof of the weak approximation theorem.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueApproximation_exists_bump_family
    {K : Type*} [Field K] {ι : Type*} [Finite ι]
    (v : ι → AbsoluteValue K ℝ)
    (hnontrivial : ∀ i, ¬ TrivialAbsoluteValue (v i))
    (hinequiv : Pairwise fun i j => ¬ EquivalentAbsoluteValues (v i) (v j))
    {ε : ℝ} (hε : 0 < ε) :
    ∃ e : ι → K,
      ∀ i, v i (e i - 1) < ε ∧ ∀ j, j ≠ i → v j (e i) < ε := by
  classical
  have hsep :=
    absoluteValueApproximation_exists_separating_element
      (v := v) hnontrivial hinequiv
  choose z hz using hsep
  have hbump :
      ∀ i, ∃ e : K,
        v i (e - 1) < ε ∧ ∀ j, j ≠ i → v j e < ε := by
    intro i
    exact absoluteValueApproximation_exists_bump_element
      (v := v) (i := i) (z := z i) (hz i).1 (hz i).2 hε
  choose e he using hbump
  exact ⟨e, he⟩
LubinTate.Valuations.absoluteValueApproximation_sum_sub

Algebraic decomposition of the final approximation sum in the weak approximation theorem.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueApproximation_sum_sub
    {K : Type*} [Field K] {ι : Type*} [Fintype ι] [DecidableEq ι]
    (a e : ι → K) (i : ι) :
    (∑ j, a j * e j) - a i =
      ∑ j, if j = i then a j * (e j - 1) else a j * e j := by
  classical
  have hsingle : (∑ j : ι, if j = i then a j else 0) = a i := by
    simp
  calc
    (∑ j, a j * e j) - a i
        = (∑ j, a j * e j) - ∑ j, (if j = i then a j else 0) := by
            rw [hsingle]
    _ = ∑ j, (a j * e j - if j = i then a j else 0) := by
            rw [Finset.sum_sub_distrib]
    _ = ∑ j, if j = i then a j * (e j - 1) else a j * e j := by
            refine Finset.sum_congr rfl ?_
            intro j _
            by_cases hji : j = i
            · simp [hji, mul_sub]
            · simp [hji]
LubinTate.Valuations.absoluteValueApproximation_from_weighted_bump_family

The finite-sum estimate in the weak approximation theorem, after the bump functions have been chosen with errors already weighted by the coefficients.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueApproximation_from_weighted_bump_family
    {K : Type*} [Field K] {ι : Type*} [Fintype ι]
    (v : ι → AbsoluteValue K ℝ) (a e : ι → K) {ε δ : ℝ}
    (hεδ : (Fintype.card ι : ℝ) * δ < ε)
    (hdiag : ∀ i, v i (a i) * v i (e i - 1) < δ)
    (hoff : ∀ i j, j ≠ i → v i (a j) * v i (e j) < δ) :
    ∃ x : K, ∀ i, v i (x - a i) < ε
LubinTate.Valuations.absoluteValueApproximation_exists_coefficient_precision

A single positive precision small enough after multiplication by all finitely many coefficients appearing in the weak approximation theorem.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueApproximation_exists_coefficient_precision
    {K : Type*} [Field K] {ι : Type*} [Finite ι]
    (v : ι → AbsoluteValue K ℝ) (a : ι → K) {δ : ℝ} (hδ : 0 < δ) :
    ∃ η : ℝ, 0 < η ∧ ∀ i j, v i (a j) * η < δ
LubinTate.Valuations.absoluteValueApproximation

The weak approximation theorem, Approximation Theorem for a finite family of pairwise inequivalent nontrivial absolute values.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem absoluteValueApproximation
    {K : Type*} [Field K] {ι : Type*} [Finite ι]
    (v : ι → AbsoluteValue K ℝ)
    (hnontrivial : ∀ i, ¬ TrivialAbsoluteValue (v i))
    (hinequiv : Pairwise fun i j => ¬ EquivalentAbsoluteValues (v i) (v j))
    (a : ι → K) {ε : ℝ} (hε : 0 < ε) :
    ∃ x : K, ∀ i, v i (x - a i) < ε := by
  classical
  let : Fintype ι := Fintype.ofFinite ι
  let δ : ℝ := ε / ((Fintype.card ι : ℝ) + 1)
  have hcard_add_pos : 0 < (Fintype.card ι : ℝ) + 1 := by positivity
  have hδ_pos : 0 < δ := by
    dsimp [δ]
    exact div_pos hε hcard_add_pos
  have hεδ : (Fintype.card ι : ℝ) * δ < ε := by
    have hcard_div_lt_one :
        (Fintype.card ι : ℝ) / ((Fintype.card ι : ℝ) + 1) < 1 := by
      exact (div_lt_one hcard_add_pos).mpr (by linarith)
    calc
      (Fintype.card ι : ℝ) * δ =
          ε * ((Fintype.card ι : ℝ) / ((Fintype.card ι : ℝ) + 1)) := by
        dsimp [δ]
        ring
      _ < ε * 1 := mul_lt_mul_of_pos_left hcard_div_lt_one hε
      _ = ε := by ring
  obtain ⟨η, hη_pos, hη⟩ :=
    absoluteValueApproximation_exists_coefficient_precision (v := v) (a := a) hδ_pos
  obtain ⟨e, he⟩ :=
    absoluteValueApproximation_exists_bump_family
      (v := v) hnontrivial hinequiv (ε := η) hη_pos
  exact
    absoluteValueApproximation_from_weighted_bump_family
      (v := v) (a := a) (e := e) hεδ
      (fun i => by
        have hmul_le :
            v i (a i) * v i (e i - 1) ≤ v i (a i) * η :=
          mul_le_mul_of_nonneg_left (le_of_lt (he i).1) ((v i).nonneg (a i))
        exact lt_of_le_of_lt hmul_le (hη i i))
      (fun i j hji => by
        have hsmall : v i (e j) < η := (he j).2 i (Ne.symm hji)
        have hmul_le :
            v i (a j) * v i (e j) ≤ v i (a j) * η :=
          mul_le_mul_of_nonneg_left (le_of_lt hsmall) ((v i).nonneg (a j))
        exact lt_of_le_of_lt hmul_le (hη i j))
LubinTate.Valuations.NonarchimedeanAbsoluteValue

The archimedean/nonarchimedean dichotomy: a valuation is nonarchimedean when its values on the natural numbers are bounded.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
def NonarchimedeanAbsoluteValue {K : Type*} [Field K]
    (v : AbsoluteValue K ℝ) : Prop
LubinTate.Valuations.ArchimedeanAbsoluteValue

The archimedean/nonarchimedean dichotomy: archimedean valuations are those which are not nonarchimedean in the boundedness-on-integers sense.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
def ArchimedeanAbsoluteValue {K : Type*} [Field K]
    (v : AbsoluteValue K ℝ) : Prop
LubinTate.Valuations.StrongTriangle

The strong triangle inequality appearing in the boundedness characterization of nonarchimedean absolute values.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
def StrongTriangle {K : Type*} [Field K] (v : AbsoluteValue K ℝ) : Prop
LubinTate.Valuations.nonarchimedean_iff_bounded_nat

The archimedean/nonarchimedean dichotomy, unfolded.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem nonarchimedean_iff_bounded_nat
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    NonarchimedeanAbsoluteValue v ↔ ∃ C : ℝ, ∀ n : ℕ, v (n : K) ≤ C
LubinTate.Valuations.archimedean_iff_not_nonarchimedean

The archimedean/nonarchimedean dichotomy, archimedean case unfolded.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem archimedean_iff_not_nonarchimedean
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    ArchimedeanAbsoluteValue v ↔ ¬ NonarchimedeanAbsoluteValue v
LubinTate.Valuations.strong_triangle_iff_isNonarchimedean

The boundedness characterization of nonarchimedean absolute values, strong triangle inequality as mathlib's IsNonarchimedean predicate.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem strong_triangle_iff_isNonarchimedean
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    StrongTriangle v ↔ IsNonarchimedean (v : K → ℝ)
LubinTate.Valuations.nat_le_one_of_strong_triangle

The easy direction of the boundedness characterization of nonarchimedean absolute values: the strong triangle inequality bounds the values of the natural numbers by 1.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem nat_le_one_of_strong_triangle
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ)
    (hstrong : StrongTriangle v) (n : ℕ) :
    v (n : K) ≤ 1
LubinTate.Valuations.nonarchimedean_of_strong_triangle

The easy direction of the boundedness characterization of nonarchimedean absolute values: a valuation satisfying the strong triangle inequality is nonarchimedean in the boundedness-on-integers sense.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem nonarchimedean_of_strong_triangle
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ)
    (hstrong : StrongTriangle v) :
    NonarchimedeanAbsoluteValue v
LubinTate.Valuations.nat_bound_ge_one

In the boundedness characterization of nonarchimedean absolute values, any bound for the values of the natural numbers is at least 1.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem nat_bound_ge_one
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) {C : ℝ}
    (hC : ∀ n : ℕ, v (n : K) ≤ C) :
    1 ≤ C
LubinTate.Valuations.add_pow_le_of_bounded_nat

The binomial-estimate step in the proof of the boundedness characterization of nonarchimedean absolute values: boundedness of the values of natural numbers gives a polynomial factor in the estimate for (x + y)^n.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem add_pow_le_of_bounded_nat
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) {C : ℝ}
    (hC : ∀ n : ℕ, v (n : K) ≤ C) (x y : K) (n : ℕ) :
    v ((x + y) ^ n) ≤
      ((n + 1 : ℕ) : ℝ) * C * (max (v x) (v y)) ^ n
LubinTate.Valuations.tendsto_linear_bound_rpow_inv

The real-variable limit used at the end of the boundedness characterization of nonarchimedean absolute values: after taking n-th roots, the polynomial factor (n+1)C disappears.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem tendsto_linear_bound_rpow_inv
    {C : ℝ} (hC : 0 < C) :
    Tendsto
      (fun n : ℕ => ((((n + 1 : ℕ) : ℝ) * C) ^ ((n : ℝ)⁻¹)))
      atTop (𝓝 1) := by
  have hCroot :
      Tendsto (fun n : ℕ => C ^ ((n : ℝ)⁻¹)) atTop (𝓝 1) := by
    have hcont : ContinuousAt (fun t : ℝ => C ^ t) 0 :=
      Real.continuousAt_const_rpow hC.ne'
    have hzero : Tendsto (fun n : ℕ => (n : ℝ)⁻¹) atTop (𝓝 0) :=
      tendsto_inv_atTop_zero.comp tendsto_natCast_atTop_atTop
    change Tendsto
      ((fun t : ℝ => C ^ t) ∘ fun n : ℕ => (n : ℝ)⁻¹) atTop (𝓝 1)
    simpa only [Real.rpow_zero] using hcont.tendsto.comp hzero
  have hshiftReal :
      Tendsto (fun x : ℝ => x ^ ((1 : ℝ) / (1 * x + (-1)))) atTop (𝓝 1) :=
    tendsto_rpow_div_mul_add 1 1 (-1) zero_ne_one
  have hshiftNat :
      Tendsto (fun n : ℕ => (((n + 1 : ℕ) : ℝ) ^ ((n : ℝ)⁻¹)))
        atTop (𝓝 1) := by
    have hnatshift : Tendsto (fun n : ℕ => (n : ℝ) + 1) atTop atTop :=
      tendsto_atTop_add_const_right atTop 1 tendsto_natCast_atTop_atTop
    refine (hshiftReal.comp hnatshift).congr' ?_
    exact Eventually.of_forall fun n => by
      simp [Nat.cast_add, Nat.cast_one, one_div, add_assoc]
  have htarget :
      Tendsto
        (fun n : ℕ => ((((n + 1 : ℕ) : ℝ) * C) ^ ((n : ℝ)⁻¹)))
        atTop (𝓝 (1 * 1)) := by
    refine (hshiftNat.mul hCroot).congr' ?_
    exact Eventually.of_forall fun n => by
      have hn_nonneg : 0 ≤ ((n + 1 : ℕ) : ℝ) := by positivity
      have hmul :=
        (Real.mul_rpow (z := ((n : ℝ)⁻¹)) hn_nonneg (le_of_lt hC)).symm
      simpa [mul_comm, mul_left_comm, mul_assoc] using hmul
  simpa using htarget
LubinTate.Valuations.add_le_root_bound_of_bounded_nat

The root form of the binomial estimate in the boundedness characterization of nonarchimedean absolute values.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem add_le_root_bound_of_bounded_nat
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) {C : ℝ}
    (hC : ∀ n : ℕ, v (n : K) ≤ C) (x y : K)
    {n : ℕ} (hn : n ≠ 0) :
    v (x + y) ≤
      ((((n + 1 : ℕ) : ℝ) * C) ^ ((n : ℝ)⁻¹)) *
        max (v x) (v y)
LubinTate.Valuations.strong_triangle_of_nonarchimedean

The converse direction of the boundedness characterization of nonarchimedean absolute values: a bounded-on-integers valuation satisfies the strong triangle inequality.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem strong_triangle_of_nonarchimedean
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ)
    (hnonarch : NonarchimedeanAbsoluteValue v) :
    StrongTriangle v
LubinTate.Valuations.nonarchimedean_iff_strong_triangle

The boundedness characterization of nonarchimedean absolute values: the boundedness definition of nonarchimedean is equivalent to the strong triangle inequality.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem nonarchimedean_iff_strong_triangle
    {K : Type*} [Field K] (v : AbsoluteValue K ℝ) :
    NonarchimedeanAbsoluteValue v ↔ StrongTriangle v
LubinTate.Valuations.strong_triangle_eq_max_of_ne

A consequence of the boundedness characterization: unequal values force equality in the strong triangle inequality.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem strong_triangle_eq_max_of_ne
    {K : Type*} [Field K] {v : AbsoluteValue K ℝ}
    (hstrong : StrongTriangle v)
    {x y : K} (hxy : v x ≠ v y) :
    v (x + y) = max (v x) (v y)
LubinTate.Valuations.rat_equivalent_real_or_padic

Ostrowski's classification of absolute values on ℚ, stated with the canonical equivalence relation and with the trivial absolute value excluded. The classification itself is mathlib's Rat.AbsoluteValue.equiv_real_or_padic; this theorem only translates the equivalence predicate.

Source context 5 commands

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

noncomputable section
open Filter
open scoped BigOperators Topology
namespace LubinTate
namespace Valuations
theorem rat_equivalent_real_or_padic
    (v : AbsoluteValue ℚ ℝ) (hnontrivial : ¬ TrivialAbsoluteValue v) :
    EquivalentAbsoluteValues v Rat.AbsoluteValue.real ∨
      ∃! p : ℕ, ∃ (_ : Fact p.Prime),
        EquivalentAbsoluteValues v (Rat.AbsoluteValue.padic p)