Documentation

Mathlib.LinearAlgebra.CliffordAlgebra.Basic

Clifford Algebras #

We construct the Clifford algebra of a module M over a commutative ring R, equipped with a quadratic form Q.

Notation #

The Clifford algebra of the R-module M equipped with a quadratic form Q is an R-algebra denoted CliffordAlgebra Q.

Given a linear morphism f : M → A from a module M to another R-algebra A, such that cond : ∀ m, f m * f m = algebraMap _ _ (Q m), there is a (unique) lift of f to an R-algebra morphism from CliffordAlgebra Q to A, which is denoted CliffordAlgebra.lift Q f cond.

The canonical linear map M → CliffordAlgebra Q is denoted CliffordAlgebra.ι Q.

Theorems #

The main theorems proved ensure that CliffordAlgebra Q satisfies the universal property of the Clifford algebra.

  1. ι_comp_lift is the fact that the composition of ι Q with lift Q f cond agrees with f.
  2. lift_unique ensures the uniqueness of lift Q f cond with respect to 1.

Implementation details #

The Clifford algebra of M is constructed as a quotient of the tensor algebra, as follows.

  1. We define a relation CliffordAlgebra.Rel Q on TensorAlgebra R M. This is the smallest relation which identifies squares of elements of M with Q m.
  2. The Clifford algebra is the quotient of the tensor algebra by this relation.

This file is almost identical to Mathlib/LinearAlgebra/ExteriorAlgebra/Basic.lean.

inductive CliffordAlgebra.Rel {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) :

Rel relates each ι m * ι m, for m : M, with Q m.

The Clifford algebra of M is defined as the quotient modulo this relation.

Instances For
    def CliffordAlgebra {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) :
    Type (max u_2 u_1)

    The Clifford algebra of an R-module M equipped with a quadratic_form Q.

    Equations
    Instances For
      def CliffordAlgebra.ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) :

      The canonical linear map M →ₗ[R] CliffordAlgebra Q.

      Equations
      Instances For
        @[simp]
        theorem CliffordAlgebra.ι_sq_scalar {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) (m : M) :

        As well as being linear, ι Q squares to the quadratic form

        @[simp]
        theorem CliffordAlgebra.comp_ι_sq_scalar {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_3} [Semiring A] [Algebra R A] (g : CliffordAlgebra Q →ₐ[R] A) (m : M) :
        g ((CliffordAlgebra.ι Q) m) * g ((CliffordAlgebra.ι Q) m) = (algebraMap R A) (Q m)
        @[simp]
        theorem CliffordAlgebra.lift_symm_apply {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) {A : Type u_3} [Semiring A] [Algebra R A] (F : CliffordAlgebra Q →ₐ[R] A) :
        (CliffordAlgebra.lift Q).symm F = { val := LinearMap.comp (AlgHom.toLinearMap F) (CliffordAlgebra.ι Q), property := (_ : ∀ (m : M), (AlgHom.toLinearMap F ∘ₗ CliffordAlgebra.ι Q) m * (AlgHom.toLinearMap F ∘ₗ CliffordAlgebra.ι Q) m = (algebraMap R A) (Q m)) }
        def CliffordAlgebra.lift {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] (Q : QuadraticForm R M) {A : Type u_3} [Semiring A] [Algebra R A] :
        { f : M →ₗ[R] A // ∀ (m : M), f m * f m = (algebraMap R A) (Q m) } (CliffordAlgebra Q →ₐ[R] A)

        Given a linear map f : M →ₗ[R] A into an R-algebra A, which satisfies the condition: cond : ∀ m : M, f m * f m = Q(m), this is the canonical lift of f to a morphism of R-algebras from CliffordAlgebra Q to A.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          theorem CliffordAlgebra.ι_comp_lift {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_3} [Semiring A] [Algebra R A] (f : M →ₗ[R] A) (cond : ∀ (m : M), f m * f m = (algebraMap R A) (Q m)) :
          AlgHom.toLinearMap ((CliffordAlgebra.lift Q) { val := f, property := cond }) ∘ₗ CliffordAlgebra.ι Q = f
          @[simp]
          theorem CliffordAlgebra.lift_ι_apply {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_3} [Semiring A] [Algebra R A] (f : M →ₗ[R] A) (cond : ∀ (m : M), f m * f m = (algebraMap R A) (Q m)) (x : M) :
          ((CliffordAlgebra.lift Q) { val := f, property := cond }) ((CliffordAlgebra.ι Q) x) = f x
          @[simp]
          theorem CliffordAlgebra.lift_unique {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_3} [Semiring A] [Algebra R A] (f : M →ₗ[R] A) (cond : ∀ (m : M), f m * f m = (algebraMap R A) (Q m)) (g : CliffordAlgebra Q →ₐ[R] A) :
          AlgHom.toLinearMap g ∘ₗ CliffordAlgebra.ι Q = f g = (CliffordAlgebra.lift Q) { val := f, property := cond }
          @[simp]
          theorem CliffordAlgebra.lift_comp_ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_3} [Semiring A] [Algebra R A] (g : CliffordAlgebra Q →ₐ[R] A) :
          (CliffordAlgebra.lift Q) { val := AlgHom.toLinearMap g ∘ₗ CliffordAlgebra.ι Q, property := (_ : ∀ (m : M), g ((CliffordAlgebra.ι Q) m) * g ((CliffordAlgebra.ι Q) m) = (algebraMap R A) (Q m)) } = g
          theorem CliffordAlgebra.hom_ext {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_4} [Semiring A] [Algebra R A] {f : CliffordAlgebra Q →ₐ[R] A} {g : CliffordAlgebra Q →ₐ[R] A} :

          See note [partially-applied ext lemmas].

          theorem CliffordAlgebra.induction {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {C : CliffordAlgebra QProp} (h_grade0 : ∀ (r : R), C ((algebraMap R (CliffordAlgebra Q)) r)) (h_grade1 : ∀ (x : M), C ((CliffordAlgebra.ι Q) x)) (h_mul : ∀ (a b : CliffordAlgebra Q), C aC bC (a * b)) (h_add : ∀ (a b : CliffordAlgebra Q), C aC bC (a + b)) (a : CliffordAlgebra Q) :
          C a

          If C holds for the algebraMap of r : R into CliffordAlgebra Q, the ι of x : M, and is preserved under addition and muliplication, then it holds for all of CliffordAlgebra Q.

          See also the stronger CliffordAlgebra.left_induction and CliffordAlgebra.right_induction.

          theorem CliffordAlgebra.mul_add_swap_eq_polar_of_forall_mul_self_eq {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_4} [Ring A] [Algebra R A] (f : M →ₗ[R] A) (hf : ∀ (x : M), f x * f x = (algebraMap R A) (Q x)) (a : M) (b : M) :
          f a * f b + f b * f a = (algebraMap R A) (QuadraticForm.polar (Q) a b)
          theorem CliffordAlgebra.forall_mul_self_eq_iff {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_4} [Ring A] [Algebra R A] (h2 : IsUnit 2) (f : M →ₗ[R] A) :
          (∀ (x : M), f x * f x = (algebraMap R A) (Q x)) LinearMap.compl₂ (LinearMap.mul R A) f ∘ₗ f + LinearMap.compl₂ (LinearMap.flip (LinearMap.mul R A)) f ∘ₗ f = LinearMap.compr₂ (BilinForm.toLin (QuadraticForm.polarBilin Q)) (Algebra.linearMap R A)

          An alternative way to provide the argument to CliffordAlgebra.lift when 2 is invertible.

          To show a function squares to the quadratic form, it suffices to show that f x * f y + f y * f x = algebraMap _ _ (polar Q x y)

          The symmetric product of vectors is a scalar

          @[simp]
          theorem CliffordAlgebra.ι_mul_ι_mul_of_isOrtho {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (x : CliffordAlgebra Q) {a : M} {b : M} (h : QuadraticForm.IsOrtho Q a b) :
          theorem CliffordAlgebra.ι_mul_ι_mul_ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (a : M) (b : M) :

          $aba$ is a vector.

          @[simp]
          theorem CliffordAlgebra.ι_range_map_lift {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} {A : Type u_3} [Semiring A] [Algebra R A] (f : M →ₗ[R] A) (cond : ∀ (m : M), f m * f m = (algebraMap R A) (Q m)) :
          def CliffordAlgebra.map {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} [AddCommGroup M₁] [AddCommGroup M₂] [Module R M₁] [Module R M₂] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} (f : Q₁ →qᵢ Q₂) :

          Any linear map that preserves the quadratic form lifts to an AlgHom between algebras.

          See CliffordAlgebra.equivOfIsometry for the case when f is a QuadraticForm.IsometryEquiv.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            @[simp]
            theorem CliffordAlgebra.map_comp_ι {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} [AddCommGroup M₁] [AddCommGroup M₂] [Module R M₁] [Module R M₂] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} (f : Q₁ →qᵢ Q₂) :
            @[simp]
            theorem CliffordAlgebra.map_apply_ι {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} [AddCommGroup M₁] [AddCommGroup M₂] [Module R M₁] [Module R M₂] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} (f : Q₁ →qᵢ Q₂) (m : M₁) :
            @[simp]
            theorem CliffordAlgebra.map_id {R : Type u_1} [CommRing R] {M₁ : Type u_4} [AddCommGroup M₁] [Module R M₁] (Q₁ : QuadraticForm R M₁) :
            @[simp]
            theorem CliffordAlgebra.map_comp_map {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} {M₃ : Type u_6} [AddCommGroup M₁] [AddCommGroup M₂] [AddCommGroup M₃] [Module R M₁] [Module R M₂] [Module R M₃] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} {Q₃ : QuadraticForm R M₃} (f : Q₂ →qᵢ Q₃) (g : Q₁ →qᵢ Q₂) :
            @[simp]
            theorem CliffordAlgebra.ι_range_map_map {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} [AddCommGroup M₁] [AddCommGroup M₂] [Module R M₁] [Module R M₂] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} (f : Q₁ →qᵢ Q₂) :
            @[simp]
            theorem CliffordAlgebra.equivOfIsometry_apply {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} [AddCommGroup M₁] [AddCommGroup M₂] [Module R M₁] [Module R M₂] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} (e : QuadraticForm.IsometryEquiv Q₁ Q₂) (a : CliffordAlgebra Q₁) :
            def CliffordAlgebra.equivOfIsometry {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} [AddCommGroup M₁] [AddCommGroup M₂] [Module R M₁] [Module R M₂] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} (e : QuadraticForm.IsometryEquiv Q₁ Q₂) :

            Two CliffordAlgebras are equivalent as algebras if their quadratic forms are equivalent.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              theorem CliffordAlgebra.equivOfIsometry_trans {R : Type u_1} [CommRing R] {M₁ : Type u_4} {M₂ : Type u_5} {M₃ : Type u_6} [AddCommGroup M₁] [AddCommGroup M₂] [AddCommGroup M₃] [Module R M₁] [Module R M₂] [Module R M₃] {Q₁ : QuadraticForm R M₁} {Q₂ : QuadraticForm R M₂} {Q₃ : QuadraticForm R M₃} (e₁₂ : QuadraticForm.IsometryEquiv Q₁ Q₂) (e₂₃ : QuadraticForm.IsometryEquiv Q₂ Q₃) :
              @[simp]
              theorem CliffordAlgebra.equivOfIsometry_refl {R : Type u_1} [CommRing R] {M₁ : Type u_4} [AddCommGroup M₁] [Module R M₁] {Q₁ : QuadraticForm R M₁} :

              The canonical image of the TensorAlgebra in the CliffordAlgebra, which maps TensorAlgebra.ι R x to CliffordAlgebra.ι Q x.

              Equations
              Instances For
                @[simp]
                theorem TensorAlgebra.toClifford_ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (m : M) :
                TensorAlgebra.toClifford ((TensorAlgebra.ι R) m) = (CliffordAlgebra.ι Q) m