Documentation

Mathlib.LinearAlgebra.CliffordAlgebra.SpinGroup

The Pin group and the Spin group #

In this file we define lipschitzGroup, pinGroup and spinGroup and show they form a group.

Main definitions #

Implementation Notes #

The definition of the Lipschitz group $\{ x \in \mathop{\mathcal{C}\ell} | x \text{ is invertible and } x v x^{-1} ∈ V \}$ is given by:

But they presumably form a group only in finite dimensions. So we define lipschitzGroup with closure of all the invertible elements in the form of ι Q m, and we show this definition is at least as large as the other definition (See lipschitzGroup.conjAct_smul_range_ι and lipschitzGroup.involute_act_ι_mem_range_ι). The reverse statement presumably is true only in finite dimensions.

Here are some discussions about the latent ambiguity of definition : https://mathoverflow.net/q/427881/172242 and https://mathoverflow.net/q/251288/172242

TODO #

Try to show the reverse statement is true in finite dimensions.

def lipschitzGroup {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) :

lipschitzGroup is the subgroup closure of all the invertible elements in the form of ι Q m where ι is the canonical linear map M →ₗ[R] CliffordAlgebra Q.

Instances For

    The conjugation action by elements of the Lipschitz group keeps vectors as vectors.

    This is another version of lipschitzGroup.conjAct_smul_ι_mem_range_ι which uses involute.

    If x is in lipschitzGroup Q, then (ι Q).range is closed under twisted conjugation. The reverse statement presumably is true only in finite dimensions.

    def pinGroup {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) :

    pinGroup Q is defined as the infimum of lipschitzGroup Q and unitary (CliffordAlgebra Q). See mem_iff.

    Instances For
      theorem pinGroup.mem_iff {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} :

      An element is in pinGroup Q if and only if it is in lipschitzGroup Q and unitary.

      theorem pinGroup.mem_unitary {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x pinGroup Q) :
      theorem pinGroup.units_mem_iff {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (CliffordAlgebra Q)ˣ} :
      x pinGroup Q x lipschitzGroup Q x unitary (CliffordAlgebra Q)
      theorem pinGroup.units_mem_lipschitzGroup {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (CliffordAlgebra Q)ˣ} (hx : x pinGroup Q) :
      theorem pinGroup.conjAct_smul_ι_mem_range_ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (CliffordAlgebra Q)ˣ} (hx : x pinGroup Q) [Invertible 2] (y : M) :

      The conjugation action by elements of the spin group keeps vectors as vectors.

      theorem pinGroup.involute_act_ι_mem_range_ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (CliffordAlgebra Q)ˣ} (hx : x pinGroup Q) [Invertible 2] (y : M) :

      This is another version of conjAct_smul_ι_mem_range_ι which uses involute.

      If x is in pinGroup Q, then (ι Q).range is closed under twisted conjugation. The reverse statement presumably being true only in finite dimensions.

      @[simp]
      theorem pinGroup.star_mul_self_of_mem {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x pinGroup Q) :
      star x * x = 1
      @[simp]
      theorem pinGroup.mul_star_self_of_mem {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x pinGroup Q) :
      x * star x = 1
      theorem pinGroup.star_mem {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x pinGroup Q) :
      star x pinGroup Q

      See star_mem_iff for both directions.

      @[simp]
      theorem pinGroup.star_mem_iff {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} :
      star x pinGroup Q x pinGroup Q

      An element is in pinGroup Q if and only if star x is in pinGroup Q. See star_mem for only one direction.

      @[implicit_reducible]
      @[simp]
      theorem pinGroup.coe_star {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (pinGroup Q)} :
      (star x) = star x
      theorem pinGroup.coe_star_mul_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (pinGroup Q)) :
      star x * x = 1
      theorem pinGroup.coe_mul_star_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (pinGroup Q)) :
      x * (star x) = 1
      @[simp]
      theorem pinGroup.star_mul_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (pinGroup Q)) :
      star x * x = 1
      @[simp]
      theorem pinGroup.mul_star_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (pinGroup Q)) :
      x * star x = 1
      @[implicit_reducible]

      pinGroup Q forms a group where the inverse is star.

      @[implicit_reducible]
      @[implicit_reducible]
      instance pinGroup.instInhabitedSubtypeCliffordAlgebraMemSubmonoid {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} :
      Inhabited (pinGroup Q)
      theorem pinGroup.star_eq_inv {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (pinGroup Q)) :
      star x = x⁻¹
      def pinGroup.toUnits {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} :

      The elements in pinGroup Q embed into (CliffordAlgebra Q)ˣ.

      Instances For
        @[simp]
        theorem pinGroup.val_toUnits_apply {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (pinGroup Q)) :
        (toUnits x) = x
        @[simp]
        theorem pinGroup.val_inv_toUnits_apply {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (pinGroup Q)) :
        (toUnits x)⁻¹ = x⁻¹
        theorem pinGroup.toUnits_injective {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} :
        Function.Injective toUnits
        def spinGroup {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) :

        spinGroup Q is defined as the infimum of pinGroup Q and CliffordAlgebra.even Q. See mem_iff.

        Instances For
          theorem spinGroup.mem_iff {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} :
          x spinGroup Q x pinGroup Q x CliffordAlgebra.even Q

          An element is in spinGroup Q if and only if it is in pinGroup Q and even Q.

          theorem spinGroup.mem_pin {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x spinGroup Q) :
          x pinGroup Q
          theorem spinGroup.mem_even {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x spinGroup Q) :
          theorem spinGroup.units_mem_lipschitzGroup {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (CliffordAlgebra Q)ˣ} (hx : x spinGroup Q) :
          theorem spinGroup.involute_eq {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x spinGroup Q) :

          If x is in spinGroup Q, then involute x is equal to x.

          theorem spinGroup.conjAct_smul_ι_mem_range_ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (CliffordAlgebra Q)ˣ} (hx : x spinGroup Q) [Invertible 2] (y : M) :

          The conjugation action by elements of the spin group keeps vectors as vectors.

          @[simp]
          theorem spinGroup.star_mul_self_of_mem {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x spinGroup Q) :
          star x * x = 1
          @[simp]
          theorem spinGroup.mul_star_self_of_mem {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x spinGroup Q) :
          x * star x = 1
          theorem spinGroup.star_mem {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} (hx : x spinGroup Q) :
          star x spinGroup Q

          See star_mem_iff for both directions.

          @[simp]
          theorem spinGroup.star_mem_iff {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : CliffordAlgebra Q} :
          star x spinGroup Q x spinGroup Q

          An element is in spinGroup Q if and only if star x is in spinGroup Q. See star_mem for only one direction.

          @[implicit_reducible]
          @[simp]
          theorem spinGroup.coe_star {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {x : (spinGroup Q)} :
          (star x) = star x
          theorem spinGroup.coe_star_mul_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (spinGroup Q)) :
          star x * x = 1
          theorem spinGroup.coe_mul_star_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (spinGroup Q)) :
          x * (star x) = 1
          @[simp]
          theorem spinGroup.star_mul_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (spinGroup Q)) :
          star x * x = 1
          @[simp]
          theorem spinGroup.mul_star_self {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (spinGroup Q)) :
          x * star x = 1
          @[implicit_reducible]

          spinGroup Q forms a group where the inverse is star.

          @[implicit_reducible]
          @[implicit_reducible]
          instance spinGroup.instInhabitedSubtypeCliffordAlgebraMemSubmonoid {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} :
          Inhabited (spinGroup Q)
          theorem spinGroup.star_eq_inv {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (spinGroup Q)) :
          star x = x⁻¹
          def spinGroup.toUnits {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} :

          The elements in spinGroup Q embed into (CliffordAlgebra Q)ˣ.

          Instances For
            @[simp]
            theorem spinGroup.val_inv_toUnits_apply {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (spinGroup Q)) :
            (toUnits x)⁻¹ = x⁻¹
            @[simp]
            theorem spinGroup.val_toUnits_apply {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : (spinGroup Q)) :
            (toUnits x) = x
            theorem spinGroup.toUnits_injective {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} :
            Function.Injective toUnits