Module

CoprimeProduct.lean

Nyll.SchemeTheory.RingTheory.AdicCompletion.CoprimeProduct
28 declarations indexed from sourceView source ↗

Adic completion at a finite product of coprime ideals

The Chinese remainder theorem decomposes every finite quotient by a power of a product of pairwise coprime ideals. This file proves that these finite-level decompositions are compatible with the transition maps, and hence split the adic completion itself as the product of the individual completions.

Imports4
  • Mathlib.RingTheory.AdicCompletion.Algebra
  • Mathlib.RingTheory.DedekindDomain.Factorization
  • Mathlib.RingTheory.Ideal.Quotient.Operations
  • Mathlib.RingTheory.QuasiFinite.Basic
Imported by3

Declarations

EtaleFundamentalGroups.quotientProdPowEquiv

The finite-level Chinese-remainder equivalence for powers of a product of pairwise coprime ideals.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def quotientProdPowEquiv
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) (n : ℕ) :
    R ⧸ (∏ i, J i) ^ n ≃+* ∀ i, R ⧸ J i ^ n
EtaleFundamentalGroups.quotientProdPowEquiv_mk
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem quotientProdPowEquiv_mk
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) (n : ℕ) (x : R) :
    quotientProdPowEquiv J hJ n (Ideal.Quotient.mk _ x) =
      fun _ => Ideal.Quotient.mk _ x := by
  rfl
EtaleFundamentalGroups.quotientProdPowEquiv_factorPow
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem quotientProdPowEquiv_factorPow
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J))
    {m n : ℕ} (hmn : m ≤ n) (x : R ⧸ (∏ i, J i) ^ n) (i : ι) :
    Ideal.Quotient.factorPow (J i) hmn (quotientProdPowEquiv J hJ n x i) =
      quotientProdPowEquiv J hJ m
        (Ideal.Quotient.factorPow (∏ i, J i) hmn x) i
EtaleFundamentalGroups.quotientProdPowEquiv_symm_factorPow
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem quotientProdPowEquiv_symm_factorPow
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J))
    {m n : ℕ} (hmn : m ≤ n) (x : ∀ i, R ⧸ J i ^ n) :
    Ideal.Quotient.factorPow (∏ i, J i) hmn
        ((quotientProdPowEquiv J hJ n).symm x) =
      (quotientProdPowEquiv J hJ m).symm
        (fun i => Ideal.Quotient.factorPow (J i) hmn (x i)) := by
  apply (quotientProdPowEquiv J hJ m).injective
  funext i
  rw [RingEquiv.apply_symm_apply,
    ← quotientProdPowEquiv_factorPow J hJ hmn
      ((quotientProdPowEquiv J hJ n).symm x) i,
    RingEquiv.apply_symm_apply]
EtaleFundamentalGroups.factorPow_evalₐ
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem factorPow_evalₐ
    (K : Ideal R) {m n : ℕ} (hmn : m ≤ n) (x : AdicCompletion K R) :
    Ideal.Quotient.factorPow K hmn (AdicCompletion.evalₐ K n x) =
      AdicCompletion.evalₐ K m x
EtaleFundamentalGroups.quotientProjectionRingHom
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def quotientProjectionRingHom
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) (i : ι) (n : ℕ) :
    AdicCompletion (∏ j, J j) R →+* R ⧸ J i ^ n
EtaleFundamentalGroups.quotientProjectionRingHom_compatible
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem quotientProjectionRingHom_compatible
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) (i : ι) :
    ∀ {m n : ℕ} (hmn : m ≤ n),
      (Ideal.Quotient.factorPow (J i) hmn).comp
          (quotientProjectionRingHom J hJ i n) =
        quotientProjectionRingHom J hJ i m
EtaleFundamentalGroups.adicCompletionToComponent

Projection from the completion at the product to one of the individual adic completions.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def adicCompletionToComponent
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) (i : ι) :
    AdicCompletion (∏ j, J j) R →+* AdicCompletion (J i) R
EtaleFundamentalGroups.evalₐ_adicCompletionToComponent
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem evalₐ_adicCompletionToComponent
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) (i : ι)
    (n : ℕ) (x : AdicCompletion (∏ j, J j) R) :
    AdicCompletion.evalₐ (J i) n (adicCompletionToComponent J hJ i x) =
      quotientProdPowEquiv J hJ n
        (AdicCompletion.evalₐ (∏ j, J j) n x) i
EtaleFundamentalGroups.quotientAssemblyRingHom
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def quotientAssemblyRingHom
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) (n : ℕ) :
    (∀ i, AdicCompletion (J i) R) →+* R ⧸ (∏ i, J i) ^ n
EtaleFundamentalGroups.quotientAssemblyRingHom_compatible
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem quotientAssemblyRingHom_compatible
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) :
    ∀ {m n : ℕ} (hmn : m ≤ n),
      (Ideal.Quotient.factorPow (∏ i, J i) hmn).comp
          (quotientAssemblyRingHom J hJ n) =
        quotientAssemblyRingHom J hJ m
EtaleFundamentalGroups.adicCompletionFromPi

Reassemble a tuple of individual adic completions using the inverse finite-level Chinese-remainder maps.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def adicCompletionFromPi
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) :
    (∀ i, AdicCompletion (J i) R) →+* AdicCompletion (∏ i, J i) R
EtaleFundamentalGroups.evalₐ_adicCompletionFromPi
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem evalₐ_adicCompletionFromPi
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J))
    (n : ℕ) (x : ∀ i, AdicCompletion (J i) R) :
    AdicCompletion.evalₐ (∏ i, J i) n (adicCompletionFromPi J hJ x) =
      (quotientProdPowEquiv J hJ n).symm
        (fun i => AdicCompletion.evalₐ (J i) n (x i)) := by
  unfold adicCompletionFromPi
  rw [AdicCompletion.evalₐ_liftRingHom]
  rfl
EtaleFundamentalGroups.adicCompletionToPi
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def adicCompletionToPi
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) :
    AdicCompletion (∏ i, J i) R →+* ∀ i, AdicCompletion (J i) R
EtaleFundamentalGroups.adicCompletionToPi_comp_fromPi
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem adicCompletionToPi_comp_fromPi
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) :
    (adicCompletionToPi J hJ).comp (adicCompletionFromPi J hJ) =
      RingHom.id (∀ i, AdicCompletion (J i) R)
EtaleFundamentalGroups.adicCompletionFromPi_comp_toPi
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem adicCompletionFromPi_comp_toPi
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) :
    (adicCompletionFromPi J hJ).comp (adicCompletionToPi J hJ) =
      RingHom.id (AdicCompletion (∏ i, J i) R)
EtaleFundamentalGroups.adicCompletionProdEquivPi

Adic completion at a finite product of pairwise coprime ideals is the product of the individual adic completions. The equivalence is induced at every finite level by the Chinese remainder theorem.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def adicCompletionProdEquivPi
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J)) :
    AdicCompletion (∏ i, J i) R ≃+* ∀ i, AdicCompletion (J i) R
EtaleFundamentalGroups.adicCompletionProdEquivPi_apply
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem adicCompletionProdEquivPi_apply
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J))
    (x : AdicCompletion (∏ i, J i) R) (i : ι) :
    adicCompletionProdEquivPi J hJ x i =
      adicCompletionToComponent J hJ i x
EtaleFundamentalGroups.adicCompletionProdEquivPi_of

The product decomposition sends the canonical completion image of an element to its canonical image in every component completion.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem adicCompletionProdEquivPi_of
    (J : ι → Ideal R) (hJ : Pairwise (IsCoprime on J))
    (x : R) (i : ι) :
    adicCompletionProdEquivPi J hJ
        (AdicCompletion.of (∏ j, J j) R x) i =
      AdicCompletion.of (J i) R x
EtaleFundamentalGroups.adicCompletionIdealCongr

Equality of ideals induces the canonical equivalence of their adic completions.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def adicCompletionIdealCongr
    {I J : Ideal R} (h : I = J) :
    AdicCompletion I R ≃+* AdicCompletion J R
EtaleFundamentalGroups.adicCompletionIdealCongr_of
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem adicCompletionIdealCongr_of
    {I J : Ideal R} (h : I = J) (x : R) :
    adicCompletionIdealCongr h (AdicCompletion.of I R x) =
      AdicCompletion.of J R x
EtaleFundamentalGroups.integralExtensionPrimesOverFintype
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def integralExtensionPrimesOverFintype
    {A : Type*} [CommRing A] [IsDomain A]
    {B : Type*} [CommRing B] [IsDedekindDomain B]
    [Algebra A B] [Algebra.IsIntegral A B] [Module.Finite A B]
    (p : Ideal A) : Fintype (p.primesOver B)
EtaleFundamentalGroups.integralExtensionPrimePowerFamily

The prime-power ideals occurring in the factorization of an extended maximal ideal.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def integralExtensionPrimePowerFamily
    {A : Type*} [CommRing A] [IsDomain A]
    {B : Type*} [CommRing B] [IsDedekindDomain B]
    [Algebra A B] [Algebra.IsIntegral A B]
    (p : Ideal A) (Q : p.primesOver B) : Ideal B
EtaleFundamentalGroups.integralExtensionPrimePowerFamily_apply
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem integralExtensionPrimePowerFamily_apply
    {A : Type*} [CommRing A] [IsDomain A]
    {B : Type*} [CommRing B] [IsDedekindDomain B]
    [Algebra A B] [Algebra.IsIntegral A B]
    (p : Ideal A) (Q : p.primesOver B) :
    integralExtensionPrimePowerFamily p Q =
      Q.1 ^ Q.1.ramificationIdx A
EtaleFundamentalGroups.integralExtensionPrimePowerFamily_pairwise
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem integralExtensionPrimePowerFamily_pairwise
    {A : Type*} [CommRing A] [IsDomain A]
    {B : Type*} [CommRing B] [IsDedekindDomain B]
    [Algebra A B] [Algebra.IsIntegral A B]
    (p : Ideal A) [p.IsMaximal] :
    Pairwise (IsCoprime on integralExtensionPrimePowerFamily (B := B) p)
EtaleFundamentalGroups.integralExtension_map_eq_prod_primePowerFamily
Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem integralExtension_map_eq_prod_primePowerFamily
    {A : Type*} [CommRing A] [IsDomain A]
    {B : Type*} [CommRing B] [IsDedekindDomain B]
    [Algebra A B] [Algebra.IsIntegral A B] [Module.IsTorsionFree A B]
    [Module.Finite A B]
    (p : Ideal A) [p.IsMaximal] (hp : p ≠ ⊥) :
    letI : Fintype (p.primesOver B) :=
      integralExtensionPrimesOverFintype p
    p.map (algebraMap A B) =
      ∏ Q, integralExtensionPrimePowerFamily (B := B) p Q := by
  let : Fintype (p.primesOver B) :=
    integralExtensionPrimesOverFintype p
  rw [Ideal.map_algebraMap_eq_finsetProd_pow hp]
  simpa [integralExtensionPrimePowerFamily] using
    (Finset.prod_set_coe (s := p.primesOver B)
      (f := fun P => P ^ P.ramificationIdx A)).symm
EtaleFundamentalGroups.adicCompletionIntegralExtensionEquivPi

For a finite integral extension of a Dedekind domain, completion along the extension of a nonzero maximal ideal splits over the primes above it. The factor at Q is completed along Q to its ramification index; replacing this power-adic completion by the Q-adic completion is the remaining cofinality step.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
def adicCompletionIntegralExtensionEquivPi
    {A : Type*} [CommRing A] [IsDomain A]
    {B : Type*} [CommRing B] [IsDedekindDomain B]
    [Algebra A B] [Algebra.IsIntegral A B] [Module.IsTorsionFree A B]
    [Module.Finite A B] (p : Ideal A) [p.IsMaximal] (hp : p ≠ ⊥) :
    AdicCompletion (p.map (algebraMap A B)) B ≃+*
      ∀ Q : p.primesOver B,
        AdicCompletion (Q.1 ^ Q.1.ramificationIdx A) B
EtaleFundamentalGroups.adicCompletionIntegralExtensionEquivPi_of

The integral-extension decomposition sends the canonical completion image of an element to its canonical image in every prime-power factor.

Source context 6 commands

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

noncomputable section
namespace EtaleFundamentalGroups
universe uR uI
open Function
variable {R : Type uR} [CommRing R]
variable {ι : Type uI} [Fintype ι]
theorem adicCompletionIntegralExtensionEquivPi_of
    {A : Type*} [CommRing A] [IsDomain A]
    {B : Type*} [CommRing B] [IsDedekindDomain B]
    [Algebra A B] [Algebra.IsIntegral A B] [Module.IsTorsionFree A B]
    [Module.Finite A B] (p : Ideal A) [p.IsMaximal] (hp : p ≠ ⊥)
    (x : B) (Q : p.primesOver B) :
    adicCompletionIntegralExtensionEquivPi p hp
        (AdicCompletion.of (p.map (algebraMap A B)) B x) Q =
      AdicCompletion.of (Q.1 ^ Q.1.ramificationIdx A) B x