|
| 1 | +/- |
| 2 | +Copyright (c) 2024 Kevin Buzzard. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Kevin Buzzard, Ludwig Monnerjahn, Hannah Scholz |
| 5 | +-/ |
| 6 | +import Mathlib.Geometry.Manifold.Instances.UnitsOfNormedAlgebra |
| 7 | +import Mathlib.LinearAlgebra.Matrix.GeneralLinearGroup.Basic |
| 8 | +import Mathlib.NumberTheory.NumberField.Basic |
| 9 | +import Mathlib.RingTheory.DedekindDomain.FiniteAdeleRing |
| 10 | +import Mathlib.Algebra.Group.Subgroup.Pointwise |
| 11 | +import FLT.HIMExperiments.module_topology |
| 12 | + |
| 13 | +/- |
| 14 | +
|
| 15 | +# Definition of automorphic forms on a totally definite quaternion algebra |
| 16 | +-/ |
| 17 | + |
| 18 | +suppress_compilation |
| 19 | + |
| 20 | +variable (F : Type*) [Field F] [NumberField F] |
| 21 | + |
| 22 | +variable (D : Type*) [Ring D] [Algebra F D] [FiniteDimensional F D] |
| 23 | + |
| 24 | +open DedekindDomain |
| 25 | + |
| 26 | +open scoped NumberField |
| 27 | + |
| 28 | +-- my work (two PRs) |
| 29 | +instance : TopologicalSpace (FiniteAdeleRing (𝓞 F) F) := sorry |
| 30 | +instance : TopologicalRing (FiniteAdeleRing (𝓞 F) F) := sorry |
| 31 | + |
| 32 | +open scoped TensorProduct |
| 33 | + |
| 34 | +section missing_instances |
| 35 | + |
| 36 | +variable {R D A : Type*} [CommRing R] [Ring D] [CommRing A] [Algebra R D] [Algebra R A] |
| 37 | + |
| 38 | +instance : Algebra A (D ⊗[R] A) := |
| 39 | + Algebra.TensorProduct.includeRight.toRingHom.toAlgebra' (by |
| 40 | + simp only [AlgHom.toRingHom_eq_coe, RingHom.coe_coe, Algebra.TensorProduct.includeRight_apply] |
| 41 | + intro a b |
| 42 | + apply TensorProduct.induction_on (motive := fun b ↦ 1 ⊗ₜ[R] a * b = b * 1 ⊗ₜ[R] a) |
| 43 | + . simp only [mul_zero, zero_mul] |
| 44 | + . intro d a' |
| 45 | + simp only [Algebra.TensorProduct.tmul_mul_tmul, one_mul, mul_one] |
| 46 | + rw [NonUnitalCommSemiring.mul_comm] |
| 47 | + . intro x y hx hy |
| 48 | + rw [left_distrib, hx, hy, right_distrib] |
| 49 | + ) |
| 50 | + |
| 51 | +instance [Module.Finite R D] : Module.Finite A (D ⊗[R] A) := sorry |
| 52 | +instance [Module.Free R D] : Module.Free A (D ⊗[R] A) := sorry |
| 53 | + |
| 54 | +-- #synth Ring (D ⊗[F] FiniteAdeleRing (𝓞 F) F) |
| 55 | + |
| 56 | +end missing_instances |
| 57 | +-- your work |
| 58 | +instance : TopologicalSpace (D ⊗[F] (FiniteAdeleRing (𝓞 F) F)) := Module.topology (FiniteAdeleRing (𝓞 F) F) |
| 59 | +instance : TopologicalRing (D ⊗[F] (FiniteAdeleRing (𝓞 F) F)) := moobar (FiniteAdeleRing (𝓞 F) F) (D ⊗[F] (FiniteAdeleRing (𝓞 F) F)) |
| 60 | + |
| 61 | +namespace TotallyDefiniteQuaternionAlgebra |
| 62 | + |
| 63 | +noncomputable example : D →+* (D ⊗[F] FiniteAdeleRing (𝓞 F) F) := by exact |
| 64 | + Algebra.TensorProduct.includeLeftRingHom |
| 65 | + |
| 66 | +abbrev Dfx := (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ |
| 67 | +noncomputable abbrev incl : Dˣ →* Dfx F D := Units.map Algebra.TensorProduct.includeLeftRingHom.toMonoidHom |
| 68 | + |
| 69 | +structure AutomorphicForm (M : Type*) [AddCommGroup M] where |
| 70 | + toFun : (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ → M |
| 71 | + left_invt : ∀ (d : Dˣ) (x : (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ), |
| 72 | + toFun (Units.map Algebra.TensorProduct.includeLeftRingHom.toMonoidHom d * x) = toFun x |
| 73 | + loc_cst : ∃ U : Subgroup (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ, |
| 74 | + IsOpen (U : Set (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ) ∧ |
| 75 | + ∀ (x : (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ), |
| 76 | + ∀ u ∈ U, toFun (x * u) = toFun x |
| 77 | + |
| 78 | +namespace AutomorphicForm |
| 79 | + |
| 80 | +variable {M : Type*} [AddCommGroup M] |
| 81 | + |
| 82 | +variable {F D} |
| 83 | + |
| 84 | +instance : CoeFun (AutomorphicForm F D M) (fun _ ↦ Dfx F D → M) where |
| 85 | + coe := toFun |
| 86 | + |
| 87 | +attribute [coe] AutomorphicForm.toFun |
| 88 | + |
| 89 | +@[ext] |
| 90 | +lemma ext (φ ψ : AutomorphicForm F D M) (h : ∀ x, φ x = ψ x) : φ = ψ := by |
| 91 | + cases φ; cases ψ; simp only [mk.injEq]; ext; apply h |
| 92 | + |
| 93 | +def zero : (AutomorphicForm F D M) where |
| 94 | + toFun := 0 |
| 95 | + left_invt := by simp |
| 96 | + loc_cst := by use ⊤; simp |
| 97 | + |
| 98 | +instance : Zero (AutomorphicForm F D M) where |
| 99 | + zero := zero |
| 100 | + |
| 101 | +@[simp] |
| 102 | +lemma zero_apply (x : (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ) : |
| 103 | + (0 : AutomorphicForm F D M) x = 0 := rfl |
| 104 | + |
| 105 | +def neg (φ : AutomorphicForm F D M) : AutomorphicForm F D M where |
| 106 | + toFun x := - φ x |
| 107 | + left_invt := by |
| 108 | + intro d x |
| 109 | + simp only [RingHom.toMonoidHom_eq_coe, neg_inj] |
| 110 | + exact φ.left_invt d x |
| 111 | + loc_cst := by |
| 112 | + rcases φ.loc_cst with ⟨U, openU, hU⟩ |
| 113 | + use U |
| 114 | + exact ⟨openU, fun x u umem ↦ by rw [neg_inj]; exact hU x u umem⟩ |
| 115 | + |
| 116 | +instance : Neg (AutomorphicForm F D M) where |
| 117 | + neg := neg |
| 118 | + |
| 119 | +@[simp, norm_cast] |
| 120 | +lemma neg_apply (φ : AutomorphicForm F D M) (x : (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ) : |
| 121 | + (-φ : AutomorphicForm F D M) x = -(φ x) := rfl |
| 122 | + |
| 123 | +instance add (φ ψ : AutomorphicForm F D M) : AutomorphicForm F D M where |
| 124 | + toFun x := φ x + ψ x |
| 125 | + left_invt := by |
| 126 | + intro d x |
| 127 | + simp only [← φ.left_invt d x, ← ψ.left_invt d x] |
| 128 | + loc_cst := by |
| 129 | + rcases φ.loc_cst with ⟨U, openU, hU⟩ |
| 130 | + rcases ψ.loc_cst with ⟨V, openV, hV⟩ |
| 131 | + use U ⊓ V |
| 132 | + constructor |
| 133 | + · unfold Subgroup.instInf Submonoid.instInf |
| 134 | + simp only [Subgroup.coe_toSubmonoid, Subgroup.coe_set_mk] |
| 135 | + exact IsOpen.inter openU openV |
| 136 | + · intro x u ⟨umemU, umemV⟩ |
| 137 | + simp only |
| 138 | + rw [hU x u umemU, hV x u umemV] |
| 139 | + |
| 140 | +instance : Add (AutomorphicForm F D M) where |
| 141 | + add := add |
| 142 | + |
| 143 | +@[simp, norm_cast] |
| 144 | +lemma add_apply (φ ψ : AutomorphicForm F D M) (x : (D ⊗[F] (FiniteAdeleRing (𝓞 F) F))ˣ) : |
| 145 | + (φ + ψ) x = (φ x) + (ψ x) := rfl |
| 146 | + |
| 147 | +instance addCommGroup : AddCommGroup (AutomorphicForm F D M) where |
| 148 | + add := (· + ·) |
| 149 | + add_assoc := by intros; ext; simp [add_assoc]; |
| 150 | + zero := 0 |
| 151 | + zero_add := by intros; ext; simp |
| 152 | + add_zero := by intros; ext; simp |
| 153 | + nsmul := nsmulRec |
| 154 | + neg := (-·) |
| 155 | + zsmul := zsmulRec |
| 156 | + add_left_neg := by intros; ext; simp |
| 157 | + add_comm := by intros; ext; simp [add_comm] |
| 158 | + |
| 159 | +open ConjAct |
| 160 | +open scoped Pointwise |
| 161 | + |
| 162 | +lemma conjAct_mem {G: Type*} [Group G] (U: Subgroup G) (g: G) (x : G): |
| 163 | + x ∈ toConjAct g • U ↔ ∃ u ∈ U, g * u * g⁻¹ = x := by rfl |
| 164 | + |
| 165 | +lemma toConjAct_open {G : Type*} [Group G] [TopologicalSpace G] [TopologicalGroup G] |
| 166 | + (U : Subgroup G) (hU : IsOpen (U : Set G)) (g : G) : IsOpen (toConjAct g • U : Set G) := by |
| 167 | + have this1 := continuous_mul_left g⁻¹ |
| 168 | + have this2 := continuous_mul_right g |
| 169 | + rw [continuous_def] at this1 this2 |
| 170 | + specialize this2 U hU |
| 171 | + specialize this1 _ this2 |
| 172 | + convert this1 using 1 |
| 173 | + ext x |
| 174 | + convert conjAct_mem _ _ _ using 1 |
| 175 | + simp only [Set.mem_preimage, SetLike.mem_coe] |
| 176 | + refine ⟨?_, ?_⟩ <;> intro h |
| 177 | + · use g⁻¹ * x * g -- duh |
| 178 | + simp [h] |
| 179 | + group |
| 180 | + · rcases h with ⟨u, hu, rfl⟩ |
| 181 | + group |
| 182 | + exact hu |
| 183 | + |
| 184 | +instance : SMul (Dfx F D) (AutomorphicForm F D M) where |
| 185 | + smul g φ := { -- (g • f) (x) := f(xg) -- x(gf)=(xg)f |
| 186 | + toFun := fun x => φ (x * g) |
| 187 | + left_invt := by |
| 188 | + intros d x |
| 189 | + simp only [← φ.left_invt d x, mul_assoc] |
| 190 | + exact φ.left_invt d (x * g) |
| 191 | + loc_cst := by |
| 192 | + rcases φ.loc_cst with ⟨U, openU, hU⟩ |
| 193 | + use toConjAct g • U |
| 194 | + constructor |
| 195 | + · apply toConjAct_open _ openU |
| 196 | + · intros x u umem |
| 197 | + simp only |
| 198 | + rw[conjAct_mem] at umem |
| 199 | + obtain ⟨ugu, hugu, eq⟩ := umem |
| 200 | + rw[←eq, ←mul_assoc, ←mul_assoc, inv_mul_cancel_right, hU (x*g) ugu hugu] |
| 201 | + } |
| 202 | + |
| 203 | +@[simp] |
| 204 | +lemma sMul_eval (g : Dfx F D) (f : AutomorphicForm F D M) (x : (D ⊗[F] FiniteAdeleRing (𝓞 F) F)ˣ) : |
| 205 | + (g • f) x = f (x * g) := rfl |
| 206 | + |
| 207 | +instance : MulAction (Dfx F D) (AutomorphicForm F D M) where |
| 208 | + smul := (. • .) |
| 209 | + one_smul := by intros; ext; simp only [sMul_eval, mul_one] |
| 210 | + mul_smul := by intros; ext; simp only [sMul_eval, mul_assoc] |
0 commit comments