Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 8792402

Browse files
committed
feat(analysis/complex): define complex.unit_disc (#17119)
1 parent 282ca10 commit 8792402

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
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

Comments
 (0)