Definitions/Def_InvariantsCompletion.lean
Invariants of adic completions along a finite group action
Throughout, A and B are commutative rings, B an A-algebra, and G a group acting on B by ring automorphisms that commute with the A-action; \mathfrak p is an ideal of A, maximal where needed. A first group of lemmas compares the two descriptions of the fibre over \mathfrak p: for a prime Q of B, containing \mathfrak p B=\mathfrak p\cdot{}map (algebraMap A B) is equivalent to lying over \mathfrak p, and under G-invariance of A in B with G finite such a Q is maximal; isMaximal_and_map_le_iff identifies the index set \{Q : Q maximal, \mathfrak pB\le Q\} used for the semilocal decomposition with π.primesOver B, and exists_smul_eq_of_liesOver records transitivity of G on that set.
The first definition, transportOf A B G g h for g\in G and h : g\cdot\mathfrak P\le Q, is the A-algebra map from the \mathfrak P-adic completion of B to the Q-adic completion obtained by functoriality (mapβ) from the A-algebra automorphism b\mapsto g\cdot b of B; it sends \mathrm{of}(b) to \mathrm{of}(g\cdot b), and on an element fixed by \mathrm{Stab}_G(\mathfrak P) it does not depend on which g with g\cdot\mathfrak P=Q is chosen (transportOf_eq_of_fixed).
In the remaining part A is Noetherian, B is module-finite and faithful over A, G is finite with A the G-invariants of B, \mathfrak p is maximal and \mathfrak P is a prime of B over \mathfrak p. invariantsCompletionHom is the composite of the base-change map \widehat{A}_{\mathfrak p}\to\widehat{B}_{\mathfrak pB} with the semilocal component at \mathfrak P, i.e. the A-algebra map \widehat{A}_{\mathfrak p}\to\widehat{B}_{\mathfrak P} whose n-th level value on a class of a Cauchy sequence a is \mathrm{algebraMap}\,A\,B(a_n)\bmod\mathfrak P^n. Its image consists of elements fixed by the induced action of \mathrm{Stab}_G(\mathfrak P) on \widehat{B}_{\mathfrak P} through stabAut; it is injective, and every fixed element is in the image. invariantsCompletionEquiv is the resulting A-algebra isomorphism of \widehat{A}_{\mathfrak p} with FixedPoints.subalgebra A (AdicCompletion π B) (MulAction.stabilizer G π), and invariantsCompletionRingEquiv its underlying ring isomorphism. Supporting results include Noetherianness of B and Artinianness of B/\mathfrak pB, the G-stability of the index set, the identification of the base-change map with x\mapsto x\otimes 1 followed by tensorRingHom together with its injectivity, level formulas for semilocal components and transports, and mem_fixedPoints_iff, which unfolds membership in the fixed-point subalgebra to invariance under all stabAut for elements of the stabiliser.
Relation to Mathlib
Mathlib provides the adic completion AdicCompletion, the invariance predicate Algebra.IsInvariant and FixedPoints.subalgebra; the semilocal decomposition of the \mathfrak pB-adic completion, the transport maps along group elements, and the identification of \widehat{A}_{\mathfrak p} with the stabiliser-fixed points of \widehat{B}_{\mathfrak P} are the project's own.
Where it is used
This is commutative-algebra input for the parts of the argument where a completion of a ring of invariants must be recognised inside a completion of the larger ring: it identifies the \mathfrak p-adic completion of A=B^G with the subalgebra of elements of the \mathfrak P-adic completion of B fixed by the stabiliser of \mathfrak P.
References
- H. Matsumura, Commutative Ring Theory, Cambridge Studies in Advanced Mathematics 8, Cambridge University Press, 1986
- J.-P. Serre, Local Fields, Graduate Texts in Mathematics 67, Springer, 1979
- N. Bourbaki, Commutative Algebra, Chapters 1β7, Springer, 1989
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 516 lines
- 31 declarations
- used in the statements of 0 theorems and imported by 1 proofs
- imports 2 definition modules
Source file: Definitions/Def_InvariantsCompletion.lean
Imported by
- no other definition module
Declarations
- theorem
AdicCompletion.liesOver_of_isPrime_of_map_le - theorem
AdicCompletion.under_eq_of_liesOver - theorem
AdicCompletion.map_le_of_liesOver - theorem
AdicCompletion.isMaximal_of_isPrime_of_liesOver - theorem
AdicCompletion.isMaximal_and_map_le_iff - theorem
AdicCompletion.exists_smul_eq_of_liesOver - theorem
AdicCompletion.map_toAlgEquiv_le_of_smul_le - def
AdicCompletion.transportOf - theorem
AdicCompletion.evalβ_transportOf - theorem
AdicCompletion.transportOf_of - theorem
AdicCompletion.transportOf_eq_of_fixed - theorem
AdicCompletion.map_algebraMap_le_smul - theorem
AdicCompletion.semilocalComponent_selfSmul - theorem
AdicCompletion.isNoetherianRing_of_finite_algebra - theorem
AdicCompletion.isArtinianRing_quotient_map - theorem
AdicCompletion.mem_index_self - theorem
AdicCompletion.smul_mem_index - theorem
AdicCompletion.completionBaseChangeHom_eq_tensor - theorem
AdicCompletion.completionBaseChangeHom_injective - def
AdicCompletion.invariantsCompletionHom - theorem
AdicCompletion.evalβ_invariantsCompletionHom - theorem
AdicCompletion.stabAut_invariantsCompletionHom - theorem
AdicCompletion.eq_of_component_eq_of_smul_eq - theorem
AdicCompletion.transportOf_one - theorem
AdicCompletion.evalβ_component_selfSmul - theorem
AdicCompletion.evalβ_component - theorem
AdicCompletion.invariantsCompletionHom_injective - theorem
AdicCompletion.exists_invariantsCompletionHom_eq - def
AdicCompletion.invariantsCompletionEquiv - def
AdicCompletion.invariantsCompletionRingEquiv - theorem
AdicCompletion.mem_fixedPoints_iff
Source
import Definitions.Def_CompletionInvariants import Definitions.Def_SemilocalAdicCompletion universe uβ uβ uβ open Pointwise open scoped TensorProduct namespace AdicCompletion variable (A : Type uβ) (B : Type uβ) [CommRing A] [CommRing B] [Algebra A B] variable (G : Type uβ) [Group G] [MulSemiringAction G B] [SMulCommClass G A B] variable (π : Ideal A) section FibreIndex variable [π.IsMaximal] theorem liesOver_of_isPrime_of_map_le (Q : Ideal B) [hQp : Q.IsPrime] (hQ : π.map (algebraMap A B) β€ Q) : Q.LiesOver π := by constructor have h1 : π β€ Q.under A := Ideal.map_le_iff_le_comap.mp hQ have h2 : Q.under A β β€ := Ideal.comap_ne_top _ hQp.ne_top exact βΉπ.IsMaximalβΊ.eq_of_le h2 h1 omit [π.IsMaximal] in theorem under_eq_of_liesOver (Q : Ideal B) [h : Q.LiesOver π] : Q.comap (algebraMap A B) = π := by rw [β Ideal.under_def] exact (Ideal.over_def Q π).symm omit [π.IsMaximal] in theorem map_le_of_liesOver (Q : Ideal B) [Q.LiesOver π] : π.map (algebraMap A B) β€ Q := Ideal.map_le_iff_le_comap.mpr (le_of_eq (under_eq_of_liesOver A B π Q).symm) variable [Finite G] [Algebra.IsInvariant A B G] include G in omit [SMulCommClass G A B] in theorem isMaximal_of_isPrime_of_liesOver (Q : Ideal B) [Q.IsPrime] [Q.LiesOver π] : Q.IsMaximal := by haveI := Algebra.IsInvariant.isIntegral A B G refine Ideal.isMaximal_of_isIntegral_of_isMaximal_comap (R := A) Q ?_ rw [under_eq_of_liesOver A B π Q] infer_instance include G in omit [SMulCommClass G A B] in theorem isMaximal_and_map_le_iff (Q : Ideal B) : (Q.IsMaximal β§ π.map (algebraMap A B) β€ Q) β Q β π.primesOver B := by constructor Β· rintro β¨hmax, hleβ© haveI := hmax.isPrime exact β¨hmax.isPrime, liesOver_of_isPrime_of_map_le A B π Q hleβ© Β· rintro β¨hprime, hoverβ© haveI := hprime haveI := hover exact β¨isMaximal_of_isPrime_of_liesOver A B G π Q, map_le_of_liesOver A B π Qβ© omit [π.IsMaximal] in theorem exists_smul_eq_of_liesOver (Q Q' : Ideal B) [Q.IsPrime] [Q.LiesOver π] [Q'.IsPrime] [Q'.LiesOver π] : β g : G, Q' = g β’ Q := by refine Algebra.IsInvariant.exists_smul_of_under_eq A B G Q Q' ?_ rw [β Ideal.over_def Q π, β Ideal.over_def Q' π] end FibreIndex section Transport theorem map_toAlgEquiv_le_of_smul_le {π Q : Ideal B} (g : G) (h : g β’ π β€ Q) : π.map (MulSemiringAction.toAlgEquiv A B g : B ββ[A] B) β€ Q := by refine le_trans (le_of_eq ?_) h rw [Ideal.pointwise_smul_def] rfl noncomputable def transportOf (g : G) {π Q : Ideal B} (h : g β’ π β€ Q) : AdicCompletion π B ββ[A] AdicCompletion Q B := mapβ π Q (MulSemiringAction.toAlgEquiv A B g : B ββ[A] B) (map_toAlgEquiv_le_of_smul_le A B G g h) theorem evalβ_transportOf (g : G) {π Q : Ideal B} (h : g β’ π β€ Q) (n : β) (x : AdicCompletion π B) (z : B) (hz : Ideal.Quotient.mk (π ^ n) z = evalβ π n x) : evalβ Q n (transportOf A B G g h x) = Ideal.Quotient.mk (Q ^ n) (g β’ z) := by rw [transportOf, evalβ_mapβ, β hz, levelMapβ_mk] rfl @[simp] theorem transportOf_of (g : G) {π Q : Ideal B} (h : g β’ π β€ Q) (b : B) : transportOf A B G g h (of π B b) = of Q B (g β’ b) := by rw [transportOf, mapβ_of] rfl theorem transportOf_eq_of_fixed {π Q : Ideal B} (g g' : G) (hg : g β’ π = Q) (hg' : g' β’ π = Q) (y : AdicCompletion π B) (hy : β h : MulAction.stabilizer G π, stabAut A B G π h y = y) : transportOf A B G g hg.le y = transportOf A B G g' hg'.le y := by have hmem : g'β»ΒΉ * g β MulAction.stabilizer G π := by rw [MulAction.mem_stabilizer_iff, mul_smul, hg, β hg', inv_smul_smul] refine ext_evalβ fun n => ?_ obtain β¨z, hzβ© := Ideal.Quotient.mk_surjective (evalβ π n y) rw [evalβ_transportOf A B G g hg.le n y z hz, evalβ_transportOf A B G g' hg'.le n y z hz] have h1 : Ideal.Quotient.mk (π ^ n) ((g'β»ΒΉ * g) β’ z) = Ideal.Quotient.mk (π ^ n) z := by have h0 := congrArg (evalβ π n) (hy β¨g'β»ΒΉ * g, hmemβ©) rw [evalβ_stabAut A B G π _ n y z hz, β hz] at h0 exact h0 have h2 := congrArg (levelMapβ π Q (MulSemiringAction.toAlgEquiv A B g' : B ββ[A] B) (map_toAlgEquiv_le_of_smul_le A B G g' hg'.le) n) h1 rw [levelMapβ_mk, levelMapβ_mk] at h2 have h3 : Ideal.Quotient.mk (Q ^ n) (g' β’ (g'β»ΒΉ * g) β’ z) = Ideal.Quotient.mk (Q ^ n) (g' β’ z) := h2 rwa [β mul_smul, mul_inv_cancel_left] at h3 theorem map_algebraMap_le_smul {Q : Ideal B} (g : G) (hQ : π.map (algebraMap A B) β€ Q) : π.map (algebraMap A B) β€ g β’ Q := by rw [β smul_map_algebraMap A B G π g, Ideal.pointwise_smul_def, Ideal.pointwise_smul_def] exact Ideal.map_mono hQ theorem semilocalComponent_selfSmul (g : G) {Q : Ideal B} (hQ : π.map (algebraMap A B) β€ Q) (x : AdicCompletion (π.map (algebraMap A B)) B) : letI := selfCompletionMulSemiringAction A B G π semilocalComponent (π.map (algebraMap A B)) (map_algebraMap_le_smul A B G π g hQ) (g β’ x) = transportOf A B G g (le_refl (g β’ Q)) (semilocalComponent _ hQ x) := by letI := selfCompletionMulSemiringAction A B G π refine ext_evalβ fun n => ?_ obtain β¨z, hzβ© := Ideal.Quotient.mk_surjective (evalβ (π.map (algebraMap A B)) n x) have hcomp : Ideal.Quotient.mk (Q ^ n) z = evalβ Q n (semilocalComponent (π.map (algebraMap A B)) hQ x) := by rw [semilocalComponent, evalβ_mapβ, β hz, levelMapβ_mk] rfl have hsmul : Ideal.Quotient.mk ((π.map (algebraMap A B)) ^ n) (g β’ z) = evalβ (π.map (algebraMap A B)) n (g β’ x) := by rw [show (g β’ x : AdicCompletion (π.map (algebraMap A B)) B) = stabAut A B G _ (toStabilizerExtended A B G π g) x from rfl, evalβ_stabAut A B G _ _ n x z hz] rfl rw [semilocalComponent, evalβ_mapβ, β hsmul, levelMapβ_mk, evalβ_transportOf A B G g (le_refl (g β’ Q)) n (semilocalComponent (π.map (algebraMap A B)) hQ x) z hcomp] rfl end Transport end AdicCompletion section SameUniverseHead namespace AdicCompletion variable (A : Type uβ) (B : Type uβ) [CommRing A] [CommRing B] [Algebra A B] variable (G : Type uβ) [Group G] [Finite G] [MulSemiringAction G B] [SMulCommClass G A B] variable [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] variable [Algebra.IsInvariant A B G] variable (π : Ideal A) [π.IsMaximal] include A in omit [FaithfulSMul A B] in theorem isNoetherianRing_of_finite_algebra : IsNoetherianRing B := isNoetherian_of_tower A (inferInstance : IsNoetherian A B) omit [IsNoetherianRing A] [FaithfulSMul A B] in theorem isArtinianRing_quotient_map : IsArtinianRing (B β§Έ π.map (algebraMap A B)) := by letI : DivisionRing (A β§Έ π) := Ideal.Quotient.divisionRing π haveI : IsArtinianRing (A β§Έ π) := inferInstance haveI : Module.Finite A (B β§Έ π.map (algebraMap A B)) := Module.Finite.of_surjective (Ideal.Quotient.mkβ A (π.map (algebraMap A B))).toLinearMap (Ideal.Quotient.mkβ_surjective A _) haveI : IsArtinian A (B β§Έ π.map (algebraMap A B)) := by refine isArtinian_of_finite_of_smul_eq_zero π ?_ rintro i hi m obtain β¨b, rflβ© := Ideal.Quotient.mk_surjective m rw [show i β’ (Ideal.Quotient.mk (π.map (algebraMap A B)) b) = Ideal.Quotient.mk (π.map (algebraMap A B)) (i β’ b) from (map_smul (Ideal.Quotient.mkβ A (π.map (algebraMap A B))) i b).symm, Algebra.smul_def, Ideal.Quotient.eq_zero_iff_mem] exact Ideal.mul_mem_right _ _ (Ideal.mem_map_of_mem _ hi) exact isArtinian_of_tower A inferInstance variable (π : Ideal B) [π.IsPrime] [π.LiesOver π] include G in omit [SMulCommClass G A B] [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] in theorem mem_index_self : π.IsMaximal β§ π.map (algebraMap A B) β€ π := (isMaximal_and_map_le_iff A B G π π).mpr β¨inferInstance, inferInstanceβ© omit [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] in theorem smul_mem_index (g : G) {Q : Ideal B} (h : Q.IsMaximal β§ π.map (algebraMap A B) β€ Q) : (g β’ Q).IsMaximal β§ π.map (algebraMap A B) β€ g β’ Q := by haveI : Q.IsMaximal := h.1 haveI hp : (g β’ Q).IsPrime := by rw [Ideal.pointwise_smul_def] refine Ideal.map_isPrime_of_surjective (f := MulSemiringAction.toRingHom G B g) (fun b => β¨gβ»ΒΉ β’ b, smul_inv_smul g bβ©) ?_ rw [(RingHom.injective_iff_ker_eq_bot _).mp (fun x y hxy => by simpa using congrArg (fun t => gβ»ΒΉ β’ t) hxy)] exact bot_le have hle : π.map (algebraMap A B) β€ g β’ Q := map_algebraMap_le_smul A B G π g h.2 haveI : (g β’ Q).LiesOver π := liesOver_of_isPrime_of_map_le A B π (g β’ Q) hle exact β¨isMaximal_of_isPrime_of_liesOver A B G π (g β’ Q), hleβ© omit [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] [π.IsMaximal] in theorem completionBaseChangeHom_eq_tensor (x : AdicCompletion π A) : completionBaseChangeHom B π x = tensorRingHom B π (x ββ[A] 1) := by have h : of (π.map (algebraMap A B)) B (1 : B) = 1 := map_one (completionOfAlgHom B π) rw [tensorRingHom_tmul, h, mul_one] omit [π.IsMaximal] in theorem completionBaseChangeHom_injective : Function.Injective (completionBaseChangeHom B π) := by intro x y hxy rw [completionBaseChangeHom_eq_tensor, completionBaseChangeHom_eq_tensor] at hxy exact Algebra.TensorProduct.includeLeft_injective (S := A) (FaithfulSMul.algebraMap_injective A B) ((tensorRingHom_bijective B π).injective hxy) include G in noncomputable def invariantsCompletionHom : AdicCompletion π A ββ[A] AdicCompletion π B := ((semilocalComponent (π.map (algebraMap A B)) (mem_index_self A B G π π).2).restrictScalars A).comp (completionBaseChangeHom B π) include G in omit [SMulCommClass G A B] [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] in theorem evalβ_invariantsCompletionHom (a : AdicCauchySequence π A) (n : β) : evalβ π n (invariantsCompletionHom A B G π π (mk π A a)) = Ideal.Quotient.mk (π ^ n) (algebraMap A B (a.val n)) := by show evalβ π n (semilocalComponent (π.map (algebraMap A B)) (mem_index_self A B G π π).2 (completionBaseChangeHom B π (mk π A a))) = _ have hbc : Ideal.Quotient.mk ((π.map (algebraMap A B)) ^ n) (algebraMap A B (a.val n)) = evalβ (π.map (algebraMap A B)) n (completionBaseChangeHom B π (mk π A a)) := by simp [completionBaseChangeHom, Algebra.ofId_apply] rw [semilocalComponent, evalβ_mapβ, β hbc, levelMapβ_mk] rfl omit [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] in theorem stabAut_invariantsCompletionHom (h : MulAction.stabilizer G π) (x : AdicCompletion π A) : stabAut A B G π h (invariantsCompletionHom A B G π π x) = invariantsCompletionHom A B G π π x := by induction x using AdicCompletion.induction_on with | _ a => refine ext_evalβ fun n => ?_ rw [evalβ_stabAut A B G π h n _ _ (evalβ_invariantsCompletionHom A B G π π a n).symm, smul_algebraMap, evalβ_invariantsCompletionHom] omit [FaithfulSMul A B] in theorem eq_of_component_eq_of_smul_eq (w w' : AdicCompletion (π.map (algebraMap A B)) B) (hw : β g : G, stabAut A B G _ (toStabilizerExtended A B G π g) w = w) (hw' : β g : G, stabAut A B G _ (toStabilizerExtended A B G π g) w' = w') (hπ : semilocalComponent (π.map (algebraMap A B)) (mem_index_self A B G π π).2 w = semilocalComponent (π.map (algebraMap A B)) (mem_index_self A B G π π).2 w') : w = w' := by haveI := isNoetherianRing_of_finite_algebra A B haveI := isArtinianRing_quotient_map A B π apply semilocalPiHom_injective (π.map (algebraMap A B)) funext P obtain β¨Q, hQβ© := P haveI : Q.IsPrime := hQ.1.isPrime haveI : Q.LiesOver π := liesOver_of_isPrime_of_map_le A B π Q hQ.2 obtain β¨g, hgβ© := exists_smul_eq_of_liesOver A B G π π Q subst hg show semilocalComponent _ hQ.2 w = semilocalComponent _ hQ.2 w' calc semilocalComponent _ hQ.2 w = semilocalComponent _ hQ.2 (stabAut A B G _ (toStabilizerExtended A B G π g) w) := by rw [hw g] _ = transportOf A B G g (le_refl (g β’ π)) (semilocalComponent _ (mem_index_self A B G π π).2 w) := semilocalComponent_selfSmul A B G π g (mem_index_self A B G π π).2 w _ = transportOf A B G g (le_refl (g β’ π)) (semilocalComponent _ (mem_index_self A B G π π).2 w') := by rw [hπ] _ = semilocalComponent _ hQ.2 (stabAut A B G _ (toStabilizerExtended A B G π g) w') := (semilocalComponent_selfSmul A B G π g (mem_index_self A B G π π).2 w').symm _ = semilocalComponent _ hQ.2 w' := by rw [hw' g] omit [Finite G] [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] [Algebra.IsInvariant A B G] in theorem transportOf_one (J : Ideal B) (y : AdicCompletion J B) : transportOf A B G 1 ((one_smul G J).le) y = y := by refine ext_evalβ fun n => ?_ obtain β¨z, hzβ© := Ideal.Quotient.mk_surjective (evalβ J n y) rw [evalβ_transportOf A B G 1 ((one_smul G J).le) n y z hz, one_smul, hz] omit [Finite G] [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] [Algebra.IsInvariant A B G] [π.IsMaximal] in theorem evalβ_component_selfSmul (g : G) {Q : Ideal B} (hQ : π.map (algebraMap A B) β€ Q) (x : AdicCompletion (π.map (algebraMap A B)) B) (n : β) (z : B) (hz : Ideal.Quotient.mk ((π.map (algebraMap A B)) ^ n) z = evalβ (π.map (algebraMap A B)) n x) : evalβ Q n (semilocalComponent (π.map (algebraMap A B)) hQ (stabAut A B G _ (toStabilizerExtended A B G π g) x)) = Ideal.Quotient.mk (Q ^ n) (g β’ z) := by have hsmul : Ideal.Quotient.mk ((π.map (algebraMap A B)) ^ n) (g β’ z) = evalβ (π.map (algebraMap A B)) n (stabAut A B G _ (toStabilizerExtended A B G π g) x) := by rw [evalβ_stabAut A B G _ _ n x z hz] rfl rw [semilocalComponent, evalβ_mapβ, β hsmul, levelMapβ_mk] rfl omit [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] [π.IsMaximal] in theorem evalβ_component {Q : Ideal B} (hQ : π.map (algebraMap A B) β€ Q) (x : AdicCompletion (π.map (algebraMap A B)) B) (n : β) (z : B) (hz : Ideal.Quotient.mk ((π.map (algebraMap A B)) ^ n) z = evalβ (π.map (algebraMap A B)) n x) : evalβ Q n (semilocalComponent (π.map (algebraMap A B)) hQ x) = Ideal.Quotient.mk (Q ^ n) z := by rw [semilocalComponent, evalβ_mapβ, β hz, levelMapβ_mk] rfl include G in theorem invariantsCompletionHom_injective : Function.Injective (invariantsCompletionHom A B G π π) := by intro x y hxy refine completionBaseChangeHom_injective A B π ?_ refine eq_of_component_eq_of_smul_eq A B G π π _ _ (fun g => selfCompletion_smul_completionBaseChangeHom A B G π g x) (fun g => selfCompletion_smul_completionBaseChangeHom A B G π g y) hxy omit [FaithfulSMul A B] in theorem exists_invariantsCompletionHom_eq (y : AdicCompletion π B) (hy : β h : MulAction.stabilizer G π, stabAut A B G π h y = y) : β x : AdicCompletion π A, invariantsCompletionHom A B G π π x = y := by haveI := isNoetherianRing_of_finite_algebra A B haveI := isArtinianRing_quotient_map A B π have hch : β P : {Q : Ideal B // Q.IsMaximal β§ π.map (algebraMap A B) β€ Q}, β g : G, (P : Ideal B) = g β’ π := by rintro β¨Q, hQβ© haveI : Q.IsPrime := hQ.1.isPrime haveI : Q.LiesOver π := liesOver_of_isPrime_of_map_le A B π Q hQ.2 exact exists_smul_eq_of_liesOver A B G π π Q choose gO hgO using hch set w : AdicCompletion (π.map (algebraMap A B)) B := (semilocalPiEquiv (π.map (algebraMap A B))).symm (fun P => transportOf A B G (gO P) (hgO P).ge y) with hw have hwF : β P : {Q : Ideal B // Q.IsMaximal β§ π.map (algebraMap A B) β€ Q}, semilocalComponent (π.map (algebraMap A B)) P.2.2 w = transportOf A B G (gO P) (hgO P).ge y := fun P => congrFun ((semilocalPiEquiv (π.map (algebraMap A B))).apply_symm_apply _) P have hwfix : β g : G, stabAut A B G _ (toStabilizerExtended A B G π g) w = w := by intro g apply semilocalPiHom_injective (π.map (algebraMap A B)) funext P show semilocalComponent _ P.2.2 _ = semilocalComponent _ P.2.2 w rw [hwF P] refine ext_evalβ fun n => ?_ obtain β¨z, hzβ© := Ideal.Quotient.mk_surjective (evalβ (π.map (algebraMap A B)) n w) obtain β¨u, huβ© := Ideal.Quotient.mk_surjective (evalβ π n y) set P' : {Q : Ideal B // Q.IsMaximal β§ π.map (algebraMap A B) β€ Q} := β¨gβ»ΒΉ β’ (P : Ideal B), smul_mem_index A B G π gβ»ΒΉ P.2β© with hP' have h1 : Ideal.Quotient.mk ((gβ»ΒΉ β’ (P : Ideal B)) ^ n) z = Ideal.Quotient.mk ((gβ»ΒΉ β’ (P : Ideal B)) ^ n) (gO P' β’ u) := by have hc := congrArg (evalβ (gβ»ΒΉ β’ (P : Ideal B)) n) (hwF P') rw [evalβ_component A B π P'.2.2 w n z hz] at hc exact hc.trans (evalβ_transportOf A B G (gO P') (hgO P').ge n y u hu) have h2 := congrArg (levelMapβ (gβ»ΒΉ β’ (P : Ideal B)) (P : Ideal B) (MulSemiringAction.toAlgEquiv A B g : B ββ[A] B) (map_toAlgEquiv_le_of_smul_le A B G g (smul_inv_smul g (P : Ideal B)).le) n) h1 rw [levelMapβ_mk, levelMapβ_mk] at h2 have h3 : Ideal.Quotient.mk ((P : Ideal B) ^ n) (g β’ z) = Ideal.Quotient.mk ((P : Ideal B) ^ n) (g β’ gO P' β’ u) := h2 have hco : transportOf A B G (g * gO P') (show (g * gO P') β’ π = (P : Ideal B) from by rw [mul_smul, β (hgO P'), smul_inv_smul]).le y = transportOf A B G (gO P) ((hgO P).symm).le y := transportOf_eq_of_fixed A B G (g * gO P') (gO P) (by rw [mul_smul, β (hgO P'), smul_inv_smul]) (hgO P).symm y hy have h4 := congrArg (evalβ (P : Ideal B) n) hco rw [evalβ_transportOf A B G (g * gO P') _ n y u hu, evalβ_transportOf A B G (gO P) _ n y u hu, mul_smul] at h4 rw [evalβ_component_selfSmul A B G π g P.2.2 w n z hz, evalβ_transportOf A B G (gO P) (hgO P).ge n y u hu] exact h3.trans h4 set z' : AdicCompletion π A β[A] B := (tensorRingEquiv B π).symm w with hz' have hz'fix : β g : G, (letI := Algebra.TensorProduct.rightMulSemiringAction A (AdicCompletion π A) B G g β’ z') = z' := by intro g letI := Algebra.TensorProduct.rightMulSemiringAction A (AdicCompletion π A) B G refine (tensorRingHom_bijective B π).injective ?_ have he := tensorRingHom_equivariant A B G π g z' rw [he, show tensorRingHom B π z' = w from (tensorRingEquiv B π).apply_symm_apply w] exact hwfix g haveI := Algebra.IsInvariant.isInvariant_tensorProduct_of_flat A (AdicCompletion π A) B G obtain β¨x, hxβ© := Algebra.IsInvariant.isInvariant (A := AdicCompletion π A) (B := (AdicCompletion π A) β[A] B) (G := G) z' hz'fix refine β¨x, ?_β© have hbc : completionBaseChangeHom B π x = w := by rw [completionBaseChangeHom_eq_tensor, show (x ββ[A] (1 : B)) = z' from hx, show tensorRingHom B π z' = w from (tensorRingEquiv B π).apply_symm_apply w] show semilocalComponent _ (mem_index_self A B G π π).2 (completionBaseChangeHom B π x) = y rw [hbc, hwF β¨π, mem_index_self A B G π πβ©] exact (transportOf_eq_of_fixed A B G (gO β¨π, mem_index_self A B G π πβ©) 1 (hgO β¨π, mem_index_self A B G π πβ©).symm (one_smul G π) y hy).trans (transportOf_one A B G π y) noncomputable def invariantsCompletionEquiv : letI := stabilizerMulSemiringAction A B G π haveI := stabilizer_smulCommClass A B G π AdicCompletion π A ββ[A] FixedPoints.subalgebra A (AdicCompletion π B) (MulAction.stabilizer G π) := by letI := stabilizerMulSemiringAction A B G π haveI := stabilizer_smulCommClass A B G π refine AlgEquiv.ofBijective ((invariantsCompletionHom A B G π π).codRestrict (FixedPoints.subalgebra A (AdicCompletion π B) (MulAction.stabilizer G π)) fun x h => stabAut_invariantsCompletionHom A B G π π h x) β¨?_, ?_β© Β· intro x y hxy exact invariantsCompletionHom_injective A B G π π (congrArg Subtype.val hxy) Β· rintro β¨y, hyβ© obtain β¨x, hxβ© := exists_invariantsCompletionHom_eq A B G π π y hy exact β¨x, Subtype.ext hxβ© include G in noncomputable def invariantsCompletionRingEquiv : letI := stabilizerMulSemiringAction A B G π haveI := stabilizer_smulCommClass A B G π AdicCompletion π A β+* FixedPoints.subalgebra A (AdicCompletion π B) (MulAction.stabilizer G π) := (invariantsCompletionEquiv A B G π π).toRingEquiv include G in omit [Finite G] [IsNoetherianRing A] [Module.Finite A B] [FaithfulSMul A B] [Algebra.IsInvariant A B G] [π.IsPrime] in theorem mem_fixedPoints_iff (x : AdicCompletion π B) : (letI := stabilizerMulSemiringAction A B G π haveI := stabilizer_smulCommClass A B G π x β FixedPoints.subalgebra A (AdicCompletion π B) (MulAction.stabilizer G π)) β β h : MulAction.stabilizer G π, stabAut A B G π h x = x := Iff.rfl end AdicCompletion end SameUniverseHead set_option pp.universes true in #check @AdicCompletion.transportOf set_option pp.universes true in #check @AdicCompletion.transportOf_eq_of_fixed #print axioms AdicCompletion.liesOver_of_isPrime_of_map_le #print axioms AdicCompletion.isMaximal_of_isPrime_of_liesOver #print axioms AdicCompletion.isMaximal_and_map_le_iff #print axioms AdicCompletion.exists_smul_eq_of_liesOver #print axioms AdicCompletion.map_toAlgEquiv_le_of_smul_le #print axioms AdicCompletion.transportOf #print axioms AdicCompletion.evalβ_transportOf #print axioms AdicCompletion.transportOf_of #print axioms AdicCompletion.transportOf_eq_of_fixed #print axioms AdicCompletion.map_algebraMap_le_smul #print axioms AdicCompletion.semilocalComponent_selfSmul set_option pp.universes true in #check @AdicCompletion.invariantsCompletionEquiv set_option pp.universes true in #check @AdicCompletion.invariantsCompletionHom #print axioms AdicCompletion.isNoetherianRing_of_finite_algebra #print axioms AdicCompletion.isArtinianRing_quotient_map #print axioms AdicCompletion.mem_index_self #print axioms AdicCompletion.smul_mem_index #print axioms AdicCompletion.completionBaseChangeHom_eq_tensor #print axioms AdicCompletion.completionBaseChangeHom_injective #print axioms AdicCompletion.invariantsCompletionHom #print axioms AdicCompletion.evalβ_invariantsCompletionHom #print axioms AdicCompletion.stabAut_invariantsCompletionHom #print axioms AdicCompletion.eq_of_component_eq_of_smul_eq #print axioms AdicCompletion.transportOf_one #print axioms AdicCompletion.evalβ_component_selfSmul #print axioms AdicCompletion.evalβ_component #print axioms AdicCompletion.invariantsCompletionHom_injective #print axioms AdicCompletion.exists_invariantsCompletionHom_eq #print axioms AdicCompletion.invariantsCompletionEquiv #print axioms AdicCompletion.invariantsCompletionRingEquiv #print axioms AdicCompletion.mem_fixedPoints_iff
Statements phrased using this module (0)
No statement module imports it directly (it is used through other definition modules or by proofs).