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

Commit 7285fb6

Browse files
committed
feat(data/complex/circle): circle is a Lie group (#6907)
Define `circle` to be the unit circle in `ℂ` and give it the structure of a Lie group. Also define `exp_map_circle` to be the natural map `λ t, exp (t * I)` from `ℝ` to `circle`, and give it (separately) the structures of a group homomorphism and a smooth map (we seem not to have the definition of a Lie group homomorphism).
1 parent accb9d2 commit 7285fb6

File tree

2 files changed

+116
-0
lines changed

2 files changed

+116
-0
lines changed

src/data/complex/module.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ by simp [← findim_eq_dim, findim_real_complex]
136136
lemma {u} dim_real_complex' : cardinal.lift.{0 u} (vector_space.dim ℝ ℂ) = 2 :=
137137
by simp [← findim_eq_dim, findim_real_complex, bit0]
138138

139+
/-- `fact` version of the dimension of `ℂ` over `ℝ`, locally useful in the definition of the
140+
circle. -/
141+
lemma findim_real_complex_fact : fact (findim ℝ ℂ = 2) := ⟨findim_real_complex⟩
142+
139143
end complex
140144

141145
/- Register as an instance (with low priority) the fact that a complex vector space is also a real
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
/-
2+
Copyright (c) 2021 Heather Macbeth. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Heather Macbeth
5+
-/
6+
import geometry.manifold.instances.sphere
7+
8+
/-!
9+
# The circle
10+
11+
This file defines `circle` to be the metric sphere (`metric.sphere`) in `ℂ` centred at `0` of
12+
radius `1`. We equip it with the following structure:
13+
14+
* a submonoid of `ℂ`
15+
* a group
16+
* a topological group
17+
* a charted space with model space `euclidean_space ℝ (fin 1)` (inherited from `metric.sphere`)
18+
* a Lie group with model with corners `𝓡 1`
19+
20+
We furthermore define `exp_map_circle` to be the natural map `λ t, exp (t * I)` from `ℝ` to
21+
`circle`, and show that this map is a group homomorphism and is smooth.
22+
23+
## Implementation notes
24+
25+
To borrow the smooth manifold structure cleanly, the circle needs to be defined using
26+
`metric.sphere`, and therefore the underlying set is `{z : ℂ | abs (z - 0) = 1}`. This prevents
27+
certain algebraic facts from working definitionally -- for example, the circle is not defeq to
28+
`{z : ℂ | abs z = 1}`, which is the kernel of `complex.abs` considered as a homomorphism from `ℂ`
29+
to `ℝ`, nor is it defeq to `{z : ℂ | norm_sq z = 1}`, which is the kernel of the homomorphism
30+
`complex.norm_sq` from `ℂ` to `ℝ`.
31+
32+
-/
33+
34+
noncomputable theory
35+
36+
open complex finite_dimensional metric
37+
open_locale manifold
38+
39+
local attribute [instance] findim_real_complex_fact
40+
41+
/-- The unit circle in `ℂ`, here given the structure of a submonoid of `ℂ`. -/
42+
def circle : submonoid ℂ :=
43+
{ carrier := sphere (0:ℂ) 1,
44+
one_mem' := by simp,
45+
mul_mem' := λ a b, begin
46+
simp only [norm_eq_abs, mem_sphere_zero_iff_norm],
47+
intros ha hb,
48+
simp [ha, hb],
49+
end }
50+
51+
@[simp] lemma mem_circle_iff_abs (z : ℂ) : z ∈ circle ↔ abs z = 1 := mem_sphere_zero_iff_norm
52+
53+
lemma circle_def : ↑circle = {z : ℂ | abs z = 1} := by { ext, simp }
54+
55+
@[simp] lemma abs_eq_of_mem_circle (z : circle) : abs z = 1 := by { convert z.2, simp }
56+
57+
instance : group circle :=
58+
{ inv := λ z, ⟨conj z, by simp⟩,
59+
mul_left_inv := λ z, subtype.ext $ by { simp [has_inv.inv, ← norm_sq_eq_conj_mul_self,
60+
← mul_self_abs] },
61+
.. circle.to_monoid }
62+
63+
@[simp] lemma coe_inv_circle (z : circle) : ↑(z⁻¹) = conj z := rfl
64+
@[simp] lemma coe_div_circle (z w : circle) : ↑(z / w) = ↑z * conj w := rfl
65+
66+
-- the following result could instead be deduced from the Lie group structure on the circle using
67+
-- `topological_group_of_lie_group`, but that seems a little awkward since one has to first provide
68+
-- and then forget the model space
69+
instance : topological_group circle :=
70+
{ continuous_mul := let h : continuous (λ x : circle, (x : ℂ)) := continuous_subtype_coe in
71+
continuous_induced_rng (continuous_mul.comp (h.prod_map h)),
72+
continuous_inv := continuous_induced_rng $
73+
complex.conj_clm.continuous.comp continuous_subtype_coe }
74+
75+
/-- The unit circle in `ℂ` is a charted space modelled on `euclidean_space ℝ (fin 1)`. This
76+
follows by definition from the corresponding result for `metric.sphere`. -/
77+
instance : charted_space (euclidean_space ℝ (fin 1)) circle := metric.sphere.charted_space
78+
79+
/-- The unit circle in `ℂ` is a Lie group. -/
80+
instance : lie_group (𝓡 1) circle :=
81+
{ smooth_mul := begin
82+
let c : circle → ℂ := coe,
83+
have h₁ : times_cont_mdiff _ _ _ (prod.map c c) :=
84+
times_cont_mdiff_coe_sphere.prod_map times_cont_mdiff_coe_sphere,
85+
have h₂ : times_cont_mdiff (𝓘(ℝ, ℂ).prod 𝓘(ℝ, ℂ)) 𝓘(ℝ, ℂ) ∞ (λ (z : ℂ × ℂ), z.fst * z.snd),
86+
{ rw times_cont_mdiff_iff,
87+
exact ⟨continuous_mul, λ x y, (times_cont_diff_mul.restrict_scalars ℝ).times_cont_diff_on⟩ },
88+
convert (h₂.comp h₁).cod_restrict_sphere _,
89+
convert smooth_manifold_with_corners.prod circle circle,
90+
{ exact metric.sphere.smooth_manifold_with_corners },
91+
{ exact metric.sphere.smooth_manifold_with_corners }
92+
end,
93+
smooth_inv := (complex.conj_clm.times_cont_diff.times_cont_mdiff.comp
94+
times_cont_mdiff_coe_sphere).cod_restrict_sphere _,
95+
.. metric.sphere.smooth_manifold_with_corners }
96+
97+
/-- The map `λ t, exp (t * I)` from `ℝ` to the unit circle in `ℂ`. -/
98+
def exp_map_circle (t : ℝ) : circle :=
99+
⟨exp (t * I), by simp [exp_mul_I, abs_cos_add_sin_mul_I]⟩
100+
101+
/-- The map `λ t, exp (t * I)` from `ℝ` to the unit circle in `ℂ`, considered as a homomorphism of
102+
groups. -/
103+
def exp_map_circle_hom : ℝ →+ (additive circle) :=
104+
{ to_fun := exp_map_circle,
105+
map_zero' := by { rw exp_map_circle, convert of_mul_one, simp },
106+
map_add' := λ x y, show exp_map_circle (x + y) = (exp_map_circle x) * (exp_map_circle y),
107+
from subtype.ext $ by simp [exp_map_circle, exp_add, add_mul] }
108+
109+
/-- The map `λ t, exp (t * I)` from `ℝ` to the unit circle in `ℂ` is smooth. -/
110+
lemma times_cont_mdiff_exp_map_circle : times_cont_mdiff 𝓘(ℝ, ℝ) (𝓡 1) ∞ exp_map_circle :=
111+
(((times_cont_diff_exp.restrict_scalars ℝ).comp
112+
(times_cont_diff_id.smul times_cont_diff_const)).times_cont_mdiff).cod_restrict_sphere _

0 commit comments

Comments
 (0)