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
      instance CliffordAlgebra.instSMulCommClass {R : Type u_3} {S : Type u_4} {A : Type u_5} {M : Type u_6} [CommSemiring R] [CommSemiring S] [AddCommGroup M] [CommRing A] [Algebra R A] [Algebra S A] [Module R M] [Module S M] [Module A M] (Q : QuadraticForm A M) [IsScalarTower R A M] [IsScalarTower S A M] :
      Equations
      • =
      instance CliffordAlgebra.instIsScalarTower {R : Type u_3} {S : Type u_4} {A : Type u_5} {M : Type u_6} [CommSemiring R] [CommSemiring S] [AddCommGroup M] [CommRing A] [SMul R S] [Algebra R A] [Algebra S A] [Module R M] [Module S M] [Module A M] [IsScalarTower R A M] [IsScalarTower S A M] [IsScalarTower R S A] (Q : QuadraticForm A M) :
      Equations
      • =
      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)
        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.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 = F.toLinearMap ∘ₗ CliffordAlgebra.ι Q,
          @[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)) :
          ((CliffordAlgebra.lift Q) f, cond).toLinearMap ∘ₗ 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) f, 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) :
          g.toLinearMap ∘ₗ CliffordAlgebra.ι Q = f g = (CliffordAlgebra.lift Q) f, 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) g.toLinearMap ∘ₗ CliffordAlgebra.ι Q, = 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 g : CliffordAlgebra Q →ₐ[R] A} :
          f.toLinearMap ∘ₗ CliffordAlgebra.ι Q = g.toLinearMap ∘ₗ CliffordAlgebra.ι Qf = g

          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} (algebraMap : ∀ (r : R), C ((algebraMap R (CliffordAlgebra Q)) r)) (ι : ∀ (x : M), C ((CliffordAlgebra.ι Q) x)) (mul : ∀ (a b : CliffordAlgebra Q), C aC bC (a * b)) (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 multiplication, 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 b : M) :
          f a * f b + f b * f a = (algebraMap R A) (QuadraticMap.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.mul R A).compl₂ f ∘ₗ f + (LinearMap.mul R A).flip.compl₂ f ∘ₗ f = LinearMap.compr₂ (QuadraticMap.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

          theorem CliffordAlgebra.ι_mul_ι_mul_ι {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] {Q : QuadraticForm R M} (a 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
          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₂) :
            (CliffordAlgebra.map f).toLinearMap ∘ₗ CliffordAlgebra.ι Q₁ = CliffordAlgebra.ι Q₂ ∘ₗ f.toLinearMap
            @[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₂) :
            theorem CliffordAlgebra.leftInverse_map_of_leftInverse {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₂) (g : Q₂ →qᵢ Q₁) (h : Function.LeftInverse g f) :

            If f is a linear map from M₁ to M₂ that preserves the quadratic forms, and if it has a linear retraction g that also preserves the quadratic forms, then CliffordAlgebra.map g is a retraction of CliffordAlgebra.map f.

            theorem CliffordAlgebra.map_surjective {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₂) (hf : Function.Surjective f) :

            If a linear map preserves the quadratic forms and is surjective, then the algebra maps it induces between Clifford algebras is also surjective.

            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 : QuadraticMap.IsometryEquiv Q₁ Q₂) :

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

            Equations
            Instances For
              @[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 : QuadraticMap.IsometryEquiv Q₁ Q₂) (a : CliffordAlgebra Q₁) :
              @[simp]
              theorem CliffordAlgebra.equivOfIsometry_symm {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 : QuadraticMap.IsometryEquiv Q₁ Q₂) :
              @[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₁₂ : QuadraticMap.IsometryEquiv Q₁ Q₂) (e₂₃ : QuadraticMap.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