Documentation

Mathlib.LinearAlgebra.Reflection

Reflections in linear algebra #

Given an element x in a module M together with a linear form f on M such that f x = 2, the map y ↦ y - (f y) • x is an involutive endomorphism of M, such that:

  1. the kernel of f is fixed,
  2. the point x ↦ -x.

Such endomorphisms are often called reflections of the module M. When M carries an inner product for which x is perpendicular to the kernel of f, then (with mild assumptions) the endomorphism is characterised by properties 1 and 2 above, and is a linear isometry.

Main definitions / results: #

TODO #

Related definitions of reflection exists elsewhere in the library. These more specialised definitions, which require an ambient InnerProductSpace structure, are reflection (of type LinearIsometryEquiv) and EuclideanGeometry.reflection (of type AffineIsometryEquiv). We should connect (or unify) these definitions with Module.reflecton defined here.

def Module.preReflection {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] (x : M) (f : Dual R M) :
End R M

Given an element x in a module M and a linear form f on M, we define the endomorphism of M for which y ↦ y - (f y) • x.

One is typically interested in this endomorphism when f x = 2; this definition exists to allow the user defer discharging this proof obligation. See also Module.reflection.

Equations
theorem Module.preReflection_apply {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] (x : M) (f : Dual R M) (y : M) :
(preReflection x f) y = y - f y x
theorem Module.preReflection_apply_self {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (h : f x = 2) :
(preReflection x f) x = -x
theorem Module.involutive_preReflection {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (h : f x = 2) :
theorem Module.preReflection_preReflection {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (y : M) (g : Dual R M) (h : f x = 2) :
def Module.reflection {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (h : f x = 2) :

Given an element x in a module M and a linear form f on M for which f x = 2, we define the endomorphism of M for which y ↦ y - (f y) • x.

It is an involutive endomorphism of M fixing the kernel of f for which x ↦ -x.

Equations
theorem Module.reflection_apply {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (y : M) (h : f x = 2) :
(reflection h) y = y - f y x
@[simp]
theorem Module.reflection_apply_self {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (h : f x = 2) :
(reflection h) x = -x
theorem Module.involutive_reflection {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (h : f x = 2) :
@[simp]
theorem Module.reflection_inv {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (h : f x = 2) :
@[simp]
theorem Module.reflection_symm {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} (h : f x = 2) :
theorem Module.invOn_reflection_of_mapsTo {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} {Φ : Set M} (h : f x = 2) :
Set.InvOn (⇑(reflection h)) (⇑(reflection h)) Φ Φ
theorem Module.bijOn_reflection_of_mapsTo {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} {Φ : Set M} (h : f x = 2) (h' : Set.MapsTo (⇑(reflection h)) Φ Φ) :
Set.BijOn (⇑(reflection h)) Φ Φ
theorem Submodule.mem_invtSubmodule_reflection_of_mem {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Module.Dual R M} (h : f x = 2) (p : Submodule R M) (hx : x p) :
theorem Submodule.mem_invtSubmodule_reflection_iff {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Module.Dual R M} [NeZero 2] [NoZeroSMulDivisors R M] (h : f x = 2) {p : Submodule R M} (hp : Disjoint p (span R {x})) :

Powers of the product of two reflections #

Let M be a module over a commutative ring R. Let x,yM and f,gM with f(x)=g(y)=2. The corresponding reflections r1,r2:MM (Module.reflection) are given by r1z=zf(z)x and r2z=zg(z)y. These are linear automorphisms of M.

To define reflection representations of a Coxeter group, it is important to be able to compute the order of the composition r1r2.

Note that if M is a real inner product space and r1 and r2 are both orthogonal reflections (i.e. f(z)=2x,z/x,x and g(z)=2y,z/y,y for all zM), then r1r2 is a rotation by the angle cos1(f(y)g(x)22) and one may determine the order of r1r2 accordingly.

However, if M does not have an inner product, and even if R is not R, then we may instead use the formulas in this section. These formulas all involve evaluating Chebyshev S-polynomials (Polynomial.Chebyshev.S) at t=f(y)g(x)2, and they hold over any commutative ring.

theorem Module.reflection_mul_reflection_pow_apply {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (z : M) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :
((reflection hf * reflection hg) ^ m) z = z + (Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 2) / 2)) * (Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 1) / 2)) + Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 3) / 2)))) ((g x * f z - g z) y - f z x) + (Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 1) / 2)) * (Polynomial.eval t (Polynomial.Chebyshev.S R (m / 2)) + Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 2) / 2)))) ((f y * g z - f z) x - g z y)

A formula for (r1r2)mz, where m is a natural number and zM.

theorem Module.reflection_mul_reflection_pow {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :

A formula for (r1r2)m, where m is a natural number.

theorem Module.reflection_mul_reflection_zpow_apply {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (z : M) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :
((reflection hf * reflection hg) ^ m) z = z + (Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 2) / 2)) * (Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 1) / 2)) + Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 3) / 2)))) ((g x * f z - g z) y - f z x) + (Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 1) / 2)) * (Polynomial.eval t (Polynomial.Chebyshev.S R (m / 2)) + Polynomial.eval t (Polynomial.Chebyshev.S R ((m - 2) / 2)))) ((f y * g z - f z) x - g z y)

A formula for (r1r2)mz, where m is an integer and zM.

theorem Module.reflection_mul_reflection_zpow {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :

A formula for (r1r2)m, where m is an integer.

theorem Module.reflection_mul_reflection_zpow_apply_self {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :

A formula for (r1r2)mx, where m is an integer. This is the special case of Module.reflection_mul_reflection_zpow_apply with z=x.

theorem Module.reflection_mul_reflection_pow_apply_self {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :

A formula for (r1r2)mx, where m is a natural number. This is the special case of Module.reflection_mul_reflection_pow_apply with z=x.

theorem Module.reflection_mul_reflection_mul_reflection_zpow_apply_self {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :

A formula for r2(r1r2)mx, where m is an integer.

theorem Module.reflection_mul_reflection_mul_reflection_pow_apply_self {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x y : M} {f g : Dual R M} (hf : f x = 2) (hg : g y = 2) (m : ) (t : R := f y * g x - 2) (ht : t = f y * g x - 2 := by rfl) :

A formula for r2(r1r2)mx, where m is a natural number.

Lemmas used to prove uniqueness results for root data #

theorem Module.Dual.eq_of_preReflection_mapsTo {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] [CharZero R] [NoZeroSMulDivisors R M] {x : M} {Φ : Set M} (hΦ₁ : Φ.Finite) (hΦ₂ : Submodule.span R Φ = ) {f g : Dual R M} (hf₁ : f x = 2) (hf₂ : Set.MapsTo (⇑(preReflection x f)) Φ Φ) (hg₁ : g x = 2) (hg₂ : Set.MapsTo (⇑(preReflection x g)) Φ Φ) :
f = g

See also Module.Dual.eq_of_preReflection_mapsTo' for a variant of this lemma which applies when Φ does not span.

This rather technical-looking lemma exists because it is exactly what is needed to establish various uniqueness results for root data / systems. One might regard this lemma as lying at the boundary of linear algebra and combinatorics since the finiteness assumption is the key.

theorem Module.Dual.eq_of_preReflection_mapsTo' {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] [CharZero R] [NoZeroSMulDivisors R M] {x : M} {Φ : Set M} (hΦ₁ : Φ.Finite) (hx : x Submodule.span R Φ) {f g : Dual R M} (hf₁ : f x = 2) (hf₂ : Set.MapsTo (⇑(preReflection x f)) Φ Φ) (hg₁ : g x = 2) (hg₂ : Set.MapsTo (⇑(preReflection x g)) Φ Φ) :

This rather technical-looking lemma exists because it is exactly what is needed to establish a uniqueness result for root data. See the doc string of Module.Dual.eq_of_preReflection_mapsTo for further remarks.

theorem Module.reflection_reflection_iterate {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} {y : M} {g : Dual R M} (hfx : f x = 2) (hgy : g y = 2) (hgxfy : f y * g x = 4) (n : ) :
(⇑(reflection hgy ≪≫ₗ reflection hfx))^[n] y = y + n (f y x - 2 y)

Composite of reflections in "parallel" hyperplanes is a shear (special case).

theorem Module.infinite_range_reflection_reflection_iterate_iff {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} {y : M} {g : Dual R M} [NoZeroSMulDivisors M] (hfx : f x = 2) (hgy : g y = 2) (hgxfy : f y * g x = 4) :
(Set.range fun (n : ) => (⇑(reflection hgy ≪≫ₗ reflection hfx))^[n] y).Infinite f y x 2 y
theorem Module.eq_of_mapsTo_reflection_of_mem {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : M} {f : Dual R M} {y : M} {g : Dual R M} [NoZeroSMulDivisors M] {Φ : Set M} ( : Φ.Finite) (hfx : f x = 2) (hgy : g y = 2) (hgx : g x = 2) (hfy : f y = 2) (hxfΦ : Set.MapsTo (⇑(preReflection x f)) Φ Φ) (hygΦ : Set.MapsTo (⇑(preReflection y g)) Φ Φ) (hyΦ : y Φ) :
x = y
theorem Module.injOn_dualMap_subtype_span_range_range {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {ι : Type u_3} [NoZeroSMulDivisors M] {r : ι M} {c : ιDual R M} (hfin : (Set.range r).Finite) (h_two : ∀ (i : ι), (c i) (r i) = 2) (h_mapsTo : ∀ (i : ι), Set.MapsTo (⇑(preReflection (r i) (c i))) (Set.range r) (Set.range r)) :