Definitions/Def_PDivisibleGroup_BaseChange.lean
Base change of p-divisible groups in the Hopf-algebra model
Throughout, R is a commutative ring, S a commutative R-algebra, and A a commutative R-bialgebra; G is a PDivisibleGroup R p h, i.e. a tower of finite free cocommutative Hopf R-algebras G.level v of rank p^{vh} together with surjective bialgebra maps G.transition v : G.level (v+1) →ₐc[R] G.level v whose kernels are the ideals Hopf.torsionIdeal R (G.level (v+1)) (p ^ v), the image of the augmentation ideal \ker\varepsilon under the n-fold convolution power Hopf.nsmulAlgHom of the identity (the comorphism of multiplication by n).
The first group of results identifies these data after tensoring. On S\otimes_R A one has nsmulAlgHom S (S ⊗[R] A) n (s ⊗ₜ a) = s ⊗ₜ nsmulAlgHom R A n a, hence nsmulAlgHom S (S ⊗[R] A) n is \mathrm{id}_S\otimes[n]^{*}; the counit over S is \mathrm{id}_S\otimes\varepsilon followed by the canonical isomorphism S\otimes_R S\cong S; and both the augmentation ideal and the n-torsion ideal of S\otimes_R A are the ideals generated by those of A under Algebra.TensorProduct.includeRight. Likewise the kernel of \mathrm{id}_S\otimes G.transition v is generated by \ker(G.transition v).
With these, PDivisibleGroup.baseChange is defined, for S nontrivial: the p-divisible group over S of the same height with levels S\otimes_R G.level v and transitions \mathrm{id}_S\otimes G.transition v; surjectivity is preserved, the rank axiom follows from invariance of the rank of a free module under base change (nontriviality of S forcing R nontrivial), and the kernel axiom from the ideal computations. Equations for levels and transitions are recorded.
Finally, cotangentToBaseChange is the R-linear map on I/I^2 induced by includeRight, sending the class of x to that of 1\otimes x, and cotangentBaseChange is its S-linear extension S\otimes_R G.Cotangent v \to \mathrm{Cotangent} of the augmentation ideal of S\otimes_R G.level v; no bijectivity is asserted here.
Relation to Mathlib
Mathlib has no notion of p-divisible group; the structure PDivisibleGroup and the convolution power Hopf.nsmulAlgHom are the project's own, built on Mathlib's Bialgebra/HopfAlgebra, WithConv, Algebra.TensorProduct and Ideal.Cotangent/Ideal.mapCotangent.
Where it is used
These constructions allow a p-divisible group over a ring to be transported along scalar extensions, for instance from a local ring to its residue field or to a completion, which is how the local theory at p is reduced to simpler base rings in the analysis of the deformation conditions entering the modularity lifting argument.
References
- J. Tate, p-divisible groups, in: Proceedings of a Conference on Local Fields (Driebergen, 1966), Springer, 1967, 158–183
- W. Messing, The Crystals Associated to Barsotti–Tate Groups, Lecture Notes in Mathematics 264, Springer, 1972
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 192 lines
- 17 declarations
- used in the statements of 18 theorems and imported by 25 proofs
- imports 1 definition modules
Source file: Definitions/Def_PDivisibleGroup_BaseChange.lean
Imported by
- no other definition module
Declarations
- theorem
PDivisibleGroup.Hopf.nsmulAlgHom_baseChange_tmul - theorem
PDivisibleGroup.Hopf.nsmulAlgHom_baseChange - theorem
PDivisibleGroup.Hopf.counit_baseChange_eq - theorem
PDivisibleGroup.Hopf.augIdeal_baseChange - theorem
PDivisibleGroup.Hopf.torsionIdeal_baseChange - theorem
PDivisibleGroup.ker_map_transition - def
PDivisibleGroup.baseChange - theorem
PDivisibleGroup.baseChange_level - theorem
PDivisibleGroup.baseChange_transition - theorem
PDivisibleGroup.baseChange_transition_tmul - theorem
PDivisibleGroup.augIdeal_baseChange - theorem
PDivisibleGroup.augIdeal_le_comap_includeRight - theorem
PDivisibleGroup.baseChange_cotangent_eq - def
PDivisibleGroup.cotangentToBaseChange - theorem
PDivisibleGroup.cotangentToBaseChange_toCotangent - def
PDivisibleGroup.cotangentBaseChange - theorem
PDivisibleGroup.cotangentBaseChange_tmul
Source
import Mathlib import Definitions.Def_PDivisibleGroup_Dimension set_option autoImplicit false noncomputable section open scoped TensorProduct open Coalgebra Bialgebra WithConv universe u v w namespace PDivisibleGroup.Hopf section BaseChange variable (R : Type u) [CommRing R] (S : Type w) [CommRing S] [Algebra R S] (A : Type v) [CommRing A] [Bialgebra R A] theorem nsmulAlgHom_baseChange_tmul (n : ℕ) (s : S) (a : A) : nsmulAlgHom S (S ⊗[R] A) n (s ⊗ₜ[R] a) = s ⊗ₜ[R] nsmulAlgHom R A n a := by induction n generalizing s a with | zero => rw [nsmulAlgHom_zero_apply, nsmulAlgHom_zero_apply, TensorProduct.counit_tmul, CommSemiring.counit_apply, Algebra.TensorProduct.algebraMap_apply, Algebra.algebraMap_self, RingHom.id_apply, Algebra.algebraMap_eq_smul_one] rw [TensorProduct.smul_tmul] | succ n ih => rw [nsmulAlgHom_succ, nsmulAlgHom_succ] change (toConv (nsmulAlgHom S (S ⊗[R] A) n) * toConv (AlgHom.id S (S ⊗[R] A))) (s ⊗ₜ[R] a) = s ⊗ₜ[R] (toConv (nsmulAlgHom R A n) * toConv (AlgHom.id R A)) a rw [AlgHom.convMul_apply, AlgHom.convMul_apply, TensorProduct.comul_tmul, CommSemiring.comul_apply] obtain ⟨ι, t, f, g, hrep⟩ := (⟨_, _, _, _, (Coalgebra.Repr.arbitrary R a).eq⟩ : ∃ (ι : Type v) (t : Finset ι) (f g : ι → A), ∑ i ∈ t, f i ⊗ₜ[R] g i = comul (R := R) a) rw [← hrep, TensorProduct.tmul_sum, map_sum, map_sum, map_sum, TensorProduct.tmul_sum] refine Finset.sum_congr rfl fun i _ => ?_ rw [TensorProduct.AlgebraTensorModule.tensorTensorTensorComm_tmul, Algebra.TensorProduct.lift_tmul, Algebra.TensorProduct.lift_tmul] change nsmulAlgHom S (S ⊗[R] A) n ((1 : S) ⊗ₜ[R] f i) * (s ⊗ₜ[R] g i) = s ⊗ₜ[R] (nsmulAlgHom R A n (f i) * g i) rw [ih, Algebra.TensorProduct.tmul_mul_tmul, one_mul] theorem nsmulAlgHom_baseChange (n : ℕ) : nsmulAlgHom S (S ⊗[R] A) n = Algebra.TensorProduct.map (AlgHom.id S S) (nsmulAlgHom R A n) := by ext a change nsmulAlgHom S (S ⊗[R] A) n ((1 : S) ⊗ₜ[R] a) = (1 : S) ⊗ₜ[R] nsmulAlgHom R A n a exact nsmulAlgHom_baseChange_tmul R S A n 1 a theorem counit_baseChange_eq (x : S ⊗[R] A) : counit (R := S) x = Algebra.TensorProduct.rid R S S (Algebra.TensorProduct.map (AlgHom.id S S) (counitAlgHom R A) x) := by induction x using TensorProduct.induction_on with | zero => simp only [map_zero] | tmul s a => rw [TensorProduct.counit_tmul, CommSemiring.counit_apply, Algebra.TensorProduct.map_tmul, Algebra.TensorProduct.rid_tmul] rfl | add x y hx hy => rw [map_add, hx, hy, map_add, map_add] theorem augIdeal_baseChange : augIdeal S (S ⊗[R] A) = (augIdeal R A).map (Algebra.TensorProduct.includeRight : A →ₐ[R] S ⊗[R] A) := by have hsurj : Function.Surjective (counitAlgHom R A) := fun r => ⟨algebraMap R A r, by rw [Bialgebra.counitAlgHom_apply, counit_algebraMap]⟩ have hker := Algebra.TensorProduct.lTensor_ker (A := S) (counitAlgHom R A) hsurj change RingHom.ker (counitAlgHom S (S ⊗[R] A)) = (RingHom.ker (counitAlgHom R A)).map _ rw [← hker] ext x rw [RingHom.mem_ker, RingHom.mem_ker, Bialgebra.counitAlgHom_apply, counit_baseChange_eq] have hmaps : Algebra.TensorProduct.map (AlgHom.id S S) (counitAlgHom R A) x = Algebra.TensorProduct.map (AlgHom.id R S) (counitAlgHom R A) x := by induction x using TensorProduct.induction_on with | zero => simp only [map_zero] | tmul s a => rfl | add x y hx hy => rw [map_add, map_add, hx, hy] rw [← hmaps] exact (Algebra.TensorProduct.rid R S S).map_eq_zero_iff theorem torsionIdeal_baseChange (n : ℕ) : torsionIdeal S (S ⊗[R] A) n = (torsionIdeal R A n).map (Algebra.TensorProduct.includeRight : A →ₐ[R] S ⊗[R] A) := by rw [torsionIdeal, torsionIdeal, augIdeal_baseChange] change ((augIdeal R A).map (Algebra.TensorProduct.includeRight : A →ₐ[R] S ⊗[R] A).toRingHom).map (nsmulAlgHom S (S ⊗[R] A) n).toRingHom = ((augIdeal R A).map (nsmulAlgHom R A n).toRingHom).map (Algebra.TensorProduct.includeRight : A →ₐ[R] S ⊗[R] A).toRingHom rw [Ideal.map_map, Ideal.map_map] congr 1 refine RingHom.ext fun a => ?_ change nsmulAlgHom S (S ⊗[R] A) n ((1 : S) ⊗ₜ[R] a) = (1 : S) ⊗ₜ[R] nsmulAlgHom R A n a exact nsmulAlgHom_baseChange_tmul R S A n 1 a end BaseChange end PDivisibleGroup.Hopf namespace PDivisibleGroup variable {R : Type} [CommRing R] {p h : ℕ} (G : PDivisibleGroup R p h) (S : Type) [CommRing S] [Algebra R S] theorem ker_map_transition (v : ℕ) : RingHom.ker (Bialgebra.TensorProduct.map (BialgHom.id S S) (G.transition v)) = (RingHom.ker (G.transition v)).map (Algebra.TensorProduct.includeRight : G.level (v + 1) →ₐ[R] S ⊗[R] G.level (v + 1)) := by have hker : RingHom.ker (Algebra.TensorProduct.map (AlgHom.id R S) (G.transitionAlgHom v)) = (RingHom.ker (G.transition v)).map (Algebra.TensorProduct.includeRight : G.level (v + 1) →ₐ[R] S ⊗[R] G.level (v + 1)) := Algebra.TensorProduct.lTensor_ker (A := S) (G.transitionAlgHom v) (G.transition_surjective v) rw [← hker] ext x rw [RingHom.mem_ker, RingHom.mem_ker] have hmaps : Bialgebra.TensorProduct.map (BialgHom.id S S) (G.transition v) x = Algebra.TensorProduct.map (AlgHom.id R S) (G.transitionAlgHom v) x := by induction x using TensorProduct.induction_on with | zero => simp only [map_zero] | tmul s a => rfl | add x y hx hy => rw [map_add, map_add, hx, hy] rw [hmaps] variable [Nontrivial S] def baseChange : PDivisibleGroup S p h where level v := S ⊗[R] G.level v transition v := Bialgebra.TensorProduct.map (BialgHom.id S S) (G.transition v) transition_surjective v := Algebra.TensorProduct.map_surjective (AlgHom.id S S) (G.transitionAlgHom v) Function.surjective_id (G.transition_surjective v) finrank_level v := by haveI : Nontrivial R := (algebraMap R S).domain_nontrivial rw [Module.finrank_baseChange, G.finrank_level] ker_transition v := by rw [ker_map_transition, G.ker_transition, Hopf.torsionIdeal_baseChange] @[simp] theorem baseChange_level (v : ℕ) : (G.baseChange S).level v = (S ⊗[R] G.level v) := rfl theorem baseChange_transition (v : ℕ) : (G.baseChange S).transition v = Bialgebra.TensorProduct.map (BialgHom.id S S) (G.transition v) := rfl @[simp] theorem baseChange_transition_tmul (v : ℕ) (s : S) (a : G.level (v + 1)) : (G.baseChange S).transition v (s ⊗ₜ[R] a) = s ⊗ₜ[R] G.transition v a := rfl theorem augIdeal_baseChange (v : ℕ) : Hopf.augIdeal S ((G.baseChange S).level v) = (Hopf.augIdeal R (G.level v)).map (Algebra.TensorProduct.includeRight : G.level v →ₐ[R] S ⊗[R] G.level v) := Hopf.augIdeal_baseChange R S (G.level v) omit [Nontrivial S] in theorem augIdeal_le_comap_includeRight (v : ℕ) : G.augIdeal v ≤ (Hopf.augIdeal S (S ⊗[R] G.level v)).comap (Algebra.TensorProduct.includeRight : G.level v →ₐ[R] S ⊗[R] G.level v) := by rw [Hopf.augIdeal_baseChange R S (G.level v)] exact Ideal.le_comap_map theorem baseChange_cotangent_eq (v : ℕ) : (G.baseChange S).Cotangent v = (Hopf.augIdeal S (S ⊗[R] G.level v)).Cotangent := rfl omit [Nontrivial S] in def cotangentToBaseChange (v : ℕ) : G.Cotangent v →ₗ[R] (Hopf.augIdeal S (S ⊗[R] G.level v)).Cotangent := Ideal.mapCotangent (G.augIdeal v) (Hopf.augIdeal S (S ⊗[R] G.level v)) (Algebra.TensorProduct.includeRight : G.level v →ₐ[R] S ⊗[R] G.level v) (G.augIdeal_le_comap_includeRight S v) omit [Nontrivial S] in @[simp] theorem cotangentToBaseChange_toCotangent (v : ℕ) (x : G.augIdeal v) : G.cotangentToBaseChange S v ((G.augIdeal v).toCotangent x) = (Hopf.augIdeal S (S ⊗[R] G.level v)).toCotangent ⟨(1 : S) ⊗ₜ[R] (x : G.level v), G.augIdeal_le_comap_includeRight S v x.2⟩ := rfl omit [Nontrivial S] in def cotangentBaseChange (v : ℕ) : S ⊗[R] G.Cotangent v →ₗ[S] (Hopf.augIdeal S (S ⊗[R] G.level v)).Cotangent := (G.cotangentToBaseChange S v).liftBaseChange S omit [Nontrivial S] in @[simp] theorem cotangentBaseChange_tmul (v : ℕ) (s : S) (y : G.Cotangent v) : G.cotangentBaseChange S v (s ⊗ₜ[R] y) = s • G.cotangentToBaseChange S v y := by rw [cotangentBaseChange, LinearMap.liftBaseChange_tmul] end PDivisibleGroup end
Statements phrased using this module (18)
- Transport of Tate modules along an embedding ℚ̄→ℚ̄ₚ
PDivisibleGroup.exists_linearEquiv_tateModule_baseChange_ringOfIntegers_of_ringHom_padicAlgCl10 below · depth 22 - Base change of the cotangent space of a p-divisible group
PDivisibleGroup.cotangentBaseChange_bijective0 below · depth 26 - Base change of a p-divisible group inside a relative group law
GoodReductionJacobian.RelativeGroupLaw.exists_closedImmersion_isIso_torsion_tensorProduct_baseChange_of_isIso_torsion0 below · depth 27 - Frobenius and Verschiebung on the p-divisible levels mod p
ModularCurve.JHNeronObjectAtP.LevelData.restrict_frobenius_eq_pow_and_cartierDual_map_restrict_verschiebung_eq_pow_of_abelianSchemePropertyBundle9 below · depth 27 - Pinned idempotent pieces of B mod p identified with A
ModularCurve.exists_bialgHom_baseChange_levelTorsion_raynaudQuotient_image_eq_idempotent_finPts_jHNeronObjectAtP_of_finPtsWitness2,599 below · depth 27 - Component projectors on the mod-p Raynaud quotient
ModularCurve.exists_idempotent_pair_baseChange_raynaudQuotient_projector_components_finPts_jHNeronObjectAtP_of_finPtsWitness_of_bridgePins2,654 below · depth 27 - Cartier duality of p-divisible groups is stable under base change
PDivisibleGroup.IsCartierDual.baseChange1 below · depth 27 - Finite part at p descends to the decomposition ring
ModularCurve.exists_bialgEquiv_baseChange_decompositionRing_finitePart_jHNeronObjectAtP0 below · depth 28 - Special fibre of the Raynaud quotient as a tensor square
ModularCurve.exists_bialgEquiv_baseChange_raynaudQuotient_tensorProduct_levelTorsion_finPts_jHNeronObjectAtP_of_finPtsWitness1,625 below · depth 28 - Component projectors on the special fibre of the Raynaud quotient
ModularCurve.exists_idempotent_pair_baseChange_raynaudQuotient_projector_components_finPts_jHNeronObjectAtP_of_bialgEquiv_of_hecke_descent0 below · depth 28 - Raynaud quotient has twice the height of A
ModularCurve.height_raynaudQuotient_eq_two_mul_height_levelTorsion_finPts_jHNeronObjectAtP_of_finPtsWitness2,258 below · depth 28 - Component maps of the Raynaud quotient on the special fibre
ModularCurve.exists_bialgHom_levelTorsion_raynaudQuotient_baseChange_spec_comp_eq_of_finPtsWitness51 below · depth 29 - Surjective product map and rank identity for the Raynaud quotient
ModularCurve.surjective_productMap_and_finrank_eq_levelTorsion_raynaudQuotient_baseChange_of_finPtsWitness1,608 below · depth 29 - Homomorphic level maps factor through the embedded p^v-torsion
ModularCurve.JHNeronObjectAtP.LevelData.exists_bialgHom_specMap_comp_eq_of_isHom_baseChange_level0 below · depth 30 - A bound p^{vt} for the joint kernel on finite levels
ModularCurve.JHNeronObjectAtP.finrank_quotient_sup_map_ker_counit_le_pow_toricRank_of_specMap_comp_eq4 below · depth 30 - Toric Hopf quotient of Gᵥ: free of rank p^{vt}
ModularCurve.exists_hopfCokernel_free_finrank_eq_pow_of_finPtsWitness39 below · depth 30 - Descended abelian quotients kill the Hopf cokernel of ψᵥ
ModularCurve.specMap_cokernel_comp_levelBaseChange_comp_abq_eq_one_of_finPtsWitness16 below · depth 30 - Geometric points of a p-divisible group commute with base change
PDivisibleGroup.exists_mulEquiv_point_baseChange_and_addEquiv_points_baseChange0 below · depth 30