import Definitions.Def_Submodule_LocalBox import Definitions.Def_CerednikDrinfeld_MumfordPeriod set_option autoImplicit false open scoped TensorProduct Quaternion open IsDedekindDomain NumberField noncomputable section namespace CerednikDrinfeld.CosetGraph variable {a b : β„š} abbrev Loc (a b : β„š) (v : HeightOneSpectrum (π“ž β„š)) : Type := ℍ[β„š, a, b] βŠ—[β„š] v.adicCompletion β„š def toLoc (v : HeightOneSpectrum (π“ž β„š)) : (ℍ[β„š, a, b])Λ£ β†’* (Loc a b v)Λ£ := Units.map (Algebra.TensorProduct.includeLeft : ℍ[β„š, a, b] →ₐ[β„š] Loc a b v).toRingHom.toMonoidHom def scalarUnits (v : HeightOneSpectrum (π“ž β„š)) : Subgroup (Loc a b v)Λ£ := (Units.map (Algebra.TensorProduct.includeRight : v.adicCompletion β„š →ₐ[β„š] Loc a b v).toRingHom.toMonoidHom).range def level (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Subgroup (Loc a b v)Λ£ := Subgroup.closure (Submodule.localBoxUnits R v) βŠ” scalarUnits v abbrev Vert (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Type := (Loc a b v)Λ£ β§Έ level R v def graph (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) (nv : (Loc a b v)Λ£) : SimpleGraph (Vert R v) where Adj x y := x β‰  y ∧ βˆƒ g : (Loc a b v)Λ£, βˆƒ k ∈ level R v, (x = (g : Vert R v) ∧ y = ((g * k * nv : (Loc a b v)Λ£) : Vert R v)) ∨ (y = (g : Vert R v) ∧ x = ((g * k * nv : (Loc a b v)Λ£) : Vert R v)) symm := ⟨by rintro x y ⟨hne, g, k, hk, h⟩ exact ⟨hne.symm, g, k, hk, h.symm⟩⟩ loopless := ⟨fun _ h => h.1 rfl⟩ def awayUnits (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Subgroup (ℍ[β„š, a, b])Λ£ := β¨… (w : HeightOneSpectrum (π“ž β„š)) (_ : w β‰  v), (Subgroup.closure (Submodule.localBoxUnits R w)).comap (toLoc w) instance vertMulAction (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : MulAction (ℍ[β„š, a, b])Λ£ (Vert R v) := MulAction.compHom (Vert R v) (toLoc (a := a) (b := b) v) theorem smul_vert_mk (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) (Ξ³ : (ℍ[β„š, a, b])Λ£) (g : (Loc a b v)Λ£) : Ξ³ β€’ ((g : (Loc a b v)Λ£) : Vert R v) = ((toLoc v Ξ³ * g : (Loc a b v)Λ£) : Vert R v) := rfl instance awayVertMulAction (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : MulAction (awayUnits R v) (Vert R v) := inferInstance def actionKer (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Subgroup (awayUnits R v) := (MulAction.toPermHom (awayUnits R v) (Vert R v)).ker instance actionKer_normal (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : (actionKer R v).Normal := MonoidHom.normal_ker _ abbrev ProjAwayUnits (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : Type := (awayUnits R v) β§Έ actionKer R v instance projVertMulAction (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) : MulAction (ProjAwayUnits R v) (Vert R v) := MulAction.compHom (Vert R v) (QuotientGroup.kerLift (MulAction.toPermHom (awayUnits R v) (Vert R v))) theorem mk_smul_vert (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) (Ξ³ : awayUnits R v) (x : Vert R v) : (QuotientGroup.mk Ξ³ : ProjAwayUnits R v) β€’ x = Ξ³ β€’ x := rfl theorem coe_smul_vert_mk (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) (Ξ³ : awayUnits R v) (g : (Loc a b v)Λ£) : Ξ³ β€’ ((g : (Loc a b v)Λ£) : Vert R v) = ((toLoc v (Ξ³ : (ℍ[β„š, a, b])Λ£) * g : (Loc a b v)Λ£) : Vert R v) := rfl instance projGraphAction (R : Submodule β„€ ℍ[β„š, a, b]) (v : HeightOneSpectrum (π“ž β„š)) (nv : (Loc a b v)Λ£) : Mumford.GraphAction (ProjAwayUnits R v) (graph R v nv) where smul_adj := by intro q x y hxy induction q using QuotientGroup.induction_on with | H Ξ³ => rw [mk_smul_vert, mk_smul_vert] obtain ⟨hne, g, k, hk, h⟩ := hxy refine ⟨fun e => hne (smul_left_cancel Ξ³ e), toLoc v (Ξ³ : (ℍ[β„š, a, b])Λ£) * g, k, hk, ?_⟩ rcases h with ⟨rfl, rfl⟩ | ⟨rfl, rfl⟩ Β· left; exact ⟨coe_smul_vert_mk R v Ξ³ g, by rw [coe_smul_vert_mk, mul_assoc, mul_assoc, mul_assoc]⟩ Β· right; exact ⟨coe_smul_vert_mk R v Ξ³ g, by rw [coe_smul_vert_mk, mul_assoc, mul_assoc, mul_assoc]⟩ end CerednikDrinfeld.CosetGraph end