import Definitions.Def_AutomorphicForm_TwistedOrbital import Definitions.Def_M4aHerbrand_GenuineDescent set_option autoImplicit false open NumberField IsDedekindDomain TensorProduct open scoped TensorProduct.RightActions noncomputable section namespace AutomorphicForm section Projections variable (K : Type) [Field K] [NumberField K] def adeleArchAlgHom : AdeleRing (π“ž K) K →ₐ[K] InfiniteAdeleRing K := { AdelicLevel.adeleArch (π“ž K) K with commutes' := fun _ => rfl } def adelePlaceAlgHom (v : HeightOneSpectrum (π“ž K)) : AdeleRing (π“ž K) K →ₐ[K] v.adicCompletion K := { (AdelicLevel.finAdeleEval (π“ž K) K v).comp (AdelicLevel.adeleFin (π“ž K) K) with commutes' := fun _ => rfl } @[simp] theorem adeleArchAlgHom_apply (a : AdeleRing (π“ž K) K) : adeleArchAlgHom K a = a.1 := rfl @[simp] theorem adelePlaceAlgHom_apply (v : HeightOneSpectrum (π“ž K)) (a : AdeleRing (π“ž K) K) : adelePlaceAlgHom K v a = a.2 v := rfl variable (L : Type) [Field L] [NumberField L] [Algebra K L] def tensorArchHom : L βŠ—[K] AdeleRing (π“ž K) K →ₐ[K] L βŠ—[K] InfiniteAdeleRing K := Algebra.TensorProduct.map (AlgHom.id K L) (adeleArchAlgHom K) def tensorPlaceHom (v : HeightOneSpectrum (π“ž K)) : L βŠ—[K] AdeleRing (π“ž K) K →ₐ[K] L βŠ—[K] v.adicCompletion K := Algebra.TensorProduct.map (AlgHom.id K L) (adelePlaceAlgHom K v) omit [NumberField L] in @[simp] theorem tensorArchHom_tmul (l : L) (a : AdeleRing (π“ž K) K) : tensorArchHom K L (l βŠ—β‚œ a) = l βŠ—β‚œ a.1 := rfl omit [NumberField L] in @[simp] theorem tensorPlaceHom_tmul (v : HeightOneSpectrum (π“ž K)) (l : L) (a : AdeleRing (π“ž K) K) : tensorPlaceHom K L v (l βŠ—β‚œ a) = l βŠ—β‚œ a.2 v := rfl def tensorArch : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K) β†’* GL (Fin 2) (L βŠ—[K] InfiniteAdeleRing K) := Matrix.GeneralLinearGroup.map (tensorArchHom K L).toRingHom def tensorPlace (v : HeightOneSpectrum (π“ž K)) : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K) β†’* GL (Fin 2) (L βŠ—[K] v.adicCompletion K) := Matrix.GeneralLinearGroup.map (tensorPlaceHom K L v).toRingHom omit [NumberField L] in theorem tensorArch_apply (x : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)) (i j : Fin 2) : (tensorArch K L x : Matrix (Fin 2) (Fin 2) _) i j = tensorArchHom K L ((x : Matrix (Fin 2) (Fin 2) _) i j) := rfl omit [NumberField L] in theorem tensorPlace_apply (v : HeightOneSpectrum (π“ž K)) (x : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)) (i j : Fin 2) : (tensorPlace K L v x : Matrix (Fin 2) (Fin 2) _) i j = tensorPlaceHom K L v ((x : Matrix (Fin 2) (Fin 2) _) i j) := rfl def baseChangeEquiv : L βŠ—[K] AdeleRing (π“ž K) K ≃+* AdeleRing (π“ž L) L := (Algebra.TensorProduct.comm K L (AdeleRing (π“ž K) K)).toRingEquiv.trans (M4aHerbrand.Bridge.genuineRingEquiv K L) def baseChangeGL : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K) β†’* GL (Fin 2) (AdeleRing (π“ž L) L) := Matrix.GeneralLinearGroup.map (baseChangeEquiv K L).toRingHom theorem baseChangeGL_eq : baseChangeGL K L = Matrix.GeneralLinearGroup.map (((Algebra.TensorProduct.comm K L (AdeleRing (π“ž K) K)).toRingEquiv.trans (M4aHerbrand.Bridge.genuineRingEquiv K L)).toRingHom) := rfl theorem baseChangeEquiv_tmul_fst (l : L) (a : AdeleRing (π“ž K) K) : (baseChangeEquiv K L (l βŠ—β‚œ a)).1 = archIdent K L (l βŠ—β‚œ a.1) := by obtain ⟨a₁, aβ‚‚βŸ© := a rfl theorem baseChangeEquiv_tmul_one (l : L) : baseChangeEquiv K L (l βŠ—β‚œ 1) = algebraMap L (AdeleRing (π“ž L) L) l := M4aHerbrand.Bridge.genuineRingEquiv_one_tmul K L l theorem baseChangeEquiv_one_tmul (a : AdeleRing (π“ž K) K) : baseChangeEquiv K L (1 βŠ—β‚œ a) = M4aHerbrand.Bridge.genuineΞ² K L a := M4aHerbrand.Bridge.genuineRingEquiv_tmul_one K L a theorem fst_baseChangeEquiv (z : L βŠ—[K] AdeleRing (π“ž K) K) : (baseChangeEquiv K L z).1 = archIdent K L (tensorArchHom K L z) := by induction z using TensorProduct.induction_on with | zero => simp only [map_zero]; rfl | tmul l a => rw [baseChangeEquiv_tmul_fst, tensorArchHom_tmul] | add x y hx hy => rw [map_add, map_add, map_add, ← hx, ← hy]; rfl theorem semiLocalEval_algebraMap (v : HeightOneSpectrum (π“ž K)) (l : L) : semiLocalEval K L v (algebraMap L (FiniteAdeleRing (π“ž L) L) l) = l βŠ—β‚œ 1 := by show (HeightOneSpectrum.adicCompletion.baseChangeAlgEquiv K L (π“ž L) v).symm (fun w : v.Extension (π“ž L) => (algebraMap L (FiniteAdeleRing (π“ž L) L) l) w.1) = l βŠ—β‚œ 1 rw [AlgEquiv.symm_apply_eq] have h : (fun w : v.Extension (π“ž L) => (algebraMap L (FiniteAdeleRing (π“ž L) L) l) w.1) = algebraMap L (Ξ  w : v.Extension (π“ž L), w.1.adicCompletion L) l := by funext w; rfl rw [h, show l βŠ—β‚œ[K] (1 : v.adicCompletion K) = algebraMap L (L βŠ—[K] v.adicCompletion K) l from rfl, AlgEquiv.commutes] theorem semiLocalEval_finiteConorm (v : HeightOneSpectrum (π“ž K)) (a : FiniteAdeleRing (π“ž K) K) : semiLocalEval K L v (M4aHerbrand.Bridge.finiteConorm (π“ž K) K L (π“ž L) a) = 1 βŠ—β‚œ a v := by show (HeightOneSpectrum.adicCompletion.baseChangeAlgEquiv K L (π“ž L) v).symm (fun w : v.Extension (π“ž L) => (M4aHerbrand.Bridge.finiteConorm (π“ž K) K L (π“ž L) a) w.1) = 1 βŠ—β‚œ a v rw [AlgEquiv.symm_apply_eq] funext w obtain ⟨w, rfl⟩ := w rw [M4aHerbrand.Bridge.finiteConorm_apply] show _ = HeightOneSpectrum.adicCompletion.baseChange K L (π“ž L) _ (1 βŠ—β‚œ[K] a _) ⟨w, rfl⟩ rw [HeightOneSpectrum.adicCompletion.baseChange_tmul_apply, map_one, one_mul] rfl theorem semiLocalEval_snd_baseChangeEquiv (v : HeightOneSpectrum (π“ž K)) (z : L βŠ—[K] AdeleRing (π“ž K) K) : semiLocalEval K L v (baseChangeEquiv K L z).2 = tensorPlaceHom K L v z := by have hsnd : βˆ€ p q : AdeleRing (π“ž L) L, (p * q).2 = p.2 * q.2 := fun _ _ => rfl have hadd : βˆ€ p q : AdeleRing (π“ž L) L, (p + q).2 = p.2 + q.2 := fun _ _ => rfl induction z using TensorProduct.induction_on with | zero => rw [map_zero, map_zero, show (0 : AdeleRing (π“ž L) L).2 = 0 from rfl, map_zero] | tmul l a => have h : l βŠ—β‚œ[K] a = (l βŠ—β‚œ[K] (1 : AdeleRing (π“ž K) K)) * ((1 : L) βŠ—β‚œ[K] a) := by rw [Algebra.TensorProduct.tmul_mul_tmul, mul_one, one_mul] rw [h, map_mul (baseChangeEquiv K L), hsnd, map_mul (semiLocalEval K L v), map_mul (tensorPlaceHom K L v), baseChangeEquiv_tmul_one, baseChangeEquiv_one_tmul, M4aHerbrand.Bridge.genuineΞ²_snd] show semiLocalEval K L v (algebraMap L (FiniteAdeleRing (π“ž L) L) l) * semiLocalEval K L v (M4aHerbrand.Bridge.finiteConorm (π“ž K) K L (π“ž L) a.2) = _ rw [semiLocalEval_algebraMap, semiLocalEval_finiteConorm, tensorPlaceHom_tmul, tensorPlaceHom_tmul, show (1 : AdeleRing (π“ž K) K).2 v = 1 from rfl] | add x y hx hy => rw [map_add (baseChangeEquiv K L), hadd, map_add (semiLocalEval K L v), map_add (tensorPlaceHom K L v), hx, hy] theorem glArch_baseChangeGL (x : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)) : AdelicLevel.glArch (π“ž L) L (baseChangeGL K L x) = archIdentGL K L (tensorArch K L x) := by refine Matrix.GeneralLinearGroup.ext fun i j => ?_ exact fst_baseChangeEquiv K L _ theorem semiLocalComponent_glFin_baseChangeGL (v : HeightOneSpectrum (π“ž K)) (x : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)) : semiLocalComponent K L v (AdelicLevel.glFin (π“ž L) L (baseChangeGL K L x)) = tensorPlace K L v x := by refine Matrix.GeneralLinearGroup.ext fun i j => ?_ exact semiLocalEval_snd_baseChangeEquiv K L v _ omit [NumberField L] in theorem tensorArchHom_includeRight (a : AdeleRing (π“ž K) K) : tensorArchHom K L ((1 : L) βŠ—β‚œ a) = (1 : L) βŠ—β‚œ a.1 := rfl omit [NumberField L] in theorem tensorArch_toTensorGL (g : GL (Fin 2) (AdeleRing (π“ž K) K)) : tensorArch K L (toTensorGL K L (AdeleRing (π“ž K) K) g) = toTensorGL K L (InfiniteAdeleRing K) (AdelicLevel.glArch (π“ž K) K g) := Matrix.GeneralLinearGroup.ext fun _ _ => rfl omit [NumberField L] in theorem tensorPlace_toTensorGL (v : HeightOneSpectrum (π“ž K)) (g : GL (Fin 2) (AdeleRing (π“ž K) K)) : tensorPlace K L v (toTensorGL K L (AdeleRing (π“ž K) K) g) = toTensorGL K L (v.adicCompletion K) (AdelicLevel.finComponent (π“ž K) K v (AdelicLevel.glFin (π“ž K) K g)) := Matrix.GeneralLinearGroup.ext fun _ _ => rfl variable (Οƒ : L ≃ₐ[K] L) omit [NumberField L] in theorem tensorArchHom_sigmaTensor (z : L βŠ—[K] AdeleRing (π“ž K) K) : tensorArchHom K L (sigmaTensor K L (AdeleRing (π“ž K) K) Οƒ z) = sigmaTensor K L (InfiniteAdeleRing K) Οƒ (tensorArchHom K L z) := by induction z using TensorProduct.induction_on with | zero => simp only [map_zero] | tmul l a => rfl | add x y hx hy => simp only [map_add, hx, hy] omit [NumberField L] in theorem tensorPlaceHom_sigmaTensor (v : HeightOneSpectrum (π“ž K)) (z : L βŠ—[K] AdeleRing (π“ž K) K) : tensorPlaceHom K L v (sigmaTensor K L (AdeleRing (π“ž K) K) Οƒ z) = sigmaTensor K L (v.adicCompletion K) Οƒ (tensorPlaceHom K L v z) := by induction z using TensorProduct.induction_on with | zero => simp only [map_zero] | tmul l a => rfl | add x y hx hy => simp only [map_add, hx, hy] omit [NumberField L] in theorem tensorArch_sigmaGL (x : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)) : tensorArch K L (sigmaGL K L (AdeleRing (π“ž K) K) Οƒ x) = sigmaGL K L (InfiniteAdeleRing K) Οƒ (tensorArch K L x) := Matrix.GeneralLinearGroup.ext fun _ _ => tensorArchHom_sigmaTensor K L Οƒ _ omit [NumberField L] in theorem tensorPlace_sigmaGL (v : HeightOneSpectrum (π“ž K)) (x : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)) : tensorPlace K L v (sigmaGL K L (AdeleRing (π“ž K) K) Οƒ x) = sigmaGL K L (v.adicCompletion K) Οƒ (tensorPlace K L v x) := Matrix.GeneralLinearGroup.ext fun _ _ => tensorPlaceHom_sigmaTensor K L Οƒ v _ end Projections section Topology variable (K L : Type) [Field K] [NumberField K] [Field L] [NumberField L] [Algebra K L] omit [NumberField K] [NumberField L] in theorem rightActions_smul_eq (A : Type*) [CommRing A] [Algebra K A] (a : A) (z : L βŠ—[K] A) : a β€’ z = ((1 : L) βŠ—β‚œ[K] a) * z := by induction z using TensorProduct.induction_on with | zero => rw [smul_zero, mul_zero] | tmul l b => rw [TensorProduct.RightActions.smul_def, TensorProduct.comm_tmul, TensorProduct.smul_tmul', smul_eq_mul, TensorProduct.comm_symm_tmul, Algebra.TensorProduct.tmul_mul_tmul, one_mul] | add x y hx hy => rw [smul_add, mul_add, hx, hy] theorem isModuleTopology_adeleRing : letI := (M4aHerbrand.Bridge.genuineΞ² K L).toAlgebra IsModuleTopology (AdeleRing (π“ž K) K) (AdeleRing (π“ž L) L) := by letI := (M4aHerbrand.Bridge.genuineΞ² K L).toAlgebra exact M4aHerbrand.Bridge.isModuleTopology_adeleRing_of_free (π“ž K) K (π“ž L) L (M4aHerbrand.Bridge.continuous_genuineΞ² K L) (M4aHerbrand.Bridge.genuineTensorEquiv K L) def baseChangeLinear : letI := (M4aHerbrand.Bridge.genuineΞ² K L).toAlgebra (L βŠ—[K] AdeleRing (π“ž K) K) β†’β‚—[AdeleRing (π“ž K) K] AdeleRing (π“ž L) L := letI := (M4aHerbrand.Bridge.genuineΞ² K L).toAlgebra { toFun := baseChangeEquiv K L map_add' := map_add _ map_smul' := fun a z => by rw [rightActions_smul_eq, map_mul, baseChangeEquiv_one_tmul, RingHom.id_apply, Algebra.smul_def] rfl } def baseChangeLinearSymm : letI := (M4aHerbrand.Bridge.genuineΞ² K L).toAlgebra AdeleRing (π“ž L) L β†’β‚—[AdeleRing (π“ž K) K] (L βŠ—[K] AdeleRing (π“ž K) K) := letI := (M4aHerbrand.Bridge.genuineΞ² K L).toAlgebra { toFun := (baseChangeEquiv K L).symm map_add' := map_add _ map_smul' := fun a y => by apply (baseChangeEquiv K L).injective rw [RingEquiv.apply_symm_apply, RingHom.id_apply, rightActions_smul_eq, map_mul, baseChangeEquiv_one_tmul, RingEquiv.apply_symm_apply, Algebra.smul_def] rfl } def baseChangeHomeomorph : (L βŠ—[K] AdeleRing (π“ž K) K) β‰ƒβ‚œ AdeleRing (π“ž L) L := letI := (M4aHerbrand.Bridge.genuineΞ² K L).toAlgebra haveI := isModuleTopology_adeleRing K L haveI : ContinuousAdd (L βŠ—[K] AdeleRing (π“ž K) K) := (isTopologicalRing_tensor K L _).toContinuousAdd { toEquiv := (baseChangeEquiv K L).toEquiv continuous_toFun := IsModuleTopology.continuous_of_linearMap (baseChangeLinear K L) continuous_invFun := IsModuleTopology.continuous_of_linearMap (baseChangeLinearSymm K L) } theorem baseChangeHomeomorph_apply (z : L βŠ—[K] AdeleRing (π“ž K) K) : baseChangeHomeomorph K L z = baseChangeEquiv K L z := rfl theorem continuous_baseChangeEquiv : Continuous (baseChangeEquiv K L) := (baseChangeHomeomorph K L).continuous theorem continuous_baseChangeEquiv_symm : Continuous (baseChangeEquiv K L).symm := (baseChangeHomeomorph K L).symm.continuous def archIdentEquiv : (L βŠ—[K] InfiniteAdeleRing K) ≃+* InfiniteAdeleRing L := (Algebra.TensorProduct.comm K L (InfiniteAdeleRing K)).toRingEquiv.trans (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).baseChangeRingEquiv theorem archIdentEquiv_apply (z : L βŠ—[K] InfiniteAdeleRing K) : archIdentEquiv K L z = archIdent K L z := rfl theorem archIdentEquiv_one_tmul (a : InfiniteAdeleRing K) : archIdentEquiv K L (1 βŠ—β‚œ a) = (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).conorm a := rfl theorem isModuleTopology_infiniteAdeleRing : letI := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).adeleAlgebra IsModuleTopology (InfiniteAdeleRing K) (InfiniteAdeleRing L) := by letI := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).adeleAlgebra haveI : Module.Finite K L := Module.Finite.of_restrictScalars_finite β„š K L let te := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).baseChangeAlgEquiv haveI : Module.Free (InfiniteAdeleRing K) (InfiniteAdeleRing L) := Module.Free.of_equiv te.toLinearEquiv haveI : Module.Finite (InfiniteAdeleRing K) (InfiniteAdeleRing L) := Module.Finite.equiv te.toLinearEquiv exact M4aHerbrand.Bridge.isModuleTopology_of_continuous_algebraMap_of_sigmaCompact M4aHerbrand.ArchSemilocal.continuous_conorm def archIdentLinear : letI := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).adeleAlgebra (L βŠ—[K] InfiniteAdeleRing K) β†’β‚—[InfiniteAdeleRing K] InfiniteAdeleRing L := letI := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).adeleAlgebra { toFun := archIdentEquiv K L map_add' := map_add _ map_smul' := fun a z => by rw [rightActions_smul_eq, map_mul, archIdentEquiv_one_tmul, RingHom.id_apply, Algebra.smul_def] rfl } def archIdentLinearSymm : letI := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).adeleAlgebra InfiniteAdeleRing L β†’β‚—[InfiniteAdeleRing K] (L βŠ—[K] InfiniteAdeleRing K) := letI := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).adeleAlgebra { toFun := (archIdentEquiv K L).symm map_add' := map_add _ map_smul' := fun a y => by apply (archIdentEquiv K L).injective rw [RingEquiv.apply_symm_apply, RingHom.id_apply, rightActions_smul_eq, map_mul, archIdentEquiv_one_tmul, RingEquiv.apply_symm_apply, Algebra.smul_def] rfl } def archIdentHomeomorph : (L βŠ—[K] InfiniteAdeleRing K) β‰ƒβ‚œ InfiniteAdeleRing L := letI := (M4aHerbrand.ArchSemilocal.genuineInfinitePlaceData (K := K) (L := L)).adeleAlgebra haveI := isModuleTopology_infiniteAdeleRing K L haveI : ContinuousAdd (L βŠ—[K] InfiniteAdeleRing K) := (isTopologicalRing_tensor K L _).toContinuousAdd { toEquiv := (archIdentEquiv K L).toEquiv continuous_toFun := IsModuleTopology.continuous_of_linearMap (archIdentLinear K L) continuous_invFun := IsModuleTopology.continuous_of_linearMap (archIdentLinearSymm K L) } theorem archIdentHomeomorph_apply (z : L βŠ—[K] InfiniteAdeleRing K) : archIdentHomeomorph K L z = archIdent K L z := rfl theorem continuous_glMap {A B : Type*} [CommRing A] [CommRing B] [TopologicalSpace A] [TopologicalSpace B] [IsTopologicalRing A] [IsTopologicalRing B] (f : A β†’+* B) (hf : Continuous f) : Continuous (Matrix.GeneralLinearGroup.map (n := Fin 2) f) := by refine Units.continuous_iff.mpr ⟨?_, ?_⟩ Β· exact continuous_matrix fun i j => hf.comp ((Units.continuous_val).matrix_elem i j) Β· have h : (fun g : GL (Fin 2) A => ((Matrix.GeneralLinearGroup.map (n := Fin 2) f g)⁻¹).val) = fun g => (Matrix.GeneralLinearGroup.map (n := Fin 2) f g⁻¹).val := by funext g; rw [map_inv] rw [h] exact continuous_matrix fun i j => hf.comp ((Units.continuous_val.comp continuous_inv).matrix_elem i j) def glCongr {A B : Type*} [CommRing A] [CommRing B] [TopologicalSpace A] [TopologicalSpace B] [IsTopologicalRing A] [IsTopologicalRing B] (e : A ≃+* B) (he : Continuous e) (he' : Continuous e.symm) : GL (Fin 2) A β‰ƒβ‚œ* GL (Fin 2) B := { Units.mapEquiv (e.mapMatrix (m := Fin 2)).toMulEquiv with continuous_toFun := continuous_glMap e.toRingHom he continuous_invFun := continuous_glMap e.symm.toRingHom he' } theorem glCongr_apply {A B : Type*} [CommRing A] [CommRing B] [TopologicalSpace A] [TopologicalSpace B] [IsTopologicalRing A] [IsTopologicalRing B] (e : A ≃+* B) (he : Continuous e) (he' : Continuous e.symm) (g : GL (Fin 2) A) : glCongr e he he' g = Matrix.GeneralLinearGroup.map e.toRingHom g := rfl def baseChangeGLEquiv : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K) β‰ƒβ‚œ* GL (Fin 2) (AdeleRing (π“ž L) L) := haveI := isTopologicalRing_tensor K L (AdeleRing (π“ž K) K) glCongr (baseChangeEquiv K L) (continuous_baseChangeEquiv K L) (continuous_baseChangeEquiv_symm K L) def archIdentGLEquiv : GL (Fin 2) (L βŠ—[K] InfiniteAdeleRing K) β‰ƒβ‚œ* GL (Fin 2) (InfiniteAdeleRing L) := haveI := isTopologicalRing_tensor K L (InfiniteAdeleRing K) glCongr (archIdentEquiv K L) (archIdentHomeomorph K L).continuous (archIdentHomeomorph K L).symm.continuous theorem archIdentGLEquiv_apply (x : GL (Fin 2) (L βŠ—[K] InfiniteAdeleRing K)) : archIdentGLEquiv K L x = archIdentGL K L x := rfl end Topology section Consequences variable (K L : Type) [Field K] [NumberField K] [Field L] [NumberField L] [Algebra K L] theorem baseChangeGLEquiv_apply (x : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)) : baseChangeGLEquiv K L x = baseChangeGL K L x := rfl theorem semiLocalEval_eq (v : HeightOneSpectrum (π“ž K)) (a : FiniteAdeleRing (π“ž L) L) : semiLocalEval K L v a = (HeightOneSpectrum.adicCompletion.baseChangeAlgEquiv K L (π“ž L) v).symm (fun w : v.Extension (π“ž L) => a w.1) := rfl theorem semiLocalHomeomorph_eq (v : HeightOneSpectrum (π“ž K)) (x : L βŠ—[K] v.adicCompletion K) : semiLocalHomeomorph K L v x = HeightOneSpectrum.adicCompletion.baseChangeAlgEquiv K L (π“ž L) v x := rfl theorem continuous_semiLocalEval (v : HeightOneSpectrum (π“ž K)) : Continuous (semiLocalEval K L v) := by have h : (semiLocalEval K L v : FiniteAdeleRing (π“ž L) L β†’ L βŠ—[K] v.adicCompletion K) = (semiLocalHomeomorph K L v).symm ∘ fun a w => AdelicLevel.finAdeleEval (π“ž L) L w.1 a := by funext a rw [Function.comp_apply, eq_comm, Homeomorph.symm_apply_eq, semiLocalHomeomorph_eq, semiLocalEval_eq, AlgEquiv.apply_symm_apply] rfl rw [h] exact (semiLocalHomeomorph K L v).symm.continuous.comp (continuous_pi fun w => AdelicLevel.continuous_finAdeleEval (π“ž L) L w.1) theorem continuous_semiLocalComponent (v : HeightOneSpectrum (π“ž K)) : Continuous (semiLocalComponent K L v) := haveI := isTopologicalRing_tensor K L (v.adicCompletion K) continuous_glMap _ (continuous_semiLocalEval K L v) theorem continuous_tensorArch : Continuous (tensorArch K L) := by have h : (tensorArch K L : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K) β†’ GL (Fin 2) (L βŠ—[K] InfiniteAdeleRing K)) = (archIdentGLEquiv K L).symm ∘ AdelicLevel.glArch (π“ž L) L ∘ baseChangeGLEquiv K L := by funext x rw [Function.comp_apply, Function.comp_apply, eq_comm, ContinuousMulEquiv.symm_apply_eq, baseChangeGLEquiv_apply, glArch_baseChangeGL] rfl rw [h] exact (archIdentGLEquiv K L).symm.continuous.comp ((AdelicLevel.continuous_glArch (π“ž L) L).comp (baseChangeGLEquiv K L).continuous) theorem continuous_tensorPlace (v : HeightOneSpectrum (π“ž K)) : Continuous (tensorPlace K L v) := by have h : (tensorPlace K L v : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K) β†’ GL (Fin 2) (L βŠ—[K] v.adicCompletion K)) = semiLocalComponent K L v ∘ AdelicLevel.glFin (π“ž L) L ∘ baseChangeGLEquiv K L := by funext x rw [Function.comp_apply, Function.comp_apply, baseChangeGLEquiv_apply, semiLocalComponent_glFin_baseChangeGL] rw [h] exact (continuous_semiLocalComponent K L v).comp ((AdelicLevel.continuous_glFin (π“ž L) L).comp (baseChangeGLEquiv K L).continuous) theorem matrix_eq_of_forall_semiLocalEval_mapMatrix_eq {M N : Matrix (Fin 2) (Fin 2) (FiniteAdeleRing (π“ž L) L)} (h : βˆ€ v : HeightOneSpectrum (π“ž K), (semiLocalEval K L v).mapMatrix M = (semiLocalEval K L v).mapMatrix N) : M = N := by ext i j w have hw := congrFun (congrFun (h (HeightOneSpectrum.under (π“ž K) w)) i) j simp only [RingHom.mapMatrix_apply, Matrix.map_apply, semiLocalEval_eq] at hw exact congrArg _ (congrFun ((HeightOneSpectrum.adicCompletion.baseChangeAlgEquiv K L (π“ž L) (HeightOneSpectrum.under (π“ž K) w)).symm.injective hw) ⟨w, rfl⟩) theorem eq_of_tensorArch_eq_of_forall_tensorPlace_eq {x y : GL (Fin 2) (L βŠ—[K] AdeleRing (π“ž K) K)} (h₁ : tensorArch K L x = tensorArch K L y) (hβ‚‚ : βˆ€ v : HeightOneSpectrum (π“ž K), tensorPlace K L v x = tensorPlace K L v y) : x = y := by apply (baseChangeGLEquiv K L).injective rw [baseChangeGLEquiv_apply, baseChangeGLEquiv_apply] have e₁ : (AdelicLevel.glArch (π“ž L) L (baseChangeGL K L x)).val = (AdelicLevel.glArch (π“ž L) L (baseChangeGL K L y)).val := by rw [glArch_baseChangeGL, glArch_baseChangeGL, h₁] have eβ‚‚ : (AdelicLevel.glFin (π“ž L) L (baseChangeGL K L x)).val = (AdelicLevel.glFin (π“ž L) L (baseChangeGL K L y)).val := by refine matrix_eq_of_forall_semiLocalEval_mapMatrix_eq K L fun v => ?_ have hv : (semiLocalComponent K L v (AdelicLevel.glFin (π“ž L) L (baseChangeGL K L x))).val = (semiLocalComponent K L v (AdelicLevel.glFin (π“ž L) L (baseChangeGL K L y))).val := by rw [semiLocalComponent_glFin_baseChangeGL, semiLocalComponent_glFin_baseChangeGL, hβ‚‚ v] ext i j exact congrFun (congrFun hv i) j refine Matrix.GeneralLinearGroup.ext fun i j => Prod.ext ?_ ?_ Β· exact congrFun (congrFun e₁ i) j Β· exact congrFun (congrFun eβ‚‚ i) j end Consequences end AutomorphicForm end