Definitions/Def_AdicCompletionTensorRing.lean
Adic completion of a finite algebra as a base change
Throughout, A is a commutative ring, B a commutative A-algebra and \mathfrak p an ideal of A; write \mathfrak p B = \mathfrak p \cdot B for the ideal π.map (algebraMap A B). Three maps are defined. completionBaseChangeHom is the A-algebra homomorphism \widehat{A}_{\mathfrak p} \to \widehat{B}_{\mathfrak p B} obtained from the functoriality mapβ of adic completions applied to the structure morphism A \to B (the required inclusion \mathfrak p \cdot B \le \mathfrak p B being an equality); it sends the image of x \in A to the image of \mathrm{algebraMap}(x). completionOfAlgHom is the canonical A-algebra homomorphism B \to \widehat{B}_{\mathfrak p B}, i.e. of viewed as an A-algebra map. tensorRingHom is the A-algebra homomorphism
\widehat{A}_{\mathfrak p} \otimes_A B \longrightarrow \widehat{B}_{\mathfrak p B}
obtained as the product map of the previous two, so that x \otimes b is sent to the product of the image of x with the image of b.
Two compatibility statements identify this with the linear comparison map of Mathlib: tensorRingHom_tmul_eq_symm_smul computes x \otimes b as the inverse of the restriction-of-scalars identification restrictScalarsEquiv applied to x \cdot \mathrm{of}(b), and restrictScalarsEquiv_tensorRingHom states that tensorRingHom followed by restrictScalarsEquiv B π equals ofTensorProduct π B, the A-linear map from \widehat{A}_{\mathfrak p} \otimes_A B to the \mathfrak p-adic completion of B as an A-module. In the final section A and B lie in the same universe; assuming A Noetherian and B finite as an A-module, tensorRingHom_bijective deduces bijectivity from the corresponding linear statement, and tensorRingEquiv packages this as an A-algebra isomorphism \widehat{A}_{\mathfrak p} \otimes_A B \cong \widehat{B}_{\mathfrak p B}, again sending x \otimes b to the product of the image of x and the image of b.
Relation to Mathlib
Mathlib provides the A-linear comparison map AdicCompletion.ofTensorProduct and its bijectivity for finite modules over a Noetherian ring; this module promotes that result to an isomorphism of A-algebras onto the \mathfrak p B-adic completion of the ring B, using the project's algebra-level functoriality mapβ and the restriction-of-scalars identification of the two completions of B.
Where it is used
This is part of the completion toolkit used when completions of Noetherian rings and of their finite algebras have to be compared, for instance in presenting completed local rings by power series.
References
- M. F. Atiyah and I. G. Macdonald, Introduction to Commutative Algebra, Addison-Wesley, 1969, Chapter 10
- H. Matsumura, Commutative Ring Theory, Cambridge Studies in Advanced Mathematics 8, Cambridge University Press, 1986, Chapter 8
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 130 lines
- 11 declarations
- used in the statements of 0 theorems and imported by 8 proofs
- imports 2 definition modules
Source file: Definitions/Def_AdicCompletionTensorRing.lean
Imported by
Declarations
- def
AdicCompletion.completionBaseChangeHom - theorem
AdicCompletion.completionBaseChangeHom_of - def
AdicCompletion.completionOfAlgHom - theorem
AdicCompletion.completionOfAlgHom_apply - def
AdicCompletion.tensorRingHom - theorem
AdicCompletion.tensorRingHom_tmul - theorem
AdicCompletion.tensorRingHom_tmul_eq_symm_smul - theorem
AdicCompletion.restrictScalarsEquiv_tensorRingHom - theorem
AdicCompletion.tensorRingHom_bijective - def
AdicCompletion.tensorRingEquiv - theorem
AdicCompletion.tensorRingEquiv_tmul
Source
import Mathlib.RingTheory.AdicCompletion.AsTensorProduct β import Definitions.Def_AdicCompletionRingFunctoriality import Definitions.Def_AdicCompletionRestrictScalars universe uβ uβ open scoped TensorProduct namespace AdicCompletion variable {A : Type uβ} [CommRing A] (B : Type uβ) [CommRing B] [Algebra A B] (π : Ideal A) noncomputable def completionBaseChangeHom : AdicCompletion π A ββ[A] AdicCompletion (π.map (algebraMap A B)) B := mapβ π (π.map (algebraMap A B)) (Algebra.ofId A B) (le_of_eq (rfl : π.map (Algebra.ofId A B) = π.map (algebraMap A B))) @[simp] theorem completionBaseChangeHom_of (x : A) : completionBaseChangeHom B π (of π A x) = of (π.map (algebraMap A B)) B (algebraMap A B x) := by simp [completionBaseChangeHom, Algebra.ofId_apply] noncomputable def completionOfAlgHom : B ββ[A] AdicCompletion (π.map (algebraMap A B)) B := IsScalarTower.toAlgHom A B _ @[simp] theorem completionOfAlgHom_apply (b : B) : completionOfAlgHom B π b = of (π.map (algebraMap A B)) B b := rfl noncomputable def tensorRingHom : (AdicCompletion π A) β[A] B ββ[A] AdicCompletion (π.map (algebraMap A B)) B := Algebra.TensorProduct.productMap (completionBaseChangeHom B π) (completionOfAlgHom B π) @[simp] theorem tensorRingHom_tmul (x : AdicCompletion π A) (b : B) : tensorRingHom B π (x ββ[A] b) = completionBaseChangeHom B π x * of (π.map (algebraMap A B)) B b := by simp [tensorRingHom] theorem tensorRingHom_tmul_eq_symm_smul (x : AdicCompletion π A) (b : B) : tensorRingHom B π (x ββ[A] b) = (restrictScalarsEquiv B π).symm (x β’ of π B b) := by induction x using AdicCompletion.induction_on with | _ a => refine ext_evalβ fun n => ?_ rw [tensorRingHom_tmul, map_mul] simp only [completionBaseChangeHom, evalβ_mapβ, evalβ_mk, levelMapβ_mk, Algebra.ofId_apply, evalβ_of] have hval : (mk π A a β’ of π B b).val n = Submodule.Quotient.mk (a.val n β’ b) := by rw [smul_eval] show Ideal.Quotient.mk (π ^ n β’ β€ : Ideal A) (a.val n) β’ Submodule.Quotient.mk (p := (π ^ n β’ β€ : Submodule A B)) b = _ rw [mk_smul_mk, β Submodule.Quotient.mk_smul] have hsymmval : ((restrictScalarsEquiv B π).symm (mk π A a β’ of π B b)).val n = Submodule.Quotient.mk (p := ((π.map (algebraMap A B)) ^ n β’ β€ : Submodule B B)) (a.val n β’ b) := by show (levelRestrictScalarsEquiv B π n).symm ((mk π A a β’ of π B b).val n) = _ rw [hval, LinearEquiv.symm_apply_eq, levelRestrictScalarsEquiv_mk] rw [β factor_eval_eq_evalβ _ _ (le_of_eq (by ext x; simp)), show eval (π.map (algebraMap A B)) B n ((restrictScalarsEquiv B π).symm (mk π A a β’ of π B b)) = ((restrictScalarsEquiv B π).symm (mk π A a β’ of π B b)).val n from rfl, hsymmval, show Submodule.Quotient.mk (p := ((π.map (algebraMap A B)) ^ n β’ β€ : Submodule B B)) (a.val n β’ b) = Submodule.mkQ ((π.map (algebraMap A B)) ^ n β’ β€ : Submodule B B) (a.val n β’ b) from rfl, Submodule.factor_mk, β map_mul, Algebra.smul_def] rfl theorem restrictScalarsEquiv_tensorRingHom (z : AdicCompletion π A β[A] B) : restrictScalarsEquiv B π (tensorRingHom B π z) = ofTensorProduct π B z := by induction z using TensorProduct.induction_on with | zero => simp | tmul x b => rw [tensorRingHom_tmul_eq_symm_smul, LinearEquiv.apply_symm_apply, ofTensorProduct_tmul] | add u v hu hv => simp [map_add, hu, hv] end AdicCompletion section SameUniverse namespace AdicCompletion variable {A : Type uβ} [CommRing A] (B : Type uβ) [CommRing B] [Algebra A B] (π : Ideal A) theorem tensorRingHom_bijective [IsNoetherianRing A] [Module.Finite A B] : Function.Bijective (tensorRingHom B π) := by have hfun : β(tensorRingHom B π) = β(restrictScalarsEquiv B π).symm β β(ofTensorProduct π B) := by funext z rw [Function.comp_apply, β restrictScalarsEquiv_tensorRingHom B π z, LinearEquiv.symm_apply_apply] rw [hfun] exact (restrictScalarsEquiv B π).symm.bijective.comp (ofTensorProduct_bijective_of_finite_of_isNoetherian π B) noncomputable def tensorRingEquiv [IsNoetherianRing A] [Module.Finite A B] : (AdicCompletion π A β[A] B) ββ[A] AdicCompletion (π.map (algebraMap A B)) B := AlgEquiv.ofBijective (tensorRingHom B π) (tensorRingHom_bijective B π) @[simp] theorem tensorRingEquiv_tmul [IsNoetherianRing A] [Module.Finite A B] (x : AdicCompletion π A) (b : B) : tensorRingEquiv B π (x ββ[A] b) = completionBaseChangeHom B π x * of (π.map (algebraMap A B)) B b := tensorRingHom_tmul B π x b end AdicCompletion end SameUniverse set_option pp.universes true in #check @AdicCompletion.tensorRingEquiv #print axioms AdicCompletion.completionBaseChangeHom #print axioms AdicCompletion.completionBaseChangeHom_of #print axioms AdicCompletion.tensorRingHom #print axioms AdicCompletion.tensorRingHom_tmul #print axioms AdicCompletion.tensorRingHom_tmul_eq_symm_smul #print axioms AdicCompletion.restrictScalarsEquiv_tensorRingHom #print axioms AdicCompletion.tensorRingHom_bijective #print axioms AdicCompletion.tensorRingEquiv #print axioms AdicCompletion.tensorRingEquiv_tmul
Statements phrased using this module (0)
No statement module imports it directly (it is used through other definition modules or by proofs).