import Mathlib import Definitions.Def_Submodule_FiniteAdeleBox import Definitions.Def_QuaternionAlgebra_Order_FiniteIdele set_option autoImplicit false open scoped TensorProduct Pointwise Quaternion open IsDedekindDomain NumberField noncomputable section namespace IsDedekindDomain.HeightOneSpectrum instance instAlgebraRatAdicCompletion (v : HeightOneSpectrum (π“ž β„š)) : Algebra β„š (v.adicCompletion β„š) := HeightOneSpectrum.instAlgebraAdicCompletion (π“ž β„š) β„š v instance instModuleRatAdicCompletion (v : HeightOneSpectrum (π“ž β„š)) : Module β„š (v.adicCompletion β„š) := Algebra.toModule end IsDedekindDomain.HeightOneSpectrum namespace Submodule variable {D : Type*} [Ring D] [Algebra β„š D] variable (D) in def finiteAdeleEvalAlgHom (v : HeightOneSpectrum (π“ž β„š)) : FiniteAdeleRing (π“ž β„š) β„š →ₐ[β„š] v.adicCompletion β„š := { RestrictedProduct.evalRingHom (fun w : HeightOneSpectrum (π“ž β„š) => w.adicCompletion β„š) v with commutes' := fun _ => rfl } variable (D) in def finiteAdeleEvalAt (v : HeightOneSpectrum (π“ž β„š)) : D βŠ—[β„š] FiniteAdeleRing (π“ž β„š) β„š →ₐ[β„š] D βŠ—[β„š] v.adicCompletion β„š := Algebra.TensorProduct.map (AlgHom.id β„š D) (finiteAdeleEvalAlgHom v) def localBox (Ξ› : Submodule β„€ D) (v : HeightOneSpectrum (π“ž β„š)) : AddSubgroup (D βŠ—[β„š] v.adicCompletion β„š) := AddSubgroup.closure {x | βˆƒ z ∈ Ξ›, βˆƒ c : v.adicCompletion β„š, c ∈ v.adicCompletionIntegers β„š ∧ x = z βŠ—β‚œ[β„š] c} def localBoxUnits (Ξ› : Submodule β„€ D) (v : HeightOneSpectrum (π“ž β„š)) : Set (D βŠ—[β„š] v.adicCompletion β„š)Λ£ := {u | (u : D βŠ—[β„š] v.adicCompletion β„š) ∈ (localBox Ξ› v : Set (D βŠ—[β„š] v.adicCompletion β„š)) ∧ ((u⁻¹ : (D βŠ—[β„š] v.adicCompletion β„š)Λ£) : D βŠ—[β„š] v.adicCompletion β„š) ∈ (localBox Ξ› v : Set (D βŠ—[β„š] v.adicCompletion β„š))} @[simp] theorem finiteAdeleEvalAt_tmul (v : HeightOneSpectrum (π“ž β„š)) (z : D) (a : FiniteAdeleRing (π“ž β„š) β„š) : finiteAdeleEvalAt D v (z βŠ—β‚œ[β„š] a) = z βŠ—β‚œ[β„š] (a v) := rfl theorem finiteAdeleEvalAlgHom_apply (v : HeightOneSpectrum (π“ž β„š)) (a : FiniteAdeleRing (π“ž β„š) β„š) : finiteAdeleEvalAlgHom v a = a v := rfl theorem mem_localBoxUnits_iff (Ξ› : Submodule β„€ D) (v : HeightOneSpectrum (π“ž β„š)) (u : (D βŠ—[β„š] v.adicCompletion β„š)Λ£) : u ∈ localBoxUnits Ξ› v ↔ (u : D βŠ—[β„š] v.adicCompletion β„š) ∈ (localBox Ξ› v : Set (D βŠ—[β„š] v.adicCompletion β„š)) ∧ ((u⁻¹ : (D βŠ—[β„š] v.adicCompletion β„š)Λ£) : D βŠ—[β„š] v.adicCompletion β„š) ∈ (localBox Ξ› v : Set (D βŠ—[β„š] v.adicCompletion β„š)) := Iff.rfl end Submodule namespace QuaternionAlgebra variable {a b : β„š} def localQuadSubring (Ξ± : ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Subring (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š) := Subring.closure ({Ξ± βŠ—β‚œ[β„š] (1 : v.adicCompletion β„š)} βˆͺ Set.range (fun r : v.adicCompletion β„š => (1 : ℍ[β„š, a, b]) βŠ—β‚œ[β„š] r)) def localQuadUnits (Ξ± : ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Subgroup (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£ where carrier := {u | (u : ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š) ∈ localQuadSubring Ξ± v ∧ ((u⁻¹ : (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£) : ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š) ∈ localQuadSubring Ξ± v} one_mem' := ⟨by rw [Units.val_one]; exact (localQuadSubring Ξ± v).one_mem, by rw [inv_one, Units.val_one]; exact (localQuadSubring Ξ± v).one_mem⟩ mul_mem' := fun {x y} hx hy => ⟨by rw [Units.val_mul]; exact (localQuadSubring Ξ± v).mul_mem hx.1 hy.1, by rw [mul_inv_rev, Units.val_mul]; exact (localQuadSubring Ξ± v).mul_mem hy.2 hx.2⟩ inv_mem' := fun {x} hx => ⟨hx.2, by rw [inv_inv]; exact hx.1⟩ def localEmbeddingSet (Ξ› : Submodule β„€ ℍ[β„š, a, b]) (Ξ± : ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Set (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£ := {Ξ² | βˆ€ y ∈ localQuadSubring Ξ± v, ((β⁻¹ : (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£) : ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š) * y * Ξ² ∈ (Submodule.localBox Ξ› v : Set (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)) ↔ y ∈ (Submodule.localBox Ξ› v : Set (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š))} theorem mem_localQuadUnits_iff (Ξ± : ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) (u : (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£) : u ∈ localQuadUnits Ξ± v ↔ (u : ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š) ∈ localQuadSubring Ξ± v ∧ ((u⁻¹ : (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£) : ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š) ∈ localQuadSubring Ξ± v := Iff.rfl theorem mem_localEmbeddingSet_iff (Ξ› : Submodule β„€ ℍ[β„š, a, b]) (Ξ± : ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) (Ξ² : (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£) : Ξ² ∈ localEmbeddingSet Ξ› Ξ± v ↔ βˆ€ y ∈ localQuadSubring Ξ± v, ((β⁻¹ : (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)Λ£) : ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š) * y * Ξ² ∈ (Submodule.localBox Ξ› v : Set (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)) ↔ y ∈ (Submodule.localBox Ξ› v : Set (ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š)) := Iff.rfl end QuaternionAlgebra end