Theory Basic_Modular_Forms_Mero_UHP
section ‹Some concrete level 1 modular forms›
theory Basic_Modular_Forms_Mero_UHP
imports "Elliptic_Functions.Basic_Modular_Forms" Modular_Forms
begin
subsection ‹Eisenstein series›
definition E_mero_uhp :: "nat ⇒ mero_uhp" ("ℰ")
where "E_mero_uhp n = mero_uhp (Eisenstein_E n)"
lemma mero_uhp_rel_E [mero_uhp_rel_intros]: "mero_uhp_rel (ℰ n) (Eisenstein_E n)"
unfolding E_mero_uhp_def
by (intro mero_uhp_rel_mero_uhp analytic_on_imp_meromorphic_on analytic_intros)
(auto elim!: Reals_cases)
lemma E_mero_uhp_0 [simp]: "ℰ 0 = 1"
proof -
have "mero_uhp_rel (ℰ 0) (Eisenstein_E 0)"
by mero_uhp_rel
also have "mero_uhp_rel … (eval_mero_uhp 1)"
by (rule mero_uhp_relI_weak) (auto simp: complex_is_Real_iff)
finally show ?thesis
by (rule mero_uhp_rel_imp_eq_mero_uhp)
qed
lemma E_mero_uhp_odd:
assumes "odd n"
shows "ℰ n = 0"
proof -
have "mero_uhp_rel (ℰ n) (Eisenstein_E n)"
by mero_uhp_rel
also from assms have "Eisenstein_E n = (λ_. 0)"
by (auto simp: Eisenstein_E_def fun_eq_iff)
also have "mero_uhp_rel … (0 :: mero_uhp)"
by mero_uhp_rel
finally show ?thesis
by (rule mero_uhp_rel_imp_eq_mero_uhp)
qed
lemma holo_uhp_E_mero_uhp: "holo_uhp (ℰ n)"
proof (rule holo_uhp_mero_uhp_rel_transfer)
show "mero_uhp_rel (ℰ n) (Eisenstein_E n)"
by mero_uhp_rel
qed (auto intro!: analytic_intros simp: complex_is_Real_iff)
lemma not_is_pole_E_mero_uhp [simp]: "¬is_pole (ℰ n) z"
using holo_uhp_E_mero_uhp by (auto simp: holo_uhp_def)
lemma poles_mero_uhp_E_mero_uhp [simp]: "poles_mero_uhp (ℰ n) = {}"
by (auto simp: poles_mero_uhp_def)
lemma eval_E_mero_uhp [simp]: "Im z > 0 ⟹ eval_mero_uhp (ℰ n) z = Eisenstein_E n z"
unfolding E_mero_uhp_def
by (intro eval_mero_uhp_mero_uhp analytic_on_imp_meromorphic_on analytic_intros)
(auto elim!: Reals_cases)