Skip to content

Commit 5120ffd

Browse files
ScottCarnahanocfnash
authored andcommitted
refactor (LinearAlgebra/RootSystem) : change definition of RootPairing (#13917)
We change the definition of `RootPairing` so that the induced reflection permutations on roots are required by definition to agree with those on coroots. This rules out pathologies, e.g., for infinite root systems. Co-authored-by: Oliver Nash <[email protected]>
1 parent c20b411 commit 5120ffd

File tree

3 files changed

+369
-246
lines changed

3 files changed

+369
-246
lines changed

Mathlib/LinearAlgebra/Reflection.lean

+53
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ lemma reflection_symm (h : f x = 2) :
105105
(reflection h).symm = reflection h :=
106106
rfl
107107

108+
lemma invOn_reflection_of_mapsTo {Φ : Set M} (h : f x = 2) :
109+
InvOn (reflection h) (reflection h) Φ Φ :=
110+
fun x _ ↦ involutive_reflection h x, fun x _ ↦ involutive_reflection h x⟩
111+
112+
lemma bijOn_reflection_of_mapsTo {Φ : Set M} (h : f x = 2) (h' : MapsTo (reflection h) Φ Φ) :
113+
BijOn (reflection h) Φ Φ :=
114+
(invOn_reflection_of_mapsTo h).bijOn h' h'
115+
108116
/-- See also `Module.Dual.eq_of_preReflection_mapsTo'` for a variant of this lemma which
109117
applies when `Φ` does not span.
110118
@@ -162,4 +170,49 @@ lemma Dual.eq_of_preReflection_mapsTo' [CharZero R] [NoZeroSMulDivisors R M]
162170
exact hF hy'
163171
exact eq_of_preReflection_mapsTo hx' hΦ'₁ hΦ'₂ hf₁ (this hf₂) hg₁ (this hg₂)
164172

173+
variable {y}
174+
variable {g : Dual R M}
175+
176+
lemma eq_of_mapsTo_reflection_of_mem [NoZeroSMulDivisors ℤ M] {Φ : Set M} (hΦ : Φ.Finite)
177+
(hfx : f x = 2) (hgy : g y = 2) (hgx : g x = 2) (hfy : f y = 2)
178+
(hxfΦ : MapsTo (preReflection x f) Φ Φ)
179+
(hygΦ : MapsTo (preReflection y g) Φ Φ)
180+
(hyΦ : y ∈ Φ) :
181+
x = y := by
182+
have : _root_.Finite Φ := hΦ
183+
set sxy : M ≃ₗ[R] M := (Module.reflection hgy).trans (Module.reflection hfx)
184+
have hb : BijOn sxy Φ Φ :=
185+
(bijOn_reflection_of_mapsTo hfx hxfΦ).comp (bijOn_reflection_of_mapsTo hgy hygΦ)
186+
have hsxy : ∀ n : ℕ, (sxy^[n]) y = y + (2 * n : ℤ) • (x - y) := by
187+
intro n
188+
induction n with
189+
| zero => simp
190+
| succ n ih =>
191+
simp only [iterate_succ', comp_apply, ih, zsmul_sub, map_add, LinearEquiv.trans_apply,
192+
reflection_apply_self, map_neg, reflection_apply, hfy, two_smul, neg_sub, map_sub,
193+
map_zsmul, hgx, smul_neg, smul_add, Nat.cast_succ, mul_add, mul_one, add_smul, sxy]
194+
abel
195+
set f' : ℕ → Φ := fun n ↦ ⟨(sxy^[n]) y, by
196+
rw [← IsFixedPt.image_iterate hb.image_eq n]; exact mem_image_of_mem _ hyΦ⟩
197+
have : ¬ Injective f' := not_injective_infinite_finite f'
198+
contrapose! this
199+
intros n m hnm
200+
rw [Subtype.mk_eq_mk, hsxy, hsxy, add_right_inj, ← sub_eq_zero, ← sub_smul, smul_eq_zero,
201+
sub_eq_zero, sub_eq_zero] at hnm
202+
simpa using hnm.resolve_right this
203+
204+
lemma injOn_dualMap_subtype_span_range_range {ι : Type*} [NoZeroSMulDivisors ℤ M]
205+
{r : ι ↪ M} {c : ι → Dual R M} (hfin : (range r).Finite)
206+
(h_two : ∀ i, c i (r i) = 2)
207+
(h_mapsTo : ∀ i, MapsTo (preReflection (r i) (c i)) (range r) (range r)) :
208+
InjOn (span R (range r)).subtype.dualMap (range c) := by
209+
rintro - ⟨i, rfl⟩ - ⟨j, rfl⟩ hij
210+
congr
211+
suffices ∀ k, c i (r k) = c j (r k) by
212+
rw [← EmbeddingLike.apply_eq_iff_eq r]
213+
exact eq_of_mapsTo_reflection_of_mem (f := c i) (g := c j) hfin (h_two i) (h_two j)
214+
(by rw [← this, h_two]) (by rw [this, h_two]) (h_mapsTo i) (h_mapsTo j) (mem_range_self j)
215+
intro k
216+
simpa using LinearMap.congr_fun hij ⟨r k, Submodule.subset_span (mem_range_self k)⟩
217+
165218
end Module

0 commit comments

Comments
 (0)