Documentation

TauCeti.LinearAlgebra.TensorProduct.Symmetric

Symmetric and antisymmetric tensors in a tensor square #

The flip x ⊗ y ↦ y ⊗ x is an involution of M ⊗[R] M, and the tensors it fixes and the tensors it negates cut the tensor square into the symmetric tensors TauCeti.symmetricTensors and the antisymmetric tensors TauCeti.antisymmetricTensors. When 2 is invertible they are complementary, so the tensor square is their internal direct sum; the two submodules are the concrete models of Sym²M and ⋀²M inside M ⊗[R] M, which is what a construction carrying extra structure on the tensor square — a topology, say — needs, the quotient and subobject constructions Sym[R]^2 M and ⋀[R]^2 M living outside it. That they really are those two modules, f ⊗ f-equivariantly, is TauCeti.symmetricTensorsEquivSymmetricPower and TauCeti.antisymmetricTensorsEquivExteriorPower in TauCeti/LinearAlgebra/TensorSquare.lean.

The point of the file is the trace identity TauCeti.trace_map_self_comp_comm: composing f ⊗ f with the flip has trace tr (f ∘ f), because on a basis the diagonal entry of the composite at eᵢ ⊗ eⱼ is aᵢⱼ aⱼᵢ, and summing those is Module.Basis.trace_eq_trace_comp_self_of_toMatrix_diag, the step shared with the Fin 2-indexed tensor square of TauCeti/LinearAlgebra/TensorSquare.lean. Splitting that trace along the symmetric and the antisymmetric tensors, where the flip is +1 and -1, gives TauCeti.trace_symmetricTensorsRestrict_sub_trace_antisymmetricTensorsRestrict: the traces of f ⊗ f on the symmetric and on the antisymmetric tensors differ by tr (f ∘ f). That is the character identity χ_{Sym²}(g) - χ_{⋀²}(g) = χ(g²) behind the Frobenius-Schur indicator, read on the tensor square rather than on the symmetric and exterior powers.

Main definitions #

Main results #

Implementation notes #

Neither submodule is a fresh kernel: the symmetric tensors are LinearMap.eqLocus of the flip against the identity and the antisymmetric tensors are Module.End.eigenspace of the flip, so Mathlib's API applies to both unchanged. The membership lemmas below are the only interface the rest of the development uses, and they present the two submodules symmetrically.

The asymmetry between the two constructions is a matter of scalars, and it is deliberate. Module.End.eigenspace subtracts a scalar from an endomorphism, so it is stated over [CommRing R] [AddCommGroup M]; negation is genuinely needed for the antisymmetric tensors — the eigenvalue is -1 — but not for the symmetric ones, and LinearMap.eqLocus asks only for [CommSemiring R] [AddCommMonoid M]. So the symmetric half of the API, up to the restriction of f ⊗ f, is available over a commutative semiring, and only the antisymmetric half and the splitting theorems need a ring. The trace identity uses neither and is stated over [CommSemiring K] [AddCommMonoid M].

The symmetric tensors of M ⊗[R] M: the tensors the flip x ⊗ y ↦ y ⊗ x fixes.

Equations
Instances For
    @[simp]
    theorem TauCeti.mem_symmetricTensors {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {x : TensorProduct R M M} :

    A tensor is symmetric exactly when the flip fixes it.

    The symmetrization z + flip z of a tensor is symmetric.

    theorem TauCeti.map_self_mem_symmetricTensors {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (f : M →ₗ[R] M) {x : TensorProduct R M M} (hx : x ∈ symmetricTensors R M) :

    f ⊗ f preserves the symmetric tensors, because it commutes with the flip.

    noncomputable def TauCeti.symmetricTensorsRestrict {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (f : M →ₗ[R] M) :

    The restriction of f ⊗ f to the symmetric tensors, as an endomorphism.

    Equations
    Instances For
      @[simp]
      theorem TauCeti.coe_symmetricTensorsRestrict_apply {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] (f : M →ₗ[R] M) (x : ↥(symmetricTensors R M)) :
      def TauCeti.antisymmetricTensors (R : Type u_1) (M : Type u_2) [CommRing R] [AddCommGroup M] [Module R M] :

      The antisymmetric tensors of M ⊗[R] M: the -1-eigenspace of the flip.

      Equations
      Instances For
        @[simp]
        theorem TauCeti.mem_antisymmetricTensors {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] {x : TensorProduct R M M} :

        A tensor is antisymmetric exactly when the flip negates it.

        The antisymmetrization z - flip z of a tensor is antisymmetric.

        f ⊗ f preserves the antisymmetric tensors, because it commutes with the flip.

        noncomputable def TauCeti.antisymmetricTensorsRestrict {R : Type u_1} {M : Type u_2} [CommRing R] [AddCommGroup M] [Module R M] (f : M →ₗ[R] M) :

        The restriction of f ⊗ f to the antisymmetric tensors, as an endomorphism.

        Equations
        Instances For
          @[simp]

          The tensor square is the sum of its symmetric and antisymmetric parts, when 2 is invertible: a tensor is the sum of ½ (x + flip x) and ½ (x - flip x), and a tensor both symmetric and antisymmetric is its own negative.

          The symmetric and antisymmetric tensors decompose the tensor square as an internal direct sum, the form in which traces split along them.

          The trace of f ⊗ f composed with the flip is the trace of f ∘ f. In a basis the diagonal entry of the composite at eᵢ ⊗ eⱼ is aᵢⱼ aⱼᵢ, and summing those over all pairs is the trace of the square of the matrix of f, which is Module.Basis.trace_eq_trace_comp_self_of_toMatrix_diag.

          The traces of f ⊗ f on the symmetric and on the antisymmetric tensors differ by tr (f ∘ f). Both traces are read off the same splitting of M ⊗ M: composing f ⊗ f with the flip leaves it unchanged on the symmetric part and negates it on the antisymmetric part, so the trace of that composite — which is tr (f ∘ f) — is the difference of the two.