Documentation

TauCeti.LinearAlgebra.PiTensorProduct.SlotSum

Slot sums on tensor products and contractions in characteristic two #

For a finite family of modules M i and endomorphisms d i, the slot sum is the endomorphism of ⨂[R] i, M i applying d i in one tensor factor at a time and adding the results. The naturality, reindexing, square-zero, and total-degree results below apply to dependent families. For a constant family they describe tensor powers. In that case:

D (⨂ₜ i, m i) = ∑ i, m₁ ⊗ ⋯ ⊗ d (m i) ⊗ ⋯ ⊗ mₗ.

Over a general ring the differential of a tensor product of complexes carries Koszul signs, which depend on an ordering of the factors and are permuted by reindexing. In characteristic two the signs disappear, so D does not depend on any ordering of ι: it commutes with reindexing the factors and with every family of factorwise maps commuting with d (TauCeti.PiTensorProduct.slotSum_comp_reindex, TauCeti.PiTensorProduct.slotSum_comp_map), and it squares to zero when d does (TauCeti.PiTensorProduct.slotSum_comp_slotSum). This is what makes the tensor power of a complex a complex on which a symmetric group, and hence a wreath product, acts without signs.

Characteristic two is needed only of the module, not of the scalars: the identities below assume that every element of M is its own additive inverse, which holds over a ring of characteristic two (TauCeti.add_self_eq_zero_of_charTwo) and also, for instance, for a module of 𝔽₂-valued cochains regarded over ℤ. A tensor power with at least one factor then inherits the property (PiTensorProduct.add_self_eq_zero), so terms appearing twice cancel.

Contractions also pass to a tensor product of a dependent family. If each h i is a homotopy with d i * h i + h i * d i = 1 - e i, where e i commutes with d i (typically the composite of an augmentation and a retraction), then for a linear order on ι the slot homotopy

H = ∑ i, e ⊗ ⋯ ⊗ e ⊗ h ⊗ 1 ⊗ ⋯ ⊗ 1        (`e` before the slot `i`, `h` at `i`, `1` after it)

satisfies D H + H D = 1 - e ⊗ ⋯ ⊗ e (TauCeti.PiTensorProduct.slotSum_comp_slotHomotopy_add): cross terms appear twice and cancel, and the diagonal terms telescope. This is the sign-free, characteristic-two form of the tensor trick, whose Koszul-signed version on words of every length is formalized in TauCeti/Algebra/Homology/Contraction/TensorTrick.lean. The homotopy depends on the ordering, but it need not be equivariant for anything. Like the slot sum, it is natural in factorwise maps intertwining the data e and h (TauCeti.PiTensorProduct.slotHomotopy_comp_map). Dependent factors arise when tensor induction is regrouped by double cosets: each orbit contributes its own tensor-induced resolution.

Finally, gradings ℳ i of the factors M i induce the total-degree grading of ⨂[R] i, M i (TauCeti.PiTensorProduct.totalDegreePiece), spanned by pure tensors of homogeneous factors whose degrees add up to the given degree. Factorwise maps of degrees a i shift total degree by ∑ i, a i, while the slot sum of a family f i of common degree a shifts total degree by a. When all the h i have the same degree, the slot homotopy shifts total degree by that degree. For a grading without negative pieces, the total-degree grading has no negative pieces either, and the tensor product of retractions vanishing in positive degrees vanishes in positive total degree. The slot homotopy of homotopies vanishing in degree zero vanishes in total degree zero.

These are the data with which a tensor power of the total coinduced resolution, with its contraction by evaluation at 1, is again a contracted resolution: the input of Evens' multiplicative transfer, where the norm of a class is the class of the tensor power of a representing cocycle in the tensor-induced resolution.

Main definitions #

Main results #

References #

noncomputable def TauCeti.PiTensorProduct.slotSum (ι : Type uι) {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (f : (i : ι) → Module.End R (M i)) :
Module.End R (PiTensorProduct R fun (i : ι) => M i)

The slot sum of a family of endomorphisms: the endomorphism of ⨂[R] i, M i applying f i in one tensor factor at a time, summed over the factors. In characteristic two it is the differential of the tensor product of complexes.

Instances For
    @[simp]
    theorem TauCeti.PiTensorProduct.slotSum_tprod {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (f : (i : ι) → Module.End R (M i)) (m : (i : ι) → M i) :
    (slotSum ι f) ((PiTensorProduct.tprod R) m) = ∑ i : ι, (PiTensorProduct.tprod R) (Function.update m i ((f i) (m i)))

    On a pure tensor, the slot sum applies f to each factor in turn.

    @[simp]
    theorem TauCeti.PiTensorProduct.slotSum_zero {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] :
    slotSum ι 0 = 0

    The slot sum of the zero endomorphism is zero.

    theorem TauCeti.PiTensorProduct.slotSum_add {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (f g : (i : ι) → Module.End R (M i)) :
    slotSum ι (f + g) = slotSum ι f + slotSum ι g

    The slot sum is additive in the endomorphism.

    theorem TauCeti.PiTensorProduct.slotSum_smul {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (c : R) (f : (i : ι) → Module.End R (M i)) :
    slotSum ι (c • f) = c • slotSum ι f

    The slot sum commutes with scalar multiplication of the endomorphism.

    theorem TauCeti.PiTensorProduct.slotSum_comp_map {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} {N : ι → Type uN} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [(i : ι) → AddCommMonoid (N i)] [(i : ι) → Module R (N i)] {f : (i : ι) → Module.End R (M i)} {f' : (i : ι) → Module.End R (N i)} (g : (i : ι) → N i →ₗ[R] M i) (hg : ∀ (i : ι), f i ∘ₗ g i = g i ∘ₗ f' i) :

    Naturality of the slot sum: a family of factorwise maps intertwining f' with f intertwines their slot sums.

    theorem TauCeti.PiTensorProduct.slotSum_comp_reindex {ι : Type uι} {κ : Type uκ} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [Fintype κ] [DecidableEq κ] (f : (i : ι) → Module.End R (M i)) (σ : ι ≃ κ) :
    (slotSum κ fun (j : κ) => f (σ.symm j)) ∘ₗ ↑(PiTensorProduct.reindex R M σ) = ↑(PiTensorProduct.reindex R M σ) ∘ₗ slotSum ι f

    The slot sum does not depend on how the tensor factors are indexed: it commutes with reindexing along an equivalence.

    theorem TauCeti.PiTensorProduct.slotSum_comp_slotSum {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (hM : ∀ (i : ι) (m : M i), m + m = 0) {f : (i : ι) → Module.End R (M i)} (hf : ∀ (i : ι), f i ∘ₗ f i = 0) :
    slotSum ι f ∘ₗ slotSum ι f = 0

    In characteristic two, the slot sum of a square-zero endomorphism squares to zero. Applying f twice in one factor gives zero, and applying it in two distinct factors gives the same term in either order, so these terms cancel in pairs. Characteristic two is asked only of M: every element of each M i is its own additive inverse.

    @[simp]
    theorem TauCeti.PiTensorProduct.slotSum_of_isEmpty {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [IsEmpty ι] (f : (i : ι) → Module.End R (M i)) :
    slotSum ι f = 0

    The slot sum on a tensor product with no factors is zero.

    theorem TauCeti.PiTensorProduct.slotSum_tprod_eq_zero {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (f : (i : ι) → Module.End R (M i)) (m : (i : ι) → M i) (hm : ∀ (i : ι), (f i) (m i) = 0) :

    A tensor of cycles is a cycle for the slot sum.

    @[simp]
    theorem TauCeti.PiTensorProduct.subsingletonEquiv_slotSum {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [DecidableEq ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [Subsingleton ι] (i₀ : ι) (f : (i : ι) → Module.End R (M i)) (x : PiTensorProduct R fun (i : ι) => M i) :

    On a tensor product with a single factor i₀, the slot sum is the endomorphism f i₀ of that factor, read through PiTensorProduct.subsingletonEquiv.

    def TauCeti.PiTensorProduct.totalDegreePiece (ι : Type uι) {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (ℳ : (i : ι) → A → Submodule R (M i)) (n : A) :
    Submodule R (PiTensorProduct R fun (i : ι) => M i)

    The total-degree grading of a tensor product: the degree-n piece of ⨂[R] i, M i is spanned by pure tensors ⨂ₜ i, m i with m i in the degree-p i piece of ℳ i and ∑ i, p i = n.

    Instances For
      theorem TauCeti.PiTensorProduct.tprod_mem_totalDegreePiece {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} {p : ι → A} {m : (i : ι) → M i} (hm : ∀ (i : ι), m i ∈ ℳ i (p i)) :
      (PiTensorProduct.tprod R) m ∈ totalDegreePiece ι ℳ (∑ i : ι, p i)

      A pure tensor of homogeneous factors is homogeneous of the sum of their degrees.

      theorem TauCeti.PiTensorProduct.tprod_mem_totalDegreePiece_const {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} (q : A) {m : (i : ι) → M i} (hm : ∀ (i : ι), m i ∈ ℳ i q) :

      Equal factor degrees multiply by the number of tensor factors.

      theorem TauCeti.PiTensorProduct.totalDegreePiece_le_iff {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} {n : A} {P : Submodule R (PiTensorProduct R fun (i : ι) => M i)} :
      totalDegreePiece ι ℳ n ≤ P ↔ ∀ (p : ι → A) (m : (i : ι) → M i), (∀ (i : ι), m i ∈ ℳ i (p i)) → ∑ i : ι, p i = n → (PiTensorProduct.tprod R) m ∈ P

      A submodule contains the degree-n piece of the total-degree grading exactly when it contains every pure tensor of homogeneous factors of total degree n.

      theorem TauCeti.PiTensorProduct.totalDegreePiece_eq_iSup {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} (n : A) :
      totalDegreePiece ι ℳ n = ⨆ (p : ι → A), ⨆ (_ : ∑ i : ι, p i = n), (PiTensorProduct.map fun (i : ι) => (ℳ i (p i)).subtype).range

      Collecting the tensor products of homogeneous pieces by the sum of their degrees gives the total-degree piece.

      theorem TauCeti.PiTensorProduct.isHomogeneous_map {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} {N : ι → Type uN} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [(i : ι) → AddCommMonoid (N i)] [(i : ι) → Module R (N i)] {ℳ : (i : ι) → A → Submodule R (M i)} {𝒩 : (i : ι) → A → Submodule R (N i)} {g : (i : ι) → N i →ₗ[R] M i} {a : ι → A} (hg : ∀ (i : ι), LinearMap.IsHomogeneous (g i) (𝒩 i) (ℳ i) (a i)) :

      Factorwise maps of degrees a i shift the total degree by ∑ i, a i.

      theorem TauCeti.PiTensorProduct.isHomogeneous_reindex {ι : Type uι} {κ : Type uκ} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} [Fintype κ] (σ : ι ≃ κ) :
      LinearMap.IsHomogeneous (↑(PiTensorProduct.reindex R M σ)) (totalDegreePiece ι ℳ) (totalDegreePiece κ fun (j : κ) => ℳ (σ.symm j)) 0

      Reindexing the tensor factors along an equivalence preserves the total degree.

      @[simp]
      theorem TauCeti.PiTensorProduct.reindex_mem_totalDegreePiece_iff {ι : Type uι} {κ : Type uκ} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [Fintype κ] (ℳ : (i : ι) → A → Submodule R (M i)) (σ : ι ≃ κ) (n : A) (z : PiTensorProduct R fun (i : ι) => M i) :
      (PiTensorProduct.reindex R M σ) z ∈ totalDegreePiece κ (fun (j : κ) => ℳ (σ.symm j)) n ↔ z ∈ totalDegreePiece ι ℳ n

      Reindexing a tensor product detects as well as preserves total degree.

      theorem TauCeti.PiTensorProduct.isHomogeneous_map_update {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} {N : ι → Type uN} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [(i : ι) → AddCommMonoid (N i)] [(i : ι) → Module R (N i)] {ℳ : (i : ι) → A → Submodule R (M i)} [DecidableEq ι] {𝒩 : (i : ι) → A → Submodule R (N i)} {g : (i : ι) → N i →ₗ[R] M i} {a : A} (i : ι) {f : N i →ₗ[R] M i} (hg : ∀ (j : ι), j ≠ i → LinearMap.IsHomogeneous (g j) (𝒩 j) (ℳ j) 0) (hf : LinearMap.IsHomogeneous f (𝒩 i) (ℳ i) a) :

      A factorwise map of degree zero in every factor but one, where it has degree a, shifts the total degree by a.

      theorem TauCeti.PiTensorProduct.map_mem_totalDegreePiece_zero {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} {N : ι → Type uN} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [(i : ι) → AddCommMonoid (N i)] [(i : ι) → Module R (N i)] {ℳ : (i : ι) → A → Submodule R (M i)} {g : (i : ι) → N i →ₗ[R] M i} (hg : ∀ (i : ι) (x : N i), (g i) x ∈ ℳ i 0) (x : PiTensorProduct R fun (i : ι) => N i) :

      Factorwise maps into degree zero land in total degree zero.

      theorem TauCeti.PiTensorProduct.isHomogeneous_slotSum {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} [DecidableEq ι] {f : (i : ι) → Module.End R (M i)} {a : A} (hf : ∀ (i : ι), LinearMap.IsHomogeneous (f i) (ℳ i) (ℳ i) a) :

      The slot sum of a homogeneous endomorphism of degree a raises the total degree by a.

      theorem TauCeti.PiTensorProduct.map_eq_zero_of_mem_totalDegreePiece_of_pos {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} {N : ι → Type uN} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [(i : ι) → AddCommMonoid (N i)] [(i : ι) → Module R (N i)] {ℳ : (i : ι) → A → Submodule R (M i)} [LinearOrder A] [IsOrderedAddMonoid A] {π : (i : ι) → M i →ₗ[R] N i} (hπ : ∀ (i : ι) (p : A), 0 < p → ∀ v ∈ ℳ i p, (π i) v = 0) {n : A} (hn : 0 < n) {v : PiTensorProduct R fun (i : ι) => M i} (hv : v ∈ totalDegreePiece ι ℳ n) :

      Factorwise maps vanishing in positive degrees kill the positive total degrees: a pure tensor of homogeneous factors of positive total degree has a factor of positive degree.

      theorem TauCeti.PiTensorProduct.totalDegreePiece_eq_bot_of_neg {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} [LinearOrder A] [IsOrderedAddMonoid A] (hneg : ∀ (i : ι), ∀ p < 0, ℳ i p = ⊥) {n : A} (hn : n < 0) :

      For gradings without negative pieces, the total-degree grading has no negative pieces either: a pure tensor of homogeneous factors of negative total degree has a factor of negative degree.

      theorem TauCeti.PiTensorProduct.isHomogeneous_subsingletonEquiv {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [AddCommMonoid A] [Fintype ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ℳ : (i : ι) → A → Submodule R (M i)} [Subsingleton ι] (i₀ : ι) :

      On a tensor product with a single factor i₀, the identification PiTensorProduct.subsingletonEquiv with that factor preserves the degree.

      noncomputable def TauCeti.PiTensorProduct.slotHomotopy (ι : Type uι) {R : Type uR} [CommSemiring R] [Fintype ι] [LinearOrder ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (e h : (i : ι) → Module.End R (M i)) :
      Module.End R (PiTensorProduct R fun (i : ι) => M i)

      The slot homotopy of a family of homotopies h relative to endomorphisms e, for a linear order on the index type: the sum over the slots i of the tensor map applying e j in the factors j < i, h i in the factor i and the identity after it. When d h + h d = 1 - e and e commutes with d in every factor, it contracts the tensor product in characteristic two (TauCeti.PiTensorProduct.slotSum_comp_slotHomotopy_add).

      Instances For
        @[simp]
        theorem TauCeti.PiTensorProduct.slotHomotopy_tprod {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [LinearOrder ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] (e h : (i : ι) → Module.End R (M i)) (m : (i : ι) → M i) :
        (slotHomotopy ι e h) ((PiTensorProduct.tprod R) m) = ∑ i : ι, (PiTensorProduct.tprod R) (Function.update (fun (j : ι) => if j < i then (e j) (m j) else m j) i ((h i) (m i)))

        On a pure tensor, the slot homotopy applies e before the slot, h at it and the identity after it.

        theorem TauCeti.PiTensorProduct.slotHomotopy_comp_map {ι : Type uι} {R : Type uR} [CommSemiring R] [Fintype ι] [LinearOrder ι] {M : ι → Type uM} {N : ι → Type uN} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [(i : ι) → AddCommMonoid (N i)] [(i : ι) → Module R (N i)] {e h : (i : ι) → Module.End R (M i)} {e' h' : (i : ι) → Module.End R (N i)} (g : (i : ι) → N i →ₗ[R] M i) (he : ∀ (i : ι), e i ∘ₗ g i = g i ∘ₗ e' i) (hh : ∀ (i : ι), h i ∘ₗ g i = g i ∘ₗ h' i) :

        Naturality of the slot homotopy: a family of factorwise maps intertwining e' with e and h' with h intertwines their slot homotopies.

        theorem TauCeti.PiTensorProduct.isHomogeneous_slotHomotopy {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [Fintype ι] [LinearOrder ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid A] {ℳ : (i : ι) → A → Submodule R (M i)} {e h : (i : ι) → Module.End R (M i)} {a : A} (he : ∀ (i : ι), LinearMap.IsHomogeneous (e i) (ℳ i) (ℳ i) 0) (hh : ∀ (i : ι), LinearMap.IsHomogeneous (h i) (ℳ i) (ℳ i) a) :

        A family of homotopies of common degree a, relative to endomorphisms of degree zero, gives a slot homotopy shifting the total degree by a.

        theorem TauCeti.PiTensorProduct.slotHomotopy_eq_zero_of_mem_totalDegreePiece_zero {ι : Type uι} {R : Type uR} {A : Type uA} [CommSemiring R] [Fintype ι] [LinearOrder ι] {M : ι → Type uM} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid A] {ℳ : (i : ι) → A → Submodule R (M i)} [LinearOrder A] [IsOrderedAddMonoid A] {e h : (i : ι) → Module.End R (M i)} (hneg : ∀ (i : ι), ∀ p < 0, ℳ i p = ⊥) (hh : ∀ (i : ι), ∀ v ∈ ℳ i 0, (h i) v = 0) {v : PiTensorProduct R fun (i : ι) => M i} (hv : v ∈ totalDegreePiece ι ℳ 0) :
        (slotHomotopy ι e h) v = 0

        For a grading without negative pieces, the slot homotopy of a homotopy vanishing in degree zero vanishes in total degree zero: a pure tensor of homogeneous factors of total degree zero has all its factors in degree zero.

        theorem TauCeti.PiTensorProduct.slotSum_comp_slotHomotopy_add {ι : Type uι} {R : Type uR} [CommRing R] {M : ι → Type uM} [(i : ι) → AddCommGroup (M i)] [(i : ι) → Module R (M i)] [Fintype ι] [LinearOrder ι] (hM : ∀ (i : ι) (m : M i), m + m = 0) {d e h : (i : ι) → Module.End R (M i)} (hde : ∀ (i : ι), d i ∘ₗ e i = e i ∘ₗ d i) (hdh : ∀ (i : ι), d i ∘ₗ h i + h i ∘ₗ d i = LinearMap.id - e i) :

        In characteristic two, the slot homotopy contracts the tensor product: if each h i is a homotopy from the identity to an endomorphism e i commuting with d i, in the sense d i * h i + h i * d i = 1 - e i, then D H + H D = 1 - ⨂ i, e i for the slot sum D of d and the slot homotopy H. Characteristic two is asked only of the factors: every element of each M i is its own additive inverse. The family may be empty; then the differential and homotopy are zero and the tensor of the endomorphisms is the identity.

        The scalars need not have characteristic two. Over ℤ, the slot sum of a square-zero endomorphism of a module of 𝔽₂-vectors squares to zero, since the vectors are their own additive inverses.