This is an archived version pinned as of the submission of my master's thesis. An up-to-date version may be found online.

Function groups of abelian groups

module group-theory.function-abelian-groups where
Imports
open import foundation.identity-types
open import foundation.sets
open import foundation.universe-levels

open import group-theory.abelian-groups
open import group-theory.dependent-products-abelian-groups
open import group-theory.groups
open import group-theory.monoids
open import group-theory.semigroups

Idea

Given an abelian group G and a type X, the function group G^X consists of functions from X to the underlying type of G. The group operations are given pointwise.

Definition

module _
  {l1 l2 : Level} (A : Ab l1) (X : UU l2)
  where

  function-Ab : Ab (l1 ⊔ l2)
  function-Ab = Π-Ab X (λ _ → A)

  group-function-Ab : Group (l1 ⊔ l2)
  group-function-Ab = group-Π-Ab X (λ _ → A)

  semigroup-function-Ab : Semigroup (l1 ⊔ l2)
  semigroup-function-Ab = semigroup-Π-Ab X (λ _ → A)

  set-function-Ab : Set (l1 ⊔ l2)
  set-function-Ab = set-Π-Ab X (λ _ → A)

  type-function-Ab : UU (l1 ⊔ l2)
  type-function-Ab = type-Π-Ab X (λ _ → A)

  add-function-Ab :
    (f g : type-function-Ab) → type-function-Ab
  add-function-Ab = add-Π-Ab X (λ _ → A)

  associative-add-function-Ab :
    (f g h : type-function-Ab) →
    add-function-Ab (add-function-Ab f g) h =
    add-function-Ab f (add-function-Ab g h)
  associative-add-function-Ab = associative-add-Π-Ab X (λ _ → A)

  zero-function-Ab : type-function-Ab
  zero-function-Ab = zero-Π-Ab X (λ _ → A)

  left-unit-law-add-function-Ab :
    (f : type-function-Ab) → add-function-Ab zero-function-Ab f = f
  left-unit-law-add-function-Ab = left-unit-law-add-Π-Ab X (λ _ → A)

  right-unit-law-add-function-Ab :
    (f : type-function-Ab) → add-function-Ab f zero-function-Ab = f
  right-unit-law-add-function-Ab = right-unit-law-add-Π-Ab X (λ _ → A)

  monoid-function-Ab : Monoid (l1 ⊔ l2)
  monoid-function-Ab = monoid-Π-Ab X (λ _ → A)

  neg-function-Ab : type-function-Ab → type-function-Ab
  neg-function-Ab = neg-Π-Ab X (λ _ → A)

  left-inverse-law-add-function-Ab :
    (f : type-function-Ab) →
    add-function-Ab (neg-function-Ab f) f = zero-function-Ab
  left-inverse-law-add-function-Ab =
    left-inverse-law-add-Π-Ab X (λ _ → A)

  right-inverse-law-add-function-Ab :
    (f : type-function-Ab) →
    add-function-Ab f (neg-function-Ab f) = zero-function-Ab
  right-inverse-law-add-function-Ab =
    right-inverse-law-add-Π-Ab X (λ _ → A)

  commutative-add-function-Ab :
    (f g : type-function-Ab) →
    add-function-Ab f g = add-function-Ab g f
  commutative-add-function-Ab = commutative-add-Π-Ab X (λ _ → A)