File: Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean

full_name: UpperHalfPlane.instDist
code: instance : Dist ℍ 
goal: Dist ℍ

full_name: UpperHalfPlane.dist_eq
code: theorem dist_eq (z w : ℍ) : dist z w = 2 * arsinh (dist (z : ℂ) w / (2 * √(z.im * w.im))) 
goal: dist z w = 2 * Real.arsinh (dist ↑z ↑w / (2 * √(z.im * w.im)))

full_name: UpperHalfPlane.sinh_half_dist
code: theorem sinh_half_dist (z w : ℍ) :
    sinh (dist z w / 2) = dist (z : ℂ) w / (2 * √(z.im * w.im)) 
goal: Real.sinh (dist z w / 2) = dist ↑z ↑w / (2 * √(z.im * w.im))

full_name: UpperHalfPlane.cosh_half_dist
code: theorem cosh_half_dist (z w : ℍ) :
    cosh (dist z w / 2) = dist (z : ℂ) (conj (w : ℂ)) / (2 * √(z.im * w.im)) 
goal: Real.cosh (dist z w / 2) = dist (↑z) ((starRingEnd ℂ) ↑w) / (2 * √(z.im * w.im))

full_name: UpperHalfPlane.tanh_half_dist
code: theorem tanh_half_dist (z w : ℍ) :
    tanh (dist z w / 2) = dist (z : ℂ) w / dist (z : ℂ) (conj ↑w) 
goal: Real.tanh (dist z w / 2) = dist ↑z ↑w / dist (↑z) ((starRingEnd ℂ) ↑w)

full_name: UpperHalfPlane.exp_half_dist
code: theorem exp_half_dist (z w : ℍ) :
    exp (dist z w / 2) = (dist (z : ℂ) w + dist (z : ℂ) (conj ↑w)) / (2 * √(z.im * w.im)) 
goal: rexp (dist z w / 2) = (dist ↑z ↑w + dist (↑z) ((starRingEnd ℂ) ↑w)) / (2 * √(z.im * w.im))

full_name: UpperHalfPlane.cosh_dist
code: theorem cosh_dist (z w : ℍ) : cosh (dist z w) = 1 + dist (z : ℂ) w ^ 2 / (2 * z.im * w.im) 
goal: Real.cosh (dist z w) = 1 + dist ↑z ↑w ^ 2 / (2 * z.im * w.im)

full_name: UpperHalfPlane.sinh_half_dist_add_dist
code: theorem sinh_half_dist_add_dist (a b c : ℍ) : sinh ((dist a b + dist b c) / 2) =
    (dist (a : ℂ) b * dist (c : ℂ) (conj ↑b) + dist (b : ℂ) c * dist (a : ℂ) (conj ↑b)) /
      (2 * √(a.im * c.im) * dist (b : ℂ) (conj ↑b)) 
goal: 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))

full_name: UpperHalfPlane.dist_comm
code: protected theorem dist_comm (z w : ℍ) : dist z w = dist w z 
goal: dist z w = dist w z

full_name: UpperHalfPlane.dist_le_iff_le_sinh
code: theorem dist_le_iff_le_sinh :
    dist z w ≤ r ↔ dist (z : ℂ) w / (2 * √(z.im * w.im)) ≤ sinh (r / 2) 
goal: dist z w ≤ r ↔ dist ↑z ↑w / (2 * √(z.im * w.im)) ≤ Real.sinh (r / 2)

full_name: UpperHalfPlane.dist_eq_iff_eq_sinh
code: theorem dist_eq_iff_eq_sinh :
    dist z w = r ↔ dist (z : ℂ) w / (2 * √(z.im * w.im)) = sinh (r / 2) 
goal: dist z w = r ↔ dist ↑z ↑w / (2 * √(z.im * w.im)) = Real.sinh (r / 2)

full_name: UpperHalfPlane.dist_eq_iff_eq_sq_sinh
code: theorem dist_eq_iff_eq_sq_sinh (hr : 0 ≤ r) :
    dist z w = r ↔ dist (z : ℂ) w ^ 2 / (4 * z.im * w.im) = sinh (r / 2) ^ 2 
goal: dist z w = r ↔ dist ↑z ↑w ^ 2 / (4 * z.im * w.im) = Real.sinh (r / 2) ^ 2

full_name: UpperHalfPlane.dist_triangle
code: protected theorem dist_triangle (a b c : ℍ) : dist a c ≤ dist a b + dist b c 
goal: dist a c ≤ dist a b + dist b c

full_name: UpperHalfPlane.dist_le_dist_coe_div_sqrt
code: theorem dist_le_dist_coe_div_sqrt (z w : ℍ) : dist z w ≤ dist (z : ℂ) w / √(z.im * w.im) 
goal: dist z w ≤ dist ↑z ↑w / √(z.im * w.im)

full_name: UpperHalfPlane.metricSpaceAux
code: /-- An auxiliary `MetricSpace` instance on the upper half-plane. This instance has bad projection
to `TopologicalSpace`. We replace it later. -/
def metricSpaceAux : MetricSpace ℍ 
goal: MetricSpace ℍ

full_name: UpperHalfPlane.cosh_dist'
code: theorem cosh_dist' (z w : ℍ) :
    Real.cosh (dist z w) = ((z.re - w.re) ^ 2 + z.im ^ 2 + w.im ^ 2) / (2 * z.im * w.im) 
goal: Real.cosh (dist z w) = ((z.re - w.re) ^ 2 + z.im ^ 2 + w.im ^ 2) / (2 * z.im * w.im)

full_name: UpperHalfPlane.center
code: /-- Euclidean center of the circle with center `z` and radius `r` in the hyperbolic metric. -/
def center (z : ℍ) (r : ℝ) : ℍ 
goal: ℍ

full_name: UpperHalfPlane.center_re
code: @[simp]
theorem center_re (z r) : (center z r).re = z.re 
goal: (z.center r).re = z.re

full_name: UpperHalfPlane.center_im
code: @[simp]
theorem center_im (z r) : (center z r).im = z.im * Real.cosh r 
goal: (z.center r).im = z.im * Real.cosh r

full_name: UpperHalfPlane.center_zero
code: @[simp]
theorem center_zero (z : ℍ) : center z 0 = z 
goal: z.center 0 = z

full_name: UpperHalfPlane.dist_coe_center_sq
code: theorem dist_coe_center_sq (z w : ℍ) (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 
goal: 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

full_name: UpperHalfPlane.dist_coe_center
code: theorem dist_coe_center (z w : ℍ) (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) 
goal: dist ↑z ↑(w.center r) = √(2 * z.im * w.im * (Real.cosh (dist z w) - Real.cosh r) + (w.im * Real.sinh r) ^ 2)

full_name: UpperHalfPlane.cmp_dist_eq_cmp_dist_coe_center
code: theorem cmp_dist_eq_cmp_dist_coe_center (z w : ℍ) (r : ℝ) :
    cmp (dist z w) r = cmp (dist (z : ℂ) (w.center r)) (w.im * Real.sinh r) 
goal: cmp (dist z w) r = cmp (dist ↑z ↑(w.center r)) (w.im * Real.sinh r)

full_name: UpperHalfPlane.dist_eq_iff_dist_coe_center_eq
code: theorem dist_eq_iff_dist_coe_center_eq :
    dist z w = r ↔ dist (z : ℂ) (w.center r) = w.im * Real.sinh r 
goal: dist z w = r ↔ dist ↑z ↑(w.center r) = w.im * Real.sinh r

full_name: UpperHalfPlane.dist_self_center
code: @[simp]
theorem dist_self_center (z : ℍ) (r : ℝ) :
    dist (z : ℂ) (z.center r) = z.im * (Real.cosh r - 1) 
goal: dist ↑z ↑(z.center r) = z.im * (Real.cosh r - 1)

full_name: UpperHalfPlane.dist_center_dist
code: @[simp]
theorem dist_center_dist (z w : ℍ) :
    dist (z : ℂ) (w.center (dist z w)) = w.im * Real.sinh (dist z w) 
goal: dist ↑z ↑(w.center (dist z w)) = w.im * Real.sinh (dist z w)

full_name: UpperHalfPlane.dist_lt_iff_dist_coe_center_lt
code: theorem dist_lt_iff_dist_coe_center_lt :
    dist z w < r ↔ dist (z : ℂ) (w.center r) < w.im * Real.sinh r 
goal: dist z w < r ↔ dist ↑z ↑(w.center r) < w.im * Real.sinh r

full_name: UpperHalfPlane.lt_dist_iff_lt_dist_coe_center
code: theorem lt_dist_iff_lt_dist_coe_center :
    r < dist z w ↔ w.im * Real.sinh r < dist (z : ℂ) (w.center r) 
goal: r < dist z w ↔ w.im * Real.sinh r < dist ↑z ↑(w.center r)

full_name: UpperHalfPlane.dist_le_iff_dist_coe_center_le
code: theorem dist_le_iff_dist_coe_center_le :
    dist z w ≤ r ↔ dist (z : ℂ) (w.center r) ≤ w.im * Real.sinh r 
goal: dist z w ≤ r ↔ dist ↑z ↑(w.center r) ≤ w.im * Real.sinh r

full_name: UpperHalfPlane.le_dist_iff_le_dist_coe_center
code: theorem le_dist_iff_le_dist_coe_center :
    r < dist z w ↔ w.im * Real.sinh r < dist (z : ℂ) (w.center r) 
goal: r < dist z w ↔ w.im * Real.sinh r < dist ↑z ↑(w.center r)

full_name: UpperHalfPlane.dist_of_re_eq
code: /-- For two points on the same vertical line, the distance is equal to the distance between the
logarithms of their imaginary parts. -/
nonrec theorem dist_of_re_eq (h : z.re = w.re) : dist z w = dist (log z.im) (log w.im) 
goal: dist z w = dist (Real.log z.im) (Real.log w.im)

full_name: UpperHalfPlane.dist_log_im_le
code: /-- Hyperbolic distance between two points is greater than or equal to the distance between the
logarithms of their imaginary parts. -/
theorem dist_log_im_le (z w : ℍ) : dist (log z.im) (log w.im) ≤ dist z w 
goal: dist (Real.log z.im) (Real.log w.im) ≤ dist z w

full_name: UpperHalfPlane.im_le_im_mul_exp_dist
code: theorem im_le_im_mul_exp_dist (z w : ℍ) : z.im ≤ w.im * Real.exp (dist z w) 
goal: z.im ≤ w.im * rexp (dist z w)

full_name: UpperHalfPlane.im_div_exp_dist_le
code: theorem im_div_exp_dist_le (z w : ℍ) : z.im / Real.exp (dist z w) ≤ w.im 
goal: z.im / rexp (dist z w) ≤ w.im

full_name: UpperHalfPlane.dist_coe_le
code: /-- 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 dist_coe_le (z w : ℍ) : dist (z : ℂ) w ≤ w.im * (Real.exp (dist z w) - 1) 
goal: dist ↑z ↑w ≤ w.im * (rexp (dist z w) - 1)

full_name: UpperHalfPlane.le_dist_coe
code: /-- 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 le_dist_coe (z w : ℍ) : w.im * (1 - Real.exp (-dist z w)) ≤ dist (z : ℂ) w 
goal: w.im * (1 - rexp (-dist z w)) ≤ dist ↑z ↑w

full_name: UpperHalfPlane.instMetricSpace
code: /-- The hyperbolic metric on the upper half plane. We ensure that the projection to
`TopologicalSpace` is definitionally equal to the subtype topology. -/
instance : MetricSpace ℍ 
goal: MetricSpace ℍ

full_name: UpperHalfPlane.im_pos_of_dist_center_le
code: theorem im_pos_of_dist_center_le {z : ℍ} {r : ℝ} {w : ℂ}
    (h : dist w (center z r) ≤ z.im * Real.sinh r) : 0 < w.im 
goal: 0 < w.im

full_name: UpperHalfPlane.image_coe_closedBall
code: theorem image_coe_closedBall (z : ℍ) (r : ℝ) :
    ((↑) : ℍ → ℂ) '' closedBall (α := ℍ) z r = closedBall ↑(z.center r) (z.im * Real.sinh r) 
goal: UpperHalfPlane.coe '' Metric.closedBall z r = Metric.closedBall (↑(z.center r)) (z.im * Real.sinh r)

full_name: UpperHalfPlane.image_coe_ball
code: theorem image_coe_ball (z : ℍ) (r : ℝ) :
    ((↑) : ℍ → ℂ) '' ball (α := ℍ) z r = ball ↑(z.center r) (z.im * Real.sinh r) 
goal: UpperHalfPlane.coe '' Metric.ball z r = Metric.ball (↑(z.center r)) (z.im * Real.sinh r)

full_name: UpperHalfPlane.image_coe_sphere
code: theorem image_coe_sphere (z : ℍ) (r : ℝ) :
    ((↑) : ℍ → ℂ) '' sphere (α := ℍ) z r = sphere ↑(z.center r) (z.im * Real.sinh r) 
goal: UpperHalfPlane.coe '' Metric.sphere z r = Metric.sphere (↑(z.center r)) (z.im * Real.sinh r)

full_name: UpperHalfPlane.instProperSpace
code: instance : ProperSpace ℍ 
goal: ProperSpace ℍ

full_name: UpperHalfPlane.isometry_vertical_line
code: theorem isometry_vertical_line (a : ℝ) : Isometry fun y => mk ⟨a, exp y⟩ (exp_pos y) 
goal: Isometry fun y => UpperHalfPlane.mk { re := a, im := rexp y } ⋯

full_name: UpperHalfPlane.isometry_real_vadd
code: theorem isometry_real_vadd (a : ℝ) : Isometry (a +ᵥ · : ℍ → ℍ) 
goal: Isometry fun x => a +ᵥ x

full_name: UpperHalfPlane.isometry_pos_mul
code: theorem isometry_pos_mul (a : { x : ℝ // 0 < x }) : Isometry (a • · : ℍ → ℍ) 
goal: Isometry fun x => a • x

full_name: UpperHalfPlane.instIsometricSMulSpecialLinearGroupFinOfNatNatReal
code: /-- `SL(2, ℝ)` acts on the upper half plane as an isometry. -/
instance : IsometricSMul SL(2, ℝ) ℍ 
goal: IsometricSMul SL(2, ℝ) ℍ