Module

Core.lean

Nyll.ValuedFieldTheory.Valuation.AbsoluteValue.AlgebraicExtension.Core
25 declarations indexed from sourceView source ↗

Unique extension to algebraic field extensions

A nontrivial real-valued absolute value on a complete field extends uniquely to every algebraic field extension. Both the archimedean and nonarchimedean branches are included.

Declarations

AbsoluteValue.algebraicExtension_standardRealAbsoluteValue
Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
abbrev algebraicExtension_standardRealAbsoluteValue : AbsoluteValue ℝ ℝ
AbsoluteValue.algebraicExtension_standardComplexAbsoluteValue

archimedean standard branch: the usual absolute value on ℂ.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
abbrev algebraicExtension_standardComplexAbsoluteValue : AbsoluteValue ℂ ℝ
AbsoluteValue.rpow

If 0 < s ≤ 1, the s-power of a real-valued absolute value is again a real-valued absolute value. This is the exponent transport needed for the archimedean branch after Ostrowski's theorem.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def rpow
    {F : Type*} [Field F] (v : AbsoluteValue F ℝ)
    (s : ℝ) (hs0 : 0 < s) (hs1 : s ≤ 1) : AbsoluteValue F ℝ where
  toFun x := v x ^ s
  map_mul' x y := by
    rw [v.map_mul, Real.mul_rpow (v.nonneg x) (v.nonneg y)]
  nonneg' x := Real.rpow_nonneg (v.nonneg x) s
  eq_zero' x := by
    rw [Real.rpow_eq_zero (v.nonneg x) hs0.ne']
    exact v.eq_zero
  add_le' x y := by
    calc
      v (x + y) ^ s ≤ (v x + v y) ^ s :=
        Real.rpow_le_rpow (v.nonneg _) (v.add_le x y) hs0.le
      _ ≤ v x ^ s + v y ^ s :=
        Real.rpow_add_le_add_rpow (v.nonneg x) (v.nonneg y) hs0.le hs1
AbsoluteValue.rpow_apply

Raising an absolute value to a real power evaluates by real exponentiation.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem rpow_apply
    {F : Type*} [Field F] (v : AbsoluteValue F ℝ)
    (s : ℝ) (hs0 : 0 < s) (hs1 : s ≤ 1) (x : F) :
    rpow v s hs0 hs1 x = v x ^ s
AbsoluteValue.nonarchimedeanRpow

A positive real power of a nonarchimedean absolute value is again an absolute value.

Unlike AbsoluteValue.rpow, no upper bound on the exponent is needed here: the ultrametric inequality is preserved by every strictly increasing positive power. This is the normalization operation for a nonarchimedean valuation class.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def nonarchimedeanRpow
    {F : Type*} [Field F] (v : AbsoluteValue F ℝ)
    (hv : IsNonarchimedean (v : F → ℝ))
    (s : ℝ) (hs : 0 < s) : AbsoluteValue F ℝ where
  toFun x := v x ^ s
  map_mul' x y := by
    rw [v.map_mul, Real.mul_rpow (v.nonneg x) (v.nonneg y)]
  nonneg' x := Real.rpow_nonneg (v.nonneg x) s
  eq_zero' x := by
    rw [Real.rpow_eq_zero (v.nonneg x) hs.ne']
    exact v.eq_zero
  add_le' x y := by
    rcases le_total (v x) (v y) with hxy | hyx
    · calc
        v (x + y) ^ s ≤ v y ^ s := by
          apply Real.rpow_le_rpow (v.nonneg _)
          · simpa [max_eq_right hxy] using hv x y
          · exact hs.le
        _ ≤ v x ^ s + v y ^ s :=
          le_add_of_nonneg_left (Real.rpow_nonneg (v.nonneg x) s)
    · calc
        v (x + y) ^ s ≤ v x ^ s := by
          apply Real.rpow_le_rpow (v.nonneg _)
          · simpa [max_eq_left hyx] using hv x y
          · exact hs.le
        _ ≤ v x ^ s + v y ^ s :=
          le_add_of_nonneg_right (Real.rpow_nonneg (v.nonneg y) s)
AbsoluteValue.nonarchimedeanRpow_apply
Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem nonarchimedeanRpow_apply
    {F : Type*} [Field F] (v : AbsoluteValue F ℝ)
    (hv : IsNonarchimedean (v : F → ℝ))
    (s : ℝ) (hs : 0 < s) (x : F) :
    nonarchimedeanRpow v hv s hs x = v x ^ s
AbsoluteValue.isEquiv_nonarchimedeanRpow

Positive-power normalization does not change the underlying nonarchimedean valuation class.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem isEquiv_nonarchimedeanRpow
    {F : Type*} [Field F] (v : AbsoluteValue F ℝ)
    (hv : IsNonarchimedean (v : F → ℝ))
    (s : ℝ) (hs : 0 < s) :
    v.IsEquiv (nonarchimedeanRpow v hv s hs)
AbsoluteValue.algebraicExtension_standardComplexAbsoluteValue_extends_standardReal

The usual complex absolute value restricts to the usual real absolute value.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem algebraicExtension_standardComplexAbsoluteValue_extends_standardReal
    (x : ℝ) :
    algebraicExtension_standardComplexAbsoluteValue (algebraMap ℝ ℂ x) =
      algebraicExtension_standardRealAbsoluteValue x
AbsoluteValue.compAlgEquiv

Pull back an absolute value along a K-algebra equivalence. This is the transport step used after the archimedean classification identifies a complete archimedean field with ℝ or ℂ.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def compAlgEquiv
    {K L E : Type*} [Field K] [Field L] [Field E]
    [Algebra K L] [Algebra K E] (e : L ≃ₐ[K] E)
    (w : AbsoluteValue E ℝ) : AbsoluteValue L ℝ
AbsoluteValue.compAlgEquiv_apply

Composition with an algebra equivalence evaluates the absolute value after transport.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem compAlgEquiv_apply
    {K L E : Type*} [Field K] [Field L] [Field E]
    [Algebra K L] [Algebra K E] (e : L ≃ₐ[K] E)
    (w : AbsoluteValue E ℝ) (x : L) :
    compAlgEquiv e w x = w (e x)
AbsoluteValue.compAlgEquiv_extends_apply

Transporting an extending absolute value along an algebra equivalence preserves extension.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem compAlgEquiv_extends_apply
    {K L E : Type*} [Field K] [Field L] [Field E]
    [Algebra K L] [Algebra K E] (e : L ≃ₐ[K] E)
    (w : AbsoluteValue E ℝ) (v : AbsoluteValue K ℝ)
    (hw : ∀ x : K, w (algebraMap K E x) = v x)
    (x : K) :
    compAlgEquiv e w (algebraMap K L x) =
      v x
AbsoluteValue.compAlgEquiv_extends

Pullback along an algebra equivalence preserves exact extension of the base value.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem compAlgEquiv_extends
    {K L E : Type*} [Field K] [Field L] [Field E]
    [Algebra K L] [Algebra K E] (e : L ≃ₐ[K] E)
    (w : AbsoluteValue E ℝ) (v : AbsoluteValue K ℝ)
    (hw : Extends v w) :
    Extends v (compAlgEquiv e w)
AbsoluteValue.compAlgEquiv_complete

Completeness is preserved when an absolute value is pulled back along an algebra equivalence.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem compAlgEquiv_complete
    {K L E : Type*} [Field K] [Field L] [Field E]
    [Algebra K L] [Algebra K E] (e : L ≃ₐ[K] E)
    (w : AbsoluteValue E ℝ)
    (hwcomplete : CompleteSpace (WithAbs w)) :
    CompleteSpace (WithAbs (compAlgEquiv e w))
AbsoluteValue.algebraicExtension_real_algEquiv_real_unique_rpow_extension
Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem algebraicExtension_real_algEquiv_real_unique_rpow_extension
    {L : Type*} [Field L] [Algebra ℝ L] (e : L ≃ₐ[ℝ] ℝ)
    (s : ℝ) (hs0 : 0 < s) (hs1 : s ≤ 1)
    (w : AbsoluteValue L ℝ)
    (hw : ∀ x : ℝ, w (algebraMap ℝ L x) =
      algebraicExtension_standardRealAbsoluteValue x ^ s) :
    w = rpow
      (compAlgEquiv
        e algebraicExtension_standardRealAbsoluteValue)
      s hs0 hs1
AbsoluteValue.algebraicExtension_real_algEquiv_complex_unique_rpow_extension

In the ℂ branch over ℝ, the s-power of the usual complex absolute value is the unique extension of the s-power of the usual real absolute value.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem algebraicExtension_real_algEquiv_complex_unique_rpow_extension
    {L : Type*} [Field L] [Algebra ℝ L] (e : L ≃ₐ[ℝ] ℂ)
    (s : ℝ) (hs0 : 0 < s) (hs1 : s ≤ 1)
    (w : AbsoluteValue L ℝ)
    (hw : ∀ x : ℝ, w (algebraMap ℝ L x) =
      algebraicExtension_standardRealAbsoluteValue x ^ s) :
    w = rpow
      (compAlgEquiv
        e algebraicExtension_standardComplexAbsoluteValue)
      s hs0 hs1
AbsoluteValue.algebraicExtension_complex_algEquiv_complex_unique_rpow_extension

Over ℂ, an absolute value extending the s-power of the usual complex absolute value is the transported s-power.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem algebraicExtension_complex_algEquiv_complex_unique_rpow_extension
    {L : Type*} [Field L] [Algebra ℂ L] (e : L ≃ₐ[ℂ] ℂ)
    (s : ℝ) (hs0 : 0 < s) (hs1 : s ≤ 1)
    (w : AbsoluteValue L ℝ)
    (hw : ∀ z : ℂ, w (algebraMap ℂ L z) =
      algebraicExtension_standardComplexAbsoluteValue z ^ s) :
    w = rpow
      (compAlgEquiv
        e algebraicExtension_standardComplexAbsoluteValue)
      s hs0 hs1
AbsoluteValue.UniqueExtension

A chosen absolute-value extension together with its uniqueness property.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
structure UniqueExtension
    {K L : Type*} [Field K] [Field L] [Algebra K L]
    (v : AbsoluteValue K ℝ) where
  /-- The chosen absolute value on the extension field. -/
  extension : AbsoluteValue L ℝ
  /-- The chosen absolute value restricts to the given base absolute value. -/
  isExtension : Extends v extension
  /-- Every extension of the base absolute value equals the chosen one. -/
  unique :
    ∀ w : AbsoluteValue L ℝ,
      Extends v w → w = extension
AbsoluteValue.algebraicExtension_realRpow
Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def algebraicExtension_realRpow
    {L : Type*} [Field L] [Algebra ℝ L] [Algebra.IsAlgebraic ℝ L]
    (s : ℝ) (hs0 : 0 < s) (hs1 : s ≤ 1) :
    UniqueExtension (K := ℝ) (L := L)
      (rpow
        algebraicExtension_standardRealAbsoluteValue s hs0 hs1)
AbsoluteValue.algebraicExtension_complexRpow

archimedean s-power theorem over ℂ: every algebraic extension of ℂ has a unique absolute value extending |z|^s, for 0 < s ≤ 1.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def algebraicExtension_complexRpow
    {L : Type*} [Field L] [Algebra ℂ L] [Algebra.IsAlgebraic ℂ L]
    (s : ℝ) (hs0 : 0 < s) (hs1 : s ≤ 1) :
    UniqueExtension (K := ℂ) (L := L)
      (rpow
        algebraicExtension_standardComplexAbsoluteValue s hs0 hs1)
AbsoluteValue.algebraicExtension_isAlgebraic_of_base_ringEquiv

Algebraicity is preserved under transport of the base field by a ring equivalence.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem algebraicExtension_isAlgebraic_of_base_ringEquiv
    {K E L : Type*} [Field K] [Field E] [Field L] [Algebra K L]
    [Algebra.IsAlgebraic K L] (σ : K ≃+* E) :
    letI : Algebra E K := RingHom.toAlgebra σ.symm.toRingHom
    letI : Algebra E L :=
      RingHom.toAlgebra ((algebraMap K L).comp σ.symm.toRingHom)
    Algebra.IsAlgebraic E L := by
  let : Algebra E K := RingHom.toAlgebra σ.symm.toRingHom
  let : Algebra E L :=
    RingHom.toAlgebra ((algebraMap K L).comp σ.symm.toRingHom)
  have : IsScalarTower E K L :=
    IsScalarTower.of_algebraMap_eq (fun r => by
      simp [RingHom.algebraMap_toAlgebra])
  let e : K ≃ₐ[E] E := AlgEquiv.ofRingEquiv (f := σ) (by
    intro r
    simp [RingHom.algebraMap_toAlgebra])
  have : Algebra.IsAlgebraic E K := e.symm.isAlgebraic
  exact Algebra.IsAlgebraic.trans E K L
AbsoluteValue.algebraicExtension_baseRingEquiv

Transport a unique algebraic absolute-value extension after replacing the base field by a ring-equivalent field; the top algebra structure is transported along the same equivalence.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def algebraicExtension_baseRingEquiv
    {K E L : Type*} [Field K] [Field E] [Field L] [Algebra K L]
    (σ : K ≃+* E) (vK : AbsoluteValue K ℝ) (vE : AbsoluteValue E ℝ)
    (hvσ : ∀ x : K, vE (σ x) = vK x)
    (R :
      letI : Algebra E L :=
        RingHom.toAlgebra ((algebraMap K L).comp σ.symm.toRingHom)
      UniqueExtension (K := E) (L := L) vE) :
    UniqueExtension (K := K) (L := L) vK := by
  letI : Algebra E L :=
    RingHom.toAlgebra ((algebraMap K L).comp σ.symm.toRingHom)
  exact
    { extension := R.extension
      isExtension := by
        intro x
        have hbase := R.isExtension (σ x)
        have hmap :
            algebraMap E L (σ x) = algebraMap K L x := by
          simp [RingHom.algebraMap_toAlgebra]
        calc
          R.extension (algebraMap K L x)
              = R.extension (algebraMap E L (σ x)) := by rw [hmap]
          _ = vE (σ x) := hbase
          _ = vK x := hvσ x
      unique := by
        intro w hw
        apply R.unique w
        intro z
        have hmap :
            algebraMap E L z = algebraMap K L (σ.symm z) := by
          simp [RingHom.algebraMap_toAlgebra]
        calc
          w (algebraMap E L z)
              = w (algebraMap K L (σ.symm z)) := by rw [hmap]
          _ = vK (σ.symm z) := hw (σ.symm z)
          _ = vE z := by
            simpa using (hvσ (σ.symm z)).symm }
AbsoluteValue.algebraicExtension_archimedean

The archimedean branch of the unique algebraic-extension construction.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def algebraicExtension_archimedean
    {K L : Type*} [Field K] [Field L] [Algebra K L]
    [Algebra.IsAlgebraic K L]
    (v : AbsoluteValue K ℝ)
    (hcomplete : CompleteSpace (WithAbs v))
    (harch : ¬ IsNonarchimedean (v : K → ℝ)) :
    UniqueExtension (K := K) (L := L) v
AbsoluteValue.algebraicExtension_nonarchimedean

nonarchimedean algebraic-extension theorem: existence and uniqueness of the extension over any algebraic extension.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def algebraicExtension_nonarchimedean
    {K L : Type*} [Field K] [Field L] [Algebra K L]
    [Algebra.IsAlgebraic K L]
    (v : AbsoluteValue K ℝ)
    (hcomplete : CompleteSpace (WithAbs v))
    (hnonarch : IsNonarchimedean (v : K → ℝ))
    (hv : v.IsNontrivial) :
    UniqueExtension (K := K) (L := L) v where
  extension :=
    spectralExtension (K := K) (L := L)
      v hcomplete hnonarch hv
  isExtension :=
    spectralExtension_extends
      (K := K) (L := L) v hcomplete hnonarch hv
  unique :=
    eq_spectralExtension_of_extends
      (K := K) (L := L) v hcomplete hnonarch hv
AbsoluteValue.uniqueAlgebraicExtension

algebraic-extension theorem for the nontrivial valuations: a complete valued field has a unique absolute-value extension to every algebraic extension. The proof splits into the archimedean branch above and the nonarchimedean spectral branch.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
def uniqueAlgebraicExtension
    {K L : Type*} [Field K] [Field L] [Algebra K L]
    [Algebra.IsAlgebraic K L]
    (v : AbsoluteValue K ℝ)
    (hcomplete : CompleteSpace (WithAbs v))
    (hv : v.IsNontrivial) :
    UniqueExtension (K := K) (L := L) v
AbsoluteValue.existsUnique_extends_of_isAlgebraic

Existence and uniqueness as a unique-existence statement.

Source context 2 commands

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

noncomputable section
namespace AbsoluteValue
theorem existsUnique_extends_of_isAlgebraic
    {K L : Type*} [Field K] [Field L] [Algebra K L]
    [Algebra.IsAlgebraic K L]
    (v : AbsoluteValue K ℝ)
    (hcomplete : CompleteSpace (WithAbs v))
    (hv : v.IsNontrivial) :
    ∃! w : AbsoluteValue L ℝ, Extends v w