import Definitions.Def_AutomorphicForm_ProductionPinsCompact import Definitions.Def_AutomorphicForm_ArithCuspRealization import Definitions.Def_AutomorphicForm_SiegelCovering set_option autoImplicit false open IsDedekindDomain NumberField MeasureTheory Matrix open NumberField.AdelicHaar NumberField.AdelicLevel NumberField.AdelicBox open AutomorphicForm AutomorphicForm.WindowedSiegel AutomorphicForm.SiegelCovering open NumberField.SiegelVolume noncomputable section namespace AutomorphicForm variable (F : Type) [Field F] [NumberField F] open scoped nonZeroDivisors in noncomputable def finIdeleExponentAt (v : HeightOneSpectrum (π“ž F)) (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : β„€ := -WithZero.log (Valued.v ((Ξ΄ : FiniteAdeleRing (π“ž F) F) v)) private theorem valued_finIdele_ne_zero (v : HeightOneSpectrum (π“ž F)) (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : Valued.v ((Ξ΄ : FiniteAdeleRing (π“ž F) F) v) β‰  0 := by rw [ne_eq, map_eq_zero] intro h have : ((Ξ΄ * δ⁻¹ : (FiniteAdeleRing (π“ž F) F)Λ£) : FiniteAdeleRing (π“ž F) F) v = 1 := by rw [mul_inv_cancel, Units.val_one, coe_one_apply] rw [Units.val_mul, coe_mul_apply, h, zero_mul] at this exact zero_ne_one this @[simp] theorem finIdeleExponentAt_one (v : HeightOneSpectrum (π“ž F)) : finIdeleExponentAt F v 1 = 0 := by unfold finIdeleExponentAt rw [Units.val_one, coe_one_apply, map_one, WithZero.log_one, neg_zero] theorem finIdeleExponentAt_mul (v : HeightOneSpectrum (π“ž F)) (δ₁ Ξ΄β‚‚ : (FiniteAdeleRing (π“ž F) F)Λ£) : finIdeleExponentAt F v (δ₁ * Ξ΄β‚‚) = finIdeleExponentAt F v δ₁ + finIdeleExponentAt F v Ξ΄β‚‚ := by unfold finIdeleExponentAt rw [Units.val_mul, coe_mul_apply, map_mul, WithZero.log_mul (valued_finIdele_ne_zero F v δ₁) (valued_finIdele_ne_zero F v Ξ΄β‚‚), neg_add] private theorem finite_support_finIdeleExponentAt (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : {v | finIdeleExponentAt F v Ξ΄ β‰  0}.Finite := by have hΞ΄ : βˆ€αΆ  v in Filter.cofinite, (Ξ΄ : FiniteAdeleRing (π“ž F) F) v ∈ v.adicCompletionIntegers F := (Ξ΄ : FiniteAdeleRing (π“ž F) F).2 have hΞ΄i : βˆ€αΆ  v in Filter.cofinite, ((δ⁻¹ : (FiniteAdeleRing (π“ž F) F)Λ£) : FiniteAdeleRing (π“ž F) F) v ∈ v.adicCompletionIntegers F := ((δ⁻¹ : (FiniteAdeleRing (π“ž F) F)Λ£) : FiniteAdeleRing (π“ž F) F).2 refine Set.Finite.subset (Filter.eventually_cofinite.mp (hΞ΄.and hΞ΄i)) ?_ intro v hv hgood apply hv have hprod : Valued.v ((Ξ΄ : FiniteAdeleRing (π“ž F) F) v) * Valued.v (((δ⁻¹ : (FiniteAdeleRing (π“ž F) F)Λ£) : FiniteAdeleRing (π“ž F) F) v) = 1 := by rw [← map_mul, ← coe_mul_apply, ← Units.val_mul, mul_inv_cancel, Units.val_one, coe_one_apply, map_one] have heq : Valued.v ((Ξ΄ : FiniteAdeleRing (π“ž F) F) v) = 1 := le_antisymm hgood.1 (le_of_eq_of_le hprod.symm (mul_le_of_le_one_right' hgood.2)) simp [finIdeleExponentAt, heq] open scoped nonZeroDivisors in noncomputable def finAssocFracIdeal (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : FractionalIdeal (π“ž F)⁰ F := ∏ᢠ v : HeightOneSpectrum (π“ž F), (v.asIdeal : FractionalIdeal (π“ž F)⁰ F) ^ finIdeleExponentAt F v Ξ΄ open scoped nonZeroDivisors in theorem finAssocFracIdeal_ne_zero (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : finAssocFracIdeal F Ξ΄ β‰  0 := by classical unfold finAssocFracIdeal rw [finprod_eq_prod_of_mulSupport_subset _ (s := (finite_support_finIdeleExponentAt F Ξ΄).toFinset) (fun v hv => by simp only [Set.Finite.coe_toFinset, Set.mem_setOf_eq] intro h exact hv (by simp only [h, zpow_zero]))] exact Finset.prod_ne_zero_iff.mpr fun v _ => zpow_ne_zero _ (FractionalIdeal.coeIdeal_ne_zero.mpr v.ne_bot) open scoped nonZeroDivisors in theorem count_finAssocFracIdeal (v : HeightOneSpectrum (π“ž F)) (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : FractionalIdeal.count F v (finAssocFracIdeal F Ξ΄) = finIdeleExponentAt F v Ξ΄ := FractionalIdeal.count_finprod F v _ (Filter.eventually_cofinite.mpr (by simpa using finite_support_finIdeleExponentAt F Ξ΄)) open scoped nonZeroDivisors in theorem finAssocFracIdeal_mul (δ₁ Ξ΄β‚‚ : (FiniteAdeleRing (π“ž F) F)Λ£) : finAssocFracIdeal F (δ₁ * Ξ΄β‚‚) = finAssocFracIdeal F δ₁ * finAssocFracIdeal F Ξ΄β‚‚ := by have h0 : finAssocFracIdeal F (δ₁ * Ξ΄β‚‚) β‰  0 := finAssocFracIdeal_ne_zero F _ have h12 : finAssocFracIdeal F δ₁ * finAssocFracIdeal F Ξ΄β‚‚ β‰  0 := mul_ne_zero (finAssocFracIdeal_ne_zero F _) (finAssocFracIdeal_ne_zero F _) rw [← FractionalIdeal.finprod_heightOneSpectrum_factorization' (R := π“ž F) (K := F) h0, ← FractionalIdeal.finprod_heightOneSpectrum_factorization' (R := π“ž F) (K := F) h12] refine finprod_congr fun v => ?_ rw [count_finAssocFracIdeal, finIdeleExponentAt_mul, FractionalIdeal.count_mul F v (finAssocFracIdeal_ne_zero F δ₁) (finAssocFracIdeal_ne_zero F Ξ΄β‚‚), count_finAssocFracIdeal, count_finAssocFracIdeal] open scoped nonZeroDivisors Classical in theorem finIdeleExponentAt_localUnit_uniformizer (v w : HeightOneSpectrum (π“ž F)) : finIdeleExponentAt F w (localUnit (π“ž F) F v (uniformizerUnit F v)) = if w = v then 1 else 0 := by unfold finIdeleExponentAt by_cases hw : w = v Β· subst hw rw [if_pos rfl, localUnit_apply_self, valued_uniformizerUnit, WithZero.log_exp] ring Β· rw [if_neg hw, localUnit_apply_of_ne (π“ž F) F v _ hw, map_one, WithZero.log_one, neg_zero] open scoped nonZeroDivisors in noncomputable def contentHomFin : (FiniteAdeleRing (π“ž F) F)Λ£ β†’* ClassGroup (π“ž F) where toFun Ξ΄ := ClassGroup.mk F (Units.mk0 (finAssocFracIdeal F Ξ΄) (finAssocFracIdeal_ne_zero F Ξ΄)) map_one' := by rw [← map_one (ClassGroup.mk (R := π“ž F) (K := F))] congr 1 refine Units.ext ?_ simp only [Units.val_mk0, Units.val_one, finAssocFracIdeal] exact finprod_eq_one_of_forall_eq_one fun v => by rw [finIdeleExponentAt_one, zpow_zero] map_mul' δ₁ Ξ΄β‚‚ := by rw [← map_mul] congr 1 exact Units.ext (by simpa using finAssocFracIdeal_mul F δ₁ Ξ΄β‚‚) open scoped nonZeroDivisors in theorem contentHomFin_apply (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : contentHomFin F Ξ΄ = ClassGroup.mk F (Units.mk0 (finAssocFracIdeal F Ξ΄) (finAssocFracIdeal_ne_zero F Ξ΄)) := rfl open scoped nonZeroDivisors Classical in theorem contentHomFin_surjective : Function.Surjective (contentHomFin F) := by classical intro c obtain ⟨I, hI⟩ := ClassGroup.mk0_surjective c have hI0 : ((I : Ideal (π“ž F)) : FractionalIdeal (π“ž F)⁰ F) β‰  0 := FractionalIdeal.coeIdeal_ne_zero.mpr (nonZeroDivisors.coe_ne_zero I) have hfin : {v : HeightOneSpectrum (π“ž F) | FractionalIdeal.count F v ((I : Ideal (π“ž F)) : FractionalIdeal (π“ž F)⁰ F) β‰  0}.Finite := Filter.eventually_cofinite.mp (FractionalIdeal.finite_factors _) set s : Finset (HeightOneSpectrum (π“ž F)) := hfin.toFinset with hs refine ⟨∏ v ∈ s, (localUnit (π“ž F) F v (uniformizerUnit F v)) ^ (FractionalIdeal.count F v ((I : Ideal (π“ž F)) : FractionalIdeal (π“ž F)⁰ F)).toNat, ?_⟩ show ClassGroup.mk F _ = c rw [← hI, ← ClassGroup.mk_mk0 F] refine congrArg (ClassGroup.mk F) (Units.ext ?_) show finAssocFracIdeal F _ = ((FractionalIdeal.mk0 F I : (FractionalIdeal (π“ž F)⁰ F)Λ£) : FractionalIdeal (π“ž F)⁰ F) rw [FractionalIdeal.coe_mk0] conv_rhs => rw [← FractionalIdeal.finprod_heightOneSpectrum_factorization' (R := π“ž F) (K := F) hI0] rw [← FractionalIdeal.finprod_heightOneSpectrum_factorization' (R := π“ž F) (K := F) (finAssocFracIdeal_ne_zero F _)] refine finprod_congr fun w => congrArg _ ?_ rw [count_finAssocFracIdeal] have hprod : finIdeleExponentAt F w (∏ v ∈ s, (localUnit (π“ž F) F v (uniformizerUnit F v)) ^ (FractionalIdeal.count F v ((I : Ideal (π“ž F)) : FractionalIdeal (π“ž F)⁰ F)).toNat) = βˆ‘ v ∈ s, (FractionalIdeal.count F v ((I : Ideal (π“ž F)) : FractionalIdeal (π“ž F)⁰ F)).toNat * finIdeleExponentAt F w (localUnit (π“ž F) F v (uniformizerUnit F v)) := by induction s using Finset.induction_on with | empty => simp [finIdeleExponentAt_one] | insert v t hvt ih => rw [Finset.prod_insert hvt, finIdeleExponentAt_mul, ih, Finset.sum_insert hvt] congr 1 induction (FractionalIdeal.count F v _).toNat with | zero => simp [finIdeleExponentAt_one] | succ n ihn => rw [pow_succ, finIdeleExponentAt_mul, ihn]; push_cast; ring rw [hprod] simp_rw [finIdeleExponentAt_localUnit_uniformizer, mul_ite, mul_one, mul_zero] rw [Finset.sum_ite_eq s w] by_cases hws : w ∈ s Β· rw [if_pos hws, Int.toNat_of_nonneg (FractionalIdeal.count_coe_nonneg F w _)] Β· rw [if_neg hws] simp only [hs, Set.Finite.mem_toFinset, Set.mem_setOf_eq, not_not] at hws exact hws.symm def classSq : ClassGroup (π“ž F) β†’* ClassGroup (π“ž F) := powMonoidHom 2 omit [NumberField F] in @[simp] theorem classSq_apply (C : ClassGroup (π“ž F)) : classSq F C = C ^ 2 := rfl open scoped Classical in noncomputable def classRepFinIdele (C : ClassGroup (π“ž F) β§Έ (classSq F).range) : (FiniteAdeleRing (π“ž F) F)Λ£ := if C = 1 then 1 else Function.surjInv ((QuotientGroup.mk'_surjective (classSq F).range).comp (contentHomFin_surjective F)) C theorem classRepFinIdele_spec (C : ClassGroup (π“ž F) β§Έ (classSq F).range) : QuotientGroup.mk' (classSq F).range (contentHomFin F (classRepFinIdele F C)) = C := by classical unfold classRepFinIdele split_ifs with hC Β· simp [hC] Β· exact Function.surjInv_eq ((QuotientGroup.mk'_surjective (classSq F).range).comp (contentHomFin_surjective F)) C @[simp] theorem classRepFinIdele_one : classRepFinIdele F 1 = 1 := by classical unfold classRepFinIdele rw [if_pos rfl] noncomputable def finIdeleDiag : (FiniteAdeleRing (π“ž F) F)Λ£ β†’* AdelicGL2 (π“ž F) F := diagOne.comp (Units.map (finIncl (π“ž F) F)) theorem glArch_finIdeleDiag (Ξ΄ : (FiniteAdeleRing (π“ž F) F)Λ£) : glArch (π“ž F) F (finIdeleDiag F Ξ΄) = 1 := by refine Matrix.GeneralLinearGroup.ext fun i j => ?_ fin_cases i <;> fin_cases j <;> rfl theorem injective_finIdeleDiag : Function.Injective (finIdeleDiag F) := by intro δ₁ Ξ΄β‚‚ h have h00 := congrArg (fun g : AdelicGL2 (π“ž F) F => ((g : Matrix (Fin 2) (Fin 2) (AdeleRing (π“ž F) F)) 0 0).2) h simp only [finIdeleDiag, MonoidHom.comp_apply, diagOne_coe_apply, Matrix.diagonal_apply_eq, Matrix.cons_val_zero, Units.coe_map, finIncl_apply_snd] at h00 exact Units.ext h00 noncomputable def classRepEmbedding : (ClassGroup (π“ž F) β§Έ (classSq F).range) β†ͺ AdelicGL2 (π“ž F) F := ⟨fun C => finIdeleDiag F (classRepFinIdele F C), (injective_finIdeleDiag F).comp (Function.LeftInverse.injective (g := fun Ξ΄ => QuotientGroup.mk' (classSq F).range (contentHomFin F Ξ΄)) (classRepFinIdele_spec F))⟩ theorem classRepEmbedding_apply (C : ClassGroup (π“ž F) β§Έ (classSq F).range) : classRepEmbedding F C = finIdeleDiag F (classRepFinIdele F C) := rfl theorem glArch_classRepEmbedding (C : ClassGroup (π“ž F) β§Έ (classSq F).range) : glArch (π“ž F) F (classRepEmbedding F C) = 1 := glArch_finIdeleDiag F _ @[simp] theorem classRepEmbedding_one : classRepEmbedding F 1 = 1 := by rw [classRepEmbedding_apply, classRepFinIdele_one, map_one] noncomputable def classRepTranslates : Finset (AdelicGL2 (π“ž F) F) := haveI := Fintype.ofFinite (ClassGroup (π“ž F) β§Έ (classSq F).range) Finset.univ.map (classRepEmbedding F) theorem card_classRepTranslates : (classRepTranslates F).card = Nat.card (ClassGroup (π“ž F) β§Έ (classSq F).range) := by letI := Fintype.ofFinite (ClassGroup (π“ž F) β§Έ (classSq F).range) rw [classRepTranslates, Finset.card_map, Finset.card_univ, Nat.card_eq_fintype_card] theorem one_mem_classRepTranslates : (1 : AdelicGL2 (π“ž F) F) ∈ classRepTranslates F := by letI := Fintype.ofFinite (ClassGroup (π“ž F) β§Έ (classSq F).range) rw [classRepTranslates, Finset.mem_map] exact ⟨1, Finset.mem_univ _, classRepEmbedding_one F⟩ noncomputable def classRepSiegelSet (c u d₁ dβ‚‚ : ℝ) : Set (AdelicGL2 (π“ž F) F) := ⋃ x ∈ classRepTranslates F, (Β· * x) '' centreCutSiegelSet F c u d₁ dβ‚‚ theorem surjective_classSq_of_odd (h : Odd (classNumber F)) : Function.Surjective (classSq F) := by intro C obtain ⟨k, hk⟩ := h refine ⟨C ^ (k + 1), ?_⟩ have hcard : C ^ classNumber F = 1 := pow_card_eq_one simp only [classSq, powMonoidHom_apply, ← pow_mul] have h2 : (k + 1) * 2 = classNumber F + 1 := by omega rw [h2, pow_succ, hcard, one_mul] theorem subsingleton_quotient_classSq_of_odd (h : Odd (classNumber F)) : Subsingleton (ClassGroup (π“ž F) β§Έ (classSq F).range) := by have hr : (classSq F).range = ⊀ := MonoidHom.range_eq_top.mpr (surjective_classSq_of_odd F h) rw [hr] exact QuotientGroup.subsingleton_quotient_top theorem classRepTranslates_eq_singleton_one_of_odd (h : Odd (classNumber F)) : classRepTranslates F = {1} := by letI := Fintype.ofFinite (ClassGroup (π“ž F) β§Έ (classSq F).range) haveI := subsingleton_quotient_classSq_of_odd F h rw [classRepTranslates] have huniv : (Finset.univ : Finset (ClassGroup (π“ž F) β§Έ (classSq F).range)) = {1} := by rw [Finset.eq_singleton_iff_unique_mem] exact ⟨Finset.mem_univ _, fun x _ => Subsingleton.elim x 1⟩ rw [huniv, Finset.map_singleton, classRepEmbedding_one] theorem classRepSiegelSet_eq_of_odd (h : Odd (classNumber F)) (c u d₁ dβ‚‚ : ℝ) : classRepSiegelSet F c u d₁ dβ‚‚ = centreCutSiegelSet F c u d₁ dβ‚‚ := by unfold classRepSiegelSet rw [classRepTranslates_eq_singleton_one_of_odd F h] ext g simp only [Finset.mem_singleton, Set.mem_iUnion, exists_prop, exists_eq_left, Set.mem_image, mul_one] exact ⟨fun ⟨x, hx, hxg⟩ => hxg β–Έ hx, fun hg => ⟨g, hg, rfl⟩⟩ def productionPinsGeneralOf (c u d₁ dβ‚‚ : ℝ) (_hd : d₁ < dβ‚‚) : CarrierPins F := productionPinsOf F (classRepSiegelSet F c u d₁ dβ‚‚) (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F) def productionPinsGeneral : CarrierPins F := productionPinsGeneralOf F (1/2 : ℝ) 1 (1/2) 2 (by norm_num) @[simp] theorem productionPinsGeneralOf_D (c u d₁ dβ‚‚ : ℝ) (hd : d₁ < dβ‚‚) : (productionPinsGeneralOf F c u d₁ dβ‚‚ hd).D = classRepSiegelSet F c u d₁ dβ‚‚ := rfl @[simp] theorem productionPinsGeneralOf_ΞΌ (c u d₁ dβ‚‚ : ℝ) (hd : d₁ < dβ‚‚) : (productionPinsGeneralOf F c u d₁ dβ‚‚ hd).ΞΌ = adelicGLHaar (Fin 2) (π“ž F) F := rfl @[simp] theorem productionPinsGeneralOf_U (c u d₁ dβ‚‚ : ℝ) (hd : d₁ < dβ‚‚) (N : Ideal (π“ž F)) : (productionPinsGeneralOf F c u d₁ dβ‚‚ hd).U N = levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F := rfl @[simp] theorem productionPinsGeneral_D : (productionPinsGeneral F).D = classRepSiegelSet F (1/2 : ℝ) 1 (1/2) 2 := rfl theorem productionPinsGeneral_eq_compact_of_odd (h : Odd (classNumber F)) : productionPinsGeneral F = productionPinsCompact F := by unfold productionPinsGeneral productionPinsGeneralOf productionPinsCompact rw [classRepSiegelSet_eq_of_odd F h] theorem centreCutSiegelSet_subset_classRepSiegelSet (c u d₁ dβ‚‚ : ℝ) : centreCutSiegelSet F c u d₁ dβ‚‚ βŠ† classRepSiegelSet F c u d₁ dβ‚‚ := by intro g hg rw [classRepSiegelSet, Set.mem_iUnion] exact ⟨1, Set.mem_iUnion.mpr ⟨one_mem_classRepTranslates F, g, hg, mul_one g⟩⟩ theorem adelicGLHaar_mul_right_centreCutSiegelSet_lt_top {c : ℝ} (hc : 0 < c) (u : ℝ) {d₁ : ℝ} (hd₁ : 0 < d₁) (dβ‚‚ : ℝ) (x : AdelicGL2 (π“ž F) F) : (letI := glBorel (Fin 2) (π“ž F) F; adelicGLHaar (Fin 2) (π“ž F) F ((Β· * x) '' centreCutSiegelSet F c u d₁ dβ‚‚) < ⊀) := by letI := glBorel (Fin 2) (π“ž F) F haveI := borelSpace_glBorel (Fin 2) (π“ž F) F haveI := isHaarMeasure_adelicGLHaar (Fin 2) (π“ž F) F have himg : (Β· * x) '' centreCutSiegelSet F c u d₁ dβ‚‚ = (Β· * x⁻¹) ⁻¹' centreCutSiegelSet F c u d₁ dβ‚‚ := by ext g; simp [Set.mem_preimage] rw [himg, ← Measure.map_apply (measurable_mul_const x⁻¹) (measurableSet_centreCutSiegelSet c u d₁ dβ‚‚)] haveI : (Measure.map (Β· * x⁻¹) (adelicGLHaar (Fin 2) (π“ž F) F)).IsMulLeftInvariant := isMulLeftInvariant_map_mul_right _ haveI : IsFiniteMeasureOnCompacts (Measure.map (Β· * x⁻¹) (adelicGLHaar (Fin 2) (π“ž F) F)) := Measure.IsFiniteMeasureOnCompacts.map _ (Homeomorph.mulRight x⁻¹) exact measure_centreCutSiegelSet_lt_top _ hc u hd₁ dβ‚‚ theorem productionPinsGeneral_ΞΌ_D_pos_lt_top : (letI := (productionPinsGeneral F).mS; 0 < (productionPinsGeneral F).ΞΌ (productionPinsGeneral F).D ∧ (productionPinsGeneral F).ΞΌ (productionPinsGeneral F).D < ⊀) := by letI := glBorel (Fin 2) (π“ž F) F have hcompact := productionPinsCompact_ΞΌ_D_pos_lt_top F constructor Β· refine lt_of_lt_of_le hcompact.1 (measure_mono ?_) exact centreCutSiegelSet_subset_classRepSiegelSet F (1/2) 1 (1/2) 2 Β· calc (productionPinsGeneral F).ΞΌ (productionPinsGeneral F).D = adelicGLHaar (Fin 2) (π“ž F) F (classRepSiegelSet F (1/2) 1 (1/2) 2) := rfl _ ≀ βˆ‘ x ∈ classRepTranslates F, adelicGLHaar (Fin 2) (π“ž F) F ((Β· * x) '' centreCutSiegelSet F (1/2) 1 (1/2) 2) := by unfold classRepSiegelSet exact measure_biUnion_finset_le _ _ _ < ⊀ := ENNReal.sum_lt_top.mpr fun x _ => adelicGLHaar_mul_right_centreCutSiegelSet_lt_top F (by norm_num) 1 (by norm_num) 2 x theorem not_ae_zero_restrict_of_continuous_of_mem_interior {G : Type*} [TopologicalSpace G] [MeasurableSpace G] [OpensMeasurableSpace G] {ΞΌ : Measure G} [ΞΌ.IsOpenPosMeasure] {Ο† : G β†’ β„‚} (hΟ† : Continuous Ο†) {gβ‚€ : G} (hgβ‚€ : Ο† gβ‚€ β‰  0) {C : Set G} (hC : gβ‚€ ∈ interior C) : Β¬ (Ο† =ᡐ[ΞΌ.restrict C] 0) := by intro hae set U : Set G := interior C ∩ {g | Ο† g β‰  0} with hU have hUopen : IsOpen U := isOpen_interior.inter (isOpen_ne.preimage hΟ†) have hUne : U.Nonempty := ⟨gβ‚€, hC, hgβ‚€βŸ© have hUpos : 0 < ΞΌ U := hUopen.measure_pos ΞΌ hUne have hUsub : U βŠ† C := (Set.inter_subset_left).trans interior_subset have hres : 0 < (ΞΌ.restrict C) U := by rw [Measure.restrict_apply hUopen.measurableSet, Set.inter_eq_self_of_subset_left hUsub] exact hUpos have hzero : U βŠ† {g | Β¬ (Ο† g = (0 : G β†’ β„‚) g)} := fun g hg => by simpa using hg.2 exact absurd (measure_mono_null hzero hae) hres.ne' def IsGenuineCuspRealizationAt (pins : CarrierPins F) (Ξ¦ : HeckeEigensystem F β„‚) (R : SmoothCuspRealizationAt F pins Ξ¦) : Prop := Continuous R.toFun def IsGenuineCuspRealizable (pins : CarrierPins F) (Ξ¦ : HeckeEigensystem F β„‚) : Prop := βˆƒ R : SmoothCuspRealizationAt F pins Ξ¦, IsGenuineCuspRealizationAt F pins Ξ¦ R def IsArithGenuineCuspRealizable (pins : CarrierPins F) (Ξ¦ : HeckeEigensystem F β„‚) : Prop := IsGenuineCuspRealizable F pins Ξ¦.toRawCentral def IsArithGenuineCuspRealizableVia (pins : CarrierPins F) {R : Type*} [CommRing R] (ΞΉ : R β†’+* β„‚) (Ξ¦ : HeckeEigensystem F R) : Prop := IsArithGenuineCuspRealizable F pins (Ξ¦.map ΞΉ) def genuineCuspNotionOf (pins : βˆ€ (F : Type) [Field F] [NumberField F], CarrierPins F) : CuspidalityNotion β„‚ where IsCusp := fun F _i1 _i2 Ξ¦ => @IsArithGenuineCuspRealizable F _i1 _i2 (pins F) Ξ¦ theorem isGenuineCuspRealizable_iff (pins : CarrierPins F) (Ξ¦ : HeckeEigensystem F β„‚) : IsGenuineCuspRealizable F pins Ξ¦ ↔ βˆƒ R : SmoothCuspRealizationAt F pins Ξ¦, Continuous R.toFun := Iff.rfl theorem IsGenuineCuspRealizable.isSmoothCuspRealizable {pins : CarrierPins F} {Ξ¦ : HeckeEigensystem F β„‚} (h : IsGenuineCuspRealizable F pins Ξ¦) : IsSmoothCuspRealizable F pins Ξ¦ := ⟨h.choose⟩ theorem IsArithGenuineCuspRealizable.isArithCuspRealizable {pins : CarrierPins F} {Ξ¦ : HeckeEigensystem F β„‚} (h : IsArithGenuineCuspRealizable F pins Ξ¦) : IsArithCuspRealizable F pins Ξ¦ := h.isSmoothCuspRealizable end AutomorphicForm end section Battery open AutomorphicForm #check @finIdeleExponentAt #check @finAssocFracIdeal #check @contentHomFin #check @contentHomFin_apply #check @contentHomFin_surjective #check @classSq #check @classRepFinIdele #check @classRepFinIdele_spec #check @finIdeleDiag #check @classRepEmbedding #check @classRepEmbedding_apply #check @classRepSiegelSet #check @card_classRepTranslates #check @productionPinsGeneralOf #check @productionPinsGeneral #check @IsGenuineCuspRealizationAt #check @IsGenuineCuspRealizable #check @IsArithGenuineCuspRealizable #check @IsArithGenuineCuspRealizableVia #check @genuineCuspNotionOf #print axioms AutomorphicForm.finAssocFracIdeal_ne_zero #print axioms AutomorphicForm.count_finAssocFracIdeal #print axioms AutomorphicForm.finAssocFracIdeal_mul #print axioms AutomorphicForm.finIdeleExponentAt_localUnit_uniformizer #print axioms AutomorphicForm.contentHomFin_surjective #print axioms AutomorphicForm.classRepFinIdele_spec #print axioms AutomorphicForm.glArch_finIdeleDiag #print axioms AutomorphicForm.injective_finIdeleDiag #print axioms AutomorphicForm.glArch_classRepEmbedding #print axioms AutomorphicForm.classRepEmbedding_one #print axioms AutomorphicForm.productionPinsGeneral_eq_compact_of_odd #print axioms AutomorphicForm.IsGenuineCuspRealizable.isSmoothCuspRealizable #print axioms AutomorphicForm.classRepSiegelSet_eq_of_odd #print axioms AutomorphicForm.card_classRepTranslates #print axioms AutomorphicForm.one_mem_classRepTranslates #print axioms AutomorphicForm.classRepTranslates_eq_singleton_one_of_odd #print axioms AutomorphicForm.not_ae_zero_restrict_of_continuous_of_mem_interior #print axioms AutomorphicForm.productionPinsGeneral_ΞΌ_D_pos_lt_top end Battery