Module

AdicCompletionInverseLimitRing.lean

Nyll.ValuedFieldTheory.Valuation.Topology.AdicCompletionInverseLimitRing
67 declarations indexed from sourceView source ↗

Adic completion and inverse limits

This file contains the algebraic and topological projective-limit descriptions of adically complete rings, complete discrete valuation rings, and their unit groups.

Declarations

LubinTate.Valuations.adicCompletionAlgEquiv

The adic inverse-limit equivalence, algebraic form: an adically complete ring is canonically isomorphic to its adic completion.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicCompletionAlgEquiv
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] :
    R ≃ₐ[R] AdicCompletion I R
LubinTate.Valuations.adicCompletionAlgEquiv_apply

The canonical isomorphism to the adic completion is induced by the usual completion map.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicCompletionAlgEquiv_apply
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] (x : R) :
    adicCompletionAlgEquiv I x = AdicCompletion.of I R x
LubinTate.Valuations.adicCompletion_eval_apply

The finite coordinates of the canonical adic-completion isomorphism are the usual quotient classes modulo I ^ n.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicCompletion_eval_apply
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R]
    (n : ℕ) (x : R) :
    AdicCompletion.evalₐ I n (adicCompletionAlgEquiv I x) =
      Ideal.Quotient.mk (I ^ n) x
LubinTate.Valuations.adicCompletion_coordinates_surjective

The adic inverse-limit equivalence, projective-limit surjectivity in coordinates: every compatible adic-completion point is represented by a unique element of the original complete ring, and all finite coordinates agree with reduction modulo I ^ n.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicCompletion_coordinates_surjective
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R]
    (z : AdicCompletion I R) :
    ∃ x : R,
      adicCompletionAlgEquiv I x = z ∧
        ∀ n : ℕ,
          Ideal.Quotient.mk (I ^ n) x = AdicCompletion.evalₐ I n z
LubinTate.Valuations.adicCompletion_coordinates_injective

The adic inverse-limit equivalence, uniqueness in coordinates: two elements with the same finite reductions modulo every I ^ n are equal.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicCompletion_coordinates_injective
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R]
    {x y : R}
    (h :
      ∀ n : ℕ,
        Ideal.Quotient.mk (I ^ n) x = Ideal.Quotient.mk (I ^ n) y) :
    x = y
LubinTate.Valuations.DiscreteAdicQuotient

A finite adic quotient with its discrete topology fixed in the type.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
structure DiscreteAdicQuotient
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) where
  /-- The underlying residue class modulo `I ^ n`. -/
  val : R ⧸ I ^ n
LubinTate.Valuations.DiscreteAdicQuotient.equiv

Defines equiv.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
def equiv {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    DiscreteAdicQuotient I n ≃ R ⧸ I ^ n where
  toFun := val
  invFun := fun x => ⟨x⟩
  left_inv := fun x => by cases x; rfl
  right_inv := fun _ => rfl

A discrete adic quotient inherits its commutative ring structure from the concrete quotient.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
instance {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    CommRing (DiscreteAdicQuotient I n)

Each adic quotient is equipped with the discrete topology.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
instance {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    TopologicalSpace (DiscreteAdicQuotient I n)

The selected topology on an adic quotient is discrete.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
instance {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    DiscreteTopology (DiscreteAdicQuotient I n)
LubinTate.Valuations.DiscreteAdicQuotient.of

Defines of.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
def of {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ)
    (x : R ⧸ I ^ n) : DiscreteAdicQuotient I n
LubinTate.Valuations.DiscreteAdicQuotient.val_of

Forgetting the discrete adic wrapper after insertion recovers the original quotient element.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
theorem val_of {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ)
    (x : R ⧸ I ^ n) : (of I n x).val = x
LubinTate.Valuations.DiscreteAdicQuotient.homeomorph

The explicit boundary homeomorphism to the raw quotient equipped with the discrete topology.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
def homeomorph {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    @Homeomorph (DiscreteAdicQuotient I n) (R ⧸ I ^ n)
      (inferInstance : TopologicalSpace (DiscreteAdicQuotient I n))
      (⊥ : TopologicalSpace (R ⧸ I ^ n))
LubinTate.Valuations.DiscreteAdicQuotient.homeomorph_apply

The discrete adic homeomorphism evaluates as the underlying quotient equivalence.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
theorem homeomorph_apply {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ)
    (x : DiscreteAdicQuotient I n) : homeomorph I n x = x.val
LubinTate.Valuations.DiscreteAdicQuotient.equiv_symm_apply

The inverse quotient equivalence inserts a concrete quotient into its discrete copy.

Source context 8 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
namespace DiscreteAdicQuotient
theorem equiv_symm_apply {R : Type*} [CommRing R]
    (I : Ideal R) (n : ℕ) (x : R ⧸ I ^ n) :
    (equiv I n).symm x = of I n x
LubinTate.Valuations.adicQuotientInverseLimit

The adic inverse-limit object lim_n R/I^n. This is an opaque public type; its compatible-family implementation is exposed only through the named equivalence and coordinate API below.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimit
    {R : Type*} [CommRing R] (I : Ideal R) : Type _
LubinTate.Valuations.adicQuotientInverseLimitCompatibleFamiliesEquiv

The implementation representation of the all-level adic inverse limit.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimitCompatibleFamiliesEquiv
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicQuotientInverseLimit I ≃
      compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ n)
        (fun {_ _} hmn => Ideal.Quotient.factorPow I hmn) := by
  unfold adicQuotientInverseLimit
  exact Equiv.refl _
LubinTate.Valuations.adicQuotientInverseLimit.instCommRing

Compatible adic quotient families form a commutative ring coordinatewise.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
instance adicQuotientInverseLimit.instCommRing
    {R : Type*} [CommRing R] (I : Ideal R) :
    CommRing (adicQuotientInverseLimit I)
LubinTate.Valuations.adicQuotientInverseLimitRepresentation

The algebraic representation equivalence of the all-level adic inverse limit.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimitRepresentation
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicQuotientInverseLimit I ≃+*
      compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ n)
        (fun {_ _} hmn => Ideal.Quotient.factorPow I hmn) :=
  (adicQuotientInverseLimitCompatibleFamiliesEquiv I).ringEquiv
LubinTate.Valuations.adicQuotientInverseLimit_mk

Build an all-level adic inverse-limit point from a compatible family.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimit_mk
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : ∀ n : ℕ, R ⧸ I ^ n)
    (compatible : ∀ {m n : ℕ} (hmn : m ≤ n),
      Ideal.Quotient.factorPow I hmn (x n) = x m) :
    adicQuotientInverseLimit I
LubinTate.Valuations.adicQuotientInverseLimit_eval

Coordinate evaluation from the explicit projective limit.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimit_eval
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    adicQuotientInverseLimit I →+* R ⧸ I ^ n where
  toFun x := (adicQuotientInverseLimitCompatibleFamiliesEquiv I x).1 n
  map_one' := by rfl
  map_mul' _ _ := by rfl
  map_zero' := by rfl
  map_add' _ _ := by rfl
LubinTate.Valuations.adicQuotientInverseLimit_eval_mk

Evaluation of an adic inverse-limit family returns its component at the selected level.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_eval_mk
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : ∀ n : ℕ, R ⧸ I ^ n)
    (compatible : ∀ {m n : ℕ} (hmn : m ≤ n),
      Ideal.Quotient.factorPow I hmn (x n) = x m)
    (n : ℕ) :
    adicQuotientInverseLimit_eval I n
        (adicQuotientInverseLimit_mk I x compatible) = x n
LubinTate.Valuations.adicQuotientInverseLimit_ext

Adic inverse-limit elements are equal when all coordinate evaluations agree.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_ext
    {R : Type*} [CommRing R] (I : Ideal R)
    {x y : adicQuotientInverseLimit I}
    (h : ∀ n : ℕ, adicQuotientInverseLimit_eval I n x =
      adicQuotientInverseLimit_eval I n y) :
    x = y
LubinTate.Valuations.adicQuotientInverseLimit_eval_factorPow

The explicit projective-limit coordinates are compatible with quotient transition maps.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_eval_factorPow
    {R : Type*} [CommRing R] (I : Ideal R)
    {m n : ℕ} (hmn : m ≤ n)
    (x : adicQuotientInverseLimit I) :
    Ideal.Quotient.factorPow I hmn
        (adicQuotientInverseLimit_eval I n x) =
      adicQuotientInverseLimit_eval I m x
LubinTate.Valuations.adicQuotientInverseLimit.instTopologicalSpace

The canonical prodiscrete topology on the all-level inverse limit. The finite quotient stages are discrete inside this one representation boundary; their raw topology instances do not escape into public theorem statements.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
instance adicQuotientInverseLimit.instTopologicalSpace
    {R : Type*} [CommRing R] (I : Ideal R) :
    TopologicalSpace (adicQuotientInverseLimit I)
LubinTate.Valuations.adicQuotientInverseLimitRepresentationHomeomorph
Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimitRepresentationHomeomorph
    {R : Type*} [CommRing R] (I : Ideal R) :
    letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ n) := fun _ => ⊥
    adicQuotientInverseLimit I ≃ₜ
      compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ n)
        (fun {_ _} hmn => Ideal.Quotient.factorPow I hmn) := by
  letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ n) := fun _ => ⊥
  exact (adicQuotientInverseLimitCompatibleFamiliesEquiv I).homeomorph
LubinTate.Valuations.adicQuotientInverseLimit_discreteEval

Coordinate evaluation into a type whose discreteness is recorded in the type itself.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimit_discreteEval
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    adicQuotientInverseLimit I → DiscreteAdicQuotient I n
LubinTate.Valuations.adicQuotientInverseLimit_discreteEval_continuous

Evaluation from the adic inverse limit to each discrete quotient is continuous.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_discreteEval_continuous
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    Continuous (adicQuotientInverseLimit_discreteEval I n)
LubinTate.Valuations.quotientEquivAlgOfEq_apply_symm

The quotient algebra equivalence induced by equal ideals sends inverse representatives as expected.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem quotientEquivAlgOfEq_apply_symm
    {R : Type*} [CommRing R] {I J : Ideal R}
    (h₁ h₂ : I = J) (y : R ⧸ J) :
    (Ideal.quotientEquivAlgOfEq R h₁)
      ((Ideal.quotientEquivAlgOfEq R h₂).symm y) = y
LubinTate.Valuations.transitionMap_quotientEquivAlgOfEq

Adic transition maps commute with quotient equivalences arising from equal powers.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem transitionMap_quotientEquivAlgOfEq
    {R : Type*} [CommRing R] (I : Ideal R)
    {m n : ℕ} (hmn : m ≤ n)
    (hm : (I ^ m • ⊤ : Ideal R) = I ^ m)
    (hn : (I ^ n • ⊤ : Ideal R) = I ^ n)
    (y : R ⧸ I ^ n) :
    (Ideal.quotientEquivAlgOfEq R hm)
      (AdicCompletion.transitionMap I R hmn
        ((Ideal.quotientEquivAlgOfEq R hn).symm y)) =
      Ideal.Quotient.factorPow I hmn y
LubinTate.Valuations.adicCompletion_eval_factorPow

The finite quotient coordinates of an adic-completion point are compatible under the transition maps.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicCompletion_eval_factorPow
    {R : Type*} [CommRing R] (I : Ideal R)
    {m n : ℕ} (hmn : m ≤ n) (z : AdicCompletion I R) :
    Ideal.Quotient.factorPow I hmn (AdicCompletion.evalₐ I n z) =
      AdicCompletion.evalₐ I m z
LubinTate.Valuations.adicCompletion_toQuotientInverseLimit

The map from the adic completion to the explicit projective limit lim_n R/I^n.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicCompletion_toQuotientInverseLimit
    {R : Type*} [CommRing R] (I : Ideal R) :
    AdicCompletion I R → adicQuotientInverseLimit I
LubinTate.Valuations.adicQuotientInverseLimit_toCompletion

The inverse map from the explicit projective limit lim_n R/I^n to the adic completion.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimit_toCompletion
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicQuotientInverseLimit I → AdicCompletion I R
LubinTate.Valuations.adicQuotientInverseLimit_toCompletion_eval

The map from the adic inverse limit to the completion has the prescribed residue at every level.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_toCompletion_eval
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : adicQuotientInverseLimit I) (n : ℕ) :
    AdicCompletion.evalₐ I n
        (adicQuotientInverseLimit_toCompletion I x) =
      adicQuotientInverseLimit_eval I n x
LubinTate.Valuations.adicQuotientInverseLimit_left_inverse

Mapping an inverse-limit family to the completion and back recovers the family.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_left_inverse
    {R : Type*} [CommRing R] (I : Ideal R) (z : AdicCompletion I R) :
    adicQuotientInverseLimit_toCompletion I
        (adicCompletion_toQuotientInverseLimit I z) = z
LubinTate.Valuations.adicQuotientInverseLimit_right_inverse

Mapping a completion element to its residue family and back recovers the element.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_right_inverse
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : adicQuotientInverseLimit I) :
    adicCompletion_toQuotientInverseLimit I
        (adicQuotientInverseLimit_toCompletion I x) = x
LubinTate.Valuations.adicCompletion_equiv_quotientInverseLimit

The adic inverse-limit equivalence, algebraic projective-limit form: the adic completion is canonically isomorphic to lim_n R/I^n.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicCompletion_equiv_quotientInverseLimit
    {R : Type*} [CommRing R] (I : Ideal R) :
    AdicCompletion I R ≃+* adicQuotientInverseLimit I where
  toFun := adicCompletion_toQuotientInverseLimit I
  invFun := adicQuotientInverseLimit_toCompletion I
  left_inv := adicQuotientInverseLimit_left_inverse I
  right_inv := adicQuotientInverseLimit_right_inverse I
  map_mul' x y := by
    ext n
    change AdicCompletion.evalₐ I n (x * y) =
      AdicCompletion.evalₐ I n x * AdicCompletion.evalₐ I n y
    simp
  map_add' x y := by
    ext n
    change AdicCompletion.evalₐ I n (x + y) =
      AdicCompletion.evalₐ I n x + AdicCompletion.evalₐ I n y
    simp
LubinTate.Valuations.adicQuotientInverseLimit_canonicalMap

The adic inverse-limit equivalence, canonical map from a ring to the explicit projective limit of its quotients.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimit_canonicalMap
    {R : Type*} [CommRing R] (I : Ideal R) :
    R →+* adicQuotientInverseLimit I where
  toFun x := adicQuotientInverseLimit_mk I
    (fun n => Ideal.Quotient.mk (I ^ n) x)
    (fun _ => rfl)
  map_one' := by ext n; rfl
  map_mul' x y := by ext n; rfl
  map_zero' := by ext n; rfl
  map_add' x y := by ext n; rfl
LubinTate.Valuations.adicQuotientInverseLimitEquiv

The adic inverse-limit equivalence, if R is complete for the I-adic topology, the canonical map R → lim_n R/I^n is a ring isomorphism.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimitEquiv
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] :
    R ≃+* adicQuotientInverseLimit I
LubinTate.Valuations.adicQuotientInverseLimitEquiv_apply

The complete-ring projective-limit isomorphism is induced by reduction modulo I^n in each coordinate.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimitEquiv_apply
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R]
    (x : R) (n : ℕ) :
    adicQuotientInverseLimit_eval I n
        (adicQuotientInverseLimitEquiv I x) =
      Ideal.Quotient.mk (I ^ n) x
LubinTate.Valuations.quotient_mk_continuous_adic_raw

Reduction modulo I^n is continuous from the I-adic topology to the discrete finite quotient topology.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem quotient_mk_continuous_adic_raw
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    @Continuous R (R ⧸ I ^ n) I.adicTopology
      (⊥ : TopologicalSpace (R ⧸ I ^ n))
      (Ideal.Quotient.mk (I ^ n))
LubinTate.Valuations.quotient_mk_continuous_adic

Reduction from the type-level adic ring to the named discrete quotient model is continuous.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem quotient_mk_continuous_adic
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    Continuous fun x :
        WithTopology R I.adicTopology =>
      DiscreteAdicQuotient.of I n
        (Ideal.Quotient.mk (I ^ n) x.ofTopology) := by
  let : TopologicalSpace R := I.adicTopology
  let : TopologicalSpace (R ⧸ I ^ n) := ⊥
  let : DiscreteTopology (R ⧸ I ^ n) := ⟨rfl⟩
  have hraw := quotient_mk_continuous_adic_raw I n
  have hunderlying :
      Continuous fun x :
          WithTopology R I.adicTopology =>
        Ideal.Quotient.mk (I ^ n) x.ofTopology :=
    hraw.comp (WithTopology.continuous_ofTopology I.adicTopology)
  have hmodel :=
    (DiscreteAdicQuotient.homeomorph I n).symm.continuous.comp hunderlying
  convert hmodel using 1
  rfl
LubinTate.Valuations.adicQuotientCompatibleFamiliesHomeomorph
Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientCompatibleFamiliesHomeomorph
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] :
    letI : TopologicalSpace R := I.adicTopology
    letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ n) := fun _ => ⊥
    R ≃ₜ compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ n)
      (fun {_ _} hmn => Ideal.Quotient.factorPow I hmn) := by
  letI : TopologicalSpace R := I.adicTopology
  letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ n) := fun _ => ⊥
  letI : (n : ℕ) → DiscreteTopology (R ⧸ I ^ n) := fun _ => ⟨rfl⟩
  let e := (adicQuotientInverseLimitEquiv I).trans
    (adicQuotientInverseLimitRepresentation I)
  refine
    { toFun := e
      invFun := e.symm
      left_inv := e.left_inv
      right_inv := e.right_inv
      continuous_toFun := ?_
      continuous_invFun := ?_ }
  · exact Continuous.subtype_mk
      (continuous_pi fun n => by
        convert quotient_mk_continuous_adic_raw I n using 1
        funext x
        exact adicCompletion_eval_apply I n x)
      (fun x => by
        intro m n hmn
        exact adicCompletion_eval_factorPow I hmn
          ((adicCompletionAlgEquiv I) x))
  · rw [continuous_iff_continuousAt]
    intro q
    rw [ContinuousAt]
    rw [Filter.tendsto_def]
    intro s hs
    rcases (Ideal.hasBasis_nhds_adic I (e.symm q)).mem_iff.mp hs with
      ⟨n, _hn, hns⟩
    let cylinder : Set
        (compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ n)
          (fun {_ _} hmn => Ideal.Quotient.factorPow I hmn)) :=
      {q' | q'.1 n = q.1 n}
    have hcont_coord :
        Continuous fun q' :
            compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ n)
              (fun {_ _} hmn => Ideal.Quotient.factorPow I hmn) =>
          q'.1 n := by
      exact (continuous_apply n).comp continuous_subtype_val
    have hcyl_open : IsOpen cylinder := by
      exact (isOpen_discrete ({q.1 n} : Set (R ⧸ I ^ n))).preimage hcont_coord
    have hqmem : q ∈ cylinder := rfl
    exact mem_of_superset (hcyl_open.mem_nhds hqmem) (by
      intro q' hq'
      apply hns
      have hred' : Ideal.Quotient.mk (I ^ n) (e.symm q') = q'.1 n := by
        calc
          Ideal.Quotient.mk (I ^ n) (e.symm q') = (e (e.symm q')).1 n :=
            (adicQuotientInverseLimitEquiv_apply I (e.symm q') n).symm
          _ = q'.1 n := by
            simp [e.apply_symm_apply q']
      have hred : Ideal.Quotient.mk (I ^ n) (e.symm q) = q.1 n := by
        calc
          Ideal.Quotient.mk (I ^ n) (e.symm q) = (e (e.symm q)).1 n :=
            (adicQuotientInverseLimitEquiv_apply I (e.symm q) n).symm
          _ = q.1 n := by
            simp [e.apply_symm_apply q]
      have hmk : Ideal.Quotient.mk (I ^ n) (e.symm q') =
          Ideal.Quotient.mk (I ^ n) (e.symm q) := by
        rw [hred', hred, hq']
      have hmem : e.symm q' - e.symm q ∈ I ^ n := by
        exact (Ideal.Quotient.mk_eq_mk_iff_sub_mem
          (I := I ^ n) (x := e.symm q') (y := e.symm q)).1 hmk
      refine ⟨e.symm q' - e.symm q, hmem, ?_⟩
      ring)
LubinTate.Valuations.adicQuotientInverseLimitHomeomorph

The canonical equivalence from an adically complete ring, represented by an adic type-level source and the opaque prodiscrete inverse-limit target.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimitHomeomorph
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] :
    WithTopology R I.adicTopology ≃ₜ
      adicQuotientInverseLimit I
LubinTate.Valuations.adicPositiveQuotientInverseLimit

The opaque positive-indexed projective-limit object lim_n R/I^(n+1).

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimit
    {R : Type*} [CommRing R] (I : Ideal R) : Type _
LubinTate.Valuations.adicPositiveQuotientInverseLimitCompatibleFamiliesEquiv

The implementation representation of the positive-indexed ring limit.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimitCompatibleFamiliesEquiv
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicPositiveQuotientInverseLimit I ≃
      compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ (n + 1))
        (fun {_ _} hmn =>
          Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn)) := by
  unfold adicPositiveQuotientInverseLimit
  exact Equiv.refl _
LubinTate.Valuations.adicPositiveQuotientInverseLimit.instCommRing

Positive-level compatible adic quotient families form a commutative ring.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
instance adicPositiveQuotientInverseLimit.instCommRing
    {R : Type*} [CommRing R] (I : Ideal R) :
    CommRing (adicPositiveQuotientInverseLimit I)
LubinTate.Valuations.adicPositiveQuotientInverseLimitRepresentation

Defines adicPositiveQuotientInverseLimitRepresentation.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimitRepresentation
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicPositiveQuotientInverseLimit I ≃+*
      compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ (n + 1))
        (fun {_ _} hmn =>
          Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn)) :=
  (adicPositiveQuotientInverseLimitCompatibleFamiliesEquiv I).ringEquiv
LubinTate.Valuations.adicPositiveQuotientInverseLimit_mk

Defines adicPositiveQuotientInverseLimit_mk.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimit_mk
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : ∀ n : ℕ, R ⧸ I ^ (n + 1))
    (compatible : ∀ {m n : ℕ} (hmn : m ≤ n),
      Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn) (x n) = x m) :
    adicPositiveQuotientInverseLimit I
LubinTate.Valuations.adicPositiveQuotientInverseLimit_eval

Defines adicPositiveQuotientInverseLimit_eval.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimit_eval
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    adicPositiveQuotientInverseLimit I →+* R ⧸ I ^ (n + 1) where
  toFun x :=
    (adicPositiveQuotientInverseLimitCompatibleFamiliesEquiv I x).1 n
  map_one' := by rfl
  map_mul' _ _ := by rfl
  map_zero' := by rfl
  map_add' _ _ := by rfl
LubinTate.Valuations.adicPositiveQuotientInverseLimit_eval_mk

Positive-level evaluation returns the selected adic quotient component.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicPositiveQuotientInverseLimit_eval_mk
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : ∀ n : ℕ, R ⧸ I ^ (n + 1))
    (compatible : ∀ {m n : ℕ} (hmn : m ≤ n),
      Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn) (x n) = x m)
    (n : ℕ) :
    adicPositiveQuotientInverseLimit_eval I n
        (adicPositiveQuotientInverseLimit_mk I x compatible) = x n
LubinTate.Valuations.adicPositiveQuotientInverseLimit_ext

Positive adic inverse-limit elements are determined by all of their components.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicPositiveQuotientInverseLimit_ext
    {R : Type*} [CommRing R] (I : Ideal R)
    {x y : adicPositiveQuotientInverseLimit I}
    (h : ∀ n : ℕ, adicPositiveQuotientInverseLimit_eval I n x =
      adicPositiveQuotientInverseLimit_eval I n y) :
    x = y
LubinTate.Valuations.adicPositiveQuotientInverseLimit_eval_factorPow

Positive-level evaluation is compatible with the factor map between ideal powers.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicPositiveQuotientInverseLimit_eval_factorPow
    {R : Type*} [CommRing R] (I : Ideal R)
    {m n : ℕ} (hmn : m ≤ n)
    (x : adicPositiveQuotientInverseLimit I) :
    Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn)
        (adicPositiveQuotientInverseLimit_eval I n x) =
      adicPositiveQuotientInverseLimit_eval I m x
LubinTate.Valuations.adicPositiveQuotientInverseLimit.instTopologicalSpace

The positive adic inverse limit carries the topology induced by its discrete coordinates.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
instance adicPositiveQuotientInverseLimit.instTopologicalSpace
    {R : Type*} [CommRing R] (I : Ideal R) :
    TopologicalSpace (adicPositiveQuotientInverseLimit I)
LubinTate.Valuations.adicPositiveQuotientInverseLimitRepresentationHomeomorph
Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def
    adicPositiveQuotientInverseLimitRepresentationHomeomorph
    {R : Type*} [CommRing R] (I : Ideal R) :
    letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ (n + 1)) := fun _ => ⊥
    adicPositiveQuotientInverseLimit I ≃ₜ
      compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ (n + 1))
        (fun {_ _} hmn =>
          Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn)) := by
  letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ (n + 1)) := fun _ => ⊥
  exact
    (adicPositiveQuotientInverseLimitCompatibleFamiliesEquiv I).homeomorph
LubinTate.Valuations.adicPositiveQuotientInverseLimit_discreteEval

Defines adicPositiveQuotientInverseLimit_discreteEval.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimit_discreteEval
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    adicPositiveQuotientInverseLimit I → DiscreteAdicQuotient I (n + 1)
LubinTate.Valuations.adicPositiveQuotientInverseLimit_discreteEval_continuous

Every positive-level coordinate evaluation into a discrete adic quotient is continuous.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicPositiveQuotientInverseLimit_discreteEval_continuous
    {R : Type*} [CommRing R] (I : Ideal R) (n : ℕ) :
    Continuous (adicPositiveQuotientInverseLimit_discreteEval I n)
LubinTate.Valuations.adicQuotientInverseLimit_toPositive

Defines adicQuotientInverseLimit_toPositive.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimit_toPositive
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicQuotientInverseLimit I →
      adicPositiveQuotientInverseLimit I
LubinTate.Valuations.adicPositiveQuotientInverseLimit_toAll

Defines adicPositiveQuotientInverseLimit_toAll.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimit_toAll
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicPositiveQuotientInverseLimit I →
      adicQuotientInverseLimit I
LubinTate.Valuations.adicPositiveQuotientInverseLimit_toPositive_toAll

Restricting an all-level adic family to positive levels and extending back is the identity.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicPositiveQuotientInverseLimit_toPositive_toAll
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : adicPositiveQuotientInverseLimit I) :
    adicQuotientInverseLimit_toPositive I
        (adicPositiveQuotientInverseLimit_toAll I x) = x
LubinTate.Valuations.adicQuotientInverseLimit_toAll_toPositive

Extending a positive-level adic family and restricting again is the identity.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicQuotientInverseLimit_toAll_toPositive
    {R : Type*} [CommRing R] (I : Ideal R)
    (x : adicQuotientInverseLimit I) :
    adicPositiveQuotientInverseLimit_toAll I
        (adicQuotientInverseLimit_toPositive I x) = x
LubinTate.Valuations.adicQuotientInverseLimitEquivPositive

The all-level quotient inverse limit is equivalent to the canonical positive-indexed one.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicQuotientInverseLimitEquivPositive
    {R : Type*} [CommRing R] (I : Ideal R) :
    adicQuotientInverseLimit I ≃+*
      adicPositiveQuotientInverseLimit I where
  toFun := adicQuotientInverseLimit_toPositive I
  invFun := adicPositiveQuotientInverseLimit_toAll I
  left_inv := adicQuotientInverseLimit_toAll_toPositive I
  right_inv := adicPositiveQuotientInverseLimit_toPositive_toAll I
  map_mul' x y := by
    ext n
    rfl
  map_add' x y := by
    ext n
    rfl
LubinTate.Valuations.adicPositiveQuotientInverseLimit_canonicalMap

The adic inverse-limit equivalence, canonical map from a ring to the positive-indexed projective limit of its quotients.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimit_canonicalMap
    {R : Type*} [CommRing R] (I : Ideal R) :
    R →+* adicPositiveQuotientInverseLimit I where
  toFun x := adicPositiveQuotientInverseLimit_mk I
    (fun n => Ideal.Quotient.mk (I ^ (n + 1)) x)
    (fun _ => rfl)
  map_one' := by ext n; rfl
  map_mul' x y := by ext n; rfl
  map_zero' := by ext n; rfl
  map_add' x y := by ext n; rfl
LubinTate.Valuations.adicPositiveQuotientInverseLimitEquiv

The adic inverse-limit equivalence, if R is complete for the I-adic topology, the canonical map R → lim_n R/I^(n+1) is a ring isomorphism.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimitEquiv
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] :
    R ≃+* adicPositiveQuotientInverseLimit I
LubinTate.Valuations.adicPositiveQuotientInverseLimitEquiv_apply

The positive-indexed projective-limit isomorphism is induced by reduction modulo I^(n+1) in each coordinate.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
theorem adicPositiveQuotientInverseLimitEquiv_apply
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R]
    (x : R) (n : ℕ) :
    adicPositiveQuotientInverseLimit_eval I n
        (adicPositiveQuotientInverseLimitEquiv I x) =
      Ideal.Quotient.mk (I ^ (n + 1)) x
LubinTate.Valuations.adicPositiveQuotientCompatibleFamiliesHomeomorph
Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientCompatibleFamiliesHomeomorph
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] :
    letI : TopologicalSpace R := I.adicTopology
    letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ (n + 1)) := fun _ => ⊥
    R ≃ₜ compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ (n + 1))
      (fun {_ _} hmn =>
        Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn)) := by
  letI : TopologicalSpace R := I.adicTopology
  letI : (n : ℕ) → TopologicalSpace (R ⧸ I ^ (n + 1)) := fun _ => ⊥
  letI : (n : ℕ) → DiscreteTopology (R ⧸ I ^ (n + 1)) := fun _ => ⟨rfl⟩
  let e := (adicPositiveQuotientInverseLimitEquiv I).trans
    (adicPositiveQuotientInverseLimitRepresentation I)
  let c := (adicPositiveQuotientInverseLimitRepresentation I).toRingHom.comp
    (adicPositiveQuotientInverseLimit_canonicalMap I)
  refine
    { toFun := fun x => c x
      invFun := fun q => e.symm q
      left_inv := ?_
      right_inv := ?_
      continuous_toFun := ?_
      continuous_invFun := ?_ }
  · intro x
    have hc : c x = e x := by
      ext n
      exact (adicPositiveQuotientInverseLimitEquiv_apply I x n).symm
    change e.symm (c x) = x
    rw [hc]
    exact e.left_inv x
  · intro q
    ext n
    change Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q) = q.1 n
    calc
      Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q) = (e (e.symm q)).1 n :=
        (adicPositiveQuotientInverseLimitEquiv_apply I (e.symm q) n).symm
      _ = q.1 n := by simp [e.apply_symm_apply q]
  · change Continuous fun x : R => c x
    exact Continuous.subtype_mk
      (continuous_pi fun n => by
        simpa [c, adicPositiveQuotientInverseLimit_canonicalMap] using
          (quotient_mk_continuous_adic_raw I (n + 1)))
      (by
        intro x m n hmn
        rfl)
  · rw [continuous_iff_continuousAt]
    intro q
    rw [ContinuousAt, Filter.tendsto_def]
    intro s hs
    rcases (Ideal.hasBasis_nhds_adic I (e.symm q)).mem_iff.mp hs with
      ⟨n, _hn, hns⟩
    let cylinder : Set
        (compatibleRingFamilies (fun n : ℕ => R ⧸ I ^ (n + 1))
          (fun {_ _} hmn =>
            Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn))) :=
      {q' | q'.1 n = q.1 n}
    have hcont_coord :
        Continuous fun q' : compatibleRingFamilies
            (fun n : ℕ => R ⧸ I ^ (n + 1))
            (fun {_ _} hmn =>
              Ideal.Quotient.factorPow I (Nat.succ_le_succ hmn)) =>
          q'.1 n := by
      exact (continuous_apply n).comp continuous_subtype_val
    have hcyl_open : IsOpen cylinder := by
      exact
        (isOpen_discrete ({q.1 n} : Set (R ⧸ I ^ (n + 1)))).preimage
          hcont_coord
    have hqmem : q ∈ cylinder := rfl
    exact mem_of_superset (hcyl_open.mem_nhds hqmem) (by
      intro q' hq'
      apply hns
      have hred' : Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q') = q'.1 n := by
        calc
          Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q') = (e (e.symm q')).1 n :=
            (adicPositiveQuotientInverseLimitEquiv_apply
              I (e.symm q') n).symm
          _ = q'.1 n := by simp [e.apply_symm_apply q']
      have hred : Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q) = q.1 n := by
        calc
          Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q) = (e (e.symm q)).1 n :=
            (adicPositiveQuotientInverseLimitEquiv_apply
              I (e.symm q) n).symm
          _ = q.1 n := by simp [e.apply_symm_apply q]
      have hmk : Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q') =
          Ideal.Quotient.mk (I ^ (n + 1)) (e.symm q) := by
        rw [hred', hred, hq']
      have hmem_succ : e.symm q' - e.symm q ∈ I ^ (n + 1) := by
        exact (Ideal.Quotient.mk_eq_mk_iff_sub_mem
          (I := I ^ (n + 1)) (x := e.symm q') (y := e.symm q)).1 hmk
      have hmem : e.symm q' - e.symm q ∈ I ^ n :=
        Ideal.pow_le_pow_right (Nat.le_succ n) hmem_succ
      refine ⟨e.symm q' - e.symm q, hmem, ?_⟩
      ring)
LubinTate.Valuations.adicPositiveQuotientInverseLimitHomeomorph

The positive-indexed topological inverse-limit equivalence with both topologies fixed by their types.

Source context 7 commands

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

noncomputable section
namespace LubinTate
namespace Valuations
open ValuationTheory.DiscreteValuationField
open ValuationTheory.Valuations
open Filter Set Topology
open scoped Valued
def adicPositiveQuotientInverseLimitHomeomorph
    {R : Type*} [CommRing R] (I : Ideal R) [IsAdicComplete I R] :
    WithTopology R I.adicTopology ≃ₜ
      adicPositiveQuotientInverseLimit I