@@ -19,16 +19,20 @@ Another application is to the faithfulness of the Weyl group action on roots, an
19
19
Weyl group.
20
20
21
21
## Main definitions:
22
- * `Polarization`: A distinguished linear map from the weight space to the coweight space.
23
- * `RootForm` : The bilinear form on weight space corresponding to `Polarization`.
22
+ * `RootPairing.Polarization`: A distinguished linear map from the weight space to the coweight
23
+ space.
24
+ * `RootPairing.RootForm` : The bilinear form on weight space corresponding to `Polarization`.
24
25
25
26
## Main results:
26
- * `polarization_self_sum_of_squares` : The inner product of any weight vector is a sum of squares.
27
- * `rootForm_reflection_reflection_apply` : `RootForm` is invariant with respect
27
+ * `RootPairing.rootForm_self_sum_of_squares` : The inner product of any
28
+ weight vector is a sum of squares.
29
+ * `RootPairing.rootForm_reflection_reflection_apply` : `RootForm` is invariant with respect
28
30
to reflections.
29
- * `rootForm_self_smul_coroot`: The inner product of a root with itself times the
30
- corresponding coroot is equal to two times Polarization applied to the root.
31
- * `rootForm_self_non_neg`: `RootForm` is positive semidefinite.
31
+ * `RootPairing.rootForm_self_smul_coroot`: The inner product of a root with itself
32
+ times the corresponding coroot is equal to two times Polarization applied to the root.
33
+ * `RootPairing.exists_ge_zero_eq_rootForm`: `RootForm` is positive semidefinite.
34
+ * `RootPairing.coxeterWeight_mem_set_of_isCrystallographic`: the Coxeter weights belongs to the
35
+ set `{0, 1, 2, 3, 4}`.
32
36
33
37
## References:
34
38
* [ N. Bourbaki, *Lie groups and Lie algebras. Chapters 4--6* ] [bourbaki1968 ]
@@ -37,8 +41,6 @@ Weyl group.
37
41
## TODO (possibly in other files)
38
42
* Weyl-invariance
39
43
* Faithfulness of Weyl group action, and finiteness of Weyl group, for finite root systems.
40
- * Relation to Coxeter weight. In particular, positivity constraints for finite root pairings mean
41
- we restrict to weights between 0 and 4.
42
44
-/
43
45
44
46
open Set Function
@@ -51,11 +53,13 @@ variable {ι R M N : Type*}
51
53
52
54
namespace RootPairing
53
55
54
- section CommRing
55
-
56
- variable [Fintype ι] [CommRing R] [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N]
56
+ variable [CommRing R] [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N]
57
57
(P : RootPairing ι R M N)
58
58
59
+ section Fintype
60
+
61
+ variable [Fintype ι]
62
+
59
63
instance : Module.Finite R P.rootSpan := Finite.span_of_finite R <| finite_range P.root
60
64
61
65
instance : Module.Finite R P.corootSpan := Finite.span_of_finite R <| finite_range P.coroot
@@ -166,6 +170,16 @@ lemma rootForm_self_smul_coroot (i : ι) :
166
170
rw [Finset.sum_smul, add_neg_eq_zero.mpr rfl]
167
171
exact sub_eq_zero_of_eq rfl
168
172
173
+ lemma corootForm_self_smul_root (i : ι) :
174
+ (P.CorootForm (P.coroot i) (P.coroot i)) • P.root i = 2 • P.CoPolarization (P.coroot i) :=
175
+ rootForm_self_smul_coroot (P.flip) i
176
+
177
+ lemma four_nsmul_coPolarization_compl_polarization_apply_root (i : ι) :
178
+ (4 • P.CoPolarization ∘ₗ P.Polarization) (P.root i) =
179
+ (P.RootForm (P.root i) (P.root i) * P.CorootForm (P.coroot i) (P.coroot i)) • P.root i := by
180
+ rw [LinearMap.smul_apply, LinearMap.comp_apply, show 4 = 2 * 2 from rfl, mul_smul, ← map_nsmul,
181
+ ← rootForm_self_smul_coroot, map_smul, smul_comm, ← corootForm_self_smul_root, smul_smul]
182
+
169
183
lemma four_smul_rootForm_sq_eq_coxeterWeight_smul (i j : ι) :
170
184
4 • (P.RootForm (P.root i) (P.root j)) ^ 2 = P.coxeterWeight i j •
171
185
(P.RootForm (P.root i) (P.root i) * P.RootForm (P.root j) (P.root j)) := by
@@ -183,10 +197,6 @@ lemma four_smul_rootForm_sq_eq_coxeterWeight_smul (i j : ι) :
183
197
map_smul, ← pairing, smul_eq_mul, smul_eq_mul, smul_eq_mul, coxeterWeight]
184
198
ring
185
199
186
- lemma corootForm_self_smul_root (i : ι) :
187
- (P.CorootForm (P.coroot i) (P.coroot i)) • P.root i = 2 • P.CoPolarization (P.coroot i) :=
188
- rootForm_self_smul_coroot (P.flip) i
189
-
190
200
lemma rootForm_self_sum_of_squares (x : M) :
191
201
IsSumSq (P.RootForm x x) :=
192
202
P.rootForm_apply_apply x x ▸ IsSumSq.sum_mul_self Finset.univ _
@@ -226,57 +236,86 @@ lemma prod_rootForm_smul_coroot_mem_range_domRestrict (i : ι) :
226
236
use ⟨(c • 2 • P.root i), by aesop⟩
227
237
simp
228
238
229
- end CommRing
230
-
231
- section LinearOrderedCommRing
239
+ end Fintype
232
240
233
- variable [Fintype ι] [LinearOrderedCommRing R] [AddCommGroup M] [Module R M] [AddCommGroup N]
234
- [Module R N] (P : RootPairing ι R M N)
241
+ section IsValuedInOrdered
235
242
236
- theorem rootForm_self_non_neg (x : M) : 0 ≤ P.RootForm x x :=
237
- IsSumSq.nonneg (P.rootForm_self_sum_of_squares x)
243
+ variable (S : Type *) [LinearOrderedCommRing S] [Algebra S R] [FaithfulSMul S R]
244
+ [Module S M] [IsScalarTower S R M] [P.IsValuedIn S]
238
245
239
- lemma rootForm_self_eq_zero_iff {x : M} :
240
- P.RootForm x x = 0 ↔ x ∈ LinearMap.ker P.RootForm :=
241
- P.RootForm.apply_apply_same_eq_zero_iff P.rootForm_self_non_neg P.rootForm_symmetric
242
-
243
- lemma rootForm_root_self_pos (i : ι) :
244
- 0 < P.RootForm (P.root i) (P.root i) := by
245
- simp only [rootForm_apply_apply]
246
- exact Finset.sum_pos' (fun j _ ↦ mul_self_nonneg _) ⟨i, by simp⟩
246
+ /-- The bilinear form of a finite root pairing taking values in a linearly-ordered ring, as a
247
+ root-positive form. -/
248
+ def posRootForm [Fintype ι] : P.RootPositiveForm S where
249
+ form := P.RootForm
250
+ symm := P.rootForm_symmetric
251
+ isOrthogonal_reflection := P.rootForm_reflection_reflection_apply
252
+ exists_eq i j := ⟨∑ k, P.pairingIn S i k * P.pairingIn S j k, by simp [rootForm_apply_apply]⟩
253
+ exists_pos_eq i := by
254
+ refine ⟨∑ k, P.pairingIn S i k ^ 2 , ?_, by simp [sq, rootForm_apply_apply]⟩
255
+ exact Finset.sum_pos' (fun j _ ↦ sq_nonneg _) ⟨i, by simp⟩
256
+
257
+ theorem exists_ge_zero_eq_rootForm [Fintype ι] (x : M) (hx : x ∈ span S (range P.root)) :
258
+ ∃ s ≥ 0 , algebraMap S R s = P.RootForm x x := by
259
+ refine ⟨(P.posRootForm S).posForm ⟨x, hx⟩ ⟨x, hx⟩, IsSumSq.nonneg ?_, by simp [posRootForm]⟩
260
+ choose s hs using P.coroot'_apply_apply_mem_of_mem_span S hx
261
+ suffices (P.posRootForm S).posForm ⟨x, hx⟩ ⟨x, hx⟩ = ∑ i, s i * s i from
262
+ this ▸ IsSumSq.sum_mul_self Finset.univ s
263
+ apply FaithfulSMul.algebraMap_injective S R
264
+ simp only [posRootForm, RootPositiveForm.algebraMap_posForm, map_sum, map_mul]
265
+ simp [← Algebra.linearMap_apply, hs, rootForm_apply_apply]
247
266
248
267
/-- SGA3 XXI Prop. 2.3.1 -/
249
- lemma coxeterWeight_le_four (i j : ι) : P.coxeterWeight i j ≤ 4 := by
250
- set li := P.RootForm (P.root i) (P.root i)
251
- set lj := P.RootForm (P.root j) (P.root j)
252
- set lij := P.RootForm (P.root i) (P.root j)
253
- have hi := P.rootForm_root_self_pos i
254
- have hj := P.rootForm_root_self_pos j
268
+ lemma coxeterWeightIn_le_four [Finite ι] (i j : ι) :
269
+ P.coxeterWeightIn S i j ≤ 4 := by
270
+ have : Fintype ι := Fintype.ofFinite ι
271
+ let ri : span S (range P.root) := ⟨P.root i, Submodule.subset_span (mem_range_self _)⟩
272
+ let rj : span S (range P.root) := ⟨P.root j, Submodule.subset_span (mem_range_self _)⟩
273
+ set li := (P.posRootForm S).posForm ri ri
274
+ set lj := (P.posRootForm S).posForm rj rj
275
+ set lij := (P.posRootForm S).posForm ri rj
276
+ obtain ⟨si, hsi, hsi'⟩ := (P.posRootForm S).exists_pos_eq i
277
+ obtain ⟨sj, hsj, hsj'⟩ := (P.posRootForm S).exists_pos_eq j
278
+ replace hsi' : si = li := FaithfulSMul.algebraMap_injective S R <| by simpa [li] using hsi'
279
+ replace hsj' : sj = lj := FaithfulSMul.algebraMap_injective S R <| by simpa [lj] using hsj'
280
+ rw [hsi'] at hsi
281
+ rw [hsj'] at hsj
255
282
have cs : 4 * lij ^ 2 ≤ 4 * (li * lj) := by
256
283
rw [mul_le_mul_left four_pos]
257
- exact LinearMap.BilinForm.apply_sq_le_of_symm P.RootForm P.rootForm_self_non_neg
258
- P.rootForm_symmetric (P.root i) (P.root j)
259
- have key : 4 • lij ^ 2 = _ • (li * lj) := P.four_smul_rootForm_sq_eq_coxeterWeight_smul i j
284
+ refine (P.posRootForm S).posForm.apply_sq_le_of_symm ?_ (P.posRootForm S).isSymm_posForm ri rj
285
+ intro x
286
+ obtain ⟨s, hs, hs'⟩ := P.exists_ge_zero_eq_rootForm S x x.property
287
+ change _ = (P.posRootForm S).form x x at hs'
288
+ rw [(P.posRootForm S).algebraMap_apply_eq_form_iff] at hs'
289
+ rwa [← hs']
290
+ have key : 4 • lij ^ 2 = P.coxeterWeightIn S i j • (li * lj) := by
291
+ apply FaithfulSMul.algebraMap_injective S R
292
+ simpa [map_ofNat, lij, posRootForm, ri, rj, li, lj] using
293
+ P.four_smul_rootForm_sq_eq_coxeterWeight_smul i j
260
294
simp only [nsmul_eq_mul, smul_eq_mul, Nat.cast_ofNat] at key
261
295
rwa [key, mul_le_mul_right (by positivity)] at cs
262
296
263
- instance instIsRootPositiveRootForm : IsRootPositive P P.RootForm where
264
- zero_lt_apply_root i := P.rootForm_root_self_pos i
265
- symm := P.rootForm_symmetric
266
- apply_reflection_eq := P.rootForm_reflection_reflection_apply
297
+ variable [Finite ι] [P.IsCrystallographic] [CharZero R] (i j : ι)
267
298
268
- lemma coxeterWeight_mem_set_of_isCrystallographic (i j : ι) [P.IsCrystallographic] :
269
- P.coxeterWeight i j ∈ ({0 , 1 , 2 , 3 , 4 } : Set R) := by
270
- obtain ⟨n, hcn⟩ : ∃ n : ℕ, P.coxeterWeight i j = n := by
299
+ lemma coxeterWeightIn_mem_set_of_isCrystallographic :
300
+ P.coxeterWeightIn ℤ i j ∈ ({0 , 1 , 2 , 3 , 4 } : Set ℤ) := by
301
+ have : Fintype ι := Fintype.ofFinite ι
302
+ obtain ⟨n, hcn⟩ : ∃ n : ℕ, P.coxeterWeightIn ℤ i j = n := by
271
303
have : 0 ≤ P.coxeterWeightIn ℤ i j := by
272
- simpa [← P.algebraMap_coxeterWeightIn ℤ ] using P.coxeterWeight_non_neg P.RootForm i j
304
+ simpa only [ P.algebraMap_coxeterWeightIn] using P.coxeterWeight_nonneg (P.posRootForm ℤ) i j
273
305
obtain ⟨n, hn⟩ := Int.eq_ofNat_of_zero_le this
274
306
exact ⟨n, by simp [← P.algebraMap_coxeterWeightIn ℤ, hn]⟩
275
- have : P.coxeterWeight i j ≤ 4 := P.coxeterWeight_le_four i j
307
+ have : P.coxeterWeightIn ℤ i j ≤ 4 := P.coxeterWeightIn_le_four ℤ i j
276
308
simp only [hcn, mem_insert_iff, mem_singleton_iff] at this ⊢
277
309
norm_cast at this ⊢
278
310
omega
279
311
280
- end LinearOrderedCommRing
312
+ lemma coxeterWeight_mem_set_of_isCrystallographic :
313
+ P.coxeterWeight i j ∈ ({0 , 1 , 2 , 3 , 4 } : Set R) := by
314
+ have := (FaithfulSMul.algebraMap_injective ℤ R).mem_set_image.mpr <|
315
+ P.coxeterWeightIn_mem_set_of_isCrystallographic i j
316
+ rw [algebraMap_coxeterWeightIn] at this
317
+ simpa [eq_comm] using this
318
+
319
+ end IsValuedInOrdered
281
320
282
321
end RootPairing
0 commit comments