@@ -3,32 +3,72 @@ Copyright (c) 2020 Oliver Nash. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Oliver Nash
5
5
-/
6
+ import algebra.invertible
6
7
import algebra.lie_algebra
7
8
import linear_algebra.matrix
8
9
9
10
/-!
10
11
# Classical Lie algebras
11
12
12
13
This file is the place to find definitions and basic properties of the classical Lie algebras:
13
- * Aₙ sl(n +1)
14
- * Bₙ so(2n +1)
15
- * Cₙ sp(2n )
16
- * Dₙ so(2n )
14
+ * Aₗ = sl(l +1)
15
+ * Bₗ ≃ so(l+1, l) ≃ so(2l +1)
16
+ * Cₗ = sp(l )
17
+ * Dₗ ≃ so(l, l) ≃ so(2l )
17
18
18
- As of April 2020, the definition of Aₙ is in place while the others still need to be provided.
19
+ ## Main definitions
20
+
21
+ * `lie_algebra.special_linear.sl`
22
+ * `lie_algebra.symplectic.sp`
23
+ * `lie_algebra.orthogonal.so`
24
+ * `lie_algebra.orthogonal.so'`
25
+ * `lie_algebra.orthogonal.so_indefinite_equiv`
26
+ * `lie_algebra.orthogonal.type_D`
27
+ * `lie_algebra.orthogonal.type_B`
28
+ * `lie_algebra.orthogonal.type_D_equiv_so'`
29
+ * `lie_algebra.orthogonal.type_B_equiv_so'`
30
+
31
+ ## Implementation notes
32
+
33
+ ### Matrices or endomorphisms
34
+
35
+ Given a finite type and a commutative ring, the corresponding square matrices are equivalent to the
36
+ endomorphisms of the corresponding finite-rank free module as Lie algebras, see `lie_equiv_matrix'`.
37
+ We can thus define the classical Lie algebras as Lie subalgebras either of matrices or of
38
+ endomorphisms. We have opted for the former. At the time of writing (August 2020) it is unclear
39
+ which approach should be preferred so the choice should be assumed to be somewhat arbitrary.
40
+
41
+ ### Diagonal quadratic form or diagonal Cartan subalgebra
42
+
43
+ For the algebras of type `B` and `D`, there are two natural definitions. For example since the
44
+ the `2l × 2l` matrix:
45
+ $$
46
+ J = \left[\begin{align}{cc}
47
+ 0_l & 1_l\\
48
+ 1_l & 0_l
49
+ \end{align}\right]
50
+ $$
51
+ defines a symmetric bilinear form equivalent to that defined by the identity matrix `I`, we can
52
+ define the algebras of type `D` to be the Lie subalgebra of skew-adjoint matrices either for `J` or
53
+ for `I`. Both definitions have their advantages (in particular the `J`-skew-adjoint matrices define
54
+ a Lie algebra for which the diagonal matrices form a Cartan subalgebra) and so we provide both.
55
+ We thus also provide equivalences `type_D_equiv_so'`, `so_indefinite_equiv` which show the two
56
+ definitions are equivalent. Similarly for the algebras of type `B`.
19
57
20
58
## Tags
21
59
22
- classical lie algebra, special linear
60
+ classical lie algebra, special linear, symplectic, orthogonal
23
61
-/
24
62
25
63
universes u₁ u₂
26
64
27
65
namespace lie_algebra
28
66
open_locale matrix
29
67
30
- variables (n : Type u₁) (R : Type u₂)
31
- variables [fintype n] [decidable_eq n] [comm_ring R]
68
+ variables (n p q l : Type u₁) (R : Type u₂)
69
+ variables [fintype n] [fintype l] [fintype p] [fintype q]
70
+ variables [decidable_eq n] [decidable_eq p] [decidable_eq q] [decidable_eq l]
71
+ variables [comm_ring R]
32
72
33
73
local attribute [instance] matrix.lie_ring
34
74
local attribute [instance] matrix.lie_algebra
90
130
91
131
end special_linear
92
132
133
+ namespace symplectic
134
+
135
+ /-- The matrix defining the canonical skew-symmetric bilinear form. -/
136
+ def J : matrix (l ⊕ l) (l ⊕ l) R := matrix.from_blocks 0 (-1 ) 1 0
137
+
138
+ /-- The symplectic Lie algebra: skew-adjoint matrices with respect to the canonical skew-symmetric
139
+ bilinear form. -/
140
+ def sp : lie_subalgebra R (matrix (l ⊕ l) (l ⊕ l) R) :=
141
+ skew_adjoint_matrices_lie_subalgebra (J l R)
142
+
143
+ end symplectic
144
+
145
+ namespace orthogonal
146
+
147
+ /-- The definite orthogonal Lie subalgebra: skew-adjoint matrices with respect to the symmetric
148
+ bilinear form defined by the identity matrix. -/
149
+ def so : lie_subalgebra R (matrix n n R) :=
150
+ skew_adjoint_matrices_lie_subalgebra (1 : matrix n n R)
151
+
152
+ /-- The indefinite diagonal matrix with `p` 1s and `q` -1s. -/
153
+ def indefinite_diagonal : matrix (p ⊕ q) (p ⊕ q) R :=
154
+ matrix.diagonal $ sum.elim (λ _, 1 ) (λ _, -1 )
155
+
156
+ /-- The indefinite orthogonal Lie subalgebra: skew-adjoint matrices with respect to the symmetric
157
+ bilinear form defined by the indefinite diagonal matrix. -/
158
+ def so' : lie_subalgebra R (matrix (p ⊕ q) (p ⊕ q) R) :=
159
+ skew_adjoint_matrices_lie_subalgebra $ indefinite_diagonal p q R
160
+
161
+ /-- A matrix for transforming the indefinite diagonal bilinear form into the definite one, provided
162
+ the parameter `i` is a square root of -1. -/
163
+ def Pso (i : R) : matrix (p ⊕ q) (p ⊕ q) R :=
164
+ matrix.diagonal $ sum.elim (λ _, 1 ) (λ _, i)
165
+
166
+ lemma Pso_inv {i : R} (hi : i*i = -1 ) : (Pso p q R i) * (Pso p q R (-i)) = 1 :=
167
+ begin
168
+ ext x y, rcases x; rcases y,
169
+ { -- x y : p
170
+ by_cases h : x = y; simp [Pso, indefinite_diagonal, h], },
171
+ { -- x : p, y : q
172
+ simp [Pso, indefinite_diagonal], },
173
+ { -- x : q, y : p
174
+ simp [Pso, indefinite_diagonal], },
175
+ { -- x y : q
176
+ by_cases h : x = y; simp [Pso, indefinite_diagonal, h, hi], },
177
+ end
178
+
179
+ lemma is_unit_Pso {i : R} (hi : i*i = -1 ) : is_unit (Pso p q R i) :=
180
+ ⟨{ val := Pso p q R i,
181
+ inv := Pso p q R (-i),
182
+ val_inv := Pso_inv p q R hi,
183
+ inv_val := by { apply matrix.nonsing_inv_left_right, exact Pso_inv p q R hi, }, },
184
+ rfl⟩
185
+
186
+ lemma indefinite_diagonal_transform {i : R} (hi : i*i = -1 ) :
187
+ (Pso p q R i)ᵀ ⬝ (indefinite_diagonal p q R) ⬝ (Pso p q R i) = 1 :=
188
+ begin
189
+ ext x y, rcases x; rcases y,
190
+ { -- x y : p
191
+ by_cases h : x = y; simp [Pso, indefinite_diagonal, h], },
192
+ { -- x : p, y : q
193
+ simp [Pso, indefinite_diagonal], },
194
+ { -- x : q, y : p
195
+ simp [Pso, indefinite_diagonal], },
196
+ { -- x y : q
197
+ by_cases h : x = y; simp [Pso, indefinite_diagonal, h, hi], },
198
+ end
199
+
200
+ /-- An equivalence between the indefinite and definite orthogonal Lie algebras, over a ring
201
+ containing a square root of -1. -/
202
+ noncomputable def so_indefinite_equiv {i : R} (hi : i*i = -1 ) : so' p q R ≃ₗ⁅R⁆ so (p ⊕ q) R :=
203
+ begin
204
+ apply (skew_adjoint_matrices_lie_subalgebra_equiv
205
+ (indefinite_diagonal p q R) (Pso p q R i) (is_unit_Pso p q R hi)).trans,
206
+ apply lie_algebra.equiv.of_eq,
207
+ ext A, rw indefinite_diagonal_transform p q R hi, refl,
208
+ end
209
+
210
+ lemma so_indefinite_equiv_apply {i : R} (hi : i*i = -1 ) (A : so' p q R) :
211
+ (so_indefinite_equiv p q R hi A : matrix (p ⊕ q) (p ⊕ q) R) = (Pso p q R i)⁻¹ ⬝ (A : matrix (p ⊕ q) (p ⊕ q) R) ⬝ (Pso p q R i) :=
212
+ by erw [lie_algebra.equiv.trans_apply, lie_algebra.equiv.of_eq_apply,
213
+ skew_adjoint_matrices_lie_subalgebra_equiv_apply]
214
+
215
+ /-- A matrix defining a canonical even-rank symmetric bilinear form.
216
+
217
+ It looks like this as a `2l x 2l` matrix of `l x l` blocks:
218
+ [ 0 1 ]
219
+ [ 1 0 ]
220
+ -/
221
+ def JD : matrix (l ⊕ l) (l ⊕ l) R := matrix.from_blocks 0 1 1 0
222
+
223
+ /-- The classical Lie algebra of type D as a Lie subalgebra of matrices associated to the matrix
224
+ `JD`. -/
225
+ def type_D := skew_adjoint_matrices_lie_subalgebra (JD l R)
226
+
227
+ /-- A matrix transforming the bilinear form defined by the matrix `JD` into a split-signature
228
+ diagonal matrix.
229
+
230
+ It looks like this as a `2l x 2l` matrix of `l x l` blocks:
231
+ [ 1 -1 ]
232
+ [ 1 1 ]
233
+ -/
234
+ def PD : matrix (l ⊕ l) (l ⊕ l) R := matrix.from_blocks 1 (-1 ) 1 1
235
+
236
+ /-- The split-signature diagonal matrix. -/
237
+ def S := indefinite_diagonal l l R
238
+
239
+ lemma S_as_blocks : S l R = matrix.from_blocks 1 0 0 (-1 ) :=
240
+ begin
241
+ rw [← matrix.diagonal_one, matrix.diagonal_neg, matrix.from_blocks_diagonal],
242
+ refl,
243
+ end
244
+
245
+ lemma JD_transform : (PD l R)ᵀ ⬝ (JD l R) ⬝ (PD l R) = (2 : R) • (S l R) :=
246
+ begin
247
+ have h : (PD l R)ᵀ ⬝ (JD l R) = matrix.from_blocks 1 1 1 (-1 ) := by
248
+ { simp [PD, JD, matrix.from_blocks_transpose, matrix.from_blocks_multiply], },
249
+ erw [h, S_as_blocks, matrix.from_blocks_multiply, matrix.from_blocks_smul],
250
+ congr; simp [two_smul],
251
+ end
252
+
253
+ lemma PD_inv [invertible (2 : R)] : (PD l R) * (⅟(2 : R) • (PD l R)ᵀ) = 1 :=
254
+ begin
255
+ have h : ⅟(2 : R) • (1 : matrix l l R) + ⅟(2 : R) • 1 = 1 := by
256
+ rw [← smul_add, ← (two_smul R _), smul_smul, inv_of_mul_self, one_smul],
257
+ erw [matrix.from_blocks_transpose, matrix.from_blocks_smul, matrix.mul_eq_mul,
258
+ matrix.from_blocks_multiply],
259
+ simp [h],
260
+ end
261
+
262
+ lemma is_unit_PD [invertible (2 : R)] : is_unit (PD l R) :=
263
+ ⟨{ val := PD l R,
264
+ inv := ⅟(2 : R) • (PD l R)ᵀ,
265
+ val_inv := PD_inv l R,
266
+ inv_val := by { apply matrix.nonsing_inv_left_right, exact PD_inv l R, }, },
267
+ rfl⟩
268
+
269
+ /-- An equivalence between two possible definitions of the classical Lie algebra of type D. -/
270
+ noncomputable def type_D_equiv_so' [invertible (2 : R)] :
271
+ type_D l R ≃ₗ⁅R⁆ so' l l R :=
272
+ begin
273
+ apply (skew_adjoint_matrices_lie_subalgebra_equiv (JD l R) (PD l R) (is_unit_PD l R)).trans,
274
+ apply lie_algebra.equiv.of_eq,
275
+ ext A,
276
+ rw [JD_transform, ← unit_of_invertible_val (2 : R), lie_subalgebra.mem_coe,
277
+ mem_skew_adjoint_matrices_lie_subalgebra_unit_smul],
278
+ refl,
279
+ end
280
+
281
+ /-- A matrix defining a canonical odd-rank symmetric bilinear form.
282
+
283
+ It looks like this as a `(2l+1) x (2l+1)` matrix of blocks:
284
+ [ 2 0 0 ]
285
+ [ 0 0 1 ]
286
+ [ 0 1 0 ]
287
+ where sizes of the blocks are:
288
+ [`1 x 1` `1 x l` `1 x l`]
289
+ [`l x 1` `l x l` `l x l`]
290
+ [`l x 1` `l x l` `l x l`]
291
+ -/
292
+ def JB := matrix.from_blocks ((2 : R) • 1 : matrix punit punit R) 0 0 (JD l R)
293
+
294
+ /-- The classical Lie algebra of type B as a Lie subalgebra of matrices associated to the matrix
295
+ `JB`. -/
296
+ def type_B := skew_adjoint_matrices_lie_subalgebra (JB l R)
297
+
298
+ /-- A matrix transforming the bilinear form defined by the matrix `JB` into an
299
+ almost-split-signature diagonal matrix.
300
+
301
+ It looks like this as a `(2l+1) x (2l+1)` matrix of blocks:
302
+ [ 1 0 0 ]
303
+ [ 0 1 -1 ]
304
+ [ 0 1 1 ]
305
+ where sizes of the blocks are:
306
+ [`1 x 1` `1 x l` `1 x l`]
307
+ [`l x 1` `l x l` `l x l`]
308
+ [`l x 1` `l x l` `l x l`]
309
+ -/
310
+ def PB := matrix.from_blocks (1 : matrix punit punit R) 0 0 (PD l R)
311
+
312
+ lemma PB_inv [invertible (2 : R)] : (PB l R) * (matrix.from_blocks 1 0 0 (PD l R)⁻¹) = 1 :=
313
+ begin
314
+ simp [PB, matrix.from_blocks_multiply, (PD l R).mul_nonsing_inv, is_unit_PD,
315
+ ← (PD l R).is_unit_iff_is_unit_det]
316
+ end
317
+
318
+ lemma is_unit_PB [invertible (2 : R)] : is_unit (PB l R) :=
319
+ ⟨{ val := PB l R,
320
+ inv := matrix.from_blocks 1 0 0 (PD l R)⁻¹,
321
+ val_inv := PB_inv l R,
322
+ inv_val := by { apply matrix.nonsing_inv_left_right, exact PB_inv l R, }, },
323
+ rfl⟩
324
+
325
+ lemma JB_transform : (PB l R)ᵀ ⬝ (JB l R) ⬝ (PB l R) = (2 : R) • matrix.from_blocks 1 0 0 (S l R) :=
326
+ by simp [PB, JB, JD_transform, matrix.from_blocks_transpose, matrix.from_blocks_multiply,
327
+ matrix.from_blocks_smul]
328
+
329
+ lemma indefinite_diagonal_assoc :
330
+ indefinite_diagonal ((punit : Type u₁) ⊕ l) l R =
331
+ matrix.reindex_lie_equiv (equiv.sum_assoc punit l l).symm
332
+ (matrix.from_blocks 1 0 0 (indefinite_diagonal l l R)) :=
333
+ begin
334
+ ext i j,
335
+ rcases i with ⟨⟨i₁ | i₂⟩ | i₃⟩;
336
+ rcases j with ⟨⟨j₁ | j₂⟩ | j₃⟩;
337
+ simp [indefinite_diagonal, matrix.diagonal],
338
+ end
339
+
340
+ /-- An equivalence between two possible definitions of the classical Lie algebra of type B. -/
341
+ noncomputable def type_B_equiv_so' [invertible (2 : R)] :
342
+ type_B l R ≃ₗ⁅R⁆ so' ((punit : Type u₁) ⊕ l) l R :=
343
+ begin
344
+ apply (skew_adjoint_matrices_lie_subalgebra_equiv (JB l R) (PB l R) (is_unit_PB l R)).trans,
345
+ symmetry,
346
+ apply (skew_adjoint_matrices_lie_subalgebra_equiv_transpose
347
+ (indefinite_diagonal ((punit : Type u₁) ⊕ l) l R)
348
+ (matrix.reindex_alg_equiv (equiv.sum_assoc punit l l)) (matrix.reindex_transpose _ _)).trans,
349
+ apply lie_algebra.equiv.of_eq,
350
+ ext A,
351
+ rw [JB_transform, ← unit_of_invertible_val (2 : R), lie_subalgebra.mem_coe, lie_subalgebra.mem_coe,
352
+ mem_skew_adjoint_matrices_lie_subalgebra_unit_smul],
353
+ simpa [indefinite_diagonal_assoc],
354
+ end
355
+
356
+ end orthogonal
357
+
93
358
end lie_algebra
0 commit comments