Definitions/Def_AlgebraicCurve_CellDissection.lean
Radial regions, analytic coordinates, cells, and cell dissections
The module sets up a combinatorial-analytic notion of dissection for the space of places \mathrm{Place}\,\mathbb{C}\,F of a field F over \mathbb{C}, carrying a topology and charts modelled on \mathbb{C}.
A RadialRegion consists of a centre q \in \mathbb{C}, a continuous, 2\pi-periodic, everywhere positive radius function r : \mathbb{R} \to \mathbb{R}, and a subdivision 0 = \varphi_0 < \varphi_1 < \dots < \varphi_N = 2\pi (a strictly monotone \varphi : \mathrm{Fin}(N+1) \to \mathbb{R} with the stated endpoints) such that r is C^2 on each closed interval [\varphi_k,\varphi_{k+1}]. Its K is \{z : \lVert z-q\rVert \le r(\arg(z-q))\} and Kint the strict version; loop is \varphi \mapsto q + r(\varphi)e^{i\varphi} and loop' the expression (r'(\varphi)+i\,r(\varphi))e^{i\varphi}; arcIcc k is [\varphi_k,\varphi_{k+1}] and arcSet k its image under loop.
An AnalyticCoord F is an open partial homeomorphism \zeta from the place space to \mathbb{C} such that, at each P in its source, the composite of the inverse extended chart at P with \zeta is analytic at the chart image of P with non-vanishing derivative there; read A u reads an element u \in F as the function z \mapsto \mathrm{evalAt}(\zeta^{-1}(z))\,u of the coordinate (place evaluation: the residue-field value pulled back to \mathbb{C}, or 0 when u lies outside the valuation subring). A Cell F is such a coordinate together with a radial region whose closed region K lies in \zeta's target; its carrier, interior', bdry and arc are the images under \zeta^{-1} of K, Kint, loop and arcSet.
A CellDissection F packages finite index types \iota_C, \iota_E, \iota_V with decidable equality, a family cell of cells, a map side sending each pair (cell, arc index) to an edge with a Boolean orientation, and the requirement (side_bij) that this be a bijection from the sigma type of all arcs onto \iota_E \times \mathrm{Bool}, so each edge carries exactly two arcs, one of each orientation. Further fields: ends assigning to each edge an ordered pair of vertices and vert realising vertices as places; arc_ends, asserting that the boundary points of an arc at its two break angles are the two vertices of its edge, in the order dictated by the orientation bit; arc_rev, asserting that two arcs carrying the same edge with opposite bits are related by a strictly antitone C^1 reparametrisation \psi of the arc interval exchanging the endpoint angles and satisfying \mathrm{bdry}_{C'}(t) = \mathrm{bdry}_C(\psi(t)); cover, that the carriers exhaust the whole place space; inter, that two cells whose carriers contain a common point x are joined by a reflexive-transitive chain in which consecutive cells share an edge and x lies on the corresponding arc of the earlier cell; and conn, the analogous chain condition for the relation of sharing an edge, for arbitrary pairs of cells. These are fields of a structure, so the incidence and covering statements are carried as data-bearing hypotheses rather than proved.
Finally, coeffIn ζ θ w is the value at w of the coefficient of a differential \theta \in \Omega[F/\mathbb{C}] transported to the coordinate \zeta: the readDifferential of \theta at the place \zeta^{-1}(w), evaluated at its own chart image, times the derivative at w of the extended chart composed with \zeta^{-1}. Cell.bdryIntegrand C θ s is \mathrm{coeffIn}(\zeta,\theta)(\mathrm{loop}\,s)\cdot\mathrm{loop}'(s); arcOf recovers from a side the unique arc carrying it, using surjectivity of side; edgeInt θ e is the integral of that integrand over the angle interval of the positively oriented arc of e; and skeleton is the union of all arcs of all cells.
Relation to Mathlib
Mathlib supplies the charted-space and OpenPartialHomeomorph framework used here, but has no notion of a cell dissection or polygonal decomposition of a Riemann surface; the radial regions, cells and dissections, and the reading of elements of F and of differentials in an analytic coordinate, are the project's own, built on its Place-based model of a complex algebraic curve.
Where it is used
The dissections defined here support the treatment of line integrals of regular differentials on a complex algebraic curve: the edgewise integrals edgeInt are the quantities in terms of which the reciprocity law for path integrals, and the associated counting arguments over the cells, edges and vertices of a dissection, are formulated. These in turn feed the analytic input on curves and their Jacobians used for modular curves.
References
- O. Forster, Lectures on Riemann Surfaces, Graduate Texts in Mathematics 81, Springer, 1981
- G. Springer, Introduction to Riemann Surfaces, Addison-Wesley, 1957
- P. Griffiths and J. Harris, Principles of Algebraic Geometry, Wiley, 1978
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 156 lines
- 45 declarations
- used in the statements of 22 theorems and imported by 25 proofs
- imports 2 definition modules
Source file: Definitions/Def_AlgebraicCurve_CellDissection.lean
Imported by
- no other definition module
Declarations
- structure
AlgebraicCurve.RadialRegion - field
AlgebraicCurve.RadialRegion.q - field
AlgebraicCurve.RadialRegion.r - field
AlgebraicCurve.RadialRegion.hcont - field
AlgebraicCurve.RadialRegion.hper - field
AlgebraicCurve.RadialRegion.hpos - field
AlgebraicCurve.RadialRegion.N - field
AlgebraicCurve.RadialRegion.hmono - field
AlgebraicCurve.RadialRegion.hC2 - def
AlgebraicCurve.RadialRegion.K - def
AlgebraicCurve.RadialRegion.Kint - def
AlgebraicCurve.RadialRegion.loop - def
AlgebraicCurve.RadialRegion.loop' - def
AlgebraicCurve.RadialRegion.arcIcc - def
AlgebraicCurve.RadialRegion.arcSet - structure
AlgebraicCurve.AnalyticCoord - field
AlgebraicCurve.AnalyticCoord.analytic - field
AlgebraicCurve.AnalyticCoord.deriv_ne - field
AlgebraicCurve.AnalyticCoord.deriv - def
AlgebraicCurve.AnalyticCoord.read - structure
AlgebraicCurve.Cell - field
AlgebraicCurve.Cell.R - field
AlgebraicCurve.Cell.hKt - def
AlgebraicCurve.Cell.carrier - def
AlgebraicCurve.Cell.interior' - def
AlgebraicCurve.Cell.bdry - def
AlgebraicCurve.Cell.arc - structure
AlgebraicCurve.CellDissection - field
AlgebraicCurve.CellDissection.cell - field
AlgebraicCurve.CellDissection.side - field
AlgebraicCurve.CellDissection.side_bij - field
AlgebraicCurve.CellDissection.ends - field
AlgebraicCurve.CellDissection.vert - field
AlgebraicCurve.CellDissection.arc_ends - field
AlgebraicCurve.CellDissection.vert - field
AlgebraicCurve.CellDissection.vert - field
AlgebraicCurve.CellDissection.arc_rev - field
AlgebraicCurve.CellDissection.cover - field
AlgebraicCurve.CellDissection.inter - field
AlgebraicCurve.CellDissection.conn - def
AlgebraicCurve.coeffIn - def
AlgebraicCurve.Cell.bdryIntegrand - def
AlgebraicCurve.CellDissection.arcOf - def
AlgebraicCurve.CellDissection.edgeInt - def
AlgebraicCurve.CellDissection.skeleton
Source
import Definitions.Def_AlgebraicCurve_PlaceEvaluation import Definitions.Def_AlgebraicCurve_ComplexLineIntegral set_option autoImplicit false open scoped Manifold ContDiff Topology Real open Set Complex namespace AlgebraicCurve structure RadialRegion where q : ℂ r : ℝ → ℝ hcont : Continuous r hper : Function.Periodic r (2 * π) hpos : ∀ φ, 0 < r φ N : ℕ φs : Fin (N + 1) → ℝ hφ0 : φs 0 = 0 hφN : φs (Fin.last N) = 2 * π hmono : StrictMono φs hC2 : ∀ i : Fin N, ContDiffOn ℝ 2 r (Icc (φs i.castSucc) (φs i.succ)) namespace RadialRegion def K (R : RadialRegion) : Set ℂ := {z : ℂ | ‖z - R.q‖ ≤ R.r (arg (z - R.q))} def Kint (R : RadialRegion) : Set ℂ := {z : ℂ | ‖z - R.q‖ < R.r (arg (z - R.q))} noncomputable def loop (R : RadialRegion) (φ : ℝ) : ℂ := R.q + R.r φ * exp (φ * I) noncomputable def loop' (R : RadialRegion) (φ : ℝ) : ℂ := (((deriv R.r φ : ℝ) : ℂ) + R.r φ * I) * exp (φ * I) def arcIcc (R : RadialRegion) (k : Fin R.N) : Set ℝ := Icc (R.φs k.castSucc) (R.φs k.succ) def arcSet (R : RadialRegion) (k : Fin R.N) : Set ℂ := R.loop '' R.arcIcc k end RadialRegion structure AnalyticCoord (F : Type*) [Field F] [Algebra ℂ F] [TopologicalSpace (Place ℂ F)] [ChartedSpace ℂ (Place ℂ F)] where ζ : OpenPartialHomeomorph (Place ℂ F) ℂ analytic : ∀ P ∈ ζ.source, AnalyticAt ℂ (ζ ∘ (extChartAt 𝓘(ℂ, ℂ) P).symm) (extChartAt 𝓘(ℂ, ℂ) P P) deriv_ne : ∀ P ∈ ζ.source, deriv (ζ ∘ (extChartAt 𝓘(ℂ, ℂ) P).symm) (extChartAt 𝓘(ℂ, ℂ) P P) ≠ 0 namespace AnalyticCoord variable {F : Type*} [Field F] [Algebra ℂ F] variable [TopologicalSpace (Place ℂ F)] [ChartedSpace ℂ (Place ℂ F)] noncomputable def read (A : AnalyticCoord F) (u : F) : ℂ → ℂ := fun z => Place.evalAt (A.ζ.symm z) u end AnalyticCoord structure Cell (F : Type*) [Field F] [Algebra ℂ F] [TopologicalSpace (Place ℂ F)] [ChartedSpace ℂ (Place ℂ F)] extends AnalyticCoord F where R : RadialRegion hKt : R.K ⊆ ζ.target namespace Cell variable {F : Type*} [Field F] [Algebra ℂ F] variable [TopologicalSpace (Place ℂ F)] [ChartedSpace ℂ (Place ℂ F)] def carrier (C : Cell F) : Set (Place ℂ F) := C.ζ.symm '' C.R.K def interior' (C : Cell F) : Set (Place ℂ F) := C.ζ.symm '' C.R.Kint noncomputable def bdry (C : Cell F) (φ : ℝ) : Place ℂ F := C.ζ.symm (C.R.loop φ) def arc (C : Cell F) (k : Fin C.R.N) : Set (Place ℂ F) := C.ζ.symm '' C.R.arcSet k end Cell structure CellDissection (F : Type*) [Field F] [Algebra ℂ F] [TopologicalSpace (Place ℂ F)] [ChartedSpace ℂ (Place ℂ F)] where ιC : Type ιE : Type ιV : Type [fintypeC : Fintype ιC] [fintypeE : Fintype ιE] [fintypeV : Fintype ιV] [decEqC : DecidableEq ιC] [decEqE : DecidableEq ιE] [decEqV : DecidableEq ιV] cell : ιC → Cell F side : (C : ιC) → Fin (cell C).R.N → ιE × Bool side_bij : Function.Bijective fun p : (Σ C : ιC, Fin (cell C).R.N) => side p.1 p.2 ends : ιE → ιV × ιV vert : ιV → Place ℂ F arc_ends : ∀ (C : ιC) (k : Fin (cell C).R.N), (cell C).bdry ((cell C).R.φs k.castSucc) = vert (if (side C k).2 then (ends (side C k).1).1 else (ends (side C k).1).2) ∧ (cell C).bdry ((cell C).R.φs k.succ) = vert (if (side C k).2 then (ends (side C k).1).2 else (ends (side C k).1).1) arc_rev : ∀ (C : ιC) (k : Fin (cell C).R.N) (C' : ιC) (k' : Fin (cell C').R.N), (side C k).1 = (side C' k').1 → (side C k).2 = true → (side C' k').2 = false → ∃ ψ : ℝ → ℝ, StrictAntiOn ψ ((cell C').R.arcIcc k') ∧ ContDiffOn ℝ 1 ψ ((cell C').R.arcIcc k') ∧ ψ ((cell C').R.φs k'.castSucc) = (cell C).R.φs k.succ ∧ ψ ((cell C').R.φs k'.succ) = (cell C).R.φs k.castSucc ∧ ∀ t ∈ (cell C').R.arcIcc k', (cell C').bdry t = (cell C).bdry (ψ t) cover : ⋃ C, (cell C).carrier = univ inter : ∀ (C C' : ιC) (x : Place ℂ F), x ∈ (cell C).carrier → x ∈ (cell C').carrier → Relation.ReflTransGen (fun A B : ιC => ∃ (k : Fin (cell A).R.N) (k' : Fin (cell B).R.N), (side A k).1 = (side B k').1 ∧ x ∈ (cell A).arc k) C C' conn : ∀ C C' : ιC, Relation.ReflTransGen (fun A B : ιC => ∃ (k : Fin (cell A).R.N) (k' : Fin (cell B).R.N), (side A k).1 = (side B k').1) C C' attribute [instance] CellDissection.fintypeC CellDissection.fintypeE CellDissection.fintypeV CellDissection.decEqC CellDissection.decEqE CellDissection.decEqV section Integrals variable {F : Type*} [Field F] [Algebra ℂ F] variable [TopologicalSpace (Place ℂ F)] [ChartedSpace ℂ (Place ℂ F)] noncomputable def coeffIn (ζ : OpenPartialHomeomorph (Place ℂ F) ℂ) (θ : Ω[F⁄ℂ]) (w : ℂ) : ℂ := (ζ.symm w).readDifferential θ (extChartAt 𝓘(ℂ, ℂ) (ζ.symm w) (ζ.symm w)) * deriv (extChartAt 𝓘(ℂ, ℂ) (ζ.symm w) ∘ ζ.symm) w noncomputable def Cell.bdryIntegrand (C : Cell F) (θ : Ω[F⁄ℂ]) (s : ℝ) : ℂ := coeffIn C.ζ θ (C.R.loop s) * C.R.loop' s noncomputable def CellDissection.arcOf (𝒟 : CellDissection F) (q : 𝒟.ιE × Bool) : Σ C : 𝒟.ιC, Fin (𝒟.cell C).R.N := Function.surjInv 𝒟.side_bij.surjective q noncomputable def CellDissection.edgeInt (𝒟 : CellDissection F) (θ : Ω[F⁄ℂ]) (e : 𝒟.ιE) : ℂ := ∫ s in ((𝒟.cell (𝒟.arcOf (e, true)).1).R.φs (𝒟.arcOf (e, true)).2.castSucc).. ((𝒟.cell (𝒟.arcOf (e, true)).1).R.φs (𝒟.arcOf (e, true)).2.succ), (𝒟.cell (𝒟.arcOf (e, true)).1).bdryIntegrand θ s def CellDissection.skeleton (𝒟 : CellDissection F) : Set (Place ℂ F) := ⋃ p : (Σ C : 𝒟.ιC, Fin (𝒟.cell C).R.N), (𝒟.cell p.1).arc p.2 end Integrals end AlgebraicCurve
Statements phrased using this module (22)
- Periods of third-kind differentials along loops avoiding poles
AlgebraicCurve.CellDissection.exists_int_pathIntegral_eq_sum_periods_add_sum_residues15 below · depth 18 - Path integrals modulo the lattice of edge jumps
AlgebraicCurve.CellDissection.exists_int_pathIntegral_sub_primitive_eq_sum_jump9 below · depth 18 - Fundamental cycles realised by loops in the skeleton
AlgebraicCurve.CellDissection.exists_loop_pathIntegral_eq_sum_cycle_mul_edgeInt10 below · depth 18 - Polygon boundary word of a cut cell dissection
AlgebraicCurve.CellDissection.exists_polygonWord0 below · depth 18 - Normalised cell primitives of regular differentials on a dual tree
AlgebraicCurve.CellDissection.exists_primitives_jump_eq_zero_of_dualTree13 below · depth 18 - Tree–cotree splitting of a cell dissection
AlgebraicCurve.CellDissection.exists_tree_cotree0 below · depth 18 - Reversed copy of an edge integrates to minus the edge integral
AlgebraicCurve.CellDissection.intervalIntegral_bdryIntegrand_neg_eq_neg_edgeInt9 below · depth 18 - Kirchhoff's law and the boundary-word formula for primitive jumps
AlgebraicCurve.CellDissection.jump_kirchhoff_and_wordFormula_of_primitives10 below · depth 18 - Summed residue theorem over a cell dissection
AlgebraicCurve.CellDissection.two_pi_I_mul_sum_residue_mul_primitive_eq_sum_jump_mul_edgeInt11 below · depth 18 - Star-convex open neighbourhood of a radial region
AlgebraicCurve.RadialRegion.exists_isOpen_starConvex_subset0 below · depth 18 - Local calculus for a differential's coefficient in an analytic chart
AlgebraicCurve.coeffIn_local_calculus8 below · depth 18 - Cell dissection of a compact complex curve with marked places
AlgebraicCurve.exists_cellDissection137 below · depth 18 - Kirchhoff's law and the word formula for arc jumps
AlgebraicCurve.CellDissection.kirchhoff_and_jump_formula_of_arc_values0 below · depth 19 - Existence of a paired cell family on a compact complex curve
AlgebraicCurve.exists_pairedCellFamily136 below · depth 19 - Pairing, reparametrisation and vertex data for a square grid
AlgebraicCurve.RadialRegion.exists_grid_geometry2 below · depth 20 - Pullback of a radial region along u↦ q+u^e, with laps
AlgebraicCurve.RadialRegion.exists_pow_pullback_laps0 below · depth 20 - Inversion of a radial region centred at the origin
AlgebraicCurve.RadialRegion.exists_recip0 below · depth 20 - A rectangle is a radial region with six arcs
AlgebraicCurve.RadialRegion.exists_rect_sixArcs0 below · depth 20 - Reparametrising a shared straight edge of two radial regions
AlgebraicCurve.RadialRegion.exists_reparam_across_edge0 below · depth 20 - Same-side reparametrisation of a shared straight side of radial regions
AlgebraicCurve.RadialRegion.exists_reparam_same_side0 below · depth 20 - Grid window as a radial region with perimeter arcs
AlgebraicCurve.RadialRegion.exists_window_perimeter2 below · depth 20 - Exact refinement of a radial region by inserted angles
AlgebraicCurve.RadialRegion.exists_refine_exact0 below · depth 21