Definitions/Def_DedekindDomain_Completion_BaseChange.lean
Base change of adic completions along an extension of Dedekind domains
The standing setting is the AKLB situation: A a Dedekind domain with fraction field K, B an A-algebra, integral over A, which is a Dedekind domain with fraction field L, together with compatible scalar towers over K\subseteq L; v is a height-one prime of A and w ranges over Extension B v, the subtype of height-one primes of B whose contraction to A is v. For such a w the inclusion K\to L is continuous for the v-adic and w-adic topologies (adicValued.continuous_algebraMap), and completing it gives Extension.adicCompletionSemialgHom, a ring map K_v\to L_w semilinear over K\to L; its valuation behaviour is |\,\varphi(x)\,| = |x|^{e} with e the ramification index of w over v, so integers map to integers, and L_w becomes a K_v-algebra. Taking all w\mid v at once yields adicCompletion.semialgHomPi, K_v\to\prod_{w\mid v}L_w, and by base change the L-algebra map adicCompletion.baseChange, L\otimes_K K_v\to\prod_{w\mid v}L_w, together with its avatar baseChangeRight as a K_v-algebra map. Surjectivity comes from density of L in the product (denseRange_of_prodAlgebraMap, resting on closureAlgebraMapIntegers_eq_prodIntegers: the closure of the image of A in a finite product of completions is the product of the integer rings) together with finite-dimensionality; injectivity from the rank count [L:K]=\sum_{w\mid v}e_wf_w=\sum_w[L_w:K_v], where the local identities ramificationIdx_eq_ramificationIdx, inertiaDeg_eq_inertiaDeg and ramificationIdx_mul_inertiaDeg_eq_finrank are proved. Hence baseChangeAlgEquiv, an L-algebra isomorphism L\otimes_K K_v\cong\prod_{w\mid v}L_w, refined to a topological isomorphism baseChangeContinuousAlgEquiv using that each L_w, and the product, carry the K_v-module topology. On the integral level, tensorAdicCompletionIntegersTo sends B\otimes_A\mathcal O_v\to L\otimes_K K_v with clopen image equal to the closure of the image of B, and integerBaseChangeLinearEquiv is the B-linear isomorphism B\otimes_A K_v\cong\prod_{w\mid v}L_w carrying the image of B\otimes_A\mathcal O_v bijectively onto \prod_{w\mid v}\mathcal O_{L_w}. Ancillary general lemmas include \pi-valued semialgebra maps, base change of a semialgebra hom along algebraMap, right base change of a basis and the resulting rank equality \operatorname{rank}_B(A\otimes_R B)=\operatorname{rank}_R A, and multiplication units as linear equivalences.
Relation to Mathlib
Mathlib supplies the adic completion adicCompletion of a fraction field at a height-one prime and its valuation subring adicCompletionIntegers; the subtype Extension of primes of B above v, the semialgebra map between completions, the base-change comparison with the product over w\mid v and its integral counterpart are the project's own, as are the generic additions to the semialgebra-hom and tensor-product interfaces (Pi.semialgHom, SemialgHom.baseChange_of_algebraMap, Module.Basis.rightBaseChange).
Where it is used
These comparisons are the local foundation for working adelically over number fields: they identify the completion of an extension at the places above a given place and match integral lattices, and they are used throughout the treatment of local components of automorphic forms and of local conditions on Galois representations.
References
- J.-P. Serre, Local Fields, Graduate Texts in Mathematics 67, Springer, 1979, Ch. II
- J. Neukirch, Algebraic Number Theory, Grundlehren der mathematischen Wissenschaften 322, Springer, 1999, Ch. II, §8
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 1,160 lines
- 113 declarations
- used in the statements of 237 theorems and imported by 279 proofs
- imports 5 definition modules
Source file: Definitions/Def_DedekindDomain_Completion_BaseChange.lean
Imports
Declarations
- def
Subring.toSubmodule - def
Pi.semialgHom - theorem
Pi.semialgHom_apply - def
Pi.semialgHomPi - theorem
Pi.semialgHomPi_apply - def
AlgEquiv.piCongrFiberwise - def
SemialgHom.baseChange_of_algebraMap - theorem
SemialgHom.baseChange_of_algebraMap_tmul - theorem
SemialgHom.baseChange_of_algebraMap_tmul_right - theorem
SemialgHom.baseChange_of_algebraMap_tmul_left - def
SemialgHom.baseChangeRightOfAlgebraMap - theorem
SemialgHom.baseChangeRightOfAlgebraMap_apply - theorem
SemialgHom.baseChangeRightOfAlgebraMap_coe - def
LinearEquiv.mulLeft - theorem
LinearEquiv.coe_mulLeft - def
LinearEquiv.mulRight - theorem
LinearEquiv.coe_mulRight - def
Module.Basis.rightBaseChange - lemma
Module.Basis.rightBaseChange_repr - lemma
Module.Basis.rightBaseChange_apply - lemma
TensorProduct.finrank_rightAlgebra - theorem
IsDedekindDomain.HeightOneSpectrum.closureAlgebraMapIntegers_eq_prodIntegers - theorem
IsDedekindDomain.HeightOneSpectrum.denseRange_of_prodAlgebraMap - theorem
IsDedekindDomain.HeightOneSpectrum.continuousAdd_withVal_pin - theorem
IsDedekindDomain.HeightOneSpectrum.addMonoidHomClass_withVal_pin - theorem
IsDedekindDomain.HeightOneSpectrum.isTopologicalAddGroup_withVal_pin - lemma
IsDedekindDomain.HeightOneSpectrum.adicValued.continuous_algebraMap - def
WithVal.semialgebraMap - def
IsDedekindDomain.HeightOneSpectrum.Extension.adicCompletionSemialgHomCompletion - def
IsDedekindDomain.HeightOneSpectrum.Extension.adicCompletionSemialgHom - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.adicCompletionSemialgHom_apply - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.toCompletion_adicCompletionSemialgHom - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.adicCompletionSemialgHom_coe - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.valued_adicCompletionSemialgHom - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.adicCompletionSemialgHom_image_adicCompletionIntegers - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.adicCompletionSemialgHom_continuous - def
IsDedekindDomain.HeightOneSpectrum.adicCompletion.semialgHomPi - abbrev
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChange - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChange_tmul_apply - abbrev
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChangeRight - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChangeRight_surjective - instance
IsDedekindDomain.HeightOneSpectrum.adicCompletion.instIsModuleTopology - instance
IsDedekindDomain.HeightOneSpectrum.adicCompletion.instIsModuleTopologyPi - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChangeRight_isOpenQuotientMap - def
IsDedekindDomain.HeightOneSpectrum.tensorAdicCompletionIntegersTo - lemma
IsDedekindDomain.HeightOneSpectrum.tensorAdicCompletionIntegersTo_tmul - lemma
IsDedekindDomain.HeightOneSpectrum.tensorAdicCompletionIntegersTo_range_subset_closure - lemma
IsDedekindDomain.HeightOneSpectrum.tensorAdicCompletionIntegersTo_isClopen_range - lemma
IsDedekindDomain.HeightOneSpectrum.range_tensorAdicCompletionIntegersTo_eq_closure_range_algebraMap - lemma
IsDedekindDomain.HeightOneSpectrum.pi_adicCompletionIntegers_eq_closure_range_algebraMap - lemma
IsDedekindDomain.HeightOneSpectrum.isClosed_baseChange_image_closure_range_algebraMap - theorem
IsDedekindDomain.HeightOneSpectrum.range_baseChange_comp_tensorAdicCompletionTo_eq_pi - def
IsDedekindDomain.HeightOneSpectrum.Extension.adicCompletionIntegersRingHom - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.integer_algebraMap_apply - def
IsDedekindDomain.HeightOneSpectrum.tensorAdicCompletionIntegersToPiRight - def
IsDedekindDomain.HeightOneSpectrum.Extension.tensorAdicCompletionIntegersToAdicCompletion - lemma
IsDedekindDomain.HeightOneSpectrum.Extension.tensorAdicCompletionIntegersToAdicCompletion_range_eq_integers - lemma
WithZero.ofAdd_neg_ofNat_pow - theorem
IsDedekindDomain.HeightOneSpectrum.adicCompletion.ramificationIdx_eq_ramificationIdx - theorem
IsDedekindDomain.HeightOneSpectrum.adicCompletion.inertiaDeg_eq_inertiaDeg - theorem
IsDedekindDomain.HeightOneSpectrum.adicCompletion.ramificationIdx_mul_inertiaDeg_eq_finrank - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletion.finrank_tensorProduct_adicCompletion_eq_finrank_pi_adicCompletion - theorem
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChange_bijective - def
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChangeAlgEquiv - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletion.rightActions_smul_tmul_right - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletion.rightActions_smul_eq_one_tmul_mul - def
IsDedekindDomain.HeightOneSpectrum.adicCompletion.baseChangeContinuousAlgEquiv - def
IsDedekindDomain.HeightOneSpectrum.adicCompletion.integerBaseChangeLinearEquiv - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletion.integerBaseChangeLinearEquiv_tmul_apply - def
IsDedekindDomain.HeightOneSpectrum.adicCompletion.integerSubmodule - def
IsDedekindDomain.HeightOneSpectrum.adicCompletionIntegers.tensorCoe - lemma
IsDedekindDomain.HeightOneSpectrum.adicCompletionIntegers.tensorCoe_tmul - theorem
IsDedekindDomain.HeightOneSpectrum.adicCompletion.integerBaseChangeLinearEquiv_bijOn
Source
import Definitions.Def_DedekindDomain_AdicValuation_InlineSpecific import Definitions.Def_DedekindDomain_IntegralClosure import Definitions.Def_Mathlib_IsModuleTopology import Definitions.Def_Mathlib_Topology_Algebra_UniformRing import Definitions.Def_Mathlib_RightActionInstances set_option maxHeartbeats 1200000 set_option synthInstance.maxHeartbeats 400000 set_option maxSynthPendingDepth 3 set_option Elab.async false section variable {R S : Type*} [Ring R] def Subring.toSubmodule (S : Subring R) : Submodule S R where __ := S smul_mem' x y h := by rw [smul_def, smul_eq_mul] apply S.mul_mem (SetLike.coe_mem x) h section def Pi.semialgHom {I : Type*} {R S : Type*} (f : I → Type*) [CommSemiring R] [CommSemiring S] (φ : R →+* S) [s : (i : I) → Semiring (f i)] [(i : I) → Algebra S (f i)] {A : Type*} [Semiring A] [Algebra R A] (g : (i : I) → A →ₛₐ[φ] f i) : A →ₛₐ[φ] (i : I) → f i where __ := RingHom.pi fun i ↦ (g i).toRingHom map_smul' r a := by ext; simp [RingHom.pi] @[simp] theorem Pi.semialgHom_apply {I : Type*} {R S : Type*} (f : I → Type*) [CommSemiring R] [CommSemiring S] (φ : R →+* S) [s : (i : I) → Semiring (f i)] [(i : I) → Algebra S (f i)] {A : Type*} [Semiring A] [Algebra R A] (g : (i : I) → A →ₛₐ[φ] f i) (a : A) (i : I) : (Pi.semialgHom _ φ g) a i = g i a := rfl def Pi.semialgHomPi {I J : Type*} {R S : Type*} (f : I → Type*) (g : J → Type*) [CommSemiring R] [CommSemiring S] {φ : R →+* S} [(i : I) → Semiring (f i)] [(i : I) → Algebra S (f i)] [(j : J) → Semiring (g j)] [(j : J) → Algebra R (g j)] {r : I → J} (p : (i : I) → g (r i) →ₛₐ[φ] f i) : ((j : J) → g j) →ₛₐ[φ] (i : I) → f i where toFun x w := p w (x (r w)) map_one' := by simp [Pi.one_def] map_mul' x y := funext fun w => by simp [map_mul] map_zero' := by simp [Pi.zero_def] map_add' x y := funext fun w => by simp [map_add] map_smul' k x := funext fun w => (p w).map_smul' k (x (r w)) @[simp] theorem Pi.semialgHomPi_apply {I J : Type*} {R S : Type*} (f : I → Type*) (g : J → Type*) [CommSemiring R] [CommSemiring S] {φ : R →+* S} [(i : I) → Semiring (f i)] [(i : I) → Algebra S (f i)] [(j : J) → Semiring (g j)] [(j : J) → Algebra R (g j)] {r : I → J} (p : (i : I) → g (r i) →ₛₐ[φ] f i) (a : (j : J) → g j) (i : I) : Pi.semialgHomPi _ _ p a i = p i (a (r i)) := rfl def AlgEquiv.piCongrFiberwise {α : Type*} {β : Type*} {R : Type*} {γ₁ : α → Type*} {γ₂ : β → Type*} {f : α → β} [CommSemiring R] [(a : α) → Semiring (γ₁ a)] [(b : β) → Semiring (γ₂ b)] [(a : α) → Algebra R (γ₁ a)] [(b : β) → Algebra R (γ₂ b)] (e : (b : β) → ((x : { x : α // f x = b }) → γ₁ x.1) ≃ₐ[R] γ₂ b) : ((a : α) → γ₁ a) ≃ₐ[R] ((b : β) → γ₂ b) where __ := Equiv.piCongrFiberwise fun _ => (e _).toEquiv map_add' _ _ := by funext b; simp [← Pi.add_def] map_mul' _ _ := by funext b; simp [← Pi.mul_def] commutes' r := by funext b; simp [← (e b).commutes' r, Pi.algebraMap_def] section open scoped TensorProduct variable {R S : Type*} [CommSemiring R] [CommSemiring S] {φ : R →+* S} {A B : Type*} noncomputable def SemialgHom.baseChange_of_algebraMap [Semiring A] [Algebra R S] [Algebra R A] [Semiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) : S ⊗[R] A →ₐ[S] B := letI : Algebra R B := Algebra.compHom _ (algebraMap R S) have : IsScalarTower R S B := .of_algebraMap_eq fun _ ↦ rfl let ρ : A →ₐ[R] B := { toRingHom := ψ.toRingHom commutes' := ψ.commutes } Algebra.TensorProduct.lift (Algebra.ofId S _) ρ fun s a ↦ Algebra.commutes s (ρ a) theorem SemialgHom.baseChange_of_algebraMap_tmul [Semiring A] [Algebra R S] [Algebra R A] [Semiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) (s : S) (a : A) : ψ.baseChange_of_algebraMap (s ⊗ₜ[R] a) = algebraMap _ _ s * ψ a := by simp [baseChange_of_algebraMap, SemialgHom.toLinearMap_eq_coe, Algebra.ofId_apply] @[simp] theorem SemialgHom.baseChange_of_algebraMap_tmul_right [Semiring A] [Algebra R S] [Algebra R A] [Semiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) (a : A) : ψ.baseChange_of_algebraMap (1 ⊗ₜ[R] a) = ψ a := by simp [baseChange_of_algebraMap, SemialgHom.toLinearMap_eq_coe] @[simp] theorem SemialgHom.baseChange_of_algebraMap_tmul_left [Semiring A] [Algebra R S] [Algebra R A] [Semiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) (s : S) : ψ.baseChange_of_algebraMap (s ⊗ₜ[R] 1) = algebraMap _ _ s := by simp [baseChange_of_algebraMap, SemialgHom.toLinearMap_eq_coe, Algebra.ofId_apply] open scoped TensorProduct.RightActions in instance [Algebra R S] [CommSemiring A] [Algebra R A] [CommSemiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) : letI := ψ.toAlgebra IsBiscalar S A ψ.baseChange_of_algebraMap where __ := ψ.toAlgebra map_smul₁ s x := ψ.baseChange_of_algebraMap.map_smul_of_tower .. map_smul₂ a x := by induction x using TensorProduct.induction_on with | zero => simp | tmul x y => simp [TensorProduct.smul_tmul', -algebraMap_smul, algebra_compatible_smul B a, SemialgHom.baseChange_of_algebraMap_tmul, RingHom.algebraMap_toAlgebra, SemialgHom.toLinearMap_eq_coe] ring | add x y hx hy => simp_all open scoped TensorProduct.RightActions in noncomputable def SemialgHom.baseChangeRightOfAlgebraMap [Algebra R S] [CommSemiring A] [Algebra R A] [CommSemiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) : letI := ψ.toAlgebra S ⊗[R] A →ₐ[A] B := letI := ψ.toAlgebra AlgHom.changeScalars A ψ.baseChange_of_algebraMap open scoped TensorProduct.RightActions in @[simp] theorem SemialgHom.baseChangeRightOfAlgebraMap_apply [Algebra R S] [CommSemiring A] [Algebra R A] [CommSemiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) (x : S ⊗[R] A) : baseChangeRightOfAlgebraMap ψ x = baseChange_of_algebraMap ψ x := by simp [baseChangeRightOfAlgebraMap, AlgHom.changeScalars_apply] open scoped TensorProduct.RightActions in @[simp] theorem SemialgHom.baseChangeRightOfAlgebraMap_coe [Algebra R S] [CommSemiring A] [Algebra R A] [CommSemiring B] [Algebra S B] (ψ : A →ₛₐ[algebraMap R S] B) : ⇑ψ.baseChangeRightOfAlgebraMap = ⇑ψ.baseChange_of_algebraMap := funext_iff.2 <| ψ.baseChangeRightOfAlgebraMap_apply variable (F : Type*) [CommSemiring F] {A : Type*} [Ring A] [Algebra F A] def _root_.LinearEquiv.mulLeft (u : Aˣ) : A ≃ₗ[F] A where toFun x := u * x invFun y := u⁻¹ * y left_inv x := by simp right_inv y := by simp map_add' x₁ x₂ := left_distrib ↑u x₁ x₂ map_smul' f x := by simp @[simp] theorem LinearEquiv.coe_mulLeft (u : Aˣ) : (LinearEquiv.mulLeft F u : A →ₗ[F] A) = LinearMap.mulLeft F (u : A) := rfl def _root_.LinearEquiv.mulRight (u : Aˣ) : A ≃ₗ[F] A where toFun x := x * u invFun y := y * u⁻¹ left_inv x := by simp [mul_assoc] right_inv y := by simp [mul_assoc] map_add' x₁ x₂ := right_distrib x₁ x₂ u map_smul' f x := by simp @[simp] theorem LinearEquiv.coe_mulRight (u : Aˣ) : (LinearEquiv.mulRight F u : A →ₗ[F] A) = LinearMap.mulRight F (u : A) := rfl section section Basis open scoped TensorProduct open scoped TensorProduct.RightActions variable {R : Type*} (A : Type*) {B : Type*} {ι : Type*} [CommSemiring R] variable [CommSemiring A] [Algebra R A] [Fintype ι] variable [CommSemiring B] [Algebra R B] noncomputable def Module.Basis.rightBaseChange [DecidableEq ι] (b : Module.Basis ι R A) : Module.Basis ι B (A ⊗[R] B) where repr := let comm : B ⊗[R] A ≃ₗ[B] A ⊗[R] B := TensorProduct.RightActions.Algebra.TensorProduct.comm R B A let π : B ⊗[R] A ≃ₗ[B] (ι → B) := (TensorProduct.AlgebraTensorModule.congr (LinearEquiv.refl B B) b.equivFun).trans (TensorProduct.piScalarRight _ _ _ _) let finite : (ι →₀ B) ≃ₗ[B] (ι → B) := Finsupp.linearEquivFunOnFinite B B ι comm.symm.trans π |>.trans finite.symm @[simp] lemma Module.Basis.rightBaseChange_repr [DecidableEq ι] (b : Module.Basis ι R A) (i) (x : B) : (b.rightBaseChange A).repr (b i ⊗ₜ x) = Finsupp.single i x := by have : ∑ (j : ι), (Pi.single i (1 : R) : ι → R) j • (b j) = b i := by conv => lhs arg 2 intro j rw [Pi.single_comm, Pi.single_apply_smul] simp rw [← LinearEquiv.eq_symm_apply] simp [rightBaseChange, this] @[simp] lemma Module.Basis.rightBaseChange_apply [DecidableEq ι] (b : Basis ι R A) (i) : b.rightBaseChange A i = b i ⊗ₜ (1 : B) := by rw [apply_eq_iff] exact rightBaseChange_repr A b i 1 end Basis section Finrank namespace TensorProduct open scoped TensorProduct.RightActions variable {R : Type*} (A : Type*) {B : Type*} [CommRing R] [CommSemiring A] [Algebra R A] [CommRing B] [Algebra R B] [Nontrivial B] lemma finrank_rightAlgebra [Module.Finite R A] [Module.Free R A] : Module.finrank B (A ⊗[R] B) = Module.finrank R A := by have : Nontrivial R := RingHom.domain_nontrivial (algebraMap R B) let b := Module.Free.chooseBasis R A let b' : Module.Basis _ _ (A ⊗[R] B) := b.rightBaseChange A rw [Module.finrank_eq_card_basis b, Module.finrank_eq_card_basis b'] end TensorProduct end Finrank namespace IsDedekindDomain.HeightOneSpectrum variable {A : Type*} (K : Type*) [CommRing A] [Field K] [Algebra A K] [IsFractionRing A K] [IsDedekindDomain A] (v : HeightOneSpectrum A) open Valuation.IsRankOneDiscrete in theorem closureAlgebraMapIntegers_eq_prodIntegers {ι : Type*} (v : ι → HeightOneSpectrum A) (injective : Function.Injective v) : closure (SetLike.coe (algebraMap A ((i : ι) → (v i).adicCompletion K)).range) = (Set.pi Set.univ (fun (i : ι) ↦ ((v i).adicCompletionIntegers K).carrier)) := by apply Set.Subset.antisymm · apply closure_minimal · rintro c ⟨a, ha⟩ i - rw [← ha] simp only [Pi.algebraMap_apply] exact coe_mem_adicCompletionIntegers (v i) a · apply isClosed_set_pi rintro w - apply Valued.isClosed_valuationSubring · intro f hf rw [mem_closure_iff_nhds_zero] intro U hU rw [Pi.zero_def, nhds_pi, Filter.mem_pi'] at hU obtain ⟨I, t, htn, hts⟩ := hU choose g' hg' using fun w => (Valued.is_topological_valuation (t w)).mp (htn w) let g := fun w ↦ Units.mapEquiv (valueGroup₀_equiv_withZeroMulInt _).toMulEquiv (g' w) obtain ⟨a, ha⟩ := exists_forall_adicValued_sub_lt K I g v injective (fun w => ⟨f w, hf w ⟨⟩⟩) use algebraMap A _ a constructor · rw [RingHom.coe_range] exact Set.mem_range_self a · refine hts fun w hw ↦ hg' w ?_ rw [Set.mem_setOf_eq, ← (valueGroup₀_equiv_withZeroMulInt_strictMono _).lt_iff_lt, valueGroup₀_equiv_withZeroMulInt_restrict_apply_of_surjective (valuedAdicCompletion_surjective K (v w))] exact ha w hw theorem denseRange_of_prodAlgebraMap {ι : Type*} [Finite ι] {valuation : ι → HeightOneSpectrum A} (injective : Function.Injective valuation) : DenseRange (algebraMap K ((i : ι) → (valuation i).adicCompletion K)) := by rw [denseRange_iff_closure_range, Set.eq_univ_iff_forall] let S := Set.range (algebraMap K ((i : ι) → (valuation i).adicCompletion K)) have hint : Set.pi Set.univ (fun (i : ι) ↦ ((valuation i).adicCompletionIntegers K).carrier) ⊆ closure S := by rw [← closureAlgebraMapIntegers_eq_prodIntegers _ _ injective] apply closure_mono exact fun _ ⟨a, ha⟩ ↦ ⟨algebraMap A K a, ha⟩ have hmul : ∀x, x ∈ closure S → ∀k : K, k • x ∈ closure S := by intro x h k let f := fun (z : (i : ι) → (valuation i).adicCompletion K) ↦ k • z have hf : ContinuousAt f x := Continuous.continuousAt (continuous_const_smul k) apply closure_mono _ <| mem_closure_image hf h rintro x ⟨_, ⟨z, rfl⟩, rfl⟩ use k • algebraMap K _ z ext i simp [Algebra.smul_def, f] intro x obtain ⟨k, y, hy, hx⟩ := adicCompletion.eq_mul_pi_adicCompletionIntegers K valuation x exact hx ▸ hmul y (hint hy) k end IsDedekindDomain.HeightOneSpectrum section open scoped WithZero Valued TensorProduct open Valuation.IsRankOneDiscrete WithZero variable (A K L B : Type*) [CommRing A] [CommRing B] [Algebra A B] [Field K] [Field L] [Algebra A K] [IsFractionRing A K] [Algebra B L] [IsDedekindDomain A] [Algebra K L] [Algebra A L] [IsScalarTower A B L] [IsScalarTower A K L] section assumptions variable [IsIntegralClosure B A L] [FiniteDimensional K L] example : IsDomain B := by have foo : Function.Injective (algebraMap B L) := IsIntegralClosure.algebraMap_injective B A _ have bar : IsDomain L := inferInstance exact Function.Injective.isDomain _ foo example : Algebra.IsIntegral A B := IsIntegralClosure.isIntegral_algebra A L example [IsDomain B] [Algebra.IsSeparable K L] : IsDedekindDomain B := IsIntegralClosure.isDedekindDomain A K L B example [IsDedekindDomain B] : IsFractionRing B L := IsIntegralClosure.isFractionRing_of_finite_extension A K L B example [Algebra.IsSeparable K L] : Module.Finite A B := have := IsIntegralClosure.isNoetherian A K L B Module.IsNoetherian.finite A B example : FaithfulSMul A B := FaithfulSMul.of_field_isFractionRing A B K L end assumptions variable [Algebra.IsIntegral A B] [IsFractionRing B L] [IsDedekindDomain B] namespace IsDedekindDomain.HeightOneSpectrum variable (v : HeightOneSpectrum A) {A B} local notation "σ" => fun v w => algebraMap (WithVal (HeightOneSpectrum.valuation K v)) (WithVal (HeightOneSpectrum.valuation L w)) private theorem continuousAdd_withVal_pin (w : HeightOneSpectrum B) : ContinuousAdd (WithVal (HeightOneSpectrum.valuation L w)) := inferInstance omit [Algebra A B] [Algebra K L] [Algebra A L] [IsScalarTower A B L] [IsScalarTower A K L] [Algebra.IsIntegral A B] in private theorem addMonoidHomClass_withVal_pin (v : HeightOneSpectrum A) (w : HeightOneSpectrum B) : AddMonoidHomClass (WithVal (HeightOneSpectrum.valuation K v) →+* WithVal (HeightOneSpectrum.valuation L w)) (WithVal (HeightOneSpectrum.valuation K v)) (WithVal (HeightOneSpectrum.valuation L w)) := inferInstance private theorem isTopologicalAddGroup_withVal_pin (v : HeightOneSpectrum A) : IsTopologicalAddGroup (WithVal (HeightOneSpectrum.valuation K v)) := inferInstance attribute [local instance] continuousAdd_withVal_pin addMonoidHomClass_withVal_pin isTopologicalAddGroup_withVal_pin set_option backward.isDefEq.respectTransparency false in lemma adicValued.continuous_algebraMap (w : HeightOneSpectrum B) (hvw : w.under A = v) : Continuous (σ v w) := by refine continuous_of_continuousAt_zero _ ?_ rw [ContinuousAt, map_zero, (Valued.hasBasis_nhds_zero _ _).tendsto_iff (Valued.hasBasis_nhds_zero _ _)] intro γL _ let e := v.asIdeal.ramificationIdx' w.asIdeal let σL := WithVal.valueGroupOrderIso₀ (w.valuation L) let σw := valueGroup₀_equiv_withZeroMulInt (w.valuation L) let m : ℤᵐ⁰ := σw (σL γL) let σv := valueGroup₀_equiv_withZeroMulInt (v.valuation K) let σK := (WithVal.valueGroupOrderIso₀ (v.valuation K)) let γK := σK.symm (σv.symm (exp (m.log / e))) have hγK : γK ≠ 0 := by simp [γK] use .mk0 _ hγK simp only [Units.val_mk0, Set.mem_setOf_eq, true_and] intro x hx rcases eq_or_ne x 0 with rfl | hx₀; · simp rw [σK.lt_symm_apply] at hx replace hx := (WithVal.valueGroupOrderIso₀_restrict (v.valuation K) x).symm.trans_lt hx rw [← (valueGroup₀_equiv_withZeroMulInt_strictMono _).lt_iff_lt, valueGroup₀_equiv_withZeroMulInt_restrict_apply_of_surjective (v.valuation_surjective K), OrderMonoidIso.apply_symm_apply, ← log_lt_log (by simp_all) (by simp)] at hx rw [← σL.strictMono.lt_iff_lt] refine lt_of_eq_of_lt (WithVal.valueGroupOrderIso₀_restrict (w.valuation L) _) ?_ rw [← (valueGroup₀_equiv_withZeroMulInt_strictMono _).lt_iff_lt, valueGroup₀_equiv_withZeroMulInt_restrict_apply_of_surjective (w.valuation_surjective L), WithVal.algebraMap_left_apply, WithVal.algebraMap_right_apply, ← valuation_comap A, ← log_lt_log (by simp_all) (by simp), log_pow, nsmul_eq_mul, mul_comm] subst hvw apply Int.mul_lt_of_lt_ediv (mod_cast pos_of_ne_zero (ramificationIdx_ne_zero A B (algebraMap_injective_of_field_isFractionRing A B K L) w)) hx namespace Extension variable {v} (w : v.Extension B) @[simps!] def _root_.WithVal.semialgebraMap {R S Γ₀ Γ₀' : Type*} [CommRing R] [CommRing S] [LinearOrderedCommGroupWithZero Γ₀] [LinearOrderedCommGroupWithZero Γ₀'] [Algebra R S] (v : Valuation R Γ₀) (w : Valuation S Γ₀') : WithVal v →ₛₐ[algebraMap R S] WithVal w where __ := algebraMap (WithVal v) (WithVal w) map_smul' r x := by simp [WithVal.algebraMap_left_apply, WithVal.algebraMap_right_apply, Algebra.smul_def] noncomputable def adicCompletionSemialgHomCompletion : (v.valuation K).Completion →ₛₐ[algebraMap K L] (w.1.valuation L).Completion := .restrictScalars (WithVal.semialgebraMap (v.valuation K) (w.1.valuation L)) <| UniformSpace.Completion.mapSemialgHom _ <| adicValued.continuous_algebraMap K L v w.1 w.2 noncomputable def adicCompletionSemialgHom : v.adicCompletion K →ₛₐ[algebraMap K L] w.1.adicCompletion L where toFun x := .ofCompletion (adicCompletionSemialgHomCompletion K L w x.toCompletion) map_add' x y := by apply adicCompletion.ext simp only [adicCompletion.toCompletion_add, map_add, adicCompletion.toCompletion_ofCompletion] map_smul' k x := by apply adicCompletion.ext exact (adicCompletionSemialgHomCompletion K L w).map_smul k x.toCompletion map_zero' := by apply adicCompletion.ext simp only [adicCompletion.toCompletion_zero, map_zero, adicCompletion.toCompletion_ofCompletion] map_one' := by apply adicCompletion.ext simp only [adicCompletion.toCompletion_one, map_one, adicCompletion.toCompletion_ofCompletion] map_mul' x y := by apply adicCompletion.ext simp only [adicCompletion.toCompletion_mul, map_mul, adicCompletion.toCompletion_ofCompletion] lemma adicCompletionSemialgHom_apply (x : v.adicCompletion K) : w.adicCompletionSemialgHom K L x = .ofCompletion (adicCompletionSemialgHomCompletion K L w x.toCompletion) := rfl lemma toCompletion_adicCompletionSemialgHom (x : v.adicCompletion K) : (w.adicCompletionSemialgHom K L x).toCompletion = adicCompletionSemialgHomCompletion K L w x.toCompletion := rfl lemma adicCompletionSemialgHom_coe (x : WithVal (v.valuation K)) : w.adicCompletionSemialgHom K L x = algebraMap K L x.ofVal := (w.adicCompletionSemialgHom K L).commutes _ open WithZeroTopology in lemma valued_adicCompletionSemialgHom (x) : Valued.v (adicCompletionSemialgHom K L w x) = Valued.v x ^ (w.1.under A).asIdeal.ramificationIdx' w.1.asIdeal := by obtain ⟨y, rfl⟩ := adicCompletion.ofCompletion_surjective K v x revert y apply funext_iff.mp symm apply UniformSpace.Completion.ext · exact ((Valued.continuous_valuation_of_surjective (v.valuedAdicCompletion_surjective K)).comp (adicCompletion.continuous_ofCompletion K v)).pow _ · exact (Valued.continuous_valuation_of_surjective (w.1.valuedAdicCompletion_surjective L)).comp ((adicCompletion.continuous_ofCompletion L w.1).comp (UniformSpace.Completion.continuous_map.comp ((adicCompletion.continuous_toCompletion K v).comp (adicCompletion.continuous_ofCompletion K v)))) intro a change Valued.v (a : v.adicCompletion K) ^ _ = Valued.v (w.adicCompletionSemialgHom K L a) rw [adicCompletionSemialgHom_coe, adicCompletion.valued_coe, ← valuation_comap A K L B w.1] simp only [w.2] congr 1 rw [adicCompletion.valued_ofCompletion, Valued.valuedCompletion_apply] rfl lemma adicCompletionSemialgHom_image_adicCompletionIntegers : w.adicCompletionSemialgHom K L '' (v.adicCompletionIntegers K) ⊆ w.1.adicCompletionIntegers L := by rintro y ⟨x, hx, rfl⟩ rw [SetLike.mem_coe, mem_adicCompletionIntegers] at hx ⊢ rw [w.valued_adicCompletionSemialgHom K L] rwa [pow_le_one_iff] exact ramificationIdx_ne_zero A B (algebraMap_injective_of_field_isFractionRing A B K L) w.1 noncomputable instance : Algebra (v.adicCompletion K) (w.1.adicCompletion L) := (w.adicCompletionSemialgHom K L).toAlgebra lemma adicCompletionSemialgHom_continuous : Continuous (w.adicCompletionSemialgHom K L) := (adicCompletion.continuous_ofCompletion L w.1).comp (UniformSpace.Completion.continuous_extension.comp (adicCompletion.continuous_toCompletion K v)) instance : ContinuousSMul (adicCompletion K v) (adicCompletion L w.1) := by constructor have leftCts := w.adicCompletionSemialgHom_continuous K L exact Continuous.mul (Continuous.fst' leftCts) continuous_snd end Extension section shortcut_instances private noncomputable instance : Valued (v.adicCompletion K) ℤᵐ⁰ := inferInstance private noncomputable instance : Field (v.adicCompletion K) := inferInstance private noncomputable instance : CommRing (v.adicCompletion K) := inferInstance private noncomputable instance : Ring (v.adicCompletion K) := inferInstance private noncomputable instance : CommSemiring (v.adicCompletion K) := inferInstance private noncomputable instance : Semiring (v.adicCompletion K) := inferInstance private noncomputable instance : AddCommGroup (v.adicCompletion K) := inferInstance private noncomputable instance : AddCommMonoid (v.adicCompletion K) := inferInstance private noncomputable instance (w : v.Extension B) : Valued (w.1.adicCompletion L) ℤᵐ⁰ := inferInstance private noncomputable instance (w : v.Extension B) : Field (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : CommRing (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : Ring (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : CommSemiring (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : Semiring (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : AddCommGroup (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : AddCommMonoid (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : Algebra (v.adicCompletion K) (w.1.adicCompletion L) := inferInstance private noncomputable instance (w : v.Extension B) : Module (v.adicCompletion K) (w.1.adicCompletion L) := inferInstance private noncomputable instance : CommRing (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : Ring (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : CommSemiring (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : Semiring (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : AddCommGroup (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : AddCommMonoid (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : Algebra (v.adicCompletion K) (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : Module (v.adicCompletion K) (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private noncomputable instance : Algebra L (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private instance : IsTopologicalRing (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance private instance : IsTopologicalAddGroup (Π w : v.Extension B, w.1.adicCompletion L) := inferInstance end shortcut_instances namespace adicCompletion variable (B) noncomputable def semialgHomPi : v.adicCompletion K →ₛₐ[algebraMap K L] ∀ w : v.Extension B, w.1.adicCompletion L := Pi.semialgHom _ _ fun i ↦ i.adicCompletionSemialgHom K L noncomputable abbrev baseChange : L ⊗[K] adicCompletion K v →ₐ[L] Π w : v.Extension B, w.1.adicCompletion L := (semialgHomPi K L B v).baseChange_of_algebraMap lemma baseChange_tmul_apply (x y w) : baseChange K L B v (x ⊗ₜ y) w = (algebraMap _ (w.1.adicCompletion L) x) * (algebraMap _ (w.1.adicCompletion L) y) := rfl open scoped TensorProduct.RightActions in noncomputable abbrev baseChangeRight : L ⊗[K] adicCompletion K v →ₐ[adicCompletion K v] Π w : v.Extension B, w.1.adicCompletion L := (semialgHomPi K L B v).baseChangeRightOfAlgebraMap section ModuleTopology open WithZeroMulInt Valued in noncomputable local instance : Valuation.RankOne (Valued.v : Valuation (adicCompletion K v) ℤᵐ⁰) where hom' := (toNNReal (by norm_num : (2 : NNReal) ≠ 0)).comp (valueGroup₀_equiv_withZeroMulInt _).toMonoidWithZeroHom strictMono' := toNNReal_strictMono (by norm_num) |>.comp (valueGroup₀_equiv_withZeroMulInt_strictMono _) exists_val_nontrivial := by obtain ⟨x, hx1, hx2⟩ := Submodule.exists_mem_ne_zero_of_ne_bot v.ne_bot use algebraMap A K x rw [valuedAdicCompletion_eq_valuation' v (algebraMap A K x)] constructor · simpa only [ne_eq, map_eq_zero, FaithfulSMul.algebraMap_eq_zero_iff] · apply ne_of_lt rwa [valuation_of_algebraMap, intValuation_lt_one_iff_mem] attribute [local instance 9999] Algebra.toModule in open scoped TensorProduct.RightActions in lemma baseChangeRight_surjective [FiniteDimensional K L] : Function.Surjective (baseChangeRight K L B v) := by let s := (baseChangeRight K L B v).toLinearMap.range have isClosed : IsClosed s.carrier := Submodule.closed_of_finiteDimensional (E := (w : Extension B v) → adicCompletion L w.val) s rw [← AlgHom.coe_toLinearMap, ← LinearMap.range_eq_top, Submodule.eq_top_iff'] simp_rw [← Submodule.mem_toAddSubmonoid, ← AddSubmonoid.mem_toSubsemigroup, ← AddSubsemigroup.mem_carrier] have denseL : DenseRange (algebraMap L ((w : Extension B v) → adicCompletion L w.val)) := by have := Extension.finite A K L B v exact denseRange_of_prodAlgebraMap _ Subtype.val_injective rw [← isClosed.closure_eq] apply Dense.mono _ denseL rintro _ ⟨l, rfl⟩ use (l ⊗ₜ 1) exact SemialgHom.baseChange_of_algebraMap_tmul_left (semialgHomPi K L B v) l attribute [local instance 9999] Algebra.toModule in open scoped TensorProduct.RightActions in instance [FiniteDimensional K L] : Module.Finite (adicCompletion K v) (Π w : v.Extension B, w.1.adicCompletion L) := .of_surjective (baseChangeRight K L B v).toLinearMap (baseChangeRight_surjective K L B v) attribute [local instance 9999] Algebra.toModule in instance [FiniteDimensional K L] (w : v.Extension B) : Module.Finite (adicCompletion K v) (adicCompletion L w.1) := Module.Finite.of_pi (fun (w : Extension B v) => w.1.adicCompletion L) w instance instIsModuleTopology [FiniteDimensional K L] (w : v.Extension B) : IsModuleTopology (v.adicCompletion K) (w.1.adicCompletion L) := by let Kv := adicCompletion K v let Lw := adicCompletion L w.1 let iso : ((Fin (Module.finrank Kv Lw)) → Kv) ≃L[Kv] Lw := ContinuousLinearEquiv.ofFinrankEq (Module.finrank_fin_fun Kv) apply IsModuleTopology.iso iso instance instIsModuleTopologyPi [FiniteDimensional K L] : IsModuleTopology (v.adicCompletion K) (Π (w : v.Extension B), w.1.adicCompletion L) := by let := Extension.finite A K L B v exact IsModuleTopology.instPi open scoped TensorProduct.RightActions in lemma baseChangeRight_isOpenQuotientMap [FiniteDimensional K L] : IsOpenQuotientMap (baseChangeRight K L B v) := by have : T2Space (L ⊗[K] adicCompletion K v) := IsModuleTopology.t2Space' (K := (adicCompletion K v)) have hsurj := baseChangeRight_surjective K L B v rw [← AlgHom.coe_toLinearMap] exact ⟨hsurj, LinearMap.continuous_of_finiteDimensional _, LinearMap.isOpenMap_of_finiteDimensional _ hsurj⟩ end ModuleTopology end adicCompletion section ModuleTopology open Extension adicCompletion variable (B) noncomputable def tensorAdicCompletionIntegersTo : B ⊗[A] adicCompletionIntegers K v →ₐ[B] L ⊗[K] adicCompletion K v := Algebra.TensorProduct.lift (Algebra.algHom _ _ _) ((Algebra.TensorProduct.includeRight.restrictScalars A).comp (IsScalarTower.toAlgHom _ _ _)) (fun _ _ ↦ .all _ _) omit [Algebra.IsIntegral A B] [IsDedekindDomain B] [IsFractionRing B L] in @[simp] lemma tensorAdicCompletionIntegersTo_tmul (v : HeightOneSpectrum A) (b : B) (x : v.adicCompletionIntegers K) : tensorAdicCompletionIntegersTo K L B v (b ⊗ₜ x) = (algebraMap B L b) ⊗ₜ x.val := by simp [tensorAdicCompletionIntegersTo, Algebra.algHom] omit [Algebra.IsIntegral A B] [IsDedekindDomain B] [IsFractionRing B L] in open scoped TensorProduct.RightActions in lemma tensorAdicCompletionIntegersTo_range_subset_closure [FiniteDimensional K L] : (tensorAdicCompletionIntegersTo K L B v).range.carrier ⊆ closure (algebraMap B (L ⊗[K] adicCompletion K v)).range := by rintro _ ⟨s, rfl⟩ induction s with | zero => apply subset_closure use 0 simp | add x y hx hy => rw [RingHom.map_add] apply map_mem_closure₂ _ hx hy _ · exact (ModuleTopology.continuousAdd _ _).continuous_add intro _ ha _ hb exact add_mem ha hb | tmul b a' => simp only [RingHom.coe_range, tensorAdicCompletionIntegersTo, AlgHom.toRingHom_eq_coe, RingHom.coe_coe, Algebra.TensorProduct.lift_tmul, AlgHom.coe_comp, AlgHom.coe_restrictScalars', IsScalarTower.coe_toAlgHom', Function.comp_apply, ValuationSubring.algebraMap_apply, Algebra.TensorProduct.includeRight_apply] let f (y : ↥(adicCompletionIntegers K v)) : (L ⊗[K] adicCompletion K v) := (Algebra.ofId B (L ⊗[K] adicCompletion K v)) b * (1 : L) ⊗ₜ[K] (y : adicCompletion K v) have hfval : f = fun (y : ↥(adicCompletionIntegers K v)) => (y : adicCompletion K v) • (Algebra.ofId B (L ⊗[K] adicCompletion K v)) b := by ext y unfold f rw [Algebra.smul_def] exact mul_comm _ _ have hcf : ContinuousAt f a' := by apply Continuous.continuousAt rw [hfval] exact continuous_subtype_val.fun_smul continuous_const have hy : a' ∈ closure (Set.range (algebraMap A _)) := by apply denseRange_of_integerAlgebraMap apply mem_closure_image hcf hy constructor · exact isClosed_closure rintro u ⟨_, ⟨a, rfl⟩, rfl⟩ apply subset_closure use algebraMap A B a * b unfold f rw [Algebra.algebraMap_eq_smul_one (A := (adicCompletionIntegers K v)) a, coe_smul_adicCompletionIntegers, ← TensorProduct.smul_tmul, Algebra.ofId_apply, Algebra.TensorProduct.algebraMap_apply, RingHom.map_mul, ← Algebra.smul_def] simp open scoped TensorProduct.RightActions in omit [Algebra.IsIntegral A B] [IsDedekindDomain B] [IsFractionRing B L] in lemma tensorAdicCompletionIntegersTo_isClopen_range [IsIntegralClosure B A L] [FiniteDimensional K L] : IsClopen (SetLike.coe (tensorAdicCompletionIntegersTo K L B v).range) := by have : SeparatelyContinuousAdd (L ⊗[K] v.adicCompletion K) := instSeparatelyContinuousAddOfContinuousAdd rw [← Subalgebra.coe_toSubring, ← Subring.coe_toAddSubgroup] refine OpenAddSubgroup.isClopen ⟨_, ?_⟩ apply AddSubgroup.isOpen_of_zero_mem_interior rw [mem_interior, Subring.coe_toAddSubgroup, Subalgebra.coe_toSubring] obtain ⟨ι, b, hb⟩ := FiniteDimensional.exists_is_basis_integral A K L let b' : Module.Basis ι (adicCompletion K v) (L ⊗[K] (adicCompletion K v)) := by classical exact b.rightBaseChange L let equiv : L ⊗[K] (adicCompletion K v) ≃L[v.adicCompletion K] (ι → adicCompletion K v) := IsModuleTopology.continuousLinearEquiv (b'.equivFun) use equiv.symm '' (Set.pi Set.univ (fun _ => SetLike.coe (adicCompletionIntegers K v))) refine ⟨?_, ?_, by simp⟩ · intro t ⟨g, hg, ht⟩ have hf : ∀ (i : ι), ∃ (w : B), (algebraMap B L w) = (b i) := by intro i apply IsIntegralClosure.isIntegral_iff.mp (hb i) choose f hf_prop using hf let b : B ⊗[A] ↥(adicCompletionIntegers K v) := ∑ (i : ι), (f i) ⊗ₜ ⟨g i, hg i trivial⟩ use b rw [AlgHom.toRingHom_eq_coe, RingHom.coe_coe, map_sum, ← ht] unfold equiv rw [IsModuleTopology.continuousLinearEquiv_symm_apply, Module.Basis.equivFun_symm_apply] apply Finset.sum_congr rfl intro x simp only [Finset.univ_eq_attach, Finset.mem_attach, tensorAdicCompletionIntegersTo_tmul, hf_prop, Module.Basis.rightBaseChange_apply, Algebra.smul_def, TensorProduct.RightActions.algebraMap_eval, Algebra.TensorProduct.tmul_mul_tmul, one_mul, mul_one, imp_self, b'] · rw [ContinuousLinearEquiv.image_symm_eq_preimage] apply IsOpen.preimage equiv.continuous apply isOpen_set_pi Set.finite_univ rintro i - exact Valued.isOpen_valuationSubring (v.adicCompletion K) omit [Algebra.IsIntegral A B] [IsDedekindDomain B] [IsFractionRing B L] in open scoped TensorProduct.RightActions in lemma range_tensorAdicCompletionIntegersTo_eq_closure_range_algebraMap [IsIntegralClosure B A L] [FiniteDimensional K L] : Set.range (tensorAdicCompletionIntegersTo K L B v) = closure (Set.range (algebraMap B (L ⊗[K] adicCompletion K v))) := by apply Set.Subset.antisymm · apply tensorAdicCompletionIntegersTo_range_subset_closure · apply closure_minimal · rintro _ ⟨b, rfl⟩ use b ⊗ₜ[A] 1 simp · apply IsClopen.isClosed apply tensorAdicCompletionIntegersTo_isClopen_range omit [Algebra A L] [IsScalarTower A B L] in lemma pi_adicCompletionIntegers_eq_closure_range_algebraMap : (Set.univ.pi (fun (w : Extension B v) ↦ (w.1.adicCompletionIntegers L).carrier)) = closure (Set.range (algebraMap B _)) := by let val := fun (w : Extension B v) ↦ w.1 have hinj : Function.Injective val := (Set.injective_codRestrict Subtype.property).mp fun _ _ a ↦ a rw [← closureAlgebraMapIntegers_eq_prodIntegers L _ hinj] rfl open scoped TensorProduct.RightActions in lemma isClosed_baseChange_image_closure_range_algebraMap [FiniteDimensional K L] : IsClosed ((baseChange K L B v) '' closure (Set.range (algebraMap B (L ⊗[K] adicCompletion K v)))) := by let S := AddSubgroup.map (baseChange K L B v).toAddMonoidHom (tensorAdicCompletionIntegersTo K L B v).range.toSubring.toAddSubgroup have hSclosed : IsClosed S.carrier := by apply AddSubgroup.isClosed_of_isOpen apply (baseChangeRight_isOpenQuotientMap K L B v).isOpenMap apply (tensorAdicCompletionIntegersTo_isClopen_range K L B v).isOpen suffices h : (baseChange K L B v) '' closure (Set.range (algebraMap B (L ⊗[K] adicCompletion K v))) = S.carrier by rwa [h] rw [← range_tensorAdicCompletionIntegersTo_eq_closure_range_algebraMap] rfl instance : MulActionHomClass (L ⊗[K] adicCompletion K v →ₐ[L] (w : Extension B v) → adicCompletion L w.1) B (L ⊗[K] adicCompletion K v) ((w : Extension B v) → adicCompletion L w.1) where map_smulₛₗ φ b x := by rw [← IsScalarTower.algebraMap_smul L, AlgHom.map_smul_of_tower, IsScalarTower.algebraMap_smul, id_def] open scoped TensorProduct.RightActions in theorem range_baseChange_comp_tensorAdicCompletionTo_eq_pi [FiniteDimensional K L] : Set.range (baseChange K L B v ∘ tensorAdicCompletionIntegersTo K L B v) = Set.univ.pi (fun w ↦ (w.1.adicCompletionIntegers L).carrier) := by have hrange : Set.range (algebraMap B ((w : Extension B v) → adicCompletion L w.1)) = (baseChange K L B v) '' (Set.range (algebraMap B (L ⊗[K] adicCompletion K v))) := by ext x simp [Algebra.algebraMap_eq_smul_one] have hrange' := isClosed_baseChange_image_closure_range_algebraMap K L B v rw [Set.range_comp, range_tensorAdicCompletionIntegersTo_eq_closure_range_algebraMap, pi_adicCompletionIntegers_eq_closure_range_algebraMap, hrange, ← IsClosed.closure_eq hrange'] exact closure_image_closure (baseChangeRight_isOpenQuotientMap K L B v).continuous namespace Extension variable {B} (w : v.Extension B) noncomputable def adicCompletionIntegersRingHom : v.adicCompletionIntegers K →+* w.1.adicCompletionIntegers L := RingHom.restrict (w.adicCompletionSemialgHom K L) _ _ fun x hx ↦ w.adicCompletionSemialgHom_image_adicCompletionIntegers K L ⟨x, hx, rfl⟩ noncomputable instance : Algebra (v.adicCompletionIntegers K) (w.1.adicCompletionIntegers L) := (w.adicCompletionIntegersRingHom K L).toAlgebra lemma integer_algebraMap_apply (x : v.adicCompletionIntegers K) : algebraMap (v.adicCompletionIntegers K) (w.1.adicCompletionIntegers L) x = (w.adicCompletionSemialgHom K L) x.val := rfl variable {v} in noncomputable instance : Algebra (v.adicCompletionIntegers K) (w.1.adicCompletion L) := Algebra.compHom (w.1.adicCompletion L) (algebraMap _ (adicCompletion K v)) end Extension open scoped TensorProduct.RightActions in instance : IsBiscalar B (v.adicCompletionIntegers K) (tensorAdicCompletionIntegersTo K L B v) where map_smul₁ _ _ := map_smul .. map_smul₂ _ _ := by simp only [tensorAdicCompletionIntegersTo_tmul, Algebra.smul_def, TensorProduct.RightActions.algebraMap_eval, map_mul, map_one] rfl attribute [local instance 9999] Algebra.toModule Algebra.toSMul in instance {w : v.Extension B} : IsScalarTower (adicCompletionIntegers K v) (adicCompletion K v) (w.1.adicCompletion L) := Submonoid.instIsScalarTowerSubtypeMem (adicCompletionIntegers K v) open scoped TensorProduct.RightActions in noncomputable def tensorAdicCompletionIntegersToPiRight : B ⊗[A] v.adicCompletionIntegers K →ₐ[v.adicCompletionIntegers K] Π w : v.Extension B, w.1.adicCompletion L := ((baseChangeRight K L B v).restrictScalars _).comp ((tensorAdicCompletionIntegersTo K L B v).changeScalars _) namespace Extension variable (w : v.Extension B) open scoped TensorProduct.RightActions in noncomputable def tensorAdicCompletionIntegersToAdicCompletion : B ⊗[A] (adicCompletionIntegers K v) →ₐ[adicCompletionIntegers K v] adicCompletion L w.1 := Pi.evalAlgHom _ _ w |>.comp (tensorAdicCompletionIntegersToPiRight K L B v) open scoped TensorProduct.RightActions in lemma tensorAdicCompletionIntegersToAdicCompletion_range_eq_integers [FiniteDimensional K L] : Set.range (w.tensorAdicCompletionIntegersToAdicCompletion K L B v) = adicCompletionIntegers L w.1 := by ext x have memrange := (range_baseChange_comp_tensorAdicCompletionTo_eq_pi K L B v) rw [Set.ext_iff] at memrange constructor · rintro ⟨y, rfl⟩ exact (memrange _).mp (Set.mem_range_self y) w trivial · intro hx classical set x' : (w : Extension B v) → adicCompletion L w.val := Pi.single w x with hx' obtain ⟨y, (hy : _ = x')⟩ : x' ∈ Set.range _ := by rw [memrange x', Set.mem_pi] intro w' _ by_cases h : w = w' · rw [← h, hx', Pi.single_eq_same] exact hx · rw [hx', Pi.single_eq_of_ne' h] exact Subring.zero_mem _ use y have hyw := congr_fun hy w simp [hx'] at hyw exact hyw noncomputable local instance : MulAction (v.adicCompletionIntegers K) (v.adicCompletion K) := LieAlgebra.ofAssociativeAlgebra.toMulAction attribute [local instance 9999] Algebra.toSMul Algebra.toModule in open scoped TensorProduct.RightActions in noncomputable instance (priority := 1001) [Module.Finite A B] [FiniteDimensional K L] : Module.Finite (adicCompletionIntegers K v) (adicCompletionIntegers L w.1) := by let integerSubmodule : Submodule (adicCompletionIntegers K v) (adicCompletion L w.1) := let : Algebra (v.adicCompletionIntegers K) (w.1.adicCompletionIntegers L).toSubring := inferInstanceAs (Algebra (adicCompletionIntegers K v) (adicCompletionIntegers L w.1)) have : IsScalarTower (adicCompletionIntegers K v) (adicCompletionIntegers L w.1) (adicCompletion L w.1) := .of_algebraMap_smul fun _ _ ↦ rfl (adicCompletionIntegers L w.1).toSubmodule.restrictScalars (adicCompletionIntegers K v) have heq : (w.tensorAdicCompletionIntegersToAdicCompletion K L B v).toLinearMap.range = integerSubmodule := by ext x apply w.tensorAdicCompletionIntegersToAdicCompletion_range_eq_integers K L B v |> Set.ext_iff.mp have := Module.Finite.range (w.tensorAdicCompletionIntegersToAdicCompletion K L B v).toLinearMap have := w.tensorAdicCompletionIntegersToAdicCompletion_range_eq_integers K L B v exact Module.Finite.equiv <| LinearEquiv.ofEq (LinearMap.range (w.tensorAdicCompletionIntegersToAdicCompletion K L B v).toLinearMap) _ heq end Extension end ModuleTopology namespace adicCompletion open Extension section RamificationInertia variable {v} (w : v.Extension B) lemma _root_.WithZero.ofAdd_neg_ofNat_pow (n : ℕ) : (WithZero.coe (Multiplicative.ofAdd (-n : ℤ))) = (Multiplicative.ofAdd (-1 : ℤ)) ^ n := by rw [← WithZero.coe_pow, ← ofAdd_nsmul, nsmul_eq_mul, Int.mul_neg_one] theorem ramificationIdx_eq_ramificationIdx : (v.completionIdeal K).ramificationIdx' (w.1.completionIdeal L) = v.asIdeal.ramificationIdx' w.1.asIdeal := by apply Ideal.ramificationIdx_spec · rw [Ideal.map_le_iff_le_comap] intro x hx rw [mem_completionIdeal_iff'] at hx rw [Ideal.mem_comap, adicCompletion.mem_completionIdeal_pow, integer_algebraMap_apply, valued_adicCompletionSemialgHom] rw [WithZero.ofAdd_neg_ofNat_pow, w.2] apply pow_le_pow_left' hx · obtain ⟨ϖ, hϖ⟩ := adicCompletion.exists_uniformizer K v have hϖ' : ϖ ∈ v.completionIdeal K := by rw [mem_completionIdeal_iff, hϖ] decide rw [Ideal.map_le_iff_le_comap] intro h have hcomap := h hϖ' rw [Ideal.mem_comap, adicCompletion.mem_completionIdeal_pow, integer_algebraMap_apply, valued_adicCompletionSemialgHom, hϖ, ← WithZero.ofAdd_neg_ofNat_pow, WithZero.coe_le_coe, w.2, Multiplicative.ofAdd_le] at hcomap simp at hcomap theorem inertiaDeg_eq_inertiaDeg : v.asIdeal.inertiaDeg' w.1.asIdeal = (v.completionIdeal K).inertiaDeg' (w.1.completionIdeal L) := letI := Algebra.compHom (adicCompletionIntegers L w.1) (algebraMap A B) have : IsScalarTower A B (adicCompletionIntegers L w.1) := IsScalarTower.of_algebraMap_eq fun _ ↦ rfl have : IsScalarTower A (adicCompletionIntegers K v) (adicCompletionIntegers L w.1) := by apply IsScalarTower.of_algebraMap_eq intro x ext rw [Algebra.compHom_algebraMap_eq, RingHom.coe_comp, Function.comp_apply, algebraMap_completionIntegers, integer_algebraMap_apply, algebraMap_completionIntegers, IsScalarTower.algebraMap_apply B L (adicCompletion L w.1), ← IsScalarTower.algebraMap_apply A B L, IsScalarTower.algebraMap_apply A K L] symm apply SemialgHom.commutes have : w.1.asIdeal.LiesOver v.asIdeal := ⟨by simp_rw [← w.2]; rfl⟩ have : (completionIdeal L w.1).LiesOver (completionIdeal K v) := { «over» := by rw [Ideal.under_def] ext x rw [Ideal.mem_comap, mem_completionIdeal_iff, mem_completionIdeal_iff, integer_algebraMap_apply, valued_adicCompletionSemialgHom K L, pow_lt_one_iff] exact ramificationIdx_ne_zero A B (algebraMap_injective_of_field_isFractionRing A B K L) w.1 } calc v.asIdeal.inertiaDeg' w.1.asIdeal = v.asIdeal.inertiaDeg' (w.1.completionIdeal L) := by rw [Ideal.inertiaDeg_algebra_tower v.asIdeal w.1.asIdeal (w.1.completionIdeal L), inertiaDeg_asIdeal_completionIdeal, mul_one] _ = (v.completionIdeal K).inertiaDeg' (w.1.completionIdeal L) := by rw [Ideal.inertiaDeg_algebra_tower v.asIdeal (v.completionIdeal K) (w.1.completionIdeal L), inertiaDeg_asIdeal_completionIdeal, one_mul] noncomputable local instance : MulAction (v.adicCompletionIntegers K) (v.adicCompletion K) := LieAlgebra.ofAssociativeAlgebra.toMulAction theorem ramificationIdx_mul_inertiaDeg_eq_finrank [FiniteDimensional K L] [Module.Finite A B] : v.asIdeal.ramificationIdx' w.1.asIdeal * v.asIdeal.inertiaDeg' w.1.asIdeal = Module.finrank (adicCompletion K v) (adicCompletion L w.1) := by have : IsScalarTower (adicCompletionIntegers K v) (adicCompletionIntegers L w.1) (adicCompletion L w.1) := .of_algebraMap_smul fun _ _ ↦ rfl have : IsScalarTower (adicCompletionIntegers K v) (adicCompletion K v) (adicCompletion L w.1) := .of_algebraMap_smul fun _ _ ↦ rfl rw [← Ideal.ramificationIdx_mul_inertiaDeg_of_isLocalRing (adicCompletionIntegers L w.1) (adicCompletion K v) (adicCompletion L w.1) (v.completionIdeal_ne_bot K), ramificationIdx_eq_ramificationIdx, inertiaDeg_eq_inertiaDeg K L w] end RamificationInertia variable [FiniteDimensional K L] [Module.Finite A B] (B) variable (v : HeightOneSpectrum A) (w : v.Extension B) local instance : Module.Free (v.adicCompletion K) (adicCompletion L w.1) := Module.free_of_finite_type_torsion_free' open scoped TensorProduct.RightActions in lemma finrank_tensorProduct_adicCompletion_eq_finrank_pi_adicCompletion : Module.finrank (adicCompletion K v) (L ⊗[K] adicCompletion K v) = Module.finrank (adicCompletion K v) ((w : Extension B v) → adicCompletion L w.val) := letI := Extension.fintype A K L B v calc Module.finrank (adicCompletion K v) (L ⊗[K] adicCompletion K v) _ = Module.finrank K L := by rw [TensorProduct.finrank_rightAlgebra] _ = ∑ (w : Extension B v), Ideal.ramificationIdx' v.asIdeal w.val.asIdeal * Ideal.inertiaDeg' v.asIdeal w.val.asIdeal := by rw [Ideal.sum_ramification_inertia_extensions] _ = ∑ (w : Extension B v), Module.finrank (adicCompletion K v) (adicCompletion L w.val) := Finset.sum_congr rfl fun w _ ↦ ramificationIdx_mul_inertiaDeg_eq_finrank K L w _ = Module.finrank (adicCompletion K v) ((w : Extension B v) → adicCompletion L w.val) := by rw [Module.finrank_pi_fintype (adicCompletion K v)] attribute [local instance 9999] Algebra.toModule in open scoped TensorProduct.RightActions in theorem baseChange_bijective : Function.Bijective (baseChange K L B v) := by change Function.Bijective (baseChangeRight K L B v) have hsurj := baseChangeRight_surjective K L B v refine ⟨?_, hsurj⟩ have hrank := finrank_tensorProduct_adicCompletion_eq_finrank_pi_adicCompletion K L B v rwa [← AlgHom.coe_toLinearMap, LinearMap.injective_iff_surjective_of_finrank_eq_finrank hrank] noncomputable def baseChangeAlgEquiv : L ⊗[K] v.adicCompletion K ≃ₐ[L] Π w : v.Extension B, w.1.adicCompletion L := AlgEquiv.ofBijective (baseChange K L B v) <| baseChange_bijective K L B v open scoped TensorProduct.RightActions in private lemma rightActions_smul_tmul_right {R S M : Type*} [CommSemiring R] [CommSemiring S] [Algebra R S] [AddCommMonoid M] [Module R M] (s : S) (m : M) (t : S) : s • (m ⊗ₜ[R] t) = m ⊗ₜ[R] (s * t) := by rw [TensorProduct.RightActions.smul_def, TensorProduct.comm_tmul, TensorProduct.smul_tmul', smul_eq_mul, TensorProduct.comm_symm_tmul] open scoped TensorProduct.RightActions in private lemma rightActions_smul_eq_one_tmul_mul {R S M : Type*} [CommSemiring R] [CommSemiring S] [Algebra R S] [CommSemiring M] [Algebra R M] (s : S) (x : M ⊗[R] S) : s • x = (1 ⊗ₜ[R] s) * x := by induction x with | zero => simp | add a b ha hb => rw [smul_add, mul_add, ha, hb] | tmul m t => rw [rightActions_smul_tmul_right, Algebra.TensorProduct.tmul_mul_tmul, one_mul] attribute [local instance 9999] Algebra.toModule in open scoped TensorProduct.RightActions in noncomputable def baseChangeContinuousAlgEquiv : L ⊗[K] v.adicCompletion K ≃A[L] Π w : v.Extension B, w.1.adicCompletion L := have : IsBiscalar L (v.adicCompletion K) (baseChangeAlgEquiv K L B v).toAlgHom := { map_smul₁ := fun l x => by exact (baseChange K L B v).toLinearMap.map_smul l x map_smul₂ := fun s x => by rw [rightActions_smul_eq_one_tmul_mul, map_mul] funext w rw [Pi.mul_apply, Pi.smul_apply, Algebra.smul_def] congr 1 show baseChange K L B v (1 ⊗ₜ[K] s) w = algebraMap (adicCompletion K v) (adicCompletion L w.1) s rw [baseChange_tmul_apply, map_one, one_mul] } IsModuleTopology.continuousAlgEquivOfIsBiscalar (v.adicCompletion K) (baseChangeAlgEquiv K L B v) noncomputable def integerBaseChangeLinearEquiv : B ⊗[A] v.adicCompletion K ≃ₗ[B] ∀ w : v.Extension B, w.1.adicCompletion L := (linearEquivTensorProductModuleLeft A K L B (v.adicCompletion K)).symm.trans ((baseChangeAlgEquiv K L B v).toLinearEquiv.restrictScalars B) @[simp] lemma integerBaseChangeLinearEquiv_tmul_apply (b x) : integerBaseChangeLinearEquiv K L B v (b ⊗ₜ[A] x) w = algebraMap B _ b * algebraMap _ _ x := by rw [integerBaseChangeLinearEquiv, LinearEquiv.trans_apply, linearEquivTensorProductModuleLeft_symm_tmul] rfl noncomputable def integerSubmodule (v : HeightOneSpectrum A) : Submodule A (adicCompletion K v) := let s : Submodule (adicCompletionIntegers K v) _ := (adicCompletionIntegers K v).toSubmodule s.restrictScalars A end adicCompletion namespace adicCompletionIntegers open adicCompletion variable (B) noncomputable def tensorCoe : B ⊗[A] v.adicCompletionIntegers K →ₗ[B] B ⊗[A] v.adicCompletion K := TensorProduct.AlgebraTensorModule.lTensor _ _ (Algebra.algHom A (adicCompletionIntegers K v) (adicCompletion K v)) omit [Algebra.IsIntegral A B] [IsDedekindDomain B] in @[simp] lemma tensorCoe_tmul (b : B) (x : v.adicCompletionIntegers K) : tensorCoe K B v (b ⊗ₜ x) = b ⊗ₜ x.val := rfl end adicCompletionIntegers namespace adicCompletion open Extension variable [FiniteDimensional K L] [Module.Finite A B] attribute [local instance 9999] SMulCommClass.of_commMonoid TensorProduct.isScalarTower_left IsScalarTower.right in theorem integerBaseChangeLinearEquiv_bijOn (v : HeightOneSpectrum A) : Set.BijOn (integerBaseChangeLinearEquiv K L B v) (Set.range (adicCompletionIntegers.tensorCoe K B v)) (Submodule.pi Set.univ fun (w : Extension B v) ↦ integerSubmodule L w.val) := by suffices h : ((integerBaseChangeLinearEquiv K L B v) '' (LinearMap.range (adicCompletionIntegers.tensorCoe K B v))) = Submodule.pi .univ fun (w : Extension B v) ↦ (integerSubmodule L w.val).restrictScalars A from h ▸ Equiv.bijOn_image (integerBaseChangeLinearEquiv K L B v).toEquiv apply Eq.trans _ (range_baseChange_comp_tensorAdicCompletionTo_eq_pi K L B v) rw [LinearMap.coe_range, ← Set.range_comp, ← LinearEquiv.coe_toLinearMap, ← LinearMap.coe_comp] rw [← AlgHom.coe_restrictScalars' B (baseChange K L B v), ← AlgHom.coe_comp, ← AlgHom.coe_toLinearMap] congr ext simp [baseChange_tmul_apply] end IsDedekindDomain.HeightOneSpectrum.adicCompletion
Statements phrased using this module (237)
- Restriction of decomposition groups in a tower of number fields
NumberField.PlaceDecomp.exists_restrict_decomp_surjective_of_tower1 below · depth 14 - Local norm scales the valuation by the residue degree
M4aHerbrand.valuation_norm_adicCompletion_eq_pow_inertiaDeg0 below · depth 15 - Completion preserves the lower ramification filtration
NumberField.PlaceDecomp.lowerRamificationGroup_valuationSubring_eq_adicCompletionIntegers0 below · depth 15 - Lower ramification groups of a quotient decomposition group
NumberField.PlaceDecomp.map_lowerRamificationGroup_fixedPoints_adicCompletionIntegers_eq_of_restrict6 below · depth 15 - Conductor exponent of a character composed with a cubic norm
LanglandsTunnell.TateLocal.hasConductorExponentAt_comp_norm_of_finrank_eq_three6 below · depth 16 - Local rigidity of adele base-change data
M4aHerbrand.adeleBaseChange_local_rigidity0 below · depth 16 - Decomposition group fixes exactly the lower completion
NumberField.PlaceDecomp.forall_smul_eq_iff_mem_range_adicCompletionSemialgHom4 below · depth 16 - Order of the decomposition group equals ef
NumberField.PlaceDecomp.natCard_decomp_eq_ramificationIdx_mul_inertiaDeg1 below · depth 16 - Local component of a character twisted by the idelic norm
NumberField.TateGlobal.localChar_mul_comp_idelicNorm_genuineBaseChange2 below · depth 16 - Unramified local units are norms: N(𝒪_w^×)=𝒪ᵥ^×
IsDedekindDomain.HeightOneSpectrum.Extension.exists_norm_eq_of_inertia_eq_bot3 below · depth 17 - Conductor exponent is preserved by norm when e(w∣ v)=1
LanglandsTunnell.TateLocal.hasConductorExponentAt_comp_norm_of_ramificationIdx_eq_one3 below · depth 17 - Kernel of the local component of the idelic Artin map
M4aHerbrand.idelicArtinMap_single_eq_one_iff_exists_finprod_smul_eq258 below · depth 17 - Local standard character and the local trace
NumberField.StandardAddChar.psiLocal_eq_psiLocal_trace1 below · depth 17 - Local degree one for Kummer generators that are local n-th powers
IsDedekindDomain.HeightOneSpectrum.Extension.finrank_adicCompletion_eq_one_of_pow_eq0 below · depth 18 - Trivial inertia in multi-radical extensions above v ∤ n
IsDedekindDomain.HeightOneSpectrum.Extension.inertia_eq_bot_of_forall_pow_eq0 below · depth 18 - Triviality of inertia in radical extensions away from n
IsDedekindDomain.HeightOneSpectrum.Extension.inertia_eq_bot_of_pow_eq0 below · depth 18 - Archimedean holomorphy and non-vanishing from a torus Γ-factor identity
LanglandsTunnell.RankinSelberg.differentiableOn_and_rsArchIntegral_ne_zero_of_torusPair_eq_gammaFactor5 below · depth 18 - Conductor exponent 0 is preserved by the local norm
LanglandsTunnell.TateLocal.hasConductorExponentAt_comp_norm_zero1 below · depth 18 - Norm surjects onto higher unit groups when e=1
LanglandsTunnell.TateLocal.image_norm_higherUnitsAt_eq_of_ramificationIdx_eq_one2 below · depth 18 - Invariance of the local root number under norm at a place with e=f=1
LanglandsTunnell.TateLocal.stdRootNumberAt_comp_norm_of_inertiaDeg_eq_one27 below · depth 18 - Root number under composition with an unramified quadratic norm
LanglandsTunnell.TateLocal.stdRootNumberAt_comp_norm_of_inertiaDeg_eq_two27 below · depth 18 - Idèle boxes lie in the image of the idelic norm
M4aHerbrand.AdeleBaseChange.ideleBox_le_range_idelicNorm7 below · depth 18 - Idelic Artin map sends local norms at v into H'
M4aHerbrand.idelicArtinMap_single_mem_map_subtype_of_finprod_smul_eq139 below · depth 18 - Local components of the idelic Artin map are reciprocity maps
M4aHerbrand.isLocalReciprocityMap_of_idelicArtinMap_single260 below · depth 18 - Image of Eᵥ^×: decomposition group, of 𝒪ᵥ^×: inertia group
M4aHerbrand.map_idelesTrivialOn_eq_decomp_and_map_unitIdelesTrivialOn_eq_inertia253 below · depth 18 - Finite-adelic trace is the sum of local traces above p
NumberField.AdelicTrace.traceFinHom_apply_eq_sum_trace0 below · depth 18 - Local norm index via carry classes in H²(D_w, F_w^×)
NumberField.PlaceDecomp.exists_carryClassHom_surjective_ker_eq_norms_adicCompletion101 below · depth 18 - Local norm index bound for abelian decomposition group
NumberField.PlaceDecomp.exists_fin_forall_exists_finprod_smul_eq_mul_of_isMulCommutative_decomp107 below · depth 18 - Level-n units of Eᵥ are norms from the Gⁿ layer
NumberField.PlaceDecomp.exists_forall_upperRamificationGroup_smul_eq_and_finprod_quotient_smul_eq_of_valuation_sub_one_le30 below · depth 18 - Finite support of the GL₃ Whittaker type integrals
LanglandsTunnell.CubicInduction.exists_finset_typeIntegral_eq_zero_of_eq_coefficientFn_of_le_conductorExponentAt23 below · depth 19 - Vanishing of type integrals outside finitely many torus shells
LanglandsTunnell.CubicInduction.exists_finset_typeIntegral_eq_zero_of_forall_exists_finset_eq_zero_betaFinCS0 below · depth 19 - Central character of cubic induction data at unramified primes
LanglandsTunnell.CubicInduction.exists_localChar_centralChar_eq_finprod_mul_of_not_isRamifiedIn_of_isCubicInductionDataOn274 below · depth 19 - Half-plane integrability of pure-tensor Rankin–Selberg cell integrands
LanglandsTunnell.RankinSelberg.exists_forall_integrable_rsFinCellIntegrand_pureTensorTerm_dual_and_hybrid_of_depth_twisted_torusFinite_central_growth_of_principalLevel_of_gammaHyp136 below · depth 19 - Normalised K₁(p^ℓ)-invariant vector with mirabolic bump support
LanglandsTunnell.RankinSelberg.exists_mem_gl3CyclicSubspace_congruenceK1_invariant_iotaGL_eq_bump_of_localZeta31_fe_one107 below · depth 19 - Torus finiteness for the cyclic space of a deep twist
LanglandsTunnell.RankinSelberg.forall_mem_gl3CyclicSubspace_twist_det_torusFinite_of_principalLevel_of_admissible_of_deepTwist12 below · depth 19 - Value form of the local GL₂timesGL₃ functional equation at p
LanglandsTunnell.RankinSelberg.forall_mem_span_rsLocalIntegral_dual_eq_stdRootNumber_mul_of_localZeta31_identified_of_torusFinite_of_centralChar_of_gauge_of_admissible_of_principalNormPin_adm_gamma_bump_levelShift_global514 below · depth 19 - Determinant twists cancel in the local GL₃× GL₂ Rankin–Selberg data
LanglandsTunnell.RankinSelberg.gl3CyclicSubspace_detTwist_and_rsIntegrand_detTwist_eq0 below · depth 19 - Conductor exponent of μ∘ N bounded by e· a
LanglandsTunnell.TateLocal.exists_hasConductorExponentAt_comp_norm_and_le_ramificationIdx_mul0 below · depth 19 - Local criterion for membership in the idelic norm group
M4aHerbrand.AdeleBaseChange.mem_range_idelicNorm_of_forall_exists_norm_eq2 below · depth 19 - Norm-coset representatives descend below the decomposition field
NumberField.PlaceDecomp.exists_fin_forall_exists_finprod_smul_eq_mul_of_forall_smul_algebraMap_eq6 below · depth 19 - Cyclic decomposition group: local norm index at most |D_w|
NumberField.PlaceDecomp.exists_fin_forall_exists_finprod_smul_eq_mul_of_isCyclic_decomp102 below · depth 19 - Sub-multiplicativity of local norm classes in a tower
NumberField.PlaceDecomp.exists_fin_mul_forall_exists_finprod_smul_eq_of_tower6 below · depth 19 - Higher units are norms from a prime-degree layer beyond the jump
NumberField.PlaceDecomp.exists_finprod_smul_eq_of_valuation_sub_one_le_of_jump_lt_of_prime_card_decomp10 below · depth 19 - Completion at a finite place as a finite layer of ℚ̄_q
NumberField.PlaceDecomp.exists_localLevel_ringEquiv_adicCompletion0 below · depth 19 - Local norm onto higher units at an unramified place
NumberField.PlaceDecomp.forall_exists_finprod_smul_eq_and_of_ramificationIdx_eq_one7 below · depth 19 - Herbrand's theorem for upper ramification groups in a tower
NumberField.PlaceDecomp.map_restrictNormalHom_upperRamificationGroup_eq20 below · depth 19 - Transitivity of the Herbrand function in a tower of number fields
NumberField.PlaceDecomp.valuationSubring_herbrandPhi_eq_herbrandPhi_under_herbrandPhi18 below · depth 19 - Place transport commutes with the canonical embeddings Eᵥ → K_w
NumberField.PlaceTransport.transport_adicCompletionSemialgHom0 below · depth 19 - Completion maps compose in a tower of number fields
IsDedekindDomain.HeightOneSpectrum.adicCompletionSemialgHom_comp_of_tower0 below · depth 20 - Transitivity of restriction of finite places in a tower
IsDedekindDomain.HeightOneSpectrum.under_under_ringOfIntegers0 below · depth 20 - Deep-twist product law for priced local root numbers above p
LanglandsTunnell.Converse.finprod_stdRootNumberAt_twist_mul_twist_eq_sq_of_le_floor22 below · depth 20 - Pinned conductor exponent unchanged by a shallow norm twist
LanglandsTunnell.Converse.pinnedExp_comp_idelicNorm_mul_eq_pinnedExp_of_hasConductorExponentAt_le_of_depth_floor3 below · depth 20 - Whittaker functions vanish deep in the GL₂-torus
LanglandsTunnell.CubicInduction.exists_forall_apply_iotaGL_mul_eq_zero_of_lt_neg4 below · depth 20 - Type integrals of deep GL₃ Whittaker coefficients vanish eventually
LanglandsTunnell.CubicInduction.exists_forall_typeIntegral_eq_zero_of_le_fst7 below · depth 20 - Vanishing of GL₃ type integrals for large n₂
LanglandsTunnell.CubicInduction.exists_forall_typeIntegral_eq_zero_of_le_snd11 below · depth 20 - Uniform smoothness of a GL₃ principal-series coefficient under right translation
LanglandsTunnell.CubicInduction.exists_isOpen_forall_apply_mul_iotaGL_mul_eq1 below · depth 20 - Global realisation of local Rankin–Selberg pairs at p
LanglandsTunnell.RankinSelberg.exists_factor_fundamentalDomain_forall_rsGlobalIntegral_realisation_member_twisted_of_finiteFamily_arch_of_archNonvanishing467 below · depth 20 - Cut-off remainder integrands of the dual finite cell are integrable
LanglandsTunnell.RankinSelberg.exists_forall_integrable_cutoff_remainder_mul_finprod_away113 below · depth 20 - Local GL₃× GL₂ gamma factor from a global realisation
LanglandsTunnell.RankinSelberg.exists_forall_mem_span_rsLocalIntegral_dual_mul_eq_mul_of_rsGlobalIntegral_realisation6 below · depth 20 - A non-vanishing rational local Rankin–Selberg pair at a level prime
LanglandsTunnell.RankinSelberg.exists_mem_rsLocalIntegral_ne_zero_and_rational_member_twisted_of_finiteFamily_arch_deep58 below · depth 20 - Finiteness, continuity and unit phase of dual Whittaker products
LanglandsTunnell.RankinSelberg.finite_mulSupport_and_continuous_and_exists_phase_finprod_dualWhittakerFn3_away1 below · depth 20 - Pair stability of the GL₃timesGL₂ local functional equation
LanglandsTunnell.RankinSelberg.forall_mem_span_rsLocalIntegral_dual_eq_mul_of_forall_localZeta31_fe_of_deepTwist_of_principalLevel_of_admissible_of_gammaFactor_of_forall_localZeta31_fe_of_bump_levelShift_global489 below · depth 20 - Swapping the S_Q-slots: dual and hybrid pure-tensor integrability
LanglandsTunnell.RankinSelberg.integrable_pureTensorTerm_dual_and_hybrid_of_integrable_cutoff_of_forall_lintegral_lt_top15 below · depth 20 - Local Artin map computes carry classes on an enlarged layer
M4aHerbrand.exists_mk_localArtin_eq_pow_and_infNatTrans_carryFun_eq_smul_of_enlargedLayer220 below · depth 20 - Local norm as product over the decomposition group
NumberField.PlaceDecomp.adicCompletionSemialgHom_norm_eq_finprod_smul3 below · depth 20 - Compatible q-adic models of completions in a tower of places
NumberField.PlaceDecomp.exists_localLevel_ringEquiv_adicCompletion_tower2 below · depth 20 - Restriction of an idele class character to a subfield
NumberField.TateGlobal.exists_isIdeleClassChar_continuous_localChar_eq_finprod_localChar_extension_algebraMap0 below · depth 20 - Unramified local characters above an unramified prime
NumberField.TateGlobal.finprod_localChar_extension_algebraMap_eq_finprod_apply_uniformizerIdele_zpow_of_ramificationIdx_eq_one_of_isUnramifiedCharAt0 below · depth 20 - Local central character at -1 and at pinning elements
LanglandsTunnell.CubicInduction.localChar_centralChar_neg_one_and_pin_eq_finprod_of_eq_finprod_mul_of_isCubicInductionDataOn7 below · depth 21 - Integrability of the translated split dual finite cell integrand
LanglandsTunnell.RankinSelberg.exists_forall_integrable_translate_rsFinCellIntegrand_dual_split_of_dualFactor_phase109 below · depth 21 - Purified p-slot splitting of Whittaker coefficients of p-adic translates
LanglandsTunnell.RankinSelberg.exists_frozen_forall_sum_translate_purified_whittakerCoefficient_eq_mul_pSlot_of_finiteFamily_arch351 below · depth 21 - p-slot factorisation of GL₃ Whittaker functions along ι
LanglandsTunnell.RankinSelberg.exists_frozen_forall_sum_translate_whittaker_iota_eq_mul_pSlot_of_finiteFamily_arch42 below · depth 21 - Local Rankin–Selberg integrals evaluating a finite Whittaker family
LanglandsTunnell.RankinSelberg.exists_mem_gl3CyclicSubspace_forall_rsLocalIntegral_eq_mul_apply_of_finite11 below · depth 21 - Level 3B bump vector in a twisted principal-series Whittaker model
LanglandsTunnell.RankinSelberg.exists_mem_gl3CyclicSubspace_twist_coefficientFn_principalSeries3_congruenceK1_invariant_iotaGL_bump_of_pos_of_level157 below · depth 21 - Non-degenerate test pair for the local GL₃× GL₂ integral
LanglandsTunnell.RankinSelberg.exists_mem_span_forall_rsLocalIntegral_eq_const_ne_zero_of_isGL3PsiWhittakerFn13 below · depth 21 - A principal-series GL₃ Whittaker model with prescribed central character
LanglandsTunnell.RankinSelberg.exists_principalSeries3_whittaker_deepTwist_centralChar_of_higherUnitsAt_unitary_shallow12 below · depth 21 - Non-vanishing far right of a reference Rankin–Selberg integral
LanglandsTunnell.RankinSelberg.exists_pureTranslates_combination_forall_rsGlobalIntegral_ne_zero_member_twisted_of_finiteFamily_arch_of_archNonvanishing463 below · depth 21 - Rationality of local Rankin–Selberg integrals for GL₃ principal series
LanglandsTunnell.RankinSelberg.exists_rational_rsLocalIntegral_and_dual_of_principalSeries363 below · depth 21 - Unisolvence points, reference points and cut-off subgroups at S_Q
LanglandsTunnell.RankinSelberg.exists_unisolvence_refPoint_cutoff_of_linearIndependent_slots1 below · depth 21 - Multiplicativity of the GL₃timesGL₂ local γ-factor in principal series
LanglandsTunnell.RankinSelberg.forall_mem_span_rsLocalIntegral_dual_eq_mul_of_forall_localZeta31_fe_of_principalSeries273 below · depth 21 - Deep twist: GL₃timesGL₂ local integrals are Laurent polynomials
LanglandsTunnell.RankinSelberg.forall_mem_span_rsLocalIntegral_eq_laurent_of_deepTwist_of_principalLevel_of_admissible20 below · depth 21 - Pair stability at (3,2): transfer of the cleared functional equation
LanglandsTunnell.RankinSelberg.forall_rsLocalIntegral_clearedFE_of_forall_rsLocalIntegral_clearedFE_of_centralChar_eq_of_deepTwist_pairStability32_of_bump59 below · depth 21 - Multiplicativity of the local GL₃× GL₂ functional equation
LanglandsTunnell.RankinSelberg.forall_rsLocalIntegral_clearedFE_prod_of_principalSeries3_of_forall_torusZeta_fe_multiplicativity3_ed3305 below · depth 21 - Measurability and isolation identity for pure-tensor remainders
LanglandsTunnell.RankinSelberg.measurable_remainder_and_dualFactor_translate_mul_prod_eq_of_pureTensor_expansion2 below · depth 21 - Transport of a character's local pin along the norm, e=1
LanglandsTunnell.TateLocal.comp_norm_apply_eq_psiLocal_algebraMap_mul_sub_one_of_ramificationIdx_eq_one2 below · depth 21 - Weighted conductor exponents above p sum to 3c
LanglandsTunnell.TateLocal.exists_forall_finsum_inertiaDeg_mul_conductorExponent_add_addCharLevel_eq7 below · depth 21 - Root number of a character composed with an unramified cubic norm
LanglandsTunnell.TateLocal.stdRootNumberAt_comp_norm_of_inertiaDeg_eq_three33 below · depth 21 - Local fundamental classes along a tower of decomposition groups
NumberField.PlaceDecomp.exists_isLocalFundamentalClass_map_eq_natCard_ker_smul_of_tower86 below · depth 21 - Fibre-sum spectral comparison for twisted GL₂ at prime degree
AutomorphicForm.fibreSum_twistedCutTrace_eq_const_mul_fibreSum_cutTrace_of_docks_ed23,000 below · depth 22 - Gauge majorant for cyclic translates of principal-series Whittaker coefficients
LanglandsTunnell.CubicInduction.exists_gauge_of_mem_gl3CyclicSubspace_coefficientFn_principalSeries323 below · depth 22 - Level-pᵈ Whittaker vector in a unitary principal series of GL₃
LanglandsTunnell.CubicInduction.exists_isWhittakerFunctional3_coefficientFn_ne_zero_forall_deepTwist_eq_of_forall_higherUnitsAt_of_pos11 below · depth 22 - Unramified twist shifts the local (3,1) functional equation
LanglandsTunnell.CubicInduction.forall_localZeta31_fe_of_twist_modulus_cpow0 below · depth 22 - Haar scaling on the unipotent subgroup: dilating the integral ball
LanglandsTunnell.CubicInduction.measure_unipotentEntry_preimage_mul_eq0 below · depth 22 - Unipotent invariance of the dual Rankin–Selberg integrand
LanglandsTunnell.CubicInduction.mul_dual_eq_of_isGL3PsiWhittakerFn_inv_of_unipotent0 below · depth 22 - Uncountable non-vanishing of the cut finite Rankin–Selberg factor
LanglandsTunnell.RankinSelberg.exists_finTranslate_not_countable_rsFinIntegral_indicator_ne_zero_of_purifier_of_finiteFamily_arch93 below · depth 22 - Local GL₃× GL₁ functional equation for deeply twisted principal series
LanglandsTunnell.RankinSelberg.exists_forall_localZeta31_fe_one_twist_coefficientFn_principalSeries3_of_exactConductor59 below · depth 22 - Frozen complements: explicit p-slot splitting of GL₃ Whittaker functions
LanglandsTunnell.RankinSelberg.exists_frozen_forall_sum_translate_whittaker_iota_eq_mul_pSlot_of_finiteFamily_arch_explicit42 below · depth 22 - Bump test vector for the local GL₃× GL₂ Rankin–Selberg integral
LanglandsTunnell.RankinSelberg.exists_mem_gl3CyclicSubspace_forall_rsLocalIntegral_eq_mul_setIntegral_translate9 below · depth 22 - Factorisation of the purified reference Rankin–Selberg integral
LanglandsTunnell.RankinSelberg.exists_ne_zero_forall_rsGlobalIntegral_reference_eq_mul_rsArchIntegral_mul_rsFinIntegral_indicator_mul_of_finiteFamily_arch410 below · depth 22 - A p-adic purifier with pure-tensor Whittaker coefficient
LanglandsTunnell.RankinSelberg.exists_purifier_whittakerCoefficient_eq_mul_pSlot_of_finiteFamily_arch25 below · depth 22 - Rationality of principal-series Rankin–Selberg local integrals at p
LanglandsTunnell.RankinSelberg.exists_rational_rsLocalIntegral_and_dual_of_jacquetWhittaker3_ed257 below · depth 22 - Non-degenerate local datum realising pair 2's cleared functional equation
LanglandsTunnell.RankinSelberg.exists_rsLocalIntegral_clearedFE_datum_of_centralChar_eq_of_deepTwist_pairStability32_of_bump56 below · depth 22 - Cleared Rankin–Selberg functional equation for one Jacquet–Whittaker vector
LanglandsTunnell.RankinSelberg.forall_rsLocalIntegral_clearedFE_prod_of_jacquetWhittaker3_of_forall_torusZeta_fe301 below · depth 22 - Local invariants unchanged by inflation, numerical form
M4aHerbrand.div_natCard_decomp_eq_div_natCard_decomp_under_of_map_map_eq_zsmul_of_isScalarTower110 below · depth 22 - Hecke word comparison of twisted and untwisted cut traces
AutomorphicForm.exists_atoms_forall_exists_noAtomicMass_heckeWordSum_twistedCutTrace_sub_finrank_mul_const_mul_heckeWordSum_cutTrace_eq2,972 below · depth 23 - Formal base change of an Eisenstein Hecke table is Eisenstein
AutomorphicForm.exists_eisensteinTableOf_eq_formalBaseChange_eisensteinTableOf6 below · depth 23 - Fibre-sum vanishing from monomial identities at places of record
AutomorphicForm.forall_finset_fibreSum_sub_const_mul_fibreSum_add_eq_zero_of_forall_places_exists_noAtomicMass_wordSum_eq1 below · depth 23 - Satake data constant on fibres over K, given word-shift
AutomorphicForm.satakeData_eq_of_under_eq_of_twistedCutTrace_ne_zero_of_heckeWordShift0 below · depth 23 - Absolute summability of Siegel-pinned cut traces on GL₂
AutomorphicForm.summable_norm_cutTrace_of_isUnitFactorizableOfTypeAt_of_coversModCentre96 below · depth 23 - Satake table of a principal-level cuspidal class lies in a box
AutomorphicForm.table_mem_box_of_mem_cuspClasses_siegel119 below · depth 23 - Hecke tables of cuspidal slab classes lie in the box
AutomorphicForm.table_mem_box_of_mem_cuspClasses_slab18 below · depth 23 - Global representatives for square classes of Kᵥ^×
IsDedekindDomain.HeightOneSpectrum.exists_algebraMap_eq_mul_sq_adicCompletion0 below · depth 23 - Unique place above a local non-square in a quadratic field
IsDedekindDomain.HeightOneSpectrum.exists_unique_extension_and_algEquiv_adjoinRoot_of_not_isSquare1 below · depth 23 - Twisted norms in K'ᵥ⊗_{K_v}L_w at unramified places
IsDedekindDomain.HeightOneSpectrum.exists_units_prod_tensor_map_iterate_eq_tmul_one_of_finrank_dvd_valuation_norm10 below · depth 23 - Twisted translated Jacquet–Whittaker function: admissible, unitary central, gauged
LanglandsTunnell.CubicInduction.exists_detTwist_jacquetWhittaker3_translate_whittaker_smooth_central_admissible_gauge23 below · depth 23 - Local integrability of the Rankin–Selberg integrand at p
LanglandsTunnell.RankinSelberg.exists_forall_integrable_iotaGL_mul_of_mem_span_localSpaceAt_of_mem_gl3CyclicSubspace_twist_of_finiteFamily_arch40 below · depth 23 - Non-vanishing of a local GL₃× GL₂ Rankin–Selberg integral
LanglandsTunnell.RankinSelberg.exists_mem_gl3CyclicSubspace_forall_rsLocalIntegral_ne_zero_of_ne_zero13 below · depth 23 - Test vectors with equal local integrals, one constant
LanglandsTunnell.RankinSelberg.exists_testVectors_rsLocalIntegral_eq_and_eq_const_of_centralChar_eq_of_deepTwist_of_bump55 below · depth 23 - Local GL₃× GL₂ cleared functional equation from torus equations
LanglandsTunnell.RankinSelberg.forall_rsLocalIntegral_clearedFE_prod_of_jacquetWhittaker3_of_forall_torusZeta_fe_core287 below · depth 23 - Inflation commutes with taking the W-component of idèles
M4aHerbrand.map_decomp_map_ideles_eq_map_map_decomp_under_of_isScalarTower0 below · depth 23 - Hecke generator inverse double-coset relation at level U₁(N)
NumberField.AdelicLevel.exists_heckeGen_inv_eq_centralScalar_mul_mul_heckeGen_mul_levelOne1 below · depth 23 - Double-coset inversion relation for Hecke generators at principal level
NumberField.AdelicLevel.exists_heckeGen_inv_eq_centralScalar_mul_mul_heckeGen_mul_principalLevel1 below · depth 23 - Per-word twisted spectral comparison from the remainder rows
AutomorphicForm.heckeWordSum_twistedCutTrace_sub_const_mul_heckeWordSum_cutTrace_add_atoms_eq_of_remainder_rows_of_comparison194 below · depth 24 - Completion commutes with base change along a compositum
IsDedekindDomain.HeightOneSpectrum.exists_tensor_adicCompletion_algEquiv_of_baseChange0 below · depth 24 - A field base change M⊗_F Fᵥ forces a unique place above v
IsDedekindDomain.HeightOneSpectrum.exists_unique_extension_algEquiv_adicCompletion_of_isField_tensor0 below · depth 24 - Inertia degree divides the valuation of x after base change
IsDedekindDomain.HeightOneSpectrum.exists_valued_eq_exp_inertiaDeg_mul_of_valued_norm_eq_of_baseChange3 below · depth 24 - Unramified base change: e=1 and f∣[L:K]
IsDedekindDomain.HeightOneSpectrum.ramificationIdx_eq_one_and_inertiaDeg_dvd_of_baseChange_of_unramified0 below · depth 24 - Cleared local Rankin–Selberg functional equation at the family centre
LanglandsTunnell.RankinSelberg.exists_cleared_rsLocalIntegral_fe_of_forall_lt_cleared_fe_finsum_cpow_of_isGL3PsiWhittakerFn14 below · depth 24 - Cleared local GL₃× GL₂ integrals along a flat twist family
LanglandsTunnell.RankinSelberg.exists_forall_lt_rsLocalIntegral_jacquetWhittaker3_twistFamily_mul_centralTate_eq_cpow_mul_eval144 below · depth 24 - Jacquet–Shalika test vectors with non-vanishing unit-shell pairing
LanglandsTunnell.RankinSelberg.exists_mem_span_schwartzBruhat_fourier_unitShell_pairing_ne_zero_of_deepTwist_of_conductor_le40 below · depth 24 - Dual Rankin–Selberg integral of a smoothed GL₃ bump vector
LanglandsTunnell.RankinSelberg.exists_pos_forall_rsLocalIntegral_dual_longWeyl3_smoothedBump_eq_mul_setIntegral_unitShell12 below · depth 24 - Cleared GL₃× GL₂ functional equation in the positive chamber
LanglandsTunnell.RankinSelberg.forall_rsLocalIntegral_clearedFE_prod_of_jacquetWhittaker3_of_forall_torusZeta_fe_core_of_chamber270 below · depth 24 - Equal smoothed Whittaker integrals along ι(GL₂)w₃ at level K₁(p^f)
LanglandsTunnell.RankinSelberg.integral_integral_iotaGL_mul_longWeyl3_mul_upperUnipotent3_eq_of_congruenceK1_of_centralChar_of_iotaGL_bump1 below · depth 24 - Unipotent smoothing of a K₁(p^f)-invariant function on GL₃
LanglandsTunnell.RankinSelberg.integral_integral_upperUnipotent3_translate_mem_gl3CyclicSubspace_of_congruenceK1_invariant0 below · depth 24 - Local norms in an unramified extension of completions
LanglandsTunnell.TateLocal.mem_range_unitsMap_norm_iff_inertiaDeg_dvd_of_ramificationIdx_eq_one3 below · depth 24 - Hecke generator inverse in a central-times-level double coset
NumberField.AdelicLevel.exists_heckeGen_inv_eq_centralScalar_mul_mul_heckeGen_mul_of_forall_finEmbed_localEmbed_mem0 below · depth 24 - Absolute summability of cut traces over Siegel-pinned cusp classes
AutomorphicForm.summable_norm_cutTrace_of_isUnitFactorizableOfTypeAt_of_coversModCentre_of_subset96 below · depth 25 - Residue degree one above an inert place in M=LK'
IsDedekindDomain.HeightOneSpectrum.inertiaDeg_eq_one_of_inertiaDeg_eq_two_of_finrank_eq_two_of_baseChange0 below · depth 25 - Kirillov bump in a twisted Whittaker translate span
LanglandsTunnell.RankinSelberg.exists_mem_span_twist_det_kirillov_eq_indicator_shell_of_localLevelOne8 below · depth 25 - Rationality of the dual GL₂× GL₂ Rankin–Selberg integral
LanglandsTunnell.RankinSelberg.exists_rsLocalIntegral22_dual_mul_one_sub_eq_cpow_mul_eval_of_principalSeries2_of_forall_torusZeta_polynomial40 below · depth 25 - Rationality of the local GL₂timesGL₂ Rankin–Selberg integral
LanglandsTunnell.RankinSelberg.exists_rsLocalIntegral22_mul_one_sub_eq_cpow_mul_eval_of_principalSeries2_of_forall_torusZeta_polynomial39 below · depth 25 - Unfolded GL₃× GL₂ Rankin–Selberg integrals, primal and dual
LanglandsTunnell.RankinSelberg.exists_rsLocalIntegral_jacquetWhittaker3_iotaGL_eq_sum_and_dual_eq_mul_sum_of_chamber_ed2111 below · depth 25 - Cleared local GL₃× GL₂ Rankin–Selberg integrals in a chamber
LanglandsTunnell.RankinSelberg.exists_rsLocalIntegral_jacquetWhittaker3_mul_centralTate_eq_cpow_mul_eval_and_dual_of_chamber141 below · depth 25 - Whittaker functions agreeing on ι(GL₂) agree on ι(GL₂)N₃Z₃K₁
LanglandsTunnell.RankinSelberg.forall_apply_iotaGL_mul_upperUnipotent3_mul_scalar_mul_eq_of_forall_apply_iotaGL_eq0 below · depth 25 - Godement–Jacquet zeta integrals for GL₂: cleared functional equation
LanglandsTunnell.RankinSelberg.forall_godementZeta2_clearedFE_of_forall_torusZeta_fe167 below · depth 25 - Cleared GL₂× GL₂ local functional equation: principal series case
LanglandsTunnell.RankinSelberg.forall_rsLocalIntegral22_schwartz_clearedFE_of_principalSeries2_of_forall_torusZeta_fe_ed2219 below · depth 25 - Schwartz–Bruhat cut-off kernels with prescribed local Fourier transforms
LanglandsTunnell.RankinSelberg.isSchwartzBruhat_and_tateFourier_shellKernels_of_conductor_le15 below · depth 25 - Local dual Rankin–Selberg integrand of a smoothed bump vector
LanglandsTunnell.RankinSelberg.rsIntegrand_dual_longWeyl3_smoothedBump_invariant_support_bound_and_bigCell_eq3 below · depth 25 - Non-vanishing of a unit-shell Whittaker–Fourier pairing
LanglandsTunnell.RankinSelberg.setIntegral_unitShell_pairing_ne_zero_of_kirillov_shell_of_deepTwist_of_conductor_le34 below · depth 25 - Gauge bound for an admissible local Whittaker function on the torus
AutomorphicForm.WhittakerModel.exists_norm_diagUnits2_mul_le_and_eq_zero_of_admissible_of_centralChar4 below · depth 26
… and 87 more statements (search for the module name to find them).