|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Yury Kudryashov. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Yury Kudryashov |
| 5 | +-/ |
| 6 | +import analysis.complex.circle |
| 7 | +import analysis.normed_space.ball_action |
| 8 | +import group_theory.subsemigroup.membership |
| 9 | + |
| 10 | +/-! |
| 11 | +# Poincaré disc |
| 12 | +
|
| 13 | +In this file we define `complex.unit_disc` to be the unit disc in the complex plane. We also |
| 14 | +introduce some basic operations on this disc. |
| 15 | +-/ |
| 16 | + |
| 17 | +open set function metric |
| 18 | +open_locale big_operators |
| 19 | +noncomputable theory |
| 20 | + |
| 21 | +local notation `conj'` := star_ring_end ℂ |
| 22 | + |
| 23 | +namespace complex |
| 24 | + |
| 25 | +/-- Complex unit disc. -/ |
| 26 | +@[derive [comm_semigroup, has_distrib_neg, λ α, has_coe α ℂ, topological_space]] |
| 27 | +def unit_disc : Type := ball (0 : ℂ) 1 |
| 28 | +localized "notation `𝔻` := complex.unit_disc" in unit_disc |
| 29 | + |
| 30 | +namespace unit_disc |
| 31 | + |
| 32 | +lemma coe_injective : injective (coe : 𝔻 → ℂ) := subtype.coe_injective |
| 33 | + |
| 34 | +lemma abs_lt_one (z : 𝔻) : abs (z : ℂ) < 1 := mem_ball_zero_iff.1 z.2 |
| 35 | + |
| 36 | +lemma abs_ne_one (z : 𝔻) : abs (z : ℂ) ≠ 1 := z.abs_lt_one.ne |
| 37 | + |
| 38 | +lemma norm_sq_lt_one (z : 𝔻) : norm_sq z < 1 := |
| 39 | +@one_pow ℝ _ 2 ▸ (real.sqrt_lt' one_pos).1 z.abs_lt_one |
| 40 | + |
| 41 | +lemma coe_ne_one (z : 𝔻) : (z : ℂ) ≠ 1 := |
| 42 | +ne_of_apply_ne abs $ (map_one abs).symm ▸ z.abs_ne_one |
| 43 | + |
| 44 | +lemma coe_ne_neg_one (z : 𝔻) : (z : ℂ) ≠ -1 := |
| 45 | +ne_of_apply_ne abs $ by { rw [abs.map_neg, map_one], exact z.abs_ne_one } |
| 46 | + |
| 47 | +lemma one_add_coe_ne_zero (z : 𝔻) : (1 + z : ℂ) ≠ 0 := |
| 48 | +mt neg_eq_iff_add_eq_zero.2 z.coe_ne_neg_one.symm |
| 49 | + |
| 50 | +@[simp, norm_cast] lemma coe_mul (z w : 𝔻) : ↑(z * w) = (z * w : ℂ) := rfl |
| 51 | + |
| 52 | +/-- A constructor that assumes `abs z < 1` instead of `dist z 0 < 1` and returns an element |
| 53 | +of `𝔻` instead of `↥metric.ball (0 : ℂ) 1`. -/ |
| 54 | +def mk (z : ℂ) (hz : abs z < 1) : 𝔻 := ⟨z, mem_ball_zero_iff.2 hz⟩ |
| 55 | + |
| 56 | +@[simp] lemma coe_mk (z : ℂ) (hz : abs z < 1) : (mk z hz : ℂ) = z := rfl |
| 57 | + |
| 58 | +@[simp] lemma mk_coe (z : 𝔻) (hz : abs (z : ℂ) < 1 := z.abs_lt_one) : |
| 59 | + mk z hz = z := |
| 60 | +subtype.eta _ _ |
| 61 | + |
| 62 | +@[simp] lemma mk_neg (z : ℂ) (hz : abs (-z) < 1) : |
| 63 | + mk (-z) hz = -mk z (abs.map_neg z ▸ hz) := |
| 64 | +rfl |
| 65 | + |
| 66 | +instance : semigroup_with_zero 𝔻 := |
| 67 | +{ zero := mk 0 $ (map_zero _).trans_lt one_pos, |
| 68 | + zero_mul := λ z, coe_injective $ zero_mul _, |
| 69 | + mul_zero := λ z, coe_injective $ mul_zero _, |
| 70 | + .. unit_disc.comm_semigroup} |
| 71 | + |
| 72 | +@[simp] lemma coe_zero : ((0 : 𝔻) : ℂ) = 0 := rfl |
| 73 | +@[simp] lemma coe_eq_zero {z : 𝔻} : (z : ℂ) = 0 ↔ z = 0 := coe_injective.eq_iff' coe_zero |
| 74 | +instance : inhabited 𝔻 := ⟨0⟩ |
| 75 | + |
| 76 | +instance circle_action : mul_action circle 𝔻 := mul_action_sphere_ball |
| 77 | + |
| 78 | +instance is_scalar_tower_circle_circle : is_scalar_tower circle circle 𝔻 := |
| 79 | +is_scalar_tower_sphere_sphere_ball |
| 80 | + |
| 81 | +instance is_scalar_tower_circle : is_scalar_tower circle 𝔻 𝔻 := is_scalar_tower_sphere_ball_ball |
| 82 | +instance smul_comm_class_circle : smul_comm_class circle 𝔻 𝔻 := smul_comm_class_sphere_ball_ball |
| 83 | +instance smul_comm_class_circle' : smul_comm_class 𝔻 circle 𝔻 := smul_comm_class.symm _ _ _ |
| 84 | + |
| 85 | +@[simp, norm_cast] lemma coe_smul_circle (z : circle) (w : 𝔻) : ↑(z • w) = (z * w : ℂ) := rfl |
| 86 | + |
| 87 | +instance closed_ball_action : mul_action (closed_ball (0 : ℂ) 1) 𝔻 := mul_action_closed_ball_ball |
| 88 | + |
| 89 | +instance is_scalar_tower_closed_ball_closed_ball : |
| 90 | + is_scalar_tower (closed_ball (0 : ℂ) 1) (closed_ball (0 : ℂ) 1) 𝔻 := |
| 91 | +is_scalar_tower_closed_ball_closed_ball_ball |
| 92 | + |
| 93 | +instance is_scalar_tower_closed_ball : is_scalar_tower (closed_ball (0 : ℂ) 1) 𝔻 𝔻 := |
| 94 | +is_scalar_tower_closed_ball_ball_ball |
| 95 | + |
| 96 | +instance smul_comm_class_closed_ball : smul_comm_class (closed_ball (0 : ℂ) 1) 𝔻 𝔻 := |
| 97 | +⟨λ a b c, subtype.ext $ mul_left_comm _ _ _⟩ |
| 98 | + |
| 99 | +instance smul_comm_class_closed_ball' : smul_comm_class 𝔻 (closed_ball (0 : ℂ) 1) 𝔻 := |
| 100 | +smul_comm_class.symm _ _ _ |
| 101 | + |
| 102 | +instance smul_comm_class_circle_closed_ball : smul_comm_class circle (closed_ball (0 : ℂ) 1) 𝔻 := |
| 103 | +smul_comm_class_sphere_closed_ball_ball |
| 104 | + |
| 105 | +instance smul_comm_class_closed_ball_circle : smul_comm_class (closed_ball (0 : ℂ) 1) circle 𝔻 := |
| 106 | +smul_comm_class.symm _ _ _ |
| 107 | + |
| 108 | +@[simp, norm_cast] |
| 109 | +lemma coe_smul_closed_ball (z : closed_ball (0 : ℂ) 1) (w : 𝔻) : ↑(z • w) = (z * w : ℂ) := rfl |
| 110 | + |
| 111 | +/-- Real part of a point of the unit disc. -/ |
| 112 | +def re (z : 𝔻) : ℝ := re z |
| 113 | + |
| 114 | +/-- Imaginary part of a point of the unit disc. -/ |
| 115 | +def im (z : 𝔻) : ℝ := im z |
| 116 | + |
| 117 | +@[simp, norm_cast] lemma re_coe (z : 𝔻) : (z : ℂ).re = z.re := rfl |
| 118 | +@[simp, norm_cast] lemma im_coe (z : 𝔻) : (z : ℂ).im = z.im := rfl |
| 119 | +@[simp] lemma re_neg (z : 𝔻) : (-z).re = -z.re := rfl |
| 120 | +@[simp] lemma im_neg (z : 𝔻) : (-z).im = -z.im := rfl |
| 121 | + |
| 122 | +/-- Conjugate point of the unit disc. -/ |
| 123 | +def conj (z : 𝔻) : 𝔻 := mk (conj' ↑z) $ (abs_conj z).symm ▸ z.abs_lt_one |
| 124 | + |
| 125 | +@[simp, norm_cast] lemma coe_conj (z : 𝔻) : (z.conj : ℂ) = conj' ↑z := rfl |
| 126 | +@[simp] lemma conj_zero : conj 0 = 0 := coe_injective (map_zero conj') |
| 127 | +@[simp] lemma conj_conj (z : 𝔻) : conj (conj z) = z := coe_injective $ complex.conj_conj z |
| 128 | +@[simp] lemma conj_neg (z : 𝔻) : (-z).conj = -z.conj := rfl |
| 129 | +@[simp] lemma re_conj (z : 𝔻) : z.conj.re = z.re := rfl |
| 130 | +@[simp] lemma im_conj (z : 𝔻) : z.conj.im = -z.im := rfl |
| 131 | +@[simp] lemma conj_mul (z w : 𝔻) : (z * w).conj = z.conj * w.conj := subtype.ext $ map_mul _ _ _ |
| 132 | + |
| 133 | +end unit_disc |
| 134 | + |
| 135 | +end complex |
0 commit comments