Documentation

Mathlib.Analysis.Complex.UpperHalfPlane.Metric

Metric on the upper half-plane #

In this file we define a MetricSpace structure on the UpperHalfPlane. We use hyperbolic (Poincaré) distance given by dist z w = 2 * arsinh (dist (z : ℂ) w / (2 * √(z.im * w.im))) instead of the induced Euclidean distance because the hyperbolic distance is invariant under holomorphic automorphisms of the upper half-plane. However, we ensure that the projection to TopologicalSpace is definitionally equal to the induced topological space structure.

We also prove that a metric ball/closed ball/sphere in Poincaré metric is a Euclidean ball/closed ball/sphere with another center and radius.

Equations
theorem UpperHalfPlane.dist_eq (z : UpperHalfPlane) (w : UpperHalfPlane) :
dist z w = 2 * Real.arsinh (dist z w / (2 * (z.im * w.im)))
theorem UpperHalfPlane.sinh_half_dist (z : UpperHalfPlane) (w : UpperHalfPlane) :
Real.sinh (dist z w / 2) = dist z w / (2 * (z.im * w.im))
theorem UpperHalfPlane.cosh_half_dist (z : UpperHalfPlane) (w : UpperHalfPlane) :
Real.cosh (dist z w / 2) = dist (↑z) ((starRingEnd ) w) / (2 * (z.im * w.im))
theorem UpperHalfPlane.exp_half_dist (z : UpperHalfPlane) (w : UpperHalfPlane) :
Real.exp (dist z w / 2) = (dist z w + dist (↑z) ((starRingEnd ) w)) / (2 * (z.im * w.im))
theorem UpperHalfPlane.cosh_dist (z : UpperHalfPlane) (w : UpperHalfPlane) :
Real.cosh (dist z w) = 1 + dist z w ^ 2 / (2 * z.im * w.im)
theorem UpperHalfPlane.sinh_half_dist_add_dist (a : UpperHalfPlane) (b : UpperHalfPlane) (c : UpperHalfPlane) :
Real.sinh ((dist a b + dist b c) / 2) = (dist a b * dist (↑c) ((starRingEnd ) b) + dist b c * dist (↑a) ((starRingEnd ) b)) / (2 * (a.im * c.im) * dist (↑b) ((starRingEnd ) b))
theorem UpperHalfPlane.dist_le_iff_le_sinh {z : UpperHalfPlane} {w : UpperHalfPlane} {r : } :
dist z w r dist z w / (2 * (z.im * w.im)) Real.sinh (r / 2)
theorem UpperHalfPlane.dist_eq_iff_eq_sinh {z : UpperHalfPlane} {w : UpperHalfPlane} {r : } :
dist z w = r dist z w / (2 * (z.im * w.im)) = Real.sinh (r / 2)
theorem UpperHalfPlane.dist_eq_iff_eq_sq_sinh {z : UpperHalfPlane} {w : UpperHalfPlane} {r : } (hr : 0 r) :
dist z w = r dist z w ^ 2 / (4 * z.im * w.im) = Real.sinh (r / 2) ^ 2

An auxiliary MetricSpace instance on the upper half-plane. This instance has bad projection to TopologicalSpace. We replace it later.

Equations
Instances For
    theorem UpperHalfPlane.cosh_dist' (z : UpperHalfPlane) (w : UpperHalfPlane) :
    Real.cosh (dist z w) = ((z.re - w.re) ^ 2 + z.im ^ 2 + w.im ^ 2) / (2 * z.im * w.im)

    Euclidean center of the circle with center z and radius r in the hyperbolic metric.

    Equations
    • z.center r = { re := z.re, im := z.im * Real.cosh r },
    Instances For
      @[simp]
      theorem UpperHalfPlane.center_re (z : UpperHalfPlane) (r : ) :
      (z.center r).re = z.re
      @[simp]
      theorem UpperHalfPlane.center_im (z : UpperHalfPlane) (r : ) :
      (z.center r).im = z.im * Real.cosh r
      @[simp]
      theorem UpperHalfPlane.center_zero (z : UpperHalfPlane) :
      z.center 0 = z
      theorem UpperHalfPlane.dist_coe_center_sq (z : UpperHalfPlane) (w : UpperHalfPlane) (r : ) :
      dist z (w.center r) ^ 2 = 2 * z.im * w.im * (Real.cosh (dist z w) - Real.cosh r) + (w.im * Real.sinh r) ^ 2
      theorem UpperHalfPlane.dist_coe_center (z : UpperHalfPlane) (w : UpperHalfPlane) (r : ) :
      dist z (w.center r) = (2 * z.im * w.im * (Real.cosh (dist z w) - Real.cosh r) + (w.im * Real.sinh r) ^ 2)
      theorem UpperHalfPlane.cmp_dist_eq_cmp_dist_coe_center (z : UpperHalfPlane) (w : UpperHalfPlane) (r : ) :
      cmp (dist z w) r = cmp (dist z (w.center r)) (w.im * Real.sinh r)
      theorem UpperHalfPlane.dist_eq_iff_dist_coe_center_eq {z : UpperHalfPlane} {w : UpperHalfPlane} {r : } :
      dist z w = r dist z (w.center r) = w.im * Real.sinh r
      @[simp]
      theorem UpperHalfPlane.dist_self_center (z : UpperHalfPlane) (r : ) :
      dist z (z.center r) = z.im * (Real.cosh r - 1)
      @[simp]
      theorem UpperHalfPlane.dist_center_dist (z : UpperHalfPlane) (w : UpperHalfPlane) :
      dist z (w.center (dist z w)) = w.im * Real.sinh (dist z w)
      theorem UpperHalfPlane.dist_lt_iff_dist_coe_center_lt {z : UpperHalfPlane} {w : UpperHalfPlane} {r : } :
      dist z w < r dist z (w.center r) < w.im * Real.sinh r
      theorem UpperHalfPlane.lt_dist_iff_lt_dist_coe_center {z : UpperHalfPlane} {w : UpperHalfPlane} {r : } :
      r < dist z w w.im * Real.sinh r < dist z (w.center r)
      theorem UpperHalfPlane.le_dist_iff_le_dist_coe_center {z : UpperHalfPlane} {w : UpperHalfPlane} {r : } :
      r < dist z w w.im * Real.sinh r < dist z (w.center r)
      theorem UpperHalfPlane.dist_of_re_eq {z : UpperHalfPlane} {w : UpperHalfPlane} (h : z.re = w.re) :
      dist z w = dist (Real.log z.im) (Real.log w.im)

      For two points on the same vertical line, the distance is equal to the distance between the logarithms of their imaginary parts.

      Hyperbolic distance between two points is greater than or equal to the distance between the logarithms of their imaginary parts.

      theorem UpperHalfPlane.dist_coe_le (z : UpperHalfPlane) (w : UpperHalfPlane) :
      dist z w w.im * (Real.exp (dist z w) - 1)

      An upper estimate on the complex distance between two points in terms of the hyperbolic distance and the imaginary part of one of the points.

      theorem UpperHalfPlane.le_dist_coe (z : UpperHalfPlane) (w : UpperHalfPlane) :
      w.im * (1 - Real.exp (-dist z w)) dist z w

      An upper estimate on the complex distance between two points in terms of the hyperbolic distance and the imaginary part of one of the points.

      The hyperbolic metric on the upper half plane. We ensure that the projection to TopologicalSpace is definitionally equal to the subtype topology.

      Equations
      theorem UpperHalfPlane.im_pos_of_dist_center_le {z : UpperHalfPlane} {r : } {w : } (h : dist w (z.center r) z.im * Real.sinh r) :
      0 < w.im
      theorem UpperHalfPlane.isometry_vertical_line (a : ) :
      Isometry fun (y : ) => UpperHalfPlane.mk { re := a, im := Real.exp y }
      theorem UpperHalfPlane.isometry_pos_mul (a : { x : // 0 < x }) :
      Isometry fun (x : UpperHalfPlane) => a x