added documentation for meromorphicity etc. in HOL-Complex_Analysis
authorManuel Eberl <manuel@pruvisto.org>
Tue, 02 Apr 2024 18:02:43 +0200
changeset 80072 33a9b1d6a651
parent 80071 876bb57e7376
child 80076 d67cacd09251
added documentation for meromorphicity etc. in HOL-Complex_Analysis
src/HOL/Complex_Analysis/Meromorphic.thy
--- a/src/HOL/Complex_Analysis/Meromorphic.thy	Tue Apr 02 16:33:53 2024 +0200
+++ b/src/HOL/Complex_Analysis/Meromorphic.thy	Tue Apr 02 18:02:43 2024 +0200
@@ -1,3 +1,7 @@
+(*
+  Authors:    Manuel Eberl, University of Innsbruck
+              Wenda Li, University of Edinburgh
+*)
 theory Meromorphic imports
   Laurent_Convergence
   Cauchy_Integral_Formula
@@ -6,7 +10,18 @@
 
 subsection \<open>Remove singular points\<close>
 
-definition remove_sings :: "(complex \<Rightarrow> complex) \<Rightarrow> complex \<Rightarrow> complex" where
+text \<open>
+  This function takes a complex function and returns a version of it where all removable
+  singularities have been removed and all other singularities (to be more precise,
+  unremovable discontinuities) are set to 0.
+
+  This is very useful since it is sometimes difficult to avoid introducing removable singularities.
+  For example, consider the meromorphic functions $f(z) = z$ and $g(z) = 1/z$.
+  Then a mathematician would write $f(z)g(z) = 1$, but in Isabelle of course this is not so.
+
+  Using the \<open>remove_sings\<close> function, we indeed have \<open>remove_sings (\<lambda>z. f z * g z) = (\<lambda>_. 1)\<close>.
+\<close>
+definition%important remove_sings :: "(complex \<Rightarrow> complex) \<Rightarrow> complex \<Rightarrow> complex" where
   "remove_sings f z = (if \<exists>c. f \<midarrow>z\<rightarrow> c then Lim (at z) f else 0)"
 
 lemma remove_sings_eqI [intro]:
@@ -227,9 +242,25 @@
     using False remove_sings_eqI by auto
 qed simp
 
+
 subsection \<open>Meromorphicity\<close>
 
-definition meromorphic_on :: "(complex \<Rightarrow> complex) \<Rightarrow> complex set \<Rightarrow> bool"
+text \<open>
+  We define meromorphicity in terms of Laurent series expansions. This has the advantage of
+  giving us a particularly simple definition that makes many of the lemmas below trivial because
+  they reduce to similar statements about Laurent series that are already in the library.
+
+  On open domains, this definition coincides with the usual one from the literature, namely that
+  the function be holomorphic on its domain except for a set of non-essential singularities that
+  is \<^emph>\<open>sparse\<close>, i.e.\ that has no limit point inside the domain.
+  
+  However, unlike the definitions found in the literature, our definition also makes sense for
+  non-open domains: similarly to \<^const>\<open>analytic_on\<close>, we consider a function meromorphic on a
+  non-open domain if it is meromorphic on some open superset of that domain.
+
+  We will prove all of this below.
+\<close>
+definition%important meromorphic_on :: "(complex \<Rightarrow> complex) \<Rightarrow> complex set \<Rightarrow> bool"
   (infixl "(meromorphic'_on)" 50) where
   "f meromorphic_on A \<longleftrightarrow> (\<forall>z\<in>A. \<exists>F. (\<lambda>w. f (z + w)) has_laurent_expansion F)"
 
@@ -554,7 +585,7 @@
 text \<open>
   This is probably very non-standard, but we call a function ``nicely meromorphic'' if it is
   meromorphic and has no removable singularities. That means that the only singularities are
-  poles.
+  poles. We furthermore require that the function return 0 at any pole, for convenience.
 \<close>
 definition nicely_meromorphic_on :: "(complex \<Rightarrow> complex) \<Rightarrow> complex set \<Rightarrow> bool"
     (infixl "(nicely'_meromorphic'_on)" 50)