Sums of finite families of elements in commutative semigroups

Content created by Louis Wasserman.

Created on 2025-08-31.
Last modified on 2025-08-31.

{-# OPTIONS --lossy-unification #-}

module group-theory.sums-of-finite-families-of-elements-commutative-semigroups where
Imports
open import elementary-number-theory.addition-natural-numbers
open import elementary-number-theory.natural-numbers

open import foundation.action-on-identifications-functions
open import foundation.coproduct-types
open import foundation.dependent-pair-types
open import foundation.empty-types
open import foundation.equivalences
open import foundation.function-extensionality
open import foundation.function-types
open import foundation.functoriality-coproduct-types
open import foundation.functoriality-dependent-pair-types
open import foundation.homotopies
open import foundation.identity-types
open import foundation.inhabited-types
open import foundation.propositional-truncations
open import foundation.sets
open import foundation.type-arithmetic-coproduct-types
open import foundation.type-arithmetic-empty-type
open import foundation.type-arithmetic-unit-type
open import foundation.unit-type
open import foundation.universal-property-propositional-truncation-into-sets
open import foundation.universe-levels

open import group-theory.commutative-semigroups
open import group-theory.sums-of-finite-sequences-of-elements-commutative-semigroups

open import univalent-combinatorics.coproduct-types
open import univalent-combinatorics.coproducts-inhabited-finite-types
open import univalent-combinatorics.counting
open import univalent-combinatorics.counting-dependent-pair-types
open import univalent-combinatorics.dependent-pair-types
open import univalent-combinatorics.double-counting
open import univalent-combinatorics.finite-types
open import univalent-combinatorics.inhabited-finite-types
open import univalent-combinatorics.standard-finite-types

Idea

The sum operation extends the binary operation on a commutative semigroup G to any family of elements of G indexed by an inhabited finite type.

We use additive terminology consistently with the linear algebra definition of finite sequences in commutative semigroups despite the use of multiplicative terminology for commutative semigroups in general.

Sums over counted types

Definition

sum-count-Commutative-Semigroup :
  {l1 l2 : Level} (G : Commutative-Semigroup l1) (A : UU l2) 
  is-inhabited A  count A  (A  type-Commutative-Semigroup G) 
  type-Commutative-Semigroup G
sum-count-Commutative-Semigroup G A |A| cA@(zero-ℕ , _) _ =
  ex-falso
    ( is-nonempty-is-inhabited
      ( |A|)
      ( is-empty-is-zero-number-of-elements-count cA refl))
sum-count-Commutative-Semigroup G A _ (succ-ℕ n , Fin-sn≃A) f =
  sum-fin-sequence-type-Commutative-Semigroup G n (f  map-equiv Fin-sn≃A)

Properties

Sums for a counted type are homotopy invariant

module _
  {l1 l2 : Level} (G : Commutative-Semigroup l1) (A : UU l2)
  (|A| : is-inhabited A)
  where

  htpy-sum-count-Commutative-Semigroup :
    (c : count A) 
    {f g : A  type-Commutative-Semigroup G}  (f ~ g) 
    sum-count-Commutative-Semigroup G A |A| c f 
    sum-count-Commutative-Semigroup G A |A| c g
  htpy-sum-count-Commutative-Semigroup cA@(zero-ℕ , _) _ =
    ex-falso
      ( is-nonempty-is-inhabited
        ( |A|)
        ( is-empty-is-zero-number-of-elements-count cA refl))
  htpy-sum-count-Commutative-Semigroup (succ-ℕ nA , _) H =
    htpy-sum-fin-sequence-type-Commutative-Semigroup G nA  i  H _)

Two counts for the same type produce equal sums

module _
  {l1 l2 : Level} (G : Commutative-Semigroup l1) (A : UU l2)
  (|A| : is-inhabited A)
  where

  abstract
    eq-sum-count-equiv-Commutative-Semigroup :
      (n : )  (equiv1 equiv2 : Fin (succ-ℕ n)  A) 
      (f : A  type-Commutative-Semigroup G) 
      sum-count-Commutative-Semigroup G A |A| (succ-ℕ n , equiv1) f 
      sum-count-Commutative-Semigroup G A |A| (succ-ℕ n , equiv2) f
    eq-sum-count-equiv-Commutative-Semigroup n equiv1 equiv2 f =
      equational-reasoning
      sum-fin-sequence-type-Commutative-Semigroup G n (f  map-equiv equiv1)
      
        sum-fin-sequence-type-Commutative-Semigroup
          ( G)
          ( n)
          ( (f  map-equiv equiv1)  (map-inv-equiv equiv1  map-equiv equiv2))
        by
          preserves-sum-permutation-fin-sequence-type-Commutative-Semigroup
            ( G)
            ( n)
            ( inv-equiv equiv1 ∘e equiv2)
            ( f  map-equiv equiv1)
       sum-fin-sequence-type-Commutative-Semigroup G n (f  map-equiv equiv2)
        by
          ap
            ( λ g 
              sum-fin-sequence-type-Commutative-Semigroup
                ( G)
                ( n)
                ( f  (g  map-equiv equiv2)))
            ( eq-htpy (is-section-map-inv-equiv equiv1))

    eq-sum-count-Commutative-Semigroup :
      (f : A  type-Commutative-Semigroup G) (c1 c2 : count A) 
      sum-count-Commutative-Semigroup G A |A| c1 f 
      sum-count-Commutative-Semigroup G A |A| c2 f
    eq-sum-count-Commutative-Semigroup f c1@(zero-ℕ , _) _ =
      ex-falso
        ( is-nonempty-is-inhabited
          ( |A|)
          ( is-empty-is-zero-number-of-elements-count c1 refl))
    eq-sum-count-Commutative-Semigroup f c1@(succ-ℕ n , e1) c2@(_ , e2)
      with double-counting c1 c2
    ... | refl = eq-sum-count-equiv-Commutative-Semigroup n e1 e2 f

Sums of counted families indexed by equivalent types are equal

module _
  {l1 l2 l3 : Level} (G : Commutative-Semigroup l1)
  (A : UU l2) (|A| : is-inhabited A) (B : UU l3) (|B| : is-inhabited B)
  (H : A  B)
  where

  abstract
    sum-equiv-count-Commutative-Semigroup :
      (cA : count A) (cB : count B) (f : A  type-Commutative-Semigroup G) 
      sum-count-Commutative-Semigroup G A |A| cA f 
      sum-count-Commutative-Semigroup G B |B| cB (f  map-inv-equiv H)
    sum-equiv-count-Commutative-Semigroup
      cA@(zero-ℕ , _) _ _ =
        ex-falso
        ( is-nonempty-is-inhabited
          ( |A|)
          ( is-empty-is-zero-number-of-elements-count cA refl))
    sum-equiv-count-Commutative-Semigroup
      cA@(succ-ℕ nA , Fin-nA≃A) cB@(_ , Fin-nB≃B) f
      with double-counting-equiv cA cB H
    ... | refl =
      preserves-sum-permutation-fin-sequence-type-Commutative-Semigroup
        ( G)
        ( nA)
        ( inv-equiv Fin-nA≃A ∘e inv-equiv H ∘e Fin-nB≃B)
        ( _) 
      htpy-sum-fin-sequence-type-Commutative-Semigroup
        ( G)
        ( nA)
        ( λ i  ap f (is-section-map-inv-equiv Fin-nA≃A _))

Sums of coproducts of counted types

module _
  {l1 l2 l3 : Level} (G : Commutative-Semigroup l1)
  (A : UU l2) (|A| : is-inhabited A) (B : UU l3) (|B| : is-inhabited B)
  (|A+B| : is-inhabited (A + B))
  where

  abstract
    distributive-sum-coproduct-count-Commutative-Semigroup :
      (cA : count A) (cB : count B) 
      (f : (A + B)  type-Commutative-Semigroup G) 
      sum-count-Commutative-Semigroup
        ( G)
        ( A + B)
        ( |A+B|)
        ( count-coproduct cA cB)
        ( f) 
      mul-Commutative-Semigroup G
        ( sum-count-Commutative-Semigroup G A |A| cA (f  inl))
        ( sum-count-Commutative-Semigroup G B |B| cB (f  inr))
    distributive-sum-coproduct-count-Commutative-Semigroup
      cA@(succ-ℕ nA , Fin-snA≃A) cB@(succ-ℕ nB , Fin-snB≃B) f =
        split-sum-fin-sequence-type-Commutative-Semigroup G nA nB _ 
        ap-mul-Commutative-Semigroup G
          ( htpy-sum-fin-sequence-type-Commutative-Semigroup G nA
            ( λ i  ap f (map-equiv-count-coproduct-inl-coproduct-Fin cA cB i)))
          ( htpy-sum-fin-sequence-type-Commutative-Semigroup G nB
            ( λ i  ap f (map-equiv-count-coproduct-inr-coproduct-Fin cA cB i)))
    distributive-sum-coproduct-count-Commutative-Semigroup
      cA@(zero-ℕ , _) cB@(succ-ℕ _ , _) _ =
        ex-falso
        ( is-nonempty-is-inhabited
          ( |A|)
          ( is-empty-is-zero-number-of-elements-count cA refl))
    distributive-sum-coproduct-count-Commutative-Semigroup
      cA@(zero-ℕ , _) cB@(zero-ℕ , _) _ =
        ex-falso
        ( is-nonempty-is-inhabited
          ( |A|)
          ( is-empty-is-zero-number-of-elements-count cA refl))
    distributive-sum-coproduct-count-Commutative-Semigroup
      cA@(succ-ℕ _ , _) cB@(zero-ℕ , _) _ =
        ex-falso
        ( is-nonempty-is-inhabited
          ( |B|)
          ( is-empty-is-zero-number-of-elements-count cB refl))

Sums over finite types

Definition

module _
  {l1 l2 : Level} (G : Commutative-Semigroup l1) (A : Inhabited-Finite-Type l2)
  where

  sum-finite-Commutative-Semigroup :
    (f : type-Inhabited-Finite-Type A  type-Commutative-Semigroup G) 
    type-Commutative-Semigroup G
  sum-finite-Commutative-Semigroup f =
    map-universal-property-set-quotient-trunc-Prop
      ( set-Commutative-Semigroup G)
      ( λ c 
        sum-count-Commutative-Semigroup G
          ( type-Inhabited-Finite-Type A)
          ( is-inhabited-type-Inhabited-Finite-Type A)
          ( c)
          ( f))
      ( eq-sum-count-Commutative-Semigroup G
        ( type-Inhabited-Finite-Type A)
        ( is-inhabited-type-Inhabited-Finite-Type A)
        ( f))
      ( is-finite-Inhabited-Finite-Type A)

Properties

The sum over a finite type is its sum over any count for the type

module _
  {l1 l2 : Level} (G : Commutative-Semigroup l1)
  (A : Inhabited-Finite-Type l2) (cA : count (type-Inhabited-Finite-Type A))
  where

  abstract
    eq-sum-finite-sum-count-Commutative-Semigroup :
      (f : type-Inhabited-Finite-Type A  type-Commutative-Semigroup G) 
      sum-finite-Commutative-Semigroup G A f 
      sum-count-Commutative-Semigroup G
        ( type-Inhabited-Finite-Type A)
        ( is-inhabited-type-Inhabited-Finite-Type A) cA f
    eq-sum-finite-sum-count-Commutative-Semigroup f =
      ap
        ( λ c  sum-finite-Commutative-Semigroup G ((_ , c) , _) f)
        ( all-elements-equal-type-trunc-Prop _ _) 
      htpy-universal-property-set-quotient-trunc-Prop
        ( set-Commutative-Semigroup G)
        ( λ c 
          sum-count-Commutative-Semigroup G
            ( type-Inhabited-Finite-Type A)
            ( is-inhabited-type-Inhabited-Finite-Type A)
            ( c)
            ( f))
        ( eq-sum-count-Commutative-Semigroup G
          ( type-Inhabited-Finite-Type A)
          ( is-inhabited-type-Inhabited-Finite-Type A)
          ( f))
        ( cA)

Sums over a finite type are homotopy invariant

module _
  {l1 l2 : Level} (G : Commutative-Semigroup l1) (A : Inhabited-Finite-Type l2)
  where

  abstract
    htpy-sum-finite-Commutative-Semigroup :
      {f g : type-Inhabited-Finite-Type A  type-Commutative-Semigroup G} 
      f ~ g 
      sum-finite-Commutative-Semigroup G A f 
      sum-finite-Commutative-Semigroup G A g
    htpy-sum-finite-Commutative-Semigroup {f} {g} H =
      let
        open
          do-syntax-trunc-Prop
            ( Id-Prop
              ( set-Commutative-Semigroup G)
              ( sum-finite-Commutative-Semigroup G A f)
              ( sum-finite-Commutative-Semigroup G A g))
      in do
        cA  is-finite-Inhabited-Finite-Type A
        equational-reasoning
          sum-finite-Commutative-Semigroup G A f
          
            sum-count-Commutative-Semigroup G
              ( type-Inhabited-Finite-Type A)
              ( is-inhabited-type-Inhabited-Finite-Type A)
              ( cA)
              ( f)
            by eq-sum-finite-sum-count-Commutative-Semigroup G A cA f
          
            sum-count-Commutative-Semigroup G
              ( type-Inhabited-Finite-Type A)
              ( is-inhabited-type-Inhabited-Finite-Type A)
              ( cA)
              ( g)
            by
              htpy-sum-count-Commutative-Semigroup
                ( G)
                ( type-Inhabited-Finite-Type A)
                ( is-inhabited-type-Inhabited-Finite-Type A)
                ( cA)
                ( H)
           sum-finite-Commutative-Semigroup G A g
            by inv (eq-sum-finite-sum-count-Commutative-Semigroup G A cA g)

Sums over finite types are preserved by equivalences

module _
  {l1 l2 l3 : Level} (G : Commutative-Semigroup l1)
  (A : Inhabited-Finite-Type l2)
  (B : Inhabited-Finite-Type l3)
  (H : equiv-Inhabited-Finite-Type A B)
  where

  abstract
    sum-equiv-finite-Commutative-Semigroup :
      (f : type-Inhabited-Finite-Type A  type-Commutative-Semigroup G) 
      sum-finite-Commutative-Semigroup G A f 
      sum-finite-Commutative-Semigroup G B (f  map-inv-equiv H)
    sum-equiv-finite-Commutative-Semigroup f =
      let
        open
          do-syntax-trunc-Prop
            ( Id-Prop
              ( set-Commutative-Semigroup G)
              ( sum-finite-Commutative-Semigroup G A f)
              ( sum-finite-Commutative-Semigroup G B (f  map-inv-equiv H)))
      in do
        cA  is-finite-Inhabited-Finite-Type A
        cB  is-finite-Inhabited-Finite-Type B
        ( eq-sum-finite-sum-count-Commutative-Semigroup G _ cA f 
          sum-equiv-count-Commutative-Semigroup G _ _ _ _ H cA cB f 
          inv (eq-sum-finite-sum-count-Commutative-Semigroup G _ cB _))

Sums over finite types distribute over coproducts

module _
  {l1 l2 l3 : Level} (G : Commutative-Semigroup l1)
  (A : Inhabited-Finite-Type l2)
  (B : Inhabited-Finite-Type l3)
  where

  abstract
    distributive-distributive-sum-coproduct-finite-Commutative-Semigroup :
      (f :
        type-Inhabited-Finite-Type A + type-Inhabited-Finite-Type B 
        type-Commutative-Semigroup G) 
      sum-finite-Commutative-Semigroup
        ( G)
        ( coproduct-Inhabited-Finite-Type A B)
        ( f) 
      mul-Commutative-Semigroup
        ( G)
        ( sum-finite-Commutative-Semigroup G A (f  inl))
        ( sum-finite-Commutative-Semigroup G B (f  inr))
    distributive-distributive-sum-coproduct-finite-Commutative-Semigroup f =
      let
        open
          do-syntax-trunc-Prop
            ( Id-Prop
              ( set-Commutative-Semigroup G)
              ( sum-finite-Commutative-Semigroup
                ( G)
                ( coproduct-Inhabited-Finite-Type A B)
                ( f))
              ( mul-Commutative-Semigroup
                ( G)
                ( sum-finite-Commutative-Semigroup G A (f  inl))
                ( sum-finite-Commutative-Semigroup G B (f  inr))))
      in do
        cA  is-finite-Inhabited-Finite-Type A
        cB  is-finite-Inhabited-Finite-Type B
        ( eq-sum-finite-sum-count-Commutative-Semigroup
            ( G)
            ( coproduct-Inhabited-Finite-Type A B)
            ( count-coproduct cA cB)
            ( f) 
          distributive-sum-coproduct-count-Commutative-Semigroup G _ _ _ _ _
            ( cA)
            ( cB)
            ( f) 
          ap-mul-Commutative-Semigroup G
            ( inv
              ( eq-sum-finite-sum-count-Commutative-Semigroup G A cA (f  inl)))
            ( inv
              ( eq-sum-finite-sum-count-Commutative-Semigroup
                ( G)
                ( B)
                ( cB)
                ( f  inr))))
  • Sum at Wikidata

Recent changes